128 return self.select('Any', 'Any') |
128 return self.select('Any', 'Any') |
129 eschema = self.schema.eschema(etype) |
129 eschema = self.schema.eschema(etype) |
130 baseschemas = [eschema] + eschema.ancestors() |
130 baseschemas = [eschema] + eschema.ancestors() |
131 # browse ancestors from most specific to most generic and try to find an |
131 # browse ancestors from most specific to most generic and try to find an |
132 # associated custom entity class |
132 # associated custom entity class |
|
133 cls = None |
133 for baseschema in baseschemas: |
134 for baseschema in baseschemas: |
134 try: |
135 try: |
135 btype = ETYPE_NAME_MAP[baseschema] |
136 btype = ETYPE_NAME_MAP[baseschema] |
136 except KeyError: |
137 except KeyError: |
137 btype = str(baseschema) |
138 btype = str(baseschema) |
138 try: |
139 if cls is None: |
139 objects = self[btype] |
140 try: |
140 assert len(objects) == 1, objects |
141 objects = self[btype] |
141 cls = objects[0] |
142 assert len(objects) == 1, objects |
142 break |
143 cls = objects[0] |
143 except ObjectNotFound: |
144 except ObjectNotFound: |
144 pass |
145 pass |
145 else: |
146 else: |
|
147 # ensure parent classes are built first |
|
148 self.etype_class(btype) |
|
149 if cls is None: |
146 # no entity class for any of the ancestors, fallback to the default |
150 # no entity class for any of the ancestors, fallback to the default |
147 # one |
151 # one |
148 objects = self['Any'] |
152 objects = self['Any'] |
149 assert len(objects) == 1, objects |
153 assert len(objects) == 1, objects |
150 cls = objects[0] |
154 cls = objects[0] |