Skip to main content

Python types and spec definitions for the FileMaker Server OData API, mirroring @fms-odata/spec-ts.

Project description

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.

Project details


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.0.tar.gz (29.8 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.0-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for fms_odata_spec-2.0.0.tar.gz
Algorithm Hash digest
SHA256 bb21d9ea004d338f9b614fcc62da880175a0627880038645a97609267c8afd59
MD5 d77511e8f1cbef9e78dfebadf5f5c831
BLAKE2b-256 b4d0afba6f294a8d2d310a5e8448c645715e323e77bfb03ba926f806da8161ad

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for fms_odata_spec-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 64907c77f75fc906e209cc13f818d4a7e33812e223b22c07eb7b54c7c7d1ddd9
MD5 98f4d550e4b90a062f97e653cc8018f4
BLAKE2b-256 3999b1fccddd08e949139e2fcebec2457d56a74d9c0cf460d029473a7c84166c

See more details on using hashes here.

Supported by

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