From 2b758e17a7aa09ee318babf0677636070f333da9 Mon Sep 17 00:00:00 2001 From: "Rob G. Healey" Date: Sun, 12 Jun 2011 02:12:07 +0000 Subject: [PATCH] Bug#4984 fix button conversion and pylint cleanup. svn: r17748 --- src/plugins/gramplet/EditExifMetadata.py | 368 ++++++++++++----------- 1 file changed, 199 insertions(+), 169 deletions(-) diff --git a/src/plugins/gramplet/EditExifMetadata.py b/src/plugins/gramplet/EditExifMetadata.py index ea264e78e..5775956fe 100644 --- a/src/plugins/gramplet/EditExifMetadata.py +++ b/src/plugins/gramplet/EditExifMetadata.py @@ -22,9 +22,9 @@ # $Id$ -# ***************************************************************************** +# ************************************************************************ # Python Modules -# ***************************************************************************** +# ************************************************************************ import os from datetime import datetime, date import calendar, time @@ -41,17 +41,17 @@ from fractions import Fraction import subprocess -# ----------------------------------------------------------------------------- +# ------------------------------------------------------------------------ # GTK modules -# ----------------------------------------------------------------------------- +# ------------------------------------------------------------------------ import gtk -# ----------------------------------------------------------------------------- +# ------------------------------------------------------------------------ # GRAMPS modules -# ----------------------------------------------------------------------------- -# ----------------------------------------------------------------------------- +# ------------------------------------------------------------------------ +# ------------------------------------------------------------------------ # GRAMPS modules -# ----------------------------------------------------------------------------- +# ------------------------------------------------------------------------ import GrampsDisplay from gen.plug import Gramplet @@ -78,7 +78,7 @@ Min_VERSION = (0, 1, 3) Min_VERSION_str = "pyexiv2-%d.%d.%d" % Min_VERSION Pref_VERSION_str = "pyexiv2-%d.%d.%d" % (0, 3, 0) -# to be able for people that have pyexiv2-0.1.3 to be able to use this addon also... +# to be able for people that have pyexiv2-0.1.3... LesserVersion = False try: @@ -86,21 +86,24 @@ try: software_version = pyexiv2.version_info except ImportError, msg: - WarningDialog(_("You need to install, %s or greater, for this addon to work...\n" - "I would recommend installing, %s, and it may be downloaded from here: \n%s") % ( - Min_VERSION_str, Pref_VERSION_str, _DOWNLOAD_LINK), str(msg)) + WarningDialog(_("You need to install, %s or greater, for this addon " + "to work. \n I would recommend installing, %s, and it may be " + "downloaded from here: \n%s") % ( Min_VERSION_str, Pref_VERSION_str, + _DOWNLOAD_LINK), str(msg)) raise Exception(_("Failed to load 'Edit Image Exif Metadata'...")) -# This only happends if the user has pyexiv2-0.1.3 installed on their computer... +# This only happends if the user has pyexiv2-0.1.3 installed except AttributeError: LesserVersion = True -# the library is either not installed or does not meet minimum required version for this addon.... +# the library is either not installed or does not meet +# minimum required version for this addon.... if (software_version and (software_version < Min_VERSION)): msg = _("The minimum required version for pyexiv2 must be %s \n" - "or greater. Or you do not have the python library installed yet. " - "You may download it from here: %s\n\n I recommend getting, %s") % ( - Min_VERSION_str, _DOWNLOAD_LINK, Pref_VERSION_str) + "or greater. Or you do not have the python library " + "installed yet. You may download it from here: %s\n\n " + "I recommend getting, %s") % (Min_VERSION_str, + _DOWNLOAD_LINK, Pref_VERSION_str) WarningDialog(msg) raise Exception(msg) @@ -113,32 +116,44 @@ if (software_version and (software_version < Min_VERSION)): #******************************************************************** # Windows 32bit systems system_platform = os.sys.platform +MAGICK_FOUND_ = False +JHEAD_FOUND_ = False if system_platform == "win32": - _MAGICK_FOUND = "convert.exe" if Utils.search_for("convert.exe") else False - _JHEAD_FOUND = "jhead.exe" if Utils.search_for("jhead.exe") else False + if Utils.search_for("convert.exe"): + MAGICK_FOUND_ = "convert.exe" + + if Utils.search_for("jhead.exe"): + _JHEAD_FOUND_ = "jhead.exe" elif system_platform == "linux2": - _MAGICK_FOUND = "convert" if Utils.search_for("convert") else False - _JHEAD_FOUND = "jhead" if Utils.search_for("jhead") else False + if Utils.search_for("convert"): + MAGICK_FOUND_ = "convert" + + if Utils.search_for("jhead"): + JHEAD_FOUND_ = "jhead" else: - _MAGICK_FOUND = "convert" if Utils.search_for("convert") else False - _JHEAD_FOUND = "jhead" if Utils.search_for("jhead") else False + if Utils.search_for("convert"): + MAGICK_FOUND_ = "convert" -# if external programs are not found, let the user know about the missing functionality? -if not _MAGICK_FOUND: - print(_("ImageMagick's convert program was not found on this computer.\n" - "You may download it from here: %s...") % ( - "http://www.imagemagick.org/script/index.php")) + if Utils.search_for("jhead"): + JHEAD_FOUND_ = "jhead" -if not _JHEAD_FOUND: +# if external programs are not found, let the user know about +# the missing functionality? +if not MAGICK_FOUND_: + print(_("ImageMagick's convert program was not found " + "on this computer.\n You may download it from " + "here: %s...") % ("http://www.imagemagick.org/script/index.php")) + +if not JHEAD_FOUND_: print(_("Jhead program was not found on this computer.\n" "You may download it from: %s...") % ( "http://www.sentex.net/~mwandel/jhead/")) -# ----------------------------------------------------------------------------- +# ------------------------------------------------------------------------ # Constants -# ----------------------------------------------------------------------------- +# ------------------------------------------------------------------------ # available image types for exiv2 and pyexiv2 # ["jpeg", "jpg", "exv", "tiff", "dng", "nef", "pef", "pgf", "png", "psd", "jp2"] @@ -149,24 +164,25 @@ _TOOLTIPS = { "Description" : _("Provide a short descripion for this image."), # Artist - "Artist" : _("Enter the Artist/ Author of this image. The person's name or " - "the company who is responsible for the creation of this image."), + "Artist" : _("Enter the Artist/ Author of this image. The " + "person's name or the company who is responsible for the creation " + "of this image."), # Copyright "Copyright" : _("Enter the copyright information for this image. \n" "Example: (C) 2010 Smith and Wesson"), # Calendar date select... - "Date:Select" : _("Allows you to select a date from a pop-up window calendar. \n" - "Warning: You will still need to edit the time..."), + "Date:Select" : _("Allows you to select a date from a pop-up window " + "calendar. \n Warning: You will still need to edit the time..."), # Original Date/ Time... "DateTime" : _("Original Date/ Time of this image.\n" "Example: 1826-Apr-12 14:30:00, 1826-April-12, 1998-01-31 13:30:00"), # Convert to decimal button... - "GPSFormat:Decimal" : _("Converts Degree, Minutes, Seconds GPS coordinates to a " - "Decimal representation."), + "GPSFormat:Decimal" : _("Converts Degree, Minutes, Seconds GPS " + "coordinates to a Decimal representation."), # convert to degrees, minutes, seconds button... "GPSFormat:DMS" : _("Converts Decimal GPS coordinates " @@ -197,29 +213,30 @@ _DATAMAP.update( (val, key) for key, val in _DATAMAP.items() ) # Toolt tips for the buttons in the gramplet... _BUTTONTIPS = { - # CopyTo button... - "CopyTo" : _("Copies information from the Display area to the Edit area."), + # copyto button... + "CopyTo" : _("Copies information from the Display area to the Edit area."), # Clear Edit Area button... - "Clear" : _("Clears the Exif metadata from the Edit area."), + "Clear" : _("Clears the Exif metadata from the Edit area."), # Wiki Help button... - "Help" : _("Displays the Gramps Wiki Help page for 'Edit Image Exif Metadata' " - "in your web browser."), + "Help" : _("Displays the Gramps Wiki Help page for 'Edit Image " + "Exif Metadata' in your web browser."), # Save Exif Metadata button... - "Save" : _("Saves/ writes the Exif metadata to this image.\n" + "Save" : _("Saves/ writes the Exif metadata to this image.\n" "WARNING: Exif metadata will be erased if you save a blank entry field...") } -# if ImageMagick is installed on this computer then, add button tooltips for these two buttons... -if _MAGICK_FOUND: +# if ImageMagick is installed on this computer then, add button +# tooltips for these two buttons... +if MAGICK_FOUND_: _BUTTONTIPS.update( { # Convert to .Jpeg button... - "Convert" : _("If your image is not a jpeg image, convert it to jpeg?"), + "Convert" : _("If your image is not a jpeg image, convert it to jpeg?"), # Delete/ Erase/ Wipe Exif metadata button... - "Delete" : _("WARNING: This will completely erase all Exif metadata " + "Delete" : _("WARNING: This will completely erase all Exif metadata " "from this image! Are you sure that you want to do this?") } ) # ------------------------------------------------------------------------ @@ -282,24 +299,25 @@ class EditExifMetadata(Gramplet): # Value Column view.append_column( self.__create_column(_("Value"), 2) ) - # CopyTo, Clear, Convert horizontal box + # copyto, Clear, Convert horizontal box ccc_box = gtk.HButtonBox() ccc_box.set_layout(gtk.BUTTONBOX_START) vbox.pack_start(ccc_box, expand =False, fill =False, padding =10) # Copy To Edit Area button... ccc_box.add( self.__create_button( - "CopyTo", False, [self.CopyTo], gtk.STOCK_COPY, False) ) + "CopyTo", False, [self.copyto], gtk.STOCK_COPY, False) ) # Clear button... ccc_box.add( self.__create_button( "Clear", False, [self.clear_metadata], gtk.STOCK_CLEAR, False) ) # is ImageMagick installed? - if _MAGICK_FOUND: + if MAGICK_FOUND_: # Convert button... ccc_box.add( self.__create_button( - "Convert", False, [self.__convert_dialog], gtk.STOCK_CONVERT, False) ) + "Convert", False, [self.__convert_dialog], + gtk.STOCK_CONVERT, False) ) for items in [ @@ -347,10 +365,10 @@ class EditExifMetadata(Gramplet): # Save button... hsd_box.add( self.__create_button( - "Save", False, [self.save_metadata, self.update, self.CopyTo, self.display_exif_tags], - gtk.STOCK_SAVE, False) ) + "Save", False, [self.save_metadata, self.update, self.display_exif_tags, self.CopyTo], + gtk.STOCK_SAVE, False)) - if _MAGICK_FOUND: + if MAGICK_FOUND_: # Delete All Metadata button... hsd_box.add(self.__create_button( "Delete", False, [self.__delete_dialog], gtk.STOCK_DELETE, False)) @@ -433,11 +451,12 @@ class EditExifMetadata(Gramplet): # De-activate the buttons except for Help... self.deactivate_buttons(["CopyTo", "Clear", "Save"]) - if _MAGICK_FOUND: + if MAGICK_FOUND_: self.deactivate_buttons(["Convert", "Delete"]) # Re-post initial image message... - self.exif_widgets["Message:Area"].set_text(_("Select an image to begin...")) + self.exif_widgets["Message:Area"].set_text(_("Select an " + "image to begin...")) active_handle = self.get_active("Media") if not active_handle: @@ -447,8 +466,8 @@ class EditExifMetadata(Gramplet): self.orig_image = db.get_object_from_handle(active_handle) self.image_path = Utils.media_path_full(db, self.orig_image.get_path() ) if (not self.orig_image or not os.path.isfile(self.image_path)): - self.exif_widgets["Message:Area"].set_text(_("Image is either missing or deleted,\n" - "Choose a different image...")) + self.exif_widgets["Message:Area"].set_text(_("Image is either " + "missing or deleted,\n Choose a different image...")) return # check image read privileges... @@ -481,9 +500,9 @@ class EditExifMetadata(Gramplet): # will create the image and read it... self.setup_image(self.image_path, True) - # Checks to make sure that ImageMagick is installed on this computer and - # the image is NOT a jpeg image... - if _MAGICK_FOUND: + # Checks to make sure that ImageMagick is installed on + # this computer and the image is NOT a jpeg image... + if MAGICK_FOUND_: basename, extension = os.path.splitext(self.image_path) if extension not in [".jpeg", ".jpg", ".jfif"]: self.activate_buttons(["Convert"]) @@ -492,11 +511,13 @@ class EditExifMetadata(Gramplet): self.display_exif_tags() else: - self.exif_widgets["Message:Area"].set_text(_("Choose a different image...")) + self.exif_widgets["Message:Area"].set_text(_("Choose a " + "different image...")) return else: - self.exif_widgets["Message:Area"].set_text(_("Choose a different image...")) + self.exif_widgets["Message:Area"].set_text(_("Choose a " + "different image...")) return def __create_column(self, name, colnum, fixed =True): @@ -540,24 +561,24 @@ class EditExifMetadata(Gramplet): return button - def __convert_dialog(self, obj): + def __convert_dialog(self, object): """ Handles the Convert question Dialog... """ # is ImageMagick installled? - if _MAGICK_FOUND: - QuestionDialog(_("Edit Image Exif Metadata"), _("Convert this image to a .jpeg image?"), - _("Convert"), self.convert2Jpeg) + if MAGICK_FOUND_: + QuestionDialog(_("Edit Image Exif Metadata"), _("Convert this " + "image to a .jpeg image?"), _("Convert"), self.convert2Jpeg) - def __delete_dialog(self, obj): + def __delete_dialog(self, object): """ Handles the Delete Dialog... """ - QuestionDialog(_("Edit Image Exif Metadata"), _("WARNING! You are about to completely " - "delete the Exif metadata from this image?"), _("Delete"), - self.strip_metadata) + QuestionDialog(_("Edit Image Exif Metadata"), _("WARNING! You are " + "about to completely delete the Exif metadata from this image?"), + _("Delete"), self.strip_metadata) def setup_image(self, full_path, createimage =False): """ @@ -589,8 +610,8 @@ class EditExifMetadata(Gramplet): self.set_has_data(False) return - def make_row(self, pos, text, choices=None, readonly=False, callback_list =[], - mark_dirty=False, default=0): + def make_row(self, pos, text, choices=None, readonly=False, + callback_list =[], mark_dirty=False, default=0): # Edit Image Exif Metadata row = gtk.HBox() @@ -654,7 +675,7 @@ class EditExifMetadata(Gramplet): # ----------------------------------------------- # Error Checking functions # ----------------------------------------------- - def _mark_dirty(self, obj): + def _mark_dirty(self, object): pass def _get_value(self, keytag): @@ -697,11 +718,12 @@ class EditExifMetadata(Gramplet): # check to see if we got metadata from the media object? if mediadatatags_: - # activate CopyTo button... + # activate copyto button... self.activate_buttons(["CopyTo"]) # set Message Area to Display... - self.exif_widgets["Message:Area"].set_text(_("Displaying image Exif metadata...")) + self.exif_widgets["Message:Area"].set_text(_("Displaying image " + "Exif metadata...")) for keytag in mediadatatags_: @@ -725,7 +747,7 @@ class EditExifMetadata(Gramplet): if human_value is not False: self.model.append((self.plugin_image, label, human_value)) - def CopyTo(self, imagekeytags_ =None): + def copyto(self, imagekeytags_ =None): """ reads the image metadata after the pyexiv2.Image has been created """ @@ -734,18 +756,19 @@ class EditExifMetadata(Gramplet): if imagekeytags_: imagekeytags_ = [keytag for keytag in imagekeytags_ if keytag in _DATAMAP] - self.exif_widgets["Message:Area"].set_text(_("Copying Exif metadata to the Edit Area...")) + self.exif_widgets["Message:Area"].set_text(_("Copying Exif " + "metadata to the Edit Area...")) for keytag in imagekeytags_: # name for matching to exif_widgets widgetsName = _DATAMAP[keytag] - tagValue = self._get_value(keytag) - if tagValue: + tagvalue_ = self._get_value(keytag) + if tagvalue_: if widgetsName in ["Description", "Artist", "Copyright"]: - self.exif_widgets[widgetsName].set_text(tagValue) + self.exif_widgets[widgetsName].set_text(tagvalue_) # Original Date of the image... elif widgetsName == "DateTime": @@ -763,7 +786,8 @@ class EditExifMetadata(Gramplet): # if latitude and longitude exist, display them? if (latitude and longitude): - # split latitude metadata into (degrees, minutes, and seconds) from Rational + # split latitude metadata into (degrees, minutes, + # and seconds) from Rational latdeg, latmin, latsec = rational_to_dms(latitude) # split longitude metadata into degrees, minutes, and seconds @@ -782,16 +806,16 @@ class EditExifMetadata(Gramplet): # set display for Latitude GPS coordinates self.exif_widgets["Latitude"].set_text( - """%s° %s′ %s″ %s""" % (latdeg, latmin, latsec, latituderef) ) + """%s° %s′ %s″ %s""" % (latdeg, latmin, latsec, latituderef)) # set display for Longitude GPS coordinates self.exif_widgets["Longitude"].set_text( - """%s° %s′ %s″ %s""" % (longdeg, longmin, longsec, longituderef) ) + """%s° %s′ %s″ %s""" % (longdeg, longmin, longsec, longituderef)) # enable Save button after metadata has been "Copied to Edit Area"... self.activate_buttons(["Save"]) - if _MAGICK_FOUND: + if MAGICK_FOUND_: self.activate_buttons(["Delete"]) # Clear the Message Area... @@ -825,7 +849,7 @@ class EditExifMetadata(Gramplet): """ # if ImageMagick's convert is installed... - if _MAGICK_FOUND: + if MAGICK_FOUND_: filepath, basename = os.path.split(self.image_path) basename, oldext = os.path.splitext(self.image_path) @@ -856,7 +880,8 @@ class EditExifMetadata(Gramplet): except KeyError: # tag has not been set... self.plugin_image[keytag] = pyexiv2.ExifTag(keytag, KeyValue) - except (ValueError, AttributeError): # there is an issue with either keytag or KeyValue + except (ValueError, AttributeError): # there is an issue with + # either keytag or KeyValue pass def write_metadata(self, imageinstance): @@ -872,62 +897,53 @@ class EditExifMetadata(Gramplet): else: imageinstance.write() -# ------------------------------------------------------------------- -# GPS coordinates functions -# ------------------------------------------------------------------- def addsymbols2gps(self, latitude =False, longitude =False): """ - converts a degrees, minutes, seconds representation of Latitude/ Longitude + converts a degrees, minutes, seconds representation of + Latitude/ Longitude without their symbols to having them... - - @param: latitude -- Latitude GPS coordinates - @param: longitude -- Longitude GPS coordinates """ + + if not latitude and not longitude: + return [False]*2 + latituderef, longituderef = "N", "E" - # check to see if Latitude/ Longitude exits? - if (latitude and longitude): + if (latitude.count(".") == 1 and longitude.count(".") == 1): + latitude, longitude = self.convert2dms(latitude, longitude) - if (latitude.count(".") == 1 and longitude.count(".") == 1): - self.convert2dms(self.plugin_image) + # add DMS symbols if necessary? + # the conversion to decimal format, require the DMS symbols + elif ( (latitude.count("°") == 0 and longitude.count("°") == 0) and + (latitude.count("′") == 0 and longitude.count("′") == 0) and + (latitude.count('″') == 0 and longitude.count('″') == 0) ): - # get Latitude/ Longitude from data fields - # after the conversion - latitude = self.exif_widgets["Latitude"].get_text() - longitude = self.exif_widgets["Longitude"].get_text() + # is there a direction element here? + if (latitude.count("N") == 1 or latitude.count("S") == 1): + latdeg, latmin, latsec, latituderef = latitude.split(" ", 3) + else: + atitudeRef = "N" + latdeg, latmin, latsec = latitude.split(" ", 2) + if latdeg[0] == "-": + latdeg = latdeg.replace("-", "") + latituderef = "S" - # add DMS symbols if necessary? - # the conversion to decimal format, require the DMS symbols - elif ( (latitude.count("°") == 0 and longitude.count("°") == 0) and - (latitude.count("′") == 0 and longitude.count("′") == 0) and - (latitude.count('″') == 0 and longitude.count('″') == 0) ): + # is there a direction element here? + if (longitude.count("E") == 1 or longitude.count("W") == 1): + longdeg, longmin, longsec, longituderef = longitude.split(" ", 3) + else: + longituderef = "E" + longdeg, longmin, longsec = longitude.split(" ", 2) + if longdeg[0] == "-": + longdeg = longdeg.replace("-", "") + longituderef = "W" - # is there a direction element here? - if (latitude.count("N") == 1 or latitude.count("S") == 1): - latdeg, latmin, latsec, latituderef = latitude.split(" ", 3) - else: - atitudeRef = "N" - latdeg, latmin, latsec = latitude.split(" ", 2) - if latdeg[0] == "-": - latdeg = latdeg.replace("-", "") - latituderef = "S" - - # is there a direction element here? - if (longitude.count("E") == 1 or longitude.count("W") == 1): - longdeg, longmin, longsec, longituderef = longitude.split(" ", 3) - else: - ongitudeRef = "E" - longdeg, longmin, longsec = longitude.split(" ", 2) - if longdeg[0] == "-": - longdeg = longdeg.replace("-", "") - longituderef = "W" - - latitude = """%s° %s′ %s″ %s""" % (latdeg, latmin, latsec, latituderef) - longitude = """%s° %s′ %s″ %s""" % (longdeg, longmin, longsec, longituderef) + latitude = """%s° %s′ %s″ %s""" % (latdeg, latmin, latsec, latituderef) + longitude = """%s° %s′ %s″ %s""" % (longdeg, longmin, longsec, longituderef) return latitude, longitude - def convert2decimal(self, obj): + def convert2decimal(self, object): """ will convert a decimal GPS coordinates into decimal format. @@ -935,30 +951,30 @@ class EditExifMetadata(Gramplet): @param: longitude -- GPS Longitude coordinates from data field... """ - # get Latitude/ Longitude from the data fields latitude = self.exif_widgets["Latitude"].get_text() longitude = self.exif_widgets["Longitude"].get_text() - # if latitude and longitude exist? - if (latitude and longitude): + if not latitude and not longitude: + return - # is Latitude/ Longitude are in DMS format? - if (latitude.count(" ") >= 2 and longitude.count(" ") >= 2): + # is Latitude/ Longitude are in DMS format? + if (latitude.count(" ") >= 2 and longitude.count(" ") >= 2): - # add DMS symbols if necessary? - # the conversion to decimal format, require the DMS symbols - if ( (latitude.count("°") == 0 and longitude.count("°") == 0) and - (latitude.count("′") == 0 and longitude.count("′") == 0) and - (latitude.count('″') == 0 and longitude.count('″') == 0) ): + # add DMS symbols if necessary? + # the conversion to decimal format, require the DMS symbols + if ( (latitude.count("°") == 0 and longitude.count("°") == 0) and + (latitude.count("′") == 0 and longitude.count("′") == 0) and + (latitude.count('″') == 0 and longitude.count('″') == 0) ): - latitude, longitude = self.addsymbols2gps(latitude, longitude) + latitude, longitude = self.addsymbols2gps(latitude, longitude) - # convert degrees, minutes, seconds w/ symbols to an 8 point decimal - latitude, longitude = conv_lat_lon( unicode(latitude), - unicode(longitude), "D.D8") + # convert degrees, minutes, seconds w/ symbols to an 8 point decimal + latitude, longitude = conv_lat_lon( unicode(latitude), + unicode(longitude), "D.D8") - self.exif_widgets["Latitude"].set_text(latitude) - self.exif_widgets["Longitude"].set_text(longitude) + self.exif_widgets["Latitude"].set_text(latitude) + self.exif_widgets["Longitude"].set_text(longitude) + return latitude, longitude def convert2dms(self, latitude =False, longitude =False): """ @@ -966,13 +982,16 @@ class EditExifMetadata(Gramplet): for display only """ + latitude = self.exif_widgets["Latitude"].get_text() + longitude = self.exif_widgets["Longitude"].get_text() + if not latitude and not longitude: - return latitude, longitude + return [False]*2 latituderef, longituderef = "N", "E" # if coordinates are in decimal format? - if (latitude[0:6].find(".") == longitude[0:6].find(".") == 1): + if ((latitude.find(".") <= 6) and (longitude.find(".") <= 6)): # convert latitude and longitude to a DMS with separator of ":" latitude, longitude = conv_lat_lon(latitude, longitude, "DEG-:") @@ -996,7 +1015,7 @@ class EditExifMetadata(Gramplet): self.exif_widgets["Longitude"].set_text(longitude) return latitude, longitude - def save_metadata(self, datatags =None): + def save_metadata(self, datatags =False): """ gets the information from the plugin data fields and sets the keytag = keyvalue image metadata @@ -1011,19 +1030,23 @@ class EditExifMetadata(Gramplet): self.exif_widgets["Longitude"].get_text() ) # Description data field - self._set_exif_keytag(_DATAMAP["Description"], self.exif_widgets["Description"].get_text() ) + description = self.exif_widgets["Description"].get_text() + self._set_exif_keytag(_DATAMAP["Description"], description) # Modify Date/ Time... not a data field, but saved anyway... self._set_exif_keytag(_DATAMAP["Modified"], datetime.now() ) # display modified Date/ Time - self.exif_widgets["Modified"].set_text(_format_datetime(datetime.now() ) ) + self.exif_widgets["Modified"].set_text( + _format_datetime(datetime.now() ) ) # Artist/ Author data field - self._set_exif_keytag(_DATAMAP["Artist"], self.exif_widgets["Artist"].get_text() ) + artist = self.exif_widgets["Artist"].get_text() + self._set_exif_keytag(_DATAMAP["Artist"], artist) # Copyright data field - self._set_exif_keytag(_DATAMAP["Copyright"], self.exif_widgets["Copyright"].get_text() ) + copyright = self.exif_widgets["Copyright"].get_text() + self._set_exif_keytag(_DATAMAP["Copyright"], copyright) # Original Date/ Time data field datetime_ = self.exif_widgets["DateTime"].get_text() @@ -1038,17 +1061,19 @@ class EditExifMetadata(Gramplet): if datatags: # set Message Area to Saved... - self.exif_widgets["Message:Area"].set_text(_("Saving Exif metadata to the image...")) + self.exif_widgets["Message:Area"].set_text(_("Saving Exif " + "metadata to the image...")) + else: # set Message Area to Cleared... - self.exif_widgets["Message:Area"].set_text(_("Image Exif metadata has been cleared " - "from this image...")) + self.exif_widgets["Message:Area"].set_text(_("Image Exif " + "metadata has been cleared from this image...")) - # writes all Exif Metadata to image even if the fields are all empty... + # writes all Exif Metadata to image even if the fields are all empty. self.write_metadata(self.plugin_image) # Activate Delete button... - if _MAGICK_FOUND: + if MAGICK_FOUND_: self.activate_buttons(["Delete"]) def __process_lat_long(self, latitude, longitude): @@ -1057,7 +1082,7 @@ class EditExifMetadata(Gramplet): """ if not latitude and not longitude: - return [False]*2 + return False, False # complete some error checking to prevent crashes... # if "?" character exist, remove it? @@ -1130,8 +1155,9 @@ class EditExifMetadata(Gramplet): Will completely and irrevocably erase all Exif metadata from this image. """ - if _MAGICK_FOUND: - erase = subprocess.check_call( ["convert", self.image_path, "-strip", self.image_path] ) + if MAGICK_FOUND_: + erase = subprocess.check_call( ["convert", self.image_path, + "-strip", self.image_path] ) erase_results = str(erase) else: @@ -1159,17 +1185,17 @@ class EditExifMetadata(Gramplet): self.update() # re- initialize the image... - if _JHEAD_FOUND: + if JHEAD_FOUND_: reinit = subprocess.check_call( ["jhead", "-purejpg", self.image_path] ) reinitialize = str(reinit) if reinitialize: - self.exif_widgets["Message:Area"].set_text(_("Image has be re- initialized " - "for Exif metadata...")) + self.exif_widgets["Message:Area"].set_text(_("Image has " + "be re- initialized for Exif metadata...")) # ----------------------------------------------- # Date Calendar functions # ----------------------------------------------- - def select_date(self, obj): + def select_date(self, object): """ will allow you to choose a date from the calendar widget """ @@ -1187,7 +1213,7 @@ class EditExifMetadata(Gramplet): self.exif_widgets["Calendar"].show() self.app.show() - def double_click(self, obj): + def double_click(self, object): """ receives double-clicked and returns the selected date widget @@ -1379,7 +1405,9 @@ def _create_datetime(date_elements): seconds = 0 # get the number of days in year for all months - numdays = [0] + [calendar.monthrange(year, month)[1] for year in [pyear] for month in range(1, 13) ] + numdays = [0] + [calendar.monthrange(year, month)[1] for year in [pyear] + for month in range(1, 13) ] + if day > numdays[pmonth]: day = numdays[pmonth] elif day <= 0: @@ -1387,8 +1415,10 @@ def _create_datetime(date_elements): if pyear < 1900: try: - tmpdate = "%04d-%s-%02d %02d:%02d:%02d" % (pyear, _dd.long_months[pmonth], day, - hour, minutes, seconds) + tmpdate = "%04d-%s-%02d %02d:%02d:%02d" % ( + pyear, _dd.long_months[pmonth], day, + hour, minutes, seconds) + except ValueError: tmpdate = False