API: Retrieve data
Now able to retrieve model data for any number of models, identified by their primary keys, represented as JSON, using GET /data?<primary_key>=<value>.
This commit is contained in:
parent
26b08b72dd
commit
f5b329bc17
0
transport_accessibility/api/__init__.py
Normal file
0
transport_accessibility/api/__init__.py
Normal file
3
transport_accessibility/api/admin.py
Normal file
3
transport_accessibility/api/admin.py
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
6
transport_accessibility/api/apps.py
Normal file
6
transport_accessibility/api/apps.py
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class ApiConfig(AppConfig):
|
||||||
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
|
name = 'api'
|
||||||
0
transport_accessibility/api/migrations/__init__.py
Normal file
0
transport_accessibility/api/migrations/__init__.py
Normal file
3
transport_accessibility/api/models.py
Normal file
3
transport_accessibility/api/models.py
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
3
transport_accessibility/api/tests.py
Normal file
3
transport_accessibility/api/tests.py
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
3
transport_accessibility/api/views.py
Normal file
3
transport_accessibility/api/views.py
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
|
|
@ -50,7 +50,7 @@ import datetime
|
||||||
import django.db.models
|
import django.db.models
|
||||||
import time
|
import time
|
||||||
from pt_map.gtfs_schema import gtfs_schema
|
from pt_map.gtfs_schema import gtfs_schema
|
||||||
from.class_names import *
|
from .class_names import *
|
||||||
|
|
||||||
|
|
||||||
def toCamelCase(s: str):
|
def toCamelCase(s: str):
|
||||||
|
|
@ -178,32 +178,42 @@ def gtfs_to_db(g: pt_map.gtfs.GTFS):
|
||||||
g : gtfs.GTFS
|
g : gtfs.GTFS
|
||||||
GTFS object to be saved to db
|
GTFS object to be saved to db
|
||||||
"""
|
"""
|
||||||
|
feed_id = 0
|
||||||
|
#model = (pt_map.models.Trip, [(pt_map.models.Route, 'route_id'), (pt_map.models.Shape, 'shape_id'), ])
|
||||||
ts = str(int(time.time())-time_delta) # Prepend the current time in seconds since Jan 1, 2024 to ids to make them more or less unique
|
ts = str(int(time.time())-time_delta) # Prepend the current time in seconds since Jan 1, 2024 to ids to make them more or less unique
|
||||||
|
#if model == pt_map.models.Shape:
|
||||||
for model in foreign_keys:
|
for model in foreign_keys:
|
||||||
m = model[0]
|
m = model[0]
|
||||||
df = getattr(g, class_names[m.__name__]).data # Extract dataframe for each model from gtfs.GTFS object
|
df = getattr(g, reversed_file_mapping[m.__name__]).data # Extract dataframe for each model from gtfs.GTFS object
|
||||||
if not df.empty: # Only process GTFS files actually present
|
if not df.empty: # Only process GTFS files actually present
|
||||||
v = gtfs_schema[class_names[m.__name__]] # field names
|
if primary_keys[m] in df.keys() and not m == pt_map.models.FeedInfo:
|
||||||
|
#df[primary_keys[m]] = df[primary_keys[m]].astype(str)
|
||||||
|
df[primary_keys[m]] = [f"{feed_id.feed_id}_{pk}" for pk in df[primary_keys[m]]]
|
||||||
|
elif not m == pt_map.models.FeedInfo:
|
||||||
|
df[primary_keys[m]] = [f"{feed_id.feed_id}_{pk}" for pk in range(1, df.index.size + 1)]
|
||||||
|
v = gtfs_schema[reversed_file_mapping[m.__name__]] # field names
|
||||||
for _, row in df.iterrows(): # the rows of the dataframe are the individual entries in the GTFS file and should be the individual instances of the db model
|
for _, row in df.iterrows(): # the rows of the dataframe are the individual entries in the GTFS file and should be the individual instances of the db model
|
||||||
for fk in model[1]: # Map foreign_keys to objects of the foreign model
|
for fk in model[1]: # Map foreign_keys to objects of the foreign model
|
||||||
if row.get(fk[1]):
|
if row.get(fk[1]):
|
||||||
row[fk[1]] = fk[0].objects.get(**{primary_keys[fk[0]]: unqfk(ts, row[fk[1]])})
|
row[fk[1]] = fk[0].objects.get(**{primary_keys[fk[0]]: f"{feed_id.feed_id}_{row[fk[1]]}"})#unqfk(ts, row[fk[1]])})
|
||||||
defaults = {field: stdz(row.get(field), m, field) for field in v if row.get(field) and not is_NaN(row[field])} # dict of fields and values of current model object to create
|
defaults = {field: stdz(row.get(field), m, field) for field in v if row.get(field) and not is_NaN(row[field])} # dict of fields and values of current model object to create
|
||||||
if primary_keys[m]:
|
o = None
|
||||||
row[primary_keys[m]] = unqfk(ts, row[primary_keys[m]]) # primary_keys should be unique, use current time in seconds as a prefix
|
if not m == pt_map.models.FeedInfo:
|
||||||
defaults[primary_keys[m]] = row[primary_keys[m]]
|
defaults["feed_info_id"] = feed_id
|
||||||
|
if primary_keys[m] in df.keys():
|
||||||
|
#row[primary_keys[m]] = unqfk(ts, row[primary_keys[m]]) # primary_keys should be unique, use current time in seconds as a prefix
|
||||||
|
#defaults[primary_keys[m]] = row[primary_keys[m]]
|
||||||
try:
|
try:
|
||||||
m.objects.get(**{primary_keys[m]: row[primary_keys[m]]}) # Make sure there is no object with identical primary_key, exception is expected to be risen
|
o = m.objects.get(**{primary_keys[m]: row[primary_keys[m]]}) # Make sure there is no object with identical primary_key, exception is expected to be risen
|
||||||
except m.DoesNotExist:
|
except m.DoesNotExist:
|
||||||
|
o = m.objects.update_or_create(
|
||||||
m.objects.update_or_create(
|
|
||||||
defaults = defaults,
|
defaults = defaults,
|
||||||
#**kw_args,
|
**{primary_keys[m]: row[primary_keys[m]]}
|
||||||
**{primary_keys[m]: row[primary_keys[m]]}
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
m.objects.create(**defaults)
|
o = m.objects.create(**defaults)
|
||||||
|
if m == pt_map.models.FeedInfo:
|
||||||
|
feed_id = o
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,7 @@ reversed_file_mapping = {
|
||||||
"Level": "levels",
|
"Level": "levels",
|
||||||
"LocationGroup": "location_groups",
|
"LocationGroup": "location_groups",
|
||||||
"LocationGroupStop": "location_group_stops",
|
"LocationGroupStop": "location_group_stops",
|
||||||
"LocationsGeojson": "locations.geojson",
|
"LocationsGeojson": "locations_geojson",
|
||||||
"BookingRule": "booking_rules",
|
"BookingRule": "booking_rules",
|
||||||
"Translation": "translations",
|
"Translation": "translations",
|
||||||
"FeedInfo": "feed_info",
|
"FeedInfo": "feed_info",
|
||||||
|
|
@ -176,86 +176,136 @@ reversed_file_mapping = {
|
||||||
case_swap = {'Agency': 'agency', 'Stop': 'stops', 'Route': 'routes', 'Trip': 'trips', 'StopTime': 'stop_times', 'Calendar': 'calendar', 'CalendarDate': 'calendar_dates', 'FareAttribute': 'fare_attributes', 'FareRule': 'fare_rules', 'Timeframe': 'timeframes', 'FareMedium': 'fare_media', 'FareProduct': 'fare_products', 'FareLegRule': 'fare_leg_rules', 'FareTransferRule': 'fare_transfer_rules', 'Area': 'areas', 'StopArea': 'stop_areas', 'Network': 'networks', 'RouteNetwork': 'route_networks', 'Shape': 'shapes', 'Frequency': 'frequencies', 'Transfer': 'transfers', 'Pathway': 'pathways', 'Level': 'levels', 'LocationGroup': 'location_groups', 'LocationGroupStop': 'location_group_stops', 'LocationsGeojson': 'locations_geojson', 'BookingRule': 'booking_rules', 'Translation': 'translations', 'FeedInfo': 'feed_info', 'Attribution': 'attributions'}
|
case_swap = {'Agency': 'agency', 'Stop': 'stops', 'Route': 'routes', 'Trip': 'trips', 'StopTime': 'stop_times', 'Calendar': 'calendar', 'CalendarDate': 'calendar_dates', 'FareAttribute': 'fare_attributes', 'FareRule': 'fare_rules', 'Timeframe': 'timeframes', 'FareMedium': 'fare_media', 'FareProduct': 'fare_products', 'FareLegRule': 'fare_leg_rules', 'FareTransferRule': 'fare_transfer_rules', 'Area': 'areas', 'StopArea': 'stop_areas', 'Network': 'networks', 'RouteNetwork': 'route_networks', 'Shape': 'shapes', 'Frequency': 'frequencies', 'Transfer': 'transfers', 'Pathway': 'pathways', 'Level': 'levels', 'LocationGroup': 'location_groups', 'LocationGroupStop': 'location_group_stops', 'LocationsGeojson': 'locations_geojson', 'BookingRule': 'booking_rules', 'Translation': 'translations', 'FeedInfo': 'feed_info', 'Attribution': 'attributions'}
|
||||||
|
|
||||||
|
|
||||||
primary_keys = { pt_map.models.Agency: "agency_id",
|
#primary_keys = { pt_map.models.FeedInfo: None,
|
||||||
pt_map.models.Level: "level_id",
|
# pt_map.models.Agency: "agency_id",
|
||||||
pt_map.models.Stop: "stop_id",
|
# pt_map.models.Level: "level_id",
|
||||||
pt_map.models.Route: "route_id",
|
# pt_map.models.Stop: "stop_id",
|
||||||
pt_map.models.Shape: "shape_id",
|
# pt_map.models.Route: "route_id",
|
||||||
pt_map.models.Calendar: "service_id",
|
# pt_map.models.Shape: "shape_id",
|
||||||
pt_map.models.CalendarDate: None,
|
# pt_map.models.Calendar: "service_id",
|
||||||
pt_map.models.Trip: "trip_id",
|
# pt_map.models.CalendarDate: None,
|
||||||
pt_map.models.LocationGroup: "location_group_id",
|
# pt_map.models.Trip: "trip_id",
|
||||||
pt_map.models.LocationsGeojson: None,
|
# pt_map.models.LocationGroup: "location_group_id",
|
||||||
pt_map.models.StopTime: None,
|
# pt_map.models.LocationsGeojson: None,
|
||||||
pt_map.models.FareAttribute: "fare_id",
|
# pt_map.models.StopTime: None,
|
||||||
pt_map.models.FareRule: None,
|
# pt_map.models.FareAttribute: "fare_id",
|
||||||
pt_map.models.Frequency: None,
|
# pt_map.models.FareRule: None,
|
||||||
pt_map.models.Transfer: None,
|
# pt_map.models.Frequency: None,
|
||||||
pt_map.models.Pathway: "pathway_id",
|
# pt_map.models.Transfer: None,
|
||||||
pt_map.models.FeedInfo: None,
|
# pt_map.models.Pathway: "pathway_id",
|
||||||
pt_map.models.BookingRule: "booking_rule_id",
|
# pt_map.models.BookingRule: "booking_rule_id",
|
||||||
pt_map.models.Translation: None,
|
# pt_map.models.Translation: None,
|
||||||
pt_map.models.Attribution: "attribution_id",
|
# pt_map.models.Attribution: "attribution_id",
|
||||||
pt_map.models.LocationGroupStop: None,
|
# pt_map.models.LocationGroupStop: None,
|
||||||
pt_map.models.Network: "network_id",
|
# pt_map.models.Network: "network_id",
|
||||||
pt_map.models.RouteNetwork: None,
|
# pt_map.models.RouteNetwork: None,
|
||||||
pt_map.models.Area: None,
|
# pt_map.models.Area: None,
|
||||||
pt_map.models.StopArea: None,
|
# pt_map.models.StopArea: None,
|
||||||
pt_map.models.FareMedium: "fare_media_id",
|
# pt_map.models.FareMedium: "fare_media_id",
|
||||||
pt_map.models.FareProduct: None,
|
# pt_map.models.FareProduct: None,
|
||||||
pt_map.models.Timeframe: None,
|
# pt_map.models.Timeframe: None,
|
||||||
pt_map.models.FareLegRule: None,
|
# pt_map.models.FareLegRule: None,
|
||||||
pt_map.models.FareTransferRule: None,
|
# pt_map.models.FareTransferRule: None,
|
||||||
}
|
#}
|
||||||
|
|
||||||
|
primary_keys = {
|
||||||
|
pt_map.models.FeedInfo: "feed_id",
|
||||||
|
pt_map.models.Agency: "agency_id",
|
||||||
|
pt_map.models.Level: "level_id",
|
||||||
|
pt_map.models.Stop: "stop_id",
|
||||||
|
pt_map.models.Route: "route_id",
|
||||||
|
pt_map.models.Shape: "shape_pk",
|
||||||
|
pt_map.models.Calendar: "service_id",
|
||||||
|
pt_map.models.CalendarDate: "calendar_date_id",
|
||||||
|
pt_map.models.Trip: "trip_id",
|
||||||
|
pt_map.models.LocationGroup: "location_group_id",
|
||||||
|
pt_map.models.LocationsGeojson: "location_id",
|
||||||
|
pt_map.models.StopTime: "stop_time_id",
|
||||||
|
pt_map.models.FareAttribute: "fare_id",
|
||||||
|
pt_map.models.FareRule: "fare_rule_id",
|
||||||
|
pt_map.models.Frequency: "frequency_id",
|
||||||
|
pt_map.models.Transfer: "transfer_id",
|
||||||
|
pt_map.models.Pathway: "pathway_id",
|
||||||
|
pt_map.models.BookingRule: "booking_rule_id",
|
||||||
|
pt_map.models.Translation: "translation_id",
|
||||||
|
pt_map.models.Attribution: "attribution_id",
|
||||||
|
pt_map.models.LocationGroupStop: "location_group_stop_id",
|
||||||
|
pt_map.models.Network: "network_id",
|
||||||
|
pt_map.models.RouteNetwork: "route_network_id",
|
||||||
|
pt_map.models.Area: "area_id",
|
||||||
|
pt_map.models.StopArea: "stop_area_id",
|
||||||
|
pt_map.models.FareMedium: "fare_media_id",
|
||||||
|
pt_map.models.FareProduct: "fare_product_id",
|
||||||
|
pt_map.models.Timeframe: "timeframe_group_id",
|
||||||
|
pt_map.models.FareLegRule: "fare_leg_rule_id",
|
||||||
|
pt_map.models.FareTransferRule: "fare_transfer_rule_id",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
classes_by_primary_keys = { "agency_id": pt_map.models.Agency,
|
classes_by_primary_keys = {
|
||||||
"level_id": pt_map.models.Level,
|
'feed_id': pt_map.models.FeedInfo,
|
||||||
"stop_id": pt_map.models.Stop,
|
'agency_id': pt_map.models.Agency,
|
||||||
"route_id": pt_map.models.Route,
|
'level_id': pt_map.models.Level,
|
||||||
"shape_id": pt_map.models.Shape,
|
'stop_id': pt_map.models.Stop,
|
||||||
"service_id": pt_map.models.Calendar,
|
'route_id': pt_map.models.Route,
|
||||||
"trip_id": pt_map.models.Trip,
|
'shape_pk': pt_map.models.Shape,
|
||||||
"location_group_id": pt_map.models.LocationGroup,
|
'service_id': pt_map.models.Calendar,
|
||||||
"fare_id": pt_map.models.FareAttribute,
|
'calendar_date_id': pt_map.models.CalendarDate,
|
||||||
"pathway_id": pt_map.models.Pathway,
|
'trip_id': pt_map.models.Trip,
|
||||||
"booking_rule_id": pt_map.models.BookingRule,
|
'location_group_id': pt_map.models.LocationGroup,
|
||||||
"attribution_id": pt_map.models.Attribution,
|
'location_id': pt_map.models.LocationsGeojson,
|
||||||
"network_id": pt_map.models.Network,
|
'stop_time_id': pt_map.models.StopTime,
|
||||||
"fare_media_id": pt_map.models.FareMedium,
|
'fare_id': pt_map.models.FareAttribute,
|
||||||
}
|
'fare_rule_id': pt_map.models.FareRule,
|
||||||
|
'frequency_id': pt_map.models.Frequency,
|
||||||
|
'transfer_id': pt_map.models.Transfer,
|
||||||
|
'pathway_id': pt_map.models.Pathway,
|
||||||
|
'booking_rule_id': pt_map.models.BookingRule,
|
||||||
|
'translation_id': pt_map.models.Translation,
|
||||||
|
'attribution_id': pt_map.models.Attribution,
|
||||||
|
'location_group_stop_id': pt_map.models.LocationGroupStop,
|
||||||
|
'network_id': pt_map.models.Network,
|
||||||
|
'route_network_id': pt_map.models.RouteNetwork,
|
||||||
|
'area_id': pt_map.models.Area,
|
||||||
|
'stop_area_id': pt_map.models.StopArea,
|
||||||
|
'fare_media_id': pt_map.models.FareMedium,
|
||||||
|
'fare_product_id': pt_map.models.FareProduct,
|
||||||
|
'timeframe_group_id': pt_map.models.Timeframe,
|
||||||
|
'fare_leg_rule_id': pt_map.models.FareLegRule,
|
||||||
|
'fare_transfer_rule_id': pt_map.models.FareTransferRule,
|
||||||
|
}
|
||||||
|
|
||||||
foreign_keys = [
|
foreign_keys = [
|
||||||
(pt_map.models.Agency, []),
|
|
||||||
(pt_map.models.Level, []),
|
|
||||||
(pt_map.models.Stop, [(pt_map.models.Stop, 'parent_station'), (pt_map.models.Level, 'level_id'), ]),
|
|
||||||
(pt_map.models.Route, [(pt_map.models.Agency, 'agency_id'), ]),
|
|
||||||
(pt_map.models.Shape, []),
|
|
||||||
(pt_map.models.Calendar, []),
|
|
||||||
(pt_map.models.CalendarDate, []),
|
|
||||||
(pt_map.models.Trip, [(pt_map.models.Route, 'route_id'), (pt_map.models.Shape, 'shape_id'), ]),
|
|
||||||
(pt_map.models.LocationGroup, []),
|
|
||||||
(pt_map.models.LocationsGeojson, []),
|
|
||||||
(pt_map.models.StopTime, [(pt_map.models.Trip, 'trip_id'), (pt_map.models.Stop, 'stop_id'), (pt_map.models.LocationGroup, 'location_group_id'), (pt_map.models.LocationsGeojson, 'location_id'), ]),
|
|
||||||
(pt_map.models.FareAttribute, [(pt_map.models.Agency, 'agency_id'), ]),
|
|
||||||
(pt_map.models.FareRule, [(pt_map.models.FareAttribute, 'fare_id'), (pt_map.models.Route, 'route_id'), ]),
|
|
||||||
(pt_map.models.Frequency, [(pt_map.models.Trip, 'trip_id'), ]),
|
|
||||||
(pt_map.models.Transfer, [(pt_map.models.Stop, 'from_stop_id'), (pt_map.models.Stop, 'to_stop_id'), (pt_map.models.Route, 'from_route_id'), (pt_map.models.Route, 'to_route_id'), (pt_map.models.Trip, 'from_trip_id'), (pt_map.models.Trip, 'to_trip_id'), ]),
|
|
||||||
(pt_map.models.Pathway, [(pt_map.models.Stop, 'from_stop_id'), (pt_map.models.Stop, 'to_stop_id'), ]),
|
|
||||||
(pt_map.models.FeedInfo, []),
|
(pt_map.models.FeedInfo, []),
|
||||||
(pt_map.models.BookingRule, [(pt_map.models.Trip, 'trip_id'), ]),
|
(pt_map.models.Agency, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
(pt_map.models.Translation, []),
|
(pt_map.models.Level, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
(pt_map.models.Attribution, [(pt_map.models.Agency, 'agency_id'), (pt_map.models.Route, 'route_id'), (pt_map.models.Trip, 'trip_id'), ]),
|
(pt_map.models.Stop, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Stop, 'parent_station'), (pt_map.models.Level, 'level_id'), ]),
|
||||||
(pt_map.models.LocationGroupStop, [(pt_map.models.LocationGroup, 'location_group_id'), (pt_map.models.Stop, 'stop_id'), ]),
|
(pt_map.models.Route, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Agency, 'agency_id'), ]),
|
||||||
(pt_map.models.Network, []),
|
(pt_map.models.Shape, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
(pt_map.models.RouteNetwork, [(pt_map.models.Network, 'network_id'), (pt_map.models.Route, 'route_id'), ]),
|
(pt_map.models.Calendar, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
(pt_map.models.Area, []),
|
(pt_map.models.CalendarDate, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
(pt_map.models.StopArea, [(pt_map.models.Area, 'area_id'), (pt_map.models.Stop, 'stop_id'), ]),
|
(pt_map.models.Trip, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Route, 'route_id'), (pt_map.models.Shape, 'shape_id'), ]),
|
||||||
(pt_map.models.FareMedium, []),
|
(pt_map.models.LocationGroup, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
(pt_map.models.FareProduct, []),
|
(pt_map.models.LocationsGeojson, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
(pt_map.models.Timeframe, []),
|
(pt_map.models.StopTime, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Trip, 'trip_id'), (pt_map.models.Stop, 'stop_id'), (pt_map.models.LocationGroup, 'location_group_id'), (pt_map.models.LocationsGeojson, 'location_id'), ]),
|
||||||
(pt_map.models.FareLegRule, [(pt_map.models.Network, 'network_id'), (pt_map.models.Area, 'from_area_id'), (pt_map.models.Area, 'to_area_id'), (pt_map.models.Timeframe, 'from_timeframe_group_id'), (pt_map.models.Timeframe, 'to_timeframe_group_id'), (pt_map.models.FareProduct, 'fare_product_id'), ]),
|
(pt_map.models.FareAttribute, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Agency, 'agency_id'), ]),
|
||||||
(pt_map.models.FareTransferRule, [(pt_map.models.FareProduct, 'fare_product_id'), ]),
|
(pt_map.models.FareRule, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.FareAttribute, 'fare_id'), (pt_map.models.Route, 'route_id'), ]),
|
||||||
|
(pt_map.models.Frequency, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Trip, 'trip_id'), ]),
|
||||||
|
(pt_map.models.Transfer, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Stop, 'from_stop_id'), (pt_map.models.Stop, 'to_stop_id'), (pt_map.models.Route, 'from_route_id'), (pt_map.models.Route, 'to_route_id'), (pt_map.models.Trip, 'from_trip_id'), (pt_map.models.Trip, 'to_trip_id'), ]),
|
||||||
|
(pt_map.models.Pathway, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Stop, 'from_stop_id'), (pt_map.models.Stop, 'to_stop_id'), ]),
|
||||||
|
(pt_map.models.BookingRule, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Trip, 'trip_id'), ]),
|
||||||
|
(pt_map.models.Translation, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
|
(pt_map.models.Attribution, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Agency, 'agency_id'), (pt_map.models.Route, 'route_id'), (pt_map.models.Trip, 'trip_id'), ]),
|
||||||
|
(pt_map.models.LocationGroupStop, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.LocationGroup, 'location_group_id'), (pt_map.models.Stop, 'stop_id'), ]),
|
||||||
|
(pt_map.models.Network, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
|
(pt_map.models.RouteNetwork, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Network, 'network_id'), (pt_map.models.Route, 'route_id'), ]),
|
||||||
|
(pt_map.models.Area, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
|
(pt_map.models.StopArea, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Area, 'area_id'), (pt_map.models.Stop, 'stop_id'), ]),
|
||||||
|
(pt_map.models.FareMedium, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
|
(pt_map.models.FareProduct, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
|
(pt_map.models.Timeframe, [(pt_map.models.FeedInfo, 'feed_info_id'),]),
|
||||||
|
(pt_map.models.FareLegRule, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.Network, 'network_id'), (pt_map.models.Area, 'from_area_id'), (pt_map.models.Area, 'to_area_id'), (pt_map.models.Timeframe, 'from_timeframe_group_id'), (pt_map.models.Timeframe, 'to_timeframe_group_id'), (pt_map.models.FareProduct, 'fare_product_id'), ]),
|
||||||
|
(pt_map.models.FareTransferRule, [(pt_map.models.FeedInfo, 'feed_info_id'),(pt_map.models.FareProduct, 'fare_product_id'), ]),
|
||||||
]
|
]
|
||||||
|
|
||||||
fk_dict = {fk[0]: fk[1] for fk in foreign_keys}
|
fk_dict = {fk[0]: fk[1] for fk in foreign_keys}
|
||||||
|
|
|
||||||
|
|
@ -1,384 +1,12 @@
|
||||||
# Generated by Django 5.0.6 on 2024-06-05 22:43
|
# Generated by Django 5.0.6 on 2024-06-17 19:43
|
||||||
|
|
||||||
import django.db.models.deletion
|
from django.db import migrations
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
|
||||||
name='Agency',
|
|
||||||
fields=[
|
|
||||||
('agency_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('agency_name', models.CharField(max_length=255)),
|
|
||||||
('agency_url', models.URLField()),
|
|
||||||
('agency_timezone', models.CharField(max_length=255)),
|
|
||||||
('agency_lang', models.CharField(blank=True, max_length=2, null=True)),
|
|
||||||
('agency_phone', models.CharField(blank=True, max_length=50, null=True)),
|
|
||||||
('agency_fare_url', models.URLField(blank=True, null=True)),
|
|
||||||
('agency_email', models.EmailField(blank=True, max_length=254, null=True)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Area',
|
|
||||||
fields=[
|
|
||||||
('area_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('area_name', models.CharField(max_length=255)),
|
|
||||||
('area_description', models.TextField(blank=True, null=True)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Calendar',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('service_id', models.IntegerField()),
|
|
||||||
('monday', models.BooleanField()),
|
|
||||||
('tuesday', models.BooleanField()),
|
|
||||||
('wednesday', models.BooleanField()),
|
|
||||||
('thursday', models.BooleanField()),
|
|
||||||
('friday', models.BooleanField()),
|
|
||||||
('saturday', models.BooleanField()),
|
|
||||||
('sunday', models.BooleanField()),
|
|
||||||
('start_date', models.DateField()),
|
|
||||||
('end_date', models.DateField()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='FareMedium',
|
|
||||||
fields=[
|
|
||||||
('fare_media_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('fare_media_name', models.CharField(max_length=255)),
|
|
||||||
('fare_media_description', models.TextField(blank=True, null=True)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='FareProduct',
|
|
||||||
fields=[
|
|
||||||
('fare_product_id', models.BigAutoField(primary_key=True, serialize=False)),
|
|
||||||
('fare_product_name', models.CharField(max_length=255)),
|
|
||||||
('fare_product_description', models.TextField(blank=True, null=True)),
|
|
||||||
('amount', models.FloatField()),
|
|
||||||
('curreny', models.CharField(max_length=64)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='FeedInfo',
|
|
||||||
fields=[
|
|
||||||
('feed_publisher_name', models.CharField(max_length=255)),
|
|
||||||
('feed_publisher_url', models.URLField()),
|
|
||||||
('feed_lang', models.CharField(max_length=255)),
|
|
||||||
('default_lang', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('feed_start_date', models.DateField(blank=True, null=True)),
|
|
||||||
('feed_end_date', models.DateField(blank=True, null=True)),
|
|
||||||
('feed_version', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('feed_contact_email', models.EmailField(blank=True, max_length=254, null=True)),
|
|
||||||
('feed_contact_url', models.URLField(blank=True, null=True)),
|
|
||||||
('feed_id', models.BigAutoField(primary_key=True, serialize=False)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Level',
|
|
||||||
fields=[
|
|
||||||
('level_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('level_index', models.FloatField()),
|
|
||||||
('level_name', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='LocationGroup',
|
|
||||||
fields=[
|
|
||||||
('location_group_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('location_group_name', models.CharField(max_length=255)),
|
|
||||||
('location_group_type', models.CharField(max_length=255)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='LocationsGeojson',
|
|
||||||
fields=[
|
|
||||||
('location_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('location_name', models.CharField(max_length=255)),
|
|
||||||
('location_lat', models.FloatField()),
|
|
||||||
('location_lon', models.FloatField()),
|
|
||||||
('location_type', models.CharField(max_length=255)),
|
|
||||||
('parent_location_id', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('wheelchair_boarding', models.BooleanField(blank=True, null=True)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Network',
|
|
||||||
fields=[
|
|
||||||
('network_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('network_name', models.CharField(max_length=255)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Timeframe',
|
|
||||||
fields=[
|
|
||||||
('timeframe_group_id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('service_id', models.IntegerField()),
|
|
||||||
('start_date', models.DateField()),
|
|
||||||
('end_date', models.DateField()),
|
|
||||||
('start_time', models.TimeField()),
|
|
||||||
('end_time', models.TimeField()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Translation',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('table_name', models.CharField(max_length=255)),
|
|
||||||
('field_name', models.CharField(max_length=255)),
|
|
||||||
('language', models.CharField(max_length=2)),
|
|
||||||
('translation', models.TextField()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='CalendarDate',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('service_id', models.IntegerField()),
|
|
||||||
('date', models.DateField()),
|
|
||||||
('exception_type', models.IntegerField()),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'unique_together': {('service_id', 'date')},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='FareAttribute',
|
|
||||||
fields=[
|
|
||||||
('fare_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('price', models.FloatField()),
|
|
||||||
('currency_type', models.CharField(max_length=3)),
|
|
||||||
('payment_method', models.IntegerField()),
|
|
||||||
('transfers', models.IntegerField()),
|
|
||||||
('transfer_duration', models.IntegerField(blank=True, null=True)),
|
|
||||||
('agency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.agency')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='FareTransferRule',
|
|
||||||
fields=[
|
|
||||||
('fare_transfer_rule_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('fare_transfer_rule_name', models.CharField(max_length=255)),
|
|
||||||
('fare_transfer_rule_description', models.TextField(blank=True, null=True)),
|
|
||||||
('from_leg_group_id', models.IntegerField(blank=True, null=True)),
|
|
||||||
('to_leg_group_id', models.IntegerField(blank=True, null=True)),
|
|
||||||
('fare_product_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.fareproduct')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Route',
|
|
||||||
fields=[
|
|
||||||
('route_id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('route_short_name', models.CharField(max_length=50)),
|
|
||||||
('route_long_name', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('route_desc', models.TextField(blank=True, null=True)),
|
|
||||||
('route_type', models.IntegerField(default=0)),
|
|
||||||
('route_url', models.URLField(blank=True, null=True)),
|
|
||||||
('route_color', models.CharField(blank=True, max_length=6, null=True)),
|
|
||||||
('route_text_color', models.CharField(blank=True, max_length=6, null=True)),
|
|
||||||
('route_sort_order', models.IntegerField(blank=True, null=True)),
|
|
||||||
('continuous_pickup', models.IntegerField(blank=True, null=True)),
|
|
||||||
('continuous_drop_off', models.IntegerField(blank=True, null=True)),
|
|
||||||
('agency_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.agency')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='FareRule',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('origin_id', models.IntegerField(blank=True, null=True)),
|
|
||||||
('destination_id', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('contains_id', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('fare', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.fareattribute')),
|
|
||||||
('route', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.route')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='RouteNetwork',
|
|
||||||
fields=[
|
|
||||||
('route_network_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('route_network_name', models.CharField(max_length=255)),
|
|
||||||
('network_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.network')),
|
|
||||||
('route_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.route')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Shape',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('shape_id', models.CharField(max_length=255)),
|
|
||||||
('shape_pt_lat', models.FloatField()),
|
|
||||||
('shape_pt_lon', models.FloatField()),
|
|
||||||
('shape_pt_sequence', models.IntegerField()),
|
|
||||||
('shape_dist_traveled', models.FloatField(blank=True, null=True)),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'unique_together': {('shape_id', 'shape_pt_sequence')},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Stop',
|
|
||||||
fields=[
|
|
||||||
('stop_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('stop_code', models.CharField(blank=True, max_length=50, null=True)),
|
|
||||||
('stop_name', models.CharField(max_length=255)),
|
|
||||||
('stop_desc', models.TextField(blank=True, null=True)),
|
|
||||||
('stop_lat', models.FloatField()),
|
|
||||||
('stop_lon', models.FloatField()),
|
|
||||||
('zone_id', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('stop_url', models.URLField(blank=True, null=True)),
|
|
||||||
('location_type', models.IntegerField(blank=True, null=True)),
|
|
||||||
('stop_timezone', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('wheelchair_boarding', models.IntegerField(blank=True, null=True)),
|
|
||||||
('platform_code', models.CharField(blank=True, max_length=50, null=True)),
|
|
||||||
('level_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.level')),
|
|
||||||
('parent_station', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Pathway',
|
|
||||||
fields=[
|
|
||||||
('pathway_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('pathway_mode', models.IntegerField()),
|
|
||||||
('is_bidirectional', models.IntegerField()),
|
|
||||||
('length', models.FloatField(blank=True, null=True)),
|
|
||||||
('traversal_time', models.IntegerField(blank=True, null=True)),
|
|
||||||
('stair_count', models.IntegerField(blank=True, null=True)),
|
|
||||||
('max_slope', models.FloatField(blank=True, null=True)),
|
|
||||||
('min_width', models.FloatField(blank=True, null=True)),
|
|
||||||
('signposted_as', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('reversed_signposted_as', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('from_stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pathways_from', to='pt_map.stop')),
|
|
||||||
('to_stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pathways_to', to='pt_map.stop')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='LocationGroupStop',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('location_group_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.locationgroup')),
|
|
||||||
('stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='StopArea',
|
|
||||||
fields=[
|
|
||||||
('stop_area_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('stop_area_name', models.CharField(max_length=255)),
|
|
||||||
('stop_area_description', models.TextField(blank=True, null=True)),
|
|
||||||
('area_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.area')),
|
|
||||||
('stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='FareLegRule',
|
|
||||||
fields=[
|
|
||||||
('fare_leg_rule_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('fare_leg_rule_name', models.CharField(max_length=255)),
|
|
||||||
('fare_leg_rule_description', models.TextField(blank=True, null=True)),
|
|
||||||
('from_area_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_from_area', to='pt_map.area')),
|
|
||||||
('to_area_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_to_area', to='pt_map.area')),
|
|
||||||
('fare_product_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.fareproduct')),
|
|
||||||
('network_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.network')),
|
|
||||||
('from_timeframe_group_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_from_timeframe', to='pt_map.timeframe')),
|
|
||||||
('to_timeframe_group_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_to_timeframe', to='pt_map.timeframe')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Trip',
|
|
||||||
fields=[
|
|
||||||
('trip_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('service_id', models.IntegerField()),
|
|
||||||
('trip_headsign', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('trip_short_name', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('direction_id', models.IntegerField(blank=True, null=True)),
|
|
||||||
('block_id', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('wheelchair_accessible', models.IntegerField(blank=True, null=True)),
|
|
||||||
('bikes_allowed', models.IntegerField(blank=True, null=True)),
|
|
||||||
('route_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.route')),
|
|
||||||
('shape_id', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.shape')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Frequency',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('start_time', models.TimeField()),
|
|
||||||
('end_time', models.TimeField()),
|
|
||||||
('headway_secs', models.IntegerField()),
|
|
||||||
('exact_times', models.IntegerField(blank=True, null=True)),
|
|
||||||
('trip_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.trip')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='BookingRule',
|
|
||||||
fields=[
|
|
||||||
('booking_rule_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
|
||||||
('start_time', models.TimeField(blank=True, null=True)),
|
|
||||||
('end_time', models.TimeField(blank=True, null=True)),
|
|
||||||
('booking_type', models.CharField(max_length=255)),
|
|
||||||
('rule_criteria', models.TextField(blank=True, null=True)),
|
|
||||||
('booking_rule_instructions', models.TextField(blank=True, null=True)),
|
|
||||||
('trip', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.trip')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Attribution',
|
|
||||||
fields=[
|
|
||||||
('attribution_id', models.BigAutoField(primary_key=True, serialize=False)),
|
|
||||||
('attribution_name', models.CharField(max_length=255)),
|
|
||||||
('attribution_url', models.URLField()),
|
|
||||||
('attribution_email', models.EmailField(blank=True, max_length=254, null=True)),
|
|
||||||
('attribution_phone', models.CharField(blank=True, max_length=50, null=True)),
|
|
||||||
('agency_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.agency')),
|
|
||||||
('route_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.route')),
|
|
||||||
('trip_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.trip')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Transfer',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('transfer_type', models.IntegerField()),
|
|
||||||
('min_transfer_time', models.IntegerField(blank=True, null=True)),
|
|
||||||
('from_route_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_from_route', to='pt_map.route')),
|
|
||||||
('from_stop', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers_from_stop', to='pt_map.stop')),
|
|
||||||
('to_route_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_to_route', to='pt_map.route')),
|
|
||||||
('to_stop', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers_to_stop', to='pt_map.stop')),
|
|
||||||
('from_trip_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_from_trip', to='pt_map.trip')),
|
|
||||||
('to_trip_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_to_trip', to='pt_map.trip')),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'unique_together': {('from_stop', 'to_stop')},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='StopTime',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('arrival_time', models.TimeField(blank=True, null=True)),
|
|
||||||
('departure_time', models.TimeField(blank=True, null=True)),
|
|
||||||
('stop_sequence', models.IntegerField()),
|
|
||||||
('stop_headsign', models.CharField(blank=True, max_length=255, null=True)),
|
|
||||||
('pickup_type', models.IntegerField(blank=True, null=True)),
|
|
||||||
('drop_off_type', models.IntegerField(blank=True, null=True)),
|
|
||||||
('shape_dist_traveled', models.FloatField(blank=True, null=True)),
|
|
||||||
('timepoint', models.IntegerField(blank=True, null=True)),
|
|
||||||
('location_group_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.locationgroup')),
|
|
||||||
('location_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.locationsgeojson')),
|
|
||||||
('stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
|
||||||
('trip_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.trip')),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'unique_together': {('trip_id', 'stop_sequence')},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
|
|
|
||||||
420
transport_accessibility/pt_map/migrations/0002_initial.py
Normal file
420
transport_accessibility/pt_map/migrations/0002_initial.py
Normal file
|
|
@ -0,0 +1,420 @@
|
||||||
|
# Generated by Django 5.0.6 on 2024-06-17 19:43
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('pt_map', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Agency',
|
||||||
|
fields=[
|
||||||
|
('agency_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('agency_name', models.CharField(max_length=255)),
|
||||||
|
('agency_url', models.URLField()),
|
||||||
|
('agency_timezone', models.CharField(max_length=255)),
|
||||||
|
('agency_lang', models.CharField(blank=True, max_length=2, null=True)),
|
||||||
|
('agency_phone', models.CharField(blank=True, max_length=50, null=True)),
|
||||||
|
('agency_fare_url', models.URLField(blank=True, null=True)),
|
||||||
|
('agency_email', models.EmailField(blank=True, max_length=254, null=True)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FareProduct',
|
||||||
|
fields=[
|
||||||
|
('fare_product_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('fare_product_name', models.CharField(max_length=255)),
|
||||||
|
('fare_product_description', models.TextField(blank=True, null=True)),
|
||||||
|
('amount', models.FloatField()),
|
||||||
|
('curreny', models.CharField(max_length=64)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FeedInfo',
|
||||||
|
fields=[
|
||||||
|
('feed_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('feed_publisher_name', models.CharField(max_length=255)),
|
||||||
|
('feed_publisher_url', models.URLField()),
|
||||||
|
('feed_lang', models.CharField(max_length=255)),
|
||||||
|
('default_lang', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('feed_start_date', models.DateField(blank=True, null=True)),
|
||||||
|
('feed_end_date', models.DateField(blank=True, null=True)),
|
||||||
|
('feed_version', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('feed_contact_email', models.EmailField(blank=True, max_length=254, null=True)),
|
||||||
|
('feed_contact_url', models.URLField(blank=True, null=True)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FareAttribute',
|
||||||
|
fields=[
|
||||||
|
('fare_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('price', models.FloatField()),
|
||||||
|
('currency_type', models.CharField(max_length=3)),
|
||||||
|
('payment_method', models.IntegerField()),
|
||||||
|
('transfers', models.IntegerField()),
|
||||||
|
('transfer_duration', models.IntegerField(blank=True, null=True)),
|
||||||
|
('agency_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.agency')),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FareTransferRule',
|
||||||
|
fields=[
|
||||||
|
('fare_transfer_rule_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('fare_transfer_rule_name', models.CharField(max_length=255)),
|
||||||
|
('fare_transfer_rule_description', models.TextField(blank=True, null=True)),
|
||||||
|
('from_leg_group_id', models.IntegerField(blank=True, null=True)),
|
||||||
|
('to_leg_group_id', models.IntegerField(blank=True, null=True)),
|
||||||
|
('fare_product_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.fareproduct')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='fareproduct',
|
||||||
|
name='feed_info_id',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo'),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FareMedium',
|
||||||
|
fields=[
|
||||||
|
('fare_media_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('fare_media_name', models.CharField(max_length=255)),
|
||||||
|
('fare_media_description', models.TextField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Calendar',
|
||||||
|
fields=[
|
||||||
|
('service_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('monday', models.BooleanField()),
|
||||||
|
('tuesday', models.BooleanField()),
|
||||||
|
('wednesday', models.BooleanField()),
|
||||||
|
('thursday', models.BooleanField()),
|
||||||
|
('friday', models.BooleanField()),
|
||||||
|
('saturday', models.BooleanField()),
|
||||||
|
('sunday', models.BooleanField()),
|
||||||
|
('start_date', models.DateField()),
|
||||||
|
('end_date', models.DateField()),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Area',
|
||||||
|
fields=[
|
||||||
|
('area_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('area_name', models.CharField(max_length=255)),
|
||||||
|
('area_description', models.TextField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='agency',
|
||||||
|
name='feed_info_id',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo'),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Level',
|
||||||
|
fields=[
|
||||||
|
('level_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('level_index', models.FloatField()),
|
||||||
|
('level_name', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='LocationGroup',
|
||||||
|
fields=[
|
||||||
|
('location_group_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('location_group_name', models.CharField(max_length=255)),
|
||||||
|
('location_group_type', models.CharField(max_length=255)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='LocationsGeojson',
|
||||||
|
fields=[
|
||||||
|
('location_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('location_name', models.CharField(max_length=255)),
|
||||||
|
('location_lat', models.FloatField()),
|
||||||
|
('location_lon', models.FloatField()),
|
||||||
|
('location_type', models.CharField(max_length=255)),
|
||||||
|
('parent_location_id', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('wheelchair_boarding', models.BooleanField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Network',
|
||||||
|
fields=[
|
||||||
|
('network_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('network_name', models.CharField(max_length=255)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Route',
|
||||||
|
fields=[
|
||||||
|
('route_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('route_short_name', models.CharField(max_length=50)),
|
||||||
|
('route_long_name', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('route_desc', models.TextField(blank=True, null=True)),
|
||||||
|
('route_type', models.IntegerField(default=0)),
|
||||||
|
('route_url', models.URLField(blank=True, null=True)),
|
||||||
|
('route_color', models.CharField(blank=True, max_length=6, null=True)),
|
||||||
|
('route_text_color', models.CharField(blank=True, max_length=6, null=True)),
|
||||||
|
('route_sort_order', models.IntegerField(blank=True, null=True)),
|
||||||
|
('continuous_pickup', models.IntegerField(blank=True, null=True)),
|
||||||
|
('continuous_drop_off', models.IntegerField(blank=True, null=True)),
|
||||||
|
('agency_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.agency')),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FareRule',
|
||||||
|
fields=[
|
||||||
|
('fare_rule_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('origin_id', models.IntegerField(blank=True, null=True)),
|
||||||
|
('destination_id', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('contains_id', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('fare_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.fareattribute')),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('route_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.route')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='RouteNetwork',
|
||||||
|
fields=[
|
||||||
|
('route_network_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('route_network_name', models.CharField(max_length=255)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('network_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.network')),
|
||||||
|
('route_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.route')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Shape',
|
||||||
|
fields=[
|
||||||
|
('shape_pk', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('shape_id', models.CharField(max_length=255)),
|
||||||
|
('shape_pt_lat', models.FloatField()),
|
||||||
|
('shape_pt_lon', models.FloatField()),
|
||||||
|
('shape_pt_sequence', models.IntegerField()),
|
||||||
|
('shape_dist_traveled', models.FloatField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'unique_together': {('shape_id', 'shape_pt_sequence')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Stop',
|
||||||
|
fields=[
|
||||||
|
('stop_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('stop_code', models.CharField(blank=True, max_length=50, null=True)),
|
||||||
|
('stop_name', models.CharField(max_length=255)),
|
||||||
|
('stop_desc', models.TextField(blank=True, null=True)),
|
||||||
|
('stop_lat', models.FloatField()),
|
||||||
|
('stop_lon', models.FloatField()),
|
||||||
|
('zone_id', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('stop_url', models.URLField(blank=True, null=True)),
|
||||||
|
('location_type', models.IntegerField(blank=True, null=True)),
|
||||||
|
('stop_timezone', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('wheelchair_boarding', models.IntegerField(blank=True, null=True)),
|
||||||
|
('platform_code', models.CharField(blank=True, max_length=50, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('level_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.level')),
|
||||||
|
('parent_station', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Pathway',
|
||||||
|
fields=[
|
||||||
|
('pathway_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('pathway_mode', models.IntegerField()),
|
||||||
|
('is_bidirectional', models.IntegerField()),
|
||||||
|
('length', models.FloatField(blank=True, null=True)),
|
||||||
|
('traversal_time', models.IntegerField(blank=True, null=True)),
|
||||||
|
('stair_count', models.IntegerField(blank=True, null=True)),
|
||||||
|
('max_slope', models.FloatField(blank=True, null=True)),
|
||||||
|
('min_width', models.FloatField(blank=True, null=True)),
|
||||||
|
('signposted_as', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('reversed_signposted_as', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('from_stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pathways_from', to='pt_map.stop')),
|
||||||
|
('to_stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pathways_to', to='pt_map.stop')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='LocationGroupStop',
|
||||||
|
fields=[
|
||||||
|
('location_group_stop_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('location_group_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.locationgroup')),
|
||||||
|
('stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='StopArea',
|
||||||
|
fields=[
|
||||||
|
('stop_area_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('stop_area_name', models.CharField(max_length=255)),
|
||||||
|
('stop_area_description', models.TextField(blank=True, null=True)),
|
||||||
|
('area_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.area')),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Timeframe',
|
||||||
|
fields=[
|
||||||
|
('timeframe_group_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('service_id', models.IntegerField()),
|
||||||
|
('start_date', models.DateField()),
|
||||||
|
('end_date', models.DateField()),
|
||||||
|
('start_time', models.TimeField()),
|
||||||
|
('end_time', models.TimeField()),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FareLegRule',
|
||||||
|
fields=[
|
||||||
|
('fare_leg_rule_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('fare_leg_rule_name', models.CharField(max_length=255)),
|
||||||
|
('fare_leg_rule_description', models.TextField(blank=True, null=True)),
|
||||||
|
('from_area_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_from_area', to='pt_map.area')),
|
||||||
|
('to_area_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_to_area', to='pt_map.area')),
|
||||||
|
('fare_product_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.fareproduct')),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('network_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.network')),
|
||||||
|
('from_timeframe_group_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_from_timeframe', to='pt_map.timeframe')),
|
||||||
|
('to_timeframe_group_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='farelegrule_to_timeframe', to='pt_map.timeframe')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Translation',
|
||||||
|
fields=[
|
||||||
|
('translation_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('table_name', models.CharField(max_length=255)),
|
||||||
|
('field_name', models.CharField(max_length=255)),
|
||||||
|
('language', models.CharField(max_length=2)),
|
||||||
|
('translation', models.TextField()),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Trip',
|
||||||
|
fields=[
|
||||||
|
('trip_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('service_id', models.IntegerField()),
|
||||||
|
('trip_headsign', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('trip_short_name', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('direction_id', models.IntegerField(blank=True, null=True)),
|
||||||
|
('block_id', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('wheelchair_accessible', models.IntegerField(blank=True, null=True)),
|
||||||
|
('bikes_allowed', models.IntegerField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('route_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.route')),
|
||||||
|
('shape_id', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='pt_map.shape')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Frequency',
|
||||||
|
fields=[
|
||||||
|
('frequency_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('start_time', models.TimeField()),
|
||||||
|
('end_time', models.TimeField()),
|
||||||
|
('headway_secs', models.IntegerField()),
|
||||||
|
('exact_times', models.IntegerField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('trip_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.trip')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='BookingRule',
|
||||||
|
fields=[
|
||||||
|
('booking_rule_id', models.CharField(max_length=255, primary_key=True, serialize=False)),
|
||||||
|
('start_time', models.TimeField(blank=True, null=True)),
|
||||||
|
('end_time', models.TimeField(blank=True, null=True)),
|
||||||
|
('booking_type', models.CharField(max_length=255)),
|
||||||
|
('rule_criteria', models.TextField(blank=True, null=True)),
|
||||||
|
('booking_rule_instructions', models.TextField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('trip_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.trip')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Attribution',
|
||||||
|
fields=[
|
||||||
|
('attribution_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('attribution_name', models.CharField(max_length=255)),
|
||||||
|
('attribution_url', models.URLField()),
|
||||||
|
('attribution_email', models.EmailField(blank=True, max_length=254, null=True)),
|
||||||
|
('attribution_phone', models.CharField(blank=True, max_length=50, null=True)),
|
||||||
|
('agency_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.agency')),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('route_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.route')),
|
||||||
|
('trip_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.trip')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CalendarDate',
|
||||||
|
fields=[
|
||||||
|
('calendar_date_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('service_id', models.CharField(max_length=255)),
|
||||||
|
('date', models.DateField()),
|
||||||
|
('exception_type', models.IntegerField()),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'unique_together': {('service_id', 'date')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Transfer',
|
||||||
|
fields=[
|
||||||
|
('transfer_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('transfer_type', models.IntegerField()),
|
||||||
|
('min_transfer_time', models.IntegerField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('from_route_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_from_route', to='pt_map.route')),
|
||||||
|
('from_stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers_from_stop', to='pt_map.stop')),
|
||||||
|
('to_route_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_to_route', to='pt_map.route')),
|
||||||
|
('to_stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transfers_to_stop', to='pt_map.stop')),
|
||||||
|
('from_trip_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_from_trip', to='pt_map.trip')),
|
||||||
|
('to_trip_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transfers_to_trip', to='pt_map.trip')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'unique_together': {('from_stop_id', 'to_stop_id')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='StopTime',
|
||||||
|
fields=[
|
||||||
|
('stop_time_id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||||
|
('arrival_time', models.TimeField(blank=True, null=True)),
|
||||||
|
('departure_time', models.TimeField(blank=True, null=True)),
|
||||||
|
('stop_sequence', models.IntegerField()),
|
||||||
|
('stop_headsign', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
|
('pickup_type', models.IntegerField(blank=True, null=True)),
|
||||||
|
('drop_off_type', models.IntegerField(blank=True, null=True)),
|
||||||
|
('shape_dist_traveled', models.FloatField(blank=True, null=True)),
|
||||||
|
('timepoint', models.IntegerField(blank=True, null=True)),
|
||||||
|
('feed_info_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo')),
|
||||||
|
('location_group_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.locationgroup')),
|
||||||
|
('location_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pt_map.locationsgeojson')),
|
||||||
|
('stop_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.stop')),
|
||||||
|
('trip_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pt_map.trip')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'unique_together': {('trip_id', 'stop_sequence')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
# Generated by Django 5.0.6 on 2024-06-06 17:55
|
|
||||||
|
|
||||||
from django.db import migrations
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pt_map', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.RenameField(
|
|
||||||
model_name='bookingrule',
|
|
||||||
old_name='trip',
|
|
||||||
new_name='trip_id',
|
|
||||||
),
|
|
||||||
migrations.RenameField(
|
|
||||||
model_name='fareattribute',
|
|
||||||
old_name='agency',
|
|
||||||
new_name='agency_id',
|
|
||||||
),
|
|
||||||
migrations.RenameField(
|
|
||||||
model_name='farerule',
|
|
||||||
old_name='fare',
|
|
||||||
new_name='fare_id',
|
|
||||||
),
|
|
||||||
migrations.RenameField(
|
|
||||||
model_name='farerule',
|
|
||||||
old_name='route',
|
|
||||||
new_name='route_id',
|
|
||||||
),
|
|
||||||
migrations.RenameField(
|
|
||||||
model_name='transfer',
|
|
||||||
old_name='from_stop',
|
|
||||||
new_name='from_stop_id',
|
|
||||||
),
|
|
||||||
migrations.RenameField(
|
|
||||||
model_name='transfer',
|
|
||||||
old_name='to_stop',
|
|
||||||
new_name='to_stop_id',
|
|
||||||
),
|
|
||||||
migrations.AlterUniqueTogether(
|
|
||||||
name='transfer',
|
|
||||||
unique_together={('from_stop_id', 'to_stop_id')},
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -1,93 +0,0 @@
|
||||||
# Generated by Django 5.0.6 on 2024-06-06 21:43
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pt_map', '0002_rename_trip_bookingrule_trip_id_and_more'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='agency',
|
|
||||||
name='agency_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='area',
|
|
||||||
name='area_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='bookingrule',
|
|
||||||
name='booking_rule_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='fareattribute',
|
|
||||||
name='fare_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='farelegrule',
|
|
||||||
name='fare_leg_rule_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='faremedium',
|
|
||||||
name='fare_media_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='faretransferrule',
|
|
||||||
name='fare_transfer_rule_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='level',
|
|
||||||
name='level_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='locationgroup',
|
|
||||||
name='location_group_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='locationsgeojson',
|
|
||||||
name='location_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='network',
|
|
||||||
name='network_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='pathway',
|
|
||||||
name='pathway_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='routenetwork',
|
|
||||||
name='route_network_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='stop',
|
|
||||||
name='stop_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='stoparea',
|
|
||||||
name='stop_area_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='trip',
|
|
||||||
name='trip_id',
|
|
||||||
field=models.IntegerField(primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Generated by Django 5.0.6 on 2024-06-19 20:12
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
import django.utils.timezone
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('pt_map', '0002_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='faretransferrule',
|
||||||
|
name='feed_info_id',
|
||||||
|
field=models.ForeignKey(default=django.utils.timezone.now, on_delete=django.db.models.deletion.CASCADE, to='pt_map.feedinfo'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1,103 +0,0 @@
|
||||||
# Generated by Django 5.0.6 on 2024-06-06 21:54
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pt_map', '0003_alter_agency_agency_id_alter_area_area_id_and_more'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='agency',
|
|
||||||
name='agency_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='area',
|
|
||||||
name='area_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='bookingrule',
|
|
||||||
name='booking_rule_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='fareattribute',
|
|
||||||
name='fare_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='farelegrule',
|
|
||||||
name='fare_leg_rule_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='faremedium',
|
|
||||||
name='fare_media_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='faretransferrule',
|
|
||||||
name='fare_transfer_rule_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='level',
|
|
||||||
name='level_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='locationgroup',
|
|
||||||
name='location_group_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='locationsgeojson',
|
|
||||||
name='location_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='network',
|
|
||||||
name='network_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='pathway',
|
|
||||||
name='pathway_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='route',
|
|
||||||
name='route_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='routenetwork',
|
|
||||||
name='route_network_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='stop',
|
|
||||||
name='stop_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='stoparea',
|
|
||||||
name='stop_area_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='timeframe',
|
|
||||||
name='timeframe_group_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='trip',
|
|
||||||
name='trip_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
# Generated by Django 5.0.6 on 2024-06-09 20:17
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('pt_map', '0004_alter_agency_agency_id_alter_area_area_id_and_more'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='calendar',
|
|
||||||
name='id',
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='calendar',
|
|
||||||
name='service_id',
|
|
||||||
field=models.CharField(max_length=255, primary_key=True, serialize=False),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='calendardate',
|
|
||||||
name='service_id',
|
|
||||||
field=models.CharField(max_length=255),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
@ -13,6 +13,21 @@ Agency, Stop, Route, Trip, StopTime, Calendar, CalendarDate, FareAttribute, Fare
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from pt_map.gtfs_schema import gtfs_schema
|
from pt_map.gtfs_schema import gtfs_schema
|
||||||
|
|
||||||
|
class FeedInfo(models.Model):
|
||||||
|
"""
|
||||||
|
Represents feed_info.txt from the GTFS Reference.
|
||||||
|
"""
|
||||||
|
feed_id = models.BigAutoField(primary_key=True)
|
||||||
|
feed_publisher_name = models.CharField(max_length=255)
|
||||||
|
feed_publisher_url = models.URLField()
|
||||||
|
feed_lang = models.CharField(max_length=255)
|
||||||
|
default_lang = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
feed_start_date = models.DateField(blank=True, null=True)
|
||||||
|
feed_end_date = models.DateField(blank=True, null=True)
|
||||||
|
feed_version = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
feed_contact_email = models.EmailField(blank=True, null=True)
|
||||||
|
feed_contact_url = models.URLField(blank=True, null=True)
|
||||||
|
|
||||||
class Agency(models.Model):
|
class Agency(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents agency.txt from the GTFS Reference.
|
Represents agency.txt from the GTFS Reference.
|
||||||
|
|
@ -25,7 +40,7 @@ class Agency(models.Model):
|
||||||
agency_phone = models.CharField(max_length=50, blank=True, null=True)
|
agency_phone = models.CharField(max_length=50, blank=True, null=True)
|
||||||
agency_fare_url = models.URLField(blank=True, null=True)
|
agency_fare_url = models.URLField(blank=True, null=True)
|
||||||
agency_email = models.EmailField(blank=True, null=True)
|
agency_email = models.EmailField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Level(models.Model):
|
class Level(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -34,7 +49,7 @@ class Level(models.Model):
|
||||||
level_id = models.CharField(max_length=255, primary_key=True)
|
level_id = models.CharField(max_length=255, primary_key=True)
|
||||||
level_index = models.FloatField()
|
level_index = models.FloatField()
|
||||||
level_name = models.CharField(max_length=255, blank=True, null=True)
|
level_name = models.CharField(max_length=255, blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Stop(models.Model):
|
class Stop(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -54,7 +69,7 @@ class Stop(models.Model):
|
||||||
wheelchair_boarding = models.IntegerField(blank=True, null=True)
|
wheelchair_boarding = models.IntegerField(blank=True, null=True)
|
||||||
level_id = models.ForeignKey(Level, on_delete=models.SET_NULL, blank=True, null=True)
|
level_id = models.ForeignKey(Level, on_delete=models.SET_NULL, blank=True, null=True)
|
||||||
platform_code = models.CharField(max_length=50, blank=True, null=True)
|
platform_code = models.CharField(max_length=50, blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Route(models.Model):
|
class Route(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -72,18 +87,19 @@ class Route(models.Model):
|
||||||
route_sort_order = models.IntegerField(blank=True, null=True)
|
route_sort_order = models.IntegerField(blank=True, null=True)
|
||||||
continuous_pickup = models.IntegerField(blank=True, null=True)
|
continuous_pickup = models.IntegerField(blank=True, null=True)
|
||||||
continuous_drop_off = models.IntegerField(blank=True, null=True)
|
continuous_drop_off = models.IntegerField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Shape(models.Model):
|
class Shape(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents shape.txt from the GTFS Reference.
|
Represents shape.txt from the GTFS Reference.
|
||||||
"""
|
"""
|
||||||
|
shape_pk = models.BigAutoField(primary_key=True)
|
||||||
shape_id = models.CharField(max_length=255)
|
shape_id = models.CharField(max_length=255)
|
||||||
shape_pt_lat = models.FloatField()
|
shape_pt_lat = models.FloatField()
|
||||||
shape_pt_lon = models.FloatField()
|
shape_pt_lon = models.FloatField()
|
||||||
shape_pt_sequence = models.IntegerField()
|
shape_pt_sequence = models.IntegerField()
|
||||||
shape_dist_traveled = models.FloatField(blank=True, null=True)
|
shape_dist_traveled = models.FloatField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = (('shape_id', 'shape_pt_sequence'),)
|
unique_together = (('shape_id', 'shape_pt_sequence'),)
|
||||||
|
|
@ -92,7 +108,6 @@ class Calendar(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents calendar.txt from the GTFS Reference.
|
Represents calendar.txt from the GTFS Reference.
|
||||||
"""
|
"""
|
||||||
calendar_id = models.BigAutoField(primary_key=True)
|
|
||||||
service_id = models.CharField(max_length=255,primary_key=True)
|
service_id = models.CharField(max_length=255,primary_key=True)
|
||||||
monday = models.BooleanField()
|
monday = models.BooleanField()
|
||||||
tuesday = models.BooleanField()
|
tuesday = models.BooleanField()
|
||||||
|
|
@ -103,7 +118,7 @@ class Calendar(models.Model):
|
||||||
sunday = models.BooleanField()
|
sunday = models.BooleanField()
|
||||||
start_date = models.DateField()
|
start_date = models.DateField()
|
||||||
end_date = models.DateField()
|
end_date = models.DateField()
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class CalendarDate(models.Model):
|
class CalendarDate(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -113,7 +128,7 @@ class CalendarDate(models.Model):
|
||||||
service_id = models.CharField(max_length=255)
|
service_id = models.CharField(max_length=255)
|
||||||
date = models.DateField()
|
date = models.DateField()
|
||||||
exception_type = models.IntegerField()
|
exception_type = models.IntegerField()
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = (('service_id', 'date'),)
|
unique_together = (('service_id', 'date'),)
|
||||||
|
|
@ -146,7 +161,7 @@ class Trip(models.Model):
|
||||||
"wheelchair_accessible": self.wheelchair_accessible,
|
"wheelchair_accessible": self.wheelchair_accessible,
|
||||||
"bikes_allowed": self.bikes_allowed,
|
"bikes_allowed": self.bikes_allowed,
|
||||||
}
|
}
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class LocationGroup(models.Model):
|
class LocationGroup(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -155,7 +170,7 @@ class LocationGroup(models.Model):
|
||||||
location_group_id = models.CharField(max_length=255, primary_key=True)
|
location_group_id = models.CharField(max_length=255, primary_key=True)
|
||||||
location_group_name = models.CharField(max_length=255)
|
location_group_name = models.CharField(max_length=255)
|
||||||
location_group_type = models.CharField(max_length=255)
|
location_group_type = models.CharField(max_length=255)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class LocationsGeojson(models.Model):
|
class LocationsGeojson(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -168,7 +183,7 @@ class LocationsGeojson(models.Model):
|
||||||
location_type = models.CharField(max_length=255)
|
location_type = models.CharField(max_length=255)
|
||||||
parent_location_id = models.CharField(max_length=255, blank=True, null=True)
|
parent_location_id = models.CharField(max_length=255, blank=True, null=True)
|
||||||
wheelchair_boarding = models.BooleanField(blank=True, null=True)
|
wheelchair_boarding = models.BooleanField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class StopTime(models.Model):
|
class StopTime(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -187,7 +202,7 @@ class StopTime(models.Model):
|
||||||
drop_off_type = models.IntegerField(blank=True, null=True)
|
drop_off_type = models.IntegerField(blank=True, null=True)
|
||||||
shape_dist_traveled = models.FloatField(blank=True, null=True)
|
shape_dist_traveled = models.FloatField(blank=True, null=True)
|
||||||
timepoint = models.IntegerField(blank=True, null=True)
|
timepoint = models.IntegerField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = (('trip_id', 'stop_sequence'),)
|
unique_together = (('trip_id', 'stop_sequence'),)
|
||||||
|
|
@ -203,34 +218,37 @@ class FareAttribute(models.Model):
|
||||||
transfers = models.IntegerField()
|
transfers = models.IntegerField()
|
||||||
agency_id = models.ForeignKey(Agency, on_delete=models.CASCADE, blank=True, null=True)
|
agency_id = models.ForeignKey(Agency, on_delete=models.CASCADE, blank=True, null=True)
|
||||||
transfer_duration = models.IntegerField(blank=True, null=True)
|
transfer_duration = models.IntegerField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class FareRule(models.Model):
|
class FareRule(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents fare_rule.txt from the GTFS Reference.
|
Represents fare_rule.txt from the GTFS Reference.
|
||||||
"""
|
"""
|
||||||
|
fare_rule_id = models.BigAutoField(primary_key=True)
|
||||||
fare_id = models.ForeignKey(FareAttribute, on_delete=models.CASCADE)
|
fare_id = models.ForeignKey(FareAttribute, on_delete=models.CASCADE)
|
||||||
route_id = models.ForeignKey(Route, on_delete=models.CASCADE, blank=True, null=True)
|
route_id = models.ForeignKey(Route, on_delete=models.CASCADE, blank=True, null=True)
|
||||||
origin_id = models.IntegerField(blank=True, null=True)
|
origin_id = models.IntegerField(blank=True, null=True)
|
||||||
destination_id = models.CharField(max_length=255, blank=True, null=True)
|
destination_id = models.CharField(max_length=255, blank=True, null=True)
|
||||||
contains_id = models.CharField(max_length=255, blank=True, null=True)
|
contains_id = models.CharField(max_length=255, blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Frequency(models.Model):
|
class Frequency(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents frequency.txt from the GTFS Reference.
|
Represents frequency.txt from the GTFS Reference.
|
||||||
"""
|
"""
|
||||||
|
frequency_id = models.BigAutoField(primary_key=True)
|
||||||
trip_id = models.ForeignKey(Trip, on_delete=models.CASCADE)
|
trip_id = models.ForeignKey(Trip, on_delete=models.CASCADE)
|
||||||
start_time = models.TimeField()
|
start_time = models.TimeField()
|
||||||
end_time = models.TimeField()
|
end_time = models.TimeField()
|
||||||
headway_secs = models.IntegerField()
|
headway_secs = models.IntegerField()
|
||||||
exact_times = models.IntegerField(blank=True, null=True)
|
exact_times = models.IntegerField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Transfer(models.Model):
|
class Transfer(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents transfer.txt from the GTFS Reference.
|
Represents transfer.txt from the GTFS Reference.
|
||||||
"""
|
"""
|
||||||
|
transfer_id = models.BigAutoField(primary_key=True)
|
||||||
from_stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE, related_name='transfers_from_stop')
|
from_stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE, related_name='transfers_from_stop')
|
||||||
to_stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE, related_name='transfers_to_stop')
|
to_stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE, related_name='transfers_to_stop')
|
||||||
from_route_id = models.ForeignKey(Route, on_delete=models.SET_NULL, blank=True, null=True, related_name='transfers_from_route')
|
from_route_id = models.ForeignKey(Route, on_delete=models.SET_NULL, blank=True, null=True, related_name='transfers_from_route')
|
||||||
|
|
@ -239,7 +257,7 @@ class Transfer(models.Model):
|
||||||
to_trip_id = models.ForeignKey(Trip, on_delete=models.SET_NULL, blank=True, null=True, related_name='transfers_to_trip')
|
to_trip_id = models.ForeignKey(Trip, on_delete=models.SET_NULL, blank=True, null=True, related_name='transfers_to_trip')
|
||||||
transfer_type = models.IntegerField()
|
transfer_type = models.IntegerField()
|
||||||
min_transfer_time = models.IntegerField(blank=True, null=True)
|
min_transfer_time = models.IntegerField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = (('from_stop_id', 'to_stop_id'),)
|
unique_together = (('from_stop_id', 'to_stop_id'),)
|
||||||
|
|
@ -260,24 +278,7 @@ class Pathway(models.Model):
|
||||||
min_width = models.FloatField(blank=True, null=True)
|
min_width = models.FloatField(blank=True, null=True)
|
||||||
signposted_as = models.CharField(max_length=255, blank=True, null=True)
|
signposted_as = models.CharField(max_length=255, blank=True, null=True)
|
||||||
reversed_signposted_as = models.CharField(max_length=255, blank=True, null=True)
|
reversed_signposted_as = models.CharField(max_length=255, blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class FeedInfo(models.Model):
|
|
||||||
"""
|
|
||||||
Represents feed_info.txt from the GTFS Reference.
|
|
||||||
"""
|
|
||||||
feed_info_id = models.BigAutoField(primary_key=True)
|
|
||||||
feed_publisher_name = models.CharField(max_length=255)
|
|
||||||
feed_publisher_url = models.URLField()
|
|
||||||
feed_lang = models.CharField(max_length=255)
|
|
||||||
default_lang = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
feed_start_date = models.DateField(blank=True, null=True)
|
|
||||||
feed_end_date = models.DateField(blank=True, null=True)
|
|
||||||
feed_version = models.CharField(max_length=255, blank=True, null=True)
|
|
||||||
feed_contact_email = models.EmailField(blank=True, null=True)
|
|
||||||
feed_contact_url = models.URLField(blank=True, null=True)
|
|
||||||
feed_id = models.BigAutoField(primary_key=True)
|
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
|
||||||
|
|
||||||
class BookingRule(models.Model):
|
class BookingRule(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -290,17 +291,18 @@ class BookingRule(models.Model):
|
||||||
booking_type = models.CharField(max_length=255)
|
booking_type = models.CharField(max_length=255)
|
||||||
rule_criteria = models.TextField(blank=True, null=True)
|
rule_criteria = models.TextField(blank=True, null=True)
|
||||||
booking_rule_instructions = models.TextField(blank=True, null=True)
|
booking_rule_instructions = models.TextField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Translation(models.Model):
|
class Translation(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents translation.txt from the GTFS Reference.
|
Represents translation.txt from the GTFS Reference.
|
||||||
"""
|
"""
|
||||||
|
translation_id = models.BigAutoField(primary_key=True)
|
||||||
table_name = models.CharField(max_length=255)
|
table_name = models.CharField(max_length=255)
|
||||||
field_name = models.CharField(max_length=255)
|
field_name = models.CharField(max_length=255)
|
||||||
language = models.CharField(max_length=2)
|
language = models.CharField(max_length=2)
|
||||||
translation = models.TextField()
|
translation = models.TextField()
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Attribution(models.Model):
|
class Attribution(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -314,15 +316,16 @@ class Attribution(models.Model):
|
||||||
attribution_url = models.URLField()
|
attribution_url = models.URLField()
|
||||||
attribution_email = models.EmailField(blank=True, null=True)
|
attribution_email = models.EmailField(blank=True, null=True)
|
||||||
attribution_phone = models.CharField(max_length=50, blank=True, null=True)
|
attribution_phone = models.CharField(max_length=50, blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class LocationGroupStop(models.Model):
|
class LocationGroupStop(models.Model):
|
||||||
"""
|
"""
|
||||||
Represents location_groupStop.txt from the GTFS Reference.
|
Represents location_groupStop.txt from the GTFS Reference.
|
||||||
"""
|
"""
|
||||||
|
location_group_stop_id = models.BigAutoField(primary_key=True)
|
||||||
location_group_id = models.ForeignKey(LocationGroup, on_delete=models.CASCADE)
|
location_group_id = models.ForeignKey(LocationGroup, on_delete=models.CASCADE)
|
||||||
stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE)
|
stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Network(models.Model):
|
class Network(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -330,7 +333,7 @@ class Network(models.Model):
|
||||||
"""
|
"""
|
||||||
network_id = models.CharField(max_length=255, primary_key=True)
|
network_id = models.CharField(max_length=255, primary_key=True)
|
||||||
network_name = models.CharField(max_length=255)
|
network_name = models.CharField(max_length=255)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class RouteNetwork(models.Model):
|
class RouteNetwork(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -340,7 +343,7 @@ class RouteNetwork(models.Model):
|
||||||
route_network_name = models.CharField(max_length=255)
|
route_network_name = models.CharField(max_length=255)
|
||||||
network_id = models.ForeignKey(Network, on_delete=models.CASCADE)
|
network_id = models.ForeignKey(Network, on_delete=models.CASCADE)
|
||||||
route_id = models.ForeignKey(Route, on_delete=models.CASCADE)
|
route_id = models.ForeignKey(Route, on_delete=models.CASCADE)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Area(models.Model):
|
class Area(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -349,7 +352,7 @@ class Area(models.Model):
|
||||||
area_id = models.CharField(max_length=255, primary_key=True)
|
area_id = models.CharField(max_length=255, primary_key=True)
|
||||||
area_name = models.CharField(max_length=255)
|
area_name = models.CharField(max_length=255)
|
||||||
area_description = models.TextField(blank=True, null=True)
|
area_description = models.TextField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class StopArea(models.Model):
|
class StopArea(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -360,7 +363,7 @@ class StopArea(models.Model):
|
||||||
stop_area_description = models.TextField(blank=True, null=True)
|
stop_area_description = models.TextField(blank=True, null=True)
|
||||||
area_id = models.ForeignKey(Area, on_delete=models.CASCADE)
|
area_id = models.ForeignKey(Area, on_delete=models.CASCADE)
|
||||||
stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE)
|
stop_id = models.ForeignKey(Stop, on_delete=models.CASCADE)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class FareMedium(models.Model):
|
class FareMedium(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -369,7 +372,7 @@ class FareMedium(models.Model):
|
||||||
fare_media_id = models.CharField(max_length=255, primary_key=True)
|
fare_media_id = models.CharField(max_length=255, primary_key=True)
|
||||||
fare_media_name = models.CharField(max_length=255)
|
fare_media_name = models.CharField(max_length=255)
|
||||||
fare_media_description = models.TextField(blank=True, null=True)
|
fare_media_description = models.TextField(blank=True, null=True)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class FareProduct(models.Model):
|
class FareProduct(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -380,7 +383,7 @@ class FareProduct(models.Model):
|
||||||
fare_product_description = models.TextField(blank=True, null=True)
|
fare_product_description = models.TextField(blank=True, null=True)
|
||||||
amount = models.FloatField()
|
amount = models.FloatField()
|
||||||
curreny = models.CharField(max_length=64)
|
curreny = models.CharField(max_length=64)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Timeframe(models.Model):
|
class Timeframe(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -392,7 +395,7 @@ class Timeframe(models.Model):
|
||||||
end_date = models.DateField()
|
end_date = models.DateField()
|
||||||
start_time = models.TimeField()
|
start_time = models.TimeField()
|
||||||
end_time = models.TimeField()
|
end_time = models.TimeField()
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class FareLegRule(models.Model):
|
class FareLegRule(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -407,7 +410,7 @@ class FareLegRule(models.Model):
|
||||||
from_timeframe_group_id = models.ForeignKey(Timeframe, blank=True, null=True, on_delete=models.SET_NULL, related_name='farelegrule_from_timeframe')
|
from_timeframe_group_id = models.ForeignKey(Timeframe, blank=True, null=True, on_delete=models.SET_NULL, related_name='farelegrule_from_timeframe')
|
||||||
to_timeframe_group_id = models.ForeignKey(Timeframe, blank=True, null=True, on_delete=models.SET_NULL, related_name='farelegrule_to_timeframe')
|
to_timeframe_group_id = models.ForeignKey(Timeframe, blank=True, null=True, on_delete=models.SET_NULL, related_name='farelegrule_to_timeframe')
|
||||||
fare_product_id = models.ForeignKey(FareProduct, on_delete=models.CASCADE)
|
fare_product_id = models.ForeignKey(FareProduct, on_delete=models.CASCADE)
|
||||||
feed_info_id = models.ForeignKey(Feed_Info, on_delete=models.CASCADE, blank=True, null=True)
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class FareTransferRule(models.Model):
|
class FareTransferRule(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|
@ -419,5 +422,5 @@ class FareTransferRule(models.Model):
|
||||||
from_leg_group_id = models.IntegerField(blank=True, null=True)
|
from_leg_group_id = models.IntegerField(blank=True, null=True)
|
||||||
to_leg_group_id = models.IntegerField(blank=True, null=True)
|
to_leg_group_id = models.IntegerField(blank=True, null=True)
|
||||||
fare_product_id = models.ForeignKey(FareProduct, on_delete=models.SET_NULL, blank=True, null=True)
|
fare_product_id = models.ForeignKey(FareProduct, on_delete=models.SET_NULL, blank=True, null=True)
|
||||||
|
feed_info_id = models.ForeignKey(FeedInfo, on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,13 +11,20 @@ index(request)
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, HttpRequest
|
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, HttpRequest
|
||||||
from django.core.exceptions import BadRequest, ObjectDoesNotExist
|
from django.core.exceptions import BadRequest, ObjectDoesNotExist
|
||||||
|
from django.core import serializers
|
||||||
|
import django.db.models
|
||||||
from .models import *
|
from .models import *
|
||||||
from .forms import *
|
from .forms import *
|
||||||
import json
|
import json
|
||||||
from datetime import datetime
|
from datetime import datetime, date
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from .class_names import *
|
from .class_names import *
|
||||||
|
|
||||||
|
|
||||||
|
class GTFSSerializer(serializers.json.Serializer):
|
||||||
|
def serialize(self, queryset, **options):
|
||||||
|
return json.dumps([{field: obj['fields'][field] for field in obj['fields'] if obj['fields'][field] == 0 or obj['fields'][field]} for obj in json.loads(super().serialize(queryset, **options))])
|
||||||
|
|
||||||
def get_timetable(r, trips_r, stop_sequence):
|
def get_timetable(r, trips_r, stop_sequence):
|
||||||
"""
|
"""
|
||||||
Given a pt_map.models.Route, calculate the timetable for all its stops.
|
Given a pt_map.models.Route, calculate the timetable for all its stops.
|
||||||
|
|
@ -95,52 +102,19 @@ def get_pks_from_get(req_get):
|
||||||
for k in req_get.keys():
|
for k in req_get.keys():
|
||||||
if k in classes_by_primary_keys.keys():
|
if k in classes_by_primary_keys.keys():
|
||||||
result[classes_by_primary_keys[k]] = req_get.getlist(k)
|
result[classes_by_primary_keys[k]] = req_get.getlist(k)
|
||||||
|
if not result:
|
||||||
|
raise ValueError("No pks found.")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_obj_by_pk(mdl: models.Model, pks: list[str]):
|
def get_obj_by_pk(mdl: models.Model, pks: list[str]):
|
||||||
return [obj for obj in [mdl.objects.get(**{primary_keys[mdl]: pk}) for pk in pks] if obj]
|
return [obj for obj in [mdl.objects.get(**{primary_keys[mdl]: pk}) for pk in pks] if obj]
|
||||||
|
|
||||||
def obj_from_get(req_get) -> str:
|
def obj_from_get(req_get) -> str:
|
||||||
return {mdl: get_obj_by_pk(mdl, keys) for mdl, keys in get_pks_from_get(req_get)}
|
print({mdl: get_obj_by_pk(mdl, keys) for mdl, keys in get_pks_from_get(req_get).items()})
|
||||||
|
return {mdl: get_obj_by_pk(mdl, keys) for mdl, keys in get_pks_from_get(req_get).items()}
|
||||||
def mdl_to_jsnzbl_dict(cls, obj: models.Model) -> dict:
|
|
||||||
result = {}
|
|
||||||
fields = get_field_names(cls)
|
|
||||||
for fk in fk_dict[cls]:
|
|
||||||
fields.remove(fk[1])
|
|
||||||
if getattr(obj, fk[1]):
|
|
||||||
result[fk[1]] = getattr(getattr(obj, fk[1]), primary_keys[fk[0]])
|
|
||||||
for field in fields:
|
|
||||||
if getattr(obj, field):
|
|
||||||
result[field] = getattr(obj, field)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def json_from_pk(req_get) -> str:
|
|
||||||
for cpk in classes_by_primary_keys:
|
|
||||||
if req_get.get(cpk):
|
|
||||||
for key in (req_get[cpk] if isinstance(req_get[cpk], list) else [req_get[cpk]]):
|
|
||||||
obj = classes_by_primary_keys[cpk].objects.get(**{cpk: key})
|
|
||||||
for field in get_field_names(obj):
|
|
||||||
v = getattr(obj, field)
|
|
||||||
if v:
|
|
||||||
if field in [f[1] for f in foreign_keys[classes_by_primary_keys[cpk]]]:
|
|
||||||
fk = get_attr(v, field)
|
|
||||||
return json.dumps(obj)
|
|
||||||
|
|
||||||
|
|
||||||
def jsnzbl_from_get(req_get) -> str:
|
|
||||||
return {mdl._meta.object_name: [mdl_to_jsnzbl_dict(mdl, o) for o in get_obj_by_pk(mdl, keys)] for mdl, keys in get_pks_from_get(req_get).items()}
|
|
||||||
|
|
||||||
def jsnz(jsnzbl: dict):
|
|
||||||
return json.dumps(jsnzbl)
|
|
||||||
|
|
||||||
def rsp_for_json_from_get(req_get):
|
|
||||||
try:
|
|
||||||
return HttpResponse(jsnz(jsnzbl_from_get(req_get)))
|
|
||||||
except ObjectDoesNotExist:
|
|
||||||
return HttpResponseBadRequest("Object(s) not found.")
|
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
def data(request):
|
def data(request):
|
||||||
"""
|
"""
|
||||||
Handle database requests from the frontend. Using Http semantics to specify what to do with the data.
|
Handle database requests from the frontend. Using Http semantics to specify what to do with the data.
|
||||||
|
|
@ -149,32 +123,41 @@ def data(request):
|
||||||
-------
|
-------
|
||||||
PUT
|
PUT
|
||||||
Create a new object if no object with the given primary key exists in the database or delete and replace an existing object.
|
Create a new object if no object with the given primary key exists in the database or delete and replace an existing object.
|
||||||
Body must be a json dict of lists of fully specified, valid models.
|
Body must be a json dict of lists of fully specified, valid models. Primary keys can be omitted and will be ignored if the element does not exist in the database.
|
||||||
If primary keys are given as GET keys, they are applied to the first elements in their corresponding object lists. Primary keys in body will be ignored.
|
If primary keys are given, the elements are deleted and replaced. Note that if there is an error in creating the new object, the object to replace will still probably already have been deleted.
|
||||||
RETURN 400 if primary keys not existing.
|
Successful response is 200 with a list of primary keys of the created and replaced objects.
|
||||||
PATCH
|
PATCH
|
||||||
Modify an existing objects given the instructions in the body.
|
Modify an existing objects given the instructions in the body.
|
||||||
Body must be a json dict of lists of fields to change and their valid values existing objects in the database, identified by their valid primary keys as GET keys.
|
Body must be a json dict of lists of fields to change and their valid values existing objects in the database, identified by their valid primary keys.
|
||||||
Primary keys in body will be ignored.
|
Responds 400 if any of the primary keys given does not exist.
|
||||||
|
Successful response is 200 with a list of the primary keys of the modified objects.
|
||||||
GET
|
GET
|
||||||
Return json of models identified by primary keys.
|
Return json of models identified by primary keys.
|
||||||
DELETE
|
DELETE
|
||||||
Delete models with given primary keys if they exist. Returns number of deleted models.
|
Delete models with given primary keys if they exist.
|
||||||
|
Responds 400 if any of the primary keys given does not exist in the database.
|
||||||
|
Successful response is 200 and the number of deleted models.
|
||||||
"""
|
"""
|
||||||
if request.method == "PUT":
|
if request.method == "PUT":
|
||||||
if not request.META["CONTENT_TYPE"] == 'application/json':
|
if not request.META["CONTENT_TYPE"] == 'application/json':
|
||||||
HttpResponseBadRequest('Request must be JSON.')
|
HttpResponseBadRequest('Request must be JSON.')
|
||||||
bdy = json.loads(request.body)
|
|
||||||
try:
|
try:
|
||||||
obj = obj_from_get(request.GET)
|
bdy = json.loads(request.body)
|
||||||
except ObjectDoesNotExist:
|
except json.JSONDecodeError:
|
||||||
return HttpResponseBadRequest("Did not find models corresponding to given pks.")
|
return HttpResponseBadRequest("Malformed json.")
|
||||||
return HttpResponse(f"received {obj}")
|
return HttpResponse(f"received {obj}")
|
||||||
elif request.method == "PATCH":
|
elif request.method == "PATCH":
|
||||||
if not request.META["CONTENT_TYPE"] == 'application/json':
|
if not request.META["CONTENT_TYPE"] == 'application/json':
|
||||||
HttpResponseBadRequest('Request must be JSON.')
|
HttpResponseBadRequest('Request must be JSON.')
|
||||||
return HttpResponse(f"received {obj}")
|
return HttpResponse(f"received {obj}")
|
||||||
elif request.method == "GET":
|
elif request.method == "GET":
|
||||||
return rsp_for_json_from_get(request.GET)
|
try:
|
||||||
|
pks = get_pks_from_get(request.GET)
|
||||||
|
except ValueError:
|
||||||
|
return HttpResponseBadRequest("No valid pks given.")
|
||||||
|
try:
|
||||||
|
return HttpResponse(json.dumps({mdl._meta.object_name: GTFSSerializer().serialize(v) for mdl,v in obj_from_get(request.GET).items()}), content_type='application/json')
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
return HttpResponseBadRequest("Object(s) not found.")
|
||||||
return HttpResponseNotAllowed(['PUT', 'PATCH', 'GET'])
|
return HttpResponseNotAllowed(['PUT', 'PATCH', 'GET'])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user