#!/usr/bin/env python3 import argparse import logging from aush import ( cd, direnv, django_admin, echo, git, python3, t, uv, ) logging.basicConfig(level=logging.INFO) # parse args parser = argparse.ArgumentParser(description="Start a Python project") parser.add_argument("name", help="The name of the project") parser.add_argument("-d", "--django", action="store_true", help="Add Django to the project") parser.add_argument("-n", "--no-dependencies", action='store_true', help="Don't install any dependencies when creating project") args = parser.parse_args() # initialize project uv.init(args.name, author_from="auto") cd(args.name) # add default dev dependencies if not args.no_dependencies: uv.add('pytest', 'ipython', 'ptpython', 'mypy', 'pudb', dev=True) # set up direnv echo("""export PYTHONPATH="$PWD" export VIRTUAL_ENV=.venv layout python""") >> '.envrc' direnv.allow() # create repo and initial files git.init() echo(f"# {args.name}") >> 'README.md' echo("""[pytest] python_files = *.py norecursedirs = bin """) >> 'pytest.ini' echo("test:\n\tpytest") > "justfile" git.add(all=True) git.commit(m="Initial Python commit") # create project structure if args.django: # add django uv.add("django") uv.add("Werkzeug", "django-debug-toolbar", "django-extensions", dev=True) django_admin.startproject(args.name) cd(args.name) django_manage = python3["manage.py"] django_manage.startapp(f"{args.name}_app") django_manage.migrate() django_manage.createsuperuser( noinput = True, username = "admin", email = git.config(get='user.email') or 'admin@localhost', _env = dict(DJANGO_SUPERUSER_PASSWORD='admin'), ) git.add(all=True) git.commit(m="Add Django") else: # ├── bin # ├── proj # │   └── __init__.py # └── tests # └── __init__.py files = [f'{args.name}/__init__.py', 'tests/__init__.py'] t(*files, 'bin/') git.add(*files, force=True) git.commit(m="Create Python project structure")