import re from config import * import time import urllib import urllib2 import sys from subprocess import Popen,PIPE,call Request = urllib2.Request urlencode = urllib.urlencode urlopen = urllib2.urlopen def call_cmd(cmd, error=""): try: call(cmd) except Exception as e: raise (str(e)) def is_color(s): if s == "": return "transparent" if re.match('(rgba?\([0-9]+,[0-9]+,[0-9]+\))|([a-zA-Z]+)|(\#[A-Ha-h0-9]+)', s): return s.replace(' ', ''); else: sys.stderr.write("Not a color: {}\n".format(s)) raise ValueError 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 is_number(s): try: return int(s) except (ValueError, TypeError): return False def bool_correct(s): if re.match(r'^false$', s, re.IGNORECASE): return False elif re.match(r'^true$', s, re.IGNORECASE): return True else: return s class dotdict(dict): """dot.notation access to dictionary attributes""" def __getattr__(self, attr): return self.get(attr) __setattr__= dict.__setitem__ __delattr__= dict.__delitem__ def get_mimetype(f): try: mimetype = Popen( [BIN_IDENTIFY, f], stdout=PIPE ).communicate()[0].split(" ")[1].lower() return mimetype except Exception as e: sys.stderr.write("couldn't determine mimetype") sys.stderr.write(str(e)) raise; def sanitize (str): return re.sub(r'\W+', '', str) def now(): return int(time.time()) def browser_request (url, data=None): headers = { 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', 'Accept': '*/*', } try: req = Request(url, data, headers) response = urlopen(req) except IOError, e: if hasattr(e, 'code'): sys.stderr.write( '%s - ERROR %s' % (url, e.code) ) raise; return None else: return response def download(url, destination, max_size=MAX_SIZE): response = browser_request(url, None) rawimg = response.read() if len(rawimg) == 0: sys.stderr.write("got zero-length file") raise; if len(rawimg) > max_size: sys.stderr.write("file too big: max size {} KB / {} is {} KB".format( str(MAX_SIZE/1024), destination, str(len(rawimg)/1024) )) raise; f = open(destination, "w") f.write(rawimg) f.close() def file_size (filepath): try: return os.stat(file)[6] except Exception as e: sys.stderr.write("IMGRID couldn't determine file size") sys.stderr.write(str(e)) raise; 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: sys.stderr.write("IMGRID couldn't get gif frames") sys.stderr.write(str(e)) raise;