def addKeyword( uuid ): key = request.GET.get('key', None) if ( key==None ): msg = 'addKeyword: "key" argument required but missing' log.error("/ws/addKeyword: " + msg) return { "uuid": uuid, "error": 1, "msg" : msg } key = helper.strfilter(key, "'/\. ") log.debug('addKeyword request for: %s with key: %s' % (uuid,`key`) ) try: media = mediafactory.MediaFactory() media.loadFromFile(uuid) if media.customtags.has_key("keywords"): keys = media.customtags["keywords"] log.debug("Previous keywords " + `keys`) keys = keys + "," + key # `set' removes duplicate keywords keys = ','.join(set(keys.split(','))) else: keys = key media.update( { 'keywords' : keys }, group="Custom" ) db.insert_key(key) db.connect_key(media.uuid, key) except ExifException as e: msg = str(e) log.debug("Exception: " + msg ) return { "uuid":uuid, "error":1, "msg": msg } except Exception as e: return {"error":1 , "msg": str(e)} return { "uuid":uuid, "error":0, "msg": "Keyword saved!" }
def addKeyword(uuid): key = request.GET.get('key', None) if (key == None): msg = 'addKeyword: "key" argument required but missing' log.error("/ws/addKeyword: " + msg) return {"uuid": uuid, "error": 1, "msg": msg} key = helper.strfilter(key, "'/\. ") log.debug('addKeyword request for: %s with key: %s' % (uuid, ` key `)) try: media = mediafactory.MediaFactory() media.loadFromFile(uuid) if media.customtags.has_key("keywords"): keys = media.customtags["keywords"] log.debug("Previous keywords " + ` keys `) keys = keys + "," + key # `set' removes duplicate keywords keys = ','.join(set(keys.split(','))) else: keys = key media.update({'keywords': keys}, group="Custom") db.insert_key(key) db.connect_key(media.uuid, key) except ExifException as e: msg = str(e) log.debug("Exception: " + msg) return {"uuid": uuid, "error": 1, "msg": msg} except Exception as e: return {"error": 1, "msg": str(e)} return {"uuid": uuid, "error": 0, "msg": "Keyword saved!"}
def update( self, new_md, group="ALL" ): """ Updated an existing media object + media metadata on the file using externally provided json metadata, Before updating you must load the old media file to update e.g.: old = mediafactory.loadFromFile( '4214131214f2' ) old.update( newmetadata ) Before updating a check is beformed for writability of media file. If file is not writable then only custom tags are used (i.e. tags stored in a separate file and exported as a sidecar XMP) """ self.mtime = time.strftime('%d%m%y-%H:%M:%S') if ( not self.is_writable()): log.debug('WARNING: Requested write to group ' + group + \ ' but filetype is not writable. Switching to group "Custom"') group = "Custom" if group=="Custom": #custom tags are saved separately in sessions.js self.customtags.update(new_md) #delete empty tags from the whole after applying the diff (this is also done by exiftool backend) for k in self.customtags.keys(): if self.customtags[k] == "": del (self.customtags[k]) log.debug("deleted: " + k) # save keywords in database if self.customtags.has_key("keywords"): log.debug("saving keywords: " + self.customtags["keywords"] ) for key in self.customtags["keywords"].split(','): db.insert_key(key) db.connect_key(self.uuid, key) self.saveconf() #update mtime and customtags else: #save mediamd self._savedata(new_md) #if customtags has coordinates then update db if ( new_md.has_key("GPSLatitude") and new_md.has_key('GPSLongitude') ): # anonymise function sets these to '' so ignore! if (new_md['GPSLongitude']=="" or new_md["GPSLatitude"]==""): return # invariant: uuid MUST EXIST in sessions table log.debug("geocoding in DB! Newmd is: " + logtool.pp(new_md)) res = db.geotag_uuid(self.uuid, new_md['GPSLongitude'],new_md["GPSLatitude"]) log.debug(`res`) self.saveconf() #update mtime only