# -*- coding: utf-8 -*- """ pyjeeves.models ~~~~~~~~~~~~~~~~~~~~~~ Jeeves raw data models """ # from sqlalchemy import Column, String from sqlalchemy.schema import MetaData, ForeignKey, Column from sqlalchemy.orm import relationship from sqlalchemy.types import Integer, String from sqlalchemy.ext.automap import automap_base from sqlalchemy.sql.expression import and_ # from pyjeeves.session import raw_engine from . import db from pyjeeves import logging from .abc import RawBaseModel logger = logging.getLogger("PyJeeves." + __name__) logger.info("Reading Jeeves DB structure") meta = MetaData() meta.reflect(bind=db.raw_session.connection(), only=['ar', 'ars', 'fr', 'kus', 'oh', 'lp', 'vg']) # Table('fr', meta, implicit_returning=False) Base = automap_base(cls=db.Model, name='Model', metadata=meta) class CommodityGroup(Base, RawBaseModel): __tablename__ = 'vg' column_map = {'VaruGruppKod': 'CommodityGroupNumber', 'VaruGruppBeskr': 'CommodityGroupName'} print_only = ('VaruGruppKod', 'VaruGruppBeskr') print_filter = ('Articles', 'articles_collection') # to_json_filter = ('Articles', 'articles_collection') class ArticleBalance(Base, RawBaseModel): __tablename__ = 'ars' column_map = {'LagSaldo': 'Balance', 'LagResAnt': 'ReservedBalance', 'LagsaldoAltEnh': 'BalanceAlternative', 'LagResAntAltEnh': 'ReservedAlternativeBalance', 'LagStalle': 'StorageLocationNumber'} print_only = ('LagSaldo', 'LagResAnt', 'LagsaldoAltEnh', 'LagResAntAltEnh', 'LagStalle') # print_filter = ('Articles', 'articles_collection') # to_json_filter = ('Articles', 'articles_collection') ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True) class Articles(Base, RawBaseModel): __tablename__ = 'ar' column_map = {'ArtNr': 'ArticleNumber', 'ArtBeskr': 'ArticleName', 'LagSaldoArtikel': 'Balance', 'EnhetsKod': 'Unit', 'ArtListPris': 'ListPrice'} print_only = ( 'ArtNr', 'ArtBeskr', 'CommodityGroup', 'ArticleBalance', 'EnhetsKod', 'LagSaldoArtikel', 'RowCreatedDt', 'ArtListPris') ArtNr = Column(Integer, primary_key=True) VaruGruppKod = Column(Integer, ForeignKey('vg.VaruGruppKod'), primary_key=True) CommodityGroup = relationship(CommodityGroup) ArticleBalance = relationship(ArticleBalance) @classmethod def _base_filters(self, obj): return RawBaseModel._base_filters( obj, and_(obj.LagTyp == 0) ) class Companies(Base, RawBaseModel): __tablename__ = 'fr' column_map = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'} print_only = ('CompanyNumber', 'CompanyName') FtgNr = Column(String, primary_key=True) Base.prepare() # Base companies for cusomters and suppliers Customers = Base.classes.kus # Customer information Orders = Base.classes.oh # Orders by customers DelivLoc = Base.classes.lp # Connections between a delivery company and customer company