hostile-takeover/stats/avatar.py
2014-07-06 17:47:28 -07:00

57 lines
1.9 KiB
Python

import models
import datetime
import basehandler
from google.appengine.ext import webapp
from google.appengine.api import images
from google.appengine.api import urlfetch
MAX_AGE_SECONDS = 60 * 60 * 24 * 7 * 52
class AvatarHandler(basehandler.BaseHandler):
def get(self):
hash = self.request.get('h')
if hash == '':
self.response.set_status(400, 'need hash parameter')
return
obj = models.AvatarModel.get(models.avatarmodel_key(hash))
if not obj:
self.response.set_status(400, 'avatar not found')
return
size = self.request.get('s')
if size == '' or size == '64':
self.set_caching_headers(MAX_AGE_SECONDS, public=True)
self.response.headers['Content-Type'] = 'image/jpeg'
self.response.out.write(obj.content)
return
self.response.set_status(400, 'size %s not supported' % size)
def prepare_avatar(avatar_data):
# Want 64x64 avatar. For now letterbox a square at full res and scale.
try:
img = images.Image(image_data=avatar_data)
x_left = 0.0
y_top = 0.0
x_right = float(img.width)
y_bottom = float(img.height)
if img.width > img.height:
x_left = float(img.width - img.height) / 2
x_right -= x_left
else:
y_top = float(img.height - img.width) / 2
y_bottom -= y_top
img.crop(x_left / img.width, y_top / img.height, x_right / img.width, y_bottom / img.height)
img.resize(64, 64)
return img.execute_transforms(output_encoding=images.JPEG)
except:
return None
def save_avatar(hash, avatar_data):
q = models.AvatarModel.all(keys_only=True)
q.filter("hash = ", hash)
r = q.fetch(1)
if len(r) == 0:
avatar_key = models.avatarmodel_key(hash)
kwds = dict(hash=hash, content=avatar_data)
models.AvatarModel.get_or_insert(avatar_key.name(), **kwds)