summaryrefslogtreecommitdiff
path: root/Pb/__init__.py
blob: edb7e1f224a720a62ebd03fd5c2383d827643d06 (plain)
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);