Allow for different size minecraft avatars, and fix caching
This commit is contained in:
@@ -5,11 +5,24 @@ register = template.Library()
|
||||
|
||||
@register.tag
|
||||
def avatar(parser, token):
|
||||
return AvatarNode(token.split_contents()[1])
|
||||
contents = token.split_contents()
|
||||
if len(contents) > 2:
|
||||
sizevar = contents[2]
|
||||
else:
|
||||
sizevar = None
|
||||
return AvatarNode(contents[1], sizevar)
|
||||
|
||||
class AvatarNode(template.Node):
|
||||
def __init__(self, uservar):
|
||||
def __init__(self, uservar, sizevar):
|
||||
self.__user = template.Variable(uservar)
|
||||
if sizevar:
|
||||
self.__size = template.Variable(sizevar)
|
||||
else:
|
||||
self.__size = None
|
||||
|
||||
def render(self, context):
|
||||
return '<img src="%s"/>'%(reverse('minecraft.views.avatar', kwargs={'username': self.__user.resolve(context)}),)
|
||||
if self.__size:
|
||||
size = self.__size.resolve(context)
|
||||
else:
|
||||
size = 64
|
||||
return '<img src="%s"/>'%(reverse('minecraft.views.avatar', kwargs={'username': self.__user.resolve(context), 'size': size}),)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
from django.conf.urls.defaults import patterns, include, url
|
||||
|
||||
urlpatterns = patterns('minecraft',
|
||||
url(r'^avatar/(?P<size>[0-9]+)/(?P<username>.*).png$', 'views.avatar'),
|
||||
url(r'^avatar/(?P<username>.*).png$', 'views.avatar'),
|
||||
url(r'^rules/(?P<server>.*):(?P<port>[0-9]+)$', 'views.rules'),
|
||||
url(r'^rules/(?P<server>.*)$', 'views.rules', kwargs={'port':25565})
|
||||
|
@@ -11,8 +11,9 @@ from httplib import HTTPException
|
||||
import models
|
||||
import os
|
||||
|
||||
def avatar(request, username):
|
||||
avatar = cache.get('minecraft-avatar-%s'%(username))
|
||||
def avatar(request, username, size=64):
|
||||
avatar = cache.get('minecraft-avatar-%s-%s'%(username, size))
|
||||
size = int(size)
|
||||
if avatar is None:
|
||||
try:
|
||||
skinStream = urlopen("http://minecraft.net/skin/%s.png"%(username))
|
||||
@@ -21,11 +22,11 @@ def avatar(request, username):
|
||||
imgStream = StringIO(skinStream.read())
|
||||
img = Image.open(imgStream)
|
||||
img = img.crop((8, 8, 16,16))
|
||||
img = img.resize((64, 64), Image.NEAREST)
|
||||
img = img.resize((size, size), Image.NEAREST)
|
||||
buf = StringIO()
|
||||
img.save(buf, "PNG")
|
||||
avatar = buf.getvalue()
|
||||
cache.set('minecraft-avatar-%s', avatar, 86400)
|
||||
cache.set('minecraft-avatar-%s-%s'%(username, size), avatar, 86400)
|
||||
return HttpResponse(avatar, content_type="image/png")
|
||||
|
||||
def rules(request, server, port):
|
||||
|
Reference in New Issue
Block a user