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))
|
||||
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):
|
||||
sql = f'SELECT \
|
||||
`{METADATA_COLUMN_ID.name}`, \
|
||||
@@ -134,7 +127,11 @@ class MetadataManage(APIView):
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
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:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
@@ -260,20 +257,20 @@ class MetadataManage(APIView):
|
||||
if not record or not record.enabled:
|
||||
error_msg = f'The repo {repo_id} has disabledd the metadata manage.'
|
||||
return api_error(status.HTTP_409_CONFLICT, error_msg)
|
||||
|
||||
|
||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
||||
try:
|
||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
||||
try:
|
||||
metadata_server_api.delete_base()
|
||||
except ConnectionError as err:
|
||||
logger.error(err)
|
||||
status_code, reason = err
|
||||
return api_error(status.HTTP_503_SERVICE_UNAVAILABLE, f'error from metadata server with code {status_code}: {reason}')
|
||||
except Exception as err:
|
||||
logger.error(err)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
metadata_server_api.delete_base()
|
||||
except ConnectionError as err:
|
||||
logger.error(err)
|
||||
status_code, reason = err
|
||||
return api_error(status.HTTP_503_SERVICE_UNAVAILABLE, f'error from metadata server with code {status_code}: {reason}')
|
||||
except Exception as err:
|
||||
logger.error(err)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
try:
|
||||
record.enabled = False
|
||||
record.save()
|
||||
except Exception as e:
|
||||
@@ -331,7 +328,8 @@ class MetadataRecords(APIView):
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
# 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}.'
|
||||
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)
|
||||
|
||||
# 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}.'
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
@@ -476,7 +475,8 @@ class MetadataRecord(APIView):
|
||||
name = request.data.get('name')
|
||||
|
||||
# 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}.'
|
||||
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):
|
||||
# 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}.'
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
|
@@ -38,13 +38,15 @@ def parse_response(response):
|
||||
pass
|
||||
|
||||
class MetadataServerAPI:
|
||||
def __init__(self, base_id, user):
|
||||
def __init__(self, base_id, user, timeout=30):
|
||||
self.base_id = base_id
|
||||
self.user = user
|
||||
self.headers = self.gen_headers()
|
||||
self.timeout = timeout
|
||||
|
||||
def gen_headers(self):
|
||||
payload = {
|
||||
'exp': int(time.time()) + 300,
|
||||
'exp': int(time.time()) + 3600,
|
||||
'base_id': self.base_id,
|
||||
'user': self.user
|
||||
}
|
||||
@@ -52,73 +54,62 @@ class MetadataServerAPI:
|
||||
return {"Authorization": "Bearer %s" % token}
|
||||
|
||||
def create_base(self):
|
||||
headers = self.gen_headers()
|
||||
#create a metadata base for 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)
|
||||
|
||||
def delete_base(self):
|
||||
headers = self.gen_headers()
|
||||
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)
|
||||
|
||||
|
||||
def add_column(self, table, column):
|
||||
headers = self.gen_headers()
|
||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/columns'
|
||||
data = {
|
||||
'table_id': table.id,
|
||||
'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)
|
||||
|
||||
def insert_rows(self, table, columns, rows):
|
||||
headers = self.gen_headers()
|
||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
||||
data = {
|
||||
'table_id': table.id,
|
||||
'column_keys': [column.key for column in columns],
|
||||
'rows': rows
|
||||
}
|
||||
|
||||
response = requests.post(url, json=data, headers=headers)
|
||||
response = requests.post(url, json=data, headers=self.headers, timeout=self.timeout)
|
||||
return parse_response(response)
|
||||
|
||||
def update_rows(self, table, columns, rows):
|
||||
headers = self.gen_headers()
|
||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
||||
data = {
|
||||
'table_id': table.id,
|
||||
'column_keys': [column.key for column in columns],
|
||||
'rows': rows
|
||||
}
|
||||
|
||||
|
||||
response = requests.put(url, json=data, headers=headers)
|
||||
response = requests.put(url, json=data, headers=self.headers, timeout=self.timeout)
|
||||
return parse_response(response)
|
||||
|
||||
def delete_rows(self, table, row_ids):
|
||||
headers = self.gen_headers()
|
||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/rows'
|
||||
data = {
|
||||
'table_id': table.id,
|
||||
'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)
|
||||
|
||||
def query_rows(self, sql, params=[]):
|
||||
headers = self.gen_headers()
|
||||
post_data = {
|
||||
'sql': sql
|
||||
}
|
||||
|
||||
if params:
|
||||
post_data['params'] = params
|
||||
|
||||
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)
|
||||
|
Reference in New Issue
Block a user