def _get_album_by_invitation(self, u_url): """ returns: Save() instance, or None is case of any error. """ # sanity check of the given url if u_url.get_query('uname') is None or u_url.get_query('uname') == '': return None if u_url.get_query('id') is None or u_url.get_query('id') == '': return None if u_url.get_query('target') != 'ALBUM': return None # convert the email url to picasa feed url authkey = u_url.get_query('authkey') n_url = PhotosOfAlbum(u_url.get_query('uname'), u_url.get_query('id')) if authkey is not None: n_url.set_query(authkey=authkey) n_url.set_query(max_results='0') # retrieve the album feed to get album parameters client = picasaclient.PicasaClient() client.set_proxy(self.get_network_settings()) try: feed = client.get_feed(uri=n_url.get_url()) if not isinstance(feed, picasaclient.AlbumFeed): return None except picasaclient.RequestError: return None # create node from feed parameters instead of entry album = Album(attrs=dict([['user', feed.user], ['nick', feed.nickname], ['thumbnail', feed.icon], ['title', feed.title], ['gid', feed.gphoto_id], ['numphotos', feed.numphotos], ['authkey', authkey]])) return Save(album)