Minimum Python Version
Pegasus Code except Worker Package
Lowest common version across supported platforms is
Worker Package
Lowest common version across supported platforms is
/Mats Rynge Can we expect Python 2.7 to be available on CentOS 6?
Mats Rynge List Python components included in worker package.
- Use python-six compatibility library.
- Refactor code such that Python 3 code is made Python 2 compatible instead of the opposite.
- See: https://python-future.org/compatible_idioms.html
- See: https://docs.python.org/3/howto/pyporting.html
Pegasus Code except Worker Package
Continue src/externals
Platform specific packages, python-flask
Will need to test with the lowest common available version across supported platforms.
Will require more platform specific integration tests.
Run pre/post install scripts to install using pip, i.e. pip install Flask.
Mats Rynge Do .rpm, .deb packages support this?
Packages may conflict with system installed packages. yum install python-flask (v0.9) vs pip install Flask (v1.0.2)
Latter two will require more platform specific integration tests to detect incompatible, missing dependencies.
Worker Package
Continue src/externals
Only for packages not expected to be available on supported platforms.
"Vendorize"
Copy dependency code into Pegasus.vendor directory.
# Instead of this import six # Use this import Pegasus.vendor.six
Testing
Environment
Will run unit tests on the minimal supported Python version and above.
Using pytest instead of unittest
Uses assert instead of self.assert*.
import pytest # Simple method, no need for classes def test_method(): # Simple assert, no need for assertEqual, etc. assert a % 2 == 0, "value was odd, should be even" with pytest.raises(ZeroDivisionError): 1 / 0 # One method, multiple tests # https://docs.pytest.org/en/latest/parametrize.html @pytest.mark.parametrize( "a, b", [ (1, 2, 3), (2, 3, 5), (5, -100, -95), ], ) def test_eval(a, b, expected): assert a + b == expected # Dependency Injection @pytest.fixture(scope="function OR class OR module OR package OR session") def client(): import requests s = requests.Session() s.get(".../login") yield return s # Yield can be replaced with return if no cleanup is required. s.get(".../logout") s.close() def test_external(client): assert client.get("/endpoint-1")
See: https://docs.pytest.org/en/latest/contents.html