- Ported the bridge that was using a custom GTFS class and Pandas Dataframes to a native Django solution for and interface between db and csv (see api/io.py) - Fixed some issues regarding the compliance of the exported csv files with the GTFS reference. I.e. now allowing times 24:00:00 <= t >= 24:59:59
601 lines
13 KiB
Python
601 lines
13 KiB
Python
"""
|
|
Constants defining requirements of model fields.
|
|
To be used to decide wether a test should run or fail and which tests to run to test for self-preserved integrity.
|
|
"""
|
|
from pt_map.models import *
|
|
|
|
field_requirements = \
|
|
[
|
|
{
|
|
"model": Agency,
|
|
"fields": [
|
|
{
|
|
"name": "agency_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "agency_name",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "agency_url",
|
|
"type": "url",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "agency_timezone",
|
|
"type": "timezone",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "agency_lang",
|
|
"type": "langcode",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "agency_phone",
|
|
"type": "telephone",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "agency_email",
|
|
"type": "email",
|
|
"required": "false",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "Stop",
|
|
"fields": [
|
|
{
|
|
"name": "stop_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "stop_code",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "stop_name",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "stop_desc",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "stop_lat",
|
|
"type": "float",
|
|
"required": "if",
|
|
"required_if": ["location_type", [0,1,2]],
|
|
},
|
|
{
|
|
"name": "stop_lon",
|
|
"type": "float",
|
|
"required": "if",
|
|
"required_if": ["location_type", [0,1,2]],
|
|
},
|
|
{
|
|
"name": "zone_id",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "stop_url",
|
|
"type": "url",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "location_type",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "parent_station",
|
|
"type": "fk",
|
|
"required": "if",
|
|
"required_if": ["location_type", [2,3,4]],
|
|
"forbidden_if": ["location_type", [1]],
|
|
},
|
|
{
|
|
"name": "stop_timezone",
|
|
"type": "timezone",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "wheelchair_boarding",
|
|
"type": "int",
|
|
"required": "false",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "Stop",
|
|
"fields": [
|
|
{
|
|
"name": "stop_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "stop_code",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "stop_name",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "stop_desc",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "stop_lat",
|
|
"type": "float",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "stop_lon",
|
|
"type": "float",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "zone_id",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "stop_url",
|
|
"type": "url",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "location_type",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "parent_station",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "stop_timezone",
|
|
"type": "timezone",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "wheelchair_boarding",
|
|
"type": "int",
|
|
"required": "false",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "Route",
|
|
"fields": [
|
|
{
|
|
"name": "route_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "route_short_name",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "route_long_name",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "route_desc",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "route_type",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "route_url",
|
|
"type": "url",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "route_color",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "route_text_color",
|
|
"type": "str",
|
|
"required": "false",
|
|
}
|
|
],
|
|
},
|
|
{
|
|
"model": "Trip",
|
|
"fields": [
|
|
{
|
|
"name": "trip_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "route_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "service_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "trip_headsign",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "trip_short_name",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "direction_id",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "block_id",
|
|
"type": "str",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "shape_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "StopTime",
|
|
"fields": [
|
|
{
|
|
"name": "trip_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "arrival_time",
|
|
"type": "time",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "departure_time",
|
|
"type": "time",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "stop_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "stop_sequence",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "pickup_type",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "drop_off_type",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "shape_dist_traveled",
|
|
"type": "float",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "timepoint",
|
|
"type": "int",
|
|
"required": "false",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "Calendar",
|
|
"fields": [
|
|
{
|
|
"name": "service_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "monday",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "tuesday",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "wednesday",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "thursday",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "friday",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "saturday",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "sunday",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "start_date",
|
|
"type": "date",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "end_date",
|
|
"type": "date",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "CalendarDates",
|
|
"fields": [
|
|
{
|
|
"name": "service_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "date",
|
|
"type": "date",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "exception_type",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "FareAttributes",
|
|
"fields": [
|
|
{
|
|
"name": "fare_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "price",
|
|
"type": "float",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "currency_type",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "payment_method",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "transfers",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "transfer_duration",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "FareRules",
|
|
"fields": [
|
|
{
|
|
"name": "fare_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "route_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "origin_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "destination_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "contains_id",
|
|
"type": "fk",
|
|
"required": "false",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "FareZones",
|
|
"fields": [
|
|
{
|
|
"name": "fare_zone_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "zone_id",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "Shape",
|
|
"fields": [
|
|
{
|
|
"name": "shape_id",
|
|
"type": "pk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "shape_pt_lat",
|
|
"type": "float",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "shape_pt_lon",
|
|
"type": "float",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "shape_pt_sequence",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "shape_dist_traveled",
|
|
"type": "float",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "Frequencies",
|
|
"fields": [
|
|
{
|
|
"name": "trip_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "start_time",
|
|
"type": "time",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "end_time",
|
|
"type": "time",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "headway_secs",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "exact_times",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "Transfers",
|
|
"fields": [
|
|
{
|
|
"name": "from_stop_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "to_stop_id",
|
|
"type": "fk",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "transfer_type",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "min_transfer_time",
|
|
"type": "int",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
"model": "FeedInfo",
|
|
"fields": [
|
|
{
|
|
"name": "feed_publisher_name",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "feed_publisher_url",
|
|
"type": "url",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "feed_lang",
|
|
"type": "langcode",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "feed_start_date",
|
|
"type": "date",
|
|
"required": "true",
|
|
},
|
|
{
|
|
"name": "feed_end_date",
|
|
"type": "date",
|
|
"required": "false",
|
|
},
|
|
{
|
|
"name": "feed_version",
|
|
"type": "str",
|
|
"required": "true",
|
|
},
|
|
],
|
|
},
|
|
|
|
]
|
|
|