b-lambda-layer-common 4.5.0
Common opinionated utilities for every day development.
License: Apache License 2.0
Keywords: AWS CDK Lambda Layer

# B.LambdaLayerCommon

![Pipeline](https://github.com/Biomapas/B.LambdaLayerCommon/workflows/Pipeline/badge.svg?branch=master)

> **DEPRECATION WARNING !!!**</br></br>
> This library no longer supports lambda layers and eventually will be moved to another repository. 
> It is a simple python library of common methods to develop in AWS environment.
> Create your own lambda layer using ![B.CfnLambdaLayer](https://github.com/Biomapas/B.CfnLambdaLayer)
> and specify this library as a dependency. Example given below.
> ```python
> from b_cfn_lambda_layer.lambda_layer import LambdaLayer
> layer = LambdaLayer(
>   ...,
>   dependencies={
>      'b-lambda_layer_common': PackageVersion.from_string_version('4.0.0'),
>   }
> )
> ```

### Description

This is a simple python library, that contains various useful methods that will make infrastructure development 
much easier. 

### Remarks

[Biomapas](https://www.biomapas.com/) aims to modernise life-science industry by sharing its IT knowledge with other companies and the community. 
This is an open source library intended to be used by anyone. 
Improvements and pull requests are welcome. 

### Related technology

- Python3
- Docker
- AWS CDK
- AWS Lambda

### Assumptions

This project assumes you have good knowledge in AWS. 

- Good Python skills and basis of OOP.

### Useful sources

- None.

### Install

Before installing this library, ensure you have these tools setup:

- Python / Pip

To install this project from source run:

```
pip install .
```

Or you can install it from a PyPi repository:

```
pip install b-lambda_layer_common
```

### Usage & Examples

Main modules:

- _api_gateway_
  <br>Contains various functionalities related to API Gateway service and integrations.
<br><br>
- _cache_
  <br>Contains caching mechanisms for lambda functions.
<br><br>
- _events_
  <br>Contains functionality that supports event-driven architectures.
<br><br>  
- _exceptions_
  <br>Contains advanced exception handling and propagation between lambda function chains.
<br><br>  
- _ssm_
  <br>Contains SSM parameter store handling logic.
<br><br>  
- _util_
  <br>Contains random fun stuff ;) 
<br><br>
- _validation_
  <br>Various value validations for python.
<br><br>  
- _ws_api_gateway_
  <br>Contains various functionalities related to API Gateway websocket service and integrations.

### Testing

This package has unit tests based on **pytest**.
To run tests simply run:

```
pytest --cov=b_lambda_layer_common b_lambda_layer_common_test/unit --cov-fail-under=80
```

### Contribution

Found a bug? Want to add or suggest a new feature? 
Contributions of any kind are gladly welcome. 
You may contact us directly, create a pull-request or an issue in github platform. 
Lets modernize the world together.


# Release history

### 4.5.0
* Update of the `CognitoAccessToken` class to parse authentication token either from the request headers or 
from the request context.

### 4.4.0
* Add decorator `remove_header` removing desired headers from API Gateway integration lambda event.

### 4.3.0
* Improve `ValueValidator` by adding `not_contains_whitespace` method.
* Make `ValueValidatorPresets` more flexible.

### 4.2.2
* Make `MalformedPermissionErorr` inherit straight from `HttpException`.

### 4.2.1
* Typehint fixes.

### 4.2.0
* Add more custom `BException` exceptions.
* 420 hehe...

### 4.1.0
* Add ability to specify custom exception when performing value validation.

### 4.0.0
* Deprecate lambda layer functionality. Now this is a simple python lib with common AWS-related functionality.
  Use https://github.com/Biomapas/B.CfnLambdaLayer to create lambda layers.
* Remove `DynamoDb` & `PynamoDb` functionality from this code. It has been moved and improved. 
  Find everything here: https://github.com/Biomapas/B.DynamoDbCommon. 

### 3.3.0
* Allow access of the value within validators.

### 3.2.0
* Add epic validation!
* Add `ValueValidator` for basic validation.
* Add `ValueValidatorPreset` for convenient validation.

### 3.1.0
* Extract api key from lambda event.
* Extract body from lambda event.

### 3.0.1
* Extend boto3 step-functions call timeout to maximum lambda execution time (15 minutes).

### 3.0.0
* Use the newest base layer `B.CfnLambdaLayer` 
  which uses new asset bundling mechanism (Dockerfile).

### 2.4.0
* Add Boto3 client validation under SfnCall function.

### 2.3.4
* Add functionality to pass Boto3 client to SfnCall function for multithreding support.

### 2.3.3
* Fix api empty dict serialization.

### 2.3.2
* Improve parsing of JWT claims from API Gateway authorizer output.

### 2.3.1
* If you want to use `cryptography` module, you must use Python 3.8.
* Add explanations for Python 3.8 versions.
* Fix supported layer python versions.

### 2.3.0
* Add Fernet encryption PynamoDB attribute.

### 2.2.1
* Fix KmsAttribute by introducing base64 encode/decode.

### 2.2.0
* Add field validator in util directory. Simple string validation.
* Add KMS attribute for PynamoDB.

### 2.1.2
* Add a list bytes batching utility.

### 2.0.6
* Handle errors when raising ValueError in SfnCall class.

### 2.0.4
* Simple return JSON of an output if SfnCall raised ValueError.

### 2.0.1
* Include .txt files.

### 2.0.0
* Complete refactor.
* Fix ugly if/else imports.
* Run unit tests inside lambda functions.
* Use b_cfn_lambda_layer dependency.
* Write more unit and integration tests.
* Add README documentation.

### 1.20.0
* Add validation when bundling with Docker.

### 1.19.0
* General testing improvements.
* Add Layer V2 integration tests.

### 1.18.0
* Add V2 Layer class to enable installation of dependencies.

### 1.16.0
* Add response method to return any type.
* Add `text/html` and `text/plain` headers.
* Add missing `fields` parameter support to `NeighbourEndpoint` class.

### 1.15.1
* Improve function return value handling for `InMemoryDataCache` class.

### 1.15.0
* Add in-memory data caching functionality.

### 1.14.0
* Add `fields` parameter support to `HttpEndpoint` class.

### 1.11.1
* Update DoNotUpdate class to be usable as a type.

### 1.11.0
* Add WebSocket Api Gateway message class to form consistent messages.

### 1.10.2
* Allow for changing HttpEndpoint behavior.

### 1.10.1
* Add ability to specify if to fail to errors.
* Try to read from env event bus name.

### 1.10.0
* Add factory to emit EventBridge events.

### 1.9.5
* Make the code a little more robust and less error prone.

### 1.9.4
* Assets input may contain garbage files too, hence, apply
cleanup commands directly on asset outputs folder.

### 1.9.3
* Add builds badge.

### 1.9.2
* Remove leftover code.
* Update requirements.

### 1.9.1
* Delete unnecessary files which result in different asset hash.
* Calculate hash when bundling.

### 1.9.0
* Add CSV headers.

### 1.8.3
* Ensure everything works with a robust integration test.

### 1.8.2
* Improve Boto3Version class.

### 1.8.1
* Fix bug when boto3 version is specified project files
are not copied.

### 1.8.0
* Change asset bundling to asset docker bundling if additional
dependencies are specified.
* Add ability to install boto3 library.
* Add more unit tests.
* Add integration tests to deploy and test the Layer in AWS.

### 1.7.0
* Simplify SSM parameters functionality.
* Add robust SSM parameter tests.

### 1.6.2
* Do not serialize returned ssm parameters.

### 1.6.1
* Add more logging for better visibility.

### 1.6.0
* SSM should_refresh function should be public.

### 1.5.1
* Add logging on ssm error decorator.

### 1.5.0
* Force using error_class to error_classes.

### 1.4.0
* Add functionality to fetch and cache SSM parameters.
* Add OS type parameters.

### 1.3.0
* Add media Response and wav/mpeg headers.

### 1.2.0
* Add DoNotUpdate class, useful when checking what parameters to update and what not.

### 1.1.3
* Implement retrying logic to HttpCall.

### 1.1.2
* Make sure test coverage is at least 80%.
* Add CI/CD pipeline.
* Add more encodings to decode responses.

### 1.1.1
* Add urllib3 dependency.

### 1.1.0
* Add DynamoDBEncoder that subclasses DecimalEncoder and additionally encodes sets as lists.

### 1.0.3
* Modify call_to_json function by checking whether the response contains body.

### 1.0.2
* Add exception logging for failed imports.

### 1.0.1
* Expose http_endpoint on NeigbourEndpoint class.

### 1.0.0
* Release version with major braking changes.
* Consistent naming for imports.
* Unit tests to cover all functions and classes.
* Add neighbour endpoint.
* General code improvements and cleanup.

### 0.0.16
* Fix logging imports.
* Add logging of exception tracebacks to exception_middleware.
* Add logging about HTTP requests.
* Set request scheme for parent API Gateway urls depending on current protocol.

### 0.0.15
* Add a CognitoAccessToken for parsing access token information provided by the API Gateway using Cognito authorizer.

### 0.0.14
* Add a LoggingManager for setting up logging configuration

### 0.0.13
* Add custom JSON encoder with support for decimal.Decimal encoding

### 0.0.12
* Implement API Gateway body parsing.

### 0.0.11
* Fix imports.

### 0.0.10
* Implement exceptions.

### 0.0.9
* Fix api gateway url.

### 0.0.8
* Add xml to dict converter utility. No dependencies.

### 0.0.7
* Fix imports.

### 0.0.6
* Add ability to check whether singleton was initialized.

### 0.0.5
* Remove description.

### 0.0.4
* Do not create an extra stack.

### 0.0.3
* Add safe initialization.

### 0.0.2
* Add Layer class and Singleton.

### 0.0.1
* Initial build.