<div dir="ltr"><div>This sounds like a great idea.  +1</div><div><br></div><div>My only hesitation would be if this hurts a significant portion of users.  Do we know how many users use older versions of Ubuntu or Debian that this would impact?  Any other groups we might not have considered yet?<br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>
<p style="font-weight:bold;margin:0;padding:0;font-size:14px;text-transform:uppercase;margin-bottom:0"><span>Dana</span> <span>Walker</span></p>
<p style="font-weight:normal;font-size:10px;margin:0px 0px 4px;text-transform:uppercase"><span>Associate Software Engineer</span><span style="font-weight:normal;color:#aaa;margin:0"></span></p>
<p style="font-weight:normal;margin:0;font-size:10px;color:#999"><a style="color:#0088ce;font-size:10px;margin:0;text-decoration:none;font-family:'overpass',sans-serif" href="https://www.redhat.com" target="_blank">Red Hat <span><br><br></span></a></p>




<table border="0"><tbody><tr><td width="100px"><a href="https://red.ht/sig" target="_blank"> <img src="https://www.redhat.com/files/brand/email/sig-redhat.png" width="90" height="auto"></a> </td>
</tr></tbody></table>

</div></div></div></div>
<br><div class="gmail_quote">On Fri, Sep 7, 2018 at 8:50 AM, Brian Bouterse <span dir="ltr"><<a href="mailto:bbouters@redhat.com" target="_blank">bbouters@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">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="HOEnZb"><div class="h5"><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" 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_-8215293496591726804HOEnZb"><div class="m_-8215293496591726804h5"><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" 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" target="_blank">https://github.com/pulp/pulp/b<wbr>lob/631031e38270c5c7c2b2289ff4<wbr>ab87a058447c5e/plugin/pulpcore<wbr>/plugin/stages/content_unit_<wbr>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/b<wbr>lob/631031e38270c5c7c2b2289ff4<wbr>ab87a058447c5e/plugin/pulpcore<wbr>/plugin/stages/artifact_<wbr>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/pu<wbr>lp_cookbook/blob/ca4882cecab16<wbr>995c5713d27131da8112a5f5a0c/pu<wbr>lp_cookbook/app/tasks/synchron<wbr>izing.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/pu<wbr>lp_cookbook/blob/d44ed593925b7<wbr>8c046e1b568810b15acbdad5ac4/pu<wbr>lp_cookbook/app/tasks/synchron<wbr>izing.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/what<wbr>snew/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/what<wbr>snew/3.6.html#pep-498-formatte<wbr>d-string-literals</a><br>
[6] <a href="https://twitter.com/raymondh/status/844955415259463681" rel="noreferrer" target="_blank">https://twitter.com/raymondh/s<wbr>tatus/844955415259463681</a><br>
[7] <a href="https://pulp.plan.io/issues/3984" rel="noreferrer" target="_blank">https://pulp.plan.io/issues/39<wbr>84</a><br>
<br>
______________________________<wbr>_________________<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<wbr>/listinfo/pulp-dev</a><br>
</blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<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<wbr>/listinfo/pulp-dev</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Pulp-dev mailing list<br>
<a href="mailto:Pulp-dev@redhat.com">Pulp-dev@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer" target="_blank">https://www.redhat.com/<wbr>mailman/listinfo/pulp-dev</a><br>
<br></blockquote></div><br></div>