datamodel.py

Fri, 05 Feb 2021 12:16:29 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Fri, 05 Feb 2021 12:16:29 +0200
changeset 4
ac067a42b00f
parent 2
7378b802ddf8
permissions
-rw-r--r--

update

import sqlalchemy.ext.declarative
GtfsBase = sqlalchemy.ext.declarative.declarative_base(name = 'GtfsBase')

class GtfsRoute(GtfsBase):
	__tablename__ = 'routes'
	id = sqlalchemy.Column(sqlalchemy.String, primary_key = True)
	reference = sqlalchemy.Column(sqlalchemy.String)
	description = sqlalchemy.Column(sqlalchemy.String)
	type = sqlalchemy.Column(sqlalchemy.Integer)

class GtfsShape(GtfsBase):
	__tablename__ = 'shapes'
	id = sqlalchemy.Column(sqlalchemy.String, primary_key = True)
	length = sqlalchemy.Column(sqlalchemy.Numeric, default = 0)
	shape_coordinates = sqlalchemy.Column(sqlalchemy.String)

class GtfsTrip(GtfsBase):
	__tablename__ = 'trips'
	id = sqlalchemy.Column(sqlalchemy.String, primary_key = True)
	route_id = sqlalchemy.Column(sqlalchemy.String, sqlalchemy.ForeignKey(GtfsRoute.id))
	service = sqlalchemy.Column(sqlalchemy.String)
	shape_id = sqlalchemy.Column(sqlalchemy.String, sqlalchemy.ForeignKey(GtfsShape.id))
	route = sqlalchemy.orm.relationship('GtfsRoute', foreign_keys = 'GtfsTrip.route_id')
	shape = sqlalchemy.orm.relationship('GtfsShape', foreign_keys = 'GtfsTrip.shape_id')

class GtfsService(GtfsBase):
	__tablename__ = 'services'
	id = sqlalchemy.Column(sqlalchemy.String, primary_key = True)

class GtfsStop(GtfsBase):
	__tablename__ = 'stops'
	stop_id = sqlalchemy.Column(sqlalchemy.String, primary_key = True)
	stop_name = sqlalchemy.Column(sqlalchemy.String)
	stop_latitude = sqlalchemy.Column(sqlalchemy.Numeric)
	stop_longitude = sqlalchemy.Column(sqlalchemy.Numeric)
	stop_region = sqlalchemy.Column(sqlalchemy.String)
	stop_region_major = sqlalchemy.Column(sqlalchemy.Boolean)

class GtfsRegion(GtfsBase):
	# Not a gtfs data set, but the Gtfs prefix added for consistency
	__tablename__ = 'regions'
	ref = sqlalchemy.Column(sqlalchemy.String, primary_key = True)
	region_name_fi = sqlalchemy.Column(sqlalchemy.String, nullable = False)
	region_name_sv = sqlalchemy.Column(sqlalchemy.String)
	region_name_en = sqlalchemy.Column(sqlalchemy.String)
	region_name_ja = sqlalchemy.Column(sqlalchemy.String)
	region_short_name_fi = sqlalchemy.Column(sqlalchemy.String)
	region_short_name_sv = sqlalchemy.Column(sqlalchemy.String)
	region_short_name_en = sqlalchemy.Column(sqlalchemy.String)
	region_short_name_ja = sqlalchemy.Column(sqlalchemy.String)
	region_internal_name_fi = sqlalchemy.Column(sqlalchemy.String)
	region_internal_name_sv = sqlalchemy.Column(sqlalchemy.String)
	region_internal_name_en = sqlalchemy.Column(sqlalchemy.String)
	region_internal_name_ja = sqlalchemy.Column(sqlalchemy.String)
	municipality = sqlalchemy.Column(sqlalchemy.String, nullable = False)
	external = sqlalchemy.Column(sqlalchemy.Boolean)

class GtfsStopTime(GtfsBase):
	__tablename__ = 'stop_times'
	trip_id = sqlalchemy.Column(
		sqlalchemy.String,
		sqlalchemy.ForeignKey(GtfsTrip.id),
		primary_key = True,
	)
	stop_id = sqlalchemy.Column(
		sqlalchemy.String,
		sqlalchemy.ForeignKey(GtfsStop.stop_id),
		nullable = False,
	)
	stop_sequence = sqlalchemy.Column(
		sqlalchemy.Integer,
		primary_key = True,
	)
	arrival_time = sqlalchemy.Column(sqlalchemy.Interval, nullable = False)
	departure_time = sqlalchemy.Column(sqlalchemy.Interval, nullable = False)
	shape_distance_traveled = sqlalchemy.Column(sqlalchemy.Numeric)
	destination = sqlalchemy.Column(sqlalchemy.String)
	stop = sqlalchemy.orm.relationship(
		'GtfsStop',
		foreign_keys = 'GtfsStopTime.stop_id',
	)
	trip = sqlalchemy.orm.relationship(
		'GtfsTrip',
		foreign_keys = 'GtfsStopTime.trip_id',
	)

mercurial