From e61e18c238fd21e8e8be8c0f65659cdb029b21e6 Mon Sep 17 00:00:00 2001 From: Lingxian Kong Date: Sun, 13 May 2018 13:46:06 +1200 Subject: [PATCH] Fix function package downloading Use function id as the default function package name for downloading. Change-Id: I4b7b6e837ca74dae079b11ace235e635990545d0 Story: 2002015 Task: 19655 --- qinling/api/controllers/v1/function.py | 52 +++++++++++++------------- qinling/storage/file_system.py | 2 +- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/qinling/api/controllers/v1/function.py b/qinling/api/controllers/v1/function.py index ba2c35f0..18c12909 100644 --- a/qinling/api/controllers/v1/function.py +++ b/qinling/api/controllers/v1/function.py @@ -14,7 +14,6 @@ import collections import json -import os from oslo_config import cfg from oslo_log import log as logging @@ -107,43 +106,44 @@ class FunctionsController(rest.RestController): This method can support HTTP request using either 'Accept:application/json' or no 'Accept' header. """ - LOG.info("Get function %s.", id) + ctx = context.get_ctx() + acl.enforce('function:get', ctx) download = strutils.bool_from_string( pecan.request.GET.get('download', False) ) func_db = db_api.get_function(id) - ctx = context.get_ctx() if not download: + LOG.info("Getting function %s.", id) pecan.override_template('json') return resources.Function.from_db_obj(func_db).to_dict() + + LOG.info("Downloading function %s", id) + source = func_db.code['source'] + + if source == constants.PACKAGE_FUNCTION: + f = self.storage_provider.retrieve(func_db.project_id, id, + func_db.code['md5sum']) + elif source == constants.SWIFT_FUNCTION: + container = func_db.code['swift']['container'] + obj = func_db.code['swift']['object'] + f = swift_util.download_object(container, obj) else: - LOG.info("Downloading function %s", id) - source = func_db.code['source'] - - if source == constants.PACKAGE_FUNCTION: - f = self.storage_provider.retrieve(ctx.projectid, id, - func_db.code['md5sum']) - elif source == constants.SWIFT_FUNCTION: - container = func_db.code['swift']['container'] - obj = func_db.code['swift']['object'] - f = swift_util.download_object(container, obj) - else: - msg = 'Download image function is not allowed.' - pecan.abort( - status_code=405, - detail=msg, - headers={'Server-Error-Message': msg} - ) - - pecan.response.app_iter = (f if isinstance(f, collections.Iterable) - else FileIter(f)) - pecan.response.headers['Content-Type'] = 'application/zip' - pecan.response.headers['Content-Disposition'] = ( - 'attachment; filename="%s"' % os.path.basename(func_db.name) + msg = 'Download image function is not allowed.' + pecan.abort( + status_code=405, + detail=msg, + headers={'Server-Error-Message': msg} ) + pecan.response.app_iter = (f if isinstance(f, collections.Iterable) + else FileIter(f)) + pecan.response.headers['Content-Type'] = 'application/zip' + pecan.response.headers['Content-Disposition'] = ( + 'attachment; filename="%s"' % id + ) + @rest_utils.wrap_pecan_controller_exception @pecan.expose('json') def post(self, **kwargs): diff --git a/qinling/storage/file_system.py b/qinling/storage/file_system.py index 3028f440..2f150a56 100644 --- a/qinling/storage/file_system.py +++ b/qinling/storage/file_system.py @@ -89,7 +89,7 @@ class FileSystemStorage(base.PackageStorage): LOG.debug( 'Getting package data, function: %s, version: %s, md5sum: %s, ' 'project: %s', - function, md5sum, version, project_id + function, version, md5sum, project_id ) if version != 0: