mkdocs2confluence 0.7.31__tar.gz → 0.7.33__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.
Files changed (72) hide show
  1. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/PKG-INFO +1 -1
  2. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/pyproject.toml +1 -1
  3. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs2confluence.egg-info/PKG-INFO +1 -1
  4. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preprocess/frontmatter.py +0 -5
  5. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/publisher/client.py +3 -8
  6. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/publisher/pipeline.py +0 -5
  7. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/transforms/editlink.py +1 -0
  8. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_editlink.py +14 -0
  9. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_publish_client.py +1 -1
  10. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/LICENSE +0 -0
  11. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/README.md +0 -0
  12. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/setup.cfg +0 -0
  13. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs2confluence.egg-info/SOURCES.txt +0 -0
  14. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs2confluence.egg-info/dependency_links.txt +0 -0
  15. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs2confluence.egg-info/entry_points.txt +0 -0
  16. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs2confluence.egg-info/requires.txt +0 -0
  17. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs2confluence.egg-info/top_level.txt +0 -0
  18. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/__init__.py +0 -0
  19. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/cli.py +0 -0
  20. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/emitter/__init__.py +0 -0
  21. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/emitter/xhtml.py +0 -0
  22. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/ir/__init__.py +0 -0
  23. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/ir/document.py +0 -0
  24. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/ir/nodes.py +0 -0
  25. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/ir/treeutil.py +0 -0
  26. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/loader/__init__.py +0 -0
  27. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/loader/config.py +0 -0
  28. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/loader/extra_css.py +0 -0
  29. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/loader/nav.py +0 -0
  30. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/loader/page.py +0 -0
  31. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/parser/__init__.py +0 -0
  32. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/parser/markdown.py +0 -0
  33. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/pdf/__init__.py +0 -0
  34. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/pdf/generator.py +0 -0
  35. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/pdf/render.py +0 -0
  36. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preprocess/__init__.py +0 -0
  37. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preprocess/abbrevs.py +0 -0
  38. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preprocess/fence.py +0 -0
  39. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preprocess/icons.py +0 -0
  40. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preprocess/includes.py +0 -0
  41. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preprocess/linkdefs.py +0 -0
  42. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preview/__init__.py +0 -0
  43. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preview/render.py +0 -0
  44. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/preview/server.py +0 -0
  45. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/publisher/__init__.py +0 -0
  46. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/transforms/__init__.py +0 -0
  47. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/transforms/abbrevs.py +0 -0
  48. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/transforms/assets.py +0 -0
  49. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/transforms/images.py +0 -0
  50. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/transforms/internallinks.py +0 -0
  51. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/src/mkdocs_to_confluence/transforms/mermaid.py +0 -0
  52. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_abbrevs.py +0 -0
  53. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_cli.py +0 -0
  54. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_emitter.py +0 -0
  55. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_extra_css.py +0 -0
  56. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_frontmatter.py +0 -0
  57. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_icons.py +0 -0
  58. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_images.py +0 -0
  59. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_internallinks.py +0 -0
  60. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_ir.py +0 -0
  61. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_linkdefs.py +0 -0
  62. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_loader.py +0 -0
  63. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_mermaid.py +0 -0
  64. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_page_loader.py +0 -0
  65. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_parser.py +0 -0
  66. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_pdf.py +0 -0
  67. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_preprocess.py +0 -0
  68. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_preview.py +0 -0
  69. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_publish_config.py +0 -0
  70. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_publish_pipeline.py +0 -0
  71. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_server.py +0 -0
  72. {mkdocs2confluence-0.7.31 → mkdocs2confluence-0.7.33}/tests/test_treeutil.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mkdocs2confluence
3
- Version: 0.7.31
3
+ Version: 0.7.33
4
4
  Summary: Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more
5
5
  Author: Anders Hybertz
6
6
  License: GPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mkdocs2confluence"
3
- version = "0.7.31"
3
+ version = "0.7.33"
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" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mkdocs2confluence
3
- Version: 0.7.31
3
+ Version: 0.7.33
4
4
  Summary: Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more
5
5
  Author: Anders Hybertz
6
6
  License: GPL-3.0-or-later
@@ -105,10 +105,6 @@ def extract_front_matter(text: str) -> tuple[FrontMatter | None, str]:
105
105
  if not isinstance(raw, dict):
106
106
  return None, text
107
107
 
108
- if "status" in raw:
109
- print(f" [debug-status] raw YAML block repr: {m.group(1)!r}")
110
- print(f" [debug-status] raw['status'] = {raw['status']!r}")
111
-
112
108
  return _build_node(raw), remaining
113
109
 
114
110
 
@@ -117,7 +113,6 @@ def extract_front_matter(text: str) -> tuple[FrontMatter | None, str]:
117
113
 
118
114
  def _build_node(raw: dict[str, Any]) -> FrontMatter:
119
115
  """Convert a raw front matter dict to a :class:`FrontMatter` IR node."""
120
- print(f" [debug-fm] raw keys: {list(raw.keys())}")
121
116
  title: str | None = _stringify(raw.get("title")) if "title" in raw else None
