Exemple #1
0
def p_vid(p):
    '''
        vid : STRING
            | INT
            | function
    '''
    p[0] = p[1]
    if not isinstance(p[0], Value):
        if type(p[0]) in [str, bytes]:
            p[0] = Value(sVal=p[0])
        elif type(p[0]) is int:
            p[0] = Value(iVal=p[0])
        else:
            raise ValueError(f"Invalid vid type: {type(p[0])}")
Exemple #2
0
    def test_node_api(self):
        test_set = set()
        test_set.add(Value())
        node = Node(self.get_vertex_value(b'Tom'))
        assert 'Tom' == node.get_id().as_string()

        assert node.has_tag('tag2')

        assert ['prop0', 'prop1', 'prop2', 'prop3',
                'prop4'] == node.prop_names('tag2')

        assert [0, 1, 2, 3,
                4] == [(value.as_int()) for value in node.prop_values('tag2')]

        assert ['tag0', 'tag1', 'tag2'] == node.tags()

        expect_propertys = {}
        for key in node.properties('tag2').keys():
            expect_propertys[key] = node.properties('tag2')[key].as_int()
        assert {
            'prop0': 0,
            'prop1': 1,
            'prop2': 2,
            'prop3': 3,
            'prop4': 4
        } == expect_propertys
Exemple #3
0
def p_set(p):
    '''
        set : '{' list_items '}'
    '''
    s = Set()
    s.values = set(p[2])
    p[0] = Value(uVal=s)
Exemple #4
0
def hash_columns(ds, hashed_columns):
    if len(hashed_columns) == 0:
        return ds
    assert all(col < len(ds.column_names) for col in hashed_columns)
    for row in ds.rows:
        for col in hashed_columns:
            val = row.values[col]
            if val.getType() not in [Value.NVAL, Value.__EMPTY__]:
                row.values[col] = Value(iVal=murmurhash2(val))
    return ds
def hash_columns(ds, hashed_columns):
    if len(hashed_columns) == 0:
        return ds
    for col in hashed_columns:
        assert col < len(ds.column_names), "The hashed column should in range."
    for row in ds.rows:
        for col in hashed_columns:
            if row.values[col].getType() != Value.NVAL and row.values[col].getType() != Value.__EMPTY__:
                row.values[col] = Value(iVal = murmurhash2(row.values[col]))
    return ds
Exemple #6
0
def p_path(p):
    '''
        path : '<' vertex steps '>'
             | '<' vertex '>'
    '''
    path = Path()
    path.src = p[2].get_vVal()
    if len(p) == 5:
        path.steps = p[3]
    p[0] = Value(pVal=path)
Exemple #7
0
def p_list(p):
    '''
        list : '[' list_items ']'
             | '[' ']'
    '''
    l = List()
    if len(p) == 4:
        l.values = p[2]
    else:
        l.values = []
    p[0] = Value(lVal=l)
Exemple #8
0
def p_map(p):
    '''
        map : '{' map_items '}'
            | '{' '}'
    '''
    m = Map()
    if len(p) == 4:
        m.kvs = p[2]
    else:
        m.kvs = {}
    p[0] = Value(mVal=m)
Exemple #9
0
def p_edge(p):
    '''
        edge : '-' edge_spec '-' '>'
             | '<' '-' edge_spec '-'
    '''
    if p[1] == '-':
        e = p[2]
        e.type = 1
    else:
        e = p[3]
        e.type = -1
    p[0] = Value(eVal=e)
Exemple #10
0
def p_vertex(p):
    '''
        vertex : '(' tag_list ')'
               | '(' STRING tag_list ')'
    '''
    vid = None
    tags = None
    if len(p) == 4:
        tags = p[2]
    else:
        vid = p[2].get_sVal()
        tags = p[3]
    v = Vertex(vid=vid, tags=tags)
    p[0] = Value(vVal=v)
Exemple #11
0
def t_BOOLEAN(t):
    r'(?i)true|false'
    v = Value()
    if t.value.lower() == 'true':
        v.set_bVal(True)
    else:
        v.set_bVal(False)
    t.value = v
    return t
