summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoryo mama <pepper@scannerjammer.com>2015-09-22 00:51:40 -0700
committeryo mama <pepper@scannerjammer.com>2015-09-22 00:51:40 -0700
commitd3e7b5708deffbed864c916de22663f48333c58b (patch)
treeef76784a7827baff88c03670bf22832a3f146b17 /lib
parent86c79f4372d7b2e7640a26473c7a4d331cdf7d16 (diff)
finishing server
Diffstat (limited to 'lib')
-rw-r--r--lib/Db/__init__.py60
-rw-r--r--lib/Db/sqlalchemy_example_code.py105
-rw-r--r--lib/Param/Bool/.__init__.py0
-rw-r--r--lib/Param/Color/.__init__.py0
-rw-r--r--lib/Param/Enum/.__init__.py0
-rw-r--r--lib/Param/Float/.__init__.py0
-rw-r--r--lib/Param/Img_url/__init__.py2
-rw-r--r--lib/Param/Int/.__init__.py0
-rw-r--r--lib/Param/Raw/.__init__.py0
-rw-r--r--lib/Param/String/.__init__.py0
-rw-r--r--lib/Param/__init__.py2
-rwxr-xr-xlib/Pb/Break/__init__.py4
-rwxr-xr-xlib/Pb/Break/__init__.py~2
-rwxr-xr-xlib/Pb/Generate/__init__.py4
-rwxr-xr-xlib/Pb/Gradient/__init__.py5
-rwxr-xr-xlib/Pb/Grid/__init__.py6
-rwxr-xr-xlib/Pb/Landscape/__init__.py4
-rwxr-xr-xlib/Pb/Pattern/__init__.py5
-rw-r--r--lib/Pb/__init__.py64
-rw-r--r--lib/_S3/__init__.py24
20 files changed, 251 insertions, 36 deletions
diff --git a/lib/Db/__init__.py b/lib/Db/__init__.py
new file mode 100644
index 0000000..c6286ad
--- /dev/null
+++ b/lib/Db/__init__.py
@@ -0,0 +1,60 @@
+# coding: utf-8
+import time, sys
+HOST = "lalalizard.com"
+USER = "asdfus"
+PASSWORD = "gTYgT&M6q"
+DATABASE = "asdfus"
+
+from sqlalchemy import Column, Integer, LargeBinary, String, create_engine, sql
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import sessionmaker
+_NULL = sql.null()
+
+Base = declarative_base()
+metadata = Base.metadata
+
+class ImCmd(Base):
+ __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))
+
+class Db(object):
+ def __init__(self):
+ engine = create_engine('mysql://{}:{}@{}/{}'.format(
+ USER,
+ PASSWORD,
+ HOST,
+ DATABASE
+ ))
+ self.Session = sessionmaker(bind=engine)
+
+ 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:
+ sys.stderr.write("Unable to commit database entry\n");
+ sys.stderr.write(str(e))
diff --git a/lib/Db/sqlalchemy_example_code.py b/lib/Db/sqlalchemy_example_code.py
new file mode 100644
index 0000000..fc38b38
--- /dev/null
+++ b/lib/Db/sqlalchemy_example_code.py
@@ -0,0 +1,105 @@
+# coding: utf-8
+import MySQLdb
+import time, sys
+USER = "asdfus"
+PASSWORD = "gTYgT&M6q"
+DATABASE = "asdfus"
+
+
+from sqlalchemy import Column, Integer, LargeBinary, String, create_engine
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import sessionmaker
+engine = create_engine('mysql://{}:{}@localhost/{}'.format(USER, PASSWORD, DATABASE))
+Session = sessionmaker(bind=engine)
+session = Session()
+connection = engine.connect()
+#result = connection.execute("select username from users")
+#for row in result:
+# print "username:", row['username']
+#connection.close()
+
+
+Base = declarative_base()
+metadata = Base.metadata
+
+
+class ImCmd(Base):
+ __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 __repr__(self):
+#... return "<User(name='%s', fullname='%s', password='%s')>" % (
+#... self.name, self.fullname, self.password)
+
+
+for instance in session.query(ImCmd).order_by(ImCmd.id):
+ print instance.name, instance.date
+
+
+ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
+session.add(ed_user)
+#session.add_all([
+#... User(name='wendy', fullname='Wendy Williams', password='foobar'),
+#... User(name='mary', fullname='Mary Contrary', password='xxg527'),
+#... User(name='fred', fullname='Fred Flinstone', password='blah')])
+
+#session.commit()
+
+class Db(object):
+ def __init__ (self):
+ self.conn = None
+ self.cursor = None
+ self.connect()
+
+ def connect (self):
+ self.conn = MySQLdb.connect (host = "lalalizard.com",
+ user = USER,
+ passwd = PASSWORD,
+ db = DATABASE
+ )
+ self.cursor = self.conn.cursor ()
+
+ def execute (self,sql,args=()):
+ try:
+ self.cursor.execute(sql,args)
+ except MySQLdb.Error, e:
+ print "Error %d: %s" % (e.args[0], e.args[1])
+ # sys.exit (1)
+ self.connect()
+ self.cursor.execute(sql,args)
+
+ def lastinsertid (self):
+ return self.conn.insert_id()
+
+ def insert_cmd (
+ self,
+ date=time.time(),
+ remote_addr="NULL",
+ username="NULL",
+ url="NULL",
+ directory="NULL",
+ oldfile="NULL",
+ newfile="NULL",
+ cmd="NULL",
+ dataobj="NULL",
+ tag="NULL"):
+ try:
+ sql = "INSERT INTO im_cmd "
+ sql += "(date, remote_addr, name, url, dir, oldfile, newfile, cmd, dataobj, tag) "
+ sql += "VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
+ #or "NULL"
+ args = (date, remote_addr, username, url, directory, oldfile, newfile, cmd, dataobj, tag)
+ #args = (now(), os.environ['REMOTE_ADDR'], name, url, dir, oldfile, newfile, " ".join(cmd),dataobj)
+ self.execute(sql, args)
+ except Exception as e:
+ sys.stderr.write(str(e))
+ return
diff --git a/lib/Param/Bool/.__init__.py b/lib/Param/Bool/.__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/Param/Bool/.__init__.py
+++ /dev/null
diff --git a/lib/Param/Color/.__init__.py b/lib/Param/Color/.__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/Param/Color/.__init__.py
+++ /dev/null
diff --git a/lib/Param/Enum/.__init__.py b/lib/Param/Enum/.__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/Param/Enum/.__init__.py
+++ /dev/null
diff --git a/lib/Param/Float/.__init__.py b/lib/Param/Float/.__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/Param/Float/.__init__.py
+++ /dev/null
diff --git a/lib/Param/Img_url/__init__.py b/lib/Param/Img_url/__init__.py
index 58ed2e0..55bf353 100644
--- a/lib/Param/Img_url/__init__.py
+++ b/lib/Param/Img_url/__init__.py
@@ -1,6 +1,6 @@
import os
from Param import Param
-from Config import *
+from config import *
import urllib, urllib2
from subprocess import Popen, PIPE
import sys
diff --git a/lib/Param/Int/.__init__.py b/lib/Param/Int/.__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/Param/Int/.__init__.py
+++ /dev/null
diff --git a/lib/Param/Raw/.__init__.py b/lib/Param/Raw/.__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/Param/Raw/.__init__.py
+++ /dev/null
diff --git a/lib/Param/String/.__init__.py b/lib/Param/String/.__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/lib/Param/String/.__init__.py
+++ /dev/null
diff --git a/lib/Param/__init__.py b/lib/Param/__init__.py
index 678b9dc..c658c61 100644
--- a/lib/Param/__init__.py
+++ b/lib/Param/__init__.py
@@ -1,7 +1,7 @@
import time
import sys
-from Config import WORKING_DIR
+from config import WORKING_DIR
class BadParamError(Exception):
pass
diff --git a/lib/Pb/Break/__init__.py b/lib/Pb/Break/__init__.py
index d8faa14..45361a5 100755
--- a/lib/Pb/Break/__init__.py
+++ b/lib/Pb/Break/__init__.py
@@ -5,7 +5,7 @@ import random
import re
import urllib
import inspect
-from Config import *
+from config import *
from Pb import Pb
from Params import Params
@@ -168,4 +168,6 @@ class PbBreak(Pb): #FIXME in db gallery
self._add_false_data();
self._final_conversion()
self._cleanup()
+ self._file_dimensions()
+ self._file_size_get()
diff --git a/lib/Pb/Break/__init__.py~ b/lib/Pb/Break/__init__.py~
index c1064e2..64d9cc6 100755
--- a/lib/Pb/Break/__init__.py~
+++ b/lib/Pb/Break/__init__.py~
@@ -5,7 +5,7 @@ import random
import re
import urllib
import inspect
-from Config import *
+from config import *
from Pb import Pb
from Pb.Params import Params
diff --git a/lib/Pb/Generate/__init__.py b/lib/Pb/Generate/__init__.py
index 8e206db..3e47a7b 100755
--- a/lib/Pb/Generate/__init__.py
+++ b/lib/Pb/Generate/__init__.py
@@ -1,7 +1,7 @@
#!/usr/bin/python2.7
import sys
import os
-from Config import *
+from config import *
from Pb import Pb
_default_tag = "im"
@@ -138,3 +138,5 @@ class PbGenerate(Pb):
if self.params.background:
self._composite()
self._cleanup();
+ self._file_dimensions()
+ self._file_size_get()
diff --git a/lib/Pb/Gradient/__init__.py b/lib/Pb/Gradient/__init__.py
index 25e84bb..a05612b 100755
--- a/lib/Pb/Gradient/__init__.py
+++ b/lib/Pb/Gradient/__init__.py
@@ -6,7 +6,7 @@ import simplejson as json
import sys
import os
import sha
-from Config import *
+from config import *
from Pb import Pb
_default_color_1 = "white"
@@ -180,4 +180,5 @@ class PbGradient(Pb):
def create(self):
self._build_cmd()
-
+ self._file_dimensions()
+ self._file_size_get()
diff --git a/lib/Pb/Grid/__init__.py b/lib/Pb/Grid/__init__.py
index b940d5c..854e174 100755
--- a/lib/Pb/Grid/__init__.py
+++ b/lib/Pb/Grid/__init__.py
@@ -3,8 +3,8 @@ import re
import os
import simplejson as json
import random
-from Config import DEFAULT_FINALFORMAT, DEFAULT_HEIGHT, DEFAULT_WIDTH, WORKING_DIR, OUTPUT_IMAGE_TYPES
-from Config import THREEDROTATE, GRID, BIN_CONVERT, BIN_COMPOSITE
+from config import DEFAULT_FINALFORMAT, DEFAULT_HEIGHT, DEFAULT_WIDTH, WORKING_DIR, OUTPUT_IMAGE_TYPES
+from config import THREEDROTATE, GRID, BIN_CONVERT, BIN_COMPOSITE
import tempfile
from Pb import Pb
@@ -159,3 +159,5 @@ class PbGrid(Pb):
if self.params.planebgimage: self._overlay_planebgimage()
if self.params.trim: self._trim_cmd()
self._cleanup()
+ self._file_dimensions()
+ self._file_size_get()
diff --git a/lib/Pb/Landscape/__init__.py b/lib/Pb/Landscape/__init__.py
index cc1bcb0..153f9ce 100755
--- a/lib/Pb/Landscape/__init__.py
+++ b/lib/Pb/Landscape/__init__.py
@@ -1,4 +1,4 @@
-from Config import *
+from config import *
import Pb
import base64
from Pb import Pb
@@ -48,3 +48,5 @@ class PbLandscape(Pb):
def create(self, breakmode=""):
self._saveImgData();
+ self._file_dimensions();
+ self._file_size_get();
diff --git a/lib/Pb/Pattern/__init__.py b/lib/Pb/Pattern/__init__.py
index 930af64..cc3c431 100755
--- a/lib/Pb/Pattern/__init__.py
+++ b/lib/Pb/Pattern/__init__.py
@@ -3,7 +3,7 @@ import sys
import random
import re
import urllib
-from Config import *
+from config import *
from Pb import Pb
import simplejson as json
@@ -83,4 +83,5 @@ class PbPattern(Pb):
self._make_canvas();
self._make_mask()
self._fuse_mask();
-
+ self._file_dimensions()
+ self._file_size_get()
diff --git a/lib/Pb/__init__.py b/lib/Pb/__init__.py
index eab9878..4a5c75d 100644
--- a/lib/Pb/__init__.py
+++ b/lib/Pb/__init__.py
@@ -1,5 +1,5 @@
import re
-from Config import *
+from config import *
import time
import urllib, urllib2
import sys, os
@@ -7,6 +7,10 @@ import random
from subprocess import Popen,PIPE,call
from Params import Params
import sha
+import simplejson as json
+from _S3 import _S3
+from Db import Db
+BASE_URL = "http://i.asdf.us"
Request = urllib2.Request
urlencode = urllib.urlencode
@@ -27,7 +31,7 @@ class Pb(object):
self._working_dir = WORKING_DIR
self._tag = self.__class__.__name__
self._hashdir = None
- self._db_url_param = "NULL"
+ self._db_url_param = None
def _filename_create(self, url=None, namepart="", extension=""):
if url:
@@ -68,11 +72,15 @@ class Pb(object):
raise Exception("Unable to call cmd {}".format(str(cmd)))
def _dimensions(self, filepath):
- ident = (Popen([BIN_IDENTIFY, filepath], stdout=PIPE).communicate()[0]).split(" ")
- return ident[2].split("x")
+ try:
+ ident = (Popen([BIN_IDENTIFY, filepath], stdout=PIPE).communicate()[0]).split(" ")
+ return ident[2].split("x")
+ except Exception as e:
+ self.err_warn("Unable to get file dimensions:\n")
+ self.err_ward(str(e))
- def file_dimensions (self):
- return self._dimensions(self.filename)
+ def _file_dimensions (self):
+ self.file_width, self.file_height = self._dimensions(self.filepath)
def _width_and_height_set(self, filepath=None, width=DEFAULT_WIDTH, height=DEFAULT_HEIGHT):
if filepath:
@@ -81,9 +89,9 @@ class Pb(object):
self.width = width
self.height = height
- def file_size(self):
+ def _file_size_get(self):
try:
- return os.stat(self.filepath)[6]
+ self.file_size = os.stat(self.filepath)[6]
except Exception as e:
self.err_warn("Couldn't determine filesize of %s\n" % self.filepath)
self.err_warn(str(e))
@@ -119,7 +127,8 @@ class Pb(object):
if verbose:
sys.stderr.write("generated %s\n" % b.filepath)
sys.stderr.write("files created %s\n" % b._files_created)
- sys.stderr.write("commands %s" % " ".join(b.commands))
+ sys.stderr.write("commands:\n %s\n" % ";\n ".join(b.commands))
+ return b
@staticmethod
def gif_frames(filepath):
@@ -139,36 +148,43 @@ class Pb(object):
frame = random.choice(_gif_frames)
self._call_cmd([BIN_CONVERT, frame, filepath])
- def db_send(self, remote_addr="NULL"):
+ def db_send(self, remote_addr=None, db_connection=None):
try:
- db.insert_cmd(**{
+ db = db_connection or Db();
+ 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' : self.params.username or "NULL",
+ 'username' : self.params.username,
'url' : self._db_url_param,
'directory' : self._hashdir,
- 'oldfile' : "NULL", #weird
- 'newfile' : im.filename,
+ 'oldfile' : None,
+ 'newfile' : self.filename,
'dataobj' : json.dumps(dict(self._input_kwargs)),
'cmd' : ";".join(self.commands),
'tag' : self._tag,
- })
+ }
+ sys.stderr.write(str(_insert_data))
+ db.insert_cmd(**_insert_data)
except Exception as e:
- self.err_warn("Problem sending to database")
-
+ self.err_warn("Problem sending to database:\n %s" % str(e))
+
def file_s3move(self):
self._hashdir_create()
- s3move(im.filepath, "im/{}/{}".format(self._hashdir, im.filename))
- self._files_created.append(self.filepath)
+ s3conn = _S3()
+ s3conn.s3move(self.filepath, "im/{}/{}".format(self._hashdir, self.filename))
self._file_clean_local();
def file_json(self):
- dimensions = self.file_dimensions();
return json.dumps({
- 'url' : "im/%s/%s".format(BASE_URL, self._hashdir, self.filename),
- 'size' : self.file_size(),
- 'width' : "{}px".format(dimensions[0]),
- 'height' : "{}px".format(dimensions[1]),
+ 'url' : "%s/im/%s/%s" % (BASE_URL, self._hashdir, self.filename),
+ 'size' : self.file_size,
+ 'width' : "%spx" % self.file_width,
+ 'height' : "%spx" % self.file_height,
})
from Pb.Grid import PbGrid
diff --git a/lib/_S3/__init__.py b/lib/_S3/__init__.py
new file mode 100644
index 0000000..dbe50c5
--- /dev/null
+++ b/lib/_S3/__init__.py
@@ -0,0 +1,24 @@
+from config import *
+import sys
+from boto.s3.connection import S3Connection
+from boto.s3.key import Key
+class _S3(object):
+ def __init__(self):
+ try:
+ self.conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, is_secure=False)
+ self.bucket = self.conn.get_bucket(BUCKET_NAME)
+ except Exception as e:
+ sys.stderr.write("Could not connect to s3\n");
+ sys.stderr.write(str(e))
+ sys.exit(1)
+
+ def s3move(self, filename,objectname):
+ try:
+ k = Key(self.bucket)
+ k.key = objectname
+ k.set_contents_from_filename(filename)
+ k.set_acl('public-read')
+ k.storage_class = 'REDUCED_REDUNDANCY'
+ except Exception as e:
+ sys.stderr.write(str(e));
+ sys.exit(1)