Skip to main content

ash-utils

Python library containing common utilities used across various ASH projects.

Features

  1. CatchUnexpectedExceptionsMiddleware - Global exception handler for unexpected errors
  2. RequestIDMiddleware - Request ID tracking for improved logging and tracing
  3. BaseApi - Base HTTP client with built-in error handling and request ID propagation
  4. configure_security_headers - Function provides a pre-configured security header setup for FastAPI applications following security best practices.

Installation

PyPi

pip install ashwelness-utils

# OR

poetry add ashwelness-utils

From github

In order to install Ash DAL directly from GitHub repository, run:

pip install git+https://github.com/meetash/ash-utils.git@main

# OR

poetry add git+https://github.com/meetash/ash-utils.git@main

Usage

  1. CatchUnexpectedExceptionsMiddleware

Purpose: Catch all unexpected exceptions and return a standardized error response.

from fastapi import FastAPI
from ash_utils.middlewares import CatchUnexpectedExceptionsMiddleware

app = FastAPI()

# Add middleware with custom error message
app.add_middleware(
    CatchUnexpectedExceptionsMiddleware,
    response_error_message="Internal server error",
    response_status_code=500
)

@app.get("/")
async def root():
    # This exception will be caught by the middleware
    raise ValueError("Something went wrong")
  1. RequestIDMiddleware

Purpose: Add request ID tracking to headers and logs for better request correlation.

from fastapi import FastAPI
from ash_utils.middlewares import RequestIDMiddleware

app = FastAPI()

# Add middleware with default header name (X-Request-ID)
app.add_middleware(RequestIDMiddleware)

@app.get("/")
async def root():
    return {"message": "Hello World"}

Example Request/Response:

GET / HTTP/1.1
Host: localhost:8000
X-Request-ID: 123e4567-e89b-12d3-a456-426614174000

HTTP/1.1 200 OK
X-Request-ID: 123e4567-e89b-12d3-a456-426614174000
  1. BaseApi (HTTP Client)

Purpose: Make HTTP requests with automatic error handling and request ID propagation.

from http import HTTPMethod
from urllib.parse import urljoin

from ash_utils.apis.base_api import BaseApi
from httpx import AsyncClient
from py_cachify import cached

import constants
from domain.entities.common import PartnerConfigEntity


class ClientManagementServiceApi(BaseApi):
    PARTNER_PATH = "/api/v1/partners/{partner_id}"

    def __init__(self, url: str, api_key: str, client: AsyncClient):
        self.token = api_key
        self.base_url = url
        self.headers = {"x-api-key": api_key}
        super().__init__(client=client)

    @cached(key=constants.PARTNER_CONFIG_CACHE_KEY, ttl=constants.PARTNER_CONFIG_CACHE_TTL)
    async def get_partner_config(self, partner_id: str) -> PartnerConfigEntity:
        url = urljoin(self.base_url, self.PARTNER_PATH.format(partner_id=partner_id))

        response = await self._send_request(
            method=HTTPMethod.GET,
            url=url,
            headers=self.headers,
        )

        response_data = response.json()

        return PartnerConfigEntity(**response_data)
  1. Security Headers Configuration

Purpose: This function provides a pre-configured security header setup for FastAPI applications following security best practices.

from fastapi import FastAPI
from ash_utils.middlewares import configure_security_headers

app = FastAPI()
configure_security_headers(app)

@app.get("/")
async def root():
    return {"message": "Hello Secure World!"}

The configure_security_headers function adds these security middlewares with safe defaults:

  • Content Security Policy (CSP)
  • X-Content-Type-Options
  • Referrer-Policy
  • X-Frame-Options
  • HTTP Strict Transport Security (HSTS)
  • Permissions-Policy

Configuration

Middleware Configuration Options:

  • CatchUnexpectedExceptionsMiddleware
    • response_error_message: Error message to return to clients
    • response_status_code: HTTP status code to return (default: 500)
  • RequestIDMiddleware
    • header_name: Custom header name for request ID (default: X-Request-ID)
  • BaseApi Configuration
    • request_id_header_name: Header name for request ID propagation (default: X-Request-ID)

Error Handling

The BaseApi class provides two custom exceptions:

  • ThirdPartyRequestError: For network-level errors
  • ThirdPartyHttpStatusError: For HTTP 4xx/5xx responses

Best Practices

  • Add CatchUnexpectedExceptionsMiddleware first in the middleware chain
  • Configure a meaningful error message for production environments
  • Use the BaseApi for all external API calls to ensure consistent error handling

Metadata

Release files for ashwelness-utils 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ashwelness-utils 0.1.3
File Size Uploaded
ashwelness_utils-0.1.3.tar.gz 27.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ashwelness-utils 0.1.3
File Interpreter ABI Platform
ashwelness_utils-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 35.1 kB

Release files / ashwelness_utils-0.1.3.tar.gz

Download URL ashwelness_utils-0.1.3.tar.gz
Size 27.0 kB
Tags Source
SHA-256 checksum
How to use checksums
919fca5deb054d5dacd60dab7febbc1513328d1e077240f2cee9f8aa8a39d526
BLAKE2b-256 checksum
How to use checksums
475077fb6b4047aadadfea9f2fe90f0b5e0cbef366693052e47044c986a97f8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.12

Release files / ashwelness_utils-0.1.3-py3-none-any.whl

Download URL ashwelness_utils-0.1.3-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1fbcd92a7d31a33d84de217ce653d6c28623a885210eb66a5047a729bc7149ca
BLAKE2b-256 checksum
How to use checksums
9f882a13e104fb9d08b7cd137f21ee184095ec3179a2d36185e111258fe5f2ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.12

Release history Release notifications | RSS feed

1.0.1

2 release files

1.0.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.1.5

2 release files

0.1.4

2 release files

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page