diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..4899c4f9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,32 @@ +**Note: for support questions, please use the `cookiecutter-django` tag on stackoverflow**. This repository's issues are reserved for feature requests and bug reports. If you need quick professional paid support for your project, contact support@cookiecutter.io. + +* **I'm submitting a ... ** + - [ ] bug report + - [ ] feature request + - [ ] support request => Please do not submit support request here, see note at the top of this template. + + +* **Do you want to request a *feature* or report a *bug*?** + + + +* **What is the current behavior?** + + + +* **If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem** + + +* **What is the expected behavior?** + + + +* **What is the motivation / use case for changing the behavior?** + + + +* **Please tell us about your environment:** + + + +* **Other information** (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, gitter, etc) diff --git a/.gitignore b/.gitignore index 393a1968..1f80de17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,44 +1,228 @@ -### OSX ### -.DS_Store -.AppleDouble -.LSOverride +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class -### SublimeText ### -# cache files for sublime text +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage.* +.cache/ +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# Environments +.env +.venv +env/ +venv/ +ENV/ + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + + +### Linux template +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + + +### VisualStudioCode template +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + + +### Windows template +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + + +### SublimeText template +# Cache files for Sublime Text *.tmlanguage.cache *.tmPreferences.cache *.stTheme.cache -# workspace files are user-specific +# Workspace files are user-specific *.sublime-workspace -# project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using SublimeText +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text # *.sublime-project -# sftp configuration file +# SFTP configuration file sftp-config.json -# Generated files -*.log -*.pot -*.pyc -.idea -_build -*.egg-info/ +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache -# Project Specific Stuff -local_settings.py -project_slug -my_test_project/* +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings -# Generated when running py.test for the Cookiecutter Django generation tests -.cache/ -# Generated when running celery beat -celerybeat-schedule.db +### macOS template +# General +*.DS_Store +.AppleDouble +.LSOverride -# Unit test / coverage reports -.coverage -.tox -.cache +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### Vim template +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] + +# Session +Session.vim + +# Temporary +.netrwhist +# Auto-generated tag files +tags + + +### VirtualEnv template +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +pip-selfcheck.json + + +# Even though the project might be opened and edited +# in any of the JetBrains IDEs, it makes no sence whatsoever +# to 'run' anything within it since any particular cookiecutter +# is declarative by nature. +.idea/ diff --git a/.travis.yml b/.travis.yml index f4a2e41c..8ca40c77 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,6 @@ language: python python: 3.5 env: - - TOX_ENV=py27 - TOX_ENV=py34 - TOX_ENV=py35 diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 9acc8328..efff1fad 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -39,9 +39,9 @@ To run all tests using various versions of python in virtualenvs defined in tox. It is possible to tests with some versions of python, to do this the command is:: - $ tox -e py27,py34 + $ tox -e py34,py35 -Will run py.test with the python2.7, and python3.4 interpreters, for +Will run py.test with the python3.4, and python3.5 interpreters, for example. To run a particular test with tox for against your current Python version:: diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 807c4d8a..e46c5209 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -16,6 +16,7 @@ Fábio C. Barrionuevo da Luz `@luzfcb`_ @luzfcb Saurabh Kumar `@theskumar`_ @_theskumar Jannis Gebauer `@jayfk`_ Burhan Khalid `@burhan`_ @burhan +Shupeyko Nikita `@webyneter`_ @webyneter =========================== ============= =========== *Audrey is also the creator of Cookiecutter. Audrey and @@ -26,6 +27,7 @@ Daniel are on the Cookiecutter core team.* .. _@theskumar: https://github.com/theskumar .. _@audreyr: https://github.com/audreyr .. _@jayfk: https://github.com/jayfk +.. _@webyneter: https://github.com/webyneter Other Contributors ------------------ @@ -54,12 +56,15 @@ Listed in alphabetical order. Areski Belaid `@areski`_ Ashley Camba Barclay Gauld `@yunti`_ + Ben Warren `@bwarren2` Ben Lopatin Benjamin Abel + Bert de Miranda `@bertdemiranda`_ Bo Lopker `@blopker`_ Bouke Haarsma Brent Payne `@brentpayne`_ @brentpayne - Burhan Khalid `@burhan`_ @burhan + Bruno Alla               `@browniebroke`_ @_BrunoAlla + Burhan Khalid            `@burhan`_                   @burhan Catherine Devlin `@catherinedevlin`_ Cédric Gaspoz `@cgaspoz`_ Chris Curvey `@ccurvey`_ @@ -84,6 +89,7 @@ Listed in alphabetical order. Felipe Arruda `@arruda`_ Garry Cairns `@garry-cairns`_ Garry Polley `@garrypolley`_ + Hamish Durkin `@durkode`_ Harry Percival `@hjwp`_ Henrique G. G. Pereira `@ikkebr`_ Ian Lee `@IanLee1521`_ @@ -140,6 +146,7 @@ Listed in alphabetical order. Travis McNeill `@Travistock`_ @tavistock_esq Vitaly Babiy Vivian Guillen `@viviangb`_ + Wan Liuyang `@sfdye`_ @sfdye Will Farley `@goldhand`_ @g01dhand William Archinal `@archinal`_ Yaroslav Halchenko @@ -160,6 +167,7 @@ Listed in alphabetical order. .. _@bloodpet: https://github.com/bloodpet .. _@blopker: https://github.com/blopker .. _@bogdal: https://github.com/bogdal +.. _@browniebroke: https://github.com/browniebroke .. _@burhan: https://github.com/burhan .. _@c-rhodes: https://github.com/c-rhodes .. _@caffodian: https://github.com/caffodian @@ -175,6 +183,7 @@ Listed in alphabetical order. .. _@dhepper: https://github.com/dhepper .. _@dot2dotseurat: https://github.com/dot2dotseurat .. _@dsclementsen: https://github.com/dsclementsen +.. _@durkode: https://github.com/durkode .. _@epileptic-fish: https://gihub.com/epileptic-fish .. _@eraldo: https://github.com/eraldo .. _@eriol: https://github.com/eriol @@ -215,6 +224,7 @@ Listed in alphabetical order. .. _@shireenrao: https://github.com/shireenrao .. _@webyneter: https://github.com/webyneter .. _@show0k: https://github.com/show0k +.. _@sfdye: https://github.com/sfdye .. _@shultz: https://github.com/shultz .. _@siauPatrick: https://github.com/siauPatrick .. _@slafs: https://github.com/slafs diff --git a/README.rst b/README.rst index 0817c6b8..2b239f78 100644 --- a/README.rst +++ b/README.rst @@ -1,22 +1,24 @@ Cookiecutter Django ======================= -.. image:: https://pyup.io/repos/github/pydanny/cookiecutter-django/shield.svg - :target: https://pyup.io/repos/github/pydanny/cookiecutter-django/ - :alt: Updates - .. image:: https://travis-ci.org/pydanny/cookiecutter-django.svg?branch=master - :target: https://travis-ci.org/pydanny/cookiecutter-django?branch=master - :alt: Build Status + :target: https://travis-ci.org/pydanny/cookiecutter-django?branch=master + :alt: Build Status + +.. image:: https://pyup.io/repos/github/pydanny/cookiecutter-django/shield.svg + :target: https://pyup.io/repos/github/pydanny/cookiecutter-django/ + :alt: Updates .. image:: https://badges.gitter.im/Join Chat.svg - :target: https://gitter.im/pydanny/cookiecutter-django?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge + :target: https://gitter.im/pydanny/cookiecutter-django?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge Powered by Cookiecutter_, Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly. * Documentation: https://cookiecutter-django.readthedocs.io/en/latest/ * See Troubleshooting_ for common errors and obstacles -* If you have problems with Cookiecutter Django, please open issues_ before sending emails to the maintainers. You will get a much, MUCH faster response. +* If you have problems with Cookiecutter Django, please open issues_ don't send emails to the maintainers. +* Need quick professional paid support? Contact `support@cookiecutter.io`_. This includes configuring your servers, +fixing bugs, reviewing your code and everything in between. .. _cookiecutter: https://github.com/audreyr/cookiecutter @@ -24,13 +26,15 @@ Powered by Cookiecutter_, Cookiecutter Django is a framework for jumpstarting pr .. _528: https://github.com/pydanny/cookiecutter-django/issues/528#issuecomment-212650373 .. _issues: https://github.com/pydanny/cookiecutter-django/issues/new +.. _support@cookiecutter.io: support@cookiecutter.io Features --------- * For Django 1.10 +* Works with Python 3.4.x or 3.5.x. Python 3.6 is experimental * Renders Django projects with 100% starting test coverage -* Twitter Bootstrap_ v4.0.0 - `alpha 4`_ (`maintained Foundation fork`_ also available) +* Twitter Bootstrap_ v4.0.0 - alpha 6 (`maintained Foundation fork`_ also available) * 12-Factor_ based settings via django-environ_ * Secure by default. We believe in SSL. * Optimized development and production settings @@ -39,10 +43,9 @@ Features * Grunt build for compass and livereload * Send emails via Anymail_ (using Mailgun_ by default, but switchable) * Media storage using Amazon S3 -* Docker support using docker-compose_ for development and production +* Docker support using docker-compose_ for development and production (using Caddy_ with LetsEncrypt_ support) * Procfile_ for deploying to Heroku * Instructions for deploying to PythonAnywhere_ -* Works with Python 2.7.x or 3.5.x * Run tests with unittest or py.test * Customizable PostgreSQL version * Experimental support for Amazon Elastic Beanstalk @@ -61,7 +64,6 @@ Optional Integrations * Integration with Sentry_ for error logging * Integration with Opbeat_ for performance monitoring -.. _`alpha 4`: http://blog.getbootstrap.com/2016/09/05/bootstrap-4-alpha-4/ .. _Bootstrap: https://github.com/twbs/bootstrap .. _django-environ: https://github.com/joke2k/django-environ .. _12-Factor: http://12factor.net/ @@ -77,15 +79,46 @@ Optional Integrations .. _docker-compose: https://github.com/docker/compose .. _Opbeat: https://opbeat.com/ .. _PythonAnywhere: https://www.pythonanywhere.com/ - +.. _Caddy: https://caddyserver.com/ +.. _LetsEncrypt: https://letsencrypt.org/ Constraints ----------- * Only maintained 3rd party libraries are used. * Uses PostgreSQL everywhere (9.2+) -* Environment variables for configuration (This won't work with Apache/mod_wsgi). +* Environment variables for configuration (This won't work with Apache/mod_wsgi except on AWS ELB). +Support this Project! +---------------------- + +This project is run by volunteers. Please support them in their efforts to maintain and improve Cookiecutter Django: + +* https://www.patreon.com/danielroygreenfeld: Project lead. Expertise in AWS ELB and Django. + +Projects that provide financial support to the maintainers: + +Two Scoops of Django 1.11 +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. image:: https://cdn.shopify.com/s/files/1/0304/6901/products/tsd-111-alpha_medium.jpg?v=1499531513 + :name: Two Scoops of Django 1.11 Cover + :align: center + :alt: Two Scoops of Django + :target: http://twoscoopspress.org/products/two-scoops-of-django-1-11 + +Two Scoops of Django is the best dairy-themed Django reference in the universe + +pyup +~~~~~~~~~~~~~~~~~~ + +.. image:: https://pyup.io/static/images/logo.png + :name: pyup + :align: center + :alt: pyup + :target: https://pyup.io/ + +Pyup brings you automated security and dependency updates used by Google and other organizations. Free for open source projects! Usage ------ @@ -128,7 +161,6 @@ Answer the prompts with your own desired options_. For example:: use_opbeat [n]: y use_pycharm [n]: y windows [n]: n - use_python3 [y]: y use_docker [y]: n use_heroku [n]: y use_compressor [n]: y @@ -143,7 +175,6 @@ Answer the prompts with your own desired options_. For example:: 2 - Grunt 3 - None Choose from 1, 2, 3, 4 [1]: 1 - use_lets_encrypt [n]: n Select open_source_license: 1 - MIT 2 - BSD @@ -260,31 +291,5 @@ Code of Conduct Everyone interacting in the Cookiecutter project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. -Support This Project ---------------------------- - -This project is maintained by volunteers. Support their efforts by spreading the word about: - -Two Scoops Press -~~~~~~~~~~~~~~~~~~ - -.. image:: https://cdn.shopify.com/s/files/1/0304/6901/t/2/assets/logo.png?11985289740589874793 - :name: Two Scoops Press - :align: center - :alt: Two Scoops Press - :target: https://twoscoopspress.com - -Two Scoops Press brings you the best dairy-themed Django references in the universe - -pyup -~~~~~~~~~~~~~~~~~~ - -.. image:: https://pyup.io/static/images/logo.png - :name: pyup - :align: center - :alt: pyup - :target: https://pyup.io/ - -Pyup brings you automated security and dependency updates used by Google and other organizations. Free for open source projects! .. _`PyPA Code of Conduct`: https://www.pypa.io/en/latest/code-of-conduct/ diff --git a/cookiecutter.json b/cookiecutter.json index 0bc2b90e..8addeead 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -14,13 +14,12 @@ "use_opbeat": "n", "use_pycharm": "n", "windows": "n", - "use_python3": "y", "use_docker": "n", "use_heroku": "n", "use_elasticbeanstalk_experimental": "n", "use_compressor": "n", "postgresql_version": ["9.6", "9.5", "9.4", "9.3", "9.2"], "js_task_runner": ["Gulp", "Grunt", "None"], - "use_lets_encrypt": "n", + "custom_bootstrap_compilation": "n", "open_source_license": ["MIT", "BSD", "GPLv3", "Apache Software License 2.0", "Not open source"] } diff --git a/docs/conf.py b/docs/conf.py index 293d0fc1..f8810ca7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -# # cookiecutter-django documentation build configuration file. # # This file is execfile()d with the current directory set to its containing dir. @@ -10,8 +8,6 @@ # All configuration values have a default; values that are commented out # serve to show the default. -from __future__ import unicode_literals - from datetime import datetime import os import sys diff --git a/docs/deployment-on-pythonanywhere.rst b/docs/deployment-on-pythonanywhere.rst index 66117072..07b46bc0 100644 --- a/docs/deployment-on-pythonanywhere.rst +++ b/docs/deployment-on-pythonanywhere.rst @@ -35,7 +35,7 @@ Make sure your project is fully commited and pushed up to Bitbucket or Github or git clone # you can also use hg cd my-project-name - mkvirtualenv --python=/usr/bin/python3.5 my-project-name # or python2.7, etc + mkvirtualenv --python=/usr/bin/python3.5 my-project-name pip install -r requirements/production.txt # may take a few minutes diff --git a/docs/deployment-with-docker.rst b/docs/deployment-with-docker.rst index 5025cdd3..fb383c3c 100644 --- a/docs/deployment-with-docker.rst +++ b/docs/deployment-with-docker.rst @@ -12,12 +12,12 @@ Prerequisites Understand the Compose Setup -------------------------------- -Before you start, check out the `docker-compose.yml` file in the root of this project. This is where each component +Before you start, check out the `production.yml` file in the root of this project. This is where each component of this application gets its configuration from. Notice how it provides configuration for these services: * `postgres` service that runs the database * `redis` for caching -* `nginx` as reverse proxy +* `caddy` as webserver * `django` is the Django project run by gunicorn If you chose the `use_celery` option, there are two more services: @@ -25,10 +25,6 @@ If you chose the `use_celery` option, there are two more services: * `celeryworker` which runs the celery worker process * `celerybeat` which runs the celery beat process -If you chose the `use_letsencrypt` option, you also have: - -* `certbot` which keeps your certs from letsencrypt up-to-date - Populate .env With Your Environment Variables --------------------------------------------- @@ -37,6 +33,15 @@ root directory of this project as a starting point. Add your own variables to th file won't be tracked by git by default so you'll have to make sure to use some other mechanism to copy your secret if you are relying solely on git. +It is **highly recommended** that before you build your production application, you set your POSTGRES_USER value here. This will create a non-default user for the postgres image. If you do not set this user before building the application, the default user 'postgres' will be created, and this user will not be able to create or restore backups. + +To obtain logs and information about crashes in a production setup, make sure that you have access to an external Sentry instance (e.g. by creating an account with `sentry.io`_), and set the `DJANGO_SENTRY_DSN` variable. This should be enough to report crashes to Sentry. + +You will probably also need to setup the Mail backend, for example by adding a `Mailgun`_ API key and a `Mailgun`_ sender domain, otherwise, the account creation view will crash and result in a 500 error when the backend attempts to send an email to the account owner. + +.. _sentry.io: https://sentry.io/welcome +.. _Mailgun: https://mailgun.com + HTTPS is on by default ---------------------- @@ -46,68 +51,26 @@ It is always better to deploy a site behind HTTPS and will become crucial as the * In the `.env.example`, we have made it simpler for you to change the default `Django Admin` into a custom name through an environmental variable. This should make it harder to guess the access to the admin panel. -* If you are not using a subdomain of the domain name set in the project, then remember to put the your staging/production IP address in the ``ALLOWED_HOSTS``_ environment variable before you deploy your website. Failure to do this will mean you will not have access to your website through the HTTP protocol. +* If you are not using a subdomain of the domain name set in the project, then remember to put the your staging/production IP address in the :code:`DJANGO_ALLOWED_HOSTS` environment variable (see :ref:`settings`) before you deploy your website. Failure to do this will mean you will not have access to your website through the HTTP protocol. -* Access to the Django admin is set up by default to require HTTPS in production or once *live*. We recommend that you look into setting up the *Certbot and Let's Encrypt Setup* mentioned below or another HTTPS certification service. +* Access to the Django admin is set up by default to require HTTPS in production or once *live*. -Optional: nginx-proxy Setup ---------------------------- -By default, the application is configured to listen on all interfaces on port 80. If you want to change that, open the -`docker-compose.yml` file and replace `0.0.0.0` with your own ip. +HTTPS is configured by default +------------------------------ -If you are using `nginx-proxy`_ to run multiple application stacks on one host, remove the port setting entirely and add `VIRTUAL_HOST=example.com` to your env file. Here, replace example.com with the value you entered for `domain_name`. +The Caddy webserver used in the default configuration will get you a valid certificate from Lets Encrypt and update it automatically. All you need to do to enable this is to make sure that your DNS records are pointing to the server Caddy runs on. -This pass all incoming requests on `nginx-proxy`_ to the nginx service your application is using. +You can read more about this here at `Automatic HTTPS`_ in the Caddy docs. + +.. _Automatic HTTPS: https://caddyserver.com/docs/automatic-https -.. _nginx-proxy: https://github.com/jwilder/nginx-proxy Optional: Postgres Data Volume Modifications --------------------------------------------- Postgres is saving its database files to the `postgres_data` volume by default. Change that if you want something else and make sure to make backups since this is not done automatically. -Optional: Certbot and Let's Encrypt Setup ------------------------------------------- - -If you chose `use_letsencrypt` and will be using certbot for https, you must do the following before running anything with docker-compose: - -Replace dhparam.pem.example with a generated dhparams.pem file before running anything with docker-compose. You can generate this on ubuntu or OS X by running the following in the project root: - -:: - - $ openssl dhparam -out /path/to/project/compose/nginx/dhparams.pem 2048 - -If you would like to add additional subdomains to your certificate, you must add additional parameters to the certbot command in the `docker-compose.yml` file: - -Replace: - -:: - - command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} --text --agree-tos --email mjsisley@relawgo.com --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01" - -With: - -:: - - command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} -d www.{{ cookiecutter.domain_name }} -d etc.{{ cookiecutter.domain_name }} --text --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01" - -Please be cognizant of Certbot/Letsencrypt certificate requests limits when getting this set up. The provide a test server that does not count against the limit while you are getting set up. - -The certbot certificates expire after 3 months. -If you would like to set up autorenewal of your certificates, the following commands can be put into a bash script: - -:: - - #!/bin/bash - cd - docker-compose run --rm --name certbot certbot bash -c "sleep 6 && certbot certonly --standalone -d {{ cookiecutter.domain_name }} --text --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01" - docker exec pearl_nginx_1 nginx -s reload - -And then set a cronjob by running `crontab -e` and placing in it (period can be adjusted as desired):: - - 0 4 * * 1 /path/to/bashscript/renew_certbot.sh - Run your app with docker-compose -------------------------------- @@ -116,40 +79,40 @@ directory. You'll need to build the stack first. To do that, run:: - docker-compose build + docker-compose -f production.yml build Once this is ready, you can run it with:: - docker-compose up + docker-compose -f production.yml up To run a migration, open up a second terminal and run:: - docker-compose run django python manage.py migrate + docker-compose -f production.yml run django python manage.py migrate To create a superuser, run:: - docker-compose run django python manage.py createsuperuser + docker-compose -f production.yml run django python manage.py createsuperuser If you need a shell, run:: - docker-compose run django python manage.py shell + docker-compose -f production.yml run django python manage.py shell To get an output of all running containers. To check your logs, run:: - docker-compose logs + docker-compose -f production.yml logs If you want to scale your application, run:: - docker-compose scale django=4 - docker-compose scale celeryworker=2 + docker-compose -f production.yml scale django=4 + docker-compose -f production.yml scale celeryworker=2 -.. warning:: Don't run the scale command on postgres, celerybeat, certbot, or nginx. +.. warning:: Don't run the scale command on postgres, celerybeat, or caddy. If you have errors, you can always check your stack with `docker-compose`. Switch to your projects root directory and run:: - docker-compose ps + docker-compose -f production.yml ps Supervisor Example @@ -157,12 +120,12 @@ Supervisor Example Once you are ready with your initial setup, you want to make sure that your application is run by a process manager to survive reboots and auto restarts in case of an error. You can use the process manager you are most familiar with. All -it needs to do is to run `docker-compose up` in your projects root directory. +it needs to do is to run `docker-compose -f production.yml up` in your projects root directory. If you are using `supervisor`, you can use this file as a starting point:: [program:{{cookiecutter.project_slug}}] - command=docker-compose up + command=docker-compose -f production.yml up directory=/path/to/{{cookiecutter.project_slug}} redirect_stderr=true autostart=true diff --git a/docs/developing-locally-docker.rst b/docs/developing-locally-docker.rst index 19c24f8e..99622c3c 100644 --- a/docs/developing-locally-docker.rst +++ b/docs/developing-locally-docker.rst @@ -16,12 +16,13 @@ If you don't already have it installed, follow the instructions for your OS: - On Mac OS X, you'll need `Docker for Mac`_ - On Windows, you'll need `Docker for Windows`_ - On Linux, you'll need `docker-engine`_ + .. _`Docker for Mac`: https://docs.docker.com/engine/installation/mac/ .. _`Docker for Windows`: https://docs.docker.com/engine/installation/windows/ .. _`docker-engine`: https://docs.docker.com/engine/installation/ Attention Windows users -------------- +----------------------- Currently PostgreSQL (``psycopg2`` python package) is not installed inside Docker containers for Windows users, while it is required by the generated Django project. To fix this, add ``psycopg2`` to the list of requirements inside ``requirements/base.txt``:: @@ -36,9 +37,9 @@ Build the Stack This can take a while, especially the first time you run this particular command on your development system:: - $ docker-compose -f dev.yml build + $ docker-compose -f local.yml build -If you want to build the production environment you don't have to pass an argument -f, it will automatically use docker-compose.yml. +If you want to build the production environment you use ``production.yml`` as -f argument (``docker-compose.yml`` or ``docker-compose.yaml`` are the defaults). Boot the System --------------- @@ -50,11 +51,11 @@ runs will occur quickly. Open a terminal at the project root and run the following for local development:: - $ docker-compose -f dev.yml up + $ docker-compose -f local.yml up -You can also set the environment variable ``COMPOSE_FILE`` pointing to ``dev.yml`` like this:: +You can also set the environment variable ``COMPOSE_FILE`` pointing to ``local.yml`` like this:: - $ export COMPOSE_FILE=dev.yml + $ export COMPOSE_FILE=local.yml And then run:: @@ -64,24 +65,24 @@ Running management commands ~~~~~~~~~~~~~~~~~~~~~~~~~~~ As with any shell command that we wish to run in our container, this is done -using the ``docker-compose run`` command. +using the ``docker-compose -f local.yml run`` command. To migrate your app and to create a superuser, run:: - $ docker-compose -f dev.yml run django python manage.py migrate - $ docker-compose -f dev.yml run django python manage.py createsuperuser + $ docker-compose -f local.yml run django python manage.py migrate + $ docker-compose -f local.yml run django python manage.py createsuperuser Here we specify the ``django`` container as the location to run our management commands. Add your Docker development server IP ------------------------------------- +------------------------------------- When ``DEBUG`` is set to `True`, the host is validated against ``['localhost', '127.0.0.1', '[::1]']``. This is adequate when running a ``virtualenv``. For Docker, in the ``config.settings.local``, add your host development server IP to ``INTERNAL_IPS`` or ``ALLOWED_HOSTS`` if the variable exists. Production Mode ~~~~~~~~~~~~~~~ -Instead of using `dev.yml`, you would use `docker-compose.yml`. +Instead of using `local.yml`, you would use `production.yml`. Other Useful Tips ----------------- @@ -103,7 +104,7 @@ If you want to run the stack in detached mode (in the background), use the ``-d` :: - $ docker-compose -f dev.yml up -d + $ docker-compose -f local.yml up -d Debugging ~~~~~~~~~~~~~ @@ -121,13 +122,13 @@ Then you may need to run the following for it to work as desired: :: - $ docker-compose run -f dev.yml --service-ports django + $ docker-compose -f local.yml run --service-ports django django-debug-toolbar """""""""""""""""""" -In order for django-debug-toolbar to work with docker you need to add your docker-machine ip address (the output of `Get the IP ADDRESS`_) to INTERNAL_IPS in local.py +In order for django-debug-toolbar to work with docker you need to add your docker-machine ip address to ``INTERNAL_IPS`` in ``local.py`` .. May be a better place to put this, as it is not Docker specific. diff --git a/docs/docker-postgres-backups.rst b/docs/docker-postgres-backups.rst index 6f2a3cc5..d3c7ca1d 100644 --- a/docs/docker-postgres-backups.rst +++ b/docs/docker-postgres-backups.rst @@ -2,26 +2,26 @@ Database Backups with Docker ============================ -The database has to be running to create/restore a backup. These examples show local examples. If you want to use it on a remote server, remove ``-f dev.yml`` from each example. +The database has to be running to create/restore a backup. These examples show local examples. If you want to use it on a remote server, remove ``-f local.yml`` from each example. Running Backups ================ -Run the app with `docker-compose -f dev.yml up`. +Run the app with `docker-compose -f local.yml up`. To create a backup, run:: - docker-compose -f dev.yml run postgres backup + docker-compose -f local.yml run postgres backup To list backups, run:: - docker-compose -f dev.yml run postgres list-backups + docker-compose -f local.yml run postgres list-backups To restore a backup, run:: - docker-compose -f dev.yml run postgres restore filename.sql + docker-compose -f local.yml run postgres restore filename.sql Where is the ID of the Postgres container. To get it, run:: diff --git a/docs/index.rst b/docs/index.rst index bfa88f18..3b0a268c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -33,5 +33,4 @@ Indices and tables * :ref:`genindex` * :ref:`search` -.. At some point it would be good to have a module index of the high level things -we are doing. Then we can * :ref:`modindex` back in. +.. At some point it would be good to have a module index of the high level things we are doing. Then we can * :ref:`modindex` back in. diff --git a/docs/linters.rst b/docs/linters.rst index c2f76f35..4750e161 100644 --- a/docs/linters.rst +++ b/docs/linters.rst @@ -14,7 +14,7 @@ To run flake8: The config for flake8 is located in setup.cfg. It specifies: * Set max line length to 120 chars -* Exclude .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules +* Exclude ``.tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules`` pylint ------ @@ -40,4 +40,4 @@ This is included in flake8's checks, but you can also run it separately to see a The config for pep8 is located in setup.cfg. It specifies: * Set max line length to 120 chars -* Exclude .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules \ No newline at end of file +* Exclude ``.tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules`` diff --git a/docs/live-reloading-and-sass-compilation.rst b/docs/live-reloading-and-sass-compilation.rst index 5996bc32..7f978ede 100644 --- a/docs/live-reloading-and-sass-compilation.rst +++ b/docs/live-reloading-and-sass-compilation.rst @@ -21,4 +21,4 @@ The base app will now run as it would with the usual ``manage.py runserver`` but To get live reloading to work you'll probably need to install an `appropriate browser extension`_ -.. _appropriate browser extension: http://feedback.livereload.com/knowledgebase/articles/86242-how-do-i-install-and-use-the-browser-extensions- +.. _appropriate browser extension: http://livereload.com/extensions/ diff --git a/docs/project-generation-options.rst b/docs/project-generation-options.rst index 835d40f2..5a0cffe6 100644 --- a/docs/project-generation-options.rst +++ b/docs/project-generation-options.rst @@ -54,10 +54,6 @@ use_pycharm [n] windows [n] Whether you'll be developing on Windows. -use_python3 [y] - By default, the Python code generated will be for Python 3.x. But if you - answer `n` here, it will be legacy Python 2.7 code. - use_docker [y] Whether to use Docker_, separating the app and database into separate containers. @@ -76,8 +72,8 @@ js_task_runner [1] 2. Grunt_ 3. None -use_lets_encrypt [n] - Use `Let's Encrypt`_ as the certificate authority for this project. +custom_bootstrap_compilation [n] + If you use Grunt, scaffold out recompiling Bootstrap as as task. (Useful for letting you change Bootstrap variables in real time.) Consult project README for more details. open_source_license [1] Select a software license for the project. The choices are: diff --git a/docs/settings.rst b/docs/settings.rst index 893a47e9..8b4ad405 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -1,3 +1,5 @@ +.. _settings: + Settings ========== diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 4a9d14e2..b383e419 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -12,7 +12,6 @@ A portion of this code was adopted from Django's standard crypto functions and utilities, specifically: https://github.com/django/django/blob/master/django/utils/crypto.py """ -from __future__ import print_function import os import random import shutil @@ -131,7 +130,7 @@ def remove_docker_files(): """ Removes files needed for docker if it isn't going to be used """ - for filename in ["dev.yml", "docker-compose.yml", ".dockerignore"]: + for filename in ["local.yml", "production.yml", ".dockerignore"]: os.remove(os.path.join( PROJECT_DIRECTORY, filename )) @@ -168,14 +167,6 @@ def remove_packageJSON_file(): PROJECT_DIRECTORY, filename )) -def remove_certbot_files(): - """ - Removes files needed for certbot if it isn't going to be used - """ - nginx_dir_location = os.path.join(PROJECT_DIRECTORY, 'compose/nginx') - for filename in ["nginx-secure.conf", "start.sh", "dhparams.example.pem"]: - file_name = os.path.join(nginx_dir_location, filename) - remove_file(file_name) def remove_copying_files(): """ @@ -202,6 +193,16 @@ def remove_elasticbeanstalk(): PROJECT_DIRECTORY, filename )) +def remove_open_source_files(): + """ + Removes files conventional to opensource projects only. + """ + for filename in ["CONTRIBUTORS.txt"]: + os.remove(os.path.join( + PROJECT_DIRECTORY, filename + )) + + # IN PROGRESS # def copy_doc_files(project_directory): # cookiecutters_dir = DEFAULT_CONFIG['cookiecutters_dir'] @@ -220,26 +221,26 @@ def remove_elasticbeanstalk(): # dst = os.path.join(target_dir, name) # shutil.copyfile(src, dst) -# 1. Generates and saves random secret key +# Generates and saves random secret key make_secret_key(PROJECT_DIRECTORY) -# 2. Removes the taskapp if celery isn't going to be used +# Removes the taskapp if celery isn't going to be used if '{{ cookiecutter.use_celery }}'.lower() == 'n': remove_task_app(PROJECT_DIRECTORY) -# 3. Removes the .idea directory if PyCharm isn't going to be used +# Removes the .idea directory if PyCharm isn't going to be used if '{{ cookiecutter.use_pycharm }}'.lower() != 'y': remove_pycharm_dir(PROJECT_DIRECTORY) -# 4. Removes all heroku files if it isn't going to be used +# Removes all heroku files if it isn't going to be used if '{{ cookiecutter.use_heroku }}'.lower() != 'y': remove_heroku_files() -# 5. Removes all docker files if it isn't going to be used +# Removes all docker files if it isn't going to be used if '{{ cookiecutter.use_docker }}'.lower() != 'y': remove_docker_files() -# 6. Removes all JS task manager files if it isn't going to be used +# Removes all JS task manager files if it isn't going to be used if '{{ cookiecutter.js_task_runner}}'.lower() == 'gulp': remove_grunt_files() elif '{{ cookiecutter.js_task_runner}}'.lower() == 'grunt': @@ -249,11 +250,7 @@ else: remove_grunt_files() remove_packageJSON_file() -# 7. Removes all certbot/letsencrypt files if it isn't going to be used -if '{{ cookiecutter.use_lets_encrypt }}'.lower() != 'y': - remove_certbot_files() - -# 8. Display a warning if use_docker and use_grunt are selected. Grunt isn't +# Display a warning if use_docker and use_grunt are selected. Grunt isn't # supported by our docker config atm. if '{{ cookiecutter.js_task_runner }}'.lower() in ['grunt', 'gulp'] and '{{ cookiecutter.use_docker }}'.lower() == 'y': print( @@ -262,25 +259,15 @@ if '{{ cookiecutter.js_task_runner }}'.lower() in ['grunt', 'gulp'] and '{{ cook "js task runner service to your docker configuration manually." ) -# 9. Removes the certbot/letsencrypt files and display a warning if use_lets_encrypt is selected and use_docker isn't. -if '{{ cookiecutter.use_lets_encrypt }}'.lower() == 'y' and '{{ cookiecutter.use_docker }}'.lower() != 'y': - remove_certbot_files() - print( - "You selected to use Let's Encrypt and didn't select to use docker. This is NOT supported out of the box for now. You " - "can continue to use the project like you normally would, but Let's Encrypt files have been included." - ) -# 10. Directs the user to the documentation if certbot and docker are selected. -if '{{ cookiecutter.use_lets_encrypt }}'.lower() == 'y' and '{{ cookiecutter.use_docker }}'.lower() == 'y': - print( - "You selected to use Let's Encrypt, please see the documentation for instructions on how to use this in production. " - "You must generate a dhparams.pem file before running docker-compose in a production environment." - ) - -# 11. Removes files needed for the GPLv3 licence if it isn't going to be used. +# Removes files needed for the GPLv3 licence if it isn't going to be used. if '{{ cookiecutter.open_source_license}}' != 'GPLv3': remove_copying_files() -# 12. Remove Elastic Beanstalk files +# Remove Elastic Beanstalk files if '{{ cookiecutter.use_elasticbeanstalk_experimental }}'.lower() != 'y': remove_elasticbeanstalk() + +# Remove files conventional to opensource projects only. +if '{{ cookiecutter.open_source_license }}' == 'Not open source': + remove_open_source_files() diff --git a/hooks/pre_gen_project.py b/hooks/pre_gen_project.py index cd31774e..c7a68450 100644 --- a/hooks/pre_gen_project.py +++ b/hooks/pre_gen_project.py @@ -9,3 +9,23 @@ docker = '{{ cookiecutter.use_docker }}'.lower() if elasticbeanstalk == 'y' and (heroku == 'y' or docker == 'y'): raise Exception("Cookiecutter Django's EXPERIMENTAL Elastic Beanstalk support is incompatible with Heroku and Docker setups.") + +if docker == 'n': + import sys + + python_major_version = sys.version_info[0] + + if python_major_version == 2: + sys.stdout.write("WARNING: Cookiecutter Django does not support Python 2! Stability is guaranteed with Python 3.4+ only. Are you sure you want to proceed? (y/n)") + + yes_options = set(['y']) + no_options = set(['n', '']) + choice = raw_input().lower() + if choice in no_options: + sys.exit(1) + elif choice in yes_options: + pass + else: + sys.stdout.write("Please respond with %s or %s" + % (', '.join([o for o in yes_options if not o == '']) + , ', '.join([o for o in no_options if not o == '']))) diff --git a/requirements.txt b/requirements.txt index 63848a8e..b87473c1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,11 @@ cookiecutter==1.5.1 -flake8==3.3.0 # pyup: != 2.6.0 -sh==1.12.13 -binaryornot==0.4.0 +flake8==3.4.1 # pyup: != 2.6.0 +sh==1.12.14 +binaryornot==0.4.4 # Testing -pytest==3.0.7 +pytest==3.2.1 pep8==1.7.0 -pyflakes==1.5.0 -tox==2.6.0 +pyflakes==1.6.0 +tox==2.7.0 pytest-cookies==0.2.0 diff --git a/setup.py b/setup.py index a20a28b2..6dc6635e 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ except ImportError: # Our version ALWAYS matches the version of Django we support # If Django has a new release, we branch, tag, then update this setting after the tag. -version = '1.10.1' +version = '1.10.7' if sys.argv[-1] == 'tag': os.system('git tag -a %s -m "version %s"' % (version, version)) @@ -39,8 +39,6 @@ setup( 'Natural Language :: English', 'License :: OSI Approved :: BSD License', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', diff --git a/tests/test_cookiecutter_generation.py b/tests/test_cookiecutter_generation.py index e0e06ce6..acbc2c09 100755 --- a/tests/test_cookiecutter_generation.py +++ b/tests/test_cookiecutter_generation.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import os import re import sh diff --git a/tests/test_docker.sh b/tests/test_docker.sh index 3c047f0a..137694d7 100755 --- a/tests/test_docker.sh +++ b/tests/test_docker.sh @@ -15,7 +15,7 @@ cookiecutter ../../ --no-input --overwrite-if-exists use_docker=y js_task_runner cd project_name # run the project's tests -docker-compose -f dev.yml run django python manage.py test +docker-compose -f local.yml run django python manage.py test # return non-zero status code if there are migrations that have not been created -docker-compose -f dev.yml run django python manage.py makemigrations --dry-run --check || { echo "ERROR: there were changes in the models, but migration listed above have not been created and are not saved in version control"; exit 1; } +docker-compose -f local.yml run django python manage.py makemigrations --dry-run --check || { echo "ERROR: there were changes in the models, but migration listed above have not been created and are not saved in version control"; exit 1; } diff --git a/tox.ini b/tox.ini index d2cfed18..311d80f4 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] skipsdist = true -envlist = py27,py34,py35 +envlist = py34,py35 [testenv] passenv = LC_ALL, LANG, HOME diff --git a/{{cookiecutter.project_slug}}/.gitignore b/{{cookiecutter.project_slug}}/.gitignore index 90ce80dc..70795664 100644 --- a/{{cookiecutter.project_slug}}/.gitignore +++ b/{{cookiecutter.project_slug}}/.gitignore @@ -1,78 +1,363 @@ -### OSX ### -.DS_Store -.AppleDouble -.LSOverride - -### SublimeText ### -# cache files for sublime text -*.tmlanguage.cache -*.tmPreferences.cache -*.stTheme.cache - -# workspace files are user-specific -*.sublime-workspace - -# project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using SublimeText -# *.sublime-project - -# sftp configuration file -sftp-config.json - -# Basics +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ *.py[cod] -__pycache__ +*$py.class -# Logs -logs -*.log +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs pip-log.txt -npm-debug.log* +pip-delete-this-directory.txt # Unit test / coverage reports +htmlcov/ +.tox/ .coverage -.tox +.coverage.* +.cache nosetests.xml -htmlcov +coverage.xml +*.cover +.hypothesis/ # Translations *.mo *.pot -# Pycharm -.idea/* -{% if cookiecutter.use_pycharm == 'y' %} +# Django stuff: +staticfiles/ + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + + +### Node template +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + + +### Linux template +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + + +### VisualStudioCode template +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + + +{% if cookiecutter.use_pycharm == 'y' -%} # Provided default Pycharm Run/Debug Configurations should be tracked by git # In case of local modifications made by Pycharm, use update-index command # for each changed file, like this: # git update-index --assume-unchanged .idea/{{cookiecutter.project_slug}}.iml -!.idea/runConfigurations/ -!.idea/{{cookiecutter.project_slug}}.iml -!.idea/vcs.xml -!.idea/webResources.xml +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties {% endif %} -# Vim -*~ -*.swp -*.swo +### Windows template +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db -# npm -node_modules/ +# Dump file +*.stackdump -# Compass -.sass-cache +# Folder config file +Desktop.ini -# virtual environments -.env +# Recycle Bin used on file shares +$RECYCLE.BIN/ -# User-uploaded media -{{ cookiecutter.project_slug }}/media/ +# Windows Installer files +*.cab +*.msi +*.msm +*.msp -{% if cookiecutter.use_mailhog == 'y' and cookiecutter.use_docker == 'n' %} -# MailHog binary +# Windows shortcuts +*.lnk + + +### macOS template +# General +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### SublimeText template +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings + + +### Vim template +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] + +# Session +Session.vim + +# Temporary +.netrwhist + +# Auto-generated tag files +tags + + +### VirtualEnv template +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +pip-selfcheck.json + + +{% if cookiecutter.use_mailhog == 'y' and cookiecutter.use_docker == 'n' -%} mailhog {% endif %} -staticfiles/ +{{ cookiecutter.project_slug }}/media/ diff --git a/{{cookiecutter.project_slug}}/.idea/runConfigurations/Docker__migrate.xml b/{{cookiecutter.project_slug}}/.idea/runConfigurations/Docker__migrate.xml index 18829b2f..98fff92e 100644 --- a/{{cookiecutter.project_slug}}/.idea/runConfigurations/Docker__migrate.xml +++ b/{{cookiecutter.project_slug}}/.idea/runConfigurations/Docker__migrate.xml @@ -6,7 +6,7 @@ -