59 خطوط
1.6 KiB
Python
59 خطوط
1.6 KiB
Python
import sys
|
|
from pathlib import Path
|
|
|
|
import caseconverter
|
|
import click
|
|
from jinja2 import Environment, FileSystemLoader
|
|
|
|
|
|
@click.command()
|
|
@click.argument("name")
|
|
@click.option("--debug/--no-debug", is_flag=True, default=True, help="Enable debug mode.")
|
|
def main(name: str, debug: bool):
|
|
"""
|
|
This is a script to configure the project.
|
|
|
|
It's intended to be called by the `ato create` command.
|
|
|
|
This script is intended to be run in the same environment
|
|
as the ato CLI, so it's expecting to have access to the
|
|
same packages and tools; Jinja, etc...
|
|
"""
|
|
|
|
# Common variables
|
|
extended_globals = {
|
|
"name": name,
|
|
"caseconverter": caseconverter,
|
|
"repo_root": Path(__file__).parent,
|
|
}
|
|
|
|
# Load templates
|
|
env = Environment(loader=FileSystemLoader("."))
|
|
|
|
for template_path in Path(".").glob("**/*.j2"):
|
|
# Figure out the target path and variables and what not
|
|
target_path = template_path.parent / template_path.name.replace(
|
|
".j2", ""
|
|
).replace("__name__", caseconverter.kebabcase(name))
|
|
|
|
extended_globals["rel_path"] = target_path
|
|
extended_globals["python_path"] = sys.executable
|
|
|
|
template = env.get_template(str(template_path), globals=extended_globals)
|
|
|
|
# Make the noise!
|
|
with target_path.open("w") as f:
|
|
for chunk in template.generate():
|
|
f.write(chunk)
|
|
|
|
# Remove the template
|
|
if not debug:
|
|
template_path.unlink()
|
|
|
|
# Remove this script
|
|
if not debug:
|
|
Path("configure.py").unlink()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() # pylint: disable=no-value-for-parameter
|