Exemple #12
0
def p_expr(p):
    '''
        expr : EMPTY
             | NULL
             | NaN
             | BAD_DATA
             | BAD_TYPE
             | OVERFLOW
             | UNKNOWN_PROP
             | DIV_BY_ZERO
             | OUT_OF_RANGE
             | INT
             | FLOAT
             | BOOLEAN
             | STRING
             | PATTERN
             | list
             | set
             | map
             | vertex
             | edge
             | path
             | function
    '''
    if isinstance(p[1], Value) or isinstance(p[1], Pattern):
        p[0] = p[1]
    elif type(p[1]) in [str, bytes]:
        p[0] = Value(sVal=p[1])
    elif type(p[1]) is int:
        p[0] = Value(iVal=p[1])
    elif type(p[1]) is bool:
        p[0] = Value(bVal=p[1])
    elif type(p[1]) is float:
        p[0] = Value(fVal=p[1])
    else:
        raise ValueError(f"Invalid value type: {type(p[1])}")
Exemple #13
0
def t_OVERFLOW(t):
    r'OVERFLOW'
    t.value = Value(nVal=NullType.ERR_OVERFLOW)
    return t
Exemple #14
0
def t_BAD_TYPE(t):
    r'BAD_TYPE'
    t.value = Value(nVal=NullType.BAD_TYPE)
    return t
Exemple #15
0
def t_BAD_DATA(t):
    r'BAD_DATA'
    t.value = Value(nVal=NullType.BAD_DATA)
    return t
Exemple #16
0
def t_NaN(t):
    r'NaN'
    t.value = Value(nVal=NullType.NaN)
    return t
Exemple #17
0
def t_NULL(t):
    r'NULL'
    t.value = Value(nVal=NullType.__NULL__)
    return t
Exemple #18
0
def t_EMPTY(t):
    r'EMPTY'
    t.value = Value()
    return t
Exemple #19
0
 def compare_vid(self, lid: Value, rid: Value) -> bool:
     if lid.getType() == Value.IVAL:
         if rid.getType() == Value.IVAL:
             return self._compare_vid(lid.get_iVal(), rid.get_iVal())
         if rid.getType() == Value.SVAL:
             return self._compare_vid(lid.get_iVal(), rid.get_sVal())
         return False
     if lid.getType() == Value.SVAL:
         if rid.getType() == Value.SVAL:
             return self._compare_vid(lid.get_sVal(), rid.get_sVal())
         return False
     return False
