mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 07:27:04 +00:00
timing face cluster (#6950)
* timing face cluster * update * update * update --------- Co-authored-by: zheng.shen <zheng.shen@seafile.com>
This commit is contained in:
@@ -134,6 +134,7 @@ class MetadataManage(APIView):
|
||||
|
||||
try:
|
||||
record.enabled = False
|
||||
record.face_recognition_enabled = False
|
||||
record.save()
|
||||
RepoMetadataViews.objects.filter(repo_id=repo_id).delete()
|
||||
except Exception as e:
|
||||
@@ -1020,20 +1021,17 @@ class FaceRecognitionManage(APIView):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
||||
from seafevents.repo_metadata.utils import FACES_TABLE
|
||||
|
||||
try:
|
||||
metadata = metadata_server_api.get_metadata()
|
||||
record = RepoMetadata.objects.filter(repo_id=repo_id).first()
|
||||
if record and record.face_recognition_enabled:
|
||||
is_enabled = True
|
||||
else:
|
||||
is_enabled = False
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
tables = metadata.get('tables', [])
|
||||
faces_table_id = [table['id'] for table in tables if table['name'] == FACES_TABLE.name]
|
||||
is_enabled = True if faces_table_id else False
|
||||
|
||||
return Response({'enabled': is_enabled})
|
||||
|
||||
def post(self, request, repo_id):
|
||||
@@ -1052,13 +1050,19 @@ class FaceRecognitionManage(APIView):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
||||
init_faces(metadata_server_api)
|
||||
|
||||
try:
|
||||
RepoMetadata.objects.enable_face_recognition(repo_id)
|
||||
except Exception as e:
|
||||
logger.exception(e)
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, 'Internal Server Error')
|
||||
|
||||
params = {
|
||||
'repo_id': repo_id,
|
||||
}
|
||||
|
||||
metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
|
||||
init_faces(metadata_server_api)
|
||||
|
||||
try:
|
||||
task_id = add_init_face_recognition_task(params=params)
|
||||
except Exception as e:
|
||||
|
@@ -184,3 +184,8 @@ class MetadataServerAPI:
|
||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/metadata'
|
||||
response = requests.get(url, headers=self.headers, timeout=self.timeout)
|
||||
return parse_response(response)
|
||||
|
||||
def delete_table(self, table_id):
|
||||
url = f'{METADATA_SERVER_URL}/api/v1/base/{self.base_id}/tables/{table_id}'
|
||||
response = requests.delete(url, headers=self.headers, timeout=self.timeout)
|
||||
return parse_response(response)
|
||||
|
@@ -44,6 +44,13 @@ class RepoMetadataManager(models.Manager):
|
||||
metadata.save()
|
||||
return metadata
|
||||
|
||||
def enable_face_recognition(self, repo_id):
|
||||
metadata = self.filter(repo_id=repo_id).first()
|
||||
face_recognition_enabled = True
|
||||
metadata.face_recognition_enabled = face_recognition_enabled
|
||||
metadata.save()
|
||||
return metadata
|
||||
|
||||
|
||||
class RepoMetadata(models.Model):
|
||||
|
||||
@@ -51,6 +58,7 @@ class RepoMetadata(models.Model):
|
||||
created_time = models.DateTimeField(auto_now_add=True)
|
||||
modified_time = models.DateTimeField(auto_now=True)
|
||||
enabled = models.BooleanField(db_index=True)
|
||||
face_recognition_enabled = models.BooleanField(db_index=True)
|
||||
from_commit = models.CharField(max_length=40)
|
||||
to_commit = models.CharField(max_length=40)
|
||||
|
||||
|
@@ -105,6 +105,7 @@ def get_sys_columns():
|
||||
def get_link_column(face_table_id):
|
||||
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
||||
columns = [
|
||||
METADATA_TABLE.columns.face_vectors.to_dict(),
|
||||
METADATA_TABLE.columns.face_links.to_dict({
|
||||
'link_id': FACES_TABLE.link_id,
|
||||
'table_id': METADATA_TABLE.id,
|
||||
@@ -168,6 +169,7 @@ def init_metadata(metadata_server_api):
|
||||
def init_faces(metadata_server_api):
|
||||
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
||||
|
||||
remove_faces_table(metadata_server_api)
|
||||
resp = metadata_server_api.create_table(FACES_TABLE.name)
|
||||
|
||||
# init link column
|
||||
@@ -179,6 +181,21 @@ def init_faces(metadata_server_api):
|
||||
metadata_server_api.add_columns(resp['id'], face_columns)
|
||||
|
||||
|
||||
def remove_faces_table(metadata_server_api):
|
||||
from seafevents.repo_metadata.utils import METADATA_TABLE, FACES_TABLE
|
||||
metadata = metadata_server_api.get_metadata()
|
||||
|
||||
tables = metadata.get('tables', [])
|
||||
for table in tables:
|
||||
if table['name'] == FACES_TABLE.name:
|
||||
metadata_server_api.delete_table(table['id'])
|
||||
elif table['name'] == METADATA_TABLE.name:
|
||||
columns = table.get('columns', [])
|
||||
for column in columns:
|
||||
if column['key'] in [METADATA_TABLE.columns.face_vectors.key, METADATA_TABLE.columns.face_links.key]:
|
||||
metadata_server_api.delete_column(table['id'], column['key'])
|
||||
|
||||
|
||||
def get_file_download_token(repo_id, file_id, username):
|
||||
return seafile_api.get_fileserver_access_token(repo_id, file_id, 'download', username, use_onetime=True)
|
||||
|
||||
|
@@ -1528,6 +1528,8 @@ CREATE TABLE `repo_metadata` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`repo_id` VARCHAR(36) NOT NULL,
|
||||
`enabled` TINYINT(1) NOT NULL,
|
||||
`face_recognition_enabled` TINYINT(1) NULL,
|
||||
`last_face_cluster_time` DATETIME NULL,
|
||||
`modified_time` DATETIME NOT NULL,
|
||||
`created_time` DATETIME NOT NULL,
|
||||
`from_commit` varchar(40) NULL,
|
||||
@@ -1536,6 +1538,7 @@ CREATE TABLE `repo_metadata` (
|
||||
`last_face_cluster_time` datetime DEFAULT NULL,
|
||||
UNIQUE KEY `key_repo_metadata_repo_id`(`repo_id`),
|
||||
KEY `key_repo_metadata_enabled`(`enabled`),
|
||||
KEY `key_repo_metadata_face_recognition_enabled`(`face_recognition_enabled`),
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
|
Reference in New Issue
Block a user