From 243d1b5e3d068c5935d0ccf54e1f0cf595da3dba Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Thu, 9 Feb 2023 08:51:18 -0600 Subject: [PATCH] Replace deprecated stacked `@classmethod` and `@property` (#79952) --- changelogs/fragments/no-stacked-descriptors.yaml | 2 ++ lib/ansible/playbook/base.py | 16 +++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/no-stacked-descriptors.yaml diff --git a/changelogs/fragments/no-stacked-descriptors.yaml b/changelogs/fragments/no-stacked-descriptors.yaml new file mode 100644 index 00000000000..2080c57d7fb --- /dev/null +++ b/changelogs/fragments/no-stacked-descriptors.yaml @@ -0,0 +1,2 @@ +minor_changes: +- Playbook objects - Replace deprecated stacked ``@classmethod`` and ``@property`` diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py index 0f95c5fea9a..cb2a8829464 100644 --- a/lib/ansible/playbook/base.py +++ b/lib/ansible/playbook/base.py @@ -70,16 +70,18 @@ def _validate_action_group_metadata(action, found_group_metadata, fq_group_name) display.warning(" ".join(metadata_warnings)) +class _ClassProperty: + def __set_name__(self, owner, name): + self.name = name + + def __get__(self, obj, objtype=None): + return getattr(objtype, f'_{self.name}')() + + class FieldAttributeBase: - @classmethod # type: ignore[misc] - @property - def fattributes(cls): - return cls._fattributes() + fattributes = _ClassProperty() - # mypy complains with "misc: Decorated property not supported" - # when @property and @cache are used together, - # split fattributes above into two methods @classmethod @cache def _fattributes(cls):