Add import script
This commit is contained in:
@ -2,6 +2,13 @@ from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class TransportType(models.TextChoices):
|
||||
TGV = "TGV", _("TGV")
|
||||
TER = "TER", _("TER")
|
||||
INTERCITES = "IC", _("Intercités")
|
||||
TRANSILIEN = "TN", _("Transilien")
|
||||
|
||||
|
||||
class LocationType(models.IntegerChoices):
|
||||
STOP_PLATFORM = 0, _("Stop/platform")
|
||||
STATION = 1, _("Station")
|
||||
@ -46,68 +53,87 @@ class TransferType(models.IntegerChoices):
|
||||
NOT_POSSIBLE = 3, _("Not possible")
|
||||
|
||||
|
||||
class ExceptionType(models.IntegerChoices):
|
||||
ADDED = 1, _("Added")
|
||||
REMOVED = 2, _("Removed")
|
||||
|
||||
|
||||
class Agency(models.Model):
|
||||
agency_id = models.CharField(
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("Agency ID"),
|
||||
)
|
||||
|
||||
agency_name = models.CharField(
|
||||
name = models.CharField(
|
||||
max_length=255,
|
||||
unique=True,
|
||||
verbose_name=_("Agency name"),
|
||||
)
|
||||
|
||||
agency_url = models.URLField(
|
||||
url = models.URLField(
|
||||
verbose_name=_("Agency URL"),
|
||||
)
|
||||
|
||||
agency_timezone = models.CharField(
|
||||
timezone = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Agency timezone"),
|
||||
)
|
||||
|
||||
agency_lang = models.CharField(
|
||||
lang = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Agency language"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
phone = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Agency phone"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
email = models.EmailField(
|
||||
verbose_name=_("Agency email"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Agency")
|
||||
verbose_name_plural = _("Agencies")
|
||||
|
||||
|
||||
class Stop(models.Model):
|
||||
stop_id = models.CharField(
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("Stop ID"),
|
||||
)
|
||||
|
||||
stop_code = models.CharField(
|
||||
code = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Stop code"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
stop_name = models.CharField(
|
||||
name = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Stop name"),
|
||||
)
|
||||
|
||||
stop_desc = models.CharField(
|
||||
desc = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Stop description"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
stop_lon = models.FloatField(
|
||||
lon = models.FloatField(
|
||||
verbose_name=_("Stop longitude"),
|
||||
)
|
||||
|
||||
stop_lat = models.FloatField(
|
||||
lat = models.FloatField(
|
||||
verbose_name=_("Stop latitude"),
|
||||
)
|
||||
|
||||
@ -116,7 +142,7 @@ class Stop(models.Model):
|
||||
verbose_name=_("Zone ID"),
|
||||
)
|
||||
|
||||
stop_url = models.URLField(
|
||||
url = models.URLField(
|
||||
verbose_name=_("Stop URL"),
|
||||
blank=True,
|
||||
)
|
||||
@ -132,10 +158,12 @@ class Stop(models.Model):
|
||||
to="Stop",
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_("Parent station"),
|
||||
related_name="children",
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
stop_timezone = models.CharField(
|
||||
timezone = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Stop timezone"),
|
||||
blank=True,
|
||||
@ -157,71 +185,79 @@ class Stop(models.Model):
|
||||
platform_code = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Platform code"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.id})"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Stop")
|
||||
verbose_name_plural = _("Stops")
|
||||
|
||||
|
||||
class Route(models.Model):
|
||||
route_id = models.CharField(
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("Route ID"),
|
||||
verbose_name=_("ID"),
|
||||
)
|
||||
|
||||
agency = models.ForeignKey(
|
||||
to="Agency",
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("Agency ID"),
|
||||
related_name="routes",
|
||||
)
|
||||
|
||||
route_short_name = models.CharField(
|
||||
short_name = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Route short name"),
|
||||
)
|
||||
|
||||
route_long_name = models.CharField(
|
||||
long_name = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Route long name"),
|
||||
)
|
||||
|
||||
route_desc = models.CharField(
|
||||
desc = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Route description"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
route_type = models.IntegerField(
|
||||
type = models.IntegerField(
|
||||
verbose_name=_("Route type"),
|
||||
choices=RouteType,
|
||||
)
|
||||
|
||||
route_url = models.URLField(
|
||||
url = models.URLField(
|
||||
verbose_name=_("Route URL"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
route_color = models.CharField(
|
||||
color = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Route color"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
route_text_color = models.CharField(
|
||||
text_color = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Route text color"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.long_name}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Route")
|
||||
verbose_name_plural = _("Routes")
|
||||
|
||||
|
||||
class Trip(models.Model):
|
||||
trip_id = models.CharField(
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("Trip ID"),
|
||||
@ -230,21 +266,24 @@ class Trip(models.Model):
|
||||
route = models.ForeignKey(
|
||||
to="Route",
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("Route ID"),
|
||||
verbose_name=_("Route"),
|
||||
related_name="trips",
|
||||
)
|
||||
|
||||
service_id = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Service ID"),
|
||||
service = models.ForeignKey(
|
||||
to="Calendar",
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("Service"),
|
||||
related_name="trips",
|
||||
)
|
||||
|
||||
trip_headsign = models.CharField(
|
||||
headsign = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Trip headsign"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
trip_short_name = models.CharField(
|
||||
short_name = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Trip short name"),
|
||||
blank=True,
|
||||
@ -253,7 +292,7 @@ class Trip(models.Model):
|
||||
direction_id = models.IntegerField(
|
||||
verbose_name=_("Direction"),
|
||||
choices=Direction,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
block_id = models.CharField(
|
||||
@ -272,25 +311,40 @@ class Trip(models.Model):
|
||||
verbose_name=_("Wheelchair accessible"),
|
||||
choices=AccessInformation,
|
||||
default=AccessInformation.NO_INFORMATION,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
bikes_allowed = models.IntegerField(
|
||||
verbose_name=_("Bikes allowed"),
|
||||
choices=AccessInformation,
|
||||
default=AccessInformation.NO_INFORMATION,
|
||||
null=True,
|
||||
)
|
||||
|
||||
@property
|
||||
def destination(self):
|
||||
return self.stop_times.order_by('-stop_sequence').first().stop.name
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.route.long_name} - {self.id}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Trip")
|
||||
verbose_name_plural = _("Trips")
|
||||
|
||||
|
||||
class StopTime(models.Model):
|
||||
trip_id = models.ForeignKey(
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("ID"),
|
||||
)
|
||||
|
||||
trip = models.ForeignKey(
|
||||
to="Trip",
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("Trip ID"),
|
||||
verbose_name=_("Trip"),
|
||||
related_name="stop_times",
|
||||
)
|
||||
|
||||
arrival_time = models.TimeField(
|
||||
@ -301,10 +355,16 @@ class StopTime(models.Model):
|
||||
verbose_name=_("Departure time"),
|
||||
)
|
||||
|
||||
arrival_next_day = models.BooleanField(
|
||||
verbose_name=_("Arrival next day"),
|
||||
default=False,
|
||||
)
|
||||
|
||||
stop = models.ForeignKey(
|
||||
to="Stop",
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("Stop ID"),
|
||||
related_name="stop_times",
|
||||
)
|
||||
|
||||
stop_sequence = models.IntegerField(
|
||||
@ -321,29 +381,32 @@ class StopTime(models.Model):
|
||||
verbose_name=_("Pickup type"),
|
||||
choices=PickupType,
|
||||
default=PickupType.REGULAR,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
drop_off_type = models.IntegerField(
|
||||
verbose_name=_("Drop off type"),
|
||||
choices=PickupType,
|
||||
default=PickupType.REGULAR,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
timepoint = models.BooleanField(
|
||||
verbose_name=_("Timepoint"),
|
||||
default=True,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.trip.route.long_name} - {self.trip_id} - {self.stop.name}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Stop time")
|
||||
verbose_name_plural = _("Stop times")
|
||||
|
||||
|
||||
class Calendar(models.Model):
|
||||
service_id = models.CharField(
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("Service ID"),
|
||||
@ -385,16 +448,32 @@ class Calendar(models.Model):
|
||||
verbose_name=_("End date"),
|
||||
)
|
||||
|
||||
transport_type = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Transport type"),
|
||||
choices=TransportType,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.id
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Calendar")
|
||||
verbose_name_plural = _("Calendars")
|
||||
|
||||
|
||||
class CalendarDate(models.Model):
|
||||
service_id = models.ForeignKey(
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("ID"),
|
||||
)
|
||||
|
||||
service = models.ForeignKey(
|
||||
to="Calendar",
|
||||
on_delete=models.CASCADE,
|
||||
verbose_name=_("Service ID"),
|
||||
verbose_name=_("Service"),
|
||||
related_name="dates",
|
||||
)
|
||||
|
||||
date = models.DateField(
|
||||
@ -403,14 +482,30 @@ class CalendarDate(models.Model):
|
||||
|
||||
exception_type = models.IntegerField(
|
||||
verbose_name=_("Exception type"),
|
||||
choices=ExceptionType,
|
||||
)
|
||||
|
||||
transport_type = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Transport type"),
|
||||
choices=TransportType,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.service.id} - {self.date} - {self.exception_type}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Calendar date")
|
||||
verbose_name_plural = _("Calendar dates")
|
||||
|
||||
|
||||
class Transfer(models.Model):
|
||||
id = models.CharField(
|
||||
max_length=255,
|
||||
primary_key=True,
|
||||
verbose_name=_("ID"),
|
||||
)
|
||||
|
||||
from_stop = models.ForeignKey(
|
||||
to="Stop",
|
||||
on_delete=models.CASCADE,
|
||||
@ -442,11 +537,6 @@ class Transfer(models.Model):
|
||||
|
||||
|
||||
class FeedInfo(models.Model):
|
||||
feed_id = models.SmallIntegerField(
|
||||
primary_key=True,
|
||||
verbose_name=_("Feed ID"),
|
||||
)
|
||||
|
||||
feed_publisher_name = models.CharField(
|
||||
max_length=255,
|
||||
verbose_name=_("Feed publisher name"),
|
||||
|
Reference in New Issue
Block a user