<div dir="auto"><div>Seems reasonable to me. Even without python 3.6 in the official repositories for Debian and trusty Ubuntu, it isn't very difficult to install 3.6 with tools like anaconda and pyenv. From my perspective, dropping 3.5 would introduce short term inconvenience for those systems, and simplify our long term maintenance. <br><br><div class="gmail_quote"><div dir="ltr">On Fri, Sep 7, 2018, 8:51 AM Brian Bouterse <<a href="mailto:bbouters@redhat.com" target="_blank" rel="noreferrer">bbouters@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm also +1 on this for the various reasons. Even with the portability downsides. Also, practically speaking, the batch code is legit, and it will benfit the stages code a lot.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 7, 2018 at 8:17 AM, Daniel Alley <span dir="ltr"><<a href="mailto:dalley@redhat.com" rel="noreferrer noreferrer" target="_blank">dalley@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Personally, +1.  I ran into this issue myself and it was infuriating to deal with.</div><span><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>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></div></blockquote><div><br></div></span><div>Just to expand on this though:</div><span><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
For Ubuntu, it is part of 18.04 LTS. Debian does not have Python 3.6 in stable yet.<br></div></blockquote><div><br></div></span><div>It does mean that we won't be able to support Ubuntu 16.04 (or previous) or Debian at all until the next release (~May 2019), unless they install a newer Python themselves. <br></div></div><div class="m_-4513433005436354615m_5778758242163995429HOEnZb"><div class="m_-4513433005436354615m_5778758242163995429h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 7, 2018 at 2:09 AM, Simon Baatz <span dir="ltr"><<a href="mailto:gmbnomis@gmail.com" rel="noreferrer noreferrer" target="_blank">gmbnomis@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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 noreferrer 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 noreferrer 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 noreferrer 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 noreferrer 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 noreferrer 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 noreferrer 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 noreferrer noreferrer" target="_blank">https://twitter.com/raymondh/status/844955415259463681</a><br>
[7] <a href="https://pulp.plan.io/issues/3984" rel="noreferrer noreferrer 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" rel="noreferrer noreferrer" target="_blank">Pulp-dev@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer noreferrer noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/pulp-dev</a><br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Pulp-dev mailing list<br>
<a href="mailto:Pulp-dev@redhat.com" rel="noreferrer noreferrer" target="_blank">Pulp-dev@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer noreferrer noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/pulp-dev</a><br>
<br></blockquote></div><br></div>
_______________________________________________<br>
Pulp-dev mailing list<br>
<a href="mailto:Pulp-dev@redhat.com" rel="noreferrer noreferrer" target="_blank">Pulp-dev@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer noreferrer noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/pulp-dev</a><br>
</blockquote></div></div></div>