summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-06-20 06:56:23 +0000
committerCoprDistGit <infra@openeuler.org>2023-06-20 06:56:23 +0000
commit1202bdcd78e4906ce840d056831edea50b71adb3 (patch)
treee17248918a884c1aed8d03faeb9f48a160a95139
parent8f681d469cfdbfa3ebb16206dd188cae8dab5fef (diff)
automatic import of python-pylambdarestopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-pylambdarest.spec558
-rw-r--r--sources1
3 files changed, 560 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..72565cb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pylambdarest-0.2.1.tar.gz
diff --git a/python-pylambdarest.spec b/python-pylambdarest.spec
new file mode 100644
index 0000000..2418cc2
--- /dev/null
+++ b/python-pylambdarest.spec
@@ -0,0 +1,558 @@
+%global _empty_manifest_terminate_build 0
+Name: python-pylambdarest
+Version: 0.2.1
+Release: 1
+Summary: Lightweight framework for building REST API using AWS Lambda + API Gateway
+License: MIT
+URL: https://github.com/MarwanDebbiche/pylambdarest
+Source0: https://mirrors.aliyun.com/pypi/web/packages/c1/5b/2ebd216e671a48e72b9c6255996cfb661fa288e5cdd7b70bd85c91ee6cad/pylambdarest-0.2.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-jsonschema
+Requires: python3-PyJWT
+Requires: python3-simplejson
+
+%description
+# pylambdarest
+
+[![CI/CD Status](https://github.com/MarwanDebbiche/pylambdarest/workflows/CI%2FCD/badge.svg?branch=master)](https://github.com/MarwanDebbiche/pylambdarest/actions?query=branch:master)
+[![Coverage Status](https://coveralls.io/repos/github/MarwanDebbiche/pylambdarest/badge.svg?branch=master)](https://coveralls.io/github/MarwanDebbiche/pylambdarest?branch=master)
+[![Latest Version](https://img.shields.io/pypi/v/pylambdarest.svg?color=blue)](https://pypi.python.org/pypi/pylambdarest)
+[![PyPI - Downloads](https://img.shields.io/pypi/dm/pylambdarest?label=pypi%20downloads)](https://pypi.org/project/pylambdarest/)
+![License](https://img.shields.io/github/license/MarwanDebbiche/pylambdarest)
+
+pylambdarest is a lightweight opinionated framework for building REST API using [AWS Lambda](https://aws.amazon.com/lambda/) and [API Gateway](https://aws.amazon.com/api-gateway/).
+
+## Motivation
+
+Why another framework ?
+
+When using API Gateway and python Lambda functions, the most common pattern is to have a unique Lambda function triggered by a proxy API Gateway resource. The Lambda then uses a framework like [Flask](https://flask.palletsprojects.com/en/1.1.x/) to do all the routing. In an API Gateway + Lambda context, I feel like **the routing should be handled by API Gateway itself**, then forwarding the request to specific Lambda functions for each resource or endpoint.
+
+## Features
+
+- No routing. Yes, this is a feature. Routing should be handled by API Gateway.
+- API Gateway event parsing (including request body and path parameters).
+- Cleaner syntax.
+- Optional body schema and query parameters validation.
+
+## Installation
+
+Install the package from PyPI using pip:
+
+```
+$ pip install pylambdarest
+```
+
+pylambdarest should also be included in the deployment package of your Lambda functions.
+
+## Getting started
+
+pylambdarest provides a `@route` decorator to parse the API Gateway event into a `Request` object available in the handler function as an argument. It also formats the handler's output to the expected Lambda + API Gateway format seamlessly.
+
+Turning this:
+
+```python
+import json
+
+def handler(event, context):
+ body = json.loads(event["body"])
+ query_params = event["queryStringParameters"]
+ path_params = event["pathParameters"]
+
+ return {
+ "statusCode": 200,
+ "body": json.dumps({
+ "message": f"Hello from AWS Lambda {body['name']}!!"
+ })
+ }
+
+```
+
+Into this:
+
+```python
+from pylambdarest import route
+
+@route()
+def handler(request):
+ body = request.json
+ query_params = request.query_params
+ path_params = request.path_params
+
+ return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}
+```
+
+You can still access the original `event` and `context` arguments from the handler:
+
+```python
+from pylambdarest import route
+
+@route()
+def handler(request, event, context):
+ print(event)
+ body = request.json
+
+ return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}
+```
+
+<br/>
+
+Path parameters defined in API Gateway can also be accessed directly as function argument:
+
+<br/>
+
+![api-gateway-path-params](https://raw.githubusercontent.com/MarwanDebbiche/pylambdarest/master/images/api-gateway-path-params.png)
+
+```python
+from pylambdarest import route
+
+@route()
+def get_user(user_id):
+ print(user_id)
+
+ # get user from db
+ user = {"id": user_id, "name": "John Doe"}
+
+ return 200, user
+```
+
+## Schema Validation
+
+pylambdarest optionally provides schema validation using [jsonschema](https://github.com/Julian/jsonschema):
+
+```python
+from pylambdarest import route
+
+user_schema = {
+ "type": "object",
+ "properties": {
+ "name": {"type": "string"}
+ },
+ "required": ["name"],
+ "additionalProperties": False
+}
+
+@route(body_schema=user_schema)
+def create_user(request):
+ # If the request's body does not
+ # satisfy the user_schema,
+ # a 400 will be returned
+
+ # Create user here
+
+ return 201
+
+
+query_params_schema = {
+ "type": "object",
+ "properties": {
+ # Only string types are allowed for query parameters.
+ # Types casting should be done in the handler.
+ "page": {"type": "string"}
+ },
+ "additionalProperties": False
+}
+
+@route(query_params_schema=query_params_schema)
+def get_users(request):
+ page = int(request.query_params.get("page", 1))
+
+ # request users in db
+ users = [
+ {"userId": i}
+ for i in range((page - 1) * 50, page * 50)
+ ]
+
+ return 200, users
+```
+
+## Example
+
+You can look at the [sample](https://github.com/MarwanDebbiche/pylambdarest/tree/master/sample) for a minimal pylambdarest API.
+
+In this sample, we use the [serverless](https://www.serverless.com/) framework to declare the API Gateway -> Lambda routing
+
+The packaging of the Lambda functions is done using the [serverless-python-requirements](https://github.com/UnitedIncome/serverless-python-requirements) plugin.
+
+
+%package -n python3-pylambdarest
+Summary: Lightweight framework for building REST API using AWS Lambda + API Gateway
+Provides: python-pylambdarest
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-pylambdarest
+# pylambdarest
+
+[![CI/CD Status](https://github.com/MarwanDebbiche/pylambdarest/workflows/CI%2FCD/badge.svg?branch=master)](https://github.com/MarwanDebbiche/pylambdarest/actions?query=branch:master)
+[![Coverage Status](https://coveralls.io/repos/github/MarwanDebbiche/pylambdarest/badge.svg?branch=master)](https://coveralls.io/github/MarwanDebbiche/pylambdarest?branch=master)
+[![Latest Version](https://img.shields.io/pypi/v/pylambdarest.svg?color=blue)](https://pypi.python.org/pypi/pylambdarest)
+[![PyPI - Downloads](https://img.shields.io/pypi/dm/pylambdarest?label=pypi%20downloads)](https://pypi.org/project/pylambdarest/)
+![License](https://img.shields.io/github/license/MarwanDebbiche/pylambdarest)
+
+pylambdarest is a lightweight opinionated framework for building REST API using [AWS Lambda](https://aws.amazon.com/lambda/) and [API Gateway](https://aws.amazon.com/api-gateway/).
+
+## Motivation
+
+Why another framework ?
+
+When using API Gateway and python Lambda functions, the most common pattern is to have a unique Lambda function triggered by a proxy API Gateway resource. The Lambda then uses a framework like [Flask](https://flask.palletsprojects.com/en/1.1.x/) to do all the routing. In an API Gateway + Lambda context, I feel like **the routing should be handled by API Gateway itself**, then forwarding the request to specific Lambda functions for each resource or endpoint.
+
+## Features
+
+- No routing. Yes, this is a feature. Routing should be handled by API Gateway.
+- API Gateway event parsing (including request body and path parameters).
+- Cleaner syntax.
+- Optional body schema and query parameters validation.
+
+## Installation
+
+Install the package from PyPI using pip:
+
+```
+$ pip install pylambdarest
+```
+
+pylambdarest should also be included in the deployment package of your Lambda functions.
+
+## Getting started
+
+pylambdarest provides a `@route` decorator to parse the API Gateway event into a `Request` object available in the handler function as an argument. It also formats the handler's output to the expected Lambda + API Gateway format seamlessly.
+
+Turning this:
+
+```python
+import json
+
+def handler(event, context):
+ body = json.loads(event["body"])
+ query_params = event["queryStringParameters"]
+ path_params = event["pathParameters"]
+
+ return {
+ "statusCode": 200,
+ "body": json.dumps({
+ "message": f"Hello from AWS Lambda {body['name']}!!"
+ })
+ }
+
+```
+
+Into this:
+
+```python
+from pylambdarest import route
+
+@route()
+def handler(request):
+ body = request.json
+ query_params = request.query_params
+ path_params = request.path_params
+
+ return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}
+```
+
+You can still access the original `event` and `context` arguments from the handler:
+
+```python
+from pylambdarest import route
+
+@route()
+def handler(request, event, context):
+ print(event)
+ body = request.json
+
+ return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}
+```
+
+<br/>
+
+Path parameters defined in API Gateway can also be accessed directly as function argument:
+
+<br/>
+
+![api-gateway-path-params](https://raw.githubusercontent.com/MarwanDebbiche/pylambdarest/master/images/api-gateway-path-params.png)
+
+```python
+from pylambdarest import route
+
+@route()
+def get_user(user_id):
+ print(user_id)
+
+ # get user from db
+ user = {"id": user_id, "name": "John Doe"}
+
+ return 200, user
+```
+
+## Schema Validation
+
+pylambdarest optionally provides schema validation using [jsonschema](https://github.com/Julian/jsonschema):
+
+```python
+from pylambdarest import route
+
+user_schema = {
+ "type": "object",
+ "properties": {
+ "name": {"type": "string"}
+ },
+ "required": ["name"],
+ "additionalProperties": False
+}
+
+@route(body_schema=user_schema)
+def create_user(request):
+ # If the request's body does not
+ # satisfy the user_schema,
+ # a 400 will be returned
+
+ # Create user here
+
+ return 201
+
+
+query_params_schema = {
+ "type": "object",
+ "properties": {
+ # Only string types are allowed for query parameters.
+ # Types casting should be done in the handler.
+ "page": {"type": "string"}
+ },
+ "additionalProperties": False
+}
+
+@route(query_params_schema=query_params_schema)
+def get_users(request):
+ page = int(request.query_params.get("page", 1))
+
+ # request users in db
+ users = [
+ {"userId": i}
+ for i in range((page - 1) * 50, page * 50)
+ ]
+
+ return 200, users
+```
+
+## Example
+
+You can look at the [sample](https://github.com/MarwanDebbiche/pylambdarest/tree/master/sample) for a minimal pylambdarest API.
+
+In this sample, we use the [serverless](https://www.serverless.com/) framework to declare the API Gateway -> Lambda routing
+
+The packaging of the Lambda functions is done using the [serverless-python-requirements](https://github.com/UnitedIncome/serverless-python-requirements) plugin.
+
+
+%package help
+Summary: Development documents and examples for pylambdarest
+Provides: python3-pylambdarest-doc
+%description help
+# pylambdarest
+
+[![CI/CD Status](https://github.com/MarwanDebbiche/pylambdarest/workflows/CI%2FCD/badge.svg?branch=master)](https://github.com/MarwanDebbiche/pylambdarest/actions?query=branch:master)
+[![Coverage Status](https://coveralls.io/repos/github/MarwanDebbiche/pylambdarest/badge.svg?branch=master)](https://coveralls.io/github/MarwanDebbiche/pylambdarest?branch=master)
+[![Latest Version](https://img.shields.io/pypi/v/pylambdarest.svg?color=blue)](https://pypi.python.org/pypi/pylambdarest)
+[![PyPI - Downloads](https://img.shields.io/pypi/dm/pylambdarest?label=pypi%20downloads)](https://pypi.org/project/pylambdarest/)
+![License](https://img.shields.io/github/license/MarwanDebbiche/pylambdarest)
+
+pylambdarest is a lightweight opinionated framework for building REST API using [AWS Lambda](https://aws.amazon.com/lambda/) and [API Gateway](https://aws.amazon.com/api-gateway/).
+
+## Motivation
+
+Why another framework ?
+
+When using API Gateway and python Lambda functions, the most common pattern is to have a unique Lambda function triggered by a proxy API Gateway resource. The Lambda then uses a framework like [Flask](https://flask.palletsprojects.com/en/1.1.x/) to do all the routing. In an API Gateway + Lambda context, I feel like **the routing should be handled by API Gateway itself**, then forwarding the request to specific Lambda functions for each resource or endpoint.
+
+## Features
+
+- No routing. Yes, this is a feature. Routing should be handled by API Gateway.
+- API Gateway event parsing (including request body and path parameters).
+- Cleaner syntax.
+- Optional body schema and query parameters validation.
+
+## Installation
+
+Install the package from PyPI using pip:
+
+```
+$ pip install pylambdarest
+```
+
+pylambdarest should also be included in the deployment package of your Lambda functions.
+
+## Getting started
+
+pylambdarest provides a `@route` decorator to parse the API Gateway event into a `Request` object available in the handler function as an argument. It also formats the handler's output to the expected Lambda + API Gateway format seamlessly.
+
+Turning this:
+
+```python
+import json
+
+def handler(event, context):
+ body = json.loads(event["body"])
+ query_params = event["queryStringParameters"]
+ path_params = event["pathParameters"]
+
+ return {
+ "statusCode": 200,
+ "body": json.dumps({
+ "message": f"Hello from AWS Lambda {body['name']}!!"
+ })
+ }
+
+```
+
+Into this:
+
+```python
+from pylambdarest import route
+
+@route()
+def handler(request):
+ body = request.json
+ query_params = request.query_params
+ path_params = request.path_params
+
+ return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}
+```
+
+You can still access the original `event` and `context` arguments from the handler:
+
+```python
+from pylambdarest import route
+
+@route()
+def handler(request, event, context):
+ print(event)
+ body = request.json
+
+ return 200, {"message": f"Hello from AWS Lambda {body['name']}!!"}
+```
+
+<br/>
+
+Path parameters defined in API Gateway can also be accessed directly as function argument:
+
+<br/>
+
+![api-gateway-path-params](https://raw.githubusercontent.com/MarwanDebbiche/pylambdarest/master/images/api-gateway-path-params.png)
+
+```python
+from pylambdarest import route
+
+@route()
+def get_user(user_id):
+ print(user_id)
+
+ # get user from db
+ user = {"id": user_id, "name": "John Doe"}
+
+ return 200, user
+```
+
+## Schema Validation
+
+pylambdarest optionally provides schema validation using [jsonschema](https://github.com/Julian/jsonschema):
+
+```python
+from pylambdarest import route
+
+user_schema = {
+ "type": "object",
+ "properties": {
+ "name": {"type": "string"}
+ },
+ "required": ["name"],
+ "additionalProperties": False
+}
+
+@route(body_schema=user_schema)
+def create_user(request):
+ # If the request's body does not
+ # satisfy the user_schema,
+ # a 400 will be returned
+
+ # Create user here
+
+ return 201
+
+
+query_params_schema = {
+ "type": "object",
+ "properties": {
+ # Only string types are allowed for query parameters.
+ # Types casting should be done in the handler.
+ "page": {"type": "string"}
+ },
+ "additionalProperties": False
+}
+
+@route(query_params_schema=query_params_schema)
+def get_users(request):
+ page = int(request.query_params.get("page", 1))
+
+ # request users in db
+ users = [
+ {"userId": i}
+ for i in range((page - 1) * 50, page * 50)
+ ]
+
+ return 200, users
+```
+
+## Example
+
+You can look at the [sample](https://github.com/MarwanDebbiche/pylambdarest/tree/master/sample) for a minimal pylambdarest API.
+
+In this sample, we use the [serverless](https://www.serverless.com/) framework to declare the API Gateway -> Lambda routing
+
+The packaging of the Lambda functions is done using the [serverless-python-requirements](https://github.com/UnitedIncome/serverless-python-requirements) plugin.
+
+
+%prep
+%autosetup -n pylambdarest-0.2.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-pylambdarest -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..3f2e901
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+f8bfe2826d5d077eb522e13657102bb4 pylambdarest-0.2.1.tar.gz