A toolkit for developing and deploying serverless Python code in AWS Lambda.

Overview

python-lambda logo

pypi pypi

Python-lambda is a toolset for developing and deploying serverless Python code in AWS Lambda.

A call for contributors

With python-lambda and pytube both continuing to gain momentum, I'm calling for contributors to help build out new features, review pull requests, fix bugs, and maintain overall code quality. If you're interested, please email me at nficano[at]gmail.com.

Description

AWS Lambda is a service that allows you to write Python, Java, or Node.js code that gets executed in response to events like http requests or files uploaded to S3.

Working with Lambda is relatively easy, but the process of bundling and deploying your code is not as simple as it could be.

The Python-Lambda library takes away the guess work of developing your Python-Lambda services by providing you a toolset to streamline the annoying parts.

Requirements

  • Python 2.7, >= 3.6 (At the time of writing this, these are the Python runtimes supported by AWS Lambda).
  • Pip (~8.1.1)
  • Virtualenv (~15.0.0)
  • Virtualenvwrapper (~4.7.1)

Getting Started

First, you must create an IAM Role on your AWS account called lambda_basic_execution with the LambdaBasicExecution policy attached.

On your computer, create a new virtualenv and project folder.

$ mkvirtualenv pylambda
(pylambda) $ mkdir pylambda

Next, download Python-Lambda using pip via pypi.

(pylambda) $ pip install python-lambda

From your pylambda directory, run the following to bootstrap your project.

(pylambda) $ lambda init

This will create the following files: event.json, __init__.py, service.py, and config.yaml.

Let's begin by opening config.yaml in the text editor of your choice. For the purpose of this tutorial, the only required information is aws_access_key_id and aws_secret_access_key. You can find these by logging into the AWS management console.

Next let's open service.py, in here you'll find the following function:

def handler(event, context):
    # Your code goes here!
    e = event.get('e')
    pi = event.get('pi')
    return e + pi

This is the handler function; this is the function AWS Lambda will invoke in response to an event. You will notice that in the sample code e and pi are values in a dict. AWS Lambda uses the event parameter to pass in event data to the handler.

So if, for example, your function is responding to an http request, event will be the POST JSON data and if your function returns something, the contents will be in your http response payload.

Next let's open the event.json file:

{
  "pi": 3.14,
  "e": 2.718
}

Here you'll find the values of e and pi that are being referenced in the sample code.

If you now try and run:

(pylambda) $ lambda invoke -v

You will get:

# 5.858
# execution time: 0.00000310s
# function execution timeout: 15s

As you probably put together, the lambda invoke command grabs the values stored in the event.json file and passes them to your function.

The event.json file should help you develop your Lambda service locally. You can specify an alternate event.json file by passing the --event-file=<filename>.json argument to lambda invoke.

When you're ready to deploy your code to Lambda simply run:

(pylambda) $ lambda deploy

The deploy script will evaluate your virtualenv and identify your project dependencies. It will package these up along with your handler function to a zip file that it then uploads to AWS Lambda.

You can now log into the AWS Lambda management console to verify the code deployed successfully.

Wiring to an API endpoint

If you're looking to develop a simple microservice you can easily wire your function up to an http endpoint.

Begin by navigating to your AWS Lambda management console and clicking on your function. Click the API Endpoints tab and click "Add API endpoint".

Under API endpoint type select "API Gateway".

Next change Method to POST and Security to "Open" and click submit (NOTE: you should secure this for use in production, open security is used for demo purposes).

At last you need to change the return value of the function to comply with the standard defined for the API Gateway endpoint, the function should now look like this:

def handler(event, context):
    # Your code goes here!
    e = event.get('e')
    pi = event.get('pi')
    return {
        "statusCode": 200,
        "headers": { "Content-Type": "application/json"},
        "body": e + pi
    }

Now try and run:

$ curl --header "Content-Type:application/json" \
       --request POST \
       --data '{"pi": 3.14, "e": 2.718}' \
       https://<API endpoint URL>
# 5.8580000000000005

Environment Variables

Lambda functions support environment variables. In order to set environment variables for your deployed code to use, you can configure them in config.yaml. To load the value for the environment variable at the time of deployment (instead of hard coding them in your configuration file), you can use local environment values (see 'env3' in example code below).

environment_variables:
  env1: foo
  env2: baz
  env3: ${LOCAL_ENVIRONMENT_VARIABLE_NAME}

This would create environment variables in the lambda instance upon deploy. If your functions don't need environment variables, simply leave this section out of your config.

Uploading to S3

You may find that you do not need the toolkit to fully deploy your Lambda or that your code bundle is too large to upload via the API. You can use the upload command to send the bundle to an S3 bucket of your choosing. Before doing this, you will need to set the following variables in config.yaml:

role: basic_s3_upload
bucket_name: 'example-bucket'
s3_key_prefix: 'path/to/file/'

Your role must have s3:PutObject permission on the bucket/key that you specify for the upload to work properly. Once you have that set, you can execute lambda upload to initiate the transfer.

Deploying via S3

You can also choose to use S3 as your source for Lambda deployments. This can be done by issuing lambda deploy-s3 with the same variables/AWS permissions you'd set for executing the upload command.

Development

Development of "python-lambda" is facilitated exclusively on GitHub. Contributions in the form of patches, tests and feature creation and/or requests are very welcome and highly encouraged. Please open an issue if this tool does not function as you'd expect.

Environment Setup

  1. Install pipenv
  2. Install direnv
  3. Install Precommit (optional but preferred)
  4. cd into the project and enter "direnv allow" when prompted. This will begin installing all the development dependancies.
  5. If you installed pre-commit, run pre-commit install inside the project directory to setup the githooks.

Releasing to Pypi

Once you pushed your chances to master, run one of the following:

# If you're installing a major release:
make deploy-major

# If you're installing a minor release:
make deploy-minor

