You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

metadata.py 5.3KB

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