models_default.py 2.09 KB
from datetime import datetime
from sqlalchemy import (
    Column,
    Integer,
    BigInteger,
    SmallInteger,
    Text,
    DateTime,
    String,
    UniqueConstraint,
    ForeignKey,
    Index,
    create_engine,
    )
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    relationship, backref
    )
    
Base = declarative_base()
DBSession = scoped_session(sessionmaker())    

class CommonModel(object):
    def to_dict(self): # Elixir like
        values = {}
        for column in self.__table__.columns:
            values[column.name] = getattr(self, column.name)
        return values
        
    def from_dict(self, values):
        for column in self.__table__.columns:
            if column.name in values:
                setattr(self, column.name, values[column.name])

    def as_timezone(self, fieldname):
        date_ = getattr(self, fieldname)
        return date_ and as_timezone(date_) or None

class DefaultModel(CommonModel):
    id = Column(Integer, primary_key=True)
    
    @classmethod
    def query(cls):
        return DBSession.query(cls)

    @classmethod
    def query_id(cls, id):
        return cls.query().filter_by(id=id)
        
    @classmethod
    def delete(cls, id):
        cls.query_id(id).delete()
    @classmethod
    def count(cls):
        return DBSession.query(func.count('id')).scalar()
    
class KodeModel(DefaultModel):
    kode = Column(String(32))
    status = Column(SmallInteger, nullable=False, default=0)
    created  = Column(DateTime, nullable=True, default=datetime.utcnow)
    updated  = Column(DateTime, nullable=True)
    create_uid  = Column(Integer, nullable=True, default=1)
    update_uid  = Column(Integer, nullable=True)
    
    @classmethod
    def query_kode(cls,kode):
        return cls.query().filter_by(kode=kode)
        
    @classmethod
    def get_active(cls):
        return cls.query().filter_by(status=1).all()
    
class NamaModel(KodeModel):
    nama = Column(String(128))

    @classmethod
    def query_nama(cls, nama):
        return cls.query().filter_by(nama=nama)