@@ -204,7 +204,8 @@ def __repr__(self):
204204
205205
206206class Entity :
207- """ An entity that contains fields and relationships. """
207+ """ An entity that contains fields and relationships. Base class
208+ for DbObject (which is base class for concrete schema classes). """
208209
209210 # Every Entity has an "id" and a "deleted" field
210211 # Name the "id" field "uid" in Python to avoid conflict with keyword.
@@ -225,13 +226,18 @@ def _attributes_of_type(cls, attr_type):
225226
226227 @classmethod
227228 def fields (cls ):
228- """ Yields all the Fields declared in a concrete subclass. """
229+ """ Returns a generateor that yields all the Fields declared in a
230+ concrete subclass.
231+ """
229232 for attr in cls ._attributes_of_type (Field ):
230233 if attr != Entity .deleted :
231234 yield attr
232235
233236 @classmethod
234237 def relationships (cls ):
238+ """ Returns a generateor that yields all the Relationships declared in
239+ a concrete subclass.
240+ """
235241 return cls ._attributes_of_type (Relationship )
236242
237243 @classmethod
@@ -274,13 +280,6 @@ def type_name(cls):
274280 """
275281 return cls .__name__ .split ("." )[- 1 ]
276282
277- @classmethod
278- def subclasses (cls ):
279- """ Generates all the subclasses (also not immediate) of this class. """
280- for subclass in cls .__subclasses__ ():
281- yield subclass
282- for subsub in subclass .subclasses ():
283- yield subsub
284283
285284 @classmethod
286285 def named (cls , name ):
@@ -294,7 +293,13 @@ def named(cls, name):
294293 Raises:
295294 LabelboxError: if there is no such class.
296295 """
297- for t in Entity .subclasses ():
296+ def subclasses (cls ):
297+ for subclass in cls .__subclasses__ ():
298+ yield subclass
299+ for subsub in subclasses (subclass ):
300+ yield subsub
301+
302+ for t in subclasses (Entity ):
298303 if t .type_name () == name :
299304 return t
300305 raise LabelboxError ("Failed to find Entity for name: %s" % name )
0 commit comments