Exemple #20
0
    def test_all_interface(self):
        result = self.get_result_set()
        assert result.space_name() == "test"
        assert result.comment() == "Permission"
        assert result.error_msg() == "Permission"
        assert result.error_code() == ErrorCode.E_BAD_PERMISSION
        assert result.plan_desc() is None
        assert result.latency() == 100
        assert not result.is_empty()
        assert not result.is_succeeded()
        expect_keys = [
            "col1_empty", "col2_null", "col3_bool", "col4_int", "col5_double",
            "col6_string", "col7_list", "col8_set", "col9_map", "col10_time",
            "col11_date", "col12_datetime", "col13_vertex", "col14_edge",
            "col15_path"
        ]
        assert result.keys() == expect_keys
        assert result.col_size() == 15
        assert result.row_size() == 2

        # test column_values
        assert len(result.column_values("col6_string")) == 2
        assert result.column_values("col6_string")[0].is_string()
        assert result.column_values(
            "col6_string")[0].as_string() == "hello world"
        # test row_values
        assert len(result.row_values(0)) == 15
        assert result.row_values(0)[5].is_string()
        assert result.row_values(0)[5].as_string() == "hello world"

        # test rows
        assert len(result.rows()) == 2
        assert len(result.rows()[0].values) == 15
        assert isinstance(result.rows()[0].values[0], Value)
        assert isinstance(result.get_row_types(), list)

        # test get_row_types
        assert result.get_row_types() == [
            ttypes.Value.__EMPTY__, ttypes.Value.NVAL, ttypes.Value.BVAL,
            ttypes.Value.IVAL, ttypes.Value.FVAL, ttypes.Value.SVAL,
            ttypes.Value.LVAL, ttypes.Value.UVAL, ttypes.Value.MVAL,
            ttypes.Value.TVAL, ttypes.Value.DVAL, ttypes.Value.DTVAL,
            ttypes.Value.VVAL, ttypes.Value.EVAL, ttypes.Value.PVAL
        ]

        # test record
        in_use = False
        for record in result:
            in_use = True
            record.size() == 15

            # test keys()
            assert record.keys() == expect_keys
            # test values()
            values = record.values()
            assert len(record.values()) == 15
            assert record.values()[0].is_empty()
            assert record.values()[5].is_string()
            assert record.values()[5].is_string()
            assert record.values()[5].as_string() == "hello world"

            # test get_value()
            assert record.get_value(0).is_empty()
            assert values[0].is_empty()
            assert record.get_value(1).is_null()
            assert record.get_value(1).as_null() == Null(Null.BAD_DATA)
            null_value = Value(nVal=Null.BAD_DATA)
            assert record.get_value(1) == ValueWrapper(null_value)
            assert str(record.get_value(1).as_null()) == 'BAD_DATA'

            # test get_value_by_key()
            assert record.get_value_by_key('col2_null').is_null()
            assert record.get_value_by_key('col3_bool').is_bool()
            assert not record.get_value_by_key('col3_bool').as_bool()

            # get_value_by_key with not exited key
            try:
                record.get_value_by_key('not existed')
                assert False, 'Not expect here'
            except InvalidKeyException as e:
                assert True
                assert e.message == "KeyError: `not existed'"
            assert values[1].is_null()
            assert record.get_value(2).is_bool()
            assert not record.get_value(2).as_bool()
            assert record.get_value(2).is_bool()
            assert record.get_value(3).is_int()
            assert record.get_value(3).as_int() == 100
            assert record.get_value(4).is_double()
            assert record.get_value(4).as_double() == 10.01
            assert record.get_value(5).is_string()
            assert record.get_value(5).as_string() == "hello world"
            assert record.get_value(6).is_list()
            assert record.get_value(7).is_set()
            assert record.get_value(8).is_map()
            assert record.get_value(9).is_time()
            assert record.get_value(10).is_date()
            assert record.get_value(11).is_datetime()
            assert record.get_value(12).is_vertex()
            assert record.get_value(13).is_edge()
            assert record.get_value(14).is_path()
        assert in_use

        # test use iterator again
        in_use = False
        for record in result:
            in_use = True
            record.size() == 15
        assert in_use
Exemple #21
0
def t_UNKNOWN_PROP(t):
    r'UNKNOWN_PROP'
    t.value = Value(nVal=NullType.UNKNOWN_PROP)
    return t
Exemple #22
0
def p_edge_spec(p):
    '''
        edge : '[' edge_rank edge_props ']'
             | '[' ':' LABEL edge_props ']'
             | '[' ':' LABEL edge_rank edge_props ']'
             | '[' vid '-' '>' vid edge_props ']'
             | '[' vid '-' '>' vid edge_rank edge_props ']'
             | '[' ':' LABEL vid '-' '>' vid edge_props ']'
             | '[' ':' LABEL vid '-' '>' vid edge_rank edge_props ']'
             | '[' vid '<' '-' vid edge_props ']'
             | '[' vid '<' '-' vid edge_rank edge_props ']'
             | '[' ':' LABEL vid '<' '-' vid edge_props ']'
             | '[' ':' LABEL vid '<' '-' vid edge_rank edge_props ']'
    '''
    e = Edge()
    name = None
    rank = None
    src = None
    dst = None
    props = None
    etype = None

    if len(p) == 5:
        rank = p[2]
        props = p[3]
    elif len(p) == 6:
        name = p[3]
        props = p[4]
    elif len(p) == 7:
        name = p[3]
        rank = p[4]
        props = p[5]
    elif len(p) == 8:
        src = p[2]
        dst = p[5]
        if p[3] == '<' and p[4] == '-':
            etype = -1
        props = p[6]
    elif len(p) == 9:
        src = p[2]
        dst = p[5]
        if p[3] == '<' and p[4] == '-':
            etype = -1
        rank = p[6]
        props = p[7]
    elif len(p) == 10:
        name = p[3]
        src = p[4]
        dst = p[7]
        if p[5] == '<' and p[6] == '-':
            etype = -1
        props = p[8]
    elif len(p) == 11:
        name = p[3]
        src = p[4]
        dst = p[7]
        if p[5] == '<' and p[6] == '-':
            etype = -1
        rank = p[8]
        props = p[9]

    e.name = name
    e.ranking = rank
    e.src = src
    e.dst = dst
    e.props = props
    # default value of e.type is 1 if etype is None
    e.type = etype

    p[0] = Value(eVal=e)
