diff --git a/index.js b/index.js index 6e55fdb3..1857b239 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ const BbPromise = require('bluebird'); const fse = require('fs-extra'); +const values = require('lodash.values'); const { addVendorHelper, removeVendorHelper, @@ -83,6 +84,13 @@ class ServerlessPythonRequirements { return options; } + get targetFuncs() { + let inputOpt = this.serverless.processedInput.options; + return inputOpt.function + ? [inputOpt.functionObj] + : values(this.serverless.service.functions); + } + /** * The plugin constructor * @param {Object} serverless diff --git a/lib/clean.js b/lib/clean.js index f3c4fbef..332ceb37 100644 --- a/lib/clean.js +++ b/lib/clean.js @@ -1,7 +1,6 @@ const BbPromise = require('bluebird'); const fse = require('fs-extra'); const path = require('path'); -const values = require('lodash.values'); BbPromise.promisifyAll(fse); @@ -13,7 +12,7 @@ function cleanup() { const artifacts = ['.requirements']; if (this.options.zip) { if (this.serverless.service.package.individually) { - values(this.serverless.service.functions).forEach(f => { + this.targetFuncs.forEach(f => { artifacts.push(path.join(f.module, '.requirements.zip')); artifacts.push(path.join(f.module, 'unzip_requirements.py')); }); diff --git a/lib/inject.js b/lib/inject.js index 337813a3..973ba99b 100644 --- a/lib/inject.js +++ b/lib/inject.js @@ -4,7 +4,6 @@ const glob = require('glob-all'); const get = require('lodash.get'); const set = require('lodash.set'); const path = require('path'); -const values = require('lodash.values'); const JSZip = require('jszip'); const { writeZip, zipFile } = require('./zipTree'); @@ -75,12 +74,8 @@ function moveModuleUp(source, target, module) { function injectAllRequirements(funcArtifact) { this.serverless.cli.log('Injecting required Python packages to package...'); - if (this.options.zip) { - return; - } - if (this.serverless.service.package.individually) { - return BbPromise.resolve(values(this.serverless.service.functions)) + return BbPromise.resolve(this.targetFuncs) .filter(func => (func.runtime || this.serverless.service.provider.runtime).match( /^python.*/ @@ -107,14 +102,16 @@ function injectAllRequirements(funcArtifact) { return func; } }) - .map(func => - injectRequirements( - path.join('.serverless', func.module, 'requirements'), - func.package.artifact, - this.options - ) - ); - } else { + .map(func => { + return this.options.zip + ? func + : injectRequirements( + path.join('.serverless', func.module, 'requirements'), + func.package.artifact, + this.options + ); + }); + } else if (!this.options.zip) { return injectRequirements( path.join('.serverless', 'requirements'), this.serverless.service.package.artifact || funcArtifact, diff --git a/lib/pip.js b/lib/pip.js index 2b061371..7d555b31 100644 --- a/lib/pip.js +++ b/lib/pip.js @@ -4,7 +4,6 @@ const path = require('path'); const get = require('lodash.get'); const set = require('lodash.set'); const { spawnSync } = require('child_process'); -const values = require('lodash.values'); const { buildImage, getBindPath, getDockerUid } = require('./docker'); const { getSlimPackageCommands } = require('./slim'); @@ -210,7 +209,7 @@ function installAllRequirements() { fse.ensureDirSync(path.join(this.servicePath, '.serverless')); if (this.serverless.service.package.individually) { let doneModules = []; - values(this.serverless.service.functions) + this.targetFuncs .filter(func => (func.runtime || this.serverless.service.provider.runtime).match( /^python.*/ diff --git a/lib/zip.js b/lib/zip.js index eba21976..1139d0d9 100644 --- a/lib/zip.js +++ b/lib/zip.js @@ -2,7 +2,6 @@ const fse = require('fs-extra'); const path = require('path'); const get = require('lodash.get'); const set = require('lodash.set'); -const values = require('lodash.values'); const uniqBy = require('lodash.uniqby'); const BbPromise = require('bluebird'); const JSZip = require('jszip'); @@ -17,7 +16,7 @@ BbPromise.promisifyAll(fse); function addVendorHelper() { if (this.options.zip) { if (this.serverless.service.package.individually) { - return BbPromise.resolve(values(this.serverless.service.functions)) + return BbPromise.resolve(this.targetFuncs) .map(f => { if (!get(f, 'package.include')) { set(f, ['package', 'include'], []); @@ -63,7 +62,7 @@ function addVendorHelper() { function removeVendorHelper() { if (this.options.zip && this.options.cleanupZipHelper) { if (this.serverless.service.package.individually) { - return BbPromise.resolve(values(this.serverless.service.functions)) + return BbPromise.resolve(this.targetFuncs) .map(f => { if (!get(f, 'module')) { set(f, ['module'], '.'); @@ -95,7 +94,7 @@ function removeVendorHelper() { function packRequirements() { if (this.options.zip) { if (this.serverless.service.package.individually) { - return BbPromise.resolve(values(this.serverless.service.functions)) + return BbPromise.resolve(this.targetFuncs) .map(f => { if (!get(f, 'module')) { set(f, ['module'], '.');