You will need:
- Python 3.9 or later (
brew install python@3.9) - PostgreSQL (
brew install postgresor Postgres.app) - yarn (
brew install yarn) - virtualenv
Ensure the development database exists:
createdb wheretofindme
Set the following environment variables in a .env file in the repo
root:
export DJANGO_SECRET_KEY=$(uuidgen) export DJANGO_DEBUG=True export SENDGRID_API_KEY=INVALID
Set up your virtualenv with your preferred method. For me, using
virtualenvwrapper and pyenv, this looks like:
$ mkvirtualenv wheretofindme --python=$(pyenv which python3.9) $ setvirtualenvproject $ pip install pip-tools $ pip-sync requirements/dev.txt requirements/base.txt
You'll have to read the contents of your .env file into your local
shell's environment. You may want to set up a system to do this each
time you activate this virtualenv. For one way to do this, see
:ref:`env-vars` below.
Then get the database into a good state:
$ python manage.py migrate
Then get the frontend building:
$ yarn install $ yarn serve
Then, you can visit the local site at http://localhost:8000/. The
terminal output will say :8080, but ignore it, it's a liar.
To add Python dependencies, add them to requirements/{dev,base}.in,
then recompile the locks:
$ pip-compile requirements/base.in && pip-compile requirements/dev.in
To add JavaScript dependencies:
$ yarn add (--dev) <dep name>
The Python tests are written using pytest, pytest-django,
pytest-cov, and pytest-factoryboy. You can run them easily with
yarn py:test:unit.
The JavaScript tests are written using Jest and Vue's unit-test helpers.
You can run them easily with yarn js:test:unit.
We require 100% test coverage on both parts. We will gladly help you with any test-writing issues you may have.
If you use virtualenvwrapper, one way to automatically set your
environment variables when you activate your virtualenv is to use the
postactivate hook. Having activated your virtualenv, edit
$VIRTUAL_ENV/bin/postactivate to contain the following code:
if [[ -e .env ]]; then
# Strip comment lines out of the .env file, and read
# the rest in to the environment.
export $(grep -v "^[ \t]*#" .env)
fi
This will read your .env file into your shell's environment each
time you activate the virtualenv. It does no cleanup on deactivation; I
must admit I've never found that important enough to be worth the
trouble of implementing!