Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

metadata.py 5.1KB

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