Skip to main content

A Python library for collecting and dumping data from an api service.

Project description

Escalite

PyPI version Python versions

A Python library for per-request logging and escalation, designed for API services.

Installation

Using pip:

pip install escalite

Using Poetry:

poetry add escalite

Configuration

Configure notifiers (e.g., email) in a dictionary format. Example:

notifier_configs = {
    "email": {
        "smtp_server": "smtp.example.com",
        "smtp_port": 587,
        "sender_email": "your@email.com",
        "sender_password": "yourpassword",
        "recipient_emails": ["admin@example.com"],
        "use_tls": True
    }
}

Usage Example with FastAPI

from fastapi import FastAPI, Request
from escalite.escalite import Escalite

app = FastAPI()
notifier_configs = {
    "email": {
        "smtp_server": "smtp.example.com",
        "smtp_port": 587,
        "sender_email": "your@email.com",
        "sender_password": "yourpassword",
        "recipient_emails": ["admin@example.com"],
        "use_tls": True
    }
}

@app.middleware("http")
async def escalite_logging_middleware(request: Request, call_next):
    with Escalite().logging_context(notifier_configs):
        Escalite.add_to_log("request_path", str(request.url.path), tag="api_logs")
        response = await call_next(request)
        Escalite.add_to_log("response_status", response.status_code, tag="api_logs")
        return response

@app.get("/")
def read_root():
    Escalite.add_service_log("root_service", "Root endpoint accessed")
    return {"Hello": "World"}

Manual Usage Example

Here is an additional usage example for showing how to use Escalite without the logging_context() context manager. This demonstrates manual configuration, starting and ending logging, and triggering escalation.

from escalite.escalite import Escalite

notifier_configs = {
    "email": {
        "smtp_server": "smtp.example.com",
        "smtp_port": 587,
        "sender_email": "your@email.com",
        "sender_password": "yourpassword",
        "recipient_emails": ["admin@example.com"],
        "use_tls": True
    }
}

# Set up notifiers from configs
Escalite.set_notifiers_from_configs(notifier_configs)

# Start logging for a request or operation
Escalite.start_logging()

# Add logs as needed
Escalite.add_to_log("event", "User login", tag="api_logs")
Escalite.add_service_log("auth_service", "User authenticated", level="info")

# End logging and collect logs
logs = Escalite.end_logging()
print("Collected logs:", logs)

# Trigger escalation (e.g., send notifications)
Escalite.escalate()

This example shows explicit control over the logging lifecycle and escalation, suitable for use outside of context managers or in custom workflows.

Notifiers

Here are some notifier configuration examples that are currently supported. Replace the configuration values with your actual credentials or endpoints.

Telegram Notifier

from escalite.escalite import Escalite

notifier_configs = {
    "telegram": {
        "bot_token": "your-telegram-bot-token",
        "chat_id": "your-chat-id"
    }
}

Escalite.set_notifiers_from_configs(notifier_configs)
Escalite.start_logging()
Escalite.add_to_log("event", "Telegram notifier test", tag="api_logs")
Escalite.end_logging()
Escalite.escalate()

WhatsApp Notifier

from escalite.escalite import Escalite

notifier_configs = {
    "whatsapp": {
        "api_url": "https://your-whatsapp-api-endpoint.com/send",
        "access_token": "your-access-token",
        "phone_number": "recipient-phone-number"
    }
}

Escalite.set_notifiers_from_configs(notifier_configs)
Escalite.start_logging()
Escalite.add_to_log("event", "WhatsApp notifier test", tag="api_logs")
Escalite.end_logging()
Escalite.escalate()

Slack Notifier

from escalite.escalite import Escalite

notifier_configs = {
    "slack": {
        "webhook_url": "https://hooks.slack.com/services/your/webhook/url"
    }
}

Escalite.set_notifiers_from_configs(notifier_configs)
Escalite.start_logging()
Escalite.add_to_log("event", "Slack notifier test", tag="api_logs")
Escalite.end_logging()
Escalite.escalate()

Email Notifier

from escalite.escalite import Escalite

notifier_configs = {
    "email": {
        "smtp_server": "smtp.example.com",
        "smtp_port": 587,
        "sender_email": "your@email.com",
        "sender_password": "yourpassword",
        "recipient_emails": ["admin@example.com"],
        "use_tls": True
    }
}

Escalite.set_notifiers_from_configs(notifier_configs)
Escalite.start_logging()
Escalite.add_to_log("event", "Email notifier test", tag="api_logs")
Escalite.end_logging()
Escalite.escalate()

Features

  • Per-request logging using contextvars
  • Pluggable notifiers (email, etc.)
  • Easy integration with FastAPI and other frameworks

License

MIT


Project details


Download files

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

Source Distribution

escalite-0.1.2.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

escalite-0.1.2-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file escalite-0.1.2.tar.gz.

File metadata

  • Download URL: escalite-0.1.2.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.2 Darwin/24.3.0

File hashes

Hashes for escalite-0.1.2.tar.gz
Algorithm Hash digest
SHA256 61480b5ce047b8a18be9609f72f007cadd4f81b62b362a0e586a23fb1f39d853
MD5 6ba766f1d7b67bceb34e69371897fd12
BLAKE2b-256 984b04d3cac8dacf91b29a5a5ed6166ce2da1e7e327d93d3d2c2742b2f72ecf9

See more details on using hashes here.

File details

Details for the file escalite-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: escalite-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.2 Darwin/24.3.0

File hashes

Hashes for escalite-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 54148c08f6be8d428d7819590a7e07ea6e5a2b474e11ef1805081f21693948e9
MD5 6ab248018fc384ceb46720aefa5fc87f
BLAKE2b-256 cb92b4025101f3bc764c2250684d1d7b6a6926d4526cf2c0897c0df0cb9cf743

See more details on using hashes here.

Supported by

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