[openstack-dev] [nova] is it possible to microversion a static class method?
Sean Dague
sean at dague.net
Fri Mar 13 11:10:40 UTC 2015
On 03/13/2015 02:55 AM, Chris Friesen wrote:
> 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.
That's a doc bug, we should change it.
-Sean
--
Sean Dague
http://dague.net
More information about the OpenStack-dev
mailing list