evennia/docs/pylib/update_dynamic_pages.py

136 lines
3 KiB
Python

"""
Update dynamically generated doc pages based on github sources.
"""
from datetime import datetime
from os.path import abspath, dirname
from os.path import join as pathjoin
from re import sub as re_sub
ROOTDIR = dirname(dirname(dirname(abspath(__file__))))
DOCDIR = pathjoin(ROOTDIR, "docs")
DOCSRCDIR = pathjoin(DOCDIR, "source")
EVENNIADIR = pathjoin(ROOTDIR, "evennia")
def update_code_style():
"""
Plain CODING_STYLE.md copy
"""
sourcefile = pathjoin(ROOTDIR, "CODING_STYLE.md")
targetfile = pathjoin(DOCSRCDIR, "Coding", "Evennia-Code-Style.md")
with open(sourcefile) as fil:
txt = fil.read()
with open(targetfile, "w") as fil:
fil.write(txt)
print(" -- Updated Evennia-Code-Style.md")
def update_changelog():
"""
Plain CHANGELOG.md copy
"""
sourcefile = pathjoin(ROOTDIR, "CHANGELOG.md")
targetfile = pathjoin(DOCSRCDIR, "Coding", "Changelog.md")
with open(sourcefile) as fil:
txt = fil.read()
with open(targetfile, "w") as fil:
fil.write(txt)
print(" -- Updated Changelog.md")
def update_default_settings():
"""
Make a copy of the default settings file for easy reference in docs
"""
sourcefile = pathjoin(EVENNIADIR, "settings_default.py")
targetfile = pathjoin(DOCSRCDIR, "Setup", "Settings-Default.md")
with open(sourcefile) as fil:
txt = fil.read()
txt = f"""
# Evennia Default settings file
Master file is located at `evennia/evennia/settings_default.py`. Read
its comments to see what each setting does and copy only what you want
to change into `mygame/server/conf/settings.py`.
Example of accessing settings:
```
from django.conf import settings
if settings.SERVERNAME == "Evennia":
print("Yay!")
```
----
```python
{txt}
```
"""
with open(targetfile, "w") as fil:
fil.write(txt)
print(" -- Updated Settings-Default.md")
def update_index():
"""
Read the index.md file and inject the latest version number and updated time.
"""
indexfile = pathjoin(DOCSRCDIR, "index.md")
versionfile = pathjoin(EVENNIADIR, "VERSION.txt")
with open(indexfile) as f:
srcdata = f.read()
# replace the version number
with open(versionfile) as f:
version = f.read().strip()
pattern = r"Evennia version is \d+\.\d+\.\d+\."
replacement = f"Evennia version is {version}."
srcdata = re_sub(pattern, replacement, srcdata)
# replace the last-updated time
now = datetime.now().strftime("%B %d, %Y")
pattern = r"This manual was last updated [A-Z][a-z]+ \d{1,2}, \d{4}"
replacement = f"This manual was last updated {now}"
srcdata = re_sub(pattern, replacement, srcdata)
with open(indexfile, "w") as f:
f.write(srcdata)
print(" -- Updated index.md")
def update_dynamic_pages():
"""
Run the various updaters
"""
update_index()
update_changelog()
update_default_settings()
update_code_style()
if __name__ == "__main__":
update_dynamic_pages()