transitio
AOI-driven OSM and GTFS acquisition, validation and repair — companion to pyrosm and cafein. transitio moves the raw ingredients of routing — OSM extracts and GTFS timetables — from the open data ecosystem to your area of interest, validated and repaired, ready for cafein to brew into routing results.
Status: early development. Acquisition (Mobility Database catalog + OSM
extracts), GTFS validation, repair and cropping are in place, tied together by
the one-call transitio.fetch pipeline.
Quick example
import transitio
# One call: OSM extract + validated GTFS feeds for an area of interest.
result = transitio.fetch(helsinki_polygon) # any shapely geometry,
# bbox tuple or place name
result.osm_pbf # cropped OSM extract (path)
result.feeds # downloaded, cropped and validated GTFS feeds (paths)
result.reports # per-feed merged validation reports
result.skipped # (feed id, reason) for anything left out
net = result.to_cafein() # routable cafein.TransportNetwork
osm = result.to_pyrosm() # pyrosm.OSM reader over the extract
fetch accepts when="2026-09-01" to pick the dataset versions covering a
service day (needs a free Mobility Database API token, passed as
refresh_token= or via the MOBILITY_API_REFRESH_TOKEN environment
variable), modes=["rail", "tram"] to keep only feeds serving given modes,
and repair=True to repair feeds before use. With a token, GTFS downloads
are catalogued dataset versions verified against catalog checksums; without
one, the latest hosted zips are fetched as-is — unverified moving targets.
Inferring missing route shapes
Many feeds ship without shapes.txt, leaving every consumer to draw
straight lines between stops. infer_shapes fills that gap from an OSM
extract — matching OSM route relations where they exist, map matching
over tram, rail and bus-drivable networks where they do not — and
writes a feed carrying real alignments:
report = transitio.infer_shapes(
"feed.zip", "shaped.zip", pbf, strictness="strict"
)
report["written"] # shapes written
report["shapes"] # per shape: method, matched OSM relation, score
report["skipped"] # per refused pattern: the stage that refused it
How much inference is acceptable is yours to choose. "strict" (the
default) writes only unambiguous matches; "relaxed" and
"permissive" trade certainty for coverage, which is the trade worth
making where a feed has no shapes at all and the alternative is a
straight line. Every shape is validated against the pattern's own stops
before it is written — each stop must lie on the alignment, in order —
so no level writes a shape the feed's own data contradicts.
On the Helsinki tram fixture with the feed's shapes withheld, the
levels measured (scripts/validate_shapes.py):
| level | shapes written | median length error | worst offset |
|---|---|---|---|
| strict | 35/80 | 0.9% | 42 m |
| relaxed | 40/80 | 0.9% | 34 m |
| permissive | 43/80 | 0.9% | 184 m |
Helsinki's OSM data is unusually good; expect a worse trade where it is not, and keep the report.
Lower-level access
Each pipeline stage is available on its own:
db = transitio.MobilityDatabase()
feeds = db.search_feeds(aoi=helsinki_polygon)
dataset = db.dataset_for(feeds[0], when="2026-09-01")
path = db.download(dataset) # cached, checksum-verified
report = db.validation_report(dataset) # hosted canonical-validator report
pbf = transitio.fetch_pbf(helsinki_polygon) # cropped OSM extract
validation = transitio.validate_feed(path) # canonical-code notices
transitio.repair_feed(path, "repaired.zip") # gtfstidy-contract repair
transitio.crop_feed(path, "cropped.zip", aoi=helsinki_polygon)
Documentation
The Sphinx site lives in docs/. Building it needs transitio itself
installed (autodoc imports the real package) plus the Sphinx toolchain:
pip install . -r docs/requirements.txt
sphinx-build -b html docs docs/_build/html
The hosted version lives at https://transitio.readthedocs.io.
Installation
pip install transitio
Binary wheels cover Linux, macOS and Windows. Building from source instead
requires a Rust toolchain (pip install .).
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 transitio-0.11.0.tar.gz.
File metadata
- Download URL: transitio-0.11.0.tar.gz
- Upload date:
- Size: 217.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a26cc6d0da7a48b904f11e2914906663485f45721cc0d5d68e896b2e8ff09065
|
|
| MD5 |
ee28e82f441e29ef5cea563021f64dff
|
|
| BLAKE2b-256 |
6eb8b7fbae2ee61641fd2945b83858bc9b7c3e3ff9945a0dbed4b9f61b02eee1
|
Provenance
The following attestation bundles were made for transitio-0.11.0.tar.gz:
Publisher:
release.yaml on cafein-py/transitio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transitio-0.11.0.tar.gz -
Subject digest:
a26cc6d0da7a48b904f11e2914906663485f45721cc0d5d68e896b2e8ff09065 - Sigstore transparency entry: 2759952105
- Sigstore integration time:
-
Permalink:
cafein-py/transitio@9f8629278e909033946fe2b4412e88aebb45009e -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/cafein-py
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9f8629278e909033946fe2b4412e88aebb45009e -
Trigger Event:
push
-
Statement type:
File details
Details for the file transitio-0.11.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: transitio-0.11.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce3dde7c6a913b19ff7bb5b8c64c3932a4f7cda7b8063bc0bd9fa81d4ce7b51a
|
|
| MD5 |
63258586c72c0f60e3a302d65446e25f
|
|
| BLAKE2b-256 |
416c5e4b0606ab3ae07a23f36cbefca8e19400bec08b39b47ccccd9672cb6322
|
Provenance
The following attestation bundles were made for transitio-0.11.0-cp310-abi3-win_amd64.whl:
Publisher:
release.yaml on cafein-py/transitio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transitio-0.11.0-cp310-abi3-win_amd64.whl -
Subject digest:
ce3dde7c6a913b19ff7bb5b8c64c3932a4f7cda7b8063bc0bd9fa81d4ce7b51a - Sigstore transparency entry: 2759952914
- Sigstore integration time:
-
Permalink:
cafein-py/transitio@9f8629278e909033946fe2b4412e88aebb45009e -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/cafein-py
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9f8629278e909033946fe2b4412e88aebb45009e -
Trigger Event:
push
-
Statement type:
File details
Details for the file transitio-0.11.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: transitio-0.11.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20e34ac87e68f3b2af425414b5500b03796df835173dbc9ab4bd85777dcb113c
|
|
| MD5 |
d18bb49219174f4f99d1179309f107d7
|
|
| BLAKE2b-256 |
ad47cb030bff0cb1671533c74e70c4d6b1b71e316a53229499d1481ad604ff68
|
Provenance
The following attestation bundles were made for transitio-0.11.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yaml on cafein-py/transitio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transitio-0.11.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
20e34ac87e68f3b2af425414b5500b03796df835173dbc9ab4bd85777dcb113c - Sigstore transparency entry: 2759952721
- Sigstore integration time:
-
Permalink:
cafein-py/transitio@9f8629278e909033946fe2b4412e88aebb45009e -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/cafein-py
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9f8629278e909033946fe2b4412e88aebb45009e -
Trigger Event:
push
-
Statement type:
File details
Details for the file transitio-0.11.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: transitio-0.11.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
258479dbff6e981d8bd88e466d2da9934b88843dda0905cc34a1ca5148f70446
|
|
| MD5 |
543d25bd78b422e1e0b977daef7fc5a4
|
|
| BLAKE2b-256 |
5ca6c83c466046a2e7084fdf7e0ef2eeede78b26be646da50f1b55298a9b5e82
|
Provenance
The following attestation bundles were made for transitio-0.11.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yaml on cafein-py/transitio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transitio-0.11.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
258479dbff6e981d8bd88e466d2da9934b88843dda0905cc34a1ca5148f70446 - Sigstore transparency entry: 2759953411
- Sigstore integration time:
-
Permalink:
cafein-py/transitio@9f8629278e909033946fe2b4412e88aebb45009e -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/cafein-py
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9f8629278e909033946fe2b4412e88aebb45009e -
Trigger Event:
push
-
Statement type:
File details
Details for the file transitio-0.11.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: transitio-0.11.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60e600230ea57db34645f84556bff1f212f4c18470792ab599bdf3f38037a62c
|
|
| MD5 |
495eaff6205e3bd235462c90c9a69582
|
|
| BLAKE2b-256 |
64b3a9eb3dd09ac251e068a9624a2bd3e625dfb88de97557dfb6e7c3338e4fdd
|
Provenance
The following attestation bundles were made for transitio-0.11.0-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yaml on cafein-py/transitio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transitio-0.11.0-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
60e600230ea57db34645f84556bff1f212f4c18470792ab599bdf3f38037a62c - Sigstore transparency entry: 2759953074
- Sigstore integration time:
-
Permalink:
cafein-py/transitio@9f8629278e909033946fe2b4412e88aebb45009e -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/cafein-py
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9f8629278e909033946fe2b4412e88aebb45009e -
Trigger Event:
push
-
Statement type:
File details
Details for the file transitio-0.11.0-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: transitio-0.11.0-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58ca8027fceb30456523984c83f7d9e5ac365dfb394bab6487249950a60438e2
|
|
| MD5 |
68589d0b24a608de361ea1477dbeea91
|
|
| BLAKE2b-256 |
9d24efc99952b2d7d034ec997ea80b4ae606e0461919ca282f50ab44e94722cf
|
Provenance
The following attestation bundles were made for transitio-0.11.0-cp310-abi3-macosx_10_12_x86_64.whl:
Publisher:
release.yaml on cafein-py/transitio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
transitio-0.11.0-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
58ca8027fceb30456523984c83f7d9e5ac365dfb394bab6487249950a60438e2 - Sigstore transparency entry: 2759952457
- Sigstore integration time:
-
Permalink:
cafein-py/transitio@9f8629278e909033946fe2b4412e88aebb45009e -
Branch / Tag:
refs/tags/v0.11.0 - Owner: https://github.com/cafein-py
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@9f8629278e909033946fe2b4412e88aebb45009e -
Trigger Event:
push
-
Statement type: