blob: 94563a06462a0a86959b21203e4ee2efbefbe678 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# pylint: disable=logging-fstring-interpolation
import json
from pyhugegraph.api.common import HugeParamsBase
from pyhugegraph.utils.huge_decorator import decorator_create, decorator_params
from pyhugegraph.utils.log import log
from pyhugegraph.utils.util import ResponseValidation
class IndexLabel(HugeParamsBase):
@decorator_params
def onV(self, vertex_label) -> "IndexLabel":
self._parameter_holder.set("base_value", vertex_label)
self._parameter_holder.set("base_type", "VERTEX_LABEL")
return self
@decorator_params
def onE(self, edge_label) -> "IndexLabel":
self._parameter_holder.set("base_value", edge_label)
self._parameter_holder.set("base_type", "EDGE_LABEL")
return self
@decorator_params
def by(self, *args) -> "IndexLabel":
if "fields" not in self._parameter_holder.get_keys():
self._parameter_holder.set("fields", set())
s = self._parameter_holder.get_value("fields")
for item in args:
s.add(item)
return self
@decorator_params
def secondary(self) -> "IndexLabel":
self._parameter_holder.set("index_type", "SECONDARY")
return self
@decorator_params
def range(self) -> "IndexLabel":
self._parameter_holder.set("index_type", "RANGE")
return self
@decorator_params
def search(self) -> "IndexLabel":
self._parameter_holder.set("index_type", "SEARCH")
return self
@decorator_params
def shard(self) -> "IndexLabel":
self._parameter_holder.set("index_type", "SHARD")
return self
@decorator_params
def unique(self) -> "IndexLabel":
self._parameter_holder.set("index_type", "UNIQUE")
return self
@decorator_params
def ifNotExist(self) -> "IndexLabel":
path = f"schema/indexlabels/{self._parameter_holder.get_value('name')}"
if _ := self._sess.request(path, validator=ResponseValidation(strict=False)):
self._parameter_holder.set("not_exist", False)
return self
@decorator_create
def create(self):
dic = self._parameter_holder.get_dic()
data = {
"name": dic["name"],
"base_type": dic["base_type"],
"base_value": dic["base_value"],
"index_type": dic["index_type"],
"fields": list(dic["fields"]),
}
path = "schema/indexlabels"
self.clean_parameter_holder()
if response := self._sess.request(path, "POST", data=json.dumps(data)):
return f'create IndexLabel success, Detail: "{response!s}"'
log.error(f'create IndexLabel failed, Detail: "{response!s}"')
return None
@decorator_params
def remove(self):
name = self._parameter_holder.get_value("name")
path = f"schema/indexlabels/{name}"
self.clean_parameter_holder()
if response := self._sess.request(path, "DELETE"):
return f'remove IndexLabel success, Detail: "{response!s}"'
log.error(f'remove IndexLabel failed, Detail: "{response!s}"')
return None