A set of Python utilities, recipes and snippets
Project description
serpens
A set of Python utilities, recipes and snippets.
SQS Utilities
-
This utility is a decorator that iterate by each sqs record.
-
For each sqs record will be inserted a record object (from type sqs.Record) as argument that will process the sqs messages.
from serpens import sqs
@sqs.handler
def message_processor(record: sqs.Record):
# code to process each sqs message
print(record.body)
Record
- The client function that will process the sqs messages will receive an instance of sqs.Record dataclass. This class has the follow structure:
class Record:
data: Dict[Any, Any]
body: Union[dict, str]
message_attributes: Dict[Any, Any]
queue_name: str
sent_datetime: datetime
Record attributes
- data: Contain all data from SQS message. This attribute is assigned in each iteration in SQS message.
- body: Return
data["body"]converted todictorstr. - message_attributes: Return the
data["messageAttributes"]converted todict. - queue_name: Return the queue name extracted from
data["eventSourceARN"]. - sent_datetime: Return the
data["attributes"]["SentTimestamp"]converted todatetime.
API Utilities
- This utility is a wrapper to simplify working with lambda handlers. The decorator
api.handlerwill decorate a function that will process a lambda and this function will receive arequestargument (from type api.Request).
from serpens import api
@api.handler
def lambda_handler(request: api.Request):
# Code to process the lambda
print(request.body)
Request class
- The function that will process the lambda will receive an instance of sqs.Request dataclass. This class has the follow structure:
from serpens.api import AttrDict
class Request:
authorizer: AttrDict
body: Union[str, dict]
path: AttrDict
query: AttrDict
headers: AttrDict
identity: AttrDict
- Note: the objects from type
AttrDictare objects built by a dict where the dict's key is an attribute of object. For example:
from serpens.api import AttrDict
obj = AttrDict({"foo": "bar"})
obj.foo # bar
Schema
- The Schema is a base class for create new classes with follow features:
- Static type check
- Method to convert an object to dict
- Method to create an object from json
- Method to create an object from dict
- Method to dump an object to string
Create a schema
from serpens.schema import Schema
from dataclasses import dataclass
@dataclass
class PersonSchema(Schema):
name: str
age: int
Create a schema object
person = PersonSchema('Mike', 30)
print(person.name)
print(person.age)
Create a schema object from a dict.
person_obj = PersonSchema.load({'name': 'Mike', 'age': 18})
print(person_obj.name)
print(person_obj.age)
Create a schema object from a json string.
import json
data = json.dumps({'name': 'mike', 'age': 20})
person_obj = PersonSchema.loads(data)
print(person_obj.name)
print(person_obj.age)
Convert a schema object to dict.
p1 = PersonSchema('Mike', 30)
person_dct = PersonSchema.dump(p1)
print(person_dct['name'])
print(person_dct['age'])
Convert a schema object to json string.
p1 = PersonSchema('Mike', 30)
person_str = PersonSchema.dumps(p1)
print(person_str)
CSV Utils
- Utility for read and write csv. This utility is useful for read csv with BOM or read csv encoded as ISO-8859.
Read CSV
from serpens import csvutils as csv
dict_reader = csv.open_csv_reader('fruits_iso8859.csv')
for record in dict_reader:
print(record)
Write CSV
from serpens import csvutils as csv
writer = csv.open_csv_writer('out.csv')
writer.writerow(["id", "name"])
writer.writerow(["1", "Açaí"])
del writer
Database
This utilities are useful for working with database.
Migrate databases
- This migrations use yoyo-migration.
from serpens import database
database_url = "postgres://user:password@host/db"
path = "/path/to/migrations" # yoyo migrations
database.migrate(database_url, path)
Create a Pony Database instance
"The Database object manages database connections using a connection pool."
from serpens import database
database_url = "postgres://user:password@host/db"
db = database.setup(database_url)
print(db.provider_name)
DynamoDB Documents
Serpens provides a base class (called BaseDocument) for working with tables from DynamoDB.
Create a document mapping a DynamoDB table
from serpens.document import BaseDocument
from dataclasses import dataclass
@dataclass
class PersonDocument(BaseDocument):
_table_name_ = 'person'
id: str
name: str
Save data in DynamoDB table
person = PersonDocument(id="1", name="Ana")
person.save()
Get data from key
- Obs: If the search doesn't find an item by its key, the return is
None
person = PersonDocument.get_by_key({"id": "1"})
person.id # 1
person.name # Ana
Get table
person_table = PersonDocument.get_table()
person_table # dynamodb.Table(name='person')
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file noverde_serpens-2.7.2.tar.gz.
File metadata
- Download URL: noverde_serpens-2.7.2.tar.gz
- Upload date:
- Size: 33.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
984a49697b997d6547dc6e7eae0cdccbdaf82d9bce8ce04eea8ea4393b391006
|
|
| MD5 |
d816a418139388983c7d2e99cb3c7063
|
|
| BLAKE2b-256 |
4a450ee7e0a1bf5093a9d3367212e6f4843cbb3d14ec472725d26cf2b0030ce8
|
File details
Details for the file noverde_serpens-2.7.2-py3-none-any.whl.
File metadata
- Download URL: noverde_serpens-2.7.2-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d88f4b58621e03cc44ca8b33647c7274fe311ecb93ed523920f30bae5309997e
|
|
| MD5 |
6ad4f8729d7cdbaf7a1bb020ef63b10e
|
|
| BLAKE2b-256 |
99d5f22e6acdb6638ef804da70dfda3d34ddd1cab19703377709129c08e74a52
|