Итак, у нас есть две метки Employee
& EmailAddress
, и к каждому узлу EmailAddress будет подключен максимум один узел Employee с отношением LINKED_TO
.
Ниже показано, как моя py2neo
модель
class BaseNeoModel(GraphObject):
"""
Implements some basic functions to guarantee some standard functionality
across all models. The main purpose here is also to compensate for some
missing basic features that we expected from GraphObjects, and improve the
way we interact with them.
"""
def __init__(self, **kwargs):
for key, value in kwargs.items():
if hasattr(self, key):
setattr(self, key, value)
class EmployeeNeoModel(BaseNeoModel):
__primarylabel__ = 'Employee'
__primarykey__ = 'IdObject'
IdObject = Property()
Name = Property()
NameFamily = Property()
NameFull = Property()
def __init__(self, **kwargs):
super().__init__(**kwargs)
def as_dict(self):
return {
'user_name': self.IdObject,
'first_name': self.Name,
'last_name': self.NameFamily,
'full_name': self.NameFull
}
def fetch(self, tribes_client_id):
person = self.match(graph).where(IdObject=self.IdObject).first()
if person is None:
raise GraphQLError(f'"{self.IdObject}" has not been found in our employee list.')
return person
def fetch_from_email(self, tribes_client_id):
email_address = EmailAddressNeoModel(IdObject=self.IdObject).fetch(tribes_client_id=tribes_client_id)
# print(email_address.Name)
connected_employees = email_address.related_employee
for connected_employee in connected_employees:
print(connected_employee)
# print(connected_employee)
#
# return connected_employee
return connected_employees
class EmailAddressNeoModel(BaseNeoModel):
__primarylabel__ = 'EmailAddress'
__primarykey__ = 'IdObject'
IdObject = Property()
Name = Property()
NameFamily = Property()
NameFull = Property()
related_employee = Related(EmployeeNeoModel, "LINKED_TO")
def __init__(self, **kwargs):
super().__init__(**kwargs)
def fetch(self, tribes_client_id):
email_address = self.match(graph).where(IdObject=self.IdObject).first()
return email_address
EmployeeNeoModel(IdObject="vinit@tribes.ai").fetch_from_email("demo_com")
Итак, в основном, в коде выше мы делаем подключение узла сотрудника к переданному узлу EmailAddress.
Теперь, когда я звоню fetch_from_email
, я ожидаю получить только Employee
узлыкоторые подключены к переданным узлам EmailAddress, но я получаю все узлы, подключенные к EmailAddress
узлу, т.е. также узлы, у которых нет метки Employee
.
То, как я понимаю, констатируя related_employee = Related(EmployeeNeoModel, "LINKED_TO")
amГоворя py2neo возвращать только узлы с меткой Сотрудника, я неправильно понимаю, если да, как правильно достичь выше?