blob: fca8153d5f23dde3b6ee693273f192d72b5adc3d [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.
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 VertexLabel(HugeParamsBase):
@decorator_params
def useAutomaticId(self) -> "VertexLabel":
self._parameter_holder.set("id_strategy", "AUTOMATIC")
return self
@decorator_params
def useCustomizeStringId(self) -> "VertexLabel":
self._parameter_holder.set("id_strategy", "CUSTOMIZE_STRING")
return self
@decorator_params
def useCustomizeNumberId(self) -> "VertexLabel":
self._parameter_holder.set("id_strategy", "CUSTOMIZE_NUMBER")
return self
@decorator_params
def usePrimaryKeyId(self) -> "VertexLabel":
self._parameter_holder.set("id_strategy", "PRIMARY_KEY")
return self
@decorator_params
def properties(self, *args) -> "VertexLabel":
self._parameter_holder.set("properties", list(args))
return self
@decorator_params
def primaryKeys(self, *args) -> "VertexLabel":
self._parameter_holder.set("primary_keys", list(args))
return self
@decorator_params
def nullableKeys(self, *args) -> "VertexLabel":
self._parameter_holder.set("nullable_keys", list(args))
return self
@decorator_params
def enableLabelIndex(self, flag) -> "VertexLabel":
self._parameter_holder.set("enable_label_index", flag)
return self
@decorator_params
def userdata(self, *args) -> "VertexLabel":
if "user_data" not in self._parameter_holder.get_keys():
self._parameter_holder.set("user_data", {})
user_data = self._parameter_holder.get_value("user_data")
i = 0
while i < len(args):
user_data[args[i]] = args[i + 1]
i += 2
return self
def ifNotExist(self) -> "VertexLabel":
path = f"schema/vertexlabels/{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()
key_list = [
"name",
"id_strategy",
"primary_keys",
"nullable_keys",
"index_labels",
"properties",
"enable_label_index",
"user_data",
]
data = {}
for key in key_list:
if key in dic:
data[key] = dic[key]
path = "schema/vertexlabels"
self.clean_parameter_holder()
if response := self._sess.request(path, "POST", data=json.dumps(data)):
return f'create VertexLabel success, Detail: "{response!s}"'
log.error("create VertexLabel failed, Detail: %s", str(response))
return ""
@decorator_params
def append(self) -> None:
dic = self._parameter_holder.get_dic()
properties = dic.get("properties", [])
nullable_keys = dic.get("nullable_keys", [])
user_data = dic.get("user_data", {})
path = f"schema/vertexlabels/{dic['name']}?action=append"
data = {
"name": dic["name"],
"properties": properties,
"nullable_keys": nullable_keys,
"user_data": user_data,
}
self.clean_parameter_holder()
if response := self._sess.request(path, "PUT", data=json.dumps(data)):
return f'append VertexLabel success, Detail: "{response!s}"'
log.error("append VertexLabel failed, Detail: %s", str(response))
return ""
@decorator_params
def remove(self) -> None:
name = self._parameter_holder.get_value("name")
path = f"schema/vertexlabels/{name}"
self.clean_parameter_holder()
if response := self._sess.request(path, "DELETE"):
return f'remove VertexLabel success, Detail: "{response!s}"'
log.error("remove VertexLabel failed, Detail: %s", str(response))
return ""
@decorator_params
def eliminate(self) -> None:
name = self._parameter_holder.get_value("name")
path = f"schema/vertexlabels/{name}/?action=eliminate"
dic = self._parameter_holder.get_dic()
user_data = dic.get("user_data", {})
data = {
"name": self._parameter_holder.get_value("name"),
"user_data": user_data,
}
if response := self._sess.request(path, "PUT", data=json.dumps(data)):
return f'eliminate VertexLabel success, Detail: "{response!s}"'
log.error("eliminate VertexLabel failed, Detail: %s", str(response))
return ""