gtfs-guru 0.1.1__tar.gz → 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/Cargo.lock +8 -8
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/PKG-INFO +19 -19
- {gtfs_guru-0.1.1/crates/gtfs_validator_python → gtfs_guru-0.9.0}/README.md +18 -18
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_model/Cargo.toml +1 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_model/src/lib.rs +1 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/Cargo.toml +2 -2
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/csv_schema.rs +5 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/csv_validation.rs +388 -114
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/feed.rs +43 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/geojson.rs +24 -14
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/input.rs +9 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/bikes_allowance.rs +34 -29
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/date_trips.rs +37 -4
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_key.rs +26 -3
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/expired_calendar.rs +4 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_attribute_agency_id.rs +5 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_product_default_rider_categories.rs +10 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_rules.rs +26 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_transfer_rule_duration_limit.rs +4 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/feed_expiration_date.rs +62 -10
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/feed_info.rs +88 -14
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/lat_lon.rs +11 -2
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/location_id_foreign_key.rs +9 -6
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/locations_geojson_presence.rs +7 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/missing_stops_file.rs +4 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/overlapping_pickup_drop_off_zone.rs +9 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/parent_station.rs +1 -164
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/referential_integrity.rs +84 -30
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/route_color_contrast.rs +2 -2
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/shape_to_stop_matching.rs +6 -2
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/shapes.rs +2 -2
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_time_travel_speed.rs +198 -21
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_shape_dist_presence.rs +10 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_time.rs +58 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers.rs +6 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/trips.rs +28 -14
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/url_consistency.rs +10 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/url_syntax.rs +7 -2
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/string_pool.rs +11 -1
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/tests/integration_tests.rs +44 -6
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_python/Cargo.toml +3 -3
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0/crates/gtfs_validator_python}/README.md +18 -18
- {gtfs_guru-0.1.1/crates/gtfs_validator_python/python/gtfs_validator → gtfs_guru-0.9.0/crates/gtfs_validator_python/python/gtfs_guru}/__init__.py +4 -4
- {gtfs_guru-0.1.1/crates/gtfs_validator_python/python/gtfs_validator → gtfs_guru-0.9.0/crates/gtfs_validator_python/python/gtfs_guru}/__init__.pyi +4 -4
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_python/src/lib.rs +4 -4
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_report/Cargo.toml +3 -3
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_report/src/lib.rs +2 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/pyproject.toml +1 -1
- gtfs_guru-0.9.0/python/gtfs_guru/__init__.py +31 -0
- gtfs_guru-0.9.0/python/gtfs_guru/__init__.pyi +234 -0
- gtfs_guru-0.9.0/python/gtfs_guru/py.typed +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/Cargo.toml +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/benches/benchmark_loading.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/benches/benchmark_shape_matching.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/build.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/csv_reader.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/engine.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/lib.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/notice.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/notice_schema.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/progress.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/agency_consistency.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/attribution_without_role.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/bidirectional_exit_gate.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/block_trips_with_overlapping_stop_times.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/booking_rules.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/calendar.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/calendar_presence.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/continuous_pickup_drop_off.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_fare_media.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_route_name.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_stop_sequence.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_attributes.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_leg_join_rule.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_leg_rule_network_id_foreign_key.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_media_name.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_transfer_rule_transfer_count.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/feed_service_date.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/frequencies.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/google_rules.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/location_has_stop_times.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/location_type.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/locations_geojson_notices.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/matching_feed_and_agency_lang.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/missing_level_id.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/missing_trip_edge.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/mod.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/network_id_consistency.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/overlapping_frequency.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_dangling_generic_node.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_endpoint_type.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_loop.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_reachable_location.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathways.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pickup_booking_rule_id.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pickup_drop_off_type.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pickup_drop_off_window.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/required_fields.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/required_non_empty.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/route_agency_id.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/routes.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/shape_usage.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/single_shape_point.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_time_increasing_distance.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_geography_id_presence.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_record.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_zone_id.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stops.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/timeframe_overlap.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/timeframe_service_id_foreign_key.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/timeframe_start_and_end_time.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfer_distance.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_in_seat_transfer_type.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_stop_ids_conditional.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_stop_type.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_trip_reference.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/translation_field_and_reference.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/trip_service_id_foreign_key.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/trip_shape_distance.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unique_geography_id.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unused_agency.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unused_route.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unused_stop.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/table_status.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/timing.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/validation_context.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/validator.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/test_duplicate_repro.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_python/.cargo/config.toml +0 -0
- {gtfs_guru-0.1.1/crates/gtfs_validator_python/python/gtfs_validator → gtfs_guru-0.9.0/crates/gtfs_validator_python/python/gtfs_guru}/py.typed +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_report/src/html.rs +0 -0
- {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_report/src/sarif.rs +0 -0
|
@@ -1630,7 +1630,7 @@ dependencies = [
|
|
|
1630
1630
|
|
|
1631
1631
|
[[package]]
|
|
1632
1632
|
name = "gtfs-guru"
|
|
1633
|
-
version = "0.
|
|
1633
|
+
version = "0.9.0"
|
|
1634
1634
|
dependencies = [
|
|
1635
1635
|
"anyhow",
|
|
1636
1636
|
"chrono",
|
|
@@ -1647,7 +1647,7 @@ dependencies = [
|
|
|
1647
1647
|
|
|
1648
1648
|
[[package]]
|
|
1649
1649
|
name = "gtfs-guru-core"
|
|
1650
|
-
version = "0.
|
|
1650
|
+
version = "0.9.0"
|
|
1651
1651
|
dependencies = [
|
|
1652
1652
|
"anyhow",
|
|
1653
1653
|
"chrono",
|
|
@@ -1670,7 +1670,7 @@ dependencies = [
|
|
|
1670
1670
|
|
|
1671
1671
|
[[package]]
|
|
1672
1672
|
name = "gtfs-guru-gui"
|
|
1673
|
-
version = "0.
|
|
1673
|
+
version = "0.9.0"
|
|
1674
1674
|
dependencies = [
|
|
1675
1675
|
"anyhow",
|
|
1676
1676
|
"chrono",
|
|
@@ -1689,7 +1689,7 @@ dependencies = [
|
|
|
1689
1689
|
|
|
1690
1690
|
[[package]]
|
|
1691
1691
|
name = "gtfs-guru-model"
|
|
1692
|
-
version = "0.
|
|
1692
|
+
version = "0.9.0"
|
|
1693
1693
|
dependencies = [
|
|
1694
1694
|
"chrono",
|
|
1695
1695
|
"compact_str",
|
|
@@ -1699,7 +1699,7 @@ dependencies = [
|
|
|
1699
1699
|
|
|
1700
1700
|
[[package]]
|
|
1701
1701
|
name = "gtfs-guru-python"
|
|
1702
|
-
version = "0.
|
|
1702
|
+
version = "0.9.0"
|
|
1703
1703
|
dependencies = [
|
|
1704
1704
|
"chrono",
|
|
1705
1705
|
"gtfs-guru-core",
|
|
@@ -1713,7 +1713,7 @@ dependencies = [
|
|
|
1713
1713
|
|
|
1714
1714
|
[[package]]
|
|
1715
1715
|
name = "gtfs-guru-report"
|
|
1716
|
-
version = "0.
|
|
1716
|
+
version = "0.9.0"
|
|
1717
1717
|
dependencies = [
|
|
1718
1718
|
"anyhow",
|
|
1719
1719
|
"chrono",
|
|
@@ -1727,7 +1727,7 @@ dependencies = [
|
|
|
1727
1727
|
|
|
1728
1728
|
[[package]]
|
|
1729
1729
|
name = "gtfs-guru-wasm"
|
|
1730
|
-
version = "0.
|
|
1730
|
+
version = "0.9.0"
|
|
1731
1731
|
dependencies = [
|
|
1732
1732
|
"chrono",
|
|
1733
1733
|
"console_error_panic_hook",
|
|
@@ -1742,7 +1742,7 @@ dependencies = [
|
|
|
1742
1742
|
|
|
1743
1743
|
[[package]]
|
|
1744
1744
|
name = "gtfs-guru-web"
|
|
1745
|
-
version = "0.
|
|
1745
|
+
version = "0.9.0"
|
|
1746
1746
|
dependencies = [
|
|
1747
1747
|
"anyhow",
|
|
1748
1748
|
"axum",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gtfs-guru
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -21,14 +21,14 @@ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
|
21
21
|
Project-URL: Homepage, https://github.com/abasis-ltd/gtfs.guru
|
|
22
22
|
Project-URL: Repository, https://github.com/abasis-ltd/gtfs.guru
|
|
23
23
|
|
|
24
|
-
# GTFS
|
|
24
|
+
# GTFS Guru Python
|
|
25
25
|
|
|
26
26
|
High-performance GTFS feed validator with Python bindings. Written in Rust, exposed via PyO3.
|
|
27
27
|
|
|
28
28
|
## Installation
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
pip install gtfs-
|
|
31
|
+
pip install gtfs-guru
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
### From Source
|
|
@@ -36,16 +36,16 @@ pip install gtfs-validator
|
|
|
36
36
|
```bash
|
|
37
37
|
pip install maturin
|
|
38
38
|
maturin build --release
|
|
39
|
-
pip install target/wheels/
|
|
39
|
+
pip install target/wheels/gtfs_guru-*.whl
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Quick Start
|
|
43
43
|
|
|
44
44
|
```python
|
|
45
|
-
import
|
|
45
|
+
import gtfs_guru
|
|
46
46
|
|
|
47
47
|
# Validate a GTFS feed
|
|
48
|
-
result =
|
|
48
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
49
49
|
|
|
50
50
|
print(f"Valid: {result.is_valid}")
|
|
51
51
|
print(f"Errors: {result.error_count}")
|
|
@@ -73,7 +73,7 @@ Validate a GTFS feed.
|
|
|
73
73
|
|
|
74
74
|
**Example:**
|
|
75
75
|
```python
|
|
76
|
-
result =
|
|
76
|
+
result = gtfs_guru.validate(
|
|
77
77
|
"/path/to/gtfs.zip",
|
|
78
78
|
country_code="US",
|
|
79
79
|
date="2025-01-15"
|
|
@@ -98,7 +98,7 @@ async def main():
|
|
|
98
98
|
def on_progress(info):
|
|
99
99
|
print(f"{info.stage}: {info.current}/{info.total}")
|
|
100
100
|
|
|
101
|
-
result = await
|
|
101
|
+
result = await gtfs_guru.validate_async(
|
|
102
102
|
"/path/to/gtfs.zip",
|
|
103
103
|
on_progress=on_progress
|
|
104
104
|
)
|
|
@@ -111,8 +111,8 @@ asyncio.run(main())
|
|
|
111
111
|
Get validator version.
|
|
112
112
|
|
|
113
113
|
```python
|
|
114
|
-
>>>
|
|
115
|
-
'0.
|
|
114
|
+
>>> gtfs_guru.version()
|
|
115
|
+
'0.9.0'
|
|
116
116
|
```
|
|
117
117
|
|
|
118
118
|
#### `notice_codes() -> list[str]`
|
|
@@ -120,9 +120,9 @@ Get validator version.
|
|
|
120
120
|
Get list of all available notice codes.
|
|
121
121
|
|
|
122
122
|
```python
|
|
123
|
-
>>> len(
|
|
123
|
+
>>> len(gtfs_guru.notice_codes())
|
|
124
124
|
164
|
|
125
|
-
>>>
|
|
125
|
+
>>> gtfs_guru.notice_codes()[:3]
|
|
126
126
|
['attribution_without_role', 'bidirectional_exit_gate', 'block_trips_with_overlapping_stop_times']
|
|
127
127
|
```
|
|
128
128
|
|
|
@@ -131,7 +131,7 @@ Get list of all available notice codes.
|
|
|
131
131
|
Get schema for all notice types with descriptions and severity levels.
|
|
132
132
|
|
|
133
133
|
```python
|
|
134
|
-
>>> schema =
|
|
134
|
+
>>> schema = gtfs_guru.notice_schema()
|
|
135
135
|
>>> schema['missing_required_field']
|
|
136
136
|
{'severity': 'ERROR', 'description': '...'}
|
|
137
137
|
```
|
|
@@ -199,9 +199,9 @@ ctx = notice.context() # dict[str, Any]
|
|
|
199
199
|
### Basic Validation
|
|
200
200
|
|
|
201
201
|
```python
|
|
202
|
-
import
|
|
202
|
+
import gtfs_guru
|
|
203
203
|
|
|
204
|
-
result =
|
|
204
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
205
205
|
|
|
206
206
|
if result.is_valid:
|
|
207
207
|
print("Feed is valid!")
|
|
@@ -216,7 +216,7 @@ else:
|
|
|
216
216
|
```python
|
|
217
217
|
from collections import Counter
|
|
218
218
|
|
|
219
|
-
result =
|
|
219
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
220
220
|
|
|
221
221
|
# Count notices by code
|
|
222
222
|
error_counts = Counter(e.code for e in result.errors())
|
|
@@ -234,7 +234,7 @@ for notice in result.by_code("missing_required_field"):
|
|
|
234
234
|
### Save Reports
|
|
235
235
|
|
|
236
236
|
```python
|
|
237
|
-
result =
|
|
237
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
238
238
|
|
|
239
239
|
# Save JSON report (same format as Java validator)
|
|
240
240
|
result.save_json("report.json")
|
|
@@ -253,13 +253,13 @@ print(f"Routes: {summary.get('routes', {}).get('count', 0)}")
|
|
|
253
253
|
|
|
254
254
|
```python
|
|
255
255
|
# Validate for specific country (affects some rules)
|
|
256
|
-
result =
|
|
256
|
+
result = gtfs_guru.validate(
|
|
257
257
|
"/path/to/gtfs.zip",
|
|
258
258
|
country_code="DE"
|
|
259
259
|
)
|
|
260
260
|
|
|
261
261
|
# Validate as of specific date
|
|
262
|
-
result =
|
|
262
|
+
result = gtfs_guru.validate(
|
|
263
263
|
"/path/to/gtfs.zip",
|
|
264
264
|
date="2025-06-01"
|
|
265
265
|
)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# GTFS
|
|
1
|
+
# GTFS Guru Python
|
|
2
2
|
|
|
3
3
|
High-performance GTFS feed validator with Python bindings. Written in Rust, exposed via PyO3.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
pip install gtfs-
|
|
8
|
+
pip install gtfs-guru
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
### From Source
|
|
@@ -13,16 +13,16 @@ pip install gtfs-validator
|
|
|
13
13
|
```bash
|
|
14
14
|
pip install maturin
|
|
15
15
|
maturin build --release
|
|
16
|
-
pip install target/wheels/
|
|
16
|
+
pip install target/wheels/gtfs_guru-*.whl
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## Quick Start
|
|
20
20
|
|
|
21
21
|
```python
|
|
22
|
-
import
|
|
22
|
+
import gtfs_guru
|
|
23
23
|
|
|
24
24
|
# Validate a GTFS feed
|
|
25
|
-
result =
|
|
25
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
26
26
|
|
|
27
27
|
print(f"Valid: {result.is_valid}")
|
|
28
28
|
print(f"Errors: {result.error_count}")
|
|
@@ -50,7 +50,7 @@ Validate a GTFS feed.
|
|
|
50
50
|
|
|
51
51
|
**Example:**
|
|
52
52
|
```python
|
|
53
|
-
result =
|
|
53
|
+
result = gtfs_guru.validate(
|
|
54
54
|
"/path/to/gtfs.zip",
|
|
55
55
|
country_code="US",
|
|
56
56
|
date="2025-01-15"
|
|
@@ -75,7 +75,7 @@ async def main():
|
|
|
75
75
|
def on_progress(info):
|
|
76
76
|
print(f"{info.stage}: {info.current}/{info.total}")
|
|
77
77
|
|
|
78
|
-
result = await
|
|
78
|
+
result = await gtfs_guru.validate_async(
|
|
79
79
|
"/path/to/gtfs.zip",
|
|
80
80
|
on_progress=on_progress
|
|
81
81
|
)
|
|
@@ -88,8 +88,8 @@ asyncio.run(main())
|
|
|
88
88
|
Get validator version.
|
|
89
89
|
|
|
90
90
|
```python
|
|
91
|
-
>>>
|
|
92
|
-
'0.
|
|
91
|
+
>>> gtfs_guru.version()
|
|
92
|
+
'0.9.0'
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
#### `notice_codes() -> list[str]`
|
|
@@ -97,9 +97,9 @@ Get validator version.
|
|
|
97
97
|
Get list of all available notice codes.
|
|
98
98
|
|
|
99
99
|
```python
|
|
100
|
-
>>> len(
|
|
100
|
+
>>> len(gtfs_guru.notice_codes())
|
|
101
101
|
164
|
|
102
|
-
>>>
|
|
102
|
+
>>> gtfs_guru.notice_codes()[:3]
|
|
103
103
|
['attribution_without_role', 'bidirectional_exit_gate', 'block_trips_with_overlapping_stop_times']
|
|
104
104
|
```
|
|
105
105
|
|
|
@@ -108,7 +108,7 @@ Get list of all available notice codes.
|
|
|
108
108
|
Get schema for all notice types with descriptions and severity levels.
|
|
109
109
|
|
|
110
110
|
```python
|
|
111
|
-
>>> schema =
|
|
111
|
+
>>> schema = gtfs_guru.notice_schema()
|
|
112
112
|
>>> schema['missing_required_field']
|
|
113
113
|
{'severity': 'ERROR', 'description': '...'}
|
|
114
114
|
```
|
|
@@ -176,9 +176,9 @@ ctx = notice.context() # dict[str, Any]
|
|
|
176
176
|
### Basic Validation
|
|
177
177
|
|
|
178
178
|
```python
|
|
179
|
-
import
|
|
179
|
+
import gtfs_guru
|
|
180
180
|
|
|
181
|
-
result =
|
|
181
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
182
182
|
|
|
183
183
|
if result.is_valid:
|
|
184
184
|
print("Feed is valid!")
|
|
@@ -193,7 +193,7 @@ else:
|
|
|
193
193
|
```python
|
|
194
194
|
from collections import Counter
|
|
195
195
|
|
|
196
|
-
result =
|
|
196
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
197
197
|
|
|
198
198
|
# Count notices by code
|
|
199
199
|
error_counts = Counter(e.code for e in result.errors())
|
|
@@ -211,7 +211,7 @@ for notice in result.by_code("missing_required_field"):
|
|
|
211
211
|
### Save Reports
|
|
212
212
|
|
|
213
213
|
```python
|
|
214
|
-
result =
|
|
214
|
+
result = gtfs_guru.validate("/path/to/gtfs.zip")
|
|
215
215
|
|
|
216
216
|
# Save JSON report (same format as Java validator)
|
|
217
217
|
result.save_json("report.json")
|
|
@@ -230,13 +230,13 @@ print(f"Routes: {summary.get('routes', {}).get('count', 0)}")
|
|
|
230
230
|
|
|
231
231
|
```python
|
|
232
232
|
# Validate for specific country (affects some rules)
|
|
233
|
-
result =
|
|
233
|
+
result = gtfs_guru.validate(
|
|
234
234
|
"/path/to/gtfs.zip",
|
|
235
235
|
country_code="DE"
|
|
236
236
|
)
|
|
237
237
|
|
|
238
238
|
# Validate as of specific date
|
|
239
|
-
result =
|
|
239
|
+
result = gtfs_guru.validate(
|
|
240
240
|
"/path/to/gtfs.zip",
|
|
241
241
|
date="2025-06-01"
|
|
242
242
|
)
|
|
@@ -1084,7 +1084,7 @@ pub struct FareLegJoinRule {
|
|
|
1084
1084
|
pub struct RiderCategory {
|
|
1085
1085
|
pub rider_category_id: StringId,
|
|
1086
1086
|
pub rider_category_name: CompactString,
|
|
1087
|
-
#[serde(rename = "
|
|
1087
|
+
#[serde(rename = "is_default_fare_category")]
|
|
1088
1088
|
pub is_default_fare_category: Option<RiderFareCategory>,
|
|
1089
1089
|
pub eligibility_url: Option<StringId>,
|
|
1090
1090
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "gtfs-guru-core"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.9.0"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
description = "Core validation logic for GTFS Guru"
|
|
@@ -28,7 +28,7 @@ rustc-hash = "2.1"
|
|
|
28
28
|
|
|
29
29
|
[dependencies.gtfs-guru-model]
|
|
30
30
|
path = "../gtfs_model"
|
|
31
|
-
version = "0.
|
|
31
|
+
version = "0.9.0"
|
|
32
32
|
|
|
33
33
|
[build-dependencies]
|
|
34
34
|
regex = { workspace = true }
|
|
@@ -338,7 +338,11 @@ const RIDER_CATEGORIES_FIELDS: &[&str] = &[
|
|
|
338
338
|
"is_default_fare_category",
|
|
339
339
|
"eligibility_url",
|
|
340
340
|
];
|
|
341
|
-
const RIDER_CATEGORIES_REQUIRED_FIELDS: &[&str] = &[
|
|
341
|
+
const RIDER_CATEGORIES_REQUIRED_FIELDS: &[&str] = &[
|
|
342
|
+
"rider_category_id",
|
|
343
|
+
"rider_category_name",
|
|
344
|
+
"is_default_fare_category",
|
|
345
|
+
];
|
|
342
346
|
const LOCATION_GROUPS_FIELDS: &[&str] = &[
|
|
343
347
|
"location_group_id",
|
|
344
348
|
"location_group_name",
|