Pre-release
This release is a pre-release and may not be stable for production use.
agave
Agave is a library for building REST APIs using a Blueprint pattern, with support for both AWS Chalice and FastAPI frameworks. It simplifies the creation of JSON-based endpoints for querying, modifying, and creating resources.
Installation
Choose the installation option based on your framework:
Chalice Installation
pip install agave[chalice]
FastAPI Installation
pip install agave[fastapi]
SQS task support:
pip install agave[fastapi,tasks]
Usage
Chalice Example
You can then create a REST API blueprint as follows:
from agave.chalice import RestApiBlueprint
app = RestApiBlueprint()
@app.resource('/accounts')
class Account:
model = AccountModel
query_validator = AccountQuery
update_validator = AccountUpdateRequest
get_query_filter = generic_query
@staticmethod
@app.validate(AccountRequest)
def create(request: AccountRequest) -> Response:
account = AccountModel(
name=request.name,
user_id=app.current_user_id,
platform_id=app.current_platform_id,
)
account.save()
return Response(account.to_dict(), status_code=201)
@staticmethod
def update(
account: AccountModel, request: AccountUpdateRequest
) -> Response:
account.name = request.name
account.save()
return Response(account.to_dict(), status_code=200)
@staticmethod
def delete(account: AccountModel) -> Response:
account.deactivated_at = dt.datetime.utcnow().replace(microsecond=0)
account.save()
return Response(account.to_dict(), status_code=200)
FastAPI Example
from agave.fastapi import RestApiBlueprint
app = RestApiBlueprint()
@app.resource('/accounts')
class Account:
model = AccountModel
query_validator = AccountQuery
update_validator = AccountUpdateRequest
get_query_filter = generic_query
response_model = AccountResponse
@staticmethod
async def create(request: AccountRequest) -> Response:
"""This is the description for openapi"""
account = AccountModel(
name=request.name,
user_id=app.current_user_id,
platform_id=app.current_platform_id,
)
await account.async_save()
return Response(content=account.to_dict(), status_code=201)
@staticmethod
async def update(
account: AccountModel,
request: AccountUpdateRequest,
) -> Response:
account.name = request.name
await account.async_save()
return Response(content=account.to_dict(), status_code=200)
@staticmethod
async def delete(account: AccountModel, _: Request) -> Response:
account.deactivated_at = dt.datetime.utcnow().replace(microsecond=0)
await account.async_save()
return Response(content=account.to_dict(), status_code=200)
Async Tasks
from agave.tasks.sqs_tasks import task
QUEUE_URL = 'https://sqs.region.amazonaws.com/account/queue'
AWS_DEFAULT_REGION = 'us-east-1'
@task(
queue_url=QUEUE_URL,
region_name=AWS_DEFAULT_REGION,
visibility_timeout=30,
max_retries=10,
)
async def process_data(data: dict):
# Async task processing
return {'processed': data}
Running Tests
Run the tests using the following command:
make test
Metadata
Release files for agave 1.2.0.dev100
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agave-1.2.0.dev100.tar.gz | 30.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agave-1.2.0.dev100-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.0 kB
Release files / agave-1.2.0.dev100.tar.gz
| Download URL | agave-1.2.0.dev100.tar.gz |
|---|---|
| Size | 30.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e5d33f8479ce3bb6d6a28972f4dd3fd03cb9bcf09aa89ae454ad0806a689d6c8
|
|
BLAKE2b-256 checksum How to use checksums |
c31e60ff7c10db2a261212294e99fabf89b415e3da0dbe8318c7301e5064be4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / agave-1.2.0.dev100-py3-none-any.whl
| Download URL | agave-1.2.0.dev100-py3-none-any.whl |
|---|---|
| Size | 40.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
765077f103eaad40562fee25025a97f55c481a434502e51403f790278f8c25ab
|
|
BLAKE2b-256 checksum How to use checksums |
772506788af5c13b30991cab570df5e87bd3baf180093950c852ef1d85603f14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|