Skip to main content

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:

  1. Access Token Validation: Validates the access token as the primary step.
  2. 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 via AUTH_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 using uuid4().
  • 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.


Contributing

Contributions are welcome! Follow these steps:

  1. Fork the repository.
  2. Create a feature branch: git checkout -b feature-name.
  3. Commit your changes: git commit -m 'Add feature'.
  4. Push to the branch: git push origin feature-name.
  5. Open a pull request.

Publishing to PyPI

To upload the library to PyPI, follow these steps:

pip install -r requirements.dev.txt
python setup.py bdist_wheel sdist
twine check dist/*
twine upload dist/*

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zoldics_service_utils-0.1.17.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zoldics_service_utils-0.1.17-py3-none-any.whl (38.9 kB view details)

Uploaded Python 3

File details

Details for the file zoldics_service_utils-0.1.17.tar.gz.

File metadata

  • Download URL: zoldics_service_utils-0.1.17.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.11

File hashes

Hashes for zoldics_service_utils-0.1.17.tar.gz
Algorithm Hash digest
SHA256 074ccbfb28a842d5cf2986ce14e6c1c90ab948eb4752b008b0c2415ab8f3cb13
MD5 9c57164a3dfdf4aea41792f09812e00e
BLAKE2b-256 488b77b8abfc5485f9e5f3e87353dda7bed9a1e980a7ff4911d4765d1d3594e4

See more details on using hashes here.

File details

Details for the file zoldics_service_utils-0.1.17-py3-none-any.whl.

File metadata

File hashes

Hashes for zoldics_service_utils-0.1.17-py3-none-any.whl
Algorithm Hash digest
SHA256 61d0b3586daefc917eb36c3fbe5dfc2af5ad636b2fde3c683cb9cc9ef85b9bf8
MD5 292b77237d8365419e232a86c1a1ae2e
BLAKE2b-256 b0d0db19969209a55e980b88b21b02566bfa5a77674efa53f10b153389f33c74

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.17 This release

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page