diff options
Diffstat (limited to 'to_merge/db.py')
| -rw-r--r-- | to_merge/db.py | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/to_merge/db.py b/to_merge/db.py new file mode 100644 index 0000000..d4dbec8 --- /dev/null +++ b/to_merge/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)) |
