182 else: |
182 else: |
183 category = 'generic' |
183 category = 'generic' |
184 cls.rcategories.set_rtag(category, rschema, role, X, Y) |
184 cls.rcategories.set_rtag(category, rschema, role, X, Y) |
185 |
185 |
186 @classmethod |
186 @classmethod |
187 def erelations_by_category(cls, entity, categories=None, permission=None): |
187 def erelations_by_category(cls, entity, categories=None, permission=None, rtags=None): |
188 """return a list of (relation schema, target schemas, role) matching |
188 """return a list of (relation schema, target schemas, role) matching |
189 categories and permission |
189 categories and permission |
190 """ |
190 """ |
191 if categories is not None: |
191 if categories is not None: |
192 if not isinstance(categories, (list, tuple, set, frozenset)): |
192 if not isinstance(categories, (list, tuple, set, frozenset)): |
193 categories = (categories,) |
193 categories = (categories,) |
194 if not isinstance(categories, (set, frozenset)): |
194 if not isinstance(categories, (set, frozenset)): |
195 categories = frozenset(categories) |
195 categories = frozenset(categories) |
196 eschema = entity.e_schema |
196 eschema = entity.e_schema |
197 rtags = cls.rcategories |
197 if rtags is None: |
|
198 rtags = cls.rcategories |
198 permsoverrides = cls.rpermissions_overrides |
199 permsoverrides = cls.rpermissions_overrides |
199 if entity.has_eid(): |
200 if entity.has_eid(): |
200 eid = entity.eid |
201 eid = entity.eid |
201 else: |
202 else: |
202 eid = None |
203 eid = None |
305 given category(ies) and permission |
306 given category(ies) and permission |
306 """ |
307 """ |
307 return self.erelations_by_category(self.edited_entity, categories, |
308 return self.erelations_by_category(self.edited_entity, categories, |
308 permission) |
309 permission) |
309 |
310 |
|
311 def inlined_relations(self): |
|
312 """return a list of (relation schema, target schemas, role) matching |
|
313 given category(ies) and permission |
|
314 """ |
|
315 # we'll need an initialized varmaker if there are some inlined relation |
|
316 self.initialize_varmaker() |
|
317 return self.erelations_by_category(self.edited_entity, True, 'add', self.rinlined) |
|
318 |
310 def srelations_by_category(self, categories=None, permission=None): |
319 def srelations_by_category(self, categories=None, permission=None): |
311 """filter out result of relations_by_category(categories, permission) by |
320 """filter out result of relations_by_category(categories, permission) by |
312 removing final relations |
321 removing final relations |
313 |
322 |
314 return a sorted list of (relation's label, relation'schema, role) |
323 return a sorted list of (relation's label, relation'schema, role) |