| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | """Database models"""import datetimefrom sqlalchemy import Column, ForeignKey, Integer, String, SmallInteger, DateTimefrom sqlalchemy.orm import relationship, backreffrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class State(Base):    """Model for state"""    __tablename__ = 'state'    id = Column(Integer, primary_key=True)    name = Column(String)class Region(Base):    """Model for region"""    __tablename__ = 'region'    id = Column(Integer, primary_key=True)    name = Column(String)    gold_limit = Column(SmallInteger)    oil_limit = Column(SmallInteger)    ore_limit = Column(SmallInteger)    uranium_limit = Column(SmallInteger)    diamond_limit = Column(SmallInteger)    def get_limit(self, resource_type):        """get limit for resoruce type"""        limit = {            0: self.gold_limit,            3: self.oil_limit,            4: self.ore_limit,            11: self.uranium_limit,            15: self.diamond_limit,        }        return limit[resource_type] if resource_type in limit else Noneclass StateRegion(Base):    """Model for state region"""    __tablename__ = 'state_region'    state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)    region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)    from_date_time = Column(DateTime, primary_key=True)    until_date_time = Column(DateTime)    region = relationship(        'Region',        backref=backref('state_regions', lazy='dynamic')    )    state = relationship(        'State',        backref=backref('state_regions', lazy='dynamic')    )class DeepExploration(Base):    """Model for deep exploration"""    __tablename__ = 'deep_exploration'    id = Column(Integer, primary_key=True)    until_date_time = Column(DateTime)    points = Column(Integer)    resource_type = Column(SmallInteger)    region_id = Column(Integer, ForeignKey('region.id'))    region = relationship(        'Region',        backref=backref('deep_explorations', lazy='dynamic')    )class DeepExplorationOrder(Base):    """Model for deep exploration order"""    __tablename__ = 'deep_exploration_order'    id = Column(Integer, primary_key=True)    resource_type = Column(SmallInteger, nullable=False)    order_type = Column(SmallInteger, nullable=False)    amount = Column(Integer)    from_date_time = Column(DateTime)    until_date_time = Column(DateTime)    region_id = Column(Integer, ForeignKey('region.id'))    region = relationship(        'Region',        backref=backref('resource_stats', lazy='dynamic')    )    order_types = {        0: 'max',        1: 'fixed',        2: 'percentage',        3: 'auto',    }    def order_type_name(self):        """Type name"""        if self.order_type in self.order_types:            return self.order_types[self.type]        return 'unknown'
 |