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.

Metadata

Release files for fms-odata-spec 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fms-odata-spec 2.0.1
File Size Uploaded
fms_odata_spec-2.0.1.tar.gz 33.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fms-odata-spec 2.0.1
File Interpreter ABI Platform
fms_odata_spec-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 61.3 kB

Release files / fms_odata_spec-2.0.1.tar.gz

Download URL fms_odata_spec-2.0.1.tar.gz
Size 33.0 kB
Tags Source
SHA-256 checksum
How to use checksums
75be88059329bac94a19edc4d9c9d217766804d76d43bfe70692dbedcc3c55c2
BLAKE2b-256 checksum
How to use checksums
36bf876b92758366a66eba40c48ae77de86f553c828949cd3ecc3482caa58e4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Release files / fms_odata_spec-2.0.1-py3-none-any.whl

Download URL fms_odata_spec-2.0.1-py3-none-any.whl
Size 28.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b57fe9d34b74a52f5a4d21c6aa15c535fa5ea7a800113c4c8acddd2262bf8c03
BLAKE2b-256 checksum
How to use checksums
ed25de2c850c54fcaf8548d8ed8f18549d5158ce962a55b25e5a8bd28c9b93e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page