# HG changeset patch # User Adrien Di Mascio # Date 1235142181 -3600 # Node ID e4de959c76aff9f3abab7cab3650ae9ced5b77d4 # Parent 0dcf01eb97a0e36e48c54912258603779590a327 vocabulary methods are now defined on forms, not on entities diff -r 0dcf01eb97a0 -r e4de959c76af entity.py --- a/entity.py Fri Feb 20 16:01:33 2009 +0100 +++ b/entity.py Fri Feb 20 16:03:01 2009 +0100 @@ -805,61 +805,6 @@ # cases, it doesn't make sense to sort results afterwards. return vocabfunc(rtype, limit) - def subject_relation_vocabulary(self, rtype, limit=None): - """defaut vocabulary method for the given relation, looking for - relation's object entities (i.e. self is the subject) - """ - if isinstance(rtype, basestring): - rtype = self.schema.rschema(rtype) - done = None - assert not rtype.is_final(), rtype - if self.has_eid(): - done = set(e.eid for e in getattr(self, str(rtype))) - result = [] - rsetsize = None - for objtype in rtype.objects(self.e_schema): - if limit is not None: - rsetsize = limit - len(result) - result += self.relation_vocabulary(rtype, objtype, 'subject', - rsetsize, done) - if limit is not None and len(result) >= limit: - break - return result - - def object_relation_vocabulary(self, rtype, limit=None): - """defaut vocabulary method for the given relation, looking for - relation's subject entities (i.e. self is the object) - """ - if isinstance(rtype, basestring): - rtype = self.schema.rschema(rtype) - done = None - if self.has_eid(): - done = set(e.eid for e in getattr(self, 'reverse_%s' % rtype)) - result = [] - rsetsize = None - for subjtype in rtype.subjects(self.e_schema): - if limit is not None: - rsetsize = limit - len(result) - result += self.relation_vocabulary(rtype, subjtype, 'object', - rsetsize, done) - if limit is not None and len(result) >= limit: - break - return result - - def relation_vocabulary(self, rtype, targettype, role, - limit=None, done=None): - if done is None: - done = set() - req = self.req - rset = self.unrelated(rtype, targettype, role, limit) - res = [] - for entity in rset.entities(): - if entity.eid in done: - continue - done.add(entity.eid) - res.append((entity.view('combobox'), entity.eid)) - return res - def unrelated_rql(self, rtype, targettype, role, ordermethod=None, vocabconstraints=True): """build a rql to fetch `targettype` entities unrelated to this entity diff -r 0dcf01eb97a0 -r e4de959c76af web/form.py --- a/web/form.py Fri Feb 20 16:01:33 2009 +0100 +++ b/web/form.py Fri Feb 20 16:03:01 2009 +0100 @@ -806,6 +806,64 @@ return zip((entity.req._(v) for v in choices), choices) return zip(choices, choices) + def subject_relation_vocabulary(self, rtype, limit=None): + """defaut vocabulary method for the given relation, looking for + relation's object entities (i.e. self is the subject) + """ + entity = self.entity + if isinstance(rtype, basestring): + rtype = entity.schema.rschema(rtype) + done = None + assert not rtype.is_final(), rtype + if entity.has_eid(): + done = set(e.eid for e in getattr(entity, str(rtype))) + result = [] + rsetsize = None + for objtype in rtype.objects(entity.e_schema): + if limit is not None: + rsetsize = limit - len(result) + result += self.relation_vocabulary(rtype, objtype, 'subject', + rsetsize, done) + if limit is not None and len(result) >= limit: + break + return result + + def object_relation_vocabulary(self, rtype, limit=None): + """defaut vocabulary method for the given relation, looking for + relation's subject entities (i.e. self is the object) + """ + entity = self.entity + if isinstance(rtype, basestring): + rtype = entity.schema.rschema(rtype) + done = None + if entity.has_eid(): + done = set(e.eid for e in getattr(entity, 'reverse_%s' % rtype)) + result = [] + rsetsize = None + for subjtype in rtype.subjects(entity.e_schema): + if limit is not None: + rsetsize = limit - len(result) + result += self.relation_vocabulary(rtype, subjtype, 'object', + rsetsize, done) + if limit is not None and len(result) >= limit: + break + return result + + def relation_vocabulary(self, rtype, targettype, role, + limit=None, done=None): + if done is None: + done = set() + req = self.req + rset = entity.unrelated(rtype, targettype, role, limit) + res = [] + for entity in rset.entities(): + if entity.eid in done: + continue + done.add(entity.eid) + res.append((entity.view('combobox'), entity.eid)) + return res + + class MultipleFieldsForm(FieldsForm): def __init__(self, *args, **kwargs):