import enum from datetime import datetime from sqlalchemy import (Boolean, Column, DateTime, Integer, Unicode, UniqueConstraint, create_engine) from sqlalchemy.ext.declarative import declarative_base from db import SqlDB, get_conn_str Base = declarative_base() engine = create_engine(get_conn_str()) class Scanner(Base): __tablename__ = 'scanners' __table_args__ = ( None, UniqueConstraint('id'), ) id = Column(Integer, autoincrement=True, primary_key=True) uuid = Column(Unicode(37), nullable=False) enabled = Column(Boolean, nullable=False) first_seen = Column(DateTime, default=datetime.utcnow, nullable=False) last_seen = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) comment = Column(Unicode(255), nullable=True) scanners = Column(Unicode(2048), nullable=False) target = Column(Unicode(255), nullable=True) def as_dict(self): """Return JSON serializable dict.""" d = {} for col in self.__table__.columns: value = getattr(self, col.name) if issubclass(value.__class__, enum.Enum): value = value.value elif issubclass(value.__class__, Base): continue elif issubclass(value.__class__, datetime): value = str(value) d[col.name] = value return d Base.metadata.create_all(engine)