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). $metadataparsing helpers and EDM model types (metadata).- Script execution types and response parsing (
scripts). - Container field upload/download helpers and MIME sniffing (
containers). $batchrequest 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.mdat the repository root for the same list with more detail.
- PyPI publishing workflow —
.github/workflows/py-publish.ymlexists and triggers onpy-v*tag pushes. Remaining: create a PyPI API token, add it as thePYPI_API_TOKENrepo secret, optionally create apypienvironment for protection rules, then re-push the tag to trigger. SeeAGENTS.mdfor full steps. - LICENSE bundling — DONE.
LICENSEis copied into this directory and declared as a wheel artifact + sdist include inpyproject.toml; verified it ships in both the wheel and sdist. - CHANGELOG — add
CHANGELOG.mdwith 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.ymlonceactions/setup-pythonsupports it. - Async token-refresh — document that
FMOAuthAuthConfig.on_unauthorizedis 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb21d9ea004d338f9b614fcc62da880175a0627880038645a97609267c8afd59
|
|
| MD5 |
d77511e8f1cbef9e78dfebadf5f5c831
|
|
| BLAKE2b-256 |
b4d0afba6f294a8d2d310a5e8448c645715e323e77bfb03ba926f806da8161ad
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64907c77f75fc906e209cc13f818d4a7e33812e223b22c07eb7b54c7c7d1ddd9
|
|
| MD5 |
98f4d550e4b90a062f97e653cc8018f4
|
|
| BLAKE2b-256 |
3999b1fccddd08e949139e2fcebec2457d56a74d9c0cf460d029473a7c84166c
|