From c54b378c62fa6442857ecc94ea7e6fcfd8178590 Mon Sep 17 00:00:00 2001 From: BJ Dierkes Date: Sun, 29 Jul 2018 13:03:00 -0500 Subject: [PATCH] Cleanup Project Template --- Dockerfile | 7 ++-- cement/cli/controllers/base.py | 2 +- .../templates/generate/project/CHANGELOG.md | 5 +++ .../cli/templates/generate/project/Dockerfile | 10 +++-- .../cli/templates/generate/project/Makefile | 31 ++++++++++++++ .../cli/templates/generate/project/README.md | 42 ++++++------------- .../generate/project/docker-compose.yml | 14 ------- .../templates/generate/project/docs/.gitkeep | 0 .../generate/project/requirements-dev.txt | 8 ++++ .../generate/project/tests/conftest.py | 1 + .../generate/project/{{ label }}/bootstrap.py | 5 --- .../generate/project/{{ label }}/main.py | 2 +- docker-compose.yml | 3 +- docker/Dockerfile.dev | 6 +-- 14 files changed, 75 insertions(+), 61 deletions(-) create mode 100644 cement/cli/templates/generate/project/Makefile delete mode 100644 cement/cli/templates/generate/project/docker-compose.yml create mode 100644 cement/cli/templates/generate/project/docs/.gitkeep create mode 100644 cement/cli/templates/generate/project/requirements-dev.txt delete mode 100644 cement/cli/templates/generate/project/{{ label }}/bootstrap.py diff --git a/Dockerfile b/Dockerfile index 82166e8c..76d93184 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ FROM python:3.6-alpine MAINTAINER BJ Dierkes -WORKDIR /app -COPY . /app +ENV PS1="\[\e[0;33m\]|> cement <| \[\e[1;35m\]\W\[\e[0m\] \[\e[0m\]# " +WORKDIR /src +COPY . /src RUN python setup.py install \ - && rm -rf /app + && rm -rf /src WORKDIR / ENTRYPOINT ["/usr/local/bin/cement"] diff --git a/cement/cli/controllers/base.py b/cement/cli/controllers/base.py index 772b3c1e..41281f58 100644 --- a/cement/cli/controllers/base.py +++ b/cement/cli/controllers/base.py @@ -9,7 +9,7 @@ class Base(Controller): class Meta: label = 'base' description = 'Cement Framework Developer Tools' - epilog = 'Example: cement generate app /path/to/myapp' + epilog = 'Example: cement generate project /path/to/myapp' arguments = [ (['-v', '--version'], {'action': 'version', 'version': BANNER}), diff --git a/cement/cli/templates/generate/project/CHANGELOG.md b/cement/cli/templates/generate/project/CHANGELOG.md index e69de29b..d3764655 100644 --- a/cement/cli/templates/generate/project/CHANGELOG.md +++ b/cement/cli/templates/generate/project/CHANGELOG.md @@ -0,0 +1,5 @@ +# {{ name }} Change History + +## 0.0.1 + +Initial release. diff --git a/cement/cli/templates/generate/project/Dockerfile b/cement/cli/templates/generate/project/Dockerfile index 564cc38b..84b9add0 100644 --- a/cement/cli/templates/generate/project/Dockerfile +++ b/cement/cli/templates/generate/project/Dockerfile @@ -1,16 +1,18 @@ FROM python:3.6-alpine MAINTAINER {{ creator }} <{{ creator_email }}> -WORKDIR /app -COPY . /app +ENV PS1="\[\e[0;33m\]|> {{ label }} <| \[\e[1;35m\]\W\[\e[0m\] \[\e[0m\]# " + +WORKDIR /src +COPY . /src RUN apk update && \ apk add git && \ pip install --no-cache-dir -r requirements.txt \ && rm -f /usr/local/lib/python3.6/site-packages/cement.egg-link \ && cd src/cement \ && python setup.py install \ - && cd /app \ + && cd /src \ && rm -rf src/cement \ && python setup.py install -RUN rm -rf /app +RUN rm -rf /src WORKDIR / ENTRYPOINT ["{{ label }}"] diff --git a/cement/cli/templates/generate/project/Makefile b/cement/cli/templates/generate/project/Makefile new file mode 100644 index 00000000..10b3bb3a --- /dev/null +++ b/cement/cli/templates/generate/project/Makefile @@ -0,0 +1,31 @@ +.PHONY: clean virtualenv test docker dist dist-upload + +clean: + find . -name '*.py[co]' -delete + +virtualenv: + virtualenv --prompt '|> {{ label }} <| ' env + env/bin/pip install -r requirements-dev.txt + env/bin/python setup.py develop + @echo + @echo "VirtualENV Setup Complete. Now run: source env/bin/activate" + @echo + +test: + python -m pytest \ + -v \ + --cov={{ label }} \ + --cov-report=term \ + --cov-report=html:coverage-report \ + tests/ + +docker: clean + docker build -t {{ label }}:latest . + +dist: clean + rm -rf dist/* + python setup.py sdist + python setup.py bdist_wheel + +dist-upload: + twine upload dist/* diff --git a/cement/cli/templates/generate/project/README.md b/cement/cli/templates/generate/project/README.md index ce27e04a..22aa02a7 100644 --- a/cement/cli/templates/generate/project/README.md +++ b/cement/cli/templates/generate/project/README.md @@ -10,28 +10,28 @@ $ pip install setup.py ## Development +This project includes a number of helpers in the `Makefile` to streamline common development tasks. + ### Environment Setup -This project includes a basic Docker Compose configuration that will setup a local development environment with all dependencies, and services required for development and testing. +The following demonstrates setting up and working with a development environment: ``` -$ make dev -[...] -|> {{ label }} <| app # -``` +### create a virtualenv for development -The `{{ label }}` command line application is installed in `develop` mode, therefore all changes will be live and can be tested immediately as code is modified. +$ make virtualenv -``` -|> {{ label }} <| app # {{ label }} --help -``` +$ source env/bin/activate -### Running Tests -Execute tests from within the development environment: +### run {{ label }} cli application -``` -|> {{ label }} <| app # make test +$ {{ label }} --help + + +### run pytest / coverage + +$ make test ``` @@ -66,20 +66,4 @@ and can be built with the included `make` helper: $ make docker $ docker run -it {{ label }} --help -usage: {{ label }} [-h] [--debug] [--quiet] [-o {json,yaml}] [-v] {command1} ... - -{{ description }} - -optional arguments: - -h, --help show this help message and exit - --debug toggle debug output - --quiet suppress all output - -o {json,yaml} output handler - -v, --version show program's version number and exit - -sub-commands: - {command1} - command1 example sub command1 - -Usage: {{ title }} command1 --foo bar ``` diff --git a/cement/cli/templates/generate/project/docker-compose.yml b/cement/cli/templates/generate/project/docker-compose.yml deleted file mode 100644 index 972e16ef..00000000 --- a/cement/cli/templates/generate/project/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: "3" -services: - {{ label }}: - image: "{{ label }}:dev" - build: - context: . - dockerfile: Dockerfile - hostname: {{ label }} - stdin_open: true - tty: true - working_dir: '/{{ label }}' - entrypoint: '/bin/ash' - volumes: - - ".:/{{ label }}" diff --git a/cement/cli/templates/generate/project/docs/.gitkeep b/cement/cli/templates/generate/project/docs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/cement/cli/templates/generate/project/requirements-dev.txt b/cement/cli/templates/generate/project/requirements-dev.txt new file mode 100644 index 00000000..f20606ee --- /dev/null +++ b/cement/cli/templates/generate/project/requirements-dev.txt @@ -0,0 +1,8 @@ +-r requirements.txt + +pytest +pytest-cov +coverage +twine>=1.11.0 +setuptools>=38.6.0 +wheel>=0.31.0 diff --git a/cement/cli/templates/generate/project/tests/conftest.py b/cement/cli/templates/generate/project/tests/conftest.py index 6e1fe722..64440e52 100644 --- a/cement/cli/templates/generate/project/tests/conftest.py +++ b/cement/cli/templates/generate/project/tests/conftest.py @@ -21,6 +21,7 @@ def tmp(request): def __init__(self): self.dir = mkdtemp() _, self.file = mkstemp(dir=self.dir) + t = Tmp() yield t diff --git a/cement/cli/templates/generate/project/{{ label }}/bootstrap.py b/cement/cli/templates/generate/project/{{ label }}/bootstrap.py deleted file mode 100644 index acc79a39..00000000 --- a/cement/cli/templates/generate/project/{{ label }}/bootstrap.py +++ /dev/null @@ -1,5 +0,0 @@ - -from .controllers.base import Base - -def load(app): - app.handler.register(Base) diff --git a/cement/cli/templates/generate/project/{{ label }}/main.py b/cement/cli/templates/generate/project/{{ label }}/main.py index 5aa14b79..dc8df2a1 100644 --- a/cement/cli/templates/generate/project/{{ label }}/main.py +++ b/cement/cli/templates/generate/project/{{ label }}/main.py @@ -6,7 +6,7 @@ from .controllers.base import Base # configuration defaults DEFAULTS = init_defaults('{{ label }}') -DEFAULTS['{{ label }}']['{{ foo }}'] = 'bar' +DEFAULTS['{{ label }}']['foo'] = 'bar' class {{ class_name }}(App): diff --git a/docker-compose.yml b/docker-compose.yml index eaff7720..aad5ea48 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,8 @@ services: stdin_open: true tty: true volumes: - - ".:/app" + - '.:/src' + working_dir: '/src' links: - redis:redis - memcached:memcached diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index b075b1e1..43cb5843 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -2,8 +2,8 @@ FROM python:3.6-alpine MAINTAINER BJ Dierkes ENV PS1="\[\e[0;33m\]|> cement <| \[\e[1;35m\]\W\[\e[0m\] \[\e[0m\]# " -WORKDIR /app -COPY requirements-dev.txt /app/ +WORKDIR /src +COPY requirements-dev.txt /src/ RUN apk update \ && apk add libmemcached-dev \ gcc \ @@ -16,7 +16,7 @@ RUN apk update \ git \ && ln -sf /usr/bin/vim /usr/bin/vi \ && pip install --no-cache-dir -r requirements-dev.txt -COPY . /app +COPY . /src COPY docker/vimrc /root/.vimrc RUN python setup.py develop CMD ["/bin/bash"]