mkdocs2confluence 0.5.26__tar.gz → 0.5.28__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 (65) hide show
  1. {mkdocs2confluence-0.5.26/src/mkdocs2confluence.egg-info → mkdocs2confluence-0.5.28}/PKG-INFO +4 -47
  2. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/README.md +3 -46
  3. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/pyproject.toml +1 -1
  4. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28/src/mkdocs2confluence.egg-info}/PKG-INFO +4 -47
  5. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/__init__.py +1 -1
  6. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/LICENSE +0 -0
  7. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/setup.cfg +0 -0
  8. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs2confluence.egg-info/SOURCES.txt +0 -0
  9. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs2confluence.egg-info/dependency_links.txt +0 -0
  10. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs2confluence.egg-info/entry_points.txt +0 -0
  11. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs2confluence.egg-info/requires.txt +0 -0
  12. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs2confluence.egg-info/top_level.txt +0 -0
  13. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/cli.py +0 -0
  14. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/emitter/__init__.py +0 -0
  15. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/emitter/xhtml.py +0 -0
  16. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/ir/__init__.py +0 -0
  17. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/ir/document.py +0 -0
  18. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/ir/nodes.py +0 -0
  19. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/ir/treeutil.py +0 -0
  20. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/loader/__init__.py +0 -0
  21. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/loader/config.py +0 -0
  22. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/loader/extra_css.py +0 -0
  23. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/loader/nav.py +0 -0
  24. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/loader/page.py +0 -0
  25. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/parser/__init__.py +0 -0
  26. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/parser/markdown.py +0 -0
  27. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preprocess/__init__.py +0 -0
  28. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preprocess/abbrevs.py +0 -0
  29. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preprocess/fence.py +0 -0
  30. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preprocess/frontmatter.py +0 -0
  31. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preprocess/icons.py +0 -0
  32. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preprocess/includes.py +0 -0
  33. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preprocess/linkdefs.py +0 -0
  34. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preview/__init__.py +0 -0
  35. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/preview/render.py +0 -0
  36. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/publisher/__init__.py +0 -0
  37. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/publisher/client.py +0 -0
  38. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/publisher/pipeline.py +0 -0
  39. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/transforms/__init__.py +0 -0
  40. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/transforms/abbrevs.py +0 -0
  41. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/transforms/assets.py +0 -0
  42. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/transforms/editlink.py +0 -0
  43. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/transforms/images.py +0 -0
  44. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/transforms/internallinks.py +0 -0
  45. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/src/mkdocs_to_confluence/transforms/mermaid.py +0 -0
  46. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_abbrevs.py +0 -0
  47. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_editlink.py +0 -0
  48. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_emitter.py +0 -0
  49. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_extra_css.py +0 -0
  50. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_frontmatter.py +0 -0
  51. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_icons.py +0 -0
  52. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_images.py +0 -0
  53. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_internallinks.py +0 -0
  54. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_ir.py +0 -0
  55. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_linkdefs.py +0 -0
  56. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_loader.py +0 -0
  57. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_mermaid.py +0 -0
  58. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_page_loader.py +0 -0
  59. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_parser.py +0 -0
  60. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_preprocess.py +0 -0
  61. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_preview.py +0 -0
  62. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_publish_client.py +0 -0
  63. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_publish_config.py +0 -0
  64. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_publish_pipeline.py +0 -0
  65. {mkdocs2confluence-0.5.26 → mkdocs2confluence-0.5.28}/tests/test_treeutil.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mkdocs2confluence
3
- Version: 0.5.26
3
+ Version: 0.5.28
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
@@ -40,6 +40,7 @@ Dynamic: license-file
40
40
 
41
41
  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