Exemple #23
0
def t_OUT_OF_RANGE(t):
    r'OUT_OF_RANGE'
    t.value = Value(nVal=NullType.OUT_OF_RANGE)
    return t
Exemple #24
0
def t_dstr_STRING(t):
    r'"'
    t.value = Value(sVal=t.lexer.string)
    t.lexer.begin('INITIAL')
    return t
Exemple #25
0
def t_INT(t):
    r'-?\d+'
    t.value = Value(iVal=int(t.value))
    return t
Exemple #26
0
def register_function(name, func):
    functions[name] = func


def parse(s):
    return parser.parse(s)


def parse_row(row):
    return [str(parse(x)) for x in row]


if __name__ == '__main__':
    expected = {}
    expected['EMPTY'] = Value()
    expected['NULL'] = Value(nVal=NullType.__NULL__)
    expected['NaN'] = Value(nVal=NullType.NaN)
    expected['BAD_DATA'] = Value(nVal=NullType.BAD_DATA)
    expected['BAD_TYPE'] = Value(nVal=NullType.BAD_TYPE)
    expected['OVERFLOW'] = Value(nVal=NullType.ERR_OVERFLOW)
    expected['UNKNOWN_PROP'] = Value(nVal=NullType.UNKNOWN_PROP)
    expected['DIV_BY_ZERO'] = Value(nVal=NullType.DIV_BY_ZERO)
    expected['OUT_OF_RANGE'] = Value(nVal=NullType.OUT_OF_RANGE)
    expected['123'] = Value(iVal=123)
    expected['-123'] = Value(iVal=-123)
    expected['3.14'] = Value(fVal=3.14)
    expected['-3.14'] = Value(fVal=-3.14)
    expected['true'] = Value(bVal=True)
    expected['True'] = Value(bVal=True)
    expected['false'] = Value(bVal=False)
Exemple #27
0
def t_DIV_BY_ZERO(t):
    r'DIV_BY_ZERO'
    t.value = Value(nVal=NullType.DIV_BY_ZERO)
    return t
