diff options
| -rw-r--r-- | mini.py | 9 | ||||
| -rw-r--r-- | photoblaster/config.py | 2 | ||||
| -rw-r--r-- | photoblaster/db/models/__init__.py | 50 | ||||
| -rw-r--r-- | photoblaster/db/models/imcmd.py | 22 | ||||
| -rw-r--r-- | photoblaster/server.py | 27 | ||||
| -rw-r--r-- | test_gallery.py | 5 |
6 files changed, 72 insertions, 43 deletions
@@ -0,0 +1,9 @@ +from photoblaster.db.models.imcmd import ImCmd +bob = ImCmd.query().filter(ImCmd.cmd.like('%{"%')) +models = bob.all() +for model in models: + cmd = model.dataobj + dataobj = model.cmd + model.cmd = cmd + model.dataobj = dataobj + model.update() diff --git a/photoblaster/config.py b/photoblaster/config.py index a5230bd..aa62994 100644 --- a/photoblaster/config.py +++ b/photoblaster/config.py @@ -1,3 +1,5 @@ +DEBUG = True + MAX_SIZE = 1024 * 1024 * 1.2 * 1.5 #PATHS diff --git a/photoblaster/db/models/__init__.py b/photoblaster/db/models/__init__.py index 07f0cfe..5131c4d 100644 --- a/photoblaster/db/models/__init__.py +++ b/photoblaster/db/models/__init__.py @@ -1,6 +1,7 @@ from photoblaster.db import SessionHeap -from sqlalchemy import inspect +from sqlalchemy import inspect, desc from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.sql.expression import func Base = declarative_base() @@ -9,44 +10,35 @@ Base = declarative_base() class Actions(object): @classmethod def create(cls, **kwargs): - session = SessionHeap() + session = SessionHeap() session.add(cls(**kwargs)) session.commit() SessionHeap.remove() - def update(self, **kwargs): - for key,val in kwargs.iteritems(): + 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) + def _search(cls, **kwargs): + session = SessionHeap() + query = session.query(cls).filter_by(**kwargs) + SessionHeap.remove() + return query + @classmethod + def search_random(cls, **kwargs): + return cls._search(**kwargs).order_by(func.rand()) -class ModelResultSet(object): - def __init__(self, session, cls): - self.session = session - self.cls = cls + @classmethod + def search(cls, **kwargs): + return cls._search(**kwargs).order_by(desc(cls.id)) - def __del__(self): - self.session.close() + @classmethod + def query(cls, **kwargs): + session = SessionHeap() + query = session.query(cls) 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) + return query diff --git a/photoblaster/db/models/imcmd.py b/photoblaster/db/models/imcmd.py index e41abea..fafdf1c 100644 --- a/photoblaster/db/models/imcmd.py +++ b/photoblaster/db/models/imcmd.py @@ -6,8 +6,9 @@ from photoblaster.db.models import Base, Actions import simplejson as json from sqlalchemy.orm import class_mapper +import sys -class ImCmd(Base, Actions): +class ImCmd(Base, Actions): """defines the table class""" __tablename__ = 'im_cmd' id = Column(Integer, primary_key=True) @@ -21,23 +22,28 @@ class ImCmd(Base, Actions): 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. + + 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) + val = getattr(self, c) if val is not None: - val = json.loads(val) + try: + val = json.loads(val) + except Exception as e: + sys.stderr.write("%s\n" % e) + sys.stderr.write("%s\n" % val) new_dict[c] = val else: - new_dict[c] = self.__getattr__(c) + new_dict[c] = getattr(self, c) return new_dict diff --git a/photoblaster/server.py b/photoblaster/server.py index 5100225..7abbb61 100644 --- a/photoblaster/server.py +++ b/photoblaster/server.py @@ -13,7 +13,8 @@ from photoblaster.modules import PbGenerate, PbGrid, PbBreaker, PbPattern,\ PbLandscape, PbGradient, PbProcessError, Pb from photoblaster.db.models.imcmd import ImCmd from photoblaster.param import BadParamError -from photoblaster.config import SERVER_HOST, SERVER_PORT, STATIC_FOLDER +from photoblaster.config import SERVER_HOST, SERVER_PORT, STATIC_FOLDER, \ + DEBUG # FIXME add remote_addr and this jsonp thing @@ -114,6 +115,28 @@ class Server(object): else: raise InvalidUsage('Improper Usage', status_code=410) + @self.app.route('/im/gallery', methods=['GET']) + def gallery(): + limit = request.args.get('limit') or 20 + offset = request.args.get('start') or 0 + if not request.args.get('random'): + results = ImCmd.search() + else: + results = ImCmd.search_random() +# try: +# sys.stderr.write(str( +# results.limit(limit) +# .offset(offset) +# .first() +# .as_dict() +# )) +# except Exception as e: +# sys.stderr.write(str(e)) + return json.dumps([ + model.as_dict() for model in + results.limit(limit).offset(offset).all() + ]) + def _find_class_by_name(self, pb_classname): pb_classname = self._classname_aliases.get(pb_classname, None) \ or pb_classname @@ -147,7 +170,7 @@ class Server(object): sys.stderr.write(dict(request_form)) return jsonify({'error': 'Problem with server-side processing'}) - def run(self, host=SERVER_HOST, port=SERVER_PORT): + def run(self, host=SERVER_HOST, port=SERVER_PORT, debug=DEBUG): self.app.run(host=host, port=port) def run_wsgi(self, server_port=SERVER_PORT, host=SERVER_HOST): diff --git a/test_gallery.py b/test_gallery.py index 128fae8..5c20903 100644 --- a/test_gallery.py +++ b/test_gallery.py @@ -1,4 +1 @@ -from photoblaster.gallery import Gallery - -gallery = Gallery() -print gallery.select_random() +from photoblaster.db.models |
