[openstack-dev] [nova] is it possible to microversion a static class method?

Chen CH Ji jichenjc at cn.ibm.com
Fri Mar 13 07:05:45 UTC 2015


I posted same question below yesterday, not sure why it's not posted in the
list ...


Best Regards!

Kevin (Chen) Ji 纪 晨

Engineer, zVM Development, CSTL
Notes: Chen CH Ji/China/IBM at IBMCN   Internet: jichenjc at cn.ibm.com
Phone: +86-10-82454158
Address: 3/F Ring Building, ZhongGuanCun Software Park, Haidian District,
Beijing 100193, PRC



From:	Chris Friesen <chris.friesen at windriver.com>
To:	<openstack-dev at lists.openstack.org>
Date:	03/13/2015 07:57 AM
Subject:	Re: [openstack-dev] [nova] is it possible to microversion a
            static class method?



On 03/12/2015 12:13 PM, Sean Dague wrote:
> On 03/12/2015 02:03 PM, Chris Friesen wrote:
>> Hi,
>>
>> I'm having an issue with microversions.
>>
>> The api_version() code has a comment saying "This decorator MUST appear
>> first (the outermost decorator) on an API method for it to work
correctly"
>>
>> I tried making a microversioned static class method like this:
>>
>>      @wsgi.Controller.api_version("2.4")  # noqa
>>      @staticmethod
>>      def _my_func(req, foo):
>>
>> and pycharm highlighted the api_version decorator and complained that
>> "This decorator will not receive a callable it may expect; the built-in
>> decorator returns a special object."
>>
>> Is this a spurious warning from pycharm?  The pep8 checks don't
complain.
>>
>> If I don't make it static, then pycharm suggests that the method could
>> be static.
>
> *API method*
>
> This is not intended for use by methods below the top controller level.
> If you want conditionals lower down in your call stack pull the request
> version out yourself and use that.

Both the original spec and doc/source/devref/api_microversions.rst contain
text
talking about decorating a private method.  The latter gives this example:

     @api_version("2.1", "2.4")
     def _version_specific_func(self, req, arg1):
         pass

     @api_version(min_version="2.5") #noqa
     def _version_specific_func(self, req, arg1):
         pass

     def show(self, req, id):
         .... common stuff ....
         self._version_specific_func(req, "foo")
         .... common stuff ....

It's entirely possible that such a private method might not need to
reference
"self", and could therefore be static, so I think it's a valid question.

Chris

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150313/ba34f5b9/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150313/ba34f5b9/attachment.gif>


More information about the OpenStack-dev mailing list