Exemple #28
0
 def compare_value(self, lhs: Value, rhs: Union[Value, Pattern]) -> bool:
     """
     lhs and rhs represent response data and expected data respectively
     """
     if type(rhs) is Pattern:
         dsp = DataSetPrinter(self._decode_type)
         return bool(rhs.match(dsp.to_string(lhs)))
     if lhs.getType() == Value.__EMPTY__:
         return rhs.getType() == Value.__EMPTY__
     if lhs.getType() == Value.NVAL:
         if not rhs.getType() == Value.NVAL:
             return False
         return lhs.get_nVal() == rhs.get_nVal()
     if lhs.getType() == Value.BVAL:
         if not rhs.getType() == Value.BVAL:
             return False
         return lhs.get_bVal() == rhs.get_bVal()
     if lhs.getType() == Value.IVAL:
         if not rhs.getType() == Value.IVAL:
             return False
         return lhs.get_iVal() == rhs.get_iVal()
     if lhs.getType() == Value.FVAL:
         if not rhs.getType() == Value.FVAL:
             return False
         return math.fabs(lhs.get_fVal() - rhs.get_fVal()) < 1.0E-8
     if lhs.getType() == Value.SVAL:
         if not rhs.getType() == Value.SVAL:
             return False
         return lhs.get_sVal() == self.bstr(rhs.get_sVal())
     if lhs.getType() == Value.DVAL:
         if rhs.getType() == Value.DVAL:
             return lhs.get_dVal() == rhs.get_dVal()
         if rhs.getType() == Value.SVAL:
             ld = lhs.get_dVal()
             lds = "%d-%02d-%02d" % (ld.year, ld.month, ld.day)
             rv = rhs.get_sVal()
             return lds == rv if type(rv) == str else self.b(lds) == rv
         return False
     if lhs.getType() == Value.TVAL:
         if rhs.getType() == Value.TVAL:
             return lhs.get_tVal() == rhs.get_tVal()
         if rhs.getType() == Value.SVAL:
             lt = lhs.get_tVal()
             lts = "%02d:%02d:%02d.%06d" % (lt.hour, lt.minute, lt.sec,
                                            lt.microsec)
             rv = rhs.get_sVal()
             return lts == rv if type(rv) == str else self.b(lts) == rv
         return False
     if lhs.getType() == Value.DTVAL:
         if rhs.getType() == Value.DTVAL:
             return lhs.get_dtVal() == rhs.get_dtVal()
         if rhs.getType() == Value.SVAL:
             ldt = lhs.get_dtVal()
             ldts = "%d-%02d-%02dT%02d:%02d:%02d.%06d" % (
                 ldt.year, ldt.month, ldt.day, ldt.hour, ldt.minute,
                 ldt.sec, ldt.microsec)
             rv = rhs.get_sVal()
             return ldts == rv if type(rv) == str else self.b(ldts) == rv
         return False
     if lhs.getType() == Value.LVAL:
         if not rhs.getType() == Value.LVAL:
             return False
         lvals = lhs.get_lVal().values
         rvals = rhs.get_lVal().values
         return self.compare_list(lvals, rvals)
     if lhs.getType() == Value.UVAL:
         if not rhs.getType() == Value.UVAL:
             return False
         lvals = lhs.get_uVal().values
         rvals = rhs.get_uVal().values
         res, _ = self._compare_list(lvals, rvals, self.compare_value)
         return res
     if lhs.getType() == Value.MVAL:
         if not rhs.getType() == Value.MVAL:
             return False
         lkvs = lhs.get_mVal().kvs
         rkvs = rhs.get_mVal().kvs
         return self.compare_map(lkvs, rkvs)
     if lhs.getType() == Value.VVAL:
         if not rhs.getType() == Value.VVAL:
             return False
         return self.compare_node(lhs.get_vVal(), rhs.get_vVal())
     if lhs.getType() == Value.EVAL:
         if not rhs.getType() == Value.EVAL:
             return False
         return self.compare_edge(lhs.get_eVal(), rhs.get_eVal())
     if lhs.getType() == Value.PVAL:
         if not rhs.getType() == Value.PVAL:
             return False
         return self.compare_path(lhs.get_pVal(), rhs.get_pVal())
     return False
Exemple #29
0
def t_FLOAT(t):
    r'-?\d+\.\d+'
    t.value = Value(fVal=float(t.value))
    return t
Exemple #30
0
    for cell in row:
        v = nbv.parse(cell)
        if v is None:
            raise Exception('Unable to parse %s' % cell)
        list.append(v)
    return Row(list)


if __name__ == '__main__':
    headings = ['m', 'r', 'n']
    rows = [
        ['1', '2', '3'],
        ['()', '-->', '()'],
        ['("vid")', '<-[:e "1" -> "2" @-1 {p1: 0, p2: [1, 2, 3]}]-', '()'],
        ['<()-->()<--()>', '()', '"prop"'],
        ['EMPTY', 'NULL', 'BAD_TYPE'],
    ]
    expected = DataSet(column_names = headings,\
            rows = [
                Row([Value(iVal=1), Value(iVal=2), Value(iVal=3)]),
                Row([Value(vVal=Vertex()), Value(eVal=Edge(type=1)), Value(vVal=Vertex())]),
                Row([Value(vVal=Vertex('vid')), Value(eVal=Edge(name='e',type=-1,src='1',dst='2',ranking=-1,props={'p1': Value(iVal=0), 'p2': Value(lVal=List([Value(iVal=1),Value(iVal=2),Value(iVal=3)]))})), Value(vVal=Vertex())]),
                Row([Value(pVal=Path(src=Vertex(),steps=[Step(type=1,dst=Vertex()),Step(type=-1,dst=Vertex())])), Value(vVal=Vertex()), Value(sVal='prop')]),
                Row([Value(), Value(nVal=NullType.__NULL__), Value(nVal=NullType.BAD_TYPE)])
            ])

    table = bh.Table(headings=headings, rows=rows)
    dataset = parse(table)
    assert dataset == expected,\
                    "Parsed DataSet doesn't match, \nexpected: %s, \nactual: %s" % (expected, dataset)