]> git.apps.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, 19 Jan 2022 10:44:54 +0000 (11:44 +0100)
Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
(cherry picked from commit b91f81801af40c213adfbc88c8fd148b4edf3ede)

Conflicts:
src/python-common/ceph/deployment/drive_group.py

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 b3ca04c3e3649d94a8dd5052d2cec397d2122350..0785ffff32d7560d65499b37174cf2256402d0af 100644 (file)
@@ -311,21 +311,5 @@ class DriveGroupSpec(ServiceSpec):
         if self.filter_logic not in ['AND', 'OR']:
             raise DriveGroupValidationError('filter_logic must be either <AND> or <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)
index 418e250aad5cac86119f3888aa5ea034b8cc0395..a59d7a2229724c617af7f951c80094fc90d30d13 100644 (file)
@@ -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__
index d63705324068f06172a680fa88e4e2c930eecc0c..080e57732170231ae0d516992b7522096227edab 100644 (file)
@@ -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",
                          [
                              (