def initLogging(cgi=False): conf = ConfigParser.RawConfigParser() conf.read(Location.getInstance().toAbsolutePath("logging.conf")) logger = logging.getLogger() logger.setLevel(logging._levelNames[conf.get("logger_root", "level")]) # Weirdly, there's no supported method to get a level from a name... if cgi: # Make sure all created files are writable. os.umask(0) else: # Set up the console logger. formatter_name = conf.get("handler_consoleHandler", "formatter") format = conf.get("formatter_%s" % (formatter_name), "format") formatter = logging.Formatter(format) handler = logging.StreamHandler(sys.stdout) handler.setFormatter(formatter) logger.addHandler(handler) # Set up the file logger. filename = Location.getInstance().toAbsolutePath(os.path.join("logs", conf.get("handler_logfileHandler", "filename"))) max_bytes = conf.getint("handler_logfileHandler", "max_bytes") backup_count = conf.getint("handler_logfileHandler", "backup_count") formatter_name = conf.get("handler_logfileHandler", "formatter") format = conf.get("formatter_%s" % (formatter_name), "format") formatter = logging.Formatter(format) handler = logging.handlers.RotatingFileHandler(filename, "a", max_bytes, backup_count) handler.setFormatter(formatter) logger.addHandler(handler)
def transformImage(self, img): dims = self.getDims() ret = Image.new("RGB", dims, "white") draw = ImageDraw.Draw(ret) font = "courR" + self.args["font"] + ".pil" path= Location.getInstance().toAbsolutePath(os.path.join("fonts", font)) font = ImageFont.load(path) (w,h) = draw.textsize(self.args["charset"][-1], font) if self.args["mode"] == "L": # Convert to grayscale values = img.convert("L") else: # Saturate the color values = ImageEnhance.Color(img).enhance(4.0) values = values.filter(ImageFilter.MedianFilter(5)) for y in range(0, dims[1], h): for x in range(0, dims[0], w): v = values.getpixel((x,y)) if self.args["mode"] == "L": pct = v/255.0 fill = (0, 0, 0) else: pct = sum(v)/765.0 fill = v vi = int(round(pct * (len(self.args["charset"])-1))) draw.text((x,y), self.args["charset"][vi], font=font, fill=fill) return ret
def tweet(odict, creature): logger = logging.getLogger() logger.info("Posting %s as %s..." % (creature.getImagePath(), creature.getFullPageURL())) creds = Location.getJsonModule().load(open(Location.getInstance().toAbsolutePath(".twitter.json"))) twitter = Twython(creds["app"], creds["app_secret"], creds["token"], creds["token_secret"]) photo = open(creature.getImagePath(), 'rb') if (not odict.get("no-op", False)): response = twitter.upload_media(media=photo) response = twitter.update_status(status=creature.getFullPageURL(), media_ids=[response['media_id']]) logger.info("Posted as %s." % (response["id_str"]))
import shutil import time import sys import logging.handlers import ConfigParser import Location import Creature import ImageLoader import Picklable import SrcImage import Thumbnailer import TransformLoader exps_dir = "exps" abs_dir = Location.getInstance().toAbsolutePath(exps_dir) class NoSuchExperiment(Exception): def __init__(self, exp): Exception.__init__(self) self.exp = exp def __str__(self): return str(self.exp) ################################################################ def initLogging(cgi=False): conf = ConfigParser.RawConfigParser() conf.read(Location.getInstance().toAbsolutePath("logging.conf"))
def __init__(self): self.logger = logging.getLogger(self.getLoggerName()) self.loc = Location.getInstance()