iamjackg / md2cf

Convert and upload Markdown documents to Confluence
MIT License
91 stars 49 forks source link

`AttributeError` when adding new tags to an existing page #117

Open nate-woythaler opened 9 months ago

nate-woythaler commented 9 months ago

Hello! I'm experiencing an issue adding tags (and only tags) to an existing Confluence page on Confluence v8.5.3 with md2cf v2.3.0. Here is my simple repro case:

Tagless:

$ cat simple.md
# Lorem Ipsum

Lorem ipsum dolor sit amet
$ md2cf -o "https://${CONFLUENCE_URL}/rest/api" -u nate.woythaler -s "~nate.woythaler" ./simple.md --debug

 ๐Ÿ“„๏ธ Lorem Ipsum    โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” โœ”๏ธ Created

 Total progress โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 100% 0:00:00
 $ diff -y --suppress-common-lines simple_labels.md simple.md
---                                                           <
labels:                                                       <
- Lorem                                                       <
- Ipsum                                                       <
---                                                           <
$ md2cf -o "https://${CONFLUENCE_URL}/rest/api" -u nate.woythaler -s "~nate.woythaler" ./simple_labels.md --debug 2>&1 > debug.log

... and the redacted debug log:

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /home/natewo/Repositories/hack-kf-as-code/.venv/lib/python3.11/site-packages/md2cf/__main__.py:4 โ”‚
โ”‚ 06 in main                                                                                       โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   403 โ”‚   โ”‚   โ”‚   โ”‚   tui.set_item_progress_label(page.original_title, "Upserting")              โ”‚
โ”‚   404 โ”‚   โ”‚   โ”‚   โ”‚   final_page = None                                                          โ”‚
โ”‚   405 โ”‚   โ”‚   โ”‚   โ”‚   if not args.dry_run:                                                       โ”‚
โ”‚ โฑ 406 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   upsert_page_result = upsert_page(                                      โ”‚
โ”‚   407 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   confluence=confluence,                                             โ”‚
โ”‚   408 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   message=args.message,                                              โ”‚
โ”‚   409 โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   page=page,                                                         โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚                                 args = Namespace(host='https://${___CF_URL___}/rest/api',    โ”‚ โ”‚
โ”‚ โ”‚                                        username='nate.woythaler', password=None,             โ”‚ โ”‚
โ”‚ โ”‚                                        token='tokentokentokentokentokentokentokentokentoke', โ”‚ โ”‚
โ”‚ โ”‚                                        insecure=False, space='~nate.woythaler',              โ”‚ โ”‚
โ”‚ โ”‚                                        output='default', parent_title=None, parent_id=None,  โ”‚ โ”‚
โ”‚ โ”‚                                        top_level=False, title=None, content_type='page',     โ”‚ โ”‚
โ”‚ โ”‚                                        message=None, minor_edit=False, page_id=None,         โ”‚ โ”‚
โ”‚ โ”‚                                        prefix=None, strip_top_header=False,                  โ”‚ โ”‚
โ”‚ โ”‚                                        remove_text_newlines=False, replace_all_labels=False, โ”‚ โ”‚
โ”‚ โ”‚                                        preface_markdown=None, preface_file=None,             โ”‚ โ”‚
โ”‚ โ”‚                                        postface_markdown=None, postface_file=None,           โ”‚ โ”‚
โ”‚ โ”‚                                        collapse_single_pages=False, use_gitignore=True,      โ”‚ โ”‚
โ”‚ โ”‚                                        beautify_folders=False, use_pages_file=False,         โ”‚ โ”‚
โ”‚ โ”‚                                        collapse_empty=False, skip_empty=False,               โ”‚ โ”‚
โ”‚ โ”‚                                        enable_relative_links=False,                          โ”‚ โ”‚
โ”‚ โ”‚                                        ignore_relative_link_errors=False, dry_run=False,     โ”‚ โ”‚
โ”‚ โ”‚                                        debug=True, only_changed=False,                       โ”‚ โ”‚
โ”‚ โ”‚                                        file_list=[PosixPath('simple_labels.md')],            โ”‚ โ”‚
โ”‚ โ”‚                                        max_retries=4)                                        โ”‚ โ”‚
โ”‚ โ”‚                     colliding_titles = []                                                    โ”‚ โ”‚
โ”‚ โ”‚                           confluence = <md2cf.api.MinimalConfluence object at                โ”‚ โ”‚
โ”‚ โ”‚                                        0x7f75420936d0>                                       โ”‚ โ”‚
โ”‚ โ”‚                                    e = AttributeError("'Bunch' object has no attribute       โ”‚ โ”‚
โ”‚ โ”‚                                        'metadata'")                                          โ”‚ โ”‚
โ”‚ โ”‚                                error = None                                                  โ”‚ โ”‚
โ”‚ โ”‚                           final_page = None                                                  โ”‚ โ”‚
โ”‚ โ”‚ map_document_path_to_confluence_page = {}                                                    โ”‚ โ”‚
โ”‚ โ”‚                                 page = Page(title='Lorem Ipsum',                             โ”‚ โ”‚
โ”‚ โ”‚                                        file_path=PosixPath('simple_labels.md'),              โ”‚ โ”‚
โ”‚ โ”‚                                        page_id=None, parent_id=None, parent_title=None,      โ”‚ โ”‚
โ”‚ โ”‚                                        space='~nate.woythaler', body='<h1>Lorem              โ”‚ โ”‚
โ”‚ โ”‚                                        Ipsum</h1>\n<p>Lorem ipsum dolo [...]')               โ”‚ โ”‚
โ”‚ โ”‚                    page_title_counts = Counter({'Lorem Ipsum': 1})                           โ”‚ โ”‚
โ”‚ โ”‚                      pages_to_upload = [                                                     โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   Page(title='Lorem Ipsum',                         โ”‚ โ”‚
โ”‚ โ”‚                                        file_path=PosixPath('simple_labels.md'),              โ”‚ โ”‚
โ”‚ โ”‚                                        page_id=None, parent_id=None, parent_title=None,      โ”‚ โ”‚
โ”‚ โ”‚                                        space='~nate.woythaler', body='<h1>Lorem              โ”‚ โ”‚
โ”‚ โ”‚                                        Ipsum</h1>\n<p>Lorem ipsum dolo [...]')               โ”‚ โ”‚
โ”‚ โ”‚                                        ]                                                     โ”‚ โ”‚
โ”‚ โ”‚                      postface_markup = ''                                                    โ”‚ โ”‚
โ”‚ โ”‚                       preface_markup = ''                                                    โ”‚ โ”‚
โ”‚ โ”‚                 something_went_wrong = False                                                 โ”‚ โ”‚
โ”‚ โ”‚                           space_info = {                                                     โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   'id': 510328850,                                  โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   'key': '~nate.woythaler',                         โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   'name': 'Nate Woythaler',                         โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   'homepage': {                                     โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'id': '515736001',                            โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'type': 'page',                               โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'status': 'current',                          โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'title': 'Nate Woythalerโ€™s Home',             โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'extensions': {'position': 'none'},           โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   '_links': {                                   โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'webui':                                  โ”‚ โ”‚
โ”‚ โ”‚                                        '/pages/viewpage.action?pageId=515736001',            โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'edit':                                   โ”‚ โ”‚
โ”‚ โ”‚                                        '/pages/resumedraft.action?draftId=515736001',        โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'tinyui': '/x/wYG9Hg',                    โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'self':                                   โ”‚ โ”‚
โ”‚ โ”‚                                        'https://${___CF_URL___}/rest/api/content/515736001'  โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   },                                            โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   '_expandable': {                              โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'container':                              โ”‚ โ”‚
โ”‚ โ”‚                                        '/rest/api/space/~nate.woythaler',                    โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'metadata': '',                           โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'operations': '',                         โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'children':                               โ”‚ โ”‚
โ”‚ โ”‚                                        '/rest/api/content/515736001/child',                  โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'restrictions':                           โ”‚ โ”‚
โ”‚ โ”‚                                        '/rest/api/content/515736001/restriction/byOperationโ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'history':                                โ”‚ โ”‚
โ”‚ โ”‚                                        '/rest/api/content/515736001/history',                โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'ancestors': '',                          โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'body': '',                               โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'version': '',                            โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   'descendants':                            โ”‚ โ”‚
โ”‚ โ”‚                                        '/rest/api/content/515736001/descendant',             โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   โ”‚   ... +1                                    โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   }                                             โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   },                                                โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   'type': 'personal',                               โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   '_links': {                                       โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'webui':                                      โ”‚ โ”‚
โ”‚ โ”‚                                        '/spaces/viewspace.action?key=~nate.woythaler',       โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'collection': '/rest/api/space',              โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'base': 'https://${___CF_URL___}',            โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'context': '',                                โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'self':                                       โ”‚ โ”‚
โ”‚ โ”‚                                        'https://${___CF_URL___}/rest/api/space/~nate.woythaโ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   },                                                โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   '_expandable': {                                  โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'metadata': '',                               โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'icon': '',                                   โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'description': '',                            โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   โ”‚   'retentionPolicy': ''                         โ”‚ โ”‚
โ”‚ โ”‚                                        โ”‚   }                                                 โ”‚ โ”‚
โ”‚ โ”‚                                        }                                                     โ”‚ โ”‚
โ”‚ โ”‚                                  tui = <md2cf.tui.Md2cfTUI object at 0x7f754273a590>         โ”‚ โ”‚
โ”‚ โ”‚                   upsert_page_result = None                                                  โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /home/natewo/Repositories/hack-kf-as-code/.venv/lib/python3.11/site-packages/md2cf/upsert.py:115 โ”‚
โ”‚ in upsert_page                                                                                   โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   112 โ”‚   โ”‚   if (                                                                               โ”‚
โ”‚   113 โ”‚   โ”‚   โ”‚   not replace_all_labels                                                         โ”‚
โ”‚   114 โ”‚   โ”‚   โ”‚   and page.labels                                                                โ”‚
โ”‚ โฑ 115 โ”‚   โ”‚   โ”‚   and labels_need_updating(page, existing_page)                                  โ”‚
โ”‚   116 โ”‚   โ”‚   ):                                                                                 โ”‚
โ”‚   117 โ”‚   โ”‚   โ”‚   # print(f"Adding labels to page: {page.title} {page.labels}")                  โ”‚
โ”‚   118 โ”‚   โ”‚   โ”‚   confluence.add_labels(page=existing_page, labels=page.labels)                  โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚             action = <UpsertAction.UPDATED: 2>                                               โ”‚ โ”‚
โ”‚ โ”‚         confluence = <md2cf.api.MinimalConfluence object at 0x7f75420936d0>                  โ”‚ โ”‚
โ”‚ โ”‚      existing_page = {                                                                       โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'id': '523021960',                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'type': 'page',                                                     โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'status': 'current',                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'title': 'Lorem Ipsum',                                             โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'space': {                                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'id': 510328850,                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'key': '~nate.woythaler',                                       โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'name': 'Nate Woythaler',                                       โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'type': 'personal',                                             โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_links': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'webui': '/spaces/viewspace.action?key=~nate.woythaler',    โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'self':                                                     โ”‚ โ”‚
โ”‚ โ”‚                      'https://${___CF_URL___}/rest/api/space/~nate.woythaler'                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   },                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_expandable': {                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'metadata': '',                                             โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'icon': '',                                                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'description': '',                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'retentionPolicy': '',                                      โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'homepage': '/rest/api/content/515736001'                   โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   }                                                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   },                                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'history': {                                                        โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'latest': True,                                                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'createdBy': {                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'type': 'known',                                            โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'username': 'nate.woythaler',                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'userKey': 'ff8080818151cd750185ba10895d025e',              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'profilePicture': {                                         โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'path': '/download/attachments/462202994/user-avatar',  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'width': 48,                                            โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'height': 48,                                           โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'isDefault': False                                      โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   },                                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'displayName': 'Nate Woythaler',                            โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   '_links': {                                                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'self':                                                 โ”‚ โ”‚
โ”‚ โ”‚                      'https://${___CF_URL___}/rest/api/user?key=ff8080818151cd750185ba10895โ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   },                                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   '_expandable': {'status': ''}                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   },                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'createdDate': '2023-11-13T16:32:16.531+01:00',                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_links': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'self':                                                     โ”‚ โ”‚
โ”‚ โ”‚                      'https://${___CF_URL___}/rest/api/content/523021960/history'            โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   },                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_expandable': {                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'lastUpdated': '',                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'previousVersion': '',                                      โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'contributors': '',                                         โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'nextVersion': ''                                           โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   }                                                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   },                                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'version': {                                                        โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'by': {                                                         โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'type': 'known',                                            โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'username': 'nate.woythaler',                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'userKey': 'ff8080818151cd750185ba10895d025e',              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'profilePicture': {                                         โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'path': '/download/attachments/462202994/user-avatar',  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'width': 48,                                            โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'height': 48,                                           โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'isDefault': False                                      โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   },                                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'displayName': 'Nate Woythaler',                            โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   '_links': {                                                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   โ”‚   'self':                                                 โ”‚ โ”‚
โ”‚ โ”‚                      'https://${___CF_URL___}/rest/api/user?key=ff8080818151cd750185ba10895โ€ฆ โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   },                                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   '_expandable': {'status': ''}                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   },                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'when': '2023-11-13T16:32:16.531+01:00',                        โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'message': '',                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'number': 1,                                                    โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'minorEdit': False,                                             โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'hidden': False,                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_links': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'self':                                                     โ”‚ โ”‚
โ”‚ โ”‚                      'https://${___CF_URL___}/rest/experimental/content/523021960/version/1' โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   },                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_expandable': {'content': '/rest/api/content/523021960'}       โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   },                                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'ancestors': [],                                                    โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'container': {                                                      โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'id': 510328850,                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'key': '~nate.woythaler',                                       โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'name': 'Nate Woythaler',                                       โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'type': 'personal',                                             โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_links': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'webui': '/spaces/viewspace.action?key=~nate.woythaler',    โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'self':                                                     โ”‚ โ”‚
โ”‚ โ”‚                      'https://${___CF_URL___}/rest/api/space/~nate.woythaler'                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   },                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_expandable': {                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'metadata': '',                                             โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'icon': '',                                                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'description': '',                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'retentionPolicy': '',                                      โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'homepage': '/rest/api/content/515736001'                   โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   }                                                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   },                                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   'body': {                                                           โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   'storage': {                                                    โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'value': '<h1>Lorem Ipsum</h1>\n<p>Lorem ipsum dolor sit    โ”‚ โ”‚
โ”‚ โ”‚                      amet</p>',                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'representation': 'storage',                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   '_expandable': {'content': '/rest/api/content/523021960'}   โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   },                                                              โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   '_expandable': {                                                โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'editor': '',                                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'view': '',                                                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'export_view': '',                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'styled_view': '',                                          โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   โ”‚   'anonymous_export_view': ''                                 โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   โ”‚   }                                                               โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   },                                                                  โ”‚ โ”‚
โ”‚ โ”‚                      โ”‚   ... +3                                                              โ”‚ โ”‚
โ”‚ โ”‚                      }                                                                       โ”‚ โ”‚
โ”‚ โ”‚            message = None                                                                    โ”‚ โ”‚
โ”‚ โ”‚         minor_edit = False                                                                   โ”‚ โ”‚
โ”‚ โ”‚       only_changed = False                                                                   โ”‚ โ”‚
โ”‚ โ”‚               page = Page(title='Lorem Ipsum', file_path=PosixPath('simple_labels.md'),      โ”‚ โ”‚
โ”‚ โ”‚                      page_id=None, parent_id=None, parent_title=None,                        โ”‚ โ”‚
โ”‚ โ”‚                      space='~nate.woythaler', body='<h1>Lorem Ipsum</h1>\n<p>Lorem ipsum     โ”‚ โ”‚
โ”‚ โ”‚                      dolo [...]')                                                            โ”‚ โ”‚
โ”‚ โ”‚       page_message = None                                                                    โ”‚ โ”‚
โ”‚ โ”‚ replace_all_labels = False                                                                   โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ /home/natewo/Repositories/hack-kf-as-code/.venv/lib/python3.11/site-packages/md2cf/upsert.py:128 โ”‚
โ”‚ in labels_need_updating                                                                          โ”‚
โ”‚                                                                                                  โ”‚
โ”‚   125 โ”‚   โ”‚   return False                                                                       โ”‚
โ”‚   126 โ”‚                                                                                          โ”‚
โ”‚   127 โ”‚   if sorted(                                                                             โ”‚
โ”‚ โฑ 128 โ”‚   โ”‚   [label.name for label in existing_page.metadata.labels.results]                    โ”‚
โ”‚   129 โ”‚   ) != sorted(page.labels):                                                              โ”‚
โ”‚   130 โ”‚   โ”‚   return True                                                                        โ”‚
โ”‚   131                                                                                            โ”‚
โ”‚                                                                                                  โ”‚
โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚
โ”‚ โ”‚ existing_page = {                                                                            โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'id': '523021960',                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'type': 'page',                                                          โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'status': 'current',                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'title': 'Lorem Ipsum',                                                  โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'space': {                                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'id': 510328850,                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'key': '~nate.woythaler',                                            โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'name': 'Nate Woythaler',                                            โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'type': 'personal',                                                  โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_links': {                                                          โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'webui': '/spaces/viewspace.action?key=~nate.woythaler',         โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'self': 'https://${___CF_URL___}/rest/api/space/~nate.woythaler' โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   },                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_expandable': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'metadata': '',                                                  โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'icon': '',                                                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'description': '',                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'retentionPolicy': '',                                           โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'homepage': '/rest/api/content/515736001'                        โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   }                                                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   },                                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'history': {                                                             โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'latest': True,                                                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'createdBy': {                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'type': 'known',                                                 โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'username': 'nate.woythaler',                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'userKey': 'ff8080818151cd750185ba10895d025e',                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'profilePicture': {                                              โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'path': '/download/attachments/462202994/user-avatar',       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'width': 48,                                                 โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'height': 48,                                                โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'isDefault': False                                           โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   },                                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'displayName': 'Nate Woythaler',                                 โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   '_links': {                                                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'self':                                                      โ”‚ โ”‚
โ”‚ โ”‚                 'https://${___CF_URL___}/rest/api/user?key=ff8080818151cd750185ba10895d025e' โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   },                                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   '_expandable': {'status': ''}                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   },                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'createdDate': '2023-11-13T16:32:16.531+01:00',                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_links': {                                                          โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'self':                                                          โ”‚ โ”‚
โ”‚ โ”‚                 'https://${___CF_URL___}/rest/api/content/523021960/history'                 โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   },                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_expandable': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'lastUpdated': '',                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'previousVersion': '',                                           โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'contributors': '',                                              โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'nextVersion': ''                                                โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   }                                                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   },                                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'version': {                                                             โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'by': {                                                              โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'type': 'known',                                                 โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'username': 'nate.woythaler',                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'userKey': 'ff8080818151cd750185ba10895d025e',                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'profilePicture': {                                              โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'path': '/download/attachments/462202994/user-avatar',       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'width': 48,                                                 โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'height': 48,                                                โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'isDefault': False                                           โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   },                                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'displayName': 'Nate Woythaler',                                 โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   '_links': {                                                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   โ”‚   'self':                                                      โ”‚ โ”‚
โ”‚ โ”‚                 'https://${___CF_URL___}/rest/api/user?key=ff8080818151cd750185ba10895d025e' โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   },                                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   '_expandable': {'status': ''}                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   },                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'when': '2023-11-13T16:32:16.531+01:00',                             โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'message': '',                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'number': 1,                                                         โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'minorEdit': False,                                                  โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'hidden': False,                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_links': {                                                          โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'self':                                                          โ”‚ โ”‚
โ”‚ โ”‚                 'https://${___CF_URL___}/rest/experimental/content/523021960/version/1'      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   },                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_expandable': {'content': '/rest/api/content/523021960'}            โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   },                                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'ancestors': [],                                                         โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'container': {                                                           โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'id': 510328850,                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'key': '~nate.woythaler',                                            โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'name': 'Nate Woythaler',                                            โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'type': 'personal',                                                  โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_links': {                                                          โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'webui': '/spaces/viewspace.action?key=~nate.woythaler',         โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'self': 'https://${___CF_URL___}/rest/api/space/~nate.woythaler' โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   },                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_expandable': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'metadata': '',                                                  โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'icon': '',                                                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'description': '',                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'retentionPolicy': '',                                           โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'homepage': '/rest/api/content/515736001'                        โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   }                                                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   },                                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   'body': {                                                                โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   'storage': {                                                         โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'value': '<h1>Lorem Ipsum</h1>\n<p>Lorem ipsum dolor sit         โ”‚ โ”‚
โ”‚ โ”‚                 amet</p>',                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'representation': 'storage',                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   '_expandable': {'content': '/rest/api/content/523021960'}        โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   },                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   '_expandable': {                                                     โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'editor': '',                                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'view': '',                                                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'export_view': '',                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'styled_view': '',                                               โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   โ”‚   'anonymous_export_view': ''                                      โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   โ”‚   }                                                                    โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   },                                                                       โ”‚ โ”‚
โ”‚ โ”‚                 โ”‚   ... +3                                                                   โ”‚ โ”‚
โ”‚ โ”‚                 }                                                                            โ”‚ โ”‚
โ”‚ โ”‚          page = Page(title='Lorem Ipsum', file_path=PosixPath('simple_labels.md'),           โ”‚ โ”‚
โ”‚ โ”‚                 page_id=None, parent_id=None, parent_title=None, space='~nate.woythaler',    โ”‚ โ”‚
โ”‚ โ”‚                 body='<h1>Lorem Ipsum</h1>\n<p>Lorem ipsum dolo [...]')                      โ”‚ โ”‚
โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
AttributeError: 'Bunch' object has no attribute 'metadata'

 ๐Ÿ“„๏ธ Lorem Ipsum    โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”  โŒ Error while uploading 

 Total progress โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 100% 0:00:00                 

... and the pip freeze output:

certifi==2023.7.22
chardet==5.1.0
charset-normalizer==3.3.2
commonmark==0.9.1
gitignorefile==1.1.2
idna==3.4
md2cf==2.3.0
mistune==0.8.4
Pygments==2.16.1
PyYAML==6.0.1
requests==2.31.0
rich==13.0.1
rich_argparse==1.0.0
urllib3==2.1.0
marci4 commented 6 months ago

Any change we can get this fix applied? Running into the same error: ERROR: 'Bunch' object has no attribute 'message'