From: Sebastian Wagner Date: Tue, 24 Aug 2021 12:31:56 +0000 (+0200) Subject: python-common: Remove duplicated DriveGroupSpec.__repr__ and __eq__ X-Git-Tag: v16.2.8~251^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=333e2c732691c298fb7f5bcf375605053bccbbc0;p=ceph.git python-common: Remove duplicated DriveGroupSpec.__repr__ and __eq__ Signed-off-by: Sebastian Wagner (cherry picked from commit b91f81801af40c213adfbc88c8fd148b4edf3ede) Conflicts: src/python-common/ceph/deployment/drive_group.py --- diff --git a/src/python-common/ceph/deployment/drive_group.py b/src/python-common/ceph/deployment/drive_group.py index b3ca04c3e364..0785ffff32d7 100644 --- a/src/python-common/ceph/deployment/drive_group.py +++ b/src/python-common/ceph/deployment/drive_group.py @@ -311,21 +311,5 @@ class DriveGroupSpec(ServiceSpec): if self.filter_logic not in ['AND', 'OR']: raise DriveGroupValidationError('filter_logic must be either or ') - def __repr__(self) -> str: - keys = [ - key for key in self._supported_features if getattr(self, key) is not None - ] - if 'encrypted' in keys and not self.encrypted: - keys.remove('encrypted') - if 'objectstore' in keys and self.objectstore == 'bluestore': - keys.remove('objectstore') - return "DriveGroupSpec(name={}->{})".format( - self.service_id, - ', '.join('{}={}'.format(key, repr(getattr(self, key))) for key in keys) - ) - - def __eq__(self, other: Any) -> bool: - return repr(self) == repr(other) - yaml.add_representer(DriveGroupSpec, DriveGroupSpec.yaml_representer) diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index 418e250aad5c..a59d7a222972 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -685,7 +685,8 @@ class ServiceSpec(object): ) def __repr__(self) -> str: - return "{}({!r})".format(self.__class__.__name__, self.__dict__) + y = yaml.dump(cast(dict, self), default_flow_style=False) + return f"{self.__class__.__name__}.from_json(yaml.safe_load('''{y}'''))" def __eq__(self, other: Any) -> bool: return (self.__class__ == other.__class__ diff --git a/src/python-common/ceph/tests/test_service_spec.py b/src/python-common/ceph/tests/test_service_spec.py index d63705324068..080e57732170 100644 --- a/src/python-common/ceph/tests/test_service_spec.py +++ b/src/python-common/ceph/tests/test_service_spec.py @@ -382,6 +382,17 @@ def test_alertmanager_spec_2(): assert 'default_webhook_urls' in spec.user_data.keys() + +def test_repr(): + val = """ServiceSpec.from_json(yaml.safe_load('''service_type: crash +service_name: crash +placement: + count: 42 +'''))""" + obj = eval(val) + assert obj.service_type == 'crash' + assert val == repr(obj) + @pytest.mark.parametrize("spec1, spec2, eq", [ (