A most utile package for the governance of pythonic micro-services
Project description
PythonServiceUtil
PythonServiceUtil is a utility library designed to streamline Python-based microservice development. It offers robust support for:
- REST Inter-service Calls: Simplifies HTTP communication between services.
- AWS SQS Integration: Enhances message queue operations.
- Redis Support: Provides efficient caching and data storage.
- MongoDB Integration: Simplifies database interactions, including transactions (mongoengine object data mapper).
- Context Management: Facilitates seamless context management in multithreaded and multiprocessing environments.
Features
Validation Workflow
The validation process is structured as follows:
- Access Token Validation: Validates the access token as the primary step.
- Fallback to X-API-KEY Validation: If the access token validation fails, X-API-KEY validation is used as a fallback.
Note: The JWKS (JSON Web Key Set) must follow the format
List[Jwk_TH]. Specify the symmetric or asymmetric algorithm to use viaAUTH_TOKEN_ALGORITHM.
class Jwk_TH(TypedDict, total=False):
alg: Required[str]
e: str
kid: Required[str]
kty: str
n: str
use: str
def __load_jwks() -> List[Jwk_TH]:
return json.loads(str(config("JWKS")))
Configuration
Configure the library using an .env file with the following keys:
ENVIRONMENT=develop
LOGGING_FILENAME=service.log
AUTH_TOKEN_ALGORITHM=RS256
BEDROCK_AWS_REGION_NAME=region_name
AWS_REGION_NAME=region_name
AWS_ACCESS_KEY=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_access_key
X_API_KEY_EMBEDDING_SERVICE_1=access_key
X_API_KEY_EMBEDDING_SERVICE_2=access_key
JWKS=JWKS
Usage
Headers Validation Model
The headers validation model supports both inter-service calls and client-to-backend communication. It first checks cookie validation and then falls back to header-based authorization.
import uuid
from pydantic import BaseModel, Field
from typing import Any, Dict
class Headers_PM(BaseModel):
correlationid: str = Field(default_factory=lambda: str(uuid.uuid4()))
username: str = "not_applicable"
authorization: str = Field(default="")
def model_dump(self, exclude_fields={}, **kwargs) -> Dict[str, Any]:
return super().model_dump(**kwargs, exclude=exclude_fields)
Setting Up REST Middlewares
Here is an example of setting up REST middlewares in a FastAPI app:
app.add_middleware(
HeaderValidationMiddleware,
x_api_key_1=cast(str, config("X_API_KEY_EMBEDDING_SERVICE_1")),
x_api_key_2=cast(str, config("X_API_KEY_EMBEDDING_SERVICE_2")),
authexpiryignore_paths=frozenset([
ServicePaths.CONTEXT_PATH.value + "/encoders",
ServicePaths.CONTEXT_PATH.value + "/llm",
]),
)
app.add_middleware(ExceptionMiddleware)
Key Fields in Headers_PM
correlationid: A unique identifier for tracing requests, generated usinguuid4().username: The username associated with the request; defaults to"not_applicable".authorization: The authorization token, defaulting to an empty string.
License
This project is licensed under the MIT License. See the LICENSE file for details.
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 unextpythonserviceutils-0.0.5.tar.gz.
File metadata
- Download URL: unextpythonserviceutils-0.0.5.tar.gz
- Upload date:
- Size: 22.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
267a3c5b7cb37a20bae2ce20b14216a6572e8fb1da60e8e0d22193f94d0001f8
|
|
| MD5 |
2573712ebec59aa38c6bd548adec1e18
|
|
| BLAKE2b-256 |
620d57642195e65ce35c5db2fd0bbb92b7d1e1a072de7815e885b934ed5988ad
|
File details
Details for the file UnextPythonServiceUtils-0.0.5-py3-none-any.whl.
File metadata
- Download URL: UnextPythonServiceUtils-0.0.5-py3-none-any.whl
- Upload date:
- Size: 33.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0388b9cf06d465b7d58890da9c455d2b13e6ae89e50113cb930f3bd64d831c4
|
|
| MD5 |
4675ba0e48de72e9f3a7999d706eb5de
|
|
| BLAKE2b-256 |
221223ba2a87c5d1f662eb4c7c91b43b4f2ece6aa90d89b27d1c09c57f0151b2
|