OneToMany validator can be added to any relation in the config. And it is always called with the master relation (even when you create a child relation, validator will be called with the parent relation), so I do no not think that any relation type checking is required.
2014-03-06 10:07 GMT+01:00 Ryan Ollos <[email protected]>: > On Thu, Mar 6, 2014 at 12:55 AM, Anže Starič <[email protected]> wrote: > >> 2014-03-06 9:47 GMT+01:00 <[email protected]>: >> > class OneToManyValidator(Validator): >> > + """Only tree relationships are allowed. A ticket cannot have >> multiple >> > + parents.""" >> > def validate(self, relation): >> > rls = RelationsSystem(self.env) >> > - existing_relations = rls._select_relations(relation.source, >> > - relation.type) >> > + if relation.type != rls.PARENT_RELATION_TYPE: >> > + return >> > + existing_relations = rls._select_relations(relation.destination, >> > + >> rls.CHILDREN_RELATION_TYPE) >> >> I would prefer something like: >> >> - existing_relations = rls._select_relations(relation.source, >> - relation.type) >> + existing_relations = rls._select_relations(type=relation.type, >> + >> destination=relation.destination) >> >> (and modified select_relations method so it can also filter by >> destination). >> This way, validator would remain reusable. >> > > That does seem more clear. I wasn't very happy with the inverted logic, but > I didn't look at the possibility of changing _select_relations. I won't > complain if you refactor my changes ;) > > In what contexts do you see it being reusable? Do you plan to extract > rls.PARENT_RELATION_TYPE to a class variable, or in some way make > OneToManyValidator usable as a base class?
