diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | controller_stuff | 29 | ||||
| -rw-r--r-- | photoblaster/db/.ropeproject/globalnames | bin | 86 -> 216 bytes | |||
| -rw-r--r-- | photoblaster/db/__init__.py | 15 | ||||
| -rw-r--r-- | photoblaster/db/db.py | 26 | ||||
| -rw-r--r-- | photoblaster/db/imcmd.py | 46 | ||||
| -rw-r--r-- | photoblaster/db/models/__init__.py | 52 | ||||
| -rw-r--r-- | photoblaster/db/models/iasdfus.py (renamed from photoblaster/db/iasdfus.py) | 9 | ||||
| -rw-r--r-- | photoblaster/db/models/imcmd.py | 43 | ||||
| -rw-r--r-- | photoblaster/db/pb.py | 83 | ||||
| -rw-r--r-- | photoblaster/db/s3.py | 38 | ||||
| -rw-r--r-- | photoblaster/modules/__init__.py | 12 | ||||
| -rw-r--r-- | photoblaster/modules/base.py | 14 | ||||
| -rwxr-xr-x | photoblaster/modules/pbbreaker.py (renamed from photoblaster/modules/breaker.py) | 0 | ||||
| -rwxr-xr-x | photoblaster/modules/pbgenerate.py (renamed from photoblaster/modules/generate.py) | 0 | ||||
| -rwxr-xr-x | photoblaster/modules/pbgradient.py (renamed from photoblaster/modules/gradient.py) | 35 | ||||
| -rwxr-xr-x | photoblaster/modules/pbgrid.py (renamed from photoblaster/modules/grid.py) | 0 | ||||
| -rwxr-xr-x | photoblaster/modules/pblandscape/__init__.py (renamed from photoblaster/modules/landscape/__init__.py) | 2 | ||||
| -rw-r--r-- | photoblaster/modules/pblandscape/_base64img (renamed from photoblaster/modules/landscape/_base64img) | 0 | ||||
| -rwxr-xr-x | photoblaster/modules/pbpattern.py (renamed from photoblaster/modules/pattern.py) | 0 | ||||
| -rw-r--r-- | run_module_examples.py | 9 | ||||
| -rw-r--r-- | share/install/requirements.txt | 4 |
22 files changed, 181 insertions, 237 deletions
@@ -5,3 +5,4 @@ *.pyc *.un~ ./logs/* +*.ropeproject diff --git a/controller_stuff b/controller_stuff new file mode 100644 index 0000000..f945b63 --- /dev/null +++ b/controller_stuff @@ -0,0 +1,29 @@ +def insert_new_from_log(self, **kwargs): + try: + session = self.Session() + entry_data = { + 'last_accessed': kwargs["last_accessed"], + 'address': kwargs['address'], + 'times_accessed': 1, + 'times_dumped': 0, + 'deleted': 0 + } + session.add(Iasdfus(**entry_data)) + session.commit() + session.close() + except Exception as e: + self.log_error("Unable to commit database entry") + self.log_error(str(e)) + + def update_existing(self, last_accessed=None, address=None, logfile=None): + session = self.Session() + results = session.query(Iasdfus).filter_by(**{'address': address}) + if results.count() == 0: + session.close() + return False + if last_accessed > results[0].last_accessed: + results.update({"last_accessed": last_accessed}) + results.update({"times_accessed": results[0].times_accessed + 1}) + session.commit() + session.close() + return True diff --git a/photoblaster/db/.ropeproject/globalnames b/photoblaster/db/.ropeproject/globalnames Binary files differindex 9d90484..0586666 100644 --- a/photoblaster/db/.ropeproject/globalnames +++ b/photoblaster/db/.ropeproject/globalnames diff --git a/photoblaster/db/__init__.py b/photoblaster/db/__init__.py index 9f3789d..c720869 100644 --- a/photoblaster/db/__init__.py +++ b/photoblaster/db/__init__.py @@ -1 +1,14 @@ -from photoblaster.db.db import Db +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker, scoped_session +from photoblaster.config import DB_HOST, DB_USER, DB_PASSWORD, DB_NAME + + +engine = create_engine('mysql://{}:{}@{}/{}'.format( + DB_USER, + DB_PASSWORD, + DB_HOST, + DB_NAME +)) + +session_factory = sessionmaker(bind=engine) +SessionHeap = scoped_session(session_factory) diff --git a/photoblaster/db/db.py b/photoblaster/db/db.py deleted file mode 100644 index 5af3380..0000000 --- a/photoblaster/db/db.py +++ /dev/null @@ -1,26 +0,0 @@ -# coding: utf-8 -"""Db bass class for updating the photoblaster database""" -import sys -from photoblaster.config import DB_HOST, DB_USER, DB_PASSWORD, DB_NAME -from sqlalchemy import create_engine -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker - -Base = declarative_base() -metadata = Base.metadata - - -class Db(object): - """base class for all db methods""" - def __init__(self): - """initializes the connection to mysql""" - engine = create_engine('mysql://{}:{}@{}/{}'.format( - DB_USER, - DB_PASSWORD, - DB_HOST, - DB_NAME - )) - self.Session = sessionmaker(bind=engine) - - def log_error(self, msg): - sys.stderr.write("DB error message: %s\n" % msg) diff --git a/photoblaster/db/imcmd.py b/photoblaster/db/imcmd.py deleted file mode 100644 index 91b4460..0000000 --- a/photoblaster/db/imcmd.py +++ /dev/null @@ -1,46 +0,0 @@ -"""describes the ImCmd class""" -import sys -from sqlalchemy import Column, Integer, LargeBinary, String -import simplejson as json -from sqlalchemy.orm import class_mapper -from sqlalchemy.ext.declarative import declarative_base - -Base = declarative_base() - - -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) diff --git a/photoblaster/db/models/__init__.py b/photoblaster/db/models/__init__.py new file mode 100644 index 0000000..07f0cfe --- /dev/null +++ b/photoblaster/db/models/__init__.py @@ -0,0 +1,52 @@ +from photoblaster.db import SessionHeap +from sqlalchemy import inspect +from sqlalchemy.ext.declarative import declarative_base + + +Base = declarative_base() + + +class Actions(object): + @classmethod + def create(cls, **kwargs): + session = SessionHeap() + session.add(cls(**kwargs)) + session.commit() + SessionHeap.remove() + + def update(self, **kwargs): + for key,val in kwargs.iteritems(): + self.__setattr__(key, val) + session = inspect(self).session + session.commit() + + @classmethod + def resultset(cls, **kwargs): + return ModelResultSet(SessionHeap(), cls) + + +class ModelResultSet(object): + def __init__(self, session, cls): + self.session = session + self.cls = cls + + def __del__(self): + self.session.close() + SessionHeap.remove() + + def search( + self, + filter_by={}, + order_by=None, + offset=0, + limit=20, + not_deleted=False + ): + results = self.session.query(self.cls) + 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) + return results.offset(offset).limit(limit) diff --git a/photoblaster/db/iasdfus.py b/photoblaster/db/models/iasdfus.py index 63def26..89161e7 100644 --- a/photoblaster/db/iasdfus.py +++ b/photoblaster/db/models/iasdfus.py @@ -1,11 +1,9 @@ # coding: utf-8 """table class for iasdfus""" from sqlalchemy import BigInteger, Column, Integer, String -from sqlalchemy.ext.declarative import declarative_base +from photoblaster.db.models import Base, Actions -Base = declarative_base() - -class Iasdfus(Base): +class Iasdfus(Base, Actions): __tablename__ = 'iasdfus' id = Column(BigInteger, primary_key=True) @@ -14,3 +12,6 @@ class Iasdfus(Base): times_dumped = Column(Integer) times_accessed = Column(Integer) deleted = Column(Integer) + + + diff --git a/photoblaster/db/models/imcmd.py b/photoblaster/db/models/imcmd.py new file mode 100644 index 0000000..e41abea --- /dev/null +++ b/photoblaster/db/models/imcmd.py @@ -0,0 +1,43 @@ +# coding: utf-8 +"""describes the ImCmd class""" +from sqlalchemy import Column, Integer, LargeBinary, String +from photoblaster.db.models import Base, Actions + +import simplejson as json +from sqlalchemy.orm import class_mapper + + +class ImCmd(Base, Actions): + """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 as_dict(self): + """returns the class as a dictionary + + dataobj is a nested json object that contains more data about the command. + It was made due to poor initial planning, this unpacks it. + """ + column_names = [c.key for c in class_mapper(self.__class__).columns] + new_dict = {} + for c in column_names: + if c == "dataobj": + val = self.__getattr__(c) + + if val is not None: + val = json.loads(val) + new_dict[c] = val + else: + new_dict[c] = self.__getattr__(c) + return new_dict diff --git a/photoblaster/db/pb.py b/photoblaster/db/pb.py deleted file mode 100644 index 7edeb4d..0000000 --- a/photoblaster/db/pb.py +++ /dev/null @@ -1,83 +0,0 @@ -"""all database connections and logic goes here""" -import time -import simplejson as json -from photoblaster.db import Db -from photoblaster.db.imcmd import ImCmd -from sqlalchemy import sql, func, desc - -_NULL = sql.null() - - -class Pb(Db): - """all photoblaster db methods go here""" - def __init__(self): - super(Pb, self).__init__() - - def search(self, **kwargs): - session = self.Session() - results = session.query(ImCmd).filter_by(**kwargs).all() - return map( - lambda n: {"tag": n.tag, "data": json.loads(n.dataobj)}, results) - - 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() - # FIXME session.close().... - except Exception as e: - self.log_error("Unable to commit database entry") - self.log_error(str(e)) - - 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 - ) - ) diff --git a/photoblaster/db/s3.py b/photoblaster/db/s3.py deleted file mode 100644 index 8cfae35..0000000 --- a/photoblaster/db/s3.py +++ /dev/null @@ -1,38 +0,0 @@ -# coding: utf-8 -from photoblaster.db.iasdfus import Iasdfus - - -class S3(Db): - """queries the db for s3 related stuff""" - def __init__(self): - super(S3, self).__init__() - - def update_existing(self, last_accessed=None, address=None, logfile=None): - session = self.Session() - results = session.query(Iasdfus).filter_by(**{'address': address}) - if results.count() == 0: - session.close() - return False - if last_accessed > results[0].last_accessed: - results.update({"last_accessed": last_accessed}) - results.update({"times_accessed": results[0].times_accessed + 1}) - session.commit() - session.close() - return True - - def insert_new_from_log(self, **kwargs): - try: - session = self.Session() - entry_data = { - 'last_accessed': kwargs["last_accessed"], - 'address': kwargs['address'], - 'times_accessed': 1, - 'times_dumped': 0, - 'deleted': 0 - } - session.add(Iasdfus(**entry_data)) - session.commit() - session.close() - except Exception as e: - self.log_error("Unable to commit database entry") - self.log_error(str(e)) diff --git a/photoblaster/modules/__init__.py b/photoblaster/modules/__init__.py index 6bb2c3e..abd4380 100644 --- a/photoblaster/modules/__init__.py +++ b/photoblaster/modules/__init__.py @@ -1,7 +1,7 @@ from photoblaster.modules.base import Pb, PbProcessError -from photoblaster.modules.grid import PbGrid -from photoblaster.modules.breaker import PbBreaker -from photoblaster.modules.pattern import PbPattern -from photoblaster.modules.generate import PbGenerate -from photoblaster.modules.landscape import PbLandscape -from photoblaster.modules.gradient import PbGradient +from photoblaster.modules.pbgrid import PbGrid +from photoblaster.modules.pbbreaker import PbBreaker +from photoblaster.modules.pbpattern import PbPattern +from photoblaster.modules.pbgenerate import PbGenerate +from photoblaster.modules.pblandscape import PbLandscape +from photoblaster.modules.pbgradient import PbGradient diff --git a/photoblaster/modules/base.py b/photoblaster/modules/base.py index 70cc76c..9e76bcb 100644 --- a/photoblaster/modules/base.py +++ b/photoblaster/modules/base.py @@ -14,7 +14,7 @@ from photoblaster.params import Params import sha import simplejson as json from photoblaster.s3.cli import S3Cli -from photoblaster.db.pb import Pb as DbPb +from photoblaster.db.models.imcmd import ImCmd BASE_URL = "http://i.asdf.us" _MAX_FILENAME_LENGTH = 20 @@ -186,25 +186,19 @@ class Pb(object): def db_send(self, remote_addr=None, db_connection=None): try: - db = db_connection or DbPb() - except Exception as e: - sys.stderr.write("Could not connect to db:\n{}".format(e)) - sys.exit(1) - try: - _insert_data = { 'date': self._now, 'remote_addr': remote_addr, - 'username': str(self.params.username), + 'name': str(self.params.username), 'url': self._db_url_param, - 'directory': self._hashdir, + 'dir': self._hashdir, 'oldfile': None, 'newfile': self.filename, 'dataobj': json.dumps(dict(self._input_kwargs)), 'cmd': "; ".join(self.commands), 'tag': self.tag, } - db.insert_cmd(**_insert_data) + ImCmd.create(**_insert_data) except Exception as e: self.err_warn("Problem sending to database:\n %s" % str(e)) diff --git a/photoblaster/modules/breaker.py b/photoblaster/modules/pbbreaker.py index e4c4665..e4c4665 100755 --- a/photoblaster/modules/breaker.py +++ b/photoblaster/modules/pbbreaker.py diff --git a/photoblaster/modules/generate.py b/photoblaster/modules/pbgenerate.py index 68a2303..68a2303 100755 --- a/photoblaster/modules/generate.py +++ b/photoblaster/modules/pbgenerate.py diff --git a/photoblaster/modules/gradient.py b/photoblaster/modules/pbgradient.py index cef2518..9b8ecaf 100755 --- a/photoblaster/modules/gradient.py +++ b/photoblaster/modules/pbgradient.py @@ -20,24 +20,23 @@ _halftone_values = { }
class PbGradient(Pb):
- example_params = {'username': 'RICHARD_GIOVANNI', 'bevel': 'flatinner', 'saturation': '', 'rotate': 34, 'percentbeveled': 96, 'brightness': 79, 'stripenumber': 2, 'filetype': 'png', 'blurriness': 180, 'flip': '', 'height': 594, 'color1': 'rgb(191,125,24)', 'width': 536, 'color2': 'rgb(186,78,94)', 'gradienttype': 'mirrored', 'stripeintensity': 2515, 'tilt': 58, 'flop': '', 'halftone': 'etchedtransition', 'hue': 146}
-# example_params = {
-# "width" : "200",
-# "color1" : "#ffdead",
-# "color2" : "blue",
-# "stripes" : "true",
-# "stripenumber" : "20",
-# "gradienttype" : "radial",
-# "stripeintensity" : "20",
-# "halftone" : "checkeredfade",
-# "percentbeveled" : "30",
-# "flip" : "true",
-# "bevel" : "flatinner",
-# "rotate" : "20",
-# "height" : "200",
-# "filetype" : "jpg",
-# "username" : "whatever"
-# }
+ example_params = {
+ "width" : "200",
+ "color1" : "#ffdead",
+ "color2" : "blue",
+ "stripes" : "true",
+ "stripenumber" : "20",
+ "gradienttype" : "plasma",
+ "stripeintensity" : "20",
+ "halftone" : "checkeredfade",
+ "percentbeveled" : "30",
+ "flip" : "true",
+ "bevel" : "flatinner",
+ "rotate" : "20",
+ "height" : "200",
+ "filetype" : "jpg",
+ "username" : "whatever"
+ }
def __init__(self, **kwargs):
super(PbGradient, self).__init__(**kwargs)
_definitions = {
diff --git a/photoblaster/modules/grid.py b/photoblaster/modules/pbgrid.py index 83950e6..83950e6 100755 --- a/photoblaster/modules/grid.py +++ b/photoblaster/modules/pbgrid.py diff --git a/photoblaster/modules/landscape/__init__.py b/photoblaster/modules/pblandscape/__init__.py index fad141e..d002df8 100755 --- a/photoblaster/modules/landscape/__init__.py +++ b/photoblaster/modules/pblandscape/__init__.py @@ -5,7 +5,7 @@ import urlparse, re class PbLandscape(Pb): example_params = { - 'imgdata' : open('photoblaster/modules/landscape/_base64img', 'rb').read(), + 'imgdata' : open('photoblaster/modules/pblandscape/_base64img', 'rb').read(), 'texture' : 'http://someurl.biz/someimg.jpg', 'heightmap' : 'http://someurl.biz/someimg.jpg', 'name' : 'donkey' diff --git a/photoblaster/modules/landscape/_base64img b/photoblaster/modules/pblandscape/_base64img index bb7e093..bb7e093 100644 --- a/photoblaster/modules/landscape/_base64img +++ b/photoblaster/modules/pblandscape/_base64img diff --git a/photoblaster/modules/pattern.py b/photoblaster/modules/pbpattern.py index ccf6963..ccf6963 100755 --- a/photoblaster/modules/pattern.py +++ b/photoblaster/modules/pbpattern.py diff --git a/run_module_examples.py b/run_module_examples.py index a6af4b5..838934d 100644 --- a/run_module_examples.py +++ b/run_module_examples.py @@ -3,7 +3,8 @@ from photoblaster.modules import Pb for cls in Pb.__subclasses__(): print cls.__name__ - instance = cls.example_run() - instance.file_s3move() - print instance.file_dict() - instance.db_send(); + if cls.__name__ == "PbGradient": + instance = cls.example_run() + instance.file_s3move() + print instance.file_dict() + instance.db_send(); diff --git a/share/install/requirements.txt b/share/install/requirements.txt new file mode 100644 index 0000000..85daaed --- /dev/null +++ b/share/install/requirements.txt @@ -0,0 +1,4 @@ +###python2.7 +Flask-SQLAlchemy +Flask +SQLAlchemy |
