mkdocs2confluence 0.7.19__tar.gz → 0.7.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/PKG-INFO +1 -1
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/pyproject.toml +1 -1
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/PKG-INFO +1 -1
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/cli.py +1 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/publisher/client.py +19 -5
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/publisher/pipeline.py +17 -2
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/LICENSE +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/README.md +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/setup.cfg +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/SOURCES.txt +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/dependency_links.txt +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/entry_points.txt +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/requires.txt +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/top_level.txt +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/emitter/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/emitter/xhtml.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/ir/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/ir/document.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/ir/nodes.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/ir/treeutil.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/config.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/extra_css.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/nav.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/page.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/parser/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/parser/markdown.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/pdf/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/pdf/generator.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/pdf/render.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/abbrevs.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/fence.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/frontmatter.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/icons.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/includes.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/linkdefs.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preview/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preview/render.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preview/server.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/publisher/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/__init__.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/abbrevs.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/assets.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/editlink.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/images.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/internallinks.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/mermaid.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_abbrevs.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_cli.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_editlink.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_emitter.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_extra_css.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_frontmatter.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_icons.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_images.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_internallinks.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_ir.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_linkdefs.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_loader.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_mermaid.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_page_loader.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_parser.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_pdf.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_preprocess.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_preview.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_publish_client.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_publish_config.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_publish_pipeline.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_server.py +0 -0
- {mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/tests/test_treeutil.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mkdocs2confluence"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.22"
|
|
4
4
|
description = "Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "GPL-3.0-or-later" }
|
|
@@ -492,6 +492,7 @@ def _cmd_publish(args: argparse.Namespace) -> None:
|
|
|
492
492
|
partial = bool(getattr(args, "page", None) or getattr(args, "section", None))
|
|
493
493
|
report = execute_publish(
|
|
494
494
|
plan, client, dry_run=False, space_id=space_id,
|
|
495
|
+
space_key=conf_config.space_key,
|
|
495
496
|
docs_dir=config.docs_dir, full_width=conf_config.full_width,
|
|
496
497
|
root_page_id=conf_config.parent_page_id,
|
|
497
498
|
prune=getattr(args, "prune", False) and not partial,
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/publisher/client.py
RENAMED
|
@@ -33,6 +33,7 @@ class ConfluenceClient:
|
|
|
33
33
|
def __init__(self, config: ConfluenceConfig) -> None:
|
|
34
34
|
self._config = config
|
|
35
35
|
self._client: httpx.Client | None = None
|
|
36
|
+
self._space_states: dict[str, list[dict[str, Any]]] = {} # space_key → list of ContentState
|
|
36
37
|
|
|
37
38
|
# ── Context manager ────────────────────────────────────────────────────────
|
|
38
39
|
|
|
@@ -361,16 +362,29 @@ class ConfluenceClient:
|
|
|
361
362
|
resp = self._http.post(label_url, json=payload)
|
|
362
363
|
self._raise_for_status(resp, f"set_page_labels({page_id!r})")
|
|
363
364
|
|
|
364
|
-
def set_page_status(self, page_id: str, status_key: str) -> None:
|
|
365
|
+
def set_page_status(self, page_id: str, status_key: str, space_key: str | None = None) -> None:
|
|
365
366
|
"""Set the Confluence page content state (e.g. ``rough-draft``, ``in-progress``).
|
|
366
367
|
|
|
367
|
-
Uses the v1 ``PUT /content/{id}/state`` endpoint. *
|
|
368
|
-
|
|
369
|
-
|
|
368
|
+
Uses the v1 ``PUT /content/{id}/state`` endpoint. When *space_key* is
|
|
369
|
+
provided the space states are fetched once (cached) so the correct
|
|
370
|
+
``id``, ``name``, and ``color`` are sent — required to match an
|
|
371
|
+
existing space state rather than creating a new custom one.
|
|
370
372
|
"""
|
|
371
373
|
name = status_key.replace("-", " ").title()
|
|
374
|
+
state_body: dict[str, Any] = {"name": name}
|
|
375
|
+
|
|
376
|
+
if space_key:
|
|
377
|
+
if space_key not in self._space_states:
|
|
378
|
+
resp = self._http.get(self._v1(f"/space/{space_key}/state"))
|
|
379
|
+
if resp.is_success:
|
|
380
|
+
self._space_states[space_key] = resp.json() if isinstance(resp.json(), list) else []
|
|
381
|
+
for state in self._space_states.get(space_key, []):
|
|
382
|
+
if state.get("name", "").lower() == name.lower():
|
|
383
|
+
state_body = {"id": state["id"], "name": state["name"], "color": state["color"]}
|
|
384
|
+
break
|
|
385
|
+
|
|
372
386
|
url = self._v1(f"/content/{page_id}/state")
|
|
373
|
-
resp = self._http.put(url, json=
|
|
387
|
+
resp = self._http.put(url, json=state_body)
|
|
374
388
|
self._raise_for_status(resp, f"set_page_status({page_id!r}, {status_key!r})")
|
|
375
389
|
|
|
376
390
|
def list_attachments(self, page_id: str) -> dict[str, dict[str, Any]]:
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/publisher/pipeline.py
RENAMED
|
@@ -636,6 +636,7 @@ def _post_process_action(
|
|
|
636
636
|
full_width: bool,
|
|
637
637
|
docs_dir: Path,
|
|
638
638
|
report: PublishReport,
|
|
639
|
+
space_key: str | None = None,
|
|
639
640
|
quiet: bool = False,
|
|
640
641
|
) -> None:
|
|
641
642
|
"""Run all non-fatal post-create/update work for a single action."""
|
|
@@ -663,7 +664,7 @@ def _post_process_action(
|
|
|
663
664
|
# Set Confluence page status (rough-draft / in-progress / etc.) — non-fatal.
|
|
664
665
|
if action.page_id and action.confluence_status and not action.is_folder:
|
|
665
666
|
try:
|
|
666
|
-
client.set_page_status(action.page_id, action.confluence_status)
|
|
667
|
+
client.set_page_status(action.page_id, action.confluence_status, space_key=space_key)
|
|
667
668
|
except Exception as exc:
|
|
668
669
|
if not quiet:
|
|
669
670
|
print(f" [warn] could not set page status '{action.confluence_status}': {exc}", file=sys.stderr)
|
|
@@ -685,6 +686,7 @@ def execute_publish(
|
|
|
685
686
|
*,
|
|
686
687
|
dry_run: bool = False,
|
|
687
688
|
space_id: str,
|
|
689
|
+
space_key: str | None = None,
|
|
688
690
|
docs_dir: Path,
|
|
689
691
|
full_width: bool = True,
|
|
690
692
|
root_page_id: str | None = None,
|
|
@@ -725,6 +727,16 @@ def execute_publish(
|
|
|
725
727
|
for action in plan:
|
|
726
728
|
if action.action == "skip":
|
|
727
729
|
report.skipped += 1
|
|
730
|
+
# Still apply status even for unchanged pages.
|
|
731
|
+
if action.page_id and action.confluence_status and not action.is_folder:
|
|
732
|
+
try:
|
|
733
|
+
client.set_page_status(action.page_id, action.confluence_status, space_key=space_key)
|
|
734
|
+
except Exception as exc:
|
|
735
|
+
if not quiet:
|
|
736
|
+
print(
|
|
737
|
+
f" [warn] could not set page status '{action.confluence_status}': {exc}",
|
|
738
|
+
file=sys.stderr,
|
|
739
|
+
)
|
|
728
740
|
continue
|
|
729
741
|
|
|
730
742
|
counter += 1
|
|
@@ -746,7 +758,10 @@ def execute_publish(
|
|
|
746
758
|
if action.node.is_section and action.page_id:
|
|
747
759
|
_wire_children(action, action_by_node)
|
|
748
760
|
|
|
749
|
-
_post_process_action(
|
|
761
|
+
_post_process_action(
|
|
762
|
+
action, client,
|
|
763
|
+
full_width=full_width, docs_dir=docs_dir, space_key=space_key, report=report, quiet=quiet,
|
|
764
|
+
)
|
|
750
765
|
|
|
751
766
|
if prune and root_page_id:
|
|
752
767
|
published_ids = {a.page_id for a in plan if a.page_id}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/requires.txt
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs2confluence.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/emitter/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/emitter/xhtml.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/ir/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/ir/document.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/ir/treeutil.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/config.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/extra_css.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/nav.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/loader/page.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/parser/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/parser/markdown.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/pdf/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/pdf/generator.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/pdf/render.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/abbrevs.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/fence.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preprocess/icons.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preview/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preview/render.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/preview/server.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/publisher/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/abbrevs.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/assets.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/images.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.7.19 → mkdocs2confluence-0.7.22}/src/mkdocs_to_confluence/transforms/mermaid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|