1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
import re
from Config import *
import time
import urllib
import urllib2
import sys
import os
import random
from subprocess import Popen,PIPE,call
from Params import Params
import time
Request = urllib2.Request
urlencode = urllib.urlencode
urlopen = urllib2.urlopen
_max_filename_length = 20;
class Pb(object):
def __init__(self):
self._now = str(int(time.time()));
self.params = Params(classname=self.__class__.__name__, now=self._now);
self._files_created = []
self.commands = [];
self._working_dir = WORKING_DIR
def _filename_create(self, url=None, namepart="", extension=""):
if url:
_basename = os.path.basename(url)
namepart = re.split(r'\.', _basename)[0]
namepart = self.params.sanitize(namepart)[0:_max_filename_length]
name = ""
if namepart: name += "%s-" % namepart
name += "%s_%s" % (self.__class__.__name__, self._now)
if self.params.username : name += "_%s" % self.params.username
if extension: name += ".%s" % extension
return name
def _filepath_create(self, filename, directory=WORKING_DIR):
return os.path.join(directory, filename)
def _filename_filepath_create(self, url=None, namepart="", directory=WORKING_DIR):
_filename = self._filename_create(url=url, namepart=namepart);
_filepath = self._filepath_create(_filename, directory=directory);
return _filename, _filepath
def _tempfilepath_create(self, namepart="temp", directory=WORKING_DIR, extension=""):
_filename = self._filename_create(namepart=namepart, extension=extension)
return self._filepath_create(_filename, directory=directory)
def _call_cmd(self, cmd):
try:
cmd = map(lambda i: str(i), cmd)
call(cmd)
self.commands.append(" ".join(cmd));
except Exception:
raise Exception("Unable to call cmd {}".format(str(cmd)))
@staticmethod
def gif_frames(filepath):
try:
info = Popen([BIN_IDENTIFY,filepath], stdout=PIPE).communicate()[0]
frames = filter((lambda x: x), map(
(lambda x: x.split(" ")[0]),
(info).split('\n')
))
return frames
except Exception as e:
self.err_warn("couldn't get gif frames")
raise e;
@staticmethod
def dimensions (filepath):
#works in lieu of a mimetype check (it reads the header as well)
ident = (Popen([BIN_IDENTIFY, filepath], stdout=PIPE).communicate()[0]).split(" ")
return ident[2].split("x")
def _width_and_height_set(self, filepath=None, width=DEFAULT_WIDTH, height=DEFAULT_HEIGHT):
if filepath:
self.width, self.height = Pb.dimensions(filepath)
return
self.width = width
self.height = height
@staticmethod
def file_size (filepath):
try:
return os.stat(filepath)[6]
except Exception as e:
sys.stderr.write("Couldn't determine filesize\n")
sys.stderr.write(str(e)+"\n")
raise;
def _file_read(self, filepath):
f = open(filepath, 'r');
data = f.read()
f.close()
return data
def err_warn(self, s):
sys.stderr.write("ERROR:{} - {}\n".format(self.__class__.__name__, s))
def _cleanup(self):
cmd = ["rm"]+self._files_created
self._call_cmd(cmd)
def err_fatal(self, s):
sys.stderr.write("ERROR[FATAL]:{} - {}\n".format(self.__class__.__name__, s))
sys.exit(1);
|