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.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. from typing import Literal
  2. from flask_login import current_user
  3. from flask_restful import Resource, marshal_with, reqparse
  4. from werkzeug.exceptions import NotFound
  5. from controllers.console import api
  6. from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
  7. from fields.dataset_fields import dataset_metadata_fields
  8. from libs.login import login_required
  9. from services.dataset_service import DatasetService
  10. from services.entities.knowledge_entities.knowledge_entities import (
  11. MetadataArgs,
  12. MetadataOperationData,
  13. )
  14. from services.metadata_service import MetadataService
  15. class DatasetMetadataCreateApi(Resource):
  16. @setup_required
  17. @login_required
  18. @account_initialization_required
  19. @enterprise_license_required
  20. @marshal_with(dataset_metadata_fields)
  21. def post(self, dataset_id):
  22. parser = reqparse.RequestParser()
  23. parser.add_argument("type", type=str, required=True, nullable=False, location="json")
  24. parser.add_argument("name", type=str, required=True, nullable=False, location="json")
  25. args = parser.parse_args()
  26. metadata_args = MetadataArgs(**args)
  27. dataset_id_str = str(dataset_id)
  28. dataset = DatasetService.get_dataset(dataset_id_str)
  29. if dataset is None:
  30. raise NotFound("Dataset not found.")
  31. DatasetService.check_dataset_permission(dataset, current_user)
  32. metadata = MetadataService.create_metadata(dataset_id_str, metadata_args)
  33. return metadata, 201
  34. @setup_required
  35. @login_required
  36. @account_initialization_required
  37. @enterprise_license_required
  38. def get(self, dataset_id):
  39. dataset_id_str = str(dataset_id)
  40. dataset = DatasetService.get_dataset(dataset_id_str)
  41. if dataset is None:
  42. raise NotFound("Dataset not found.")
  43. return MetadataService.get_dataset_metadatas(dataset), 200
  44. class DatasetMetadataApi(Resource):
  45. @setup_required
  46. @login_required
  47. @account_initialization_required
  48. @enterprise_license_required
  49. @marshal_with(dataset_metadata_fields)
  50. def patch(self, dataset_id, metadata_id):
  51. parser = reqparse.RequestParser()
  52. parser.add_argument("name", type=str, required=True, nullable=False, location="json")
  53. args = parser.parse_args()
  54. dataset_id_str = str(dataset_id)
  55. metadata_id_str = str(metadata_id)
  56. dataset = DatasetService.get_dataset(dataset_id_str)
  57. if dataset is None:
  58. raise NotFound("Dataset not found.")
  59. DatasetService.check_dataset_permission(dataset, current_user)
  60. metadata = MetadataService.update_metadata_name(dataset_id_str, metadata_id_str, args.get("name"))
  61. return metadata, 200
  62. @setup_required
  63. @login_required
  64. @account_initialization_required
  65. @enterprise_license_required
  66. def delete(self, dataset_id, metadata_id):
  67. dataset_id_str = str(dataset_id)
  68. metadata_id_str = str(metadata_id)
  69. dataset = DatasetService.get_dataset(dataset_id_str)
  70. if dataset is None:
  71. raise NotFound("Dataset not found.")
  72. DatasetService.check_dataset_permission(dataset, current_user)
  73. MetadataService.delete_metadata(dataset_id_str, metadata_id_str)
  74. return {"result": "success"}, 204
  75. class DatasetMetadataBuiltInFieldApi(Resource):
  76. @setup_required
  77. @login_required
  78. @account_initialization_required
  79. @enterprise_license_required
  80. def get(self):
  81. built_in_fields = MetadataService.get_built_in_fields()
  82. return {"fields": built_in_fields}, 200
  83. class DatasetMetadataBuiltInFieldActionApi(Resource):
  84. @setup_required
  85. @login_required
  86. @account_initialization_required
  87. @enterprise_license_required
  88. def post(self, dataset_id, action: Literal["enable", "disable"]):
  89. dataset_id_str = str(dataset_id)
  90. dataset = DatasetService.get_dataset(dataset_id_str)
  91. if dataset is None:
  92. raise NotFound("Dataset not found.")
  93. DatasetService.check_dataset_permission(dataset, current_user)
  94. if action == "enable":
  95. MetadataService.enable_built_in_field(dataset)
  96. elif action == "disable":
  97. MetadataService.disable_built_in_field(dataset)
  98. return 200
  99. class DocumentMetadataEditApi(Resource):
  100. @setup_required
  101. @login_required
  102. @account_initialization_required
  103. @enterprise_license_required
  104. def post(self, dataset_id):
  105. dataset_id_str = str(dataset_id)
  106. dataset = DatasetService.get_dataset(dataset_id_str)
  107. if dataset is None:
  108. raise NotFound("Dataset not found.")
  109. DatasetService.check_dataset_permission(dataset, current_user)
  110. parser = reqparse.RequestParser()
  111. parser.add_argument("operation_data", type=list, required=True, nullable=False, location="json")
  112. args = parser.parse_args()
  113. metadata_args = MetadataOperationData(**args)
  114. MetadataService.update_documents_metadata(dataset, metadata_args)
  115. return 200
  116. api.add_resource(DatasetMetadataCreateApi, "/datasets/<uuid:dataset_id>/metadata")
  117. api.add_resource(DatasetMetadataApi, "/datasets/<uuid:dataset_id>/metadata/<uuid:metadata_id>")
  118. api.add_resource(DatasetMetadataBuiltInFieldApi, "/datasets/metadata/built-in")
  119. api.add_resource(DatasetMetadataBuiltInFieldActionApi, "/datasets/<uuid:dataset_id>/metadata/built-in/<string:action>")
  120. api.add_resource(DocumentMetadataEditApi, "/datasets/<uuid:dataset_id>/documents/metadata")