summaryrefslogtreecommitdiff
path: root/src/db/scanner.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/scanner.py')
-rw-r--r--src/db/scanner.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/db/scanner.py b/src/db/scanner.py
new file mode 100644
index 0000000..714551f
--- /dev/null
+++ b/src/db/scanner.py
@@ -0,0 +1,46 @@
+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)