X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/e9f9c3887d9c9e45401257a78d3182f17a5a8146..6280673f35e13e75e81c5b7821bd2a44a1831eab:/apps/picture/models.py diff --git a/apps/picture/models.py b/apps/picture/models.py index 97dbd0ec2..5aabe3c89 100644 --- a/apps/picture/models.py +++ b/apps/picture/models.py @@ -150,7 +150,7 @@ class Picture(models.Model): xml_file = File(open(xml_file)) close_xml_file = True - try: + with transaction.atomic(): # use librarian to parse meta-data if image_store is None: image_store = ImageStore(picture_storage.path('images')) @@ -170,6 +170,9 @@ class Picture(models.Model): area_data = {'themes':{}, 'things':{}} + # Treat all names in picture XML as in default language. + lang = settings.LANGUAGE_CODE + for part in picture_xml.partiter(): if picture_xml.frame: c = picture_xml.frame[0] @@ -177,15 +180,16 @@ class Picture(models.Model): if part.get('object', None) is not None: _tags = set() for objname in part['object'].split(','): - objname = objname.strip() + objname = objname.strip().capitalize() tag, created = catalogue.models.Tag.objects.get_or_create(slug=slughifi(objname), category='thing') if created: tag.name = objname + setattr(tag, 'name_%s' % lang, tag.name) tag.sort_key = sortify(tag.name) tag.save() #thing_tags.add(tag) area_data['things'][tag.slug] = { - 'object': part['object'], + 'object': objname, 'coords': part['coords'], } @@ -228,7 +232,7 @@ class Picture(models.Model): picture.width, picture.height = modified.size modified_file = StringIO() - modified.save(modified_file, format='png', quality=95) + modified.save(modified_file, format='JPEG', quality=95) # FIXME: hardcoded extension - detect from DC format or orginal filename picture.image_file.save(path.basename(picture_xml.image_path), File(modified_file)) @@ -236,25 +240,17 @@ class Picture(models.Model): picture.save() tasks.generate_picture_html(picture.id) - except Exception, ex: - logging.exception("Exception during import, rolling back") - transaction.rollback() - raise ex - - finally: - if close_xml_file: - xml_file.close() - if close_image_file: - image_file.close() - - transaction.commit() + if close_xml_file: + xml_file.close() + if close_image_file: + image_file.close() return picture @classmethod def crop_to_frame(cls, wlpic, image_file): img = Image.open(image_file) - if wlpic.frame is None: + if wlpic.frame is None or wlpic.frame == [[0, 0], [-1, -1]]: return img img = img.crop(itertools.chain(*wlpic.frame)) return img @@ -269,14 +265,14 @@ class Picture(models.Model): (255, 255, 255) ) annotated.paste(img, (0, 0)) - annotation = Image.new(img.mode, (3000, 120), (255, 255, 255)) + annotation = Image.new('RGB', (img.size[0] * 3, 120), (255, 255, 255)) ImageDraw.Draw(annotation).text( (30, 15), wlpic.picture_info.source_name, (0, 0, 0), font=ImageFont.truetype(get_resource("fonts/DejaVuSerif.ttf"), 75) ) - annotated.paste(annotation.resize((1000, 40), Image.ANTIALIAS), (0, img.size[1])) + annotated.paste(annotation.resize((img.size[0], 40), Image.ANTIALIAS), (0, img.size[1])) return annotated @classmethod