Fix: avoid Flask route conflict by merging DocumentDetailApi
and DocumentDeleteApi
(#23333)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -642,7 +642,7 @@ class DocumentIndexingStatusApi(DocumentResource):
|
|||||||
return marshal(document_dict, document_status_fields)
|
return marshal(document_dict, document_status_fields)
|
||||||
|
|
||||||
|
|
||||||
class DocumentDetailApi(DocumentResource):
|
class DocumentApi(DocumentResource):
|
||||||
METADATA_CHOICES = {"all", "only", "without"}
|
METADATA_CHOICES = {"all", "only", "without"}
|
||||||
|
|
||||||
@setup_required
|
@setup_required
|
||||||
@@ -730,6 +730,28 @@ class DocumentDetailApi(DocumentResource):
|
|||||||
|
|
||||||
return response, 200
|
return response, 200
|
||||||
|
|
||||||
|
@setup_required
|
||||||
|
@login_required
|
||||||
|
@account_initialization_required
|
||||||
|
@cloud_edition_billing_rate_limit_check("knowledge")
|
||||||
|
def delete(self, dataset_id, document_id):
|
||||||
|
dataset_id = str(dataset_id)
|
||||||
|
document_id = str(document_id)
|
||||||
|
dataset = DatasetService.get_dataset(dataset_id)
|
||||||
|
if dataset is None:
|
||||||
|
raise NotFound("Dataset not found.")
|
||||||
|
# check user's model setting
|
||||||
|
DatasetService.check_dataset_model_setting(dataset)
|
||||||
|
|
||||||
|
document = self.get_document(dataset_id, document_id)
|
||||||
|
|
||||||
|
try:
|
||||||
|
DocumentService.delete_document(document)
|
||||||
|
except services.errors.document.DocumentIndexingError:
|
||||||
|
raise DocumentIndexingError("Cannot delete document during indexing.")
|
||||||
|
|
||||||
|
return {"result": "success"}, 204
|
||||||
|
|
||||||
|
|
||||||
class DocumentProcessingApi(DocumentResource):
|
class DocumentProcessingApi(DocumentResource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@@ -768,30 +790,6 @@ class DocumentProcessingApi(DocumentResource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
class DocumentDeleteApi(DocumentResource):
|
|
||||||
@setup_required
|
|
||||||
@login_required
|
|
||||||
@account_initialization_required
|
|
||||||
@cloud_edition_billing_rate_limit_check("knowledge")
|
|
||||||
def delete(self, dataset_id, document_id):
|
|
||||||
dataset_id = str(dataset_id)
|
|
||||||
document_id = str(document_id)
|
|
||||||
dataset = DatasetService.get_dataset(dataset_id)
|
|
||||||
if dataset is None:
|
|
||||||
raise NotFound("Dataset not found.")
|
|
||||||
# check user's model setting
|
|
||||||
DatasetService.check_dataset_model_setting(dataset)
|
|
||||||
|
|
||||||
document = self.get_document(dataset_id, document_id)
|
|
||||||
|
|
||||||
try:
|
|
||||||
DocumentService.delete_document(document)
|
|
||||||
except services.errors.document.DocumentIndexingError:
|
|
||||||
raise DocumentIndexingError("Cannot delete document during indexing.")
|
|
||||||
|
|
||||||
return {"result": "success"}, 204
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentMetadataApi(DocumentResource):
|
class DocumentMetadataApi(DocumentResource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -1037,11 +1035,10 @@ api.add_resource(
|
|||||||
api.add_resource(DocumentBatchIndexingEstimateApi, "/datasets/<uuid:dataset_id>/batch/<string:batch>/indexing-estimate")
|
api.add_resource(DocumentBatchIndexingEstimateApi, "/datasets/<uuid:dataset_id>/batch/<string:batch>/indexing-estimate")
|
||||||
api.add_resource(DocumentBatchIndexingStatusApi, "/datasets/<uuid:dataset_id>/batch/<string:batch>/indexing-status")
|
api.add_resource(DocumentBatchIndexingStatusApi, "/datasets/<uuid:dataset_id>/batch/<string:batch>/indexing-status")
|
||||||
api.add_resource(DocumentIndexingStatusApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/indexing-status")
|
api.add_resource(DocumentIndexingStatusApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/indexing-status")
|
||||||
api.add_resource(DocumentDetailApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>")
|
api.add_resource(DocumentApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>")
|
||||||
api.add_resource(
|
api.add_resource(
|
||||||
DocumentProcessingApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/<string:action>"
|
DocumentProcessingApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/<string:action>"
|
||||||
)
|
)
|
||||||
api.add_resource(DocumentDeleteApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>")
|
|
||||||
api.add_resource(DocumentMetadataApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/metadata")
|
api.add_resource(DocumentMetadataApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/metadata")
|
||||||
api.add_resource(DocumentStatusApi, "/datasets/<uuid:dataset_id>/documents/status/<string:action>/batch")
|
api.add_resource(DocumentStatusApi, "/datasets/<uuid:dataset_id>/documents/status/<string:action>/batch")
|
||||||
api.add_resource(DocumentPauseApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/pause")
|
api.add_resource(DocumentPauseApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/pause")
|
||||||
|
@@ -358,39 +358,6 @@ class DocumentUpdateByFileApi(DatasetApiResource):
|
|||||||
return documents_and_batch_fields, 200
|
return documents_and_batch_fields, 200
|
||||||
|
|
||||||
|
|
||||||
class DocumentDeleteApi(DatasetApiResource):
|
|
||||||
@cloud_edition_billing_rate_limit_check("knowledge", "dataset")
|
|
||||||
def delete(self, tenant_id, dataset_id, document_id):
|
|
||||||
"""Delete document."""
|
|
||||||
document_id = str(document_id)
|
|
||||||
dataset_id = str(dataset_id)
|
|
||||||
tenant_id = str(tenant_id)
|
|
||||||
|
|
||||||
# get dataset info
|
|
||||||
dataset = db.session.query(Dataset).where(Dataset.tenant_id == tenant_id, Dataset.id == dataset_id).first()
|
|
||||||
|
|
||||||
if not dataset:
|
|
||||||
raise ValueError("Dataset does not exist.")
|
|
||||||
|
|
||||||
document = DocumentService.get_document(dataset.id, document_id)
|
|
||||||
|
|
||||||
# 404 if document not found
|
|
||||||
if document is None:
|
|
||||||
raise NotFound("Document Not Exists.")
|
|
||||||
|
|
||||||
# 403 if document is archived
|
|
||||||
if DocumentService.check_archived(document):
|
|
||||||
raise ArchivedDocumentImmutableError()
|
|
||||||
|
|
||||||
try:
|
|
||||||
# delete document
|
|
||||||
DocumentService.delete_document(document)
|
|
||||||
except services.errors.document.DocumentIndexingError:
|
|
||||||
raise DocumentIndexingError("Cannot delete document during indexing.")
|
|
||||||
|
|
||||||
return 204
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentListApi(DatasetApiResource):
|
class DocumentListApi(DatasetApiResource):
|
||||||
def get(self, tenant_id, dataset_id):
|
def get(self, tenant_id, dataset_id):
|
||||||
dataset_id = str(dataset_id)
|
dataset_id = str(dataset_id)
|
||||||
@@ -473,7 +440,7 @@ class DocumentIndexingStatusApi(DatasetApiResource):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
class DocumentDetailApi(DatasetApiResource):
|
class DocumentApi(DatasetApiResource):
|
||||||
METADATA_CHOICES = {"all", "only", "without"}
|
METADATA_CHOICES = {"all", "only", "without"}
|
||||||
|
|
||||||
def get(self, tenant_id, dataset_id, document_id):
|
def get(self, tenant_id, dataset_id, document_id):
|
||||||
@@ -567,6 +534,37 @@ class DocumentDetailApi(DatasetApiResource):
|
|||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@cloud_edition_billing_rate_limit_check("knowledge", "dataset")
|
||||||
|
def delete(self, tenant_id, dataset_id, document_id):
|
||||||
|
"""Delete document."""
|
||||||
|
document_id = str(document_id)
|
||||||
|
dataset_id = str(dataset_id)
|
||||||
|
tenant_id = str(tenant_id)
|
||||||
|
|
||||||
|
# get dataset info
|
||||||
|
dataset = db.session.query(Dataset).where(Dataset.tenant_id == tenant_id, Dataset.id == dataset_id).first()
|
||||||
|
|
||||||
|
if not dataset:
|
||||||
|
raise ValueError("Dataset does not exist.")
|
||||||
|
|
||||||
|
document = DocumentService.get_document(dataset.id, document_id)
|
||||||
|
|
||||||
|
# 404 if document not found
|
||||||
|
if document is None:
|
||||||
|
raise NotFound("Document Not Exists.")
|
||||||
|
|
||||||
|
# 403 if document is archived
|
||||||
|
if DocumentService.check_archived(document):
|
||||||
|
raise ArchivedDocumentImmutableError()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# delete document
|
||||||
|
DocumentService.delete_document(document)
|
||||||
|
except services.errors.document.DocumentIndexingError:
|
||||||
|
raise DocumentIndexingError("Cannot delete document during indexing.")
|
||||||
|
|
||||||
|
return 204
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(
|
api.add_resource(
|
||||||
DocumentAddByTextApi,
|
DocumentAddByTextApi,
|
||||||
@@ -588,7 +586,6 @@ api.add_resource(
|
|||||||
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/update_by_file",
|
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/update_by_file",
|
||||||
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/update-by-file",
|
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/update-by-file",
|
||||||
)
|
)
|
||||||
api.add_resource(DocumentDeleteApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>")
|
api.add_resource(DocumentApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>")
|
||||||
api.add_resource(DocumentListApi, "/datasets/<uuid:dataset_id>/documents")
|
api.add_resource(DocumentListApi, "/datasets/<uuid:dataset_id>/documents")
|
||||||
api.add_resource(DocumentIndexingStatusApi, "/datasets/<uuid:dataset_id>/documents/<string:batch>/indexing-status")
|
api.add_resource(DocumentIndexingStatusApi, "/datasets/<uuid:dataset_id>/documents/<string:batch>/indexing-status")
|
||||||
api.add_resource(DocumentDetailApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>")
|
|
||||||
|
Reference in New Issue
Block a user