def loadURL(): response = {} url = request.GET.get("url", None) l = request.GET.get("license", None) #client_ip ip = request.environ.get('REMOTE_ADDR') if (url == None or l == None): msg = 'Both URL and license parameters are required' log.error("/loadURL: " + msg) return {"error": 1, "msg": msg} try: log.info("loadURL params: url:%s ip:%s" % (url, ip)) media = mediafactory.MediaFactory() media.loadFromURL(ip, url) except ExifException: response["error"] = 1 response[ "msg"] = "Could not find any usable media file under %s." % url return response except Exception as e: return {"error": 1, "msg": str(e)} log.debug(logtool.pp(media.mediamd)) media.saveconf() media.setlicense(l) response = {"uuid": media.uuid, "error": 0, "msg": "Success!"} return response
def loadURL(): response = {} url = request.GET.get("url", None) l = request.GET.get("license", None) #client_ip ip = request.environ.get('REMOTE_ADDR') if ( url==None or l==None ): msg = 'Both URL and license parameters are required' log.error("/loadURL: " + msg) return { "error": 1, "msg" : msg } try: log.info("loadURL params: url:%s ip:%s" % (url,ip) ) media = mediafactory.MediaFactory() media.loadFromURL( ip, url) except ExifException: response["error"] = 1 response["msg"] = "Could not find any usable media file under %s." % url return response except Exception as e: return {"error":1 , "msg": str(e)} log.debug( logtool.pp(media.mediamd) ) media.saveconf() media.setlicense(l) response = { "uuid": media.uuid, "error": 0, "msg":"Success!" } return response
def login(self,provider,userid=None): log.debug("URL: " + self.request.url) # Get optional "async", "oath_token" parameters otherwise assume None async = self.request.GET.get("async",None) # oauth_token is only for "callback" i.e. when the request is coming from dropbox oauth_token = self.request.GET.get("oauth_token",None) callback = self.request.GET.get("callback",False) callback = self.request.url if async=="true" else callback log.debug("provider: %s, async: %s, oauth_token: %s, userid: %s, callback: %s" % \ (provider,async,oauth_token, userid, `callback`) ) log.debug("host: %s, port: %s" % \ ( self.request.environ.get("SERVER_NAME", "NONE") , self.request.environ.get("SERVER_PORT") ) ) self.response.headers['Access-Control-Allow-Origin'] = '*' if ( provider == "local" ): # Local provider has no login yet. It just generates uuids if (not userid): userid = uuid.uuid4().hex provider = fs_provider.FsProvider(userid) res = provider.login() log.debug("fs_provider login response: ") log.debug( logtool.pp(res)) elif ( provider == "dropbox"): dbox = dbox_provider.DropboxProvider() if (userid): # Resume session or Poll if (async): #Poll! log.debug("got polling request for :" + userid) return dbox.probe(userid) else: #just resume: log.debug("resuming session " + userid) return dbox.login(req_key=userid) if (oauth_token): # it's a callback from dropbox and not from user. Try to revive session try: msg = dbox.callback(oauth_token) log.debug("Callback WORKED!: " + msg) return "Logged in! Feel free to close your browser." except DBException as e: return {"error":1 , "msg": str(e)} res = dbox.login(req_key=None, callback=callback) log.debug("dropbox_login response: ") log.debug( logtool.pp(res)) else: res = { "error": 1 , "msg": "Wrong or unsupported arguments" } return res
def editGeograph(id): """ imports geograph image as if it were uploaded. Creates a new copy of the image and the original image is left untouched """ response = {} #client_ip ip = request.environ.get('REMOTE_ADDR') #geograph image rootdir = db.getGeographDir(id) imagename = str(id).zfill(6) imagefile = os.path.join(rootdir, imagename + ".jpg") log.debug("Downloading %s" % imagefile) try: media = mediafactory.MediaFactory() media.loadFromWeb(ip, imagename + ".jpg", open(imagefile)) # update coords in exif from geograph database (lon, lat, tags) = db.geograph_byid(id) log.debug("geograph metadata for " + id) log.debug(logtool.pp((lon, lat, tags))) #create sessions.js media.saveconf() updatedata = { "GPSLatitude": ` lat `, "GPSLongitude": ` lon `, "GPSLatitudeRef": "S" if lat < 0 else "N", "GPSLongitudeRef": "W" if lon < 0 else "E" } media.update(updatedata) if tags != None: media.update({'Tags': tags}, group="Custom") except ExifException as e: msg = e.shortmsg response["error"] = 1 log.debug("ExifException: " + msg) response = {"uuid": media.uuid, "error": 1, "msg": msg} return response except IOError: response["error"] = 1 response["msg"] = "Could not find geograph file %s." % imagename return response log.debug(logtool.pp(media.mediamd)) if media.mediamd != []: media.saveconf() response = {"uuid": media.uuid, "error": 0, "msg": "Success!"} else: response["error"] = 1 response[ "msg"] = "Could not find any supported format inside %s." % media.filename return response
def login(self, provider, userid=None): log.debug("URL: " + self.request.url) # Get optional "async", "oath_token" parameters otherwise assume None async = self.request.GET.get("async", None) # oauth_token is only for "callback" i.e. when the request is coming from dropbox oauth_token = self.request.GET.get("oauth_token", None) callback = self.request.GET.get("callback", False) callback = self.request.url if async == "true" else callback log.debug("provider: %s, async: %s, oauth_token: %s, userid: %s, callback: %s" % \ (provider,async,oauth_token, userid, `callback`) ) log.debug("host: %s, port: %s" % \ ( self.request.environ.get("SERVER_NAME", "NONE") , self.request.environ.get("SERVER_PORT") ) ) self.response.headers['Access-Control-Allow-Origin'] = '*' if (provider == "local"): # Local provider has no login yet. It just generates uuids if (not userid): userid = uuid.uuid4().hex provider = fs_provider.FsProvider(userid) res = provider.login() log.debug("fs_provider login response: ") log.debug(logtool.pp(res)) elif (provider == "dropbox"): dbox = dbox_provider.DropboxProvider() if (userid): # Resume session or Poll if (async): #Poll! log.debug("got polling request for :" + userid) return dbox.probe(userid) else: #just resume: log.debug("resuming session " + userid) return dbox.login(req_key=userid) if (oauth_token): # it's a callback from dropbox and not from user. Try to revive session try: msg = dbox.callback(oauth_token) log.debug("Callback WORKED!: " + msg) return "Logged in! Feel free to close your browser." except DBException as e: return {"error": 1, "msg": str(e)} res = dbox.login(req_key=None, callback=callback) log.debug("dropbox_login response: ") log.debug(logtool.pp(res)) else: res = {"error": 1, "msg": "Wrong or unsupported arguments"} return res
def editGeograph(id): """ imports geograph image as if it were uploaded. Creates a new copy of the image and the original image is left untouched """ response = {} #client_ip ip = request.environ.get('REMOTE_ADDR') #geograph image rootdir = db.getGeographDir(id) imagename = str(id).zfill(6) imagefile = os.path.join(rootdir, imagename + ".jpg" ) log.debug("Downloading %s" % imagefile ) try: media = mediafactory.MediaFactory() media.loadFromWeb( ip, imagename + ".jpg", open(imagefile) ) # update coords in exif from geograph database (lon,lat,tags) = db.geograph_byid(id) log.debug("geograph metadata for " + id ) log.debug( logtool.pp( (lon,lat,tags) ) ) #create sessions.js media.saveconf() updatedata = { "GPSLatitude" : `lat`, "GPSLongitude" : `lon`, "GPSLatitudeRef" : "S" if lat<0 else "N", "GPSLongitudeRef" : "W" if lon<0 else "E" } media.update(updatedata) if tags != None: media.update( { 'Tags' : tags }, group="Custom" ) except ExifException as e: msg = e.shortmsg response["error"] = 1 log.debug("ExifException: " + msg ) response = { "uuid":media.uuid, "error":1, "msg": msg } return response except IOError: response["error"] = 1 response["msg"] = "Could not find geograph file %s." % imagename return response log.debug( logtool.pp(media.mediamd)) if media.mediamd != []: media.saveconf() response = { "uuid": media.uuid, "error": 0, "msg":"Success!" } else: response["error"] = 1 response["msg"] = "Could not find any supported format inside %s." % media.filename return response
def getNearest(): lon = float(request.GET.get("lon")) lat = float(request.GET.get("lat")) log.debug('Got AJAX NEAREST request for: %f , %f' % (lon,lat)) res = db.nearest_dist( lon, lat, 2500.0 ) # build response tree: log.debug( logtool.pp(res)) return json.dumps(res)
def getNearest(): lon = float(request.GET.get("lon")) lat = float(request.GET.get("lat")) log.debug('Got AJAX NEAREST request for: %f , %f' % (lon, lat)) res = db.nearest_dist(lon, lat, 2500.0) # build response tree: log.debug(logtool.pp(res)) return json.dumps(res)
def dropbox_login(): # Get optional req_key and callback URL parameters otherwise assume None req_key = request.GET.get("req_key",None) callback = request.GET.get("callback", None) log.debug("dropbox_login:"******" params callback: " + `callback` + " req_key :" + `req_key`); dbox = gtr_dropbox.GTRDropbox() response = dbox.login(req_key, callback) log.debug("dropbox_login response: ") log.debug( logtool.pp(response)) return response
def dropbox_login(): # Get optional req_key and callback URL parameters otherwise assume None req_key = request.GET.get("req_key", None) callback = request.GET.get("callback", None) log.debug("dropbox_login:"******" params callback: " + ` callback ` + " req_key :" + ` req_key `) dbox = gtr_dropbox.GTRDropbox() response = dbox.login(req_key, callback) log.debug("dropbox_login response: ") log.debug(logtool.pp(response)) return response
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
def saveMetadata( uuid ): log.debug('saveMetadata request for: ' + uuid) media = mediafactory.MediaFactory() media.loadFromFile(uuid) group = request.forms.get('group') new_md_json = request.forms.get('metadata') new_md = json.loads(new_md_json) try: media.update( new_md, group ) except ExifException as e: msg = e.shortmsg log.debug("ExifException: " + msg ) return { "uuid":uuid, "error":1, "msg": msg } log.debug("got new " + `group` + " metadata: ") log.debug( logtool.pp(new_md)) return { "uuid":uuid, "error":0, "msg": "Metadata saved!" }
def saveMetadata(uuid): log.debug('saveMetadata request for: ' + uuid) media = mediafactory.MediaFactory() media.loadFromFile(uuid) group = request.forms.get('group') new_md_json = request.forms.get('metadata') new_md = json.loads(new_md_json) try: media.update(new_md, group) except ExifException as e: msg = e.shortmsg log.debug("ExifException: " + msg) return {"uuid": uuid, "error": 1, "msg": msg} log.debug("got new " + ` group ` + " metadata: ") log.debug(logtool.pp(new_md)) return {"uuid": uuid, "error": 0, "msg": "Metadata saved!"}
el.append (inject) #log.debug("DUMP") #log.debug(ETree.tostring(el)) etr.write(xmpfile,encoding="utf-8") else: shutil.copy(tmpfile, xmpfile) return True if __name__ == "__main__": ip = '127.0.0.1' uploadData = open ( configuration.getTest1() ) mf = MediaFactory() mf.loadFromWeb(ip, "MyMedia.jpg" , uploadData) mf.saveconf() print "First Media Instance session:\n" log.debug( logtool.pp(mf.datasetname) ) #### now close and reopen ## uuid = mf.uuid del(mf) mf2 = MediaFactory() mf2.loadFromFile(uuid) print "================================" print "Second Media Instance session:" print mf2.datasetname print "================================" print "Second Media Metadata:" log.debug( logtool.pp(mf2.mediamd)) print "old BaseISO value: " + `mf2.mediamd["BaseISO"]` updatedict = { 'BaseISO' : 666 } log.debug( logtool.pp('using update vector: ' + `updatedict`)) #save inside media file