122
117
  subtitle: str | None = _stringify(raw.get("subtitle")) if "subtitle" in raw else None
123
118
 
@@ -380,9 +380,6 @@ class ConfluenceClient:
380
380
  # Fetch space states once per run (keyed by space so one run = one API call)
381
381
  if cache_key not in self._space_states:
382
382
  self._space_states[cache_key] = self._fetch_available_states(page_id)
383
- print(
384
- f" [status] space states fetched: {[s.get('name') for s in self._space_states[cache_key]]}",
385
- )
386
383
 
387
384
  matched: dict[str, Any] | None = None
388
385
  for state in self._space_states.get(cache_key, []):
@@ -395,8 +392,8 @@ class ConfluenceClient:
395
392
  "id": matched["id"],
396
393
  "name": matched["name"],
397
394
  "color": matched["color"],
395
+ "status": "current",
398
396
  }
399
- print(f" [status] matched space state: {body}")
400
397
  else:
401
398
  # Fall back: name + color (required together when no id)
402
399
  _default_colors = {
@@ -407,14 +404,12 @@ class ConfluenceClient:
407
404
  "in review": "#ffc400",
408
405
  "outdated": "#ff7452",
409
406
  }
410
- body = {"name": name, "color": _default_colors.get(_normalize(name), "#2684ff")}
411
- print(f" [status] no space state match — using fallback: {body}")
407
+ body = {"name": name, "color": _default_colors.get(_normalize(name), "#2684ff"), "status": "current"}
412
408
 
413
409
  url = self._v1(f"/content/{page_id}/state")
414
410
  resp = self._http.put(url, json=body)
415
- print(f" [status] PUT {url} → HTTP {resp.status_code}")
416
411
  if not resp.is_success:
417
- print(f" [status] response body: {resp.text[:300]}")
412
+ print(f" [warn] set status body: {resp.text[:300]}")
418
413
  self._raise_for_status(resp, f"set_page_status({page_id!r}, {status_key!r})")
419
414
 
420
415
  def _fetch_available_states(self, page_id: str) -> list[dict[str, Any]]:
@@ -277,8 +277,6 @@ def _plan_nodes(
277
277
  xhtml, attachments, labels, confluence_status = compile_page(
278
278
  index_child, config, link_map, quiet=quiet
279
279
  )
280
- if confluence_status or labels:
281
- print(f" [debug] '{clean_title}' (index): status={confluence_status!r} labels={labels}")
282
280
  existing = client.find_page(space_id, clean_title)
283
281
  xhtml_h = _xhtml_hash(xhtml)
284
282
  if existing is not None and client.get_content_hash(str(existing["id"])) == xhtml_h:
@@ -390,9 +388,6 @@ def _plan_nodes(
390
388
  )
391
389
  continue
392
390
 
393
- if confluence_status or labels:
394
- print(f" [debug] '{clean_title}': status={confluence_status!r} labels={labels}")
395
-
396
391
  existing = client.find_page(space_id, clean_title)
397
392
  xhtml_h = _xhtml_hash(xhtml)
398
393
  if existing is not None and client.get_content_hash(str(existing["id"])) == xhtml_h:
@@ -48,6 +48,7 @@ def attach_source_url(
48
48
  labels=nodes[0].labels,
49
49
  source_url=edit_url,
50
50
  site_url=site_url,
51
+ confluence_status=nodes[0].confluence_status,
51
52
  )
52
53
  return (updated,) + nodes[1:]
53
54
 
@@ -35,6 +35,20 @@ def test_existing_front_matter_fields_preserved():
35
35
  assert updated.source_url == "https://example.com/edit"
36
36
 
37
37
 
38
+ def test_confluence_status_preserved_by_attach_source_url():
39
+ """confluence_status must survive the attach_source_url transform (regression)."""
40
+ fm = FrontMatter(
41
+ title="My Page",
42
+ subtitle=None,
43
+ properties=(),
44
+ labels=("arch",),
45
+ confluence_status="in-progress",
46
+ )
47
+ result = attach_source_url((fm,), "https://example.com/edit")
48
+ updated: FrontMatter = result[0] # type: ignore[assignment]
49
+ assert updated.confluence_status == "in-progress"
50
+
51
+
38
52
  def test_minimal_front_matter_created_when_none_present():
39
53
  """A minimal FrontMatter is prepended when the page has no front matter."""
40
54
  body = (Paragraph(children=(TextNode(text="Content"),)),)
@@ -203,7 +203,7 @@ def test_set_page_status_uses_space_state_when_matched() -> None:
203
203
  client.set_page_status("42", "in-progress")
204
204
  import json
205
205
  body = json.loads(transport.requests[1].content)
206
- assert body == {"id": 1, "name": "In Progress", "color": "#2684ff"}
206
+ assert body == {"id": 1, "name": "In Progress", "color": "#2684ff", "status": "current"}
207
207
 
208
208
 
209
209
  def test_set_page_status_caches_space_states() -> None: