1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00

Add microdocumentation generator

This commit is contained in:
Steffo 2019-12-10 16:02:10 +01:00
parent 88320bbf7a
commit b5f4f17103
7 changed files with 120 additions and 31 deletions

View file

@ -24,29 +24,5 @@
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
</formatting-settings>
</DBN-SQL>
<DBN-PSQL>
<case-options enabled="true">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false" />
</DBN-PSQL>
<DBN-SQL>
<case-options enabled="true">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false">
<option name="STATEMENT_SPACING" value="one_line" />
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
</formatting-settings>
</DBN-SQL>
</code_scheme>
</component>

View file

@ -9,7 +9,7 @@
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/royalnet.egg-info" />
</content>
<orderEntry type="jdk" jdkName="Python 3.8 (royalnet-1MWM6-kd-py3.8)" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="Python 3.8 (royalnet-Yo3bJ6Dg-py3.8)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">

View file

@ -2,7 +2,7 @@
[tool.poetry]
name = "royalnet"
version = "5.1.5"
version = "5.1.6"
description = "A multipurpose bot and web framework"
authors = ["Stefano Pigozzi <ste.pigozzi@gmail.com>"]
license = "AGPL-3.0+"

View file

@ -17,7 +17,7 @@ log = logging.getLogger(__name__)
@click.command()
@click.option("-c", "--config-filename", default="./config.toml", type=str,
@click.option("-c", "--config-filename", default="./config.toml", type=click.Path(exists=True),
help="The filename of the Royalnet configuration file.")
def run(config_filename: str):
# Read the configuration file

View file

@ -2,14 +2,11 @@ import royalnet
from starlette.requests import Request
from starlette.responses import *
from royalnet.constellation import PageStar
from ..tables import available_tables
class ApiRoyalnetVersionStar(PageStar):
path = "/api/royalnet/version"
tables = set(available_tables)
async def page(self, request: Request) -> JSONResponse:
return JSONResponse({
"version": {

116
royalnet/generate.py Normal file
View file

@ -0,0 +1,116 @@
import toml
import importlib
import click
p = click.echo
@click.command()
@click.option("-c", "--config-filename", default="./config.toml", type=click.Path(exists=True),
help="The filename of the Royalnet configuration file.")
@click.option("-f", "--file-format", type=str, help="The name of the format that should be generated.")
def run(config_filename, file_format):
with open(config_filename, "r") as t:
config: dict = toml.load(t)
# Import packs
packs_cfg = config["Packs"]
pack_names = packs_cfg["active"]
packs = {}
for pack_name in pack_names:
try:
packs[pack_name] = importlib.import_module(pack_name)
except ImportError as e:
p(f"Skipping `{pack_name}`: {e}", err=True)
continue
if file_format == "botfather":
for pack_name in packs:
pack = packs[pack_name]
lines = []
try:
commands = pack.available_commands
except AttributeError:
p(f"Pack `{pack}` does not have the `available_commands` attribute.", err=True)
continue
for command in commands:
lines.append(f"{command.name} - {command.description}")
lines.sort()
for line in lines:
p(line)
elif file_format == "markdown":
for pack_name in packs:
pack = packs[pack_name]
p(f"# {pack_name}")
p("")
try:
commands = pack.available_commands
except AttributeError:
p(f"Pack `{pack}` does not have the `available_commands` attribute.", err=True)
else:
p(f"## Commands")
p("")
for command in commands:
p(f"### `{command.name}`")
p("")
p(f"{command.description}")
p("")
if len(command.aliases) > 0:
p(f"> Aliases: {''.join(['`' + alias + '` ' for alias in command.aliases])}")
p("")
try:
events = pack.available_events
except AttributeError:
p(f"Pack `{pack}` does not have the `available_events` attribute.", err=True)
else:
p(f"## Events")
p("")
for event in events:
p(f"### `{event.name}`")
p("")
try:
page_stars = pack.available_page_stars
except AttributeError:
p(f"Pack `{pack}` does not have the `available_page_stars` attribute.", err=True)
else:
p(f"## Page Stars")
p("")
for page_star in page_stars:
p(f"### `{page_star.path}`")
p("")
try:
exc_stars = pack.available_exception_stars
except AttributeError:
p(f"Pack `{pack}` does not have the `available_exception_stars` attribute.", err=True)
else:
p(f"## Exception Stars")
p("")
for exc_star in exc_stars:
p(f"### `{exc_star.error}`")
p("")
try:
tables = pack.available_tables
except AttributeError:
p(f"Pack `{pack}` does not have the `available_tables` attribute.", err=True)
else:
p(f"## Tables")
p("")
for table in tables:
p(f"### `{table.__tablename__}`")
p("")
# TODO: list columns
else:
raise click.ClickException("Unknown format")
if __name__ == "__main__":
run()

View file

@ -1 +1 @@
semantic = "5.1.5"
semantic = "5.1.6"