diff options
| -rwxr-xr-x | Pb/Breaker/__init__.py~ | 205 | ||||
| -rw-r--r-- | photoblaster/db/__init__.py | 1 | ||||
| -rw-r--r-- | photoblaster/db/db.py | 5 | ||||
| -rw-r--r-- | photoblaster/db/iasdfus.py | 2 | ||||
| -rw-r--r-- | photoblaster/db/pb.py | 6 | ||||
| -rw-r--r-- | photoblaster/db/s3.py | 10 | ||||
| -rwxr-xr-x | photoblaster/modules/breaker.py | 100 | ||||
| -rw-r--r-- | photoblaster/s3/cli.py | 20 | ||||
| -rw-r--r-- | remote_host_test.py | 27 |
9 files changed, 89 insertions, 287 deletions
diff --git a/Pb/Breaker/__init__.py~ b/Pb/Breaker/__init__.py~ deleted file mode 100755 index c1064e2..0000000 --- a/Pb/Breaker/__init__.py~ +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/python2.7 -import os -import sys -import random -import re -import urllib -import inspect -from Config import * -from Pb import Pb -from Pb.Params import Params - -DEFAULT_FINALFORMAT = "png"; -SUBTLE_BREAK_MARK = 'pron' -EXTREME_BREAK_MARK = 'sugar' - -HEADER_OFFSET = 2000 - -class Breaker(Pb): - def __init__(self, url=None, breaktype=None, finalformat=DEFAULT_FINALFORMAT, - breakmode=None, breakangle=None, username=None, expanded=None, firsttime=None): - super(Breaker,self).__init__(); - - self.params.breaktype = self._get_breaktype(breaktype); - self.params.url = url - - _frame = inspect.currentframe(); - _args_vals = inspect.getargvalues(_frame); - for arg in _args_vals.args: - if arg == "self": - continue - sys.stderr.write(str(arg) + "\n") - try: - if arg not in ['breaktype', 'url']: - sys.stderr.write("Yoooo"); - sys.stderr.write(arg) - strarg = str(_args_vals.locals.get(arg)) - django self.bool_correct(strarg) - self.params.__setattr__("dingo", django) -# self.params.__setattr__(arg, self.bool_correct(_args_vals.locals.get(arg))) - except Exception as e: - sys.stderr.write("\n"+str(e)+"\n") - sys.exit(1); - self.params = Params(**self.params); - - self.tag = "imBreak" - self.commands = []; - self._now = self.now() - self.files_created = [] - - self.basename, self._first_format = self._get_filename_and_type_from_url(); - self._downloaded_file = self.tempname_create(basename=self.basename, fmt=self._first_format) - - try: - self.download(self.params.url, self._downloaded_file) - self.files_created.append(self._downloaded_file) - except Exception as e: - self.err_warn(str(e)) - - self._gif_frames = self.gif_frames(self._downloaded_file) - self._gif_frames = self._gif_frames if len(self._gif_frames) > 1 else False - self.width, self.height = self.dimensions(self._downloaded_file) # same here - - if not self.params.finalformat and self._gif_frames: - self.params.finalformat = 'gif' - if self.params.breaktype == 'miff': - self.params.finalformat = 'jpg' - self.params.breakmode = 'subtle' - #final filepath is stored in self.filepath - self.filename = "{}.{}".format(self.basename, self.params.finalformat) - self.filepath = os.path.join(self._working_dir, self.filename) - self._conversion_file = self.tempname_create(basename=self.basename, fmt=self.params.breaktype); - - def _call_cmd(self, cmd): - super(Breaker,self)._call_cmd(cmd, error) - self.commands.append(" ".join(cmd)); - - def _get_breaktype(self, key): - #{{{ conversion table - breaktypeTranslate = { - 'CLASSIC':'jpg', - 'REDUX':'pcds', - 'BLURRY_BREAK':'viff', - 'BLURRY_BREAK_2':'mat', - 'SWIPE':'miff', - 'RGB_WASH':'psd', - 'RGB_WASH_2':'psb', - 'NOISY_BREAK':'palm', - 'NOISY_BREAK_2':'fig', - 'BROKEN_VIGNETTE':'pbm', - 'FAX_MACHINE':'cals', - 'STRIPES':'exr', - 'PHOTOCOPY':'art', - } - #}}} - return breaktypeTranslate[key] - -#{{{#########rotatefunctions####################################### - def _rotate(self): - cmd = [BIN_CONVERT,self._downloaded_file,"-rotate",self.params.breakangle,"+repage",self._downloaded_file] - self._call_cmd(cmd) - - def _rotate_back(self): - angle = str(360-int(self.params.breakangle)) - cmd = [BIN_CONVERT,self.filepath,"-rotate",angle,"+repage",self.filepath] - self._call_cmd(cmd) - if not self.params.expanded: - cmd = [BIN_CONVERT,self.filepath,"-gravity","Center","-crop","{}x{}+0+0".format( - self.width, self.height),"+repage",self.filepath] - self._call_cmd(cmd) -#}}} - def _subtle_break(self): - #assume the header is no longer than HEADER_OFFSET bytes - breakpoint = random.randint(HEADER_OFFSET, len(self.file_data)) - newfile = self.file_data[0:breakpoint] \ - + SUBTLE_BREAK_MARK \ - + self.file_data[breakpoint:] - self.file_data = newfile[0:len(self.file_data)] - - def _extreme_break(self): - increment = len(self.file_data)/10; - i = 0 - newfile = ""; - for b in self.file_data: - if i > HEADER_OFFSET and not (i % increment): - b += EXTREME_BREAK_MARK - newfile += b - i += 1 - self.file_data = newfile[0:len(self.file_data)] - - def _choose_frame(self): - frame = random.choice(self._gif_frames) - self._call_cmd([BIN_CONVERT, frame, self._downloaded_file]) - - def _enforce_jpg(self): - if self.params.breaktype in [ "exr", "bmp", "miff" ] and not re.match(r'jpe?g$', self._first_format, re.IGNORECASE): - jpg_file = self.tempname_create(basename=self.basename, fmt="jpg") - self._call_cmd([BIN_CONVERT,self._downloaded_file,jpg_file]) - self._call_cmd(["rm",self._downloaded_file]) - self._downloaded_file = jpg_file - - def _first_conversion(self): - if self._first_format == self.params.breaktype: - self._downloaded_file = self._conversion_file - return - self._call_cmd([BIN_CONVERT, self._downloaded_file, self._conversion_file]) - self.files_created.append(self._conversion_file) - - def _prepare_filedata(self): - if self._gif_frames: - self._choose_frame() - if self.params.breakangle: - self._rotate() - self._enforce_jpg(); - self._first_conversion(); - self.file_data = self._file_read(self._conversion_file) - if not self.file_data: - self.err_warn("Unable to get file data"); - - def _add_false_data(self, breakmode): - if breakmode == "subtle": - self._subtle_break() - elif breakmode == "extreme": - self._extreme_break() - f = open(self._conversion_file, 'w') - f.write(self.file_data) - f.close(); - - def _final_conversion(self): - self._call_cmd( [BIN_CONVERT, self._conversion_file, self.filepath]) - def psd_psbfilepath(num): - return os.path.join(self._working_dir, "{}-{}.{}".format(self.basename, num, self.params.finalformat)) - if self.params.breaktype == 'psd': - self._call_cmd(['mv', psd_psbfilepath(1), self.filepath]) - self.files_created.append(psd_psbfilepath(0)) - if self.params.breaktype == 'psb': - self._call_cmd(['mv', psd_psbfilepath(0), self.filepath]) - self.files_created.append(psd_psbfilepath(1)) - if self.params.breakangle: - self._rotate_back() - - def _cleanup(self): - cmd = ["rm"]+self.files_created - self._call_cmd(cmd) - - def create(self, breakmode=""): - if not breakmode: breakmode = self.params.breakmode - self._prepare_filedata(); - self._add_false_data(breakmode); - self._final_conversion() - self._cleanup() - - @classmethod - def test(cls): - TEST_PARAMS = { - "url" : "http://i.asdf.us/im/27/1424816234661dumpfmpfifferkinggr_1424816412_pfifferking.gif" , - "breaktype" : "RGB_WASH", - "finalformat" : "png", - "breakmode" : "extreme", - "breakangle" : "10", - "username" : "donkey", - "expanded" : "false" - } - b = cls(**TEST_PARAMS) - b.create(); - print b.filepath diff --git a/photoblaster/db/__init__.py b/photoblaster/db/__init__.py index e69de29..9f3789d 100644 --- a/photoblaster/db/__init__.py +++ b/photoblaster/db/__init__.py @@ -0,0 +1 @@ +from photoblaster.db.db import Db diff --git a/photoblaster/db/db.py b/photoblaster/db/db.py index b264687..eb97d5e 100644 --- a/photoblaster/db/db.py +++ b/photoblaster/db/db.py @@ -2,10 +2,13 @@ from photoblaster.config import DB_HOST, DB_USER, DB_PASSWORD, DB_NAME from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker +import sys + 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, @@ -13,3 +16,5 @@ class Db(object): 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/iasdfus.py b/photoblaster/db/iasdfus.py index 55faf11..63def26 100644 --- a/photoblaster/db/iasdfus.py +++ b/photoblaster/db/iasdfus.py @@ -1,10 +1,10 @@ # coding: utf-8 +"""table class for iasdfus""" from sqlalchemy import BigInteger, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() - class Iasdfus(Base): __tablename__ = 'iasdfus' diff --git a/photoblaster/db/pb.py b/photoblaster/db/pb.py index e6759aa..1263b56 100644 --- a/photoblaster/db/pb.py +++ b/photoblaster/db/pb.py @@ -2,12 +2,15 @@ import time import sys import simplejson as json +from photoblaster.db import Db +from photoblaster.db.imcmd import ImCmd from sqlalchemy import sql _NULL = sql.null() + class Pb(Db): - """all photoblaster db methods go here""" + """all photoblaster db methods go here""" def __init__(self): super(Pb, self).__init__() @@ -38,4 +41,3 @@ class Pb(Db): except Exception as e: sys.stderr.write("Unable to commit database entry\n") sys.stderr.write(str(e)) - diff --git a/photoblaster/db/s3.py b/photoblaster/db/s3.py index 7e13853..8cfae35 100644 --- a/photoblaster/db/s3.py +++ b/photoblaster/db/s3.py @@ -1,6 +1,9 @@ # coding: utf-8 +from photoblaster.db.iasdfus import Iasdfus + + class S3(Db): - """wrapper for all db methods""" + """queries the db for s3 related stuff""" def __init__(self): super(S3, self).__init__() @@ -31,6 +34,5 @@ class S3(Db): session.commit() session.close() except Exception as e: - sys.stderr.write("Unable to commit database entry\n") - sys.stderr.write(str(e)) - + self.log_error("Unable to commit database entry") + self.log_error(str(e)) diff --git a/photoblaster/modules/breaker.py b/photoblaster/modules/breaker.py index 6a2a63e..6a2e2f3 100755 --- a/photoblaster/modules/breaker.py +++ b/photoblaster/modules/breaker.py @@ -13,16 +13,18 @@ _extreme_break_mark = 'sugar' _header_offset = 2000 _default_breakmode = "subtle" + class PbBreaker(Pb): example_params = { - "url" : "http://i.asdf.us/im/de/HolyMountain2_1322275112_seamonkey.gif", - "breaktype" : "RGB_WASH", - "finalformat" : "png", - "breakmode" : "extreme", - "breakangle" : "10", - "username" : "donkey", - "expanded" : "false" + "url": "http://i.asdf.us/im/de/HolyMountain2_1322275112_seamonkey.gif", + "breaktype": "RGB_WASH", + "finalformat": "png", + "breakmode": "extreme", + "breakangle": "10", + "username": "donkey", + "expanded": "false" } + def __init__(self, **kwargs): super(PbBreaker, self).__init__(**kwargs) _definitions = { @@ -30,19 +32,23 @@ class PbBreaker(Pb): 'breaktype': {'type': 'string'}, 'breakmode': { 'type': 'enum', - 'enum_values' : ['subtle', 'extreme', 'gradual'], - 'default' : _default_breakmode + 'enum_values': ['subtle', 'extreme', 'gradual'], + 'default': _default_breakmode }, 'breakangle': {'type': 'float'}, 'expanded': {'type': 'bool'}, 'url': {'type': 'img_url'}, - 'finalformat': {'type': 'enum', 'enum_values' : ['png', 'gif', 'jpg']} + 'finalformat': {'type': 'enum', + 'enum_values': ['png', 'gif', 'jpg']} } - self.params.definitions_import(_definitions, kwargs, classname=self.__class__.__name__) + self.params.definitions_import(_definitions, + kwargs, + classname=self.__class__.__name__) self._files_created.append(self.params.url.path) - self.params.breaktype.set_val(self._get_breaktype(str(self.params.breaktype))) + self.params.breaktype.set_val(self._get_breaktype( + str(self.params.breaktype))) - #psd returns an animation + # psd returns an animation if not self.params.finalformat and self.params.url.mimetype == "gif": self.params.finalformat.set_val("gif") elif self.params.breaktype == 'miff': @@ -64,26 +70,26 @@ class PbBreaker(Pb): self._db_url_param = str(self.params.url['url']) def _get_breaktype(self, key): - #{{{ conversion table + # {{{ conversion table breaktypeTranslate = { - 'CLASSIC':'jpg', - 'REDUX':'pcds', - 'BLURRY_BREAK':'viff', - 'BLURRY_BREAK_2':'mat', - 'SWIPE':'miff', - 'RGB_WASH':'psd', - 'RGB_WASH_2':'psb', - 'NOISY_BREAK':'palm', - 'NOISY_BREAK_2':'fig', - 'BROKEN_VIGNETTE':'pbm', - 'FAX_MACHINE':'cals', - 'STRIPES':'exr', - 'PHOTOCOPY':'art', + 'CLASSIC': 'jpg', + 'REDUX': 'pcds', + 'BLURRY_BREAK': 'viff', + 'BLURRY_BREAK_2': 'mat', + 'SWIPE': 'miff', + 'RGB_WASH': 'psd', + 'RGB_WASH_2': 'psb', + 'NOISY_BREAK': 'palm', + 'NOISY_BREAK_2': 'fig', + 'BROKEN_VIGNETTE': 'pbm', + 'FAX_MACHINE': 'cals', + 'STRIPES': 'exr', + 'PHOTOCOPY': 'art', } - #}}} + # }}} return breaktypeTranslate[key] -#{{{#########rotatefunctions###################################### +# {{{#########rotatefunctions###################################### def _rotate(self): cmd = [ BIN_CONVERT, self.params.url.path, @@ -94,20 +100,27 @@ class PbBreaker(Pb): def _rotate_back(self): angle = str(360-int(self.params.breakangle)) - cmd = [BIN_CONVERT, self.filepath, "-rotate", angle, "+repage", self.filepath] + cmd = [BIN_CONVERT, + self.filepath, "-rotate", angle, "+repage", self.filepath] self._call_cmd(cmd) if not self.params.expanded: - cmd = [BIN_CONVERT, self.filepath, "-gravity", "Center", "-crop", "{}x{}+0+0".format( - self.width, self.height), "+repage", self.filepath] + cmd = [BIN_CONVERT, + self.filepath, + "-gravity", + "Center", + "-crop", + "{}x{}+0+0".format(self.width, self.height), + "+repage", + self.filepath] self._call_cmd(cmd) -#}}} +# }}} def _subtle_break(self): - #assume the header is no longer than _header_offset bytes + # assume the header is no longer than _header_offset bytes breakpoint = random.randint(_header_offset, len(self._file_data)) - newfile = self._file_data[0:breakpoint] \ - + _subtle_break_mark \ - + self._file_data[breakpoint:] + newfile = self._file_data[0:breakpoint] +\ + _subtle_break_mark +\ + self._file_data[breakpoint:] self._file_data = newfile[0:len(self._file_data)] def _extreme_break(self): @@ -123,7 +136,9 @@ class PbBreaker(Pb): def _enforce_jpg(self): if self.params.breaktype in ["exr", "bmp", "miff"] and not \ - re.match(r'jpe?g$', self.params.url.mimetype, re.IGNORECASE): + re.match(r'jpe?g$', + self.params.url.mimetype, + re.IGNORECASE): jpg_file = self._tempfilepath_create(extension="jpg") self._call_cmd([BIN_CONVERT, self.params.url.path, jpg_file]) self._files_created.append(jpg_file) @@ -133,11 +148,14 @@ class PbBreaker(Pb): if self.params.url.mimetype == self.params.breaktype: self._conversion_file = self.params.url.path return - self._call_cmd([BIN_CONVERT, self.params.url.path, self._conversion_file]) + self._call_cmd([BIN_CONVERT, + self.params.url.path, + self._conversion_file]) self._files_created.append(self._conversion_file) def _prepare_filedata(self): - if self.params.url.mimetype == "gif" and self.params.breaktype not in ['mat', 'psd']: + if self.params.url.mimetype == "gif" and\ + self.params.breaktype not in ['mat', 'psd']: self._choose_gif_frame(self.params.url.path) if self.params.breakangle: self._rotate() @@ -158,6 +176,7 @@ class PbBreaker(Pb): def _final_conversion(self): self._call_cmd([BIN_CONVERT, self._conversion_file, self.filepath]) + def psd_psbfilepath(num): return os.path.join(re.sub(r'\.', "-%s." % num, self.filepath)) if str(self.params.breaktype) == 'psd': @@ -174,4 +193,3 @@ class PbBreaker(Pb): self._add_false_data() self._final_conversion() super(PbBreaker, self).create() - diff --git a/photoblaster/s3/cli.py b/photoblaster/s3/cli.py index e86ed0c..9c0cb78 100644 --- a/photoblaster/s3/cli.py +++ b/photoblaster/s3/cli.py @@ -1,17 +1,20 @@ """All s3 related methods stored here""" -from photoblaster.config import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, BUCKET_NAME +from photoblaster.config import AWS_ACCESS_KEY_ID,\ + AWS_SECRET_ACCESS_KEY, BUCKET_NAME import sys from boto.s3.connection import S3Connection from boto.s3.key import Key + + class S3Cli(object): def __init__(self): try: - self.conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, is_secure=False) + 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) + self.log_err_fatal("Could not connect to s3 - %s", e) def s3move(self, filename, objectname): try: @@ -21,5 +24,8 @@ class S3Cli(object): k.set_acl('public-read') k.storage_class = 'REDUCED_REDUNDANCY' except Exception as e: - sys.stderr.write(str(e)) - sys.exit(1) + self.log_err_fatal(str(e)) + + def log_err_fatal(self, msg): + sys.stderr.write("S3 client error: %s\n", msg) + sys.exit(1) diff --git a/remote_host_test.py b/remote_host_test.py deleted file mode 100644 index d535db7..0000000 --- a/remote_host_test.py +++ /dev/null @@ -1,27 +0,0 @@ -from flask import request -from flask import jsonify -from flask import Flask -import re -app = Flask(__name__) - -@app.route("/") -def hello(): - return "Hello World!" - -@app.route("/testme", methods=["GET"]) -def get_my_ip(): - host = request.headers.getlist("X-Forwarded-For")[0] - regex = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') - forwarded_ip = regex.search(host).group() - return jsonify( - { - 'ip1': request.remote_addr, - 'ip2': request.environ['REMOTE_ADDR'], - 'ip3': request.environ.get('HTTP_HOST', "nothing yet"), - 'ip4': forwarded_ip, - 'ip5': request.environ.get('HTTP_X_REAL_IP', request.remote_addr) - } - ), 200 -if __name__ == "__main__": - app.run(port=9994) - |
