docs, modifying cli to use language packs

This commit is contained in:
evilchili
2023-11-24 10:01:33 -05:00
parent 45f4d6e401
commit 68128b5dc6
4 changed files with 162 additions and 34 deletions
+26 -1
View File
@@ -1 +1,26 @@
from .languages import supported_languages
import importlib
import os
import pkgutil
import sys
from types import ModuleType
language_pack = None
supported_languages = None
def _import_submodules(module):
pkgs = pkgutil.iter_modules(module.__path__)
for loader, module_name, is_pkg in pkgs:
yield importlib.import_module(f"{module.__name__}.{module_name}")
def load_language_pack(module_name: str = "") -> ModuleType:
if not module_name:
module_name = os.getenv("FANLANG_LANGUAGE_PACK", "language.languages")
language_pack = importlib.import_module(module_name)
_import_submodules(language_pack)
supported_languages = dict(
(module.__name__.split(".")[-1], module) for module in list(_import_submodules(sys.modules[module_name]))
)
return language_pack, supported_languages
+36 -7
View File
@@ -1,20 +1,23 @@
import logging
import os
import random
from enum import Enum
from types import ModuleType
import language
import typer
from rich.logging import RichHandler
from rich.console import Console
from rich.markdown import Markdown
from language import supported_languages
app = typer.Typer()
app_state = {}
default_language = os.environ.get("FANLANG_DEFAULT_LANGUAGE", "common")
language_pack, supported_languages = language.load_language_pack()
Supported = Enum("Supported", ((k, k) for k in supported_languages.keys()))
@@ -34,21 +37,47 @@ def print_sample(lang: str, module: ModuleType) -> None:
@app.callback()
def main(
language: Supported = typer.Option("common", help="The language to use."),
language: Supported = typer.Option(
default=default_language,
help="The language to use."
),
):
app_state["language"] = supported_languages[language.name]
debug = os.getenv("DEBUG", None)
debug = os.getenv("FANLANG_DEBUG", None)
logging.basicConfig(
format="%(message)s",
format="%(name)s %(message)s",
level=logging.DEBUG if debug else logging.INFO,
handlers=[RichHandler(rich_tracebacks=True, tracebacks_suppress=[typer])],
)
logging.getLogger('markdown_it').setLevel(logging.ERROR)
logging.debug(f"Loaded language pack {language_pack}.")
logging.debug(f"Default language: {default_language}.")
@app.command()
def words(count: int = typer.Option(50, help="The number of words to generate.")):
print(" ".join(list(app_state["language"].Language.word(count))))
def text(count: int = typer.Option(50, help="The number of words to generate.")):
phrases = []
phrase = []
for word in app_state["language"].Language.word(count):
phrase.append(str(word))
if len(phrase) >= random.randint(1, 12):
phrases.append(' '.join(phrase))
phrase = []
if phrase:
phrases.append(' '.join(phrase))
paragraph = phrases[0].capitalize()
for phrase in phrases[1:]:
if random.choice([0, 0, 1]):
paragraph = paragraph + random.choice('?!.') + ' ' + phrase.capitalize()
else:
paragraph = paragraph + ', ' + phrase
paragraph = paragraph + random.choice('?!.')
console = Console(width=80)
console.print(paragraph)
@app.command()
-14
View File
@@ -1,14 +0,0 @@
import importlib
import pkgutil
import sys
def import_submodules(module):
pkgs = pkgutil.iter_modules(module.__path__)
for loader, module_name, is_pkg in pkgs:
yield importlib.import_module(f"{module.__name__}.{module_name}")
supported_languages = dict(
(module.__name__.split(".")[-1], module) for module in list(import_submodules(sys.modules[__name__]))
)