<html><body>
<p><font size="2" face="sans-serif">change or disable F811 might be too huge, so add #noqa might be best way we have now unless we change the code logic ..</font><br>
<br>
<font size="2" face="sans-serif">Best Regards! <br>
<br>
Kevin (Chen) Ji 纪 晨<br>
<br>
Engineer, zVM Development, CSTL<br>
Notes: Chen CH Ji/China/IBM@IBMCN   Internet: jichenjc@cn.ibm.com<br>
Phone: +86-10-82454158<br>
Address: 3/F Ring Building, ZhongGuanCun Software Park, Haidian District, Beijing 100193, PRC </font><br>
<br>
<img width="16" height="16" src="cid:1__=C7BBF748DFF55FF78f9e8a93df938@cn.ibm.com" border="0" alt="Inactive hide details for Matthew Gilliard ---01/28/2015 06:32:39 PM---F811 is not part of our hacking lib - it's in flake8.  A"><font size="2" color="#424282" face="sans-serif">Matthew Gilliard ---01/28/2015 06:32:39 PM---F811 is not part of our hacking lib - it's in flake8.  As far as I know, it's not possible to select</font><br>
<br>
<font size="1" color="#5F5F5F" face="sans-serif">From:      </font><font size="1" face="sans-serif">Matthew Gilliard <matthew.gilliard@gmail.com></font><br>
<font size="1" color="#5F5F5F" face="sans-serif">To:        </font><font size="1" face="sans-serif">"OpenStack Development Mailing List (not for usage questions)" <openstack-dev@lists.openstack.org></font><br>
<font size="1" color="#5F5F5F" face="sans-serif">Date:      </font><font size="1" face="sans-serif">01/28/2015 06:32 PM</font><br>
<font size="1" color="#5F5F5F" face="sans-serif">Subject:   </font><font size="1" face="sans-serif">Re: [openstack-dev] [nova] Questions on pep8 F811 hacking check for     microversion</font><br>
<hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br>
<br>
<br>
<font size="3" face="serif">F811 is not part of our hacking lib - it's in flake8.  As far as I know, it's not possible to selectively disable that for particular files or methods.  And as mentioned earlier in the list and when I asked in #openstack-dev the feeling was that we don't want to disable F811 globally because it's a useful check. So I think we have to choose between:<br>
</font><br>
<font size="3" face="serif">* Continuing to use #noqa</font><br>
<font size="3" face="serif">* Disabling F811 globally</font><br>
<font size="3" face="serif">* Modifying flake8</font><br>
<font size="3" face="serif">* Something else I haven't thought of<br>
</font><br>
<font size="3" face="serif">  Matthew</font><br>
<br>
<font size="3" face="serif">On Wed, Jan 28, 2015 at 7:43 AM, Chen CH Ji <</font><a href="mailto:jichenjc@cn.ibm.com" target="_blank"><font size="3" color="#0000FF" face="serif"><u>jichenjc@cn.ibm.com</u></font></a><font size="3" face="serif">> wrote:</font>
<ul style="padding-left: 9pt"><font size="3" face="sans-serif">Is there a way to overwrite the rule in our hacking (not familiar with it ...)? <br>
if so ,maybe we can do as suggested to avoid 811 for the class which has Microversion definition? Thanks</font><font size="3" face="serif"><br>
</font><font size="3" face="sans-serif"><br>
Best Regards! <br>
<br>
Kevin (Chen) Ji 纪 晨<br>
<br>
Engineer, zVM Development, CSTL<br>
Notes: Chen CH Ji/China/IBM@IBMCN   Internet: </font><a href="mailto:jichenjc@cn.ibm.com" target="_blank"><font size="3" color="#0000FF" face="sans-serif"><u>jichenjc@cn.ibm.com</u></font></a><font size="3" face="sans-serif"><br>
Phone: </font><a href="tel:%2B86-10-82454158" target="_blank"><font size="3" color="#0000FF" face="sans-serif"><u>+86-10-82454158</u></font></a><font size="3" face="sans-serif"><br>
Address: 3/F Ring Building, ZhongGuanCun Software Park, Haidian District, Beijing 100193, PRC </font><font size="3" face="serif"><br>
<br>
</font><img src="cid:1__=C7BBF748DFF55FF78f9e8a93df938@cn.ibm.com" width="16" height="16" alt="Inactive hide details for Christopher Yeoh ---01/28/2015 09:37:00 AM---On Tue, 06 Jan 2015 07:31:19 -0500 Jay Pipes <jaypipes@g"><font size="3" color="#424282" face="sans-serif">Christopher Yeoh ---01/28/2015 09:37:00 AM---On Tue, 06 Jan 2015 07:31:19 -0500 Jay Pipes <</font><a href="mailto:jaypipes@gmail.com" target="_blank"><font size="3" color="#0000FF" face="sans-serif"><u>jaypipes@gmail.com</u></font></a><font size="3" color="#424282" face="sans-serif">> wrote:</font><font size="3" face="serif"><br>
</font><font size="1" color="#5F5F5F" face="sans-serif"><br>
From: </font><font size="1" face="sans-serif">Christopher Yeoh <</font><a href="mailto:cbkyeoh@gmail.com" target="_blank"><font size="1" color="#0000FF" face="sans-serif"><u>cbkyeoh@gmail.com</u></font></a><font size="1" face="sans-serif">></font><font size="1" color="#5F5F5F" face="sans-serif"><br>
To: </font><a href="mailto:openstack-dev@lists.openstack.org" target="_blank"><font size="1" color="#0000FF" face="sans-serif"><u>openstack-dev@lists.openstack.org</u></font></a><font size="1" color="#5F5F5F" face="sans-serif"><br>
Date: </font><font size="1" face="sans-serif">01/28/2015 09:37 AM</font><font size="1" color="#5F5F5F" face="sans-serif"><br>
Subject: </font><font size="1" face="sans-serif">Re: [openstack-dev] [nova] Questions on pep8 F811 hacking check for microversion</font><br>
<hr width="100%" size="2" align="left" noshade><br>
<font size="3" face="serif"><br>
<br>
</font><tt><font size="3"><br>
On Tue, 06 Jan 2015 07:31:19 -0500<br>
Jay Pipes <</font></tt><a href="mailto:jaypipes@gmail.com" target="_blank"><tt><font size="3" color="#0000FF"><u>jaypipes@gmail.com</u></font></tt></a><tt><font size="3">> wrote:<br>
<br>
> On 01/06/2015 06:25 AM, Chen CH Ji wrote:<br>
> > Based on nova-specs api-microversions.rst<br>
> > we support following function definition format, but it violate the<br>
> > hacking rule pep8 F811 because duplicate function definition<br>
> > we should use #noqa for them , but considering microversion may<br>
> > live for long time ,<br>
> > keep adding #noqa may be a little bit ugly, can anyone suggest a<br>
> > good solution for it ? thanks<br>
> ><br>
> >  >   @api_version(min_version='2.1')<br>
> >  >   def _version_specific_func(self, req, arg1):<br>
> >  >      pass<br>
> >  ><br>
> >  >   @api_version(min_version='2.5')<br>
> >  >   def _version_specific_func(self, req, arg1):<br>
> >  >      pass<br>
> <br>
> Hey Kevin,<br>
> <br>
> This was actually one of my reservations about the proposed <br>
> microversioning implementation -- i.e. having functions that are<br>
> named exactly the same, only decorated with the microversioning<br>
> notation. It kinda reminds me of the hell of debugging C++ code that<br>
> uses STL: how does one easily know which method one is in when inside<br>
> a debugger?<br>
> <br>
> That said, the only other technique we could try to use would be to<br>
> not use a decorator and instead have a top-level dispatch function<br>
> that would inspect the API microversion (only when the API version<br>
> makes a difference to the output or input of that function) and then<br>
> dispatch the call to a helper method that had the version in its name.<br>
> <br>
> So, for instance, let's say you are calling the controller's GET <br>
> /$tenant/os-hosts method, which happens to get routed to the <br>
> nova.api.openstack.compute.contrib.hosts.HostController.index()<br>
> method. If you wanted to modify the result of that method and the API <br>
> microversion is at 2.5, you might do something like:<br>
> <br>
>   def index(self, req):<br>
>       req_api_ver = utils.get_max_requested_api_version(req)<br>
>       if req_api_ver == (2, 5):<br>
>           return self.index_2_5(req)<br>
>       return self.index_2_1(req)<br>
> <br>
>   def index_2_5(self, req):<br>
>       results = self.index_2_1(req)<br>
>       # Replaces 'host' with 'host_name'<br>
>       for result in results:<br>
>           result['host_name'] = result['host']<br>
>           del result['host']<br>
>       return results<br>
> <br>
>   def index_2_1(self, req):<br>
>       # Would be a rename of the existing index() method on<br>
>       # the controller....<br>
> <br>
<br>
So having to manually add switching code everything we have an API<br>
patch I think is not only longer and more complicated but more error<br>
prone when updating. If we change something at the core in the future it<br>
means changing all the microversioned code rather than just the<br>
switching architecture at the core of wsgi.<br>
<br>
<br>
> Another option would be to use something like JSON-patch to determine <br>
> the difference between two output schemas and automatically translate <br>
> one to another... but that would be a huge effort.<br>
> <br>
> That's the only other way I can think of besides disabling F811,<br>
> which I really would not recommend, since it's a valuable safeguard<br>
> against duplicate function names (especially duplicated test methods).<br>
<br>
So I don't think we need to disable F811 in general - why not just<br>
disable it for any method with the api_version decorator? On those ones<br>
we can do checks on what is passed to api_version which will help<br>
verify that there hasn't been a typo to an api_version decorator.<br>
<br>
Chris<br>
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: </font></tt><a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank"><tt><font size="3" color="#0000FF"><u>OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</u></font></tt></a><tt><font size="3" color="#0000FF"><u><br>
</u></font></tt><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><tt><font size="3" color="#0000FF"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></tt></a><tt><font size="3"><br>
</font></tt><font size="3" face="serif"><br>
</font><br>
<font size="3" face="serif"><br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: </font><a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank"><font size="3" color="#0000FF" face="serif"><u>OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</u></font></a><font size="3" color="#0000FF" face="serif"><u><br>
</u></font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><font size="3" color="#0000FF" face="serif"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></a><font size="3" face="serif"><br>
</font></ul>
<tt><font size="2">__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: OpenStack-dev-request@lists.openstack.org?subject:unsubscribe<br>
</font></tt><tt><font size="2"><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></font></tt><tt><font size="2"><br>
</font></tt><br>
</body></html>