Skip to content

Commit 75805b2

Browse files
DEVOPS-65 intial commit
1 parent a958437 commit 75805b2

File tree

6 files changed

+576
-1
lines changed

6 files changed

+576
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,4 @@ cython_debug/
157157
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158158
# and can be added to the global gitignore or merged into this file. For a more nuclear
159159
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
160-
#.idea/
160+
.idea/

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,20 @@
11
# publish-confluence-pages-programatically
22
publish confluce pages programattically
3+
4+
``-----------------------------------------------------------``
5+
# using poetry as python virtual environment manager
6+
7+
* [Python - Poetry docs](https://python-poetry.org/docs/managing-environments/)
8+
* [Poetry set up - Pycharm](https://www.jetbrains.com/help/pycharm/poetry.html)
9+
10+
## This is a test
11+
12+
![Alt Adding Images in Markdown](C:\Users\Krishnadhas N K\Documents\GitHub\devwithkrishna\publish-confluence-pages-programatically\Screenshot.png)
13+
14+
### This is another teST
15+
16+
**Hello My dear**
17+
18+
_hello_
19+
20+
`*************************************************`

Screenshot.png

137 KB
Loading

confluence.py

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
import argparse
2+
import os
3+
import markdown
4+
from atlassian import Confluence
5+
from dotenv import load_dotenv
6+
7+
8+
def confluence_client(confluence_url: str, username: str, password: str):
9+
"""
10+
Create confluence client for authentication
11+
:return:
12+
"""
13+
14+
confluence_client = Confluence(
15+
url=confluence_url,
16+
username=username,
17+
password=password,
18+
cloud=True)
19+
return confluence_client
20+
21+
22+
def get_confluence_page_id(confluence_client, confluence_space: str, confluence_page_title: str):
23+
"""
24+
return confluence page id
25+
:return:
26+
"""
27+
confluence = confluence_client
28+
confluence_page_id = confluence.get_page_id(space=confluence_space,
29+
title=confluence_page_title)
30+
return confluence_page_id
31+
32+
33+
def render_html_from_md_file(markdown_file_path: str):
34+
"""
35+
Render html content to pass to confluence object from markdown file
36+
:param markdown_file_path:
37+
:return:
38+
"""
39+
markdown_file_path = markdown_file_path
40+
with open(markdown_file_path, 'r', encoding='utf-8') as file:
41+
markdown_content = file.read()
42+
# Convert Markdown to HTML
43+
html_content = markdown.markdown(markdown_content)
44+
return html_content
45+
46+
47+
def create_confluence_page(confluence_client, html_content, confluence_space: str, confluence_page_title: str):
48+
"""
49+
Create a confluence page using python sdk
50+
:return:
51+
"""
52+
confluence = confluence_client
53+
54+
status = confluence.create_page(
55+
space=confluence_space,
56+
title=confluence_page_title,
57+
body=html_content
58+
)
59+
60+
print(status)
61+
62+
63+
def update_confluence_page_if_exists(confluence_client, html_content, confluence_page_id: str, confluence_page_title: str):
64+
"""
65+
update an existing confluence page - clear and write fresh if existing
66+
:param confluence_client:
67+
:param html_content:
68+
:param confluence_page_id:
69+
:param confluence_page_title:
70+
:return:
71+
"""
72+
confluence = confluence_client
73+
status = confluence.update_page(
74+
page_id=confluence_page_id,
75+
title=confluence_page_title,
76+
body=html_content
77+
)
78+
print(status)
79+
80+
81+
def append_body_to_page(confluence_client, html_content, confluence_page_id: str, confluence_page_title:str):
82+
"""
83+
Append body to page if already exist
84+
:return:
85+
"""
86+
confluence = confluence_client
87+
status = confluence.append_page(
88+
page_id=confluence_page_id,
89+
title=confluence_page_title,
90+
append_body=html_content
91+
)
92+
print(status)
93+
94+
def main():
95+
""" To test the script"""
96+
parser = argparse.ArgumentParser(description='Process arguments for the program')
97+
parser.add_argument("--confluence_space", type=str, help='Confluencce space', required=True)
98+
parser.add_argument("--confluence_page_title", type=str, help='Confluence page title', required=True)
99+
parser.add_argument("--markdown_file_path", type=str, help='Markdown file path with file name', required=True)
100+
101+
load_dotenv()
102+
confluence_url = os.getenv('CONFLUENCE_URL')
103+
print(confluence_url)
104+
usernname = os.getenv('CONFLUENCE_USERNAME')
105+
print(usernname)
106+
password = os.getenv('CONFLUENCE_PASSWORD')
107+
print(password)
108+
109+
args = parser.parse_args()
110+
confluence_space = args.confluence_space
111+
confluence_page_title = args.confluence_page_title
112+
markdown_file_path = args.markdown_file_path
113+
114+
# function call
115+
confluence = confluence_client(confluence_url=confluence_url, username=usernname, password=password)
116+
html_content = render_html_from_md_file(markdown_file_path=markdown_file_path)
117+
# create_confluence_page(confluence_client=confluence, html_content=html_content)
118+
confluence_page_id = get_confluence_page_id(confluence_client=confluence, confluence_space=confluence_space,
119+
confluence_page_title=confluence_page_title)
120+
# update_confluence_page_if_exists(confluence_client=confluence, confluence_page_id=confluence_page_id,
121+
# html_content=html_content,confluence_page_title=confluence_page_title)
122+
# append_body_to_page(confluence_client=confluence,confluence_page_title=confluence_page_title,
123+
# confluence_page_id=confluence_page_id,html_content=html_content)
124+
125+
if __name__ == "__main__":
126+
main()

0 commit comments

Comments
 (0)