Skip to content

Type-safe Python HAR model: Pydantic-powered parsing, validation, normalization, and transformation—readying HTTP Archive data for analytics and easy extension.

License

Notifications You must be signed in to change notification settings

pikulev/hario-core

Repository files navigation

Hario Core — Type-safe HAR Model & Transform

PyPI version Build Status Code style: black codecov Ask DeepWiki

A modern, extensible, and type-safe Python library for parsing, transforming, and analyzing HAR (HTTP Archive) files. Built on Pydantic, Hario-Core provides robust validation, flexible transformation, and easy extension for custom HAR formats.

Features

  • Type-Safe Parsing: Validates HAR files using Pydantic models, catching errors early.
  • Transformers: Apply built-in or custom transformations to each HAR entry (e.g., flatten, normalizations).
  • Normalization: Ensures all numeric fields (sizes, timings) are non-negative, so you can safely sum, aggregate, and analyze data without errors from negative values. This is crucial for analytics and reporting.
  • Deterministic & Random IDs: Generate unique or deterministic IDs for each entry. Deterministic IDs ensure that the same request always gets the same ID—useful for deduplication, comparison, and building analytics pipelines.
  • Extensible: Register your own entry models to support browser-specific or proprietary HAR extensions (e.g., Chrome DevTools, Safari).
  • Composable Pipelines: Chain any number of transformers and ID strategies for flexible data processing.

Installation

pip install hario-core

Quickstart

1. Parse and validate a HAR file

from hario_core.parse import parse

har_log = parse("example.har")
entries = har_log.model_dump()["entries"]  # list of dicts

2. Transform entries with a pipeline

from hario_core.transform import Pipeline, flatten, set_id, by_field

pipeline = Pipeline([
    set_id(by_field(["request.url", "startedDateTime"]))
])
results = pipeline.process(entries)

3. Custom entry models (extensions)

from hario_core.parse import register_entry_model
from hario_core.models import Entry

def is_custom_entry(entry: dict) -> bool:
    return "x-custom" in entry

class CustomEntry(Entry):
    x_custom: str

register_entry_model(is_custom_entry, CustomEntry)

Public API

Parsing and validation

  • parse(path_or_bytes_or_filelike) -> HarLog
  • validate(har_dict: dict) -> HarLog
  • register_entry_model(detector: Callable, model: Type[Entry])
  • entry_selector(entry_dict: dict) -> Type[Entry]

Models

  • Entry, HarLog, DevToolsEntry (and all standard HAR 1.2 models)

Transform

  • Pipeline, flatten, normalize_sizes, normalize_timings, set_id, by_field, uuid, json_array_handler

Documentation

License

MIT License. See LICENSE.

Supported Python Versions

  • Python 3.10+

About

Type-safe Python HAR model: Pydantic-powered parsing, validation, normalization, and transformation—readying HTTP Archive data for analytics and easy extension.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages