Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Awsprovider - adding support for SDK sub-classes. #7031

Merged
merged 2 commits into from Nov 30, 2019

Conversation

neverendingqs
Copy link
Contributor

@neverendingqs neverendingqs commented Nov 30, 2019

What did you implement

Support for AWS SDK sub-classes

Closes #7030

How can we verify it

serverless.yml:

service: myService

provider:
  name: aws
  runtime: nodejs10.x

plugins:
  - serverless-test-plugin

functions:
  hello:
    handler: handler.hello

.serverless_plugins/serverless-test-plugin.js:

'use strict';

class TestPlugin {
  constructor(serverless) {
    this.provider = serverless.getProvider('aws');
    this.serverless = serverless.service;
    this.hooks = {
      'after:package:finalize': () => this.test()
    };
  }

  async test() {
    await this.provider.request('DynamoDB.DocumentClient', 'put', {});
  }
}

module.exports = TestPlugin;

The code snippet errors both before and after the change, but still shows the DynamoDB.DocumentClient sub-class is being used.

Before:

  Type Error ---------------------------------------------
 
  TypeError: that.sdk[service] is not a constructor
      at /home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:287:28
      at doCall (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:238:11)
      at /home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:261:16
      at Promise._execute (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/debuggability.js:427:9)
      at Promise._resolveFromExecutor (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:518:18)
      at new Promise (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:103:10)
      at persistentRequest (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:236:7)
      at Object.promiseGenerator (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:283:7)
      at Queue._dequeue (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/promise-queue/lib/index.js:153:30)
      at /home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/promise-queue/lib/index.js:109:18
      at Promise._execute (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/debuggability.js:427:9)
      at Promise._resolveFromExecutor (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:518:18)
      at new Promise (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:103:10)
      at Queue.add (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/promise-queue/lib/index.js:94:16)
      at AwsProvider.request (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/serverless/lib/plugins/aws/provider/awsProvider.js:282:39)
      at TestPlugin.test (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/.serverless_plugins/serverless-test-plugin.js:14:25)
      at Object.after:package:finalize [as hook] (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/.serverless_plugins/serverless-test-plugin.js:8:44)
      at /home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/serverless/lib/classes/PluginManager.js:505:55
      at tryCatcher (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/util.js:16:23)
      at Object.gotValue (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/reduce.js:168:18)
      at Object.gotAccum (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/reduce.js:155:25)
      at Object.tryCatcher (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:547:31)
      at Promise._settlePromise (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:604:18)
      at Promise._settlePromise0 (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:649:10)
      at Promise._settlePromises (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/promise.js:729:18)
      at _drainQueueStep (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/async.js:93:12)
      at _drainQueue (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/async.js:86:9)
      at Async._drainQueues (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (/home/neverendingqs/code/neverendingqs/barebones-serverless-framework-aws/node_modules/bluebird/js/release/async.js:15:14)
      at processImmediate (internal/timers.js:439:21)
      at process.topLevelDomainCallback (domain.js:130:23)

After:

  Serverless Error ---------------------------------------
 
  There were 2 validation errors:
  * MissingRequiredParameter: Missing required key 'TableName' in params
  * MissingRequiredParameter: Missing required key 'Item' in params

Todos

Useful Scripts
  • npm run test-ci --> Run all validation checks on proposed changes
  • npm run lint-updated --> Lint all the updated files
  • npm run lint:fix --> Automatically fix lint problems (if possible)
  • npm run prettier-check-updated --> Check if updated files adhere to Prettier config
  • npm run prettify-updated --> Prettify all the updated files
  • Write and run all tests
  • Write documentation
  • Enable "Allow edits from maintainers" for this PR
  • Update the messages below

Is this ready for review?: YES
Is it a breaking change?: NO

Please let me know if there is documentation to update.

@neverendingqs neverendingqs marked this pull request as ready for review November 30, 2019 04:07
@neverendingqs
Copy link
Contributor Author

Build error seems unrelated:

Error retrieving packages from source 'https://chocolatey.org/api/v2/':
 Could not connect to the feed specified at 'https://chocolatey.org/api/v2/'. Please verify that the package source (located in the Package Manager Settings) is valid and ensure your network connectivity.
python2 not installed. The package was not found with the source(s) listed.
 Source(s): 'https://chocolatey.org/api/v2/'
 NOTE: When you specify explicit sources, it overrides default sources.
If the package version is a prerelease and you didn't specify `--pre`,
 the package may not be found.
Please see https://chocolatey.org/docs/troubleshooting for more 
 assistance.
Chocolatey installed 0/1 packages. 1 packages failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
Failures
 - python2 - python2 not installed. The package was not found with the source(s) listed.
 Source(s): 'https://chocolatey.org/api/v2/'
 NOTE: When you specify explicit sources, it overrides default sources.
If the package version is a prerelease and you didn't specify `--pre`,
 the package may not be found.
Please see https://chocolatey.org/docs/troubleshooting for more 
 assistance.

@medikoo medikoo added this to the 1.59.0 milestone Nov 30, 2019
Copy link
Contributor

@medikoo medikoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @neverendingqs, looks as worthwhile improvement

@medikoo medikoo merged commit f09dc97 into serverless:master Nov 30, 2019
@pmuens pmuens changed the title awsprovider - adding support for SDK sub-classes. Awsprovider - adding support for SDK sub-classes. Dec 2, 2019
@neverendingqs neverendingqs deleted the awsprovider/subclasssupport branch December 4, 2019 11:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

AWS - ability to request DynamoDB.DocumentClient in a plugin
3 participants