__init__.py 1.77 KB
from sqlalchemy import (
    Column,
    Integer,
    DateTime,
    String,
    Boolean,
    )
from sqlalchemy.orm import (
    sessionmaker,
    scoped_session,
    )
from sqlalchemy.ext.declarative import declarative_base
from zope.sqlalchemy import ZopeTransactionExtension
from ..tools.waktu import create_now


DBSession = scoped_session(
    sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()


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

    def to_dict_without_none(self):
        values = {}
        for column in self.__table__.columns:
            val = getattr(self, column.name)
            if val is not None:
                values[column.name] = val
        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])

class BaseModel(CommonModel):
    id = Column(Integer, nullable=False, primary_key=True)


class LogModel(BaseModel):
    created = Column(
            DateTime(timezone=True), nullable=False, default=create_now)


class IsoModel(LogModel):
    # Nama bank (bjb, btn) atau forwarder (mitracomm)
    forwarder = Column(String(16), nullable=False)
    ip = Column(String(15), nullable=False)
    mti = Column(String(4), nullable=False)
    is_send = Column(Boolean, nullable=False, default=True)

            
class HistoryModel(LogModel):
    updated = Column(
            DateTime(timezone=True), nullable=False, default=create_now)

    def save(self):
        self.updated = create_now()
        if not self.id:
            self.created = self.updated