Выводы Py2neo v4 не соответствуют документации, ошибка: литеральные значения Cypher типа py2neo.data.Walkable не поддерживаются? - PullRequest
0 голосов
/ 30 ноября 2018

Я впервые пытаюсь использовать Py2neo v4 на своем ноутбуке Jupyter и сталкиваюсь с некоторыми странными вещами в выходных данных.Я пытаюсь следовать документации Py2neo v4, найденной здесь: Py2neo v4 Handbook

Вот первая часть очень простого кода, который я копирую из руководства.Он строит простые узлы с отношениями. Выводы, которые я должен получить, записаны в виде комментариев ниже.

from py2neo.data import Node, Relationship
a = Node("Person", name="Alice")
b = Node("Person", name="Bob")
ab = Relationship(a, "KNOWS", b)
ab ##Output should be (Alice)-[:KNOWS]->(Bob)
>>> (Alice)-[:KNOWS {}]->(Bob)

Сначала я думал, что {} в "[: KNOWS {}]" было связано стот факт, что никакие свойства не были приписаны этой взаимосвязи, однако следующий блок кода также дал другие выходные данные по сравнению с руководством.

c = Node("Person", name="Carol")
class WorksWith(Relationship): pass
ac = WorksWith(a, c)
type(ac) ##Output should be "WORKS_WITH"
>>> __main__.WorksWith

Наконец, я получил сообщение об ошибке при репликации другой части руководства.

w = ab + Relationship(b, "LIKES", c) + ac
w ##Output should be (Alice)-[:KNOWS]->(Bob)-[:LIKES]->(Carol)<-[:WORKS_WITH]-(Alice)

Вот ошибка:

    ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\IPython\core\formatters.py in __call__(self, obj)
    700                 type_pprinters=self.type_printers,
    701                 deferred_pprinters=self.deferred_printers)
--> 702             printer.pretty(obj)
    703             printer.flush()
    704             return stream.getvalue()

~\AppData\Local\Continuum\anaconda3\lib\site-packages\IPython\lib\pretty.py in pretty(self, obj)
    398                         if cls is not object \
    399                                 and callable(cls.__dict__.get('__repr__')):
--> 400                             return _repr_pprint(obj, self, cycle)
    401 
    402             return _default_pprint(obj, self, cycle)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\IPython\lib\pretty.py in _repr_pprint(obj, p, cycle)
    693     """A pprint that just redirects to the normal repr function."""
    694     # Find newlines and replace them with p.break_()
--> 695     output = repr(obj)
    696     for idx,output_line in enumerate(output.splitlines()):
    697         if idx:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\py2neo\data.py in __repr__(self)
    672 
    673     def __repr__(self):
--> 674         return xstr(cypher_repr(self))
    675 
    676     def __eq__(self, other):

~\AppData\Local\Continuum\anaconda3\lib\site-packages\py2neo\cypher\__init__.py in cypher_repr(value, **kwargs)
     69     """
     70     encoder = CypherEncoder(**kwargs)
---> 71     return encoder.encode_value(value)
     72 
     73 

~\AppData\Local\Continuum\anaconda3\lib\site-packages\py2neo\cypher\encoding.py in encode_value(self, value)
    194             return u"duration({})".format(self.encode_string(value.iso_format()))
    195         raise TypeError("Cypher literal values of type %s.%s are not supported" %
--> 196                         (type(value).__module__, type(value).__name__))
    197 
    198     def encode_string(self, value):

TypeError: Cypher literal values of type py2neo.data.Walkable are not supported

Я заставил кого-то еще попробовать код документации на своем iPython, и они получили те же ошибки.Кто-нибудь знает, как это исправить?

...