def hacky_py2_unpickle_recover(fileobj): """Can raise anything""" # We just recover the uri and let it refresh the feed later def lookup_func(func, mod, name): class Feed(list): pass class Bar(dict): pass if name == "Feed": return Feed else: return Bar with open(FEEDS, "rb") as fileobj: feeds = pickle_load(fileobj, lookup_func) uris = [] for item in feeds: d = item.__dict__ if b"uri" in d: v = d[b"uri"] elif "uri" in d: v = d["uri"] else: continue if isinstance(v, bytes): v = v.decode("utf-8") uris.append(v) return [Feed(u) for u in uris]
def _load_queue(self): try: with open(self.SCROBBLER_CACHE_FILE, 'rb') as disk_queue_file: disk_queue = pickle_load(disk_queue_file) os.unlink(self.SCROBBLER_CACHE_FILE) self.queue += disk_queue except (EnvironmentError, PickleError): pass
def init(klass, library): uris = set() try: with open(FEEDS, "rb") as fileobj: feeds = pickle_load(fileobj) except (PickleError, EnvironmentError): pass else: for feed in feeds: if feed.uri in uris: continue klass.__feeds.append(row=[feed]) uris.add(feed.uri) GLib.idle_add(klass.__do_check)
def __init__(self): self.nowplaying_song = None self.nowplaying_sent = False self.sessionid = None self.broken = False self.username, self.password, self.base_url = ('', '', '') # These need to be set early for _format_song to work self.titlepat = Pattern(config_get_title_pattern()) self.artpat = Pattern(config_get_artist_pattern()) try: with open(self.DUMP, 'rb') as disk_queue_file: disk_queue = pickle_load(disk_queue_file) os.unlink(self.DUMP) self.queue += disk_queue except (EnvironmentError, PickleError): pass
def init(klass, library): uris = set() feeds = [] try: with open(FEEDS, "rb") as fileobj: feeds = pickle_load(fileobj) except (PickleError, EnvironmentError): try: with open(FEEDS, "rb") as fileobj: feeds = hacky_py2_unpickle_recover(fileobj) except Exception: pass for feed in feeds: if feed.uri in uris: continue klass.__feeds.append(row=[feed]) uris.add(feed.uri) GLib.idle_add(klass.__do_check)
def __init__(self): print("logging") self.nowplaying_track = None self.nowplaying_sent = False self.broken = False self.offline = False self.retries = 0 self.lb = listenbrainz.ListenBrainzClient() # XXX logger=xxx # These need to be set early for _format_song to work self.titlepat = Pattern(config_get_title_pattern()) self.artpat = Pattern(config_get_artist_pattern()) self.tags = config_get_tags() try: with open(self.DUMP, 'rb') as disk_queue_file: disk_queue = pickle_load(disk_queue_file) os.unlink(self.DUMP) self.queue += disk_queue except (EnvironmentError, PickleError): pass
def test_invalid(self): with self.assertRaises(UnpicklingError): pickle_loads(b"") with self.assertRaises(UnpicklingError): pickle_load(BytesIO(b""))
def test_pickle_load(self): data = {b"foo": u"bar", u"quux": b"baz"} for protocol in [0, 1, 2]: assert pickle_loads(pickle_dumps(data)) == data assert pickle_load(BytesIO(pickle_dumps(data))) == data
def test_invalid(self): with self.assertRaises(UnpicklingError): pickle_loads(b"") with self.assertRaises(UnpicklingError): pickle_load(cBytesIO(b""))
def test_pickle_load(self): data = {b"foo": u"bar", u"quux": b"baz"} for protocol in [0, 1, 2]: assert pickle_loads(pickle_dumps(data)) == data assert pickle_load(cBytesIO(pickle_dumps(data))) == data
def load_queue(self) -> List[Dict]: try: with open(self.SCROBBLER_CACHE_FILE, 'rb') as f: return pickle_load(f) except FileNotFoundError: return []