docs, modifying cli to use language packs
This commit is contained in:
+26
-1
@@ -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
@@ -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()
|
||||
|
||||
@@ -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__]))
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user