# If you're installing a patch release:
make deploy-patch
Comments
  • Installation fails due to conflicting botocore version

    Installation fails due to conflicting botocore version

    Hi, users are unable to run Dmn-python-lambda due to dependency conflict with botocore package. As shown in the following full dependency graph of Dmn-python-lambda, Dmn-python-lambda requires botocore>=1.5.62,<2.0.0,while boto3==1.4.4 requires botocore>=1.5.0,<1.6.0.

    According to pip’s “first found wins” installation strategy, botocore 1.16.16 is the actually installed version. However, botocore 1.16.16 does not satisfy botocore>=1.5.0,<1.6.0.

    Dependency tree-----------

    dmn-python-lambda - 3.3.1
    | +- boto3(install version:1.4.4 version range:==1.4.4)
    | | +- botocore(install version:1.5.95 version range:>=1.5.0,<1.6.0)
    | | | +- docutils(install version:0.14 version range:>=0.10)
    | | | +- jmespath(install version:0.9.5 version range:<1.0.0,>=0.7.1)
    | | | +- python-dateutil(install version:2.7.5 version range:>=2.1,<3.0.0)
    | | | | +- six(install version:1.11.0 version range:*)
    | | | | +- six(install version:1.11.0 version range:>=1.5)
    | | +- jmespath(install version:0.9.5 version range:<1.0.0,>=0.7.1)
    | | +- s3transfer(install version:0.1.13 version range:>=0.1.10,<0.2.0)
    | | | +- botocore(install version:1.16.19 version range:>=1.3.0,<2.0.0)
    | +- botocore(install version:1.16.19 version range:>=1.5.62,<2.0.0)
    | +- click(install version:6.6 version range:==6.6)
    | +- docutils(install version:0.14 version range:<0.15,>=0.12)
    | +- futures(install version:3.3.0 version range:*)
    | +- jmespath(install version:0.9.5 version range:>=0.9.0,<0.10.0)
    | +- pyaml(install version:15.8.2 version range:==15.8.2)
    | | +- pyyaml(install version:3.13 version range:*)
    | +- python-dateutil(install version:2.7.5 version range:<2.8.0,>=2.5.3)
    | | +- six(install version:1.11.0 version range:*)
    | | +- six(install version:1.11.0 version range:>=1.5)
    | +- pyyaml(install version:3.13 version range:>=3.11,<3.14)
    | +- six(install version:1.11.0 version range:<1.12.0,>=1.10.0)
    

    Thanks for your help. Best, Neolith

    help wanted 
    opened by NeolithEra 10
  • Revision of pip internals making the pip install stop after one package

    Revision of pip internals making the pip install stop after one package

    On my most recent invocations of lambda build I'm only getting the first package listed in my requirements.txt installed to the build. The output says that the rest are being processed, but the install is returning an error.

    Given that Pip is actively trying to discourage use of itself as a package, I think it's time to begin using subprocess.

    opened by kmbenitez 8
  • add keyword arg for VpcConfig on lambda function update

    add keyword arg for VpcConfig on lambda function update

    We use this package to deploy lambda functions for an in-house project. As of today we got the following error,

    Starting new HTTPS connection (1): lambda.us-west-2.amazonaws.com
    Updating your Lambda function
    Starting new HTTPS connection (1): sts.amazonaws.com
    Starting new HTTPS connection (1): lambda.us-west-2.amazonaws.com
    Traceback (most recent call last):
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/bin/lambda", line 53, in <module>
        cli()
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/click/core.py", line 716, in __call__
        return self.main(*args, **kwargs)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/click/core.py", line 696, in main
        rv = self.invoke(ctx)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/click/core.py", line 889, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/click/core.py", line 534, in invoke
        return callback(*args, **kwargs)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/bin/lambda", line 39, in deploy
        aws_lambda.deploy(CURRENT_DIR, local_package)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/aws_lambda/aws_lambda.py", line 86, in deploy
        update_function(cfg, path_to_zip_file)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/aws_lambda/aws_lambda.py", line 336, in update_function
        MemorySize=cfg.get('memory_size', 512)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/botocore/client.py", line 159, in _api_call
        return self._make_api_call(operation_name, kwargs)
      File "/home/travis/build/OpenTrons/foo-bar/lambdas/data-upload/venv/lib/python2.7/site-packages/botocore/client.py", line 494, in _make_api_call
        raise ClientError(parsed_response, operation_name)
    botocore.exceptions.ClientError: An error occurred (InvalidParameterValueException) when calling the UpdateFunctionConfiguration operation: SubnetIds and SecurityIds must coexist or be both empty list.
    

    There's an active discussion on the error on the AWS Forums here: https://forums.aws.amazon.com/thread.jspa?threadID=246719

    To fix this error I updated the lambda update configuration function to take empty lists or read lists from the configuration.

    opened by SimplyAhmazing 8
  • Adding function to upload zip file to S3

    Adding function to upload zip file to S3

    Please feel free to close if this is deemed unnecessary.

    This is a great toolkit, however, we've been using other tools to deploy/manage lambda configurations. I found that I simply need this toolkit to upload the zipped file to S3 instead of actually deploying the lambda itself. I tried to stay within patterns already established in this repo so this PR may look a little copy/paste-y. Provided that the user adds the destination S3 bucket (and the optional key) to config.yaml, he or she can just execute lambda upload to build the zip file and send it off to S3.

    Any feedback would be much appreciated.

    opened by slapula 7
  • abstractly declare install_requires

    abstractly declare install_requires

    Currently, the install_requires are all pinned/concrete. This causes dependency hell: python-lambda can't be installed unless the application using it (and all its dependencies) use the same versions of any shared requirements.

    This PR switches to abstract requirements to fix this. I wasn't aware of any lower bounds, so I didn't add any.

    There's more background on this on the pypa site, and a discussion of the same change in one of my projects.

    opened by simon-weber 6
  • Ability to pass path (relative/absolute) of requirements file

    Ability to pass path (relative/absolute) of requirements file

    My current usage of python-lambda uses a common requirements.txt file for all my lambda functions. Instead of placing the requirements.txt file in the function directory. Can I just add the ability to pass my own requirements.txt file instead of being forced to put the requirements.txt file in the function directory.

    opened by karthich 6
  • Importing LXML fails (Python 3.6)

    Importing LXML fails (Python 3.6)

    Hi everyone,

    I'm working on a lambda that will makes use of LXML. When running the lambda in AWS I noticed the following error message: Unable to import module 'service': cannot import name 'etree'. It seems this is because "LXML must be built with C extensions for libxml2 and libxslt in a way that plays well with the Amazon Lambda execution environment."

    Has anyone else run into this issue?

    source: https://www.azavea.com/blog/2016/06/27/using-python-lxml-amazon-lambda/

    opened by ncurwen 6
  • Deploying demo app -

    Deploying demo app - "Unknown parameter in input: "Environment"

    I'm attempting to deploy the basic demo app to our account, just to get familiar with the workflow. However, when attempting to initialize the deploy, I receive this error, which is traced to line 371 of the aws_lambda.py code (the section dealing with "Environment" variables):

      File "/Users/x/Envs/pylambda_slack/bin/lambda", line 62, in <module>
        cli()
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/click/core.py", line 716, in __call__
        return self.main(*args, **kwargs)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/click/core.py", line 696, in main
        rv = self.invoke(ctx)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/click/core.py", line 889, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/click/core.py", line 534, in invoke
        return callback(*args, **kwargs)
      File "/Users/x/Envs/pylambda_slack/bin/lambda", line 47, in deploy
        aws_lambda.deploy(CURRENT_DIR, use_requirements, local_package)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/aws_lambda/aws_lambda.py", line 89, in deploy
        create_function(cfg, path_to_zip_file)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/aws_lambda/aws_lambda.py", line 371, in create_function
        Publish=True
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/botocore/client.py", line 159, in _api_call
        return self._make_api_call(operation_name, kwargs)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/botocore/client.py", line 470, in _make_api_call
        api_params, operation_model, context=request_context)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/botocore/client.py", line 523, in _convert_to_request_dict
        api_params, operation_model)
      File "/Users/x/Envs/pylambda_slack/lib/python2.7/site-packages/botocore/validate.py", line 270, in serialize_to_request
        raise ParamValidationError(report=report.generate_report())
    botocore.exceptions.ParamValidationError: Parameter validation failed:
    Unknown parameter in input: "Environment", must be one of: FunctionName, Runtime, Role, Handler, Code, Description, Timeout, MemorySize, Publish, VpcConfig
    

    This appears to be the function being called - any thoughts? I'm not looking to push any environment variable through in this deploy, just get a working app up.

        client.create_function(
            FunctionName=func_name,
            Runtime=cfg.get('runtime', 'python2.7'),
            Role=role,
            Handler=cfg.get('handler'),
            Code={'ZipFile': byte_stream},
            Description=cfg.get('description'),
            Timeout=cfg.get('timeout', 15),
            MemorySize=cfg.get('memory_size', 512),
            Environment={
                'Variables': {
                    key.strip('LAMBDA_'): value
                    for key, value in os.environ.items()
                    if key.startswith('LAMBDA_')
                }
            },
            Publish=True
        )
    
    opened by RedOakMark 6
  • S3 Support

    S3 Support

    I'm getting an error when trying to deploy:

    botocore.exceptions.ClientError: An error occurred (RequestEntityTooLargeException) when calling the UpdateFunctionCode operation: Request must be smaller than 69905067 bytes for the UpdateFunctionCode operation

    It could be avoided by uploading the lambda function code first to S3 and then deploying it to lambda from there.

    Do you plan to support this?

    Tnx

    enhancement 
    opened by sebastianmacias 6
  • Bump codecov from 2.0.22 to 2.1.11

    Bump codecov from 2.0.22 to 2.1.11

    Bumps codecov from 2.0.22 to 2.1.11.

    Release notes

    Sourced from codecov's releases.

    v2.1.10

    Fixes

    • #148 Output elapsed time with S3 upload
    • #153 Improve error reporting in the "try_run" function and correctly include original command output in the error message
    • #295 Added sleep between upload retries.
    • #297 Ignore emacs lisp files
    • #298 Fix error try_to_run using | without shell=True (fix #284)

    Dependencies and Misc

    • #290 Bump coverage from 4.5.4 to 5.2.1
    • #291 Update python versions
    • #292 Add license scan report and status
    • #294 Update README with accurate links
    • #296 Bump coverage from 5.2.1 to 5.3

    v2.1.9

    • #289 Remove token restrictions

    2.1.8

    No release notes provided.

    Changelog

    Sourced from codecov's changelog.

    2.1.11

    Fixes

    • #305 Added option to disable printing of gcov-out
    • #308 Handle exceptions that don't have a returncode

    Dependencies and Misc

    • #301 Update to Python 3.9

    2.1.10

    Fixes

    • #148 Output elapsed time with S3 upload
    • #153 Improve error reporting in the "try_run" function and correctly include original command output in the error message
    • #295 Added sleep between upload retries.
    • #297 Ignore emacs lisp files
    • #298 Fix error try_to_run using | without shell=True (fix #284)

    Dependencies and Misc

    • #290 Bump coverage from 4.5.4 to 5.2.1
    • #291 Update python versions
    • #292 Add license scan report and status
    • #294 Update README with accurate links
    • #296 Bump coverage from 5.2.1 to 5.3

    2.1.9

    • #289Remove token restriction as it is changed server-side

    2.1.8

    • #285Add support for CODECOV_FLAGS
    • #276Add ability to specify number of upload retries

    2.1.7

    • #279 Fix pinned coverage version

    2.1.6

    • #275 Fix GitHub Actions implementation

    2.1.5

    • #273 Implement retries on Codecov API calls
    • #265 Add GitHub Actions CI detection
    • #267 Add CODECOV_NAME as default for name

    2.1.4

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 5
  • Local Test - Modify service.py file did not reflect the changes

    Local Test - Modify service.py file did not reflect the changes

    I am new to lambda and Bash script. When I modify the service.py under the root folder, e.g. change e + pi to e - pi, it did not return the result after the changes. Anyone could help? Or do I need to recompiled the service.pyc file everytime I make the changes?

    Thanks for the help.

    opened by demonxy468 5
  • Bump wheel from 0.36.2 to 0.38.1

    Bump wheel from 0.36.2 to 0.38.1

    Bumps wheel from 0.36.2 to 0.38.1.

    Changelog

    Sourced from wheel's changelog.

    Release Notes

    UNRELEASED

    • Updated vendored packaging to 22.0

    0.38.4 (2022-11-09)

    • Fixed PKG-INFO conversion in bdist_wheel mangling UTF-8 header values in METADATA (PR by Anderson Bravalheri)

    0.38.3 (2022-11-08)

    • Fixed install failure when used with --no-binary, reported on Ubuntu 20.04, by removing setup_requires from setup.cfg

    0.38.2 (2022-11-05)

    • Fixed regression introduced in v0.38.1 which broke parsing of wheel file names with multiple platform tags

    0.38.1 (2022-11-04)

    • Removed install dependency on setuptools
    • The future-proof fix in 0.36.0 for converting PyPy's SOABI into a abi tag was faulty. Fixed so that future changes in the SOABI will not change the tag.

    0.38.0 (2022-10-21)

    • Dropped support for Python < 3.7
    • Updated vendored packaging to 21.3
    • Replaced all uses of distutils with setuptools
    • The handling of license_files (including glob patterns and default values) is now delegated to setuptools>=57.0.0 (#466). The package dependencies were updated to reflect this change.
    • Fixed potential DoS attack via the WHEEL_INFO_RE regular expression
    • Fixed ValueError: ZIP does not support timestamps before 1980 when using SOURCE_DATE_EPOCH=0 or when on-disk timestamps are earlier than 1980-01-01. Such timestamps are now changed to the minimum value before packaging.

    0.37.1 (2021-12-22)

    • Fixed wheel pack duplicating the WHEEL contents when the build number has changed (#415)
    • Fixed parsing of file names containing commas in RECORD (PR by Hood Chatham)

    0.37.0 (2021-08-09)

    • Added official Python 3.10 support
    • Updated vendored packaging library to v20.9

    ... (truncated)

    Commits
    • 6f1608d Created a new release
    • cf8f5ef Moved news item from PR #484 to its proper place
    • 9ec2016 Removed install dependency on setuptools (#483)
    • 747e1f6 Fixed PyPy SOABI parsing (#484)
    • 7627548 [pre-commit.ci] pre-commit autoupdate (#480)
    • 7b9e8e1 Test on Python 3.11 final
    • a04dfef Updated the pypi-publish action
    • 94bb62c Fixed docs not building due to code style changes
    • d635664 Updated the codecov action to the latest version
    • fcb94cd Updated version to match the release
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump certifi from 2021.5.30 to 2022.12.7

    Bump certifi from 2021.5.30 to 2022.12.7

    Bumps certifi from 2021.5.30 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • AccessDeniedException Error while lambda deploy

    AccessDeniedException Error while lambda deploy

    Hi there,

    I am unable to deploy my code on lambda using python-lambda library. It's giving me the following error, I have given all access/permission to my user but this error is not going away. Need help ASAP.

    botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the GetFunction operation: User: arn:aws:iam::123456:user/shahzaib.ali is not authorized to perform: lambda:GetFunction on resource: arn:aws:lambda:me-south-1:123456:function:GKQA with an explicit deny in an identity-based policy

    Thanks

    opened by SyedShahzaib790 1
  • Bump pipenv from 2021.5.29 to 2022.1.8

    Bump pipenv from 2021.5.29 to 2022.1.8

    Bumps pipenv from 2021.5.29 to 2022.1.8.

    Release notes

    Sourced from pipenv's releases.

    Release v2022.1.8

    No release notes provided.

    Release v2021.11.23

    No release notes provided.

    Release v2021.11.15

    No release notes provided.

    Release v2021.11.9

    Features & Improvements

    • Replace click-completion with click's own completion implementation. #4786

    Bug Fixes

    • Fix a bug that pipenv run doesn't set environment variables correctly. #4831
    • Fix a bug that certifi can't be loaded within notpip's vendor library. This makes several objects of pip fail to be imported. #4833
    • Fix a bug that 3.10.0 can be found be python finder. #4837

    Vendored Libraries

    • Update pythonfinder from 1.2.8 to 1.2.9. #4837

    Release v2021.11.5.post0

    No release notes provided.

    Release v2021.11.5

    No release notes provided.

    Changelog

    Sourced from pipenv's changelog.

    2022.1.8 (2022-01-08)

    Bug Fixes

    • Remove the extra parentheses around the venv prompt. [#4877](https://github.com/pypa/pipenv/issues/4877) <https://github.com/pypa/pipenv/issues/4877>_
    • Fix a bug of installation fails when extra index url is given. [#4881](https://github.com/pypa/pipenv/issues/4881) <https://github.com/pypa/pipenv/issues/4881>_
    • Fix regression where lockfiles would only include the hashes for releases for the platform generating the lockfile [#4885](https://github.com/pypa/pipenv/issues/4885) <https://github.com/pypa/pipenv/issues/4885>_
    • Fix the index parsing to reject illegal requirements.txt. [#4899](https://github.com/pypa/pipenv/issues/4899) <https://github.com/pypa/pipenv/issues/4899>_

    2021.11.23 (2021-11-23)

    Bug Fixes

    • Update charset-normalizer from 2.0.3 to 2.0.7, this fixes an import error on Python 3.6. [#4865](https://github.com/pypa/pipenv/issues/4865) <https://github.com/pypa/pipenv/issues/4865>_
    • Fix a bug of deleting a virtualenv that is not managed by Pipenv. [#4867](https://github.com/pypa/pipenv/issues/4867) <https://github.com/pypa/pipenv/issues/4867>_
    • Fix a bug that source is not added to Pipfile when index url is given with pipenv install. [#4873](https://github.com/pypa/pipenv/issues/4873) <https://github.com/pypa/pipenv/issues/4873>_

    2021.11.15 (2021-11-15)

    Bug Fixes

    • Return an empty dict when PIPENV_DONT_LOAD_ENV is set. [#4851](https://github.com/pypa/pipenv/issues/4851) <https://github.com/pypa/pipenv/issues/4851>_
    • Don't use sys.executable when inside an activated venv. [#4852](https://github.com/pypa/pipenv/issues/4852) <https://github.com/pypa/pipenv/issues/4852>_

    Vendored Libraries

    • Drop the vendored jinja2 dependency as it is not needed any more. [#4858](https://github.com/pypa/pipenv/issues/4858) <https://github.com/pypa/pipenv/issues/4858>_
    • Update click from 8.0.1 to 8.0.3, to fix a problem with bash completion. [#4860](https://github.com/pypa/pipenv/issues/4860) <https://github.com/pypa/pipenv/issues/4860>_
    • Drop unused vendor chardet. [#4862](https://github.com/pypa/pipenv/issues/4862) <https://github.com/pypa/pipenv/issues/4862>_

    Improved Documentation

    • Fix the documentation to reflect the fact that special characters must be percent-encoded in the URL. [#4856](https://github.com/pypa/pipenv/issues/4856) <https://github.com/pypa/pipenv/issues/4856>_

    2021.11.9 (2021-11-09)

    ... (truncated)

    Commits
    • d378b9f Release v2022.1.8
    • 439782a Merge pull request from GHSA-qc9x-gjcv-465w
    • 1679098 fix TLS validation for requirements.txt
    • 9cb42e1 Merge pull request #4910 from jfly/update-run-tests-instructions
    • 08a7fcf Oops, set the CI environment variable even earlier.
    • f42fcaa Misc doc updates (mostly around running tests)
    • c8f34dd Merge pull request #4908 from jfly/issue-4885-custom-indices-lacking-hashes
    • 34652df Use a PackageFinder with ignore_compatibility when collecting hashes
    • b0ebaf0 Merge pull request #4907 from milo-minderbinder/bugfix/requirements-file-options
    • d535301 disallow abbreviated forms of full option names
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Set click version in setup.py to Pipfile click version

    Set click version in setup.py to Pipfile click version

    Hi @nficano thanks for this amazing project !

    I am currently facing issues due to the old version of click defined in setup.py (mostly related to pip dependency resolver issues while installing black)

    According to what is in Pipefile the project currently requires click==7.1.2 so setup.py should also define the same version.

    Thanks !

    opened by Lowess 0
Owner
Nick Ficano
Hi, I'm Nick! I develop software and live in Smithtown, New York.
Nick Ficano
Let's pretend you want to create a AWS Lambda project called "sns-processor".

Usage Let's pretend you want to create a AWS Lambda project called "sns-processor". Rather than using lambda and then editing the results to include y

null 1 Dec 31, 2021
A NetBox Plugin that gives a UI for generating, comparing and deploying configurations to devices.

netbox_config_plugin - A plugin to generate, compare and deploy configurations This plugin allows you to execute your code to generate a config for a

Jo 11 Dec 21, 2022
Developing a python based app prototype with KivyMD framework for a competition :))

Developing a python based app prototype with KivyMD framework for a competition :))

Jay Desale 1 Jan 10, 2022
Advanced Developing of Python Apps Final Exercise

Advanced-Developing-of-Python-Apps-Final-Exercise This is an exercise that I did for a python advanced learning course. The exercise is divided into t

Alejandro Méndez Fernández 1 Dec 4, 2021
Developing and Comparing Vision-based Algorithms for Vision-based Agile Flight

DodgeDrone: Vision-based Agile Drone Flight (ICRA 2022 Competition) Would you like to push the boundaries of drone navigation? Then participate in the

Robotics and Perception Group 115 Dec 10, 2022
Exploring basic lambda calculus in Python

Lambda Exploring basic lambda calculus in Python. In this repo I have used the lambda function built into python to get a more intiutive feel of lambd

Bhardwaj Bhaskar 2 Nov 12, 2021
Chalice - A tool to facilitate Python based lambda deployment

Chalice is a tool to facilitate Python based lambda deployment. This repo contains the output of my basic exploration of this tool.

Csilla Bessenyei 1 Feb 3, 2022
Download and process GOES-16 and GOES-17 data from NOAA's archive on AWS using Python.

Download and display GOES-East and GOES-West data GOES-East and GOES-West satellite data are made available on Amazon Web Services through NOAA's Big

Brian Blaylock 88 Dec 16, 2022
Python plugin/extra to load data files from an external source (such as AWS S3) to a local directory

Data Loader Plugin - Python Table of Content (ToC) Data Loader Plugin - Python Table of Content (ToC) Overview References Python module Python virtual

Cloud Helpers 2 Jan 10, 2022
Pokemon catch events project to demonstrate data pipeline on AWS

Pokemon Catches Data Pipeline This is a sample project to practice end-to-end data project; Terraform is used to deploy infrastructure; Kafka is the t

Vitor Carra 4 Sep 3, 2021
A Dungeon and Dragons Toolkit using Python

Pythons-Dungeons A Dungeon and Dragons Toolkit using Python Rules: -When you are commiting please don't delete parts of the code that are important -A

null 2 Oct 21, 2021
mrcal is a generic toolkit to solve calibration and SFM-like problems originating at NASA/JPL

mrcal is a generic toolkit to solve calibration and SFM-like problems originating at NASA/JPL. Functionality related to these problems is exposed as a set of C and Python libraries and some commandline tools.

Dima Kogan 102 Dec 23, 2022
A web-based analysis toolkit for the System Usability Scale providing calculation, plotting, interpretation and contextualization utility

System Usability Scale Analysis Toolkit The System Usability Scale (SUS) Analysis Toolkit is a web-based python application that provides a compilatio

Jonas Blattgerste 3 Oct 27, 2022
Fully cross-platform toolkit (and library!) for MachO+Obj-C editing/analysis

fully cross-platform toolkit (and library!) for MachO+Obj-C editing/analysis. Includes a cli kit, a curses GUI, ObjC header dumping, and much more.

cynder 301 Dec 28, 2022
This is the repo for Uncertainty Quantification 360 Toolkit.

UQ360 The Uncertainty Quantification 360 (UQ360) toolkit is an open-source Python package that provides a diverse set of algorithms to quantify uncert

International Business Machines 207 Dec 30, 2022
Dyson Sphere Program Blueprint Toolkit

dspbptk This is dspbptk, the Dyson Sphere Program Blueprint toolkit. Dyson Sphere Program is an amazing factory-building game by the incredibly talent

Johannes Bauer 22 Nov 15, 2022
Project issue to website data transformation toolkit

braintransform Project issue to website data transformation toolkit. Introduction The purpose of these scripts is to be able to dynamically generate t

Brainhack 1 Nov 19, 2021
An After Effects render queue for ShotGrid Toolkit.

AEQueue An After Effects render queue for ShotGrid Toolkit. Features Render multiple comps to locations defined by templates in your Toolkit config. C

Brand New School 5 Nov 20, 2022
MoBioTools A simple yet versatile toolkit to automatically setup quantum mechanics/molecular mechanics

A simple yet versatile toolkit to setup quantum mechanical/molecular mechanical (QM/MM) calculations from molecular dynamics trajectories.

MoBioChem 17 Nov 27, 2022