Child pages
  • Python Migration

Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

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.

  1. Use python-six compatibility library.
  2. Refactor code such that Python 3 code is made Python 2 compatible instead of the opposite.
  3. See:
  4. See:

Pegasus Code except Worker Package

Continue src/externals

(thumbs down)

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.


Copy dependency code into Pegasus.vendor directory.

Code Block
# Instead of this
import six

# Use this
import Pegasus.vendor.six



Will run unit tests on the minimal supported Python version and above.

Using pytest instead of unittest

Uses assert instead of self.assert*.

Code Block
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
    "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()
	yield return s # Yield can be replaced with return if no cleanup is required.

def test_external(client):
  assert client.get("/endpoint-1")