grpc_args_parser.py 3.4 KB
Newer Older
B
BossZou 已提交
1
import ujson
P
peng.xu 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
from milvus import Status
from functools import wraps


def error_status(func):
    @wraps(func)
    def inner(*args, **kwargs):
        try:
            results = func(*args, **kwargs)
        except Exception as e:
            return Status(code=Status.UNEXPECTED_ERROR, message=str(e)), None

        return Status(code=0, message="Success"), results

    return inner


class GrpcArgsParser(object):

    @classmethod
    @error_status
J
Jin Hai 已提交
23 24 25
    def parse_proto_CollectionSchema(cls, param):
        _collection_schema = {
            'collection_name': param.collection_name,
P
peng.xu 已提交
26 27 28 29 30
            'dimension': param.dimension,
            'index_file_size': param.index_file_size,
            'metric_type': param.metric_type
        }

J
Jin Hai 已提交
31
        return param.status, _collection_schema
P
peng.xu 已提交
32 33 34

    @classmethod
    @error_status
J
Jin Hai 已提交
35 36
    def parse_proto_CollectionName(cls, param):
        return param.collection_name
P
peng.xu 已提交
37

B
BossZou 已提交
38 39 40
    @classmethod
    @error_status
    def parse_proto_FlushParam(cls, param):
J
Jin Hai 已提交
41
        return list(param.collection_name_array)
B
BossZou 已提交
42

P
peng.xu 已提交
43 44 45 46 47
    @classmethod
    @error_status
    def parse_proto_Index(cls, param):
        _index = {
            'index_type': param.index_type,
B
BossZou 已提交
48
            'params': param.extra_params[0].value
P
peng.xu 已提交
49 50 51 52 53 54 55
        }

        return _index

    @classmethod
    @error_status
    def parse_proto_IndexParam(cls, param):
J
Jin Hai 已提交
56
        _collection_name = param.collection_name
B
BossZou 已提交
57 58
        _index_type = param.index_type
        _index_param = {}
P
peng.xu 已提交
59

B
BossZou 已提交
60 61 62
        for params in param.extra_params:
            if params.key == 'params':
                _index_param = ujson.loads(str(params.value))
P
peng.xu 已提交
63

J
Jin Hai 已提交
64
        return _collection_name, _index_type, _index_param
P
peng.xu 已提交
65 66 67 68 69 70 71 72 73 74 75 76 77

    @classmethod
    @error_status
    def parse_proto_Command(cls, param):
        _cmd = param.cmd

        return _cmd

    @classmethod
    @error_status
    def parse_proto_RowRecord(cls, param):
        return list(param.vector_data)

78 79
    @classmethod
    def parse_proto_PartitionParam(cls, param):
J
Jin Hai 已提交
80
        _collection_name = param.collection_name
81 82
        _tag = param.tag

J
Jin Hai 已提交
83
        return _collection_name, _tag
84

P
peng.xu 已提交
85 86 87
    @classmethod
    @error_status
    def parse_proto_SearchParam(cls, param):
J
Jin Hai 已提交
88
        _collection_name = param.collection_name
P
peng.xu 已提交
89 90
        _topk = param.topk

B
BossZou 已提交
91 92 93 94 95 96 97 98 99 100 101 102 103
        if len(param.extra_params) == 0:
            raise Exception("Search param loss")
        _params = ujson.loads(str(param.extra_params[0].value))

        _query_record_array = []
        if param.query_record_array:
            for record in param.query_record_array:
                if record.float_data:
                    _query_record_array.append(list(record.float_data))
                else:
                    _query_record_array.append(bytes(record.binary_data))
        else:
            raise Exception("Search argument parse error: record array is empty")
P
peng.xu 已提交
104

J
Jin Hai 已提交
105
        return _collection_name, _query_record_array, _topk, _params
P
peng.xu 已提交
106

B
BossZou 已提交
107 108 109
    @classmethod
    @error_status
    def parse_proto_DeleteByIDParam(cls, param):
J
Jin Hai 已提交
110
        _collection_name = param.collection_name
B
BossZou 已提交
111 112
        _id_array = list(param.id_array)

J
Jin Hai 已提交
113
        return _collection_name, _id_array
P
peng.xu 已提交
114 115 116

    @classmethod
    @error_status
B
BossZou 已提交
117
    def parse_proto_VectorIdentity(cls, param):
J
Jin Hai 已提交
118
        _collection_name = param.collection_name
B
BossZou 已提交
119 120
        _id = param.id

J
Jin Hai 已提交
121
        return _collection_name, _id
B
BossZou 已提交
122 123 124 125

    @classmethod
    @error_status
    def parse_proto_GetVectorIDsParam(cls, param):
J
Jin Hai 已提交
126
        _collection__name = param.collection_name
B
BossZou 已提交
127
        _segment_name = param.segment_name
P
peng.xu 已提交
128

J
Jin Hai 已提交
129
        return _collection__name, _segment_name