]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
python-common: Remove duplicated DriveGroupSpec.__repr__ and __eq__
authorSebastian Wagner <sewagner@redhat.com>
Tue, 24 Aug 2021 12:31:56 +0000 (14:31 +0200)
committerSebastian Wagner <sewagner@redhat.com>
Wed, 1 Dec 2021 08:53:12 +0000 (09:53 +0100)
Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
src/python-common/ceph/deployment/drive_group.py
src/python-common/ceph/deployment/service_spec.py
src/python-common/ceph/tests/test_service_spec.py

index 8eb18cbdc04a614246b18eeb9405212f02077249..ef69d69c0c1553a68e43b758324f4c9d3c2c7299 100644 (file)
@@ -330,21 +330,5 @@ class DriveGroupSpec(ServiceSpec):
         if self.method == 'raw' and self.objectstore == 'filestore':
             raise DriveGroupValidationError('method raw only supports bluestore')
 
-    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)
index 48d511fc3dcf8b1a036ae4aa7978748568c43ee7..0cb5c78e659e0524731b08b8c875d71a1b88ce2b 100644 (file)
@@ -668,7 +668,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__
index e2e30944cebbf230eedbb6fa57480d88938fccce..ff866a3a1fab65091b43c7a0bd92b3380da41994 100644 (file)
@@ -342,6 +342,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",
                          [
                              (