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.
Files changed (133) hide show
  1. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/Cargo.lock +8 -8
  2. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/PKG-INFO +19 -19
  3. {gtfs_guru-0.1.1/crates/gtfs_validator_python → gtfs_guru-0.9.0}/README.md +18 -18
  4. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_model/Cargo.toml +1 -1
  5. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_model/src/lib.rs +1 -1
  6. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/Cargo.toml +2 -2
  7. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/csv_schema.rs +5 -1
  8. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/csv_validation.rs +388 -114
  9. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/feed.rs +43 -1
  10. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/geojson.rs +24 -14
  11. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/input.rs +9 -1
  12. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/bikes_allowance.rs +34 -29
  13. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/date_trips.rs +37 -4
  14. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_key.rs +26 -3
  15. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/expired_calendar.rs +4 -0
  16. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_attribute_agency_id.rs +5 -1
  17. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_product_default_rider_categories.rs +10 -1
  18. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_rules.rs +26 -0
  19. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_transfer_rule_duration_limit.rs +4 -0
  20. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/feed_expiration_date.rs +62 -10
  21. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/feed_info.rs +88 -14
  22. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/lat_lon.rs +11 -2
  23. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/location_id_foreign_key.rs +9 -6
  24. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/locations_geojson_presence.rs +7 -1
  25. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/missing_stops_file.rs +4 -1
  26. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/overlapping_pickup_drop_off_zone.rs +9 -1
  27. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/parent_station.rs +1 -164
  28. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/referential_integrity.rs +84 -30
  29. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/route_color_contrast.rs +2 -2
  30. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/shape_to_stop_matching.rs +6 -2
  31. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/shapes.rs +2 -2
  32. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_time_travel_speed.rs +198 -21
  33. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_shape_dist_presence.rs +10 -1
  34. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_time.rs +58 -0
  35. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers.rs +6 -0
  36. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/trips.rs +28 -14
  37. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/url_consistency.rs +10 -1
  38. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/url_syntax.rs +7 -2
  39. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/string_pool.rs +11 -1
  40. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/tests/integration_tests.rs +44 -6
  41. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_python/Cargo.toml +3 -3
  42. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0/crates/gtfs_validator_python}/README.md +18 -18
  43. {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
  44. {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
  45. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_python/src/lib.rs +4 -4
  46. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_report/Cargo.toml +3 -3
  47. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_report/src/lib.rs +2 -0
  48. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/pyproject.toml +1 -1
  49. gtfs_guru-0.9.0/python/gtfs_guru/__init__.py +31 -0
  50. gtfs_guru-0.9.0/python/gtfs_guru/__init__.pyi +234 -0
  51. gtfs_guru-0.9.0/python/gtfs_guru/py.typed +0 -0
  52. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/Cargo.toml +0 -0
  53. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/benches/benchmark_loading.rs +0 -0
  54. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/benches/benchmark_shape_matching.rs +0 -0
  55. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/build.rs +0 -0
  56. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/csv_reader.rs +0 -0
  57. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/engine.rs +0 -0
  58. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/lib.rs +0 -0
  59. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/notice.rs +0 -0
  60. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/notice_schema.rs +0 -0
  61. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/progress.rs +0 -0
  62. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/agency_consistency.rs +0 -0
  63. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/attribution_without_role.rs +0 -0
  64. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/bidirectional_exit_gate.rs +0 -0
  65. {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
  66. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/booking_rules.rs +0 -0
  67. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/calendar.rs +0 -0
  68. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/calendar_presence.rs +0 -0
  69. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/continuous_pickup_drop_off.rs +0 -0
  70. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_fare_media.rs +0 -0
  71. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_route_name.rs +0 -0
  72. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/duplicate_stop_sequence.rs +0 -0
  73. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_attributes.rs +0 -0
  74. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_leg_join_rule.rs +0 -0
  75. {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
  76. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_media_name.rs +0 -0
  77. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/fare_transfer_rule_transfer_count.rs +0 -0
  78. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/feed_service_date.rs +0 -0
  79. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/frequencies.rs +0 -0
  80. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/google_rules.rs +0 -0
  81. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/location_has_stop_times.rs +0 -0
  82. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/location_type.rs +0 -0
  83. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/locations_geojson_notices.rs +0 -0
  84. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/matching_feed_and_agency_lang.rs +0 -0
  85. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/missing_level_id.rs +0 -0
  86. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/missing_trip_edge.rs +0 -0
  87. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/mod.rs +0 -0
  88. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/network_id_consistency.rs +0 -0
  89. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/overlapping_frequency.rs +0 -0
  90. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_dangling_generic_node.rs +0 -0
  91. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_endpoint_type.rs +0 -0
  92. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_loop.rs +0 -0
  93. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathway_reachable_location.rs +0 -0
  94. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pathways.rs +0 -0
  95. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pickup_booking_rule_id.rs +0 -0
  96. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pickup_drop_off_type.rs +0 -0
  97. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/pickup_drop_off_window.rs +0 -0
  98. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/required_fields.rs +0 -0
  99. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/required_non_empty.rs +0 -0
  100. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/route_agency_id.rs +0 -0
  101. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/routes.rs +0 -0
  102. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/shape_usage.rs +0 -0
  103. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/single_shape_point.rs +0 -0
  104. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_time_increasing_distance.rs +0 -0
  105. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times.rs +0 -0
  106. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_geography_id_presence.rs +0 -0
  107. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_times_record.rs +0 -0
  108. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stop_zone_id.rs +0 -0
  109. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/stops.rs +0 -0
  110. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/timeframe_overlap.rs +0 -0
  111. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/timeframe_service_id_foreign_key.rs +0 -0
  112. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/timeframe_start_and_end_time.rs +0 -0
  113. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfer_distance.rs +0 -0
  114. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_in_seat_transfer_type.rs +0 -0
  115. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_stop_ids_conditional.rs +0 -0
  116. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_stop_type.rs +0 -0
  117. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/transfers_trip_reference.rs +0 -0
  118. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/translation_field_and_reference.rs +0 -0
  119. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/trip_service_id_foreign_key.rs +0 -0
  120. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/trip_shape_distance.rs +0 -0
  121. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unique_geography_id.rs +0 -0
  122. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unused_agency.rs +0 -0
  123. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unused_route.rs +0 -0
  124. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/rules/unused_stop.rs +0 -0
  125. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/table_status.rs +0 -0
  126. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/timing.rs +0 -0
  127. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/validation_context.rs +0 -0
  128. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/src/validator.rs +0 -0
  129. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_core/test_duplicate_repro.rs +0 -0
  130. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_python/.cargo/config.toml +0 -0
  131. {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
  132. {gtfs_guru-0.1.1 → gtfs_guru-0.9.0}/crates/gtfs_validator_report/src/html.rs +0 -0
  133. {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.1.1"
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.1.1"
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.1.1"
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.1.1"
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.1.1"
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.1.1"
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.1.1"
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.1.1"
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.1.1
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 Validator Python
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-validator
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/gtfs_validator-*.whl
39
+ pip install target/wheels/gtfs_guru-*.whl
40
40
  ```
41
41
 
42
42
  ## Quick Start
43
43
 
44
44
  ```python
45
- import gtfs_validator
45
+ import gtfs_guru
46
46
 
47
47
  # Validate a GTFS feed
48
- result = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate(
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 gtfs_validator.validate_async(
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
- >>> gtfs_validator.version()
115
- '0.1.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(gtfs_validator.notice_codes())
123
+ >>> len(gtfs_guru.notice_codes())
124
124
  164
125
- >>> gtfs_validator.notice_codes()[:3]
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 = gtfs_validator.notice_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 gtfs_validator
202
+ import gtfs_guru
203
203
 
204
- result = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate(
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 = gtfs_validator.validate(
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 Validator Python
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-validator
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/gtfs_validator-*.whl
16
+ pip install target/wheels/gtfs_guru-*.whl
17
17
  ```
18
18
 
19
19
  ## Quick Start
20
20
 
21
21
  ```python
22
- import gtfs_validator
22
+ import gtfs_guru
23
23
 
24
24
  # Validate a GTFS feed
25
- result = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate(
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 gtfs_validator.validate_async(
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
- >>> gtfs_validator.version()
92
- '0.1.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(gtfs_validator.notice_codes())
100
+ >>> len(gtfs_guru.notice_codes())
101
101
  164
102
- >>> gtfs_validator.notice_codes()[:3]
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 = gtfs_validator.notice_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 gtfs_validator
179
+ import gtfs_guru
180
180
 
181
- result = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate("/path/to/gtfs.zip")
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 = gtfs_validator.validate(
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 = gtfs_validator.validate(
239
+ result = gtfs_guru.validate(
240
240
  "/path/to/gtfs.zip",
241
241
  date="2025-06-01"
242
242
  )
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "gtfs-guru-model"
3
- version = "0.1.1"
3
+ version = "0.9.0"
4
4
  edition = "2021"
5
5
  license = "Apache-2.0"
6
6
  description = "Data models for GTFS (General Transit Feed Specification)"
@@ -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 = "is_default_category")]
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.1.1"
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.1.1"
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] = &["rider_category_id", "rider_category_name"];
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",