61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import json
|
||
import os
|
||
import urllib3
|
||
import urllib.parse
|
||
|
||
|
||
class IndexHttpClient():
|
||
"""索引库客户端,使用 urllib3 连接,使用 urllib.parse 进行 url 编码"""
|
||
def __init__(self, host: str, port: int):
|
||
self.__host = host
|
||
self.__port = port
|
||
self.__http = urllib3.PoolManager()
|
||
self.__headers = {"Content-type": "application/json"}
|
||
|
||
def url(self):
|
||
return "http://{}:{}".format(self.__host, self.__port)
|
||
|
||
def new_index(self,
|
||
image_list_path: str,
|
||
index_root_path: str,
|
||
index_method="HNSW32",
|
||
force=False):
|
||
"""新建 重建 库"""
|
||
if index_method not in ["HNSW32", "FLAT", "IVF"]:
|
||
raise Exception(
|
||
"index_method 必须是 HNSW32, FLAT, IVF,实际值为:{}".format(
|
||
index_method))
|
||
params = {"image_list_path":image_list_path, \
|
||
"index_root_path":index_root_path, \
|
||
"index_method":index_method, \
|
||
"force":force}
|
||
return self.__post(self.url() + "/new_index?", params)
|
||
|
||
def open_index(self, index_root_path: str, image_list_path: str):
|
||
"""打开库"""
|
||
params = {
|
||
"index_root_path": index_root_path,
|
||
"image_list_path": image_list_path
|
||
}
|
||
return self.__post(self.url() + "/open_index?", params)
|
||
|
||
def update_index(self, image_list_path: str, index_root_path: str):
|
||
"""更新索引库"""
|
||
params = {"image_list_path":image_list_path, \
|
||
"index_root_path":index_root_path}
|
||
return self.__post(self.url() + "/update_index?", params)
|
||
|
||
def __post(self, url: str, params: dict):
|
||
"""发送 url 并接收数据"""
|
||
http = self.__http
|
||
encode_params = urllib.parse.urlencode(params)
|
||
get_url = url + encode_params
|
||
req = http.request("GET", get_url, headers=self.__headers)
|
||
result = json.loads(req.data)
|
||
if isinstance(result, str):
|
||
result = eval(result)
|
||
msg = result["error_message"]
|
||
if msg != None and len(msg) == 0:
|
||
msg = None
|
||
return msg
|