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.
- 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.
pip install hario-corefrom hario_core.parse import parse
har_log = parse("example.har")
entries = har_log.model_dump()["entries"] # list of dictsfrom hario_core.transform import Pipeline, flatten, set_id, by_field
pipeline = Pipeline([
set_id(by_field(["request.url", "startedDateTime"]))
])
results = pipeline.process(entries)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)parse(path_or_bytes_or_filelike) -> HarLogvalidate(har_dict: dict) -> HarLogregister_entry_model(detector: Callable, model: Type[Entry])entry_selector(entry_dict: dict) -> Type[Entry]
Entry,HarLog,DevToolsEntry(and all standard HAR 1.2 models)
Pipeline,flatten,normalize_sizes,normalize_timings,set_id,by_field,uuid,json_array_handler
MIT License. See LICENSE.
- Python 3.10+