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.

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