80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
"""Nox configuration file."""
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
from shutil import copytree, copy
|
|
|
|
from nox import Session, session
|
|
|
|
_LOCALES = ["fr"]
|
|
|
|
@session()
|
|
def lint(session: Session) -> None:
|
|
session.install("ruff")
|
|
session.run("ruff", "check", "--fix")
|
|
session.run("ruff", "format")
|
|
|
|
|
|
@session()
|
|
def mypy(session: Session) -> None:
|
|
session.install("-e", ".[dev]", "mypy", "types-PyYAML", "types-Markdown")
|
|
session.run("mypy")
|
|
|
|
|
|
@session
|
|
def build(session: Session) -> None:
|
|
"""Run unit tests."""
|
|
session.install(
|
|
"nodeenv",
|
|
"git+https://git.collectivit.org/collectivit/jean-web",
|
|
"babel",
|
|
"jinja2"
|
|
)
|
|
|
|
session.run_always("nodeenv", "-p")
|
|
session.run_always("npm", "install", "-g", "sass")
|
|
|
|
session.log("Building css...")
|
|
session.run("npx", "sass", "src/style.scss", "build/style.css", "--style=compressed")
|
|
|
|
session.log("Copying static files to build directory...")
|
|
copytree("src/assets", "build", dirs_exist_ok=True)
|
|
copy("config/.htaccess", "build")
|
|
|
|
with TemporaryDirectory() as locale_dir:
|
|
for locale in _LOCALES:
|
|
output_dir = Path(locale_dir) / locale / "LC_MESSAGES"
|
|
output_dir.mkdir(exist_ok=True, parents=True)
|
|
|
|
session.run(
|
|
"pybabel",
|
|
"compile",
|
|
f"--input-file=locale/{locale}/LC_MESSAGES/site.po",
|
|
f"--output-file={output_dir}/site.mo",
|
|
"--use-fuzzy"
|
|
)
|
|
|
|
session.log("Building website...")
|
|
session.run(
|
|
"jweb", "build",
|
|
env={
|
|
'FROG_LOCALE_DIR': str(locale_dir)
|
|
}
|
|
)
|
|
|
|
@session
|
|
def extract_messages(session: Session) -> None:
|
|
session.install("babel", "jinja2")
|
|
|
|
with TemporaryDirectory() as tmp_dir:
|
|
messages_file = Path(tmp_dir) / "messages.po"
|
|
session.run("pybabel", "extract", "--mapping", "babel.cfg", f"--output-file={messages_file}", ".")
|
|
session.run("pybabel", "update", "--domain=site", f"--input-file={messages_file}", "--output-dir=locale")
|
|
|
|
@session
|
|
def compile_messages(session: Session) -> None:
|
|
session.install("babel", "jinja2")
|
|
|
|
@session()
|
|
def devenv(session: Session) -> None:
|
|
session.install("-e", ".[dev]")
|