Files
governance/reference/cti/python_cti.rst
Doug Hellmann a911c1abb9 add goal "support python 3.5"
Change-Id: I25905a2eff9e2bef48861b6f4b8d7a881b639dae
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
2017-01-05 11:36:04 -05:00

115 lines
3.8 KiB
ReStructuredText

.. _cti-python:
====================================
Consistent Testing Interface: Python
====================================
Each python project must be able to do:
- Unit tests for python2.7
- Codestyle checks
- Testing Coverage Report
- Source Tarball Generation
- Translations import/export and merge for translated projects
- Documentation generation
Projects which are compatible with Python 3 must also be able to do:
- Unit tests for python3.5
Specific commands
-----------------
To drive the above tasks, the following commands should be supported in a clean tree:
- tox -epy27
- tox -epep8
- tox -ecover
- tox -evenv python setup.py sdist
- tox -evenv python setup.py build_sphinx
Projects that are translated should also support:
- tox -evenv python setup.py extract_messages
- tox -evenv python setup.py update_catalog
Projects which are compatible with Python 3 must also be able to do:
- tox -epy35
Some basic prerequisites for test running (system packages, database
configuration, custom filesystem types) are acceptable as long as they are
documented in a visible location such as a CONTRIBUTING, TESTING, or README
file in the root of the repository.
Requirements Listing
--------------------
Each project should list its operations dependencies in requirements.txt
and additional dependencies required for testing in test-requirements.txt.
If there are requirements that are specific to python3 or pypy support,
those may be listed in requirements.txt or test-requirements.txt using
environment makers.
Constraints
===========
The requirements project maintains a set of constraints with packages pinned
to specific package versions that are known to be working. The goal is to
ease the diagnosis of breakage caused by projects upstream to OpenStack and
to provide a set of packages known to work together.
Projects may opt into using the constraints in one or more of their
standard targets via their tox.ini configuration.
Virtual Environment Management
------------------------------
To support sensible testing across multiple python versions, we use tox
config files in the projects.
unittest running
----------------
OpenStack uses testrepository as its test runner, which supports a number
of things, most importantly to the expanded project is the subunit output
stream collection. This is useful for aggregating and displaying test output.
In support of that, the oslotest library is built on top of testtools,
testscenarios and fixtures.
Project Configuration
---------------------
All OpenStack projects use `pbr` for consistent operation of setuptools.
To accomplish this, all setup.py files only contain a simple setup function
that setup_requires on an unversioned pbr, and a directive to pass processing
to the pbr library. Actual project configuration is then handled in setup.cfg.
Generated Files
---------------
ChangeLog and AUTHORS files are generated at setup.py sdist time. This is
handled by pbr.
.mailmap files should exist where a developer has more than one email address
or identity, and should map to the developer's canonical identity.
Translations
------------
To support translations processing, projects should have a valid babel config.
There should be a locale package inside of the top project module, and in that
dir should be the $project.pot file. For instance, for nova, there should be
nova/locale/nova.pot. Babel commands should be configured out output their .mo
files in to $project/locale as well.
Documentation
-------------
Developer docs are generated from Sphinx sources in the tree. Additionally,
there are end user docs and API docs which are maintained outside of the
context of a project's repo. To support documentation generation, projects
should have sphinx documentation source in doc/source and build_sphinx should
output the documentation to doc/build.