PyOgg Development¶
If you are interested in contributing to the development of PyOgg:
- The master git repository can be found on the project’s GitHub site.
- If you would like to report a bug or have a feature request, consider posting to an issue on the project’s GitHub site.
- Finally, please make a pull request if you develop code you’d like to have added into PyOgg.
Editable Install¶
If you’re developing PyOgg, you may find it more convenient if PyOgg
is installed in editable mode. From the same directory as
setup.py
can be found, run:
pip install -e .
Automated Tests¶
PyOgg includes a collection of automated tests. They require
pytest
, which can be installed with:
pip install pytest
Note: If you have an old version of pytest installed, make sure to
install an up-to-date version (say, in a virtual environment). If you
do so, please restart Terminal as you may otherwise encounter spurious
ModuleNotFoundError
errors. For more information, see Dirk
Avery’s blog post on pytest
or check your version of pytest by running:
pytest --version
Once you have pytest installed, you may run the tests with the commands:
cd tests
pytest
This should output something similar to:
$ pytest
========================= test session starts =========================
platform darwin -- Python 3.8.5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1
rootdir: /Users/matthew/Desktop/VirtualChoir/PyOgg/PyOgg
collected 39 items
test_ogg_opus_writer.py ...... [ 15%]
test_opus_buffered_encoder.py .... [ 25%]
test_opus_decoder.py ......... [ 48%]
test_opus_encoder.py ............ [ 79%]
test_opus_file.py .... [ 89%]
test_opus_file_stream.py .... [100%]
========================= 39 passed in 1.20s ==========================
As at August 2020, we had about 75% code coverage. This can be examined by installing the Python coverage package:
pip install coverage
And then running the tests with the command:
coverage run --source=../pyogg -m pytest
coverage html
You can then open the file htmlcov/index.html
, which gives a
detailed line-by-line analysis of the tests’ coverage.
Static Type Checking¶
As at November 2020, a considerable portion of PyOgg has had type hinting added. This allows for static type checkers such as mypy to be used, which can help detect bugs without even running your code.
Mypy is run as part of the Travis continuous integration script; checking is performed on both the PyOgg package itself and also its automated tests.
To run the mypy checks yourself, you will need to have mypy installed:
pip install mypy
The tests for the PyOgg package can then by run from the root of the git repository using:
mypy -p pyogg
Checking of the automated tests can be done (also from the root of the repository) with:
mypy tests/*.py
Examples¶
The examples directory of the git repository provides example audio files and example code showing how to use PyOgg.
When run, some of the code examples use simpleaudio to play the audio files.
The majority of the examples are run as part of the Travis continuous
integration script. Specifically, those examples that play audio
files are skipped. Including the example files as part of the
continuous integration ensures that the examples are kept up-to-date
with any changes made to PyOgg’s API. The Travis script calls
examples/run-all-non-playing-examples.sh
, which excludes any
Python scripts with “play” in their name.
Documentation¶
The documentation is built automatically by Read the Docs everytime there is an update of the master branch of the git repository. Thus, the latest version, and indeed the previous versions, of the documentation are always available at Read the Docs.
Further, the documentation is also built as part of the Travis continuous integration script.
To build the documentation yourself requires Sphinx. To install it:
pip install sphinx
If you are building the documentation under Windows, you may need to install Make for Windows.
To build the documentation run:
cd docs
make html
You will then find the latest documentation at
docs/_build/html/index.html
.
Building Wheels¶
Wheels can be built for macOS, 32-bit Windows and 64-bit Windows. For
these systems, pre-compiled shared libraries can be found in the
project repository under pyogg/libs/
.
To build a Wheel you will need to have installed setuptools and wheel:
pip install --upgrade setuptools
pip install --upgrade wheel
By default, the build script will create a Wheel for your current platform:
python setup.py build bdist_wheel
If you wish to create a Wheel for a different platform, set the
environment variable PYTHON_PYOGG_PLATFORM
to either Darwin
for a macOS wheel, or Windows
for Microsoft Windows platforms.
For Windows, you will also need to set the environment variable
PYTHON_PYOGG_ARCHITECTURE
to either 32bit
or 64bit
as
required. Finally, run the same build command list above.
Ensure that the version for your wheel is correct. The version
definition can be found in pyogg/__init__.py
.