Mercurial > public > src > moin > extensions
diff data/plugin/parser/text_x_arnica.py @ 252:cf5f8b929da9
text_x_arnica: refactored multiple subarrays into a dict and tuples
author | Reimar Bauer <rb.proj AT googlemail DOT com> |
---|---|
date | Wed, 10 Sep 2008 10:09:35 +0200 |
parents | 809f2840ae46 |
children | 902a0b543b9b |
line wrap: on
line diff
--- a/data/plugin/parser/text_x_arnica.py Tue Sep 09 11:09:09 2008 +0200 +++ b/data/plugin/parser/text_x_arnica.py Wed Sep 10 10:09:35 2008 +0200 @@ -36,6 +36,7 @@ parser_name = __name__.split('.')[-1] + def arnica_settings(target_page=u'', columns=4, file_regex=u'.', image_for_webnail=False, show_text=True, show_date=True, show_tools=False, @@ -118,13 +119,7 @@ self.inner_table_style = ' style="border-style:none; margin:10px;"' self.td_style = ' align="center" style="padding:0; margin:2px 2px; border-style:none"' - self.web_key = [] # array for webnail keys (medium_resolution_image) - self.high_resolution_image = [] # array for images - self.thumb_key = [] # array for thumbnail keys - self.exif_date = [] # array of exif date description - self.imgtype = [] # array of imagetype of high_resolution_image image - self.description = [] # array of description - self.webnail_image = [] # array of images for forms + self.arnica_image = {} # self.arnica_image[image] = (webnail, thumbnail, imgtype, exif_date, description, order) def get_exif_info(self, file_name, key): """ gets exif info from image file @@ -198,12 +193,11 @@ "this_target": this_target, } - def html_tools(self, idx): + def html_tools(self, image): """ html code of thumbnails view with contol @param idx: index position of corresponding data """ - this_image = self.high_resolution_image[idx] html = """ <form action="%(url)s" method="POST" enctype="multipart/form-data"> <div class="get-image"> @@ -234,18 +228,18 @@ "tablestyle": self.inner_table_style, "style": self.td_style, "thumbnail_width": self.thumbnail_width, - "description": packLine([self.description[idx]] + self.description), - "exif_date": packLine([self.exif_date[idx]] + self.exif_date), - "target": self.webnail_image[idx], - "original_images": packLine([self.high_resolution_image[idx]] + self.high_resolution_image), - "images": packLine([self.webnail_image[idx]] + self.webnail_image), - "original_images": packLine([self.high_resolution_image[idx]] + self.high_resolution_image), - "this_target": self.high_resolution_image[idx], - "html_tools_restricted": self.html_tools_restricted(this_image), + "description": packLine([self.arnica_image[image][4]] + [self.arnica_image[img][3] for img in self.arnica_image.keys()]), + "exif_date": packLine([self.arnica_image[image][3]] + [self.arnica_image[img][3] for img in self.arnica_image.keys()]), + "target": self.arnica_image[image][0], + "original_images": packLine([image] + self.arnica_image.keys()), + "images": packLine([self.arnica_image[image][0]] + [self.arnica_image[img][0] for img in self.arnica_image.keys()]), + "original_images": packLine([image] + self.arnica_image.keys()), + "this_target": image, + "html_tools_restricted": self.html_tools_restricted(image), } return html - def html_show_tools(self, idx): + def html_show_tools(self, image): """ shows toolbox @param idx: index position of corresponding data """ @@ -254,10 +248,10 @@ if self.show_tools: html = '<div class="html-show-tools">%(tools)s</div>' % { "style": self.td_style, - "tools": self.html_tools(idx)} + "tools": self.html_tools(image)} return html - def html_show_date(self, idx): + def html_show_date(self, image): """ shows date @param idx: index position of corresponding data """ @@ -265,10 +259,10 @@ html = '' if self.show_date: html = '<div class="html-show-date">%(this_exif_date)s</div>' % { - "this_exif_date": self.formatter.text(self.exif_date[idx])} + "this_exif_date": self.formatter.text(self.arnica_image[image][3])} return html - def html_show_alias(self, idx): + def html_show_alias(self, image): """ alias text below image @param idx: index position of corresponding data """ @@ -276,17 +270,17 @@ html = '' if self.show_text: html = '<div class="html-show-alias"> %(this_alias)s</div>' % { - "this_alias": self.to_wikitext(self.description[idx])} + "this_alias": self.to_wikitext(self.arnica_image[image][4])} return html - def html_arrange_thumbnails(self, idx): + def html_arrange_thumbnails(self, image): """ defines arrangement of thumbnail, text, date and tools @param idx: index positionn of corresponding data """ title = "" if self.album: - title = '<div class="title">%(n)d images (%(album_title)s)</div>' % {"n": len(self.high_resolution_image), + title = '<div class="title">%(n)d images (%(album_title)s)</div>' % {"n": len(self.arnica_image), "album_title": self.album_title or self.pagename} html = """ <div class="arrange-thumbnails"> @@ -313,16 +307,16 @@ "style": self.inner_table_style, "url": Page(self.request, self.pagename).url(self.request), "pagename": self.pagename, - "description": packLine([self.description[idx]] + self.description), - "exif_date": packLine([self.exif_date[idx]] + self.exif_date), - "target": self.webnail_image[idx], - "original_images": packLine([self.high_resolution_image[idx]] + self.high_resolution_image), - "images": packLine([self.webnail_image[idx]] + self.webnail_image), - "thumbnail": cache.url(self.request, self.thumb_key[idx]), + "description": packLine([self.arnica_image[image][4]] + [self.arnica_image[img][4] for img in self.arnica_image.keys()]), + "exif_date": packLine([self.arnica_image[image][3]] + [self.arnica_image[img][3] for img in self.arnica_image.keys()]), + "target": self.arnica_image[image][0], + "original_images": packLine([image] + self.arnica_image.keys()), + "images": packLine([self.arnica_image[image][0]] + [self.arnica_image[img][0] for img in self.arnica_image.keys()]), + "thumbnail": cache.url(self.request, self.arnica_image[image][1]), "thumbnail_width": self.thumbnail_width, - "html_tools": self.html_show_tools(idx), - "date_html": self.html_show_date(idx), - "alias_html": self.html_show_alias(idx), + "html_tools": self.html_show_tools(image), + "date_html": self.html_show_date(image), + "alias_html": self.html_show_alias(image), } return html @@ -332,30 +326,24 @@ @param files: file names of images @param image_alias: text alias for image file """ - + order = 0 for attfile in files: - if image_alias.get(attfile): - # use alias - self.description.append(image_alias.get(attfile)[0]) - else: - # use filename - self.description.append(attfile) - self.high_resolution_image.append(attfile) - fname, ext = os.path.splitext(attfile) - key = cache.key(self.request, itemname=self.pagename, attachname=attfile) - webnail = 'W_%s_%s' % (self.webnail_width, key) - thumbfile = 'T_%s_%s' % (self.thumbnail_width, key) - if ext in ('.gif', '.png'): - self.imgtype.append('PNG') - else: - self.imgtype.append("JPEG") + if os.path.join(path, attfile): + description = attfile + if image_alias.get(attfile): + # use alias + description = image_alias.get(attfile)[0] + fname, ext = os.path.splitext(attfile) + key = cache.key(self.request, itemname=self.pagename, attachname=attfile) + webnail = 'W_%s_%s' % (self.webnail_width, key) + thumbfile = 'T_%s_%s' % (self.thumbnail_width, key) + imgtype = "jpeg" + if ext in ('.gif', '.png'): + imgtype = 'png' - att_file = os.path.join(path, attfile) - if os.path.exists(att_file): - self.web_key.append(webnail) - self.thumb_key.append(thumbfile) - date = self.get_exif_info(att_file, key) - self.exif_date.append(self.formatter.text(date)) + exif_date = self.formatter.text(self.get_exif_info(os.path.join(path, attfile), key)) + self.arnica_image[attfile] = (webnail, thumbfile, imgtype, exif_date, description, str(order)) + order += 1 def to_wikitext(self, text): """ converts text to wiki name if it is written as WikiName or [[wikiname]] @@ -432,7 +420,7 @@ self.define_thumb_webnails(path, all_files, image_alias) return all_files - def create_thumbnail_and_webnail_image(self, image, webnail, thumbnail, image_type): + def create_thumbnail_and_webnail_image(self): """ creates thumbnails and webnails cache files for given image type @param image: filename of image @param webnail: name of webnail file @@ -446,33 +434,33 @@ return path = AttachFile.getAttachDir(self.request, self.pagename, create=1) - imagef = os.path.join(path, image) + for image in self.arnica_image.keys(): + imagef = os.path.join(path, image) + if os.path.getsize(imagef) == 0: + continue - if os.path.getsize(imagef) == 0: - return - - if self.renew: - cache.remove(self.request, webnail) - cache.remove(self.request, thumbnail) + if self.renew: + cache.remove(self.request, self.arnica_image[image][0]) + cache.remove(self.request, self.arnica_image[image][1]) - if not cache.exists(self.request, webnail) or not cache.exists(self.request, thumbnail): - try: - im_obj = Image.open(imagef) - except IOError: - msg = _("Can not access attachment: %(filename)s. Often the case for this error is an emtpy image attachment.") % {"filename": os.path.basename(imagef)} - self.request.write(self.formatter.text(msg)) - return - else: - # ToDo may be it is better to just copy the image to the new location - # currently PIL does not support exif information - if self.image_for_webnail: - buf = StringIO.StringIO() - im_obj.save(buf, image_type) - buf.flush() - buf.seek(0) - cache.put(self.request, webnail, buf, filename=image) + if not cache.exists(self.request, self.arnica_image[image][0]) or not cache.exists(self.request, self.arnica_image[image][1]): + try: + im_obj = Image.open(imagef) + except IOError: + msg = _("Can not access attachment: %(filename)s. Often the case for this error is an emtpy image attachment.") % {"filename": os.path.basename(imagef)} + self.request.write(self.formatter.text(msg)) + continue + else: + # ToDo may be it is better to just copy the image to the new location + # currently PIL does not support exif information + if self.image_for_webnail: + buf = StringIO.StringIO() + im_obj.save(buf, self.arnica_image[image][2]) + buf.flush() + buf.seek(0) + cache.put(self.request, self.arnica_image[image][0], buf, filename=imagef) # XXX later, a unit conversion method for using other units than 'px' is needed - if not cache.exists(self.request, webnail): + if not cache.exists(self.request, self.arnica_image[image][0]): try: exif = im_obj._getexif() except (AttributeError, KeyError): @@ -499,23 +487,23 @@ pass buf = StringIO.StringIO() - im_obj.save(buf, image_type) + im_obj.save(buf, self.arnica_image[image][2]) buf.flush() buf.seek(0) - cache.put(self.request, webnail, buf, filename=image) + cache.put(self.request, self.arnica_image[image][0], buf, filename=image) buf.close() - if not cache.exists(self.request, thumbnail): + if not cache.exists(self.request, self.arnica_image[image][1]): try: im_obj.thumbnail((int(self.thumbnail_width.strip('px')), int(self.thumbnail_width.strip('px'))), Image.ANTIALIAS) except IOError: # one reason can be that the image file is truncated return buf = StringIO.StringIO() - im_obj.save(buf, image_type) + im_obj.save(buf, self.arnica_image[image][2]) buf.flush() buf.seek(0) - cache.put(self.request, thumbnail, buf, filename=image) + cache.put(self.request, self.arnica_image[image][1], buf, filename=image) buf.close() def render(self, formatter): @@ -546,7 +534,7 @@ self.request.write(self.formatter.text(text)) self.request.write(self.formatter.div(1)) self.request.write(self.formatter.preformatted(1)) - for image in self.high_resolution_image: + for image in self.arnica_image.keys(): text = ' * [[%(image)s|alias]]\n' % { 'image': image, } @@ -555,7 +543,8 @@ self.request.write(self.formatter.div(0)) self.request.write(self.formatter.div(0)) - cols = min([self.columns, len(self.high_resolution_image)]) + self.create_thumbnail_and_webnail_image() + cols = min([self.columns, len(self.arnica_image)]) if self.album: cols = 1 data = TupleDataset() @@ -564,14 +553,25 @@ data.columns.extend([Column('', label=(''))]) col_count = 1 result = [] - for image in self.high_resolution_image: - # ToDo use a longer var - i = self.high_resolution_image.index(image) - self.create_thumbnail_and_webnail_image(image, self.web_key[i], - self.thumb_key[i], self.imgtype[i]) - if not self.album: - self.webnail_image = self.web_key - text = self.html_arrange_thumbnails(i) + + if self.album: + album_image = self.album_image or self.arnica_image.keys()[0] #self.high_resolution_image[0] + if not album_image in self.arnica_image.keys(): + text = self.formatter.text(_("""You can't use as album image: +"%(album_image)s" because it does not exist or it is not listed +in your item list!""") % {"album_image": album_image, }) + else: + #self.create_thumbnail_and_webnail_image(image, self.web_key[i], self.thumb_key[i], self.imgtype[i]) + #self.webnail_image = self.web_key + text = self.html_arrange_thumbnails(album_image) + + result.append(''.join(text)) + else: + image_names = self.arnica_image.keys() + index = [self.arnica_image[img][5] for img in image_names] + selected_images = [image_names[int(idx)] for idx in index] + for image in selected_images: + text = self.html_arrange_thumbnails(image) if col_count <= cols: result.append(''.join(text)) if col_count == cols: @@ -580,24 +580,10 @@ # resets the result list after the row is added result = [] col_count += 1 - if result and not self.album: - # ToDo use a longer var - for i in range(cols - col_count + 1): - result.append('') - if self.album: - album_image = self.album_image or self.high_resolution_image[0] - try: + if result: # ToDo use a longer var - i = self.high_resolution_image.index(album_image) - self.create_thumbnail_and_webnail_image(image, self.web_key[i], self.thumb_key[i], self.imgtype[i]) - self.webnail_image = self.web_key - text = self.html_arrange_thumbnails(i) - except ValueError: - text = self.formatter.text(_("""You can't use as album image: -"%(album_image)s" because it does not exist or it is not listed -in your item list!""") % {"album_image": album_image, }) - - result.append(''.join(text)) + for i in range(cols - col_count + 1): + result.append('') # adds the last row if it is not filled up if result: