compub/src/compub/db/geography.py

57 lines
1.7 KiB
Python
Raw Normal View History

from uuid import uuid4
from sqlalchemy.orm import relationship
from sqlalchemy.sql.schema import Column, ForeignKey as FKey
from sqlalchemy.sql.sqltypes import Integer, String, Unicode
from sqlalchemy_utils.types import CountryType, UUIDType
from .base import AbstractBase
2022-07-01 20:06:55 +02:00
__all__ = [
'StateProvince',
'City',
'Street',
'Address',
]
class StateProvince(AbstractBase):
__tablename__ = 'state_province'
id = Column(Integer, primary_key=True)
country = Column(CountryType, nullable=False, index=True)
name = Column(Unicode(255), nullable=False, index=True)
cities = relationship('City', backref='state_province', lazy='selectin')
class City(AbstractBase):
__tablename__ = 'city'
id = Column(Integer, primary_key=True)
state_province_id = Column(Integer, FKey('state_province.id', ondelete='RESTRICT'), nullable=False, index=True)
zip_code = Column(String(5), nullable=False, index=True)
name = Column(Unicode(255), nullable=False, index=True)
streets = relationship('Street', backref='city', lazy='selectin')
class Street(AbstractBase):
__tablename__ = 'street'
id = Column(Integer, primary_key=True)
city_id = Column(Integer, FKey('city.id', ondelete='RESTRICT'), nullable=False, index=True)
name = Column(Unicode(255), nullable=False, index=True)
addresses = relationship('Address', backref='street', lazy='selectin')
class Address(AbstractBase):
__tablename__ = 'address'
id = Column(UUIDType, primary_key=True, default=uuid4)
street_id = Column(Integer, FKey('street.id', ondelete='RESTRICT'), nullable=False, index=True)
house_number = Column(String(8), nullable=False)
supplement = Column(String(255))