Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

metadata.py 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from typing import Literal
  2. from flask_login import current_user # type: ignore
  3. from flask_restful import marshal, reqparse
  4. from werkzeug.exceptions import NotFound
  5. from controllers.service_api import api
  6. from controllers.service_api.wraps import DatasetApiResource, cloud_edition_billing_rate_limit_check
  7. from fields.dataset_fields import dataset_metadata_fields
  8. from services.dataset_service import DatasetService
  9. from services.entities.knowledge_entities.knowledge_entities import (
  10. MetadataArgs,
  11. MetadataOperationData,
  12. )
  13. from services.metadata_service import MetadataService
  14. class DatasetMetadataCreateServiceApi(DatasetApiResource):
  15. @cloud_edition_billing_rate_limit_check("knowledge", "dataset")
  16. def post(self, tenant_id, dataset_id):
  17. parser = reqparse.RequestParser()
  18. parser.add_argument("type", type=str, required=True, nullable=False, location="json")
  19. parser.add_argument("name", type=str, required=True, nullable=False, location="json")
  20. args = parser.parse_args()
  21. metadata_args = MetadataArgs(**args)
  22. dataset_id_str = str(dataset_id)
  23. dataset = DatasetService.get_dataset(dataset_id_str)
  24. if dataset is None:
  25. raise NotFound("Dataset not found.")
  26. DatasetService.check_dataset_permission(dataset, current_user)
  27. metadata = MetadataService.create_metadata(dataset_id_str, metadata_args)
  28. return marshal(metadata, dataset_metadata_fields), 201
  29. def get(self, tenant_id, dataset_id):
  30. dataset_id_str = str(dataset_id)
  31. dataset = DatasetService.get_dataset(dataset_id_str)
  32. if dataset is None:
  33. raise NotFound("Dataset not found.")
  34. return MetadataService.get_dataset_metadatas(dataset), 200
  35. class DatasetMetadataServiceApi(DatasetApiResource):
  36. @cloud_edition_billing_rate_limit_check("knowledge", "dataset")
  37. def patch(self, tenant_id, dataset_id, metadata_id):
  38. parser = reqparse.RequestParser()
  39. parser.add_argument("name", type=str, required=True, nullable=False, location="json")
  40. args = parser.parse_args()
  41. dataset_id_str = str(dataset_id)
  42. metadata_id_str = str(metadata_id)
  43. dataset = DatasetService.get_dataset(dataset_id_str)
  44. if dataset is None:
  45. raise NotFound("Dataset not found.")
  46. DatasetService.check_dataset_permission(dataset, current_user)
  47. metadata = MetadataService.update_metadata_name(dataset_id_str, metadata_id_str, args.get("name"))
  48. return marshal(metadata, dataset_metadata_fields), 200
  49. @cloud_edition_billing_rate_limit_check("knowledge", "dataset")
  50. def delete(self, tenant_id, dataset_id, metadata_id):
  51. dataset_id_str = str(dataset_id)
  52. metadata_id_str = str(metadata_id)
  53. dataset = DatasetService.get_dataset(dataset_id_str)
  54. if dataset is None:
  55. raise NotFound("Dataset not found.")
  56. DatasetService.check_dataset_permission(dataset, current_user)
  57. MetadataService.delete_metadata(dataset_id_str, metadata_id_str)
  58. return 204
  59. class DatasetMetadataBuiltInFieldServiceApi(DatasetApiResource):
  60. def get(self, tenant_id):
  61. built_in_fields = MetadataService.get_built_in_fields()
  62. return {"fields": built_in_fields}, 200
  63. class DatasetMetadataBuiltInFieldActionServiceApi(DatasetApiResource):
  64. @cloud_edition_billing_rate_limit_check("knowledge", "dataset")
  65. def post(self, tenant_id, dataset_id, action: Literal["enable", "disable"]):
  66. dataset_id_str = str(dataset_id)
  67. dataset = DatasetService.get_dataset(dataset_id_str)
  68. if dataset is None:
  69. raise NotFound("Dataset not found.")
  70. DatasetService.check_dataset_permission(dataset, current_user)
  71. if action == "enable":
  72. MetadataService.enable_built_in_field(dataset)
  73. elif action == "disable":
  74. MetadataService.disable_built_in_field(dataset)
  75. return 200
  76. class DocumentMetadataEditServiceApi(DatasetApiResource):
  77. @cloud_edition_billing_rate_limit_check("knowledge", "dataset")
  78. def post(self, tenant_id, dataset_id):
  79. dataset_id_str = str(dataset_id)
  80. dataset = DatasetService.get_dataset(dataset_id_str)
  81. if dataset is None:
  82. raise NotFound("Dataset not found.")
  83. DatasetService.check_dataset_permission(dataset, current_user)
  84. parser = reqparse.RequestParser()
  85. parser.add_argument("operation_data", type=list, required=True, nullable=False, location="json")
  86. args = parser.parse_args()
  87. metadata_args = MetadataOperationData(**args)
  88. MetadataService.update_documents_metadata(dataset, metadata_args)
  89. return 200
  90. api.add_resource(DatasetMetadataCreateServiceApi, "/datasets/<uuid:dataset_id>/metadata")
  91. api.add_resource(DatasetMetadataServiceApi, "/datasets/<uuid:dataset_id>/metadata/<uuid:metadata_id>")
  92. api.add_resource(DatasetMetadataBuiltInFieldServiceApi, "/datasets/metadata/built-in")
  93. api.add_resource(
  94. DatasetMetadataBuiltInFieldActionServiceApi, "/datasets/<uuid:dataset_id>/metadata/built-in/<string:action>"
  95. )
  96. api.add_resource(DocumentMetadataEditServiceApi, "/datasets/<uuid:dataset_id>/documents/metadata")