Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:58:20

0001 #!/usr/bin/env python
0002 #
0003 # Licensed under the Apache License, Version 2.0 (the "License");
0004 # You may not use this file except in compliance with the License.
0005 # You may obtain a copy of the License at
0006 # http://www.apache.org/licenses/LICENSE-2.0OA
0007 #
0008 # Authors:
0009 # - Wen Guan, <wen.guan@cern.ch>, 2020
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             # with open(os.path.join(cacher_dir, filename), 'r') as f:
0073             #     content = f.read()
0074             # data = {'content': content, 'bytes': os.path.getsize(os.path.join(cacher_dir, filename))}
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         # return self.generate_http_response(HTTP_STATUS_CODE.OK, data=data)
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