diff options
| author | pepperpepperpepper <pepper@scannerjammer.com> | 2015-11-15 19:05:55 -0800 |
|---|---|---|
| committer | pepperpepperpepper <pepper@scannerjammer.com> | 2015-11-15 19:05:55 -0800 |
| commit | 4b86f4b2bdfa6b11d8f8ed0f8adca8d3adfcc0c8 (patch) | |
| tree | 69fabf223d38e06ac6afa9545ced4bdea62a6121 | |
| parent | c54a9123da23c119be091abd9917a1bfd122d232 (diff) | |
newer
| -rw-r--r-- | photoblaster/db/__init__.py | 0 | ||||
| -rw-r--r-- | photoblaster/db/db.py | 90 | ||||
| -rw-r--r-- | photoblaster/db/imcmd.py | 43 |
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) |
