[Pulp-dev] Proposal to drop support of Python 3.5 for Pulp 3

Simon Baatz gmbnomis at gmail.com
Fri Sep 7 06:09:42 UTC 2018

I had a discussion on IRC with Brian yesterday which led to the
question whether we can drop support for Python 3.5. I think there are
good reasons for this, see the rationale below.

Brian proposed to initiate a vote on this topic (and find out whether
this "community thing" works :-) ).

Please send feedback by Friday Sept 14th. Especially, let me know if
there are specific reasons for depending on Python 3.5. The
corresponding issue is 3984 [7].



The trigger for the discussion was to get rid of boilerplate code like
this [0], [1] to handle batches in the stages API. This becomes a
single line [2] when using an asynchronous generator [3]. Adding the
`batches()` async generator to Pulp core would simplify existing
stages and ease implementation of stages in plugins.

Async generators have been introduced in Python 3.6. Thus, to make the
`batches` generator available in the Pulp core plugin API, we either

- have to drop support for Python 3.5 or

- reimplement the async generator as an async iterator (which would be
  more convoluted but looks doable)

I prefer to drop 3.5, since this will allow to use additional language
features[4]. Among them:

- As said, async generators/async comprehensions. Async generators are
  simpler to write and understand than async iterators.

- String interpolation "f-Strings" [5]

- dict objects preserve insertion-order (officially declared part of
  the language with Python 3.7). Eliminates a source of subtle
  "works on 3.6, sometimes works on 3.5" bugs.

- One version less to support is always a good thing (provided nobody
  really requires it)

- Type annotations are currently not used by the Pulp project, but if
  the project decides to use them in the future: IMHO type annotations
  (which are great btw.) began to feel “right” with 3.6. Working with
  them in 3.5 can be clumsy at times.

- And of course: [6]

Python 3.6 has the OS/distribution support we need:

- Python 3.6 SCL is available for RHEL 7 / CentOS 7
- It is part of Fedora as of Fedora 26

For Ubuntu, it is part of 18.04 LTS. Debian does not have Python 3.6 in stable yet.

[0] https://github.com/pulp/pulp/blob/631031e38270c5c7c2b2289ff4ab87a058447c5e/plugin/pulpcore/plugin/stages/content_unit_stages.py#L47-L59
[1] https://github.com/pulp/pulp/blob/631031e38270c5c7c2b2289ff4ab87a058447c5e/plugin/pulpcore/plugin/stages/artifact_stages.py#L48-L60
[2] https://github.com/gmbnomis/pulp_cookbook/blob/ca4882cecab16995c5713d27131da8112a5f5a0c/pulp_cookbook/app/tasks/synchronizing.py#L98
[3] https://github.com/gmbnomis/pulp_cookbook/blob/d44ed593925b78c046e1b568810b15acbdad5ac4/pulp_cookbook/app/tasks/synchronizing.py#L26
[4] https://docs.python.org/3/whatsnew/3.6.html
[5] https://docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals
[6] https://twitter.com/raymondh/status/844955415259463681
[7] https://pulp.plan.io/issues/3984

More information about the Pulp-dev mailing list