42
42
  [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
43
+ [![PyPI](https://img.shields.io/pypi/v/mkdocs2confluence)](https://pypi.org/project/mkdocs2confluence/)
43
44
  [![Latest Release](https://img.shields.io/github/v/release/jeckyl2010/mkdocs2confluence)](https://github.com/jeckyl2010/mkdocs2confluence/releases/latest)
44
45
  [![CI](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/ci.yml/badge.svg)](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/ci.yml)
45
46
  [![Release](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/release.yml/badge.svg)](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/release.yml)
@@ -56,52 +57,7 @@ It is a **compiler/transpiler**, not an HTML converter — every Markdown constr
56
57
 
57
58
  ## Architecture
58
59
 
59
- ```mermaid
60
- flowchart LR
61
- subgraph Input
62
- A[mkdocs.yml\nconf config + nav]
63
- B[Markdown files\n+ assets]
64
- end
65
-
66
- subgraph Loader
67
- C[Config loader\nMkDocsConfig\nConfluenceConfig]
68
- D[Nav resolver\nNavNode tree]
69
- end
70
-
71
- subgraph Preprocess
72
- E[Front matter\nIncludes / snippets\nAbbreviations\nIcon shortcodes\nLink definitions]
73
- end
74
-
75
- subgraph IR
76
- F[Markdown → IR\nDocument node tree]
77
- end
78
-
79
- subgraph Transforms
80
- G[Mermaid → PNG\nInternal links\nAsset paths\nAbbrev expansion\nEdit link\nCSS styles]
81
- end
82
-
83
- subgraph Emitter
84
- H[IR → Confluence\nstorage XHTML]
85
- end
86
-
87
- subgraph Publisher
88
- I[Plan\ncreate / update / skip\nper nav node]
89
- J[Execute\nPages · Folders\nStub pages · Assets]
90
- K[Confluence Cloud\nREST API v2]
91
- end
92
-
93
- A --> C
94
- A --> D
95
- B --> E
96
- C --> E
97
- D --> I
98
- E --> F
99
- F --> G
100
- G --> H
101
- H --> I
102
- I --> J
103
- J --> K
104
- ```
60
+ ![Architecture](https://raw.githubusercontent.com/jeckyl2010/mkdocs2confluence/main/docs/architecture.png)
105
61
 
106
62
  Each stage is a separate Python module under `src/mkdocs_to_confluence/`. The **plan** phase makes all API read calls (find existing pages); the **execute** phase makes all write calls, ensuring parents always exist before children.
107
63
 
@@ -214,6 +170,7 @@ The API token is read from (in priority order):
214
170
  - Pages with `ready: false` in their YAML front matter are **skipped**, even if listed in the nav.
215
171
  - Section nodes (nav groups without a page) become empty parent pages in Confluence, mirroring the nav hierarchy.
216
172
  - All locally linked assets are uploaded as Confluence page attachments automatically.
173
+ - **Smart update detection** — before calling the Confluence update API, mk2conf compares a `sha256` hash of the compiled output against the hash stored from the previous run (kept as a hidden Confluence page property `mk2conf-content-hash`). Pages whose content has not changed are skipped entirely — no version bump, no watcher notification.
217
174
 
218
175
  #### Mermaid rendering
219
176
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
4
4
  [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
5
+ [![PyPI](https://img.shields.io/pypi/v/mkdocs2confluence)](https://pypi.org/project/mkdocs2confluence/)
5
6
  [![Latest Release](https://img.shields.io/github/v/release/jeckyl2010/mkdocs2confluence)](https://github.com/jeckyl2010/mkdocs2confluence/releases/latest)
6
7
  [![CI](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/ci.yml/badge.svg)](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/ci.yml)
7
8
  [![Release](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/release.yml/badge.svg)](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/release.yml)
@@ -18,52 +19,7 @@ It is a **compiler/transpiler**, not an HTML converter — every Markdown constr
18
19
 
19
20
  ## Architecture
20
21
 
21
- ```mermaid
22
- flowchart LR
23
- subgraph Input
24
- A[mkdocs.yml\nconf config + nav]
25
- B[Markdown files\n+ assets]
26
- end
27
-
28
- subgraph Loader
29
- C[Config loader\nMkDocsConfig\nConfluenceConfig]
30
- D[Nav resolver\nNavNode tree]
31
- end
32
-
33
- subgraph Preprocess
34
- E[Front matter\nIncludes / snippets\nAbbreviations\nIcon shortcodes\nLink definitions]
35
- end
36
-
37
- subgraph IR
38
- F[Markdown → IR\nDocument node tree]
39
- end
40
-
41
- subgraph Transforms
42
- G[Mermaid → PNG\nInternal links\nAsset paths\nAbbrev expansion\nEdit link\nCSS styles]
43
- end
44
-
45
- subgraph Emitter
46
- H[IR → Confluence\nstorage XHTML]
47
- end
48
-
49
- subgraph Publisher
50
- I[Plan\ncreate / update / skip\nper nav node]
51
- J[Execute\nPages · Folders\nStub pages · Assets]
52
- K[Confluence Cloud\nREST API v2]
53
- end
54
-
55
- A --> C
56
- A --> D
57
- B --> E
58
- C --> E
59
- D --> I
60
- E --> F
61
- F --> G
62
- G --> H
63
- H --> I
64
- I --> J
65
- J --> K
66
- ```
22
+ ![Architecture](https://raw.githubusercontent.com/jeckyl2010/mkdocs2confluence/main/docs/architecture.png)
67
23
 
68
24
  Each stage is a separate Python module under `src/mkdocs_to_confluence/`. The **plan** phase makes all API read calls (find existing pages); the **execute** phase makes all write calls, ensuring parents always exist before children.
69
25
 
@@ -176,6 +132,7 @@ The API token is read from (in priority order):
176
132
  - Pages with `ready: false` in their YAML front matter are **skipped**, even if listed in the nav.
177
133
  - Section nodes (nav groups without a page) become empty parent pages in Confluence, mirroring the nav hierarchy.
178
134
  - All locally linked assets are uploaded as Confluence page attachments automatically.
135
+ - **Smart update detection** — before calling the Confluence update API, mk2conf compares a `sha256` hash of the compiled output against the hash stored from the previous run (kept as a hidden Confluence page property `mk2conf-content-hash`). Pages whose content has not changed are skipped entirely — no version bump, no watcher notification.
179
136
 
180
137
  #### Mermaid rendering
181
138
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mkdocs2confluence"
3
- version = "0.5.26"
3
+ version = "0.5.28"
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.5.26
3
+ Version: 0.5.28
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
@@ -40,6 +40,7 @@ Dynamic: license-file
40
40
 
41
41
  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
42
42
  [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
43
+ [![PyPI](https://img.shields.io/pypi/v/mkdocs2confluence)](https://pypi.org/project/mkdocs2confluence/)
43
44
  [![Latest Release](https://img.shields.io/github/v/release/jeckyl2010/mkdocs2confluence)](https://github.com/jeckyl2010/mkdocs2confluence/releases/latest)
44
45
  [![CI](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/ci.yml/badge.svg)](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/ci.yml)
45
46
  [![Release](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/release.yml/badge.svg)](https://github.com/jeckyl2010/mkdocs2confluence/actions/workflows/release.yml)
@@ -56,52 +57,7 @@ It is a **compiler/transpiler**, not an HTML converter — every Markdown constr
56
57
 
57
58
  ## Architecture
58
59
 
59
- ```mermaid
60
- flowchart LR
61
- subgraph Input
62
- A[mkdocs.yml\nconf config + nav]
63
- B[Markdown files\n+ assets]
64
- end
65
-
66
- subgraph Loader
67
- C[Config loader\nMkDocsConfig\nConfluenceConfig]
68
- D[Nav resolver\nNavNode tree]
69
- end
70
-
71
- subgraph Preprocess
72
- E[Front matter\nIncludes / snippets\nAbbreviations\nIcon shortcodes\nLink definitions]
73
- end
74
-
75
- subgraph IR
76
- F[Markdown → IR\nDocument node tree]
77
- end
78
-
79
- subgraph Transforms
80
- G[Mermaid → PNG\nInternal links\nAsset paths\nAbbrev expansion\nEdit link\nCSS styles]
81
- end
82
-
83
- subgraph Emitter
84
- H[IR → Confluence\nstorage XHTML]
85
- end
86
-
87
- subgraph Publisher
88
- I[Plan\ncreate / update / skip\nper nav node]
89
- J[Execute\nPages · Folders\nStub pages · Assets]
90
- K[Confluence Cloud\nREST API v2]
91
- end
92
-
93
- A --> C
94
- A --> D
95
- B --> E
96
- C --> E
97
- D --> I
98
- E --> F
99
- F --> G
100
- G --> H
101
- H --> I
102
- I --> J
103
- J --> K
104
- ```
60
+ ![Architecture](https://raw.githubusercontent.com/jeckyl2010/mkdocs2confluence/main/docs/architecture.png)
105
61
 
106
62
  Each stage is a separate Python module under `src/mkdocs_to_confluence/`. The **plan** phase makes all API read calls (find existing pages); the **execute** phase makes all write calls, ensuring parents always exist before children.
107
63
 
@@ -214,6 +170,7 @@ The API token is read from (in priority order):
214
170
  - Pages with `ready: false` in their YAML front matter are **skipped**, even if listed in the nav.
215
171
  - Section nodes (nav groups without a page) become empty parent pages in Confluence, mirroring the nav hierarchy.
216
172
  - All locally linked assets are uploaded as Confluence page attachments automatically.
173
+ - **Smart update detection** — before calling the Confluence update API, mk2conf compares a `sha256` hash of the compiled output against the hash stored from the previous run (kept as a hidden Confluence page property `mk2conf-content-hash`). Pages whose content has not changed are skipped entirely — no version bump, no watcher notification.
217
174
 
218
175
  #### Mermaid rendering
219
176
 
@@ -3,6 +3,6 @@
3
3
  from importlib.metadata import PackageNotFoundError, version
4
4
 
5
5
  try:
6
- __version__ = version("mkdocs-to-confluence")
6
+ __version__ = version("mkdocs2confluence")
7
7
  except PackageNotFoundError:
8
8
  __version__ = "unknown"