From f64aaaf943b8251e0513a03fac395314a5d4dc9b Mon Sep 17 00:00:00 2001 From: Adi Shankara Date: Thu, 3 Aug 2023 14:40:07 +0930 Subject: [PATCH] add script to sync rpc commands --- .github/scripts/sync-rpc-cmds.py | 90 ++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 .github/scripts/sync-rpc-cmds.py diff --git a/.github/scripts/sync-rpc-cmds.py b/.github/scripts/sync-rpc-cmds.py new file mode 100644 index 000000000..b0b5bf9c6 --- /dev/null +++ b/.github/scripts/sync-rpc-cmds.py @@ -0,0 +1,90 @@ +import os +from time import sleep +import requests +import re + +# readme url +URL = "https://dash.readme.com/api/v1/docs" +# category id for API reference +CATEGORY_ID = "63e4e160c60b2e001dd1cc4e" + + +def checkIfDocIsPresent(title, headers): + + check_url = URL + "/" + title + response = requests.get(check_url, headers=headers) + + if (response.status_code == 200): + return True + else: + return False + + +def publishDoc(title, body, order): + key = os.environ.get('README_API_KEY') + payload = { + "title": title, + "type": "basic", + "body": body, + "category": CATEGORY_ID, + "hidden": False, + "order": order + } + headers = { + "accept": "application/json", + "content-type": "application/json", + "authorization": "Basic " + key + } + + isDocPresent = checkIfDocIsPresent(title, headers) + if (isDocPresent): + # update doc + update_url = URL + "/" + title # title == slug + response = requests.put(update_url, json=payload, headers=headers) + if (response.status_code != 200): + print(response.text) + else: + print("Updated ", title) + else: + # create doc + response = requests.post(URL, json=payload, headers=headers) + if (response.status_code != 201): + print(response.text) + else: + print("Created ", title) + + +def extract_rpc_commands(rst_content): + manpages_block = re.search + (r"\.\. block_start manpages(.*?)\.\. block_end manpages", + rst_content, re.DOTALL) + if manpages_block: + commands = re.findall + (r'\b([a-zA-Z0-9_-]+)\s+<([^>]+)>\n', + manpages_block.group(1)) + return commands + return [] + + +def main(): + # path to the rst file from where we fetch all the RPC commands + path_to_rst = 'doc/index.rst' + with open(path_to_rst, "r") as file: + rst_content = file.read() + + commands = extract_rpc_commands(rst_content) + if commands: + order = 0 + for name, file in commands: + print(f"{name}\t\t{file}") + with open("doc/" + file) as f: + body = f.read() + publishDoc(name, body, order) + order = order + 1 + sleep(3) + else: + print("No commands found in the Manpages block.") + + +if __name__ == "__main__": + main()