<div dir="ltr">+1<br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><br></div><div>David<br></div></div></div></div></div></div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 11, 2018 at 10:35 AM Jeff Ortel <<a href="mailto:jortel@redhat.com">jortel@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">+1<br>
<br>
On 09/07/2018 01:09 AM, Simon Baatz wrote:<br>
> I had a discussion on IRC with Brian yesterday which led to the<br>
> question whether we can drop support for Python 3.5. I think there are<br>
> good reasons for this, see the rationale below.<br>
><br>
> Brian proposed to initiate a vote on this topic (and find out whether<br>
> this "community thing" works :-) ).<br>
><br>
> Please send feedback by Friday Sept 14th. Especially, let me know if<br>
> there are specific reasons for depending on Python 3.5. The<br>
> corresponding issue is 3984 [7].<br>
><br>
> Cheers,<br>
> Simon<br>
><br>
><br>
> Rationale:<br>
><br>
> The trigger for the discussion was to get rid of boilerplate code like<br>
> this [0], [1] to handle batches in the stages API. This becomes a<br>
> single line [2] when using an asynchronous generator [3]. Adding the<br>
> `batches()` async generator to Pulp core would simplify existing<br>
> stages and ease implementation of stages in plugins.<br>
><br>
> Async generators have been introduced in Python 3.6. Thus, to make the<br>
> `batches` generator available in the Pulp core plugin API, we either<br>
><br>
> - have to drop support for Python 3.5 or<br>
><br>
> - reimplement the async generator as an async iterator (which would be<br>
>    more convoluted but looks doable)<br>
><br>
><br>
> I prefer to drop 3.5, since this will allow to use additional language<br>
> features[4]. Among them:<br>
><br>
> - As said, async generators/async comprehensions. Async generators are<br>
>    simpler to write and understand than async iterators.<br>
><br>
> - String interpolation "f-Strings" [5]<br>
><br>
> - dict objects preserve insertion-order (officially declared part of<br>
>    the language with Python 3.7). Eliminates a source of subtle<br>
>    "works on 3.6, sometimes works on 3.5" bugs.<br>
><br>
> - One version less to support is always a good thing (provided nobody<br>
>    really requires it)<br>
><br>
> - Type annotations are currently not used by the Pulp project, but if<br>
>    the project decides to use them in the future: IMHO type annotations<br>
>    (which are great btw.) began to feel â€œright† with 3.6. Working with<br>
>    them in 3.5 can be clumsy at times.<br>
><br>
> - And of course: [6]<br>
><br>
><br>
> Python 3.6 has the OS/distribution support we need:<br>
><br>
> - Python 3.6 SCL is available for RHEL 7 / CentOS 7<br>
> - It is part of Fedora as of Fedora 26<br>
><br>
> For Ubuntu, it is part of 18.04 LTS. Debian does not have Python 3.6 in stable yet.<br>
><br>
><br>
><br>
> [0] <a href="https://github.com/pulp/pulp/blob/631031e38270c5c7c2b2289ff4ab87a058447c5e/plugin/pulpcore/plugin/stages/content_unit_stages.py#L47-L59" rel="noreferrer" target="_blank">https://github.com/pulp/pulp/blob/631031e38270c5c7c2b2289ff4ab87a058447c5e/plugin/pulpcore/plugin/stages/content_unit_stages.py#L47-L59</a><br>
> [1] <a href="https://github.com/pulp/pulp/blob/631031e38270c5c7c2b2289ff4ab87a058447c5e/plugin/pulpcore/plugin/stages/artifact_stages.py#L48-L60" rel="noreferrer" target="_blank">https://github.com/pulp/pulp/blob/631031e38270c5c7c2b2289ff4ab87a058447c5e/plugin/pulpcore/plugin/stages/artifact_stages.py#L48-L60</a><br>
> [2] <a href="https://github.com/gmbnomis/pulp_cookbook/blob/ca4882cecab16995c5713d27131da8112a5f5a0c/pulp_cookbook/app/tasks/synchronizing.py#L98" rel="noreferrer" target="_blank">https://github.com/gmbnomis/pulp_cookbook/blob/ca4882cecab16995c5713d27131da8112a5f5a0c/pulp_cookbook/app/tasks/synchronizing.py#L98</a><br>
> [3] <a href="https://github.com/gmbnomis/pulp_cookbook/blob/d44ed593925b78c046e1b568810b15acbdad5ac4/pulp_cookbook/app/tasks/synchronizing.py#L26" rel="noreferrer" target="_blank">https://github.com/gmbnomis/pulp_cookbook/blob/d44ed593925b78c046e1b568810b15acbdad5ac4/pulp_cookbook/app/tasks/synchronizing.py#L26</a><br>
> [4] <a href="https://docs.python.org/3/whatsnew/3.6.html" rel="noreferrer" target="_blank">https://docs.python.org/3/whatsnew/3.6.html</a><br>
> [5] <a href="https://docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals" rel="noreferrer" target="_blank">https://docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals</a><br>
> [6] <a href="https://twitter.com/raymondh/status/844955415259463681" rel="noreferrer" target="_blank">https://twitter.com/raymondh/status/844955415259463681</a><br>
> [7] <a href="https://pulp.plan.io/issues/3984" rel="noreferrer" target="_blank">https://pulp.plan.io/issues/3984</a><br>
><br>
> _______________________________________________<br>
> Pulp-dev mailing list<br>
> <a href="mailto:Pulp-dev@redhat.com" target="_blank">Pulp-dev@redhat.com</a><br>
> <a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/pulp-dev</a><br>
<br>
_______________________________________________<br>
Pulp-dev mailing list<br>
<a href="mailto:Pulp-dev@redhat.com" target="_blank">Pulp-dev@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/pulp-dev</a><br>
</blockquote></div>