Setting up a Development Environment
Getting started with development is pretty straightforward, and should feel familiar to anyone with Django development experience. There are a few things you'll need:
- A Linux or macOS environment
- A PostgreSQL server, which can be installed locally or with Docker
- A Redis server, which can also be installed locally or with Docker
- A supported version of Python
Enable Pre-Commit Hooks
Peering Manager ships with git pre-commit hooks that
check for style compliance prior to committing changes. This helps avoid
erroneous commits that result in CI test failures. You'll need
$ pre-commit install
Create a Python Virtual Environment
A virtual environment is like a container for a set of Python packages. It makes sure that you do not mess with system packages or other projects. When installed per the documentation, Peering Manager uses a virtual environment in production, so it's a must to use it for development as well.
Create a virtual environment using the
venv Python module:
$ mkdir ~/.venv $ python3 -m venv ~/.venv/peering-manager
This will create a directory named
.venv/peering-manager/ in your home
directory, which houses a virtual copy of the Python executable and its
related libraries and tooling.
Once created, activate the virtual environment:
$ source ~/.venv/peering-manager/bin/activate (peering-manager) $
Notice that the console prompt changes to indicate the active environment. This updates the necessary system environment variables to ensure that any Python scripts are run within the virtual environment.
With the virtual environment activated, install the project's required Python
development packages using the
(peering-manager) $ python -m pip install -r requirements_dev.txt Collecting Django<3.3,>=3.2 (from -r requirements.txt (line 1)) ...
Configure Peering Manager
peering_manager/ directory, copy
configuration.py and update the following parameters:
ALLOWED_HOSTS: This can be set to
['*']for development purposes
DATABASE: PostgreSQL database connection parameters
REDIS: Redis configuration, if different from the defaults
SECRET_KEY: Set to a random string (use
generate_secret_key.pyin the parent directory to generate a suitable key)
DEBUG: Set to
Start the Development Server
Django provides a lightweight HTTP/WSGI server for development use. Run it
runserver management command:
$ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). July 12, 2021 - 19:38:41 Django version 3.2.5, using settings 'peering_manager.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
This ensures that your development environment is now complete and operational. Any changes you make to the code base will be automatically adapted by the development server.
Throughout the course of development, it's a good idea to occasionally run
unit tests to catch any errors. Tests are run using the
$ python manage.py test
Submitting Pull Requests
Once your work finished and you verified that all tests pass, commit your changes and push it upstream to your fork. Always provide descriptive (but not excessively verbose) commit messages. When working on a specific issue, be sure to reference it.
Commit messages should be formatted as mentionned here. Do not use useless capital letters, write commit messages like you would write a text, including for the summary line.
$ git commit -m "Closes #1234: Add support for 128-bit ASN" $ git push origin
Once your fork has the new commit, submit a pull request to propose the changes. Be sure to provide a detailed list of the changes being made and the reasons for doing so.
Once submitted, a maintainer will review your pull request and either merge it or request changes. If changes are needed, you can make them via new commits to your fork: The pull request will update automatically.