Skip to main content

fms-odata-spec (Python)

Python types and spec definitions for the Claris FileMaker Server OData API.

This is the Python companion to @fms-odata/spec-ts. Both packages mirror the same specification (defined in the fms-odata-spec repository) and are published independently — pick the one matching your runtime. The Python package has no runtime dependency on the TypeScript package (or vice versa).

What's in the box

  • Version identifiers and a feature-flag matrix for Claris FileMaker 2023, 2024, 2025, and 2026 (versions).
  • Authentication helpers and config types for Basic and OAuth Bearer auth (auth).
  • Endpoint descriptors and version-scoped lookup helpers (endpoints).
  • OData query-option types and literal-formatting helpers (query_options).
  • $metadata parsing helpers and EDM model types (metadata).
  • Script execution types and response parsing (scripts).
  • Container field upload/download helpers and MIME sniffing (containers).
  • $batch request and result types (batch).
  • Webhook management types (webhooks).
  • Schema modification (DDL) types and field-type parsing (schema).
  • Error class hierarchy for OData responses (errors).

All models are stdlib dataclasses (no pydantic / no validation framework). Discriminated unions from the TS spec are modeled with typing.Literal discriminator fields. The package ships a py.typed marker (PEP 561) so static type checkers pick up the annotations.

Install

pip install fms-odata-spec

For local development from this repository:

cd packages/fms-odata-spec-py
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest

Usage

from fms_odata_spec import (
    FM_VERSION_MATRIX,
    has_feature,
    basic_auth,
    parse_server_version,
    format_literal,
    FMODataError,
)

# Check feature availability per FileMaker Server version.
# Feature names are snake_case (matching the FMFeatureFlags dataclass fields).
assert has_feature("26", "scripts_by_fmsid") is True
assert has_feature("20", "webhooks") is False

# Build a Basic auth header value.
hdr = basic_auth("admin", "secret")  # -> "Basic YWRtaW46c2VjcmV0"

# Detect the server version from a $metadata XML payload.
ver = parse_server_version(
    '<Annotation Term="Org.OData.Core.V1.ProductVersion" String="26.0.1.500"/>'
)
assert ver.major == 26

# Format an OData $filter literal.
assert format_literal("O'Brien") == "'O''Brien'"
assert format_literal(42) == "42"

Versioning

This package is versioned independently of @fms-odata/spec-ts. It is published to PyPI as fms-odata-spec.

Roadmap

IMPORTANT — these items must be addressed before publishing to PyPI. See AGENTS.md at the repository root for the same list with more detail.

  • PyPI publishing workflow.github/workflows/py-publish.yml exists and triggers on py-v* tag pushes. Remaining: create a PyPI API token, add it as the PYPI_API_TOKEN repo secret, optionally create a pypi environment for protection rules, then re-push the tag to trigger. See AGENTS.md for full steps.
  • LICENSE bundling — DONE. LICENSE is copied into this directory and declared as a wheel artifact + sdist include in pyproject.toml; verified it ships in both the wheel and sdist.
  • CHANGELOG — add CHANGELOG.md with the 2.0.0 entry.
  • ODataEntity[T] ergonomics — confirm the wrapping-dataclass shape (envelope.entity.field) is acceptable before the first release; it is a breaking change to alter afterwards.
  • CI matrix — add Python 3.14 to py-ci.yml once actions/setup-python supports it.
  • Async token-refresh — document that FMOAuthAuthConfig.on_unauthorized is typed but not invoked by this package (downstream must wire it).
  • Shared schema source — revisit whether both language packages should be generated from a single JSON Schema / CSDL source before they drift.

License

MIT — see the repository LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fms_odata_spec-2.0.1.tar.gz (33.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fms_odata_spec-2.0.1-py3-none-any.whl (28.3 kB view details)

Uploaded Python 3

File details

Details for the file fms_odata_spec-2.0.1.tar.gz.

File metadata

  • Download URL: fms_odata_spec-2.0.1.tar.gz
  • Upload date:
  • Size: 33.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for fms_odata_spec-2.0.1.tar.gz
Algorithm Hash digest
SHA256 75be88059329bac94a19edc4d9c9d217766804d76d43bfe70692dbedcc3c55c2
MD5 d64ef248997585e330858348438ea9d3
BLAKE2b-256 36bf876b92758366a66eba40c48ae77de86f553c828949cd3ecc3482caa58e4a

See more details on using hashes here.

File details

Details for the file fms_odata_spec-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: fms_odata_spec-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 28.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for fms_odata_spec-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b57fe9d34b74a52f5a4d21c6aa15c535fa5ea7a800113c4c8acddd2262bf8c03
MD5 013ea702fc7d1ef47c958cbefdb0cc87
BLAKE2b-256 ed25de2c850c54fcaf8548d8ed8f18549d5158ce962a55b25e5a8bd28c9b93e1

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 files

2.0.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page