File indexing completed on 2026-04-09 07:58:20
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 import os
0012 from traceback import format_exc
0013
0014 from flask import Blueprint, send_from_directory
0015
0016 from idds.common import exceptions
0017 from idds.common.constants import HTTP_STATUS_CODE
0018 from idds.common.utils import get_rest_cacher_dir
0019 from idds.rest.v1.controller import IDDSController
0020
0021
0022 class Cacher(IDDSController):
0023 """ upload/download file """
0024
0025 def post(self, filename):
0026 """ upload file.
0027 HTTP Success:
0028 200 OK
0029 HTTP Error:
0030 400 Bad request
0031 500 Internal Error
0032 """
0033 if '/' in filename:
0034 return self.generate_http_response(HTTP_STATUS_CODE.BadRequest, exc_cls=exceptions.BadRequest.__name__, exc_msg='subdirectory is not allowed')
0035
0036 try:
0037 cacher_dir = get_rest_cacher_dir()
0038 """
0039 data = self.get_request().data and json.loads(self.get_request().data)
0040 content = data['content']
0041 # bytes = data['bytes']
0042
0043 with open(os.path.join(cacher_dir, filename), 'w') as f:
0044 f.write(content)
0045 """
0046 data = self.get_request().data
0047 with open(os.path.join(cacher_dir, filename), 'wb') as f:
0048 f.write(data)
0049 except exceptions.DuplicatedObject as error:
0050 return self.generate_http_response(HTTP_STATUS_CODE.Conflict, exc_cls=error.__class__.__name__, exc_msg=error)
0051 except exceptions.IDDSException as error:
0052 return self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=error.__class__.__name__, exc_msg=error)
0053 except Exception as error:
0054 print(error)
0055 print(format_exc())
0056 return self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=exceptions.CoreException.__name__, exc_msg=error)
0057
0058 return self.generate_http_response(HTTP_STATUS_CODE.OK, data={'filename': filename})
0059
0060 def get(self, filename):
0061 """ donwload file.
0062 HTTP Success:
0063 200 OK
0064 HTTP Error:
0065 404 Not Found
0066 500 InternalError
0067 :returns: dictionary of an request.
0068 """
0069
0070 try:
0071 cacher_dir = get_rest_cacher_dir()
0072
0073
0074
0075 return send_from_directory(cacher_dir, filename, as_attachment=True)
0076 except exceptions.NoObject as error:
0077 return self.generate_http_response(HTTP_STATUS_CODE.NotFound, exc_cls=error.__class__.__name__, exc_msg=error)
0078 except exceptions.IDDSException as error:
0079 return self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=error.__class__.__name__, exc_msg=error)
0080 except Exception as error:
0081 print(error)
0082 print(format_exc())
0083 return self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=exceptions.CoreException.__name__, exc_msg=error)
0084
0085
0086
0087
0088 """----------------------
0089 Web service url maps
0090 ----------------------"""
0091
0092
0093 def get_blueprint():
0094 bp = Blueprint('cacher', __name__)
0095
0096 cacher_view = Cacher.as_view('cacher')
0097 bp.add_url_rule('/cacher/<filename>', view_func=cacher_view, methods=['post', ])
0098 bp.add_url_rule('/cacher/<filename>', view_func=cacher_view, methods=['get', ])
0099 return bp