예제 #1
0
    def test_relationship_api(self):
        relationship = Relationship(self.get_edge_value(b'Tom', b'Lily'))

        assert 'Tom' == relationship.start_vertex_id().as_string()

        assert 'Lily' == relationship.end_vertex_id().as_string()

        assert 100 == relationship.ranking()

        assert 100 == relationship.ranking()

        assert 'classmate' == relationship.edge_name()

        assert ['prop0', 'prop1', 'prop2', 'prop3',
                'prop4'] == relationship.keys()

        expect_propertys = {}
        for key in relationship.properties().keys():
            expect_propertys[key] = relationship.properties()[key].as_int()
        assert {
            'prop0': 0,
            'prop1': 1,
            'prop2': 2,
            'prop3': 3,
            'prop4': 4
        } == expect_propertys
예제 #2
0
    def test_path_api(self):
        path = PathWrapper(self.get_path_value(b'Tom'))
        assert Node(self.get_vertex_value(b'Tom')) == path.start_node()

        assert 5 == path.length()

        assert path.contain_node(Node(self.get_vertex_value(b'vertex3')))

        assert path.contain_relationship(Relationship(self.get_edge_value(b'vertex3', b'vertex2')))

        nodes = list()
        nodes.append(path.start_node())
        for i in range(0, 5):
            nodes.append(Node(self.get_vertex_value(('vertex'.format(i)).encode('utf-8'))))

        relationships = list()
        relationships.append(Relationship(self.get_edge_value(b'Tom', b'vertex0')))
        for i in range(0, 4):
            if i % 2 == 0:
                relationships.append(Relationship(
                    self.get_edge_value(('vertex{}'.format(i + 1)).encode('utf-8'),
                                        ('vertex{}'.format(i)).encode('utf-8'))))
            else:
                relationships.append(Relationship(
                    self.get_edge_value(('vertex{}'.format(i)).encode('utf-8'),
                                        ('vertex{}'.format(i + 1)).encode('utf-8'))))

        assert relationships == path.relationships()
예제 #3
0
    def test_relationship_api(self):
        relationship = Relationship(self.get_edge_value('Tom', 'Lily'))

        assert 'Tom' == relationship.start_vertex_id()

        assert 'Lily' == relationship.end_vertex_id()

        assert 100 == relationship.ranking()

        assert 100 == relationship.ranking()

        assert 'classmate' == relationship.edge_name()

        assert ['prop0', 'prop1', 'prop2', 'prop3',
                'prop4'] == relationship.keys()

        assert {
            'prop0': 0,
            'prop1': 1,
            'prop2': 2,
            'prop3': 3,
            'prop4': 4
        } == relationship.propertys()

        assert str(relationship) == "Relationship(" \
                                    "[Tom-[classmate(1)]->Lily@100]:" \
                                    "{'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4})"
예제 #4
0
    def as_relationship(self):
        """convert the edge data to structure Relationship

        :return: Relationship
        """
        if len(self._row.values) < self.PROP_START_INDEX:
            raise RuntimeError('The row value is bad format, '
                               'as relationship failed: len is {}'
                               .format(len(self._row.values)))
        edge = Edge()
        edge.src = self._row.values[0]
        edge.type = self._row.values[1].get_iVal()
        edge.name = self._edge_name
        edge.ranking = self._row.values[2].get_iVal()
        edge.dst = self._row.values[3]
        edge.props = {}
        index = self.PROP_START_INDEX
        while index < len(self._col_names):
            edge.props[self._col_names[index]] = self._row.values[index]
            index = index + 1

        return Relationship(edge).set_decode_type(self._decode_type)
예제 #5
0
    def test_path_api(self):
        path = Path(self.get_path_value('Tom'))
        assert Node(self.get_vertex_value('Tom')) == path.start_node()

        assert 5 == path.length()

        assert path.contain_node(Node(self.get_vertex_value('vertex3')))

        assert path.contain_relationship(
            Relationship(self.get_edge_value('vertex3', 'vertex2')))

        nodes = list()
        nodes.append(path.start_node())
        for i in range(0, 5):
            nodes.append(Node(self.get_vertex_value('vertex'.format(i))))

        relationships = list()
        relationships.append(
            Relationship(self.get_edge_value('Tom', 'vertex0')))
        for i in range(0, 4):
            if i % 2 == 0:
                relationships.append(
                    Relationship(
                        self.get_edge_value('vertex{}'.format(i + 1),
                                            'vertex{}'.format(i))))
            else:
                relationships.append(
                    Relationship(
                        self.get_edge_value('vertex{}'.format(i),
                                            'vertex{}'.format(i + 1))))

        assert relationships == path.relationships()

        expect_str = "Path(" \
                     "segments: [" \
                     "Segment(" \
                     "start_node: {Node}([Tom]:{" \
                     "{tag_name: tag0, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag1, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag2, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}}), " \
                     "relations: Relationship([" \
                     "Tom-[classmate(1)]->vertex0@100]:" \
                     "{'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}), " \
                     "end_node: {Node}([vertex0]:{" \
                     "{tag_name: tag0, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag1, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag2, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}})), " \
                     "Segment(" \
                     "start_node: {Node}([vertex1]:{" \
                     "{tag_name: tag0, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag1, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag2, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}}), " \
                     "relations: Relationship([" \
                     "vertex1-[classmate(1)]->vertex0@100]:" \
                     "{'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}), " \
                     "end_node: {Node}([vertex0]:{" \
                     "{tag_name: tag0, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag1, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}," \
                     "{tag_name: tag2, props: {'prop0': 0, 'prop1': 1, 'prop2': 2, 'prop3': 3, 'prop4': 4}}}))])"

        print(Path(self.get_path_value('Tom', 2)))
        assert str(Path(self.get_path_value('Tom', 2))) == expect_str
예제 #6
0
 def compare_edge(self, lhs: Relationship, rhs: Relationship):
     if not lhs == rhs:
         return False
     if not self._strict:
         return True
     return self.compare_map(lhs.propertys(), rhs.propertys())