..
  This file is generated by setup.py

Access FileMaker(tm) Server Databases
=====================================

Fmkr is a Python library to access FileMaker(tm) Server 8 Advanced databases
via the XML publishing interface.

"FileMaker" is a registered trademark of Claris International Inc.

:Author: `Christoph Gohlke <https://www.cgohlke.com>`_
:License: BSD-3-Clause
:Version: 2026.1.6

Requirements
------------

This revision was tested with the following requirements and dependencies
(other versions may work):

- `CPython <https://www.python.org>`_ 3.11.9, 3.12.10, 3.13.11, 3.14.2
- `Lxml <https://pypi.org/project/lxml/>`_ 6.0.2
- `FileMaker(tm) Server 8 Advanced <https://www.claris.com/filemaker/>`_

Revisions
---------

2026.1.6

- Improve code quality.
- Support Python 3.12, 3.13, and 3.14.
- Drop support for Python 3.8, 3.9, and 3.10.

2022.9.28

- Convert docstrings to Google style with Sphinx directives.

2022.3.24

- Add type hints.
- Improve string representations of objects.
- Add immutable sequence interface to FMPXMLResult.
- Drop support for Python 3.6 and 3.7 (NEP 29).

2021.3.6

- Update copyright and formatting.

2020.1.1

- Drop support for Python 3.5.
- Update copyright.

2018.8.15

- Move fmkr.py into fmkr package.

2018.5.25

- Use lxml instead of minidom to parse FMPXMLResult.
- Improve string representations of FMPXMLResult and FMField.
- Update error codes.
- Drop support for Python 2.

2006.10.30

- Initial release.

References
----------

1. http://www.filemaker.com/downloads/documentation/fmsa8_custom_web_guide.pdf

Examples
--------

.. code-block:: python

    >>> from fmkr import FM, FMError
    >>> fmi = FM('filemaker.domain.com', 80, 'http')
    >>> fmi.set_db_data('database', 'layout', maxret=5)
    >>> fmi.set_db_password('fmuser', 'password')
    >>> # create a new record
    >>> fmi.add_db_param('FIRST', 'John')
    >>> fmi.add_db_param('LAST', 'Doe')
    >>> fmi.fm_new()
    >>> # find and sort records
    >>> fmi.add_db_param('LAST', 'Doe', 'bw')
    >>> fmi.add_sort_param('LAST', 'ascend', 1)
    >>> fmi.add_sort_param('FIRST', 'ascend', 2)
    >>> result = fmi.fm_find()
    >>> for record in result:
    ...     print(record['FIRST'], record['LAST'])
    ...
    John Doe
    >>> # delete record
    >>> recid = result[0]['RECORDID']
    >>> fmi.set_record_id(recid)
    >>> fmi.fm_delete()
    >>> # catch an exception
    >>> try:
    ...     fmi.add_db_param('LAST', 'Doe', 'cn')
    ...     fmi.fm_find()
    ... except FMError as exc:
    ...     print(exc)
    ...
    FileMaker Error 401: No records match the request