summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mini.py9
-rw-r--r--photoblaster/config.py2
-rw-r--r--photoblaster/db/models/__init__.py50
-rw-r--r--photoblaster/db/models/imcmd.py22
-rw-r--r--photoblaster/server.py27
-rw-r--r--test_gallery.py5
6 files changed, 72 insertions, 43 deletions
diff --git a/mini.py b/mini.py
new file mode 100644
index 0000000..a292e1d
--- /dev/null
+++ b/mini.py
@@ -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