Skip to main content

Tropir Session Utilities

This utility helps manage session IDs for tracking requests and automatically injects relevant headers into your HTTP requests.

Installation

Install package using pip:

pip install tropir

Purpose

When making requests to backend services (like LLM APIs or tracking endpoints), it's often useful to include:

  1. A Session ID (X-Session-ID): To group related requests within a single user interaction or process run.
  2. An API Key (X-TROPIR-API-KEY): To authenticate requests with a specific service (like a Tropir backend).

This utility provides a simple way to manage session IDs and automatically add these headers to your request dictionaries.

Basic Usage: Automatic Header Injection

The primary way to use this utility is via the prepare_request_headers function. It takes your existing headers dictionary for an HTTP request and modifies it in place.

import requests
import os
from tropir.session_utils import prepare_request_headers

# Set the Tropir API key in your environment variables (optional)
# export TROPIR_API_KEY='your_api_key_here'

# Example API call
api_url = "https://example.com/api/resource"
payload = {"data": "some_value"}

# Initial headers (e.g., for authentication or content type)
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer some_other_token"
}

# Prepare the headers: This adds X-Session-ID and potentially X-TROPIR-API-KEY
prepare_request_headers(headers)

# Now the 'headers' dictionary contains the added keys:
# {
#     "Content-Type": "application/json",
#     "Authorization": "Bearer some_other_token",
#     "X-Session-ID": "<generated_or_thread_local_uuid>",
#     "X-TROPIR-API-KEY": "your_api_key_here" # (If env var was set)
# }

print(f"Sending request with headers: {headers}")

response = requests.post(api_url, headers=headers, json=payload)

# Handle response...
print(response.status_code)

How it works:

  • X-Session-ID:
    • It first checks if a session ID has been explicitly set for the current thread using set_session_id() (see Advanced Usage).
    • If no thread-specific ID is found, it falls back to a default UUID generated once when the process started. This ensures all requests within the same process run (that don't have overrides) share the same default session ID.
  • X-TROPIR-API-KEY:
    • It checks for the environment variable TROPIR_API_KEY.
    • If the environment variable is set, its value is added to the headers.
    • If not set, the header is simply omitted.

Advanced Usage: Manual Session ID Control

While prepare_request_headers is sufficient for most use cases, you can manually control the session ID on a per-thread basis if needed:

from tropir.session_utils import get_session_id, set_session_id, clear_session_id
import threading

def worker_task(custom_id):
    print(f"[{threading.current_thread().name}] Default Session ID: {get_session_id()}")

    # Set a custom session ID for this thread
    set_session_id(custom_id)
    print(f"[{threading.current_thread().name}] Thread-specific Session ID: {get_session_id()}")

    # ... make requests using prepare_request_headers ...
    # Headers will now use 'custom_id' for X-Session-ID

    # Clear the thread-specific ID, falling back to the default
    clear_session_id()
    print(f"[{threading.current_thread().name}] Session ID after clear: {get_session_id()}")

# Create and run threads with custom IDs
thread1 = threading.Thread(target=worker_task, args=("session-abc",), name="Worker-1")
thread2 = threading.Thread(target=worker_task, args=("session-xyz",), name="Worker-2")

thread1.start()
thread2.start()

thread1.join()
thread2.join()

print(f"[Main Thread] Session ID: {get_session_id()}") # Will show the process default ID
  • set_session_id(your_id): Overrides the session ID for the current thread.
  • get_session_id(): Retrieves the current effective session ID (thread-local or process default).
  • clear_session_id(): Removes the thread-local override, causing get_session_id() to return the process default again for this thread.

Metadata

Release files for tropir 2.4

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

Source distribution (sdist)

Source distribution for tropir 2.4
File Size Uploaded
tropir-2.4.tar.gz 33.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tropir 2.4
File Interpreter ABI Platform
tropir-2.4-py3-none-any.whl Python 3 none any Details

Total release size: 67.2 kB

Release files / tropir-2.4.tar.gz

Download URL tropir-2.4.tar.gz
Size 33.6 kB
Tags Source
SHA-256 checksum
How to use checksums
002d4ff499a9a487223611cdebb4063b7f24552c2da3091acde19364721b68d6
BLAKE2b-256 checksum
How to use checksums
43d1bdaf38be3f788e30b7e6fb60da8a8c1a6b25ed9e5771d84f08c0597f2913
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.5

Release files / tropir-2.4-py3-none-any.whl

Download URL tropir-2.4-py3-none-any.whl
Size 33.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2b5d3fc9ba6b7a99442faa498428695802b4a03273260bf4282c0c1528559d33
BLAKE2b-256 checksum
How to use checksums
977e9c051a97f63beff7940d6be9a1ec3bcf1329379fdeb11f9deae82889d259
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

2.4 This release

2 release files

2.3

2 release files

2.2.4

2 release files

2.2.3

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.16

2 release files

2.1.15

2 release files

2.1.14

2 release files

2.1.13

2 release files

2.1.12

2 release files

2.1.11

2 release files

2.1.10

2 release files

2.1.9

2 release files

2.1.8

2 release files

2.1.7

2 release files

2.1.6

2 release files

2.1.5

2 release files

2.1.4

2 release files

2.1.3

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.9

2 release files

2.0.8

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.4.8

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.9

2 release files

1.3.8

2 release files

1.3.7

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.9

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

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.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

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