93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
"""Gitea Wiki helper: list, read, create, update wiki pages.
|
|
|
|
Usage:
|
|
wiki_helper.py list — list all pages
|
|
wiki_helper.py read <title> — read a page
|
|
wiki_helper.py create <title> <file> — create a page from file
|
|
wiki_helper.py update <title> <file> — update a page from file
|
|
"""
|
|
import sys, io, json, base64, urllib.request, urllib.error
|
|
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
|
|
|
BASE = "https://git.variet.net/api/v1/repos/Variet/gravity_web/wiki"
|
|
TOKEN = "3a01b4b15a39921572e64c413353e870d4d2161b"
|
|
HEADERS = {"Authorization": f"token {TOKEN}", "Content-Type": "application/json"}
|
|
|
|
def _req(method, path, data=None):
|
|
url = f"{BASE}{path}"
|
|
body = json.dumps(data).encode() if data else None
|
|
req = urllib.request.Request(url, data=body, headers=HEADERS, method=method)
|
|
try:
|
|
with urllib.request.urlopen(req) as resp:
|
|
return json.loads(resp.read().decode())
|
|
except urllib.error.HTTPError as e:
|
|
err = e.read().decode()
|
|
print(f" ⚠️ HTTP {e.code}: {err}")
|
|
return None
|
|
|
|
def _find_sub_url(title):
|
|
pages = _req("GET", "/pages")
|
|
if pages:
|
|
for p in pages:
|
|
if p.get("title", "").lower() == title.lower():
|
|
return p.get("sub_url", title)
|
|
return title
|
|
|
|
def list_pages():
|
|
pages = _req("GET", "/pages")
|
|
if pages:
|
|
print(f"=== {len(pages)} Wiki Pages ===")
|
|
for p in pages:
|
|
print(f" {p.get('title', '?')}")
|
|
return pages
|
|
|
|
def read_page(title):
|
|
sub = _find_sub_url(title)
|
|
page = _req("GET", f"/page/{sub}")
|
|
if page and page.get("content_base64"):
|
|
content = base64.b64decode(page["content_base64"]).decode("utf-8")
|
|
return content
|
|
return None
|
|
|
|
def create_page(title, content):
|
|
data = {
|
|
"title": title,
|
|
"content_base64": base64.b64encode(content.encode()).decode(),
|
|
}
|
|
result = _req("POST", "/new", data)
|
|
if result:
|
|
print(f" ✅ Created wiki page: {title}")
|
|
return result
|
|
|
|
def update_page(title, content):
|
|
sub = _find_sub_url(title)
|
|
data = {
|
|
"title": title,
|
|
"content_base64": base64.b64encode(content.encode()).decode(),
|
|
}
|
|
result = _req("PATCH", f"/page/{sub}", data)
|
|
if result:
|
|
print(f" ✅ Updated wiki page: {title}")
|
|
return result
|
|
|
|
if __name__ == "__main__":
|
|
cmd = sys.argv[1] if len(sys.argv) > 1 else "list"
|
|
|
|
if cmd == "list":
|
|
list_pages()
|
|
elif cmd == "read" and len(sys.argv) > 2:
|
|
content = read_page(sys.argv[2])
|
|
if content:
|
|
print(content[:5000])
|
|
else:
|
|
print(f" Page '{sys.argv[2]}' not found")
|
|
elif cmd == "create" and len(sys.argv) > 3:
|
|
with open(sys.argv[3], "r", encoding="utf-8") as f:
|
|
create_page(sys.argv[2], f.read())
|
|
elif cmd == "update" and len(sys.argv) > 3:
|
|
with open(sys.argv[3], "r", encoding="utf-8") as f:
|
|
update_page(sys.argv[2], f.read())
|
|
else:
|
|
print("Usage: wiki_helper.py list|read <title>|create <title> <file>|update <title> <file>")
|