support rename document (#4915)

This commit is contained in:
Jyong 2024-06-04 20:07:40 +08:00 committed by GitHub
parent b6631cd878
commit 4e3b0c5aea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 47 additions and 0 deletions

View File

@ -930,6 +930,28 @@ class DocumentRetryApi(DocumentResource):
return {'result': 'success'}, 204
class DocumentRenameApi(DocumentResource):
@setup_required
@login_required
@account_initialization_required
@marshal_with(document_fields)
def post(self, dataset_id, document_id):
# The role of the current user in the ta table must be admin or owner
if not current_user.is_admin_or_owner:
raise Forbidden()
parser = reqparse.RequestParser()
parser.add_argument('name', type=str, required=True, nullable=False, location='json')
args = parser.parse_args()
try:
document = DocumentService.rename_document(dataset_id, document_id, args['name'])
except services.errors.document.DocumentIndexingError:
raise DocumentIndexingError('Cannot delete document during indexing.')
return document
api.add_resource(GetProcessRuleApi, '/datasets/process-rule')
api.add_resource(DatasetDocumentListApi,
'/datasets/<uuid:dataset_id>/documents')
@ -956,3 +978,5 @@ api.add_resource(DocumentStatusApi,
api.add_resource(DocumentPauseApi, '/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/pause')
api.add_resource(DocumentRecoverApi, '/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/resume')
api.add_resource(DocumentRetryApi, '/datasets/<uuid:dataset_id>/retry')
api.add_resource(DocumentRenameApi,
'/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/rename')

View File

@ -8,6 +8,7 @@ document_fields = {
'position': fields.Integer,
'data_source_type': fields.String,
'data_source_info': fields.Raw(attribute='data_source_info_dict'),
'data_source_detail_dict': fields.Raw(attribute='data_source_detail_dict'),
'dataset_process_rule_id': fields.String,
'name': fields.String,
'created_from': fields.String,
@ -31,6 +32,7 @@ document_with_segments_fields = {
'position': fields.Integer,
'data_source_type': fields.String,
'data_source_info': fields.Raw(attribute='data_source_info_dict'),
'data_source_detail_dict': fields.Raw(attribute='data_source_detail_dict'),
'dataset_process_rule_id': fields.String,
'name': fields.String,
'created_from': fields.String,

View File

@ -451,6 +451,27 @@ class DocumentService:
db.session.delete(document)
db.session.commit()
@staticmethod
def rename_document(dataset_id: str, document_id: str, name: str) -> Document:
dataset = DatasetService.get_dataset(dataset_id)
if not dataset:
raise ValueError('Dataset not found.')
document = DocumentService.get_document(dataset_id, document_id)
if not document:
raise ValueError('Document not found.')
if document.tenant_id != current_user.current_tenant_id:
raise ValueError('No permission.')
document.name = name
db.session.add(document)
db.session.commit()
return document
@staticmethod
def pause_document(document):
if document.indexing_status not in ["waiting", "parsing", "cleaning", "splitting", "indexing"]: