summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--photoblaster/db/__init__.py0
-rw-r--r--photoblaster/db/db.py90
-rw-r--r--photoblaster/db/imcmd.py43
3 files changed, 133 insertions, 0 deletions
diff --git a/photoblaster/db/__init__.py b/photoblaster/db/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/photoblaster/db/__init__.py
diff --git a/photoblaster/db/db.py b/photoblaster/db/db.py
new file mode 100644
index 0000000..d4dbec8
--- /dev/null
+++ b/photoblaster/db/db.py
@@ -0,0 +1,90 @@
+"""Db bass class for updating the photoblaster database"""
+import time
+import sys
+from photoblaster.db.imcmd import ImCmd
+from photoblaster.config import DB_USER, DB_PASSWORD, DB_HOST,\
+ DB_NAME
+from sqlalchemy import Column, Integer, LargeBinary, String, \
+ create_engine, sql, func, desc
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import sessionmaker
+
+_NULL = sql.null()
+
+Base = declarative_base()
+metadata = Base.metadata
+
+
+class Db(object):
+ """wrapper for all db methods"""
+ def __init__(self):
+ engine = create_engine('mysql://{}:{}@{}/{}'.format(
+ DB_USER,
+ DB_PASSWORD,
+ DB_HOST,
+ DB_NAME
+ ))
+ self.Session = sessionmaker(bind=engine)
+
+ def _get(
+ self,
+ columns=None,
+ filter_by={},
+ order_by=None,
+ offset=0,
+ limit=20,
+ not_deleted=False
+ ):
+ session = self.Session()
+ results = session.query(ImCmd)
+ if not_deleted:
+ filter_by['deleted'] = 0
+ if filter_by:
+ results = results.filter_by(filter_by)
+ if order_by is not None:
+ results = results.order_by(order_by)
+ results = results.offset(offset).limit(limit)
+ session.close()
+ return [result.serialize(columns=columns) for result in results]
+
+ def get_random(
+ self, filter_by={},
+ offset=0, limit=20, columns=None
+ ):
+ return self._get(
+ columns=columns, order_by=func.random(),
+ offset=offset, limit=limit)
+
+ def get_by_date(
+ self,
+ filter_by={},
+ offset=0, limit=20, columns=None
+ ):
+ return self._get(
+ columns=columns, offset=offset, limit=limit,
+ order_by=desc(
+ ImCmd.date
+ )
+ )
+
+ def insert_cmd(self, **kwargs):
+ try:
+ session = self.Session()
+ _entry_data = {
+ 'date': kwargs.get("date", int(time.time())),
+ 'remote_addr': kwargs['remote_addr'] or _NULL,
+ 'name': kwargs['username'] or _NULL,
+ 'url': kwargs['username'] or _NULL,
+ 'dir': kwargs['directory'] or _NULL,
+ 'oldfile': kwargs['oldfile'] or _NULL,
+ 'newfile': kwargs['newfile'] or _NULL,
+ 'cmd': kwargs['cmd'] or _NULL,
+ 'dataobj': kwargs['dataobj'] or _NULL,
+ 'tag': kwargs['tag'] or _NULL
+ }
+ session.add(ImCmd(**_entry_data))
+ session.commit()
+ session.close()
+ except Exception as e:
+ sys.stderr.write("Unable to commit database entry\n")
+ sys.stderr.write(str(e))
diff --git a/photoblaster/db/imcmd.py b/photoblaster/db/imcmd.py
new file mode 100644
index 0000000..5206f99
--- /dev/null
+++ b/photoblaster/db/imcmd.py
@@ -0,0 +1,43 @@
+"""describes the ImCmd class"""
+import sys
+from sqlalchemy import Column, Integer, LargeBinary, String
+from simplejson import json
+from sqlalchemy.orm import class_mapper
+
+
+class ImCmd(Base):
+ """defines the table class"""
+ __tablename__ = 'im_cmd'
+ id = Column(Integer, primary_key=True)
+ date = Column(Integer)
+ remote_addr = Column(String(16))
+ name = Column(String(16))
+ url = Column(String(256))
+ dir = Column(String(2))
+ oldfile = Column(String(256))
+ newfile = Column(String(256))
+ cmd = Column(LargeBinary)
+ dataobj = Column(LargeBinary)
+ tag = Column(String(50))
+
+ def serialize(self, columns=None):
+ """returns the class as a dictionary"""
+ if not columns:
+ columns = [c.key for c in class_mapper(self.__class__).columns]
+ col_val = []
+ for c in columns:
+ if c == "dataobj":
+ val = getattr(self, c)
+ if val is not None:
+ try:
+ val = json.loads(val)
+ except json.JSONDecodeError:
+ sys.stderr.write("Could not decode json: %s\n" % val)
+ sys.stderr.write(
+ "bad value in db, id = %s\n" % getattr(self, "id")
+ )
+ pass
+ col_val.append((c, val))
+ else:
+ col_val.append((c, getattr(self, c)))
+ return dict(col_val)