summaryrefslogtreecommitdiff
path: root/to_merge/db.py
blob: d4dbec81e295e8a9dafc899856692f0288a341ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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))