[openstack-dev] [nova] is it possible to microversion a static class method?
Chris Friesen
chris.friesen at windriver.com
Fri Mar 13 06:55:50 UTC 2015
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
More information about the OpenStack-dev
mailing list