diff --git a/import_libravatar.py b/import_libravatar.py new file mode 100644 index 0000000..8240301 --- /dev/null +++ b/import_libravatar.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +''' +Import the whole libravatar export +''' + +import os +from os.path import isfile, isdir, join +import sys +import base64 +from io import BytesIO +import django +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ivatar.settings") # pylint: disable=wrong-import-position +django.setup() # pylint: disable=wrong-import-position +from django.contrib.auth.models import User +from PIL import Image +from ivatar.settings import JPEG_QUALITY +from ivatar.ivataraccount.read_libravatar_export import read_gzdata as libravatar_read_gzdata +from ivatar.ivataraccount.models import ConfirmedEmail +from ivatar.ivataraccount.models import ConfirmedOpenId +from ivatar.ivataraccount.models import Photo +from ivatar.ivataraccount.models import file_format + +if len(sys.argv) < 2: + print("First argument to '%s' must be the path to the exports" % sys.argv[0]) + exit(-255) + +if not isdir(sys.argv[1]): + print("First argument to '%s' must be a directory containing the exports" % sys.argv[0]) + exit(-255) + +PATH = sys.argv[1] +for file in os.listdir(PATH): + if not file.endswith('.xml.gz'): + continue + if isfile(join(PATH, file)): + fh = open(join(PATH, file), 'rb') + items = libravatar_read_gzdata(fh.read()) + print('Adding user "%s"' % items['username']) + (user, created) = User.objects.get_or_create(username=items['username']) + for email in items['emails']: + try: + ConfirmedEmail.objects.get_or_create(email=email, user=user) + except django.db.utils.IntegrityError: + print('%s not unique?' % email) + for openid in items['openids']: + try: + ConfirmedOpenId.objects.get_or_create(openid=openid, user=user) # pylint: disable=no-member + except django.db.utils.IntegrityError: + print('%s not unique?' % openid) + for photo in items['photos']: + data = base64.decodebytes(bytes(photo['data'], 'utf-8')) + pilobj = Image.open(BytesIO(data)) + out = BytesIO() + pilobj.save(out, pilobj.format, quality=JPEG_QUALITY) + out.seek(0) + photo = Photo() + photo.user = user + photo.ip_address = '0.0.0.0' + photo.format = file_format(pilobj.format) + photo.data = out.read() + photo.save() + + fh.close() diff --git a/ivatar/urls.py b/ivatar/urls.py index f875a5c..d86fd04 100644 --- a/ivatar/urls.py +++ b/ivatar/urls.py @@ -20,6 +20,13 @@ urlpatterns = [ # pylint: disable=invalid-name url( r'avatar/(?P\w{32})', AvatarImageView.as_view(), name='avatar_view'), + url( + r'avatar/(?P\w)', + TemplateView.as_view( + template_name='error.html', + extra_context={ + 'errormessage': 'Incorrect digest length', + })), url('description/', TemplateView.as_view(template_name='description.html'), name='description'), # The following two are TODO TODO TODO TODO TODO url('run_your_own/', TemplateView.as_view(template_name='run_your_own.html'), name='run_your_own'), diff --git a/templates/error.html b/templates/error.html index 420b9b0..292fff8 100644 --- a/templates/error.html +++ b/templates/error.html @@ -8,7 +8,14 @@ {% block content %}

{% trans 'Error!' %}

-

{% block errormessage %}{% trans 'Libravatar has encountered an error.' %}{% endblock errormessage %}

+

{% block errormessage %} +{% trans 'Libravatar has encountered an error.' %} +{% if errormessage %} +
+
+{% blocktrans %}{{ errormessage }}{% endblocktrans %} +{% endif %} +{% endblock errormessage %}