| 29 | |
| 30 | |
| 31 | class Relationship(BaseObject): |
| 32 | |
| 33 | schema = RelationshipSchema() |
| 34 | load_schema = RelationshipSchema(exclude=['unique']) |
| 35 | |
| 36 | @property |
| 37 | def unique(self): |
| 38 | return '%s%s%s' % (self.source, self.edge, self.target) |
| 39 | |
| 40 | @classmethod |
| 41 | def from_json(cls, json): |
| 42 | return cls(source=json['source'], edge=json.get('edge'), target=json.get('target'), score=json.get('score')) |
| 43 | |
| 44 | @property |
| 45 | def display(self): |
| 46 | return self.clean(dict(source=self.source, edge=self.edge, |
| 47 | target=[self.target if self.target else 'Not Used'][0], score=self.score)) |
| 48 | |
| 49 | @property |
| 50 | def flat_display(self): |
| 51 | temp = self.display |
| 52 | temp['source'] = temp['source'].display |
| 53 | if self.target: |
| 54 | temp['target'] = temp['target'].display |
| 55 | if self.origin: |
| 56 | temp['origin'] = self.origin |
| 57 | return temp |
| 58 | |
| 59 | @property |
| 60 | def shorthand(self): |
| 61 | # compute a visual representation of a relationship for recording purposes |
| 62 | stub = f"{self.source.name}({self.source.value})" |
| 63 | if self.edge: |
| 64 | stub += f" : {self.edge}" |
| 65 | if self.target and self.target.name: |
| 66 | stub += f" : {self.target.name}({self.target.value})" |
| 67 | return stub |
| 68 | |
| 69 | def __init__(self, source, edge=None, target=None, score=1, origin=None): |
| 70 | super().__init__() |
| 71 | self.source = source |
| 72 | self.edge = edge |
| 73 | self.target = target |
| 74 | self.score = score |
| 75 | self.origin = origin |