Skip to content

Commit

Permalink
Rewrite StorageClass.__repr__
Browse files Browse the repository at this point in the history
Make it more compact by removing entities that are defaulted.
  • Loading branch information
timj committed Aug 6, 2019
1 parent ad65175 commit b173a3e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 8 deletions.
29 changes: 22 additions & 7 deletions python/lsst/daf/butler/core/storageClass.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,13 +313,28 @@ def __hash__(self):
return hash(self.name)

def __repr__(self):
return "{}({}, pytype={}, assembler={}, components={}," \
" parameters={})".format(type(self).__qualname__,
self.name,
self._pytypeName,
self._assemblerClassName,
list(self.components.keys()),
self._parameters)
optionals = {}
if self._pytypeName != "object":
optionals["pytype"] = self._pytypeName
if self._assemblerClassName is not None:
optionals["assembler"] = self._assemblerClassName
if self._parameters:
optionals["parameters"] = self._parameters
if self.components:
optionals["components"] = self.components

# order is preserved in the dict
options = ", ".join(f"{k}={v!r}" for k, v in optionals.items())

# Start with mandatory fields
r = f"{self.__class__.__name__}({self.name!r}"
if options:
r = r + ", " + options
r = r + ")"
return r

def __str__(self):
return self.name


class StorageClassFactory(metaclass=Singleton):
Expand Down
11 changes: 10 additions & 1 deletion tests/test_storageClass.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,17 @@ def testCreation(self):
sc = StorageClass(className, pytype=dict)
self.assertIsInstance(sc, StorageClass)
self.assertEqual(sc.name, className)
self.assertEqual(str(sc), className)
self.assertFalse(sc.components)
self.assertTrue(sc.validateInstance({}))
self.assertFalse(sc.validateInstance(""))

r = repr(sc)
self.assertIn("StorageClass", r)
self.assertIn(className, r)
self.assertNotIn("parameters", r)
self.assertIn("pytype='dict'", r)

# Ensure we do not have an assembler
with self.assertRaises(TypeError):
sc.assembler()
Expand All @@ -63,7 +70,9 @@ def testCreation(self):
# Include some components
scc = StorageClass(className, pytype=PythonType, components={"comp1": sc})
self.assertIn("comp1", scc.components)
self.assertIn("comp1", repr(scc))
r = repr(scc)
self.assertIn("comp1", r)
self.assertIn("lsst.daf.butler.core.assembler.CompositeAssembler", r)

# Ensure that we have an assembler
self.assertIsInstance(scc.assembler(), CompositeAssembler)
Expand Down

0 comments on commit b173a3e

Please sign in to comment.