I'm trying to create a graph where multiple node types can have the same type of relationship between them. I have 5 node types; Group (spelled out below), Alias, Software, Technique & Tool. They're all basically set up the same way with the same properties, I'm just leaving them out for readability.
class Group(StructuredNode):
created = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
description = StringProperty()
ID = StringProperty(index=True)
modified = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
name = StringProperty(unique_index=True, required=True)
TYPE = StringProperty(index=True, default='review')
version = IntegerProperty(default=5)
#relationship properties go here
class Alias(StructuredNode):
name = StringProperty(unique_index=True, required=True)
TYPE = StringProperty(index=True, default='review')
#relationship properties go here
class Software(StructuredNode):
created = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
description = StringProperty()
ID = StringProperty(index=True)
modified = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
name = StringProperty(unique_index=True, required=True)
TYPE = StringProperty(index=True, default='review')
version = IntegerProperty(default=None)
#relationship properties go here
class Technique(StructuredNode):
created = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
description = StringProperty()
ID = StringProperty(index=True)
modified = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
name = StringProperty(unique_index=True, required=True)
TYPE = StringProperty(index=True, default='review')
version = IntegerProperty(default=None)
#relationship properties go here
class Tool(StructuredNode):
created = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
description = StringProperty()
ID = StringProperty(index=True)
modified = DateTimeFormatProperty(default_now=True, format="%Y-%m-%dT%H:%M:%S.%fZ")
name = StringProperty(unique_index=True, required=True)
TYPE = StringProperty(index=True, default='review')
version = IntegerProperty(default=None)
#relationship properties go here
I'd like to do something like below where I include a list of all of the possible node types when setting relationships:
uses = RelationshipTo(['Alias', 'Software', 'Technique', 'Tool'], 'USES')
alias = RelationshipTo(['Software', 'Technique', 'Tool'], 'ALIAS')
revoked_by = RelationshipTo(['Alias', 'Software', 'Technique', 'Tool'], 'REVOKED-BY')
Rather than having to spell out each different relationship type for each node:
usesalias = RelationshipTo('Alias', 'USES')
usestool = RelationshipTo('Tool', 'USES')
usestechnique = RelationshipTo('Technique', 'USES')
usessoftware = RelationshipTo('Software', 'USES')
aliassoftware = RelationshipTo('Software', 'Alias')
aliastool = RelationshipTo('Tool', 'Alias')
aliastechnique = RelationshipTo('Technique', 'Alias')
rbalias = RelationshipTo('Alias', 'REVOKED-BY')
rbtool = RelationshipTo('Tool', 'REVOKED-BY')
rbtechnique = RelationshipTo('Technique', 'REVOKED-BY')
rbsoftware = RelationshipTo('Software', 'REVOKED-BY')
......