diff --git a/README.md b/README.md index 3bca5cd278cfb8a589db6400de0911eb687b1a8f..339347ebb749962de19ebfa5f998807161852c9e 100644 --- a/README.md +++ b/README.md @@ -49,21 +49,26 @@ This project can handle arguments passed through command line. ```shell $ python -m fastapi_template --help -usage: FastAPI template [-h] [--name PROJECT_NAME] [--description PROJECT_DESCRIPTION] - [--db {DatabaseType.none,DatabaseType.sqlite,DatabaseType.mysql,DatabaseType.postgresql}] - [--ci {CIType.none,CIType.gitlab_ci,CIType.github}] [--redis] [--alembic] [--kube] [--force] +usage: FastAPI template [-h] [--name PROJECT_NAME] + [--description PROJECT_DESCRIPTION] + [--db {none,sqlite,mysql,postgresql}] + [--ci {none,gitlab,github}] [--redis] [--alembic] + [--kube] [--dummy] [--routers] [--force] optional arguments: -h, --help show this help message and exit --name PROJECT_NAME Name of your awesome project --description PROJECT_DESCRIPTION Project description - --db {DatabaseType.none,DatabaseType.sqlite,DatabaseType.mysql,DatabaseType.postgresql} + --db {none,sqlite,mysql,postgresql} Database - --ci {CIType.none,CIType.gitlab_ci,CIType.github} + --ci {none,gitlab,github} Choose CI support --redis Add redis support --alembic Add alembic support --kube Add kubernetes configs + --dummy, --dummy-model + Add dummy model + --routers Add exmaple routers --force Owerrite directory if it exists ``` diff --git a/fastapi_template/cli.py b/fastapi_template/cli.py index b715f3980bf1e26d8dc1f667507f582906d323d2..b09ec91604ea8c44809eb33cbe49ea3cb85f1deb 100644 --- a/fastapi_template/cli.py +++ b/fastapi_template/cli.py @@ -41,7 +41,6 @@ DB_INFO = { ), } - def parse_args(): parser = ArgumentParser( prog="FastAPI template", @@ -55,14 +54,15 @@ def parse_args(): parser.add_argument( "--description", type=str, + default=None, dest="project_description", help="Project description", ) parser.add_argument( "--db", help="Database", - type=DatabaseType, - choices=list(DatabaseType), + type=str, + choices=list(map(attrgetter("value"), DatabaseType)), default=None, dest="db", ) @@ -70,8 +70,8 @@ def parse_args(): "--ci", help="Choose CI support", default=None, - type=CIType, - choices=list(CIType), + type=str, + choices=list(map(attrgetter("value"), CIType)), dest="ci_type", ) parser.add_argument( @@ -95,6 +95,21 @@ def parse_args(): default=None, dest="enable_kube", ) + parser.add_argument( + "--dummy", + "--dummy-model", + help="Add dummy model", + action="store_true", + default=None, + dest="add_dummy", + ) + parser.add_argument( + "--routers", + help="Add exmaple routers", + action="store_true", + default=None, + dest="enable_routers", + ) parser.add_argument( "--force", help="Owerrite directory if it exists", @@ -116,12 +131,21 @@ def ask_features(current_context: BuilderContext) -> BuilderContext: "name": "enable_kube", "value": current_context.enable_kube, }, + "Demo routers": { + "name": "enable_routers", + "value": current_context.enable_routers, + }, } if current_context.db != DatabaseType.none: features["Alembic migrations"] = { "name": "enable_alembic", "value": current_context.enable_alembic, } + features["Add dummy model"] = { + "name": "add_dummy", + "value": current_context.add_dummy + } + checkbox_values = [] for feature_name, feature in features.items(): if feature["value"] is None: diff --git a/fastapi_template/input_model.py b/fastapi_template/input_model.py index 5cbaf1fb0378bd572eef4f3f3363851c0c9dc406..12d705621a1c5a8b2e4e20bff8987f2091fa5950 100644 --- a/fastapi_template/input_model.py +++ b/fastapi_template/input_model.py @@ -38,6 +38,8 @@ class BuilderContext(BaseModel): ci_type: Optional[CIType] enable_alembic: Optional[bool] enable_kube: Optional[bool] + enable_routers: Optional[bool] + add_dummy: Optional[bool] = False force: bool = False class Config: diff --git a/fastapi_template/template/cookiecutter.json b/fastapi_template/template/cookiecutter.json index 1b3d564524468fa1cfa76841e535e03e7b429fc8..49a089ac1b5a271d39855eb1780ca32e045dd3bb 100644 --- a/fastapi_template/template/cookiecutter.json +++ b/fastapi_template/template/cookiecutter.json @@ -23,6 +23,12 @@ "kube_name": { "type": "string" }, + "enable_routers": { + "type": "bool" + }, + "add_dummy": { + "type": "bool" + }, "_extensions": [ "cookiecutter.extensions.RandomStringExtension" ] diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/conditional_files.json b/fastapi_template/template/{{cookiecutter.project_name}}/conditional_files.json index 0ce5340ca772c7496943e85d39b918394ecead24..af6d02768c5843664a6a8b9b48ae47ff9409d168 100644 --- a/fastapi_template/template/{{cookiecutter.project_name}}/conditional_files.json +++ b/fastapi_template/template/{{cookiecutter.project_name}}/conditional_files.json @@ -1,51 +1,68 @@ { - "Redis": { - "enabled": "{{cookiecutter.enable_redis}}", - "resources": [ - "{{cookiecutter.project_name}}/web/api/redis", - "{{cookiecutter.project_name}}/services/redis", - "deploy/kube/redis.yml" - ] - }, - "Kubernetes": { - "enabled": "{{cookiecutter.enable_kube}}", - "resources": [ - "deploy/kube" - ] - }, - "Database support": { - "enabled": "{{cookiecutter.db_info.name != 'none'}}", - "resources": [ - "{{cookiecutter.project_name}}/web/api/dummy", - "{{cookiecutter.project_name}}/db", - "{{cookiecutter.project_name}}/conftest.py", - "deploy/kube/db.yml", - "alembic.ini" - ] - }, - "Postgres and MySQL support": { - "enabled": "{{cookiecutter.db_info.name != 'sqlite'}}", - "resources": [ - "deploy/kube/db.yml" - ] - }, - "Alembic": { - "enabled": "{{cookiecutter.enable_alembic}}", - "resources": [ - "alembic.ini", - "{{cookiecutter.project_name}}/db/migrations" - ] - }, - "Gitlab CI": { - "enabled": "{{cookiecutter.ci_type == 'CIType.gitlab_ci'}}", - "resources": [ - ".gitlab-ci.yml" - ] - }, - "Github CI": { - "enabled": "{{cookiecutter.ci_type == 'CIType.github'}}", - "resources": [ - ".github" - ] - } + "Redis": { + "enabled": "{{cookiecutter.enable_redis}}", + "resources": [ + "{{cookiecutter.project_name}}/web/api/redis", + "{{cookiecutter.project_name}}/services/redis", + "deploy/kube/redis.yml" + ] + }, + "Kubernetes": { + "enabled": "{{cookiecutter.enable_kube}}", + "resources": [ + "deploy/kube" + ] + }, + "Database support": { + "enabled": "{{cookiecutter.db_info.name != 'none'}}", + "resources": [ + "{{cookiecutter.project_name}}/web/api/dummy", + "{{cookiecutter.project_name}}/db", + "{{cookiecutter.project_name}}/conftest.py", + "deploy/kube/db.yml", + "alembic.ini" + ] + }, + "Postgres and MySQL support": { + "enabled": "{{cookiecutter.db_info.name != 'sqlite'}}", + "resources": [ + "deploy/kube/db.yml" + ] + }, + "Alembic": { + "enabled": "{{cookiecutter.enable_alembic}}", + "resources": [ + "alembic.ini", + "{{cookiecutter.project_name}}/db/migrations" + ] + }, + "Gitlab CI": { + "enabled": "{{cookiecutter.ci_type == 'CIType.gitlab_ci'}}", + "resources": [ + ".gitlab-ci.yml" + ] + }, + "Github CI": { + "enabled": "{{cookiecutter.ci_type == 'CIType.github'}}", + "resources": [ + ".github" + ] + }, + "Routers": { + "enabled": "{{cookiecutter.enable_routers}}", + "resources": [ + "{{cookiecutter.project_name}}/web/api/echo", + "{{cookiecutter.project_name}}/web/api/dummy", + "{{cookiecutter.project_name}}/web/api/redis" + ] + }, + "Dummy model": { + "enabled": "{{cookiecutter.add_dummy}}", + "resources": [ + "{{cookiecutter.project_name}}/web/api/dummy", + "{{cookiecutter.project_name}}/db/dao", + "{{cookiecutter.project_name}}/db/models/dummy_model.py", + "{{cookiecutter.project_name}}/db/migrations/versions/2021-08-16-16-55_2b7380507a71.py" + ] + } } diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/router.py b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/router.py index 58cb9c2a8480ea4570c71effb29aa08a16b73aa6..35e03616f4bf843cbf531e2426348ca8452adc04 100644 --- a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/router.py +++ b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/router.py @@ -1,19 +1,26 @@ from fastapi.routing import APIRouter +{%- if cookiecutter.enable_routers == "True" %} from {{cookiecutter.project_name}}.web.api import echo - {%- if cookiecutter.db_info.name != "none" %} +{%- if cookiecutter.add_dummy == 'True' %} from {{cookiecutter.project_name}}.web.api import dummy {%- endif %} +{%- endif %} {%- if cookiecutter.enable_redis == "True" %} from {{cookiecutter.project_name}}.web.api import redis {%- endif %} +{%- endif %} api_router = APIRouter() +{%- if cookiecutter.enable_routers == "True" %} api_router.include_router(echo.router, prefix="/echo", tags=["echo"]) {%- if cookiecutter.db_info.name != "none" %} +{%- if cookiecutter.add_dummy == 'True' %} api_router.include_router(dummy.router, prefix="/dummy", tags=["dummy"]) {%- endif %} +{%- endif %} {%- if cookiecutter.enable_redis == "True" %} api_router.include_router(redis.router, prefix="/redis", tags=["redis"]) {%- endif %} +{%- endif %} diff --git a/pyproject.toml b/pyproject.toml index c8e94d33edf8ff8e7997fb0c6390d12255336bfd..430cd17e881f5a989dd8d7c92e994115b9c63011 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fastapi_template" -version = "2.1.6" +version = "2.2.0" description = "Feature-rich robust FastAPI template" authors = ["Pavel Kirilin <win10@list.ru>"] packages = [