{"id": 615474990, "node_id": "MDU6SXNzdWU2MTU0NzQ5OTA=", "number": 21, "title": "bpylist.archiver.CircularReference: archive has a cycle with uid(13)", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 11, "created_at": "2020-05-10T20:58:06Z", "updated_at": "2020-12-19T07:44:49Z", "closed_at": "2020-05-10T21:57:13Z", "author_association": "MEMBER", "pull_request": null, "body": "```\r\n% python -i $(which photos-to-sqlite) apple-photos photos.db \r\nTraceback (most recent call last):\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/osxphotos/photoinfo.py\", line 611, in place\r\n return self._place # pylint: disable=access-member-before-definition\r\nAttributeError: 'PhotoInfo' object has no attribute '_place'\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nTraceback (most recent call last):\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/bin/photos-to-sqlite\", line 11, in \r\n load_entry_point('photos-to-sqlite', 'console_scripts', 'photos-to-sqlite')()\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/click/core.py\", line 829, in __call__\r\n return self.main(*args, **kwargs)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/click/core.py\", line 782, in main\r\n rv = self.invoke(ctx)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/click/core.py\", line 1259, in invoke\r\n return _process_result(sub_ctx.command.invoke(sub_ctx))\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/click/core.py\", line 1066, in invoke\r\n return ctx.invoke(self.callback, **ctx.params)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/click/core.py\", line 610, in invoke\r\n return callback(*args, **kwargs)\r\n File \"/Users/simon/Dropbox/Development/photos-to-sqlite/photos_to_sqlite/cli.py\", line 249, in apple_photos\r\n photo_row = osxphoto_to_row(sha256, photo)\r\n File \"/Users/simon/Dropbox/Development/photos-to-sqlite/photos_to_sqlite/utils.py\", line 91, in osxphoto_to_row\r\n place = photo.place\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/osxphotos/photoinfo.py\", line 614, in place\r\n self._place = PlaceInfo5(self._info[\"reverse_geolocation\"])\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/osxphotos/placeinfo.py\", line 505, in __init__\r\n self._plrevgeoloc = archiver.unarchive(revgeoloc_bplist)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 16, in unarchive\r\n return Unarchive(plist).top_object()\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 256, in top_object\r\n return self.decode_object(self.top_uid)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 247, in decode_object\r\n obj = klass.decode_archive(ArchivedObject(raw_obj, self))\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/osxphotos/placeinfo.py\", line 126, in decode_archive\r\n mapItem = archive.decode(\"mapItem\")\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 140, in decode\r\n return self._unarchiver.decode_key(self._object, key)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 216, in decode_key\r\n return self.decode_object(val)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 247, in decode_object\r\n obj = klass.decode_archive(ArchivedObject(raw_obj, self))\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/osxphotos/placeinfo.py\", line 180, in decode_archive\r\n sortedPlaceInfos = archive.decode(\"sortedPlaceInfos\")\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 140, in decode\r\n return self._unarchiver.decode_key(self._object, key)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 216, in decode_key\r\n return self.decode_object(val)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 247, in decode_object\r\n obj = klass.decode_archive(ArchivedObject(raw_obj, self))\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 112, in decode_archive\r\n return [archive._decode_index(index) for index in uids]\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 112, in \r\n return [archive._decode_index(index) for index in uids]\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 137, in _decode_index\r\n return self._unarchiver.decode_object(index)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 247, in decode_object\r\n obj = klass.decode_archive(ArchivedObject(raw_obj, self))\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/osxphotos/placeinfo.py\", line 217, in decode_archive\r\n placeType = archive.decode(\"placeType\")\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 140, in decode\r\n return self._unarchiver.decode_key(self._object, key)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 216, in decode_key\r\n return self.decode_object(val)\r\n File \"/Users/simon/.local/share/virtualenvs/photos-to-sqlite-0uGSHd6e/lib/python3.8/site-packages/bpylist/archiver.py\", line 227, in decode_object\r\n raise CircularReference(index)\r\nbpylist.archiver.CircularReference: archive has a cycle with uid(13)\r\n```\r\nIn the debugger I traced this back to:\r\n```\r\n178 \t @staticmethod\r\n179 \t def decode_archive(archive):\r\n180 ->\t sortedPlaceInfos = archive.decode(\"sortedPlaceInfos\")\r\n181 \t finalPlaceInfos = archive.decode(\"finalPlaceInfos\")\r\n182 \t return PLRevGeoMapItem(sortedPlaceInfos, finalPlaceInfos)\r\n```", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/dogsheep/dogsheep-photos/issues/21/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}