def upload_code_version(self, kwargs): if 'code' not in kwargs: ex = ManagerException(ManagerException.E_ARGS_MISSING, 'code') return HttpErrorResponse(ex.message) code = kwargs.pop('code') if not isinstance(code, FileUploadField): ex = ManagerException(ManagerException.E_ARGS_INVALID, detail='codeVersionId should be a file') return HttpErrorResponse(ex.message) if 'description' in kwargs: description = kwargs.pop('description') else: description = '' if len(kwargs) != 0: ex = ManagerException(ManagerException.E_ARGS_UNEXPECTED, kwargs.keys()) return HttpErrorResponse(ex.message) config = self._configuration_get() fd, name = tempfile.mkstemp(prefix='code-', dir=self.code_repo) fd = os.fdopen(fd, 'w') upload = code.file codeVersionId = os.path.basename(name) bytes = upload.read(2048) while len(bytes) != 0: fd.write(bytes) bytes = upload.read(2048) fd.close() arch = archive_open(name) if arch is None: os.remove(name) ex = ManagerException(ManagerException.E_ARGS_INVALID, detail='Invalid archive format') return HttpErrorResponse(ex.message) for fname in archive_get_members(arch): if fname.startswith('/') or fname.startswith('..'): archive_close(arch) os.remove(name) ex = ManagerException(ManagerException.E_ARGS_INVALID, detail='Absolute file names are not allowed in archive members') return HttpErrorResponse(ex.message) archive_close(arch) config.codeVersions[codeVersionId] = CodeVersion( codeVersionId, os.path.basename(code.filename), archive_get_type(name), description=description) self._configuration_set(config) return HttpJsonResponse({'codeVersionId': os.path.basename(codeVersionId)})
def upload_code_version(self, kwargs): exp_params = [('code', is_uploaded_file), ('description', is_string, '')] try: code, description = check_arguments(exp_params, kwargs) except Exception as ex: return HttpErrorResponse("%s" % ex) config = self._configuration_get() fd, name = tempfile.mkstemp(prefix='code-', dir=self.code_repo) fd = os.fdopen(fd, 'w') upload = code.file codeVersionId = os.path.basename(name) bytes = upload.read(2048) while len(bytes) != 0: fd.write(bytes) bytes = upload.read(2048) fd.close() arch = archive_open(name) if arch is None: os.remove(name) ex = ManagerException(ManagerException.E_ARGS_INVALID, detail='Invalid archive format') return HttpErrorResponse("%s" % ex) for fname in archive_get_members(arch): if fname.startswith('/') or fname.startswith('..'): archive_close(arch) os.remove(name) ex = ManagerException(ManagerException.E_ARGS_INVALID, detail='Absolute file names are not allowed in archive members') return HttpErrorResponse("%s" % ex) archive_close(arch) config.codeVersions[codeVersionId] = CodeVersion( codeVersionId, os.path.basename(code.filename), archive_get_type(name), description=description) self._configuration_set(config) return HttpJsonResponse({'codeVersionId': os.path.basename(codeVersionId)})