"""Country model.""" from typing import List from abacus_common_logic.connectors.database import db from abacus_common_logic.models.base import CRUDMixin from sqlalchemy import Enum from abacus_legacy_sync.constants.constants import COUNTRY_CONTINENTS class Country(db.Model, CRUDMixin): """Country model. This model maps `country` table from art_relations. """ __tablename__ = 'country' country_id = db.Column('id', db.Integer, primary_key=True) name = db.Column(db.String(45), nullable=False) country_code = db.Column(db.String(2), nullable=True) abbrivation = db.Column(db.String(2), nullable=False) continent = db.Column( Enum(*COUNTRY_CONTINENTS, name='continent', create_type=False), nullable=False ) latitude = db.Column(db.Numeric(10, 6), nullable=True) longitude = db.Column(db.Numeric(10, 6), nullable=True) iso3166a3 = db.Column(db.String(3), nullable=True) continent_id = db.Column(db.Integer, nullable=True) @classmethod def get_by_iso_codes(cls, iso_codes: List[str]) -> List['Country']: """Get country by iso3166a3 code.""" return cls.query.filter(cls.iso3166a3.in_(iso_codes)).all()