Example #1
0
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!" }
Example #2
0
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!"}
Example #3
0
 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