def blob_exif(blob_key):
    '''Extract EXIF data from the blob data.'''
    keys = (
        ('make', 'Make', '?'),
        ('model', 'Model', '?'),
        ('datetime', 'DateTimeDigitized', '1990:01:01 00:00:00'),
        ('iso', 'ISOSpeedRatings', 0),
        ('focal_length', 'FocalLength', 0),
        ('lens', 'Lens', '?'),
        ('exposure_time', 'ExposureTime', 1),
        ('exposure_time1', 'ExposureTime', 1.0),
        ('aperture', ['ApertureValue', 'MaxApertureValue'], 0.0),
        ('copyright', 'Copyright', '')
    )
    data = {}
    im = Image(blob_key=blob_key)
    im.rotate(0)
    im.execute_transforms(parse_source_metadata=True)
    exif = im.get_original_metadata()
    logging.info(exif)
    for key, key_exif, default in keys:
        if key == 'datetime':
            dt = exif.get(key_exif, default)
            data[key] = datetime.datetime.strptime(dt, '%Y:%m:%d %H:%M:%S')
        elif key == 'focal_length':
            data[key] = int(exif.get(key_exif, default))
        elif key == 'exposure_time':
            t = exif.get(key_exif, default)
            if t == 0:
                data[key] = t
            else:
                data[key] = int(round(1 / t))
        elif key == 'aperture':
            app, max_app = key_exif
            aperture = exif.get(app, None)
            aperture = exif.get(max_app, default) if not aperture else aperture
            data[key] = aperture
        else:
            data[key] = exif.get(key_exif, default)
    return data
    def get(self):
        url = "http://eatingstats.tumblr.com/tagged/beer/rss"

        d = feedparser.parse(url)
        
        articles = []
        lastbeer = None
        lastbeerPic = ""
        beers = []
        promile = 0
        
        self.response.out.write("<!--")
        for row in d.entries:		
            article = row['description'].encode('utf-8');
            pictureUrl = re.search("(?P<url>https?://[^\s\"]+)", article).group("url")
            result = urlfetch.fetch(pictureUrl)
            if result.status_code == 200:
                img = Image(image_data=result.content);
                img.rotate(0)
                img.execute_transforms(parse_source_metadata=True)
                meta = img.get_original_metadata()
                self.response.out.write(meta)
                if 'DateCreated' in meta:
                    #date like 2012:07:18 17:35:56
                    date = time.strptime(meta['DateCreated'], "%Y:%m:%d %H:%M:%S")
                else:
                    #fetching the tiem from the image metadata failed. so we take the published
                    #date from the rss feed
                    date = row.published_parsed
                    
                self.response.out.write(date)
                if lastbeer == None:
                    lastbeer = date
                    lastbeerPic = pictureUrl
                    promile += alcoholBeer / (0.7*weightPhil)
                else:
                    delta = abs(time.mktime(lastbeer) - time.mktime(date))
                    self.response.out.write("since the last beer: "+str(delta))
                    if delta > 12 * 60 * 60:
                        break;
                    promile += alcoholBeer / (0.7*weightPhil)
                    if delta > 2 * 60 * 60:
                        timeToReduceAlcohol = (delta - 2 * 60 * 60) #for two hours there will be no reduction of blood alcohol content
                        reducedAlcoholByHourInGram = 0.1 * weightPhil
                        reducedAlcoholSinceLastBeer = delta/3600 * reducedAlcoholByHourInGram * 0.08
                        if reducedAlcoholSinceLastBeer <  alcoholBeer / (0.7*weightPhil):
                            promile += alcoholBeer / (0.7*weightPhil) - reducedAlcoholSinceLastBeer
                    
                self.response.out.write("current promille: "+str(promile))
                beers.append(date)
            articles.append(pictureUrl)	
        
        self.response.out.write("-->")

        word = ""
        for k,v in sorted(promilToWords.items()):
            if k > promile * 10 :
                word = v
                break
        
        self.response.out.write("<center><h1>Phil "+word+"!</h1>")
        self.response.out.write("<p>"+time.strftime('At the %d, %b %Y',beers[0])+" with "+str(round(promile/10, 4))+" percent <a href=\"http://en.wikipedia.org/wiki/Blood_alcohol_content\">blood alcohol content.</a></p>")
        self.response.out.write("<br /><img src=\""+lastbeerPic+"\" alt=\"last beer of phil\" /></center>")
        self.response.out.write("<a href=\"https://github.com/leobuettiker/whenwasphildrunk\"><img style=\"position: absolute; top: 0; right: 0; border: 0;\" src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png\" alt=\"Fork me on GitHub\"></a>")
Exemple #3
0
 def post(self):
      img = Image(self.request.get('file'))
      degrees = int(self.request.get('degrees', '90'))
      img.rotate(degrees)
      rotated = img.execute_transforms()
      self.render(image=rotated)