mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-18 16:36:15 +00:00
add timeout in calling metadata api
This commit is contained in:
@@ -37,13 +37,6 @@ def scan_library(repo_id, parent_dir = '/'):
|
|||||||
scan_result += scan_library(repo_id, posixpath.join(parent_dir, dirent.obj_name))
|
scan_result += scan_library(repo_id, posixpath.join(parent_dir, dirent.obj_name))
|
||||||
return scan_result
|
return scan_result
|
||||||
|
|
||||||
def check_repo_metadata_is_enable(repo_id):
|
|
||||||
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
|
||||||
if record and record.enabled:
|
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
|
||||||
|
|
||||||
def list_metadata_records(repo_id, user, parent_dir=None, name=None, is_dir=None, page=None, per_page=25, order_by=None):
|
def list_metadata_records(repo_id, user, parent_dir=None, name=None, is_dir=None, page=None, per_page=25, order_by=None):
|
||||||
sql = f'SELECT \
|
sql = f'SELECT \
|
||||||
`{METADATA_COLUMN_ID.name}`, \
|
`{METADATA_COLUMN_ID.name}`, \
|
||||||
@@ -134,7 +127,11 @@ class MetadataManage(APIView):
|
|||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
is_enabled = check_repo_metadata_is_enable(repo_id)
|
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||||
|
if record and record.enabled:
|
||||||
|
is_enabled = True
|
||||||
|
else:
|
||||||
|
is_enabled = False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
error_msg = 'Internal Server Error'
|
error_msg = 'Internal Server Error'
|
||||||
@@ -261,7 +258,6 @@ class MetadataManage(APIView):
|
|||||||
error_msg = f'The repo {repo_id} has disabledd the metadata manage.'
|
error_msg = f'The repo {repo_id} has disabledd the metadata manage.'
|
||||||
return api_error(status.HTTP_409_CONFLICT, error_msg)
|
return api_error(status.HTTP_409_CONFLICT, error_msg)
|
||||||
|
|
||||||
try:
|
|
||||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
||||||
try:
|
try:
|
||||||
metadata_server_api.delete_base()
|
metadata_server_api.delete_base()
|
||||||
@@ -274,6 +270,7 @@ class MetadataManage(APIView):
|
|||||||
error_msg = 'Internal Server Error'
|
error_msg = 'Internal Server Error'
|
||||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
|
try:
|
||||||
record.enabled = False
|
record.enabled = False
|
||||||
record.save()
|
record.save()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -331,7 +328,8 @@ class MetadataRecords(APIView):
|
|||||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
# metadata enable check
|
# metadata enable check
|
||||||
if not check_repo_metadata_is_enable(repo_id):
|
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||||
|
if not record or not record.enabled:
|
||||||
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
@@ -381,7 +379,8 @@ class MetadataRecords(APIView):
|
|||||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
# metadata enable check
|
# metadata enable check
|
||||||
if not check_repo_metadata_is_enable(repo_id):
|
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||||
|
if not record or not record.enabled:
|
||||||
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
@@ -476,7 +475,8 @@ class MetadataRecord(APIView):
|
|||||||
name = request.data.get('name')
|
name = request.data.get('name')
|
||||||
|
|
||||||
# metadata enable check
|
# metadata enable check
|
||||||
if not check_repo_metadata_is_enable(repo_id):
|
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||||
|
if not record or not record.enabled:
|
||||||
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
@@ -594,7 +594,8 @@ class MetadataRecord(APIView):
|
|||||||
|
|
||||||
def delete(self, request, repo_id, record_id):
|
def delete(self, request, repo_id, record_id):
|
||||||
# metadata enable check
|
# metadata enable check
|
||||||
if not check_repo_metadata_is_enable(repo_id):
|
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||||
|
if not record or not record.enabled:
|
||||||
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
error_msg = f'The metadata module is disabled for repo {repo_id}.'
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
@@ -38,13 +38,15 @@ def parse_response(response):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
class MetadataServerAPI:
|
class MetadataServerAPI:
|
||||||
def __init__(self, base_id, user):
|
def __init__(self, base_id, user, timeout=30):
|
||||||
self.base_id = base_id
|
self.base_id = base_id
|
||||||
self.user = user
|
self.user = user
|
||||||
|
self.headers = self.gen_headers()
|
||||||
|
self.timeout = timeout
|
||||||
|
|
||||||
def gen_headers(self):
|
def gen_headers(self):
|
||||||
payload = {
|
payload = {
|
||||||
'exp': int(time.time()) + 300,
|
'exp': int(time.time()) + 3600,
|
||||||
'base_id': self.base_id,
|
'base_id': self.base_id,
|
||||||
'user': self.user
|
'user': self.user
|
||||||
}
|
}
|
||||||
@@ -52,73 +54,62 @@ class MetadataServerAPI:
|
|||||||
return {"Authorization": "Bearer %s" % token}
|
return {"Authorization": "Bearer %s" % token}
|
||||||
|
|
||||||
def create_base(self):
|
def create_base(self):
|
||||||
headers = self.gen_headers()
|
|
||||||
#create a metadata base for base_id
|
#create a metadata base for base_id
|
||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}'
|
||||||
response = requests.post(url, headers=headers)
|
response = requests.post(url, headers=self.headers, timeout=self.timeout)
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
|
||||||
def delete_base(self):
|
def delete_base(self):
|
||||||
headers = self.gen_headers()
|
|
||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}'
|
||||||
response = requests.delete(url, headers=headers)
|
response = requests.delete(url, headers=self.headers, timeout=self.timeout)
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
|
||||||
|
|
||||||
def add_column(self, table, column):
|
def add_column(self, table, column):
|
||||||
headers = self.gen_headers()
|
|
||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/columns'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/columns'
|
||||||
data = {
|
data = {
|
||||||
'table_id': table.id,
|
'table_id': table.id,
|
||||||
'column': column.to_build_column_dict()
|
'column': column.to_build_column_dict()
|
||||||
}
|
}
|
||||||
response = requests.post(url, json=data, headers=headers)
|
response = requests.post(url, json=data, headers=self.headers, timeout=self.timeout)
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
|
||||||
def insert_rows(self, table, columns, rows):
|
def insert_rows(self, table, columns, rows):
|
||||||
headers = self.gen_headers()
|
|
||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
||||||
data = {
|
data = {
|
||||||
'table_id': table.id,
|
'table_id': table.id,
|
||||||
'column_keys': [column.key for column in columns],
|
'column_keys': [column.key for column in columns],
|
||||||
'rows': rows
|
'rows': rows
|
||||||
}
|
}
|
||||||
|
response = requests.post(url, json=data, headers=self.headers, timeout=self.timeout)
|
||||||
response = requests.post(url, json=data, headers=headers)
|
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
|
||||||
def update_rows(self, table, columns, rows):
|
def update_rows(self, table, columns, rows):
|
||||||
headers = self.gen_headers()
|
|
||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
||||||
data = {
|
data = {
|
||||||
'table_id': table.id,
|
'table_id': table.id,
|
||||||
'column_keys': [column.key for column in columns],
|
'column_keys': [column.key for column in columns],
|
||||||
'rows': rows
|
'rows': rows
|
||||||
}
|
}
|
||||||
|
response = requests.put(url, json=data, headers=self.headers, timeout=self.timeout)
|
||||||
|
|
||||||
response = requests.put(url, json=data, headers=headers)
|
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
|
||||||
def delete_rows(self, table, row_ids):
|
def delete_rows(self, table, row_ids):
|
||||||
headers = self.gen_headers()
|
|
||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
||||||
data = {
|
data = {
|
||||||
'table_id': table.id,
|
'table_id': table.id,
|
||||||
'row_ids': row_ids
|
'row_ids': row_ids
|
||||||
}
|
}
|
||||||
response = requests.delete(url, json=data, headers=headers)
|
response = requests.delete(url, json=data, headers=self.headers, timeout=self.timeout)
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
|
||||||
def query_rows(self, sql, params=[]):
|
def query_rows(self, sql, params=[]):
|
||||||
headers = self.gen_headers()
|
|
||||||
post_data = {
|
post_data = {
|
||||||
'sql': sql
|
'sql': sql
|
||||||
}
|
}
|
||||||
|
|
||||||
if params:
|
if params:
|
||||||
post_data['params'] = params
|
post_data['params'] = params
|
||||||
|
|
||||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/query'
|
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/query'
|
||||||
response = requests.post(url, json=post_data, headers=headers)
|
response = requests.post(url, json=post_data, headers=self.headers, timeout=self.timeout)
|
||||||
return parse_response(response)
|
return parse_response(response)
|
||||||
|
Reference in New Issue
Block a user