Skip to main content

Python FFI to y-scope/log-surgeon.

Project description

log-surgeon-ffi

Python FFI bindings for log-surgeon, a high-performance library for parsing unstructured log messages into structured data.

Overview

log-surgeon-ffi provides a Pythonic interface to the log-surgeon C++ library, enabling efficient extraction of structured information from unstructured log files. It uses schema-based pattern matching to:

  • Extract variables from log messages using regex patterns with named capture groups
  • Generate log types (templates) automatically for log analysis
  • Parse streams efficiently for large-scale log processing
  • Export data to pandas DataFrames and PyArrow Tables

Installation

pip install log-surgeon-ffi

For optional DataFrame/Arrow support:

pip install log-surgeon-ffi[dataframe]

Quick Start

Basic Parsing

import io
from log_surgeon import Parser

# Create a parser and define extraction patterns
parser = Parser()
parser.add_var(
  "memoryStore",
  r"MemoryStore started with capacity (?<memory_store_capacity_GiB>\d+\.\d+) GiB"
)
parser.compile()

# Parse a log event
log_line = " INFO [main] MemoryStore: MemoryStore started with capacity 7.0 GiB\n"
event = parser.parse_event(log_line)

# Access extracted data
print(f"Message: {event.get_log_message()}")
print(f"LogType: {event.get_log_type()}")
print(f"Capacity: {event['memory_store_capacity_GiB']}")

Multiple Capture Groups

parser = Parser()

# Extract platform information (level, thread, component)
parser.add_var(
  "platform",
  r"(?<platform_level>(INFO)|(WARN)|(ERROR)) \[(?<platform_thread>.+)\] (?<platform_component>.+):"
)

# Extract application-specific metrics
parser.add_var(
  "memoryStore",
  r"MemoryStore started with capacity (?<memory_store_capacity_GiB>\d+\.\d+) GiB"
)

parser.compile()

event = parser.parse_event(" INFO [main] MemoryStore: MemoryStore started with capacity 7.0 GiB\n")

print(f"Level: {event['platform_level']}")
print(f"Thread: {event['platform_thread']}")
print(f"Component: {event['platform_component']}")
print(f"Capacity: {event['memory_store_capacity_GiB']}")

Stream Parsing

from log_surgeon import Parser

parser = Parser()
parser.add_var("metric", r"value=(?<value>\d+)")
parser.compile()

# Parse from string (automatically wrapped in StringIO)
log_data = """
2024-01-01 INFO: Processing metric value=42
2024-01-01 INFO: Processing metric value=100
2024-01-01 INFO: Processing metric value=7
"""

for event in parser.parse(log_data):
  print(f"Value: {event['value']}")

# Or parse from file object directly
with open("logs.txt", "r") as f:
  for event in parser.parse(f):
    print(f"Value: {event['value']}")

Using Pattern Constants

from log_surgeon import Parser, Pattern

parser = Parser()
parser.add_var("network", rf"IP: (?<ip>{Pattern.IPV4}) UUID: (?<id>{Pattern.UUID})")
parser.add_var("metrics", rf"value=(?<value>{Pattern.FLOAT})")
parser.compile()

log_line = "IP: 192.168.1.1 UUID: 550e8400-e29b-41d4-a716-446655440000 value=42.5"
event = parser.parse_event(log_line)

print(f"IP: {event['ip']}")
print(f"UUID: {event['id']}")
print(f"Value: {event['value']}")

Export to DataFrame

from log_surgeon import Parser, Query

parser = Parser()
parser.add_var(
  "metric",
  r"metric=(?<metric_name>\w+) value=(?<value>\d+)"
)
parser.compile()

log_data = """
2024-01-01 INFO: metric=cpu value=42
2024-01-01 INFO: metric=memory value=100
2024-01-01 INFO: metric=disk value=7
"""

# Create a query and export to DataFrame
query = (
  Query(parser)
  .select(["metric_name", "value"])
  .from_(log_data)
  .validate_query()
)

df = query.to_dataframe()
print(df)

Filtering Events

from log_surgeon import Parser, Query

parser = Parser()
parser.add_var("metric", r"metric=(?<metric_name>\w+) value=(?<value>\d+)")
parser.compile()

log_data = """
2024-01-01 INFO: metric=cpu value=42
2024-01-01 INFO: metric=memory value=100
2024-01-01 INFO: metric=disk value=7
2024-01-01 INFO: metric=cpu value=85
"""

# Filter events where value > 50
query = (
  Query(parser)
  .select(["metric_name", "value"])
  .from_(log_data)
  .filter(lambda event: int(event['value']) > 50)
  .validate_query()
)

df = query.to_dataframe()
print(df)
# Output:
#   metric_name  value
# 0      memory    100
# 1         cpu     85

API Reference

Parser

High-level parser for extracting structured data from unstructured log messages.

Constructor

  • Parser(delimiters: str = r" \t\r\n:,!;%@/\(\)\[\]")
    • Initialize a parser with optional custom delimiters
    • Default delimiters include space, tab, newline, and common punctuation

Methods

  • add_var(name: str, regex: str, hide_var_name_if_named_group_present: bool = True) -> Parser

    • Add a variable pattern to the parser's schema
    • Supports named capture groups using (?<name>) syntax
    • Returns self for method chaining
  • add_timestamp(name: str, regex: str) -> Parser

    • Add a timestamp pattern to the parser's schema
    • Returns self for method chaining
  • compile(enable_debug_logs: bool = False) -> None

    • Build and initialize the parser with the configured schema
    • Must be called after adding variables and before parsing
    • Set enable_debug_logs=True to output debug information to stderr
  • load_schema(schema: str, group_name_resolver: GroupNameResolver) -> None

    • Load a pre-built schema string to configure the parser
  • parse(input: str | TextIO | BinaryIO | io.StringIO | io.BytesIO) -> Generator[LogEvent, None, None]

    • Parse all log events from a string, file object, or stream
    • Accepts strings, text/binary file objects, StringIO, or BytesIO
    • Yields LogEvent objects for each parsed event
  • parse_event(payload: str) -> LogEvent | None

    • Parse a single log event from a string (convenience method)
    • Wraps parse() and returns the first event
    • Returns LogEvent or None if no event found

LogEvent

Represents a parsed log event with extracted variables.

Methods

  • get_log_message() -> str

    • Get the original log message
  • get_log_type() -> str

    • Get the generated log type (template) with logical group names
  • get_capture_group(logical_capture_group_name: str, raw_output: bool = False) -> str | list | None

    • Get the value of a capture group by its logical name
    • If raw_output=False (default), single values are unwrapped from lists
    • Returns None if capture group not found
  • get_capture_group_str_representation(field: str, raw_output: bool = False) -> str

    • Get the string representation of a capture group value
  • get_resolved_dict() -> dict[str, str | list]

    • Get a dictionary with all capture groups using logical (user-defined) names
    • Physical names (CGPrefix*) are converted to logical names
    • Timestamp fields are consolidated under "timestamp" key
    • Single-value lists are unwrapped to scalar values
    • "@LogType" is excluded from the output
  • __getitem__(key: str) -> str | list

    • Access capture group values by name (e.g., event['field_name'])
    • Shorthand for get_capture_group(key, raw_output=False)
  • __str__() -> str

    • Get formatted JSON representation of the log event with logical group names
    • Uses get_resolved_dict() internally

Query

Query builder for parsing log events into structured data formats.

Constructor

  • Query(parser: Parser)
    • Initialize a query with a configured parser

Methods

  • select(fields: list[str]) -> Query

    • Select fields to extract (use ["*"] for all fields)
    • Returns self for method chaining
  • filter(predicate: Callable[[LogEvent], bool]) -> Query

    • Filter log events using a predicate function
    • Predicate receives a LogEvent and returns True to include it, False to exclude
    • Returns self for method chaining
    • Example: query.filter(lambda event: int(event['value']) > 50)
  • from_(input: str | TextIO | BinaryIO | io.StringIO | io.BytesIO) -> Query

    • Set the input source to parse
    • Accepts strings, text/binary file objects, StringIO, or BytesIO
    • Strings are automatically wrapped in StringIO
    • Returns self for method chaining
  • select_from(input: str | TextIO | BinaryIO | io.StringIO | io.BytesIO) -> Query

    • Alias for from_()
    • Returns self for method chaining
  • from_stream(stream: io.StringIO | io.BytesIO) -> Query

    • Set the input stream to parse (legacy method)
    • Consider using from_() for more flexible input handling
    • Returns self for method chaining
  • validate_query() -> Query

    • Validate that the query is properly configured
    • Returns self for method chaining
  • to_dataframe(drop_null_rows: bool = True) -> pd.DataFrame

    • Convert parsed events to a pandas DataFrame
    • Requires pandas (install with pip install log-surgeon-ffi[dataframe])
  • to_df(drop_null_rows: bool = True) -> pd.DataFrame

    • Alias for to_dataframe()
  • to_arrow(drop_null_rows: bool = True) -> pa.Table

    • Convert parsed events to a PyArrow Table
    • Requires pyarrow (install with pip install log-surgeon-ffi[dataframe])
  • to_pa(drop_null_rows: bool = True) -> pa.Table

    • Alias for to_arrow()
  • get_rows(drop_null_rows: bool = True) -> list[list]

    • Extract rows of field values from parsed events

SchemaCompiler

Compiler for constructing log-surgeon schema definitions.

Constructor

  • SchemaCompiler(delimiters: str = DEFAULT_DELIMITERS)
    • Initialize a schema compiler with optional custom delimiters

Methods

  • add_var(name: str, regex: str, hide_var_name_if_named_group_present: bool = True) -> SchemaCompiler

    • Add a variable pattern to the schema
    • Returns self for method chaining
  • add_timestamp(name: str, regex: str) -> SchemaCompiler

    • Add a timestamp pattern to the schema
    • Returns self for method chaining
  • remove_var(var_name: str) -> SchemaCompiler

    • Remove a variable from the schema
    • Returns self for method chaining
  • get_var(var_name: str) -> Variable

    • Get a variable by name
  • compile() -> str

    • Compile the final schema string
  • get_capture_group_name_resolver() -> GroupNameResolver

    • Get the resolver for mapping logical to physical capture group names

GroupNameResolver

Bidirectional mapping between logical (user-defined) and physical (auto-generated) group names.

Constructor

  • GroupNameResolver(physical_name_prefix: str)
    • Initialize with a prefix for auto-generated physical names

Methods

  • create_new_physical_name(logical_name: str) -> str

    • Create a new unique physical name for a logical name
    • Each call generates a new physical name
  • get_physical_names(logical_name: str) -> set[str]

    • Get all physical names associated with a logical name
  • get_logical_name(physical_name: str) -> str

    • Get the logical name for a physical name

Pattern

Collection of common regex patterns for log parsing.

Class Attributes

  • Pattern.UUID

    • Pattern for UUID (Universally Unique Identifier) strings
  • Pattern.IP_OCTET

    • Pattern for a single IPv4 octet (0-255)
  • Pattern.IPV4

    • Pattern for IPv4 addresses
  • Pattern.INT

    • Pattern for integer numbers (with optional negative sign)
  • Pattern.FLOAT

    • Pattern for floating-point numbers (with optional negative sign)

Example Usage

from log_surgeon import Parser, Pattern

parser = Parser()
parser.add_var("ip", rf"IP: (?<ip_address>{Pattern.IPV4})")
parser.add_var("id", rf"ID: (?<uuid>{Pattern.UUID})")
parser.add_var("value", rf"value=(?<val>{Pattern.FLOAT})")
parser.compile()

Key Concepts

Delimiters

Delimiters are characters used to split log messages into tokens. The default delimiters include:

  • Whitespace: space, tab (\t), newline (\n), carriage return (\r)
  • Punctuation: :, ,, !, ;, %, @, /, (, ), [, ]

You can customize delimiters when creating a Parser:

parser = Parser(delimiters=r" \t\n,:")  # Custom delimiters

Named Capture Groups

Use named capture groups in regex patterns to extract specific fields:

parser.add_var("metric", r"metric=(?<metric_name>\w+) value=(?<value>\d+)")

The syntax (?<name>pattern) creates a capture group that can be accessed as event['name'].

Logical vs Physical Names

Internally, log-surgeon uses "physical" names (e.g., CGPrefix0, CGPrefix1) for capture groups, while you work with "logical" names (e.g., user_id, thread). The GroupNameResolver handles this mapping automatically.

Schema Format

The schema defines delimiters, timestamps, and variables for parsing:

// schema delimiters
delimiters: \t\r\n:,!;%@/\(\)\[\]

// schema timestamps
timestamp:<timestamp_regex>

// schema variables
variable_name:<variable_regex>

When using the fluent API (Parser.add_var() and Parser.compile()), the schema is built automatically.

Development

Building from Source

# Clone the repository
git clone https://github.com/y-scope/log-surgeon-ffi-py.git
cd log-surgeon-ffi-py

# Install development dependencies
pip install -e ".[dev]"

# Build the extension
cmake -S . -B build
cmake --build build

Running Tests

python -m pytest tests/

Requirements

  • Python >= 3.9
  • C++20 compatible compiler

License

Apache License 2.0 - See LICENSE for details.

Links

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_i686.whl (1.4 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (338.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (354.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (326.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_i686.whl (1.4 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (338.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (354.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (326.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_i686.whl (1.4 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (338.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (354.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (326.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_i686.whl (1.4 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (338.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (354.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (326.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_i686.whl (1.4 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ i686

log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (338.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (354.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (326.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6286d8131b279c16fa3e4c8fc342dc16337e86bc0e1eb8a1fd9b83446f9039eb
MD5 199aac43c6bd1b6bf8620d31d6728fca
BLAKE2b-256 dd0c486df07f3aa0bcd3a9da6996a6069dc364859f7a07d42703e6e25667267f

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 cc5736d2db8e1a378309ae293fe2a94470ea1487b84df7f415ef68ead8d1da7a
MD5 d605c91f3776d401c6d85a8baa97ecc8
BLAKE2b-256 9ac8adf56ad7ebb3f680de31ae3f2cbcaba19a6cbe4645d72ed4bdc20e638384

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 efd9c662283420252d8fad870605949fdd1955641c8d73aaf9aa395372f445f1
MD5 c3ebf3c48decf553abe9e46512c0f728
BLAKE2b-256 3ae3f5e23977b38112987e70612170d5f1b3a3cd98338636d6ae024cb00dc484

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2b29883b70d46e6ee42bd9a228132cd86294cb8b160218995851191a6bf08f44
MD5 f4eeee8f5c38319feeeb54b75e330c70
BLAKE2b-256 d87f9ff6cbd1480f54ae036f9da5cf0a9587df68c1244e120a2912e4cc848b21

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 630e250a08f4d0e2d98754b38be1cc713b63b230313aee02534a563d6c6c70dc
MD5 36c4467c81ee19af588784beb83b697c
BLAKE2b-256 141694e37d2c2b8f34cc5e0c18ad2ae9966f30597c2ec4a2fc5919425ba2070a

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 476f1d3c8795c4e95e1416250f35b9f71ef1fecded8a82c7c5040c3814d4db6f
MD5 56c5bfd1217c47d546852300abec7dd5
BLAKE2b-256 e17885934a4c93472f55f109da2d35e1ad55ee91fb2542e61bc7f4cdbccfedd9

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0ab9a5bd8229bb5f9ac8c9882234a4c2b7aa7279c1f50ad66a1748777e65ef25
MD5 09b12a981775c1329bd5c7b96676dc83
BLAKE2b-256 b7218a495f2454678436f9e3f09e1f12d97b6f194e441d1630df0f898213637d

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 7b94c2aae80cebf7af028258f6b73ed002604deb20d82548fd53a5a05ab3a8c5
MD5 78bf9441d98e1512e7dee2f8d485dbd6
BLAKE2b-256 01efa2f656c3942a3247a657e2dc3dbe655a8b228c82073d3de773e78d6d9560

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4b186e11b1e2f3aad12d2cf7d3ba2e6d2368bd7913ce240339159ce6bb1407ce
MD5 17f08ee6a5f9d04c5f258e01b54249cd
BLAKE2b-256 33298c0f70638ebe41d322696909bdf067ec87b6962bd4217032d1783161cfd2

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b2ba6ad321fce6c312d31ecd8e558b61e68b6e50a1af56a0ce81ca29e6d109c3
MD5 beafbf4e9b8bfc8a107c930c96825f1d
BLAKE2b-256 4f29f5230ea3935b8f0a6b19dc88de218a6e412761acdd1a3332652c4103d456

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 179fab2e15af9c79465e321989bce19919d1de36bedf1adfc82823701d2cd759
MD5 8d3e82ff2db9107302aea00ee419a5dd
BLAKE2b-256 9f04b7d1513325a4e450efd79118e50a1fe75a5868d8e384d654c5a354a45962

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5100599087f657fe81417f2191a0a802315873574e57391793b7ec173eafbe84
MD5 3067fa42e9e1156bb6de726a27a12646
BLAKE2b-256 8bb5b60b5ff10b4d83d712ff1cdfe5b86e822b4371e6a696730fe4110be13268

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2444251a15e83df7332058cd758b6eb2e9eaf9a4177fd32d7175e3b81ff732a2
MD5 e10f042bee3d06ecf27dc083d00ae722
BLAKE2b-256 5f23273a1d74e3295062e7aa64611dc038a5f857983d78075a067cd809ffa58d

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 66aa87a7f6bcba89ae265cb4ac00fd2f6659d1fa1f93ec358a1801e5850da338
MD5 a1f8ce59a6dac18cb25bdd1b14a539b1
BLAKE2b-256 6d24d43bbc7d55692a84e71d344b5fbdee3bfe902941bcb0b28e31df5b2100d7

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0a1f62703920ce9926f26636b2e4cf335dc4674f38b651904f7ae2c98ffcdc2d
MD5 14fdf6cc2b876ea3fd8c9afbd9561816
BLAKE2b-256 070c51aa2abc0affb47cfe1fdc9839c79a8b97b86e1a74737acc35e95fbeaebc

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b99c04b35167c98f8537b660ddecdd4f23b5e01bb1d26049cb8195e1956f2310
MD5 f3d6280542452cf83c30b47da1543c54
BLAKE2b-256 e5227e74ac4acfa053d4faa1d9e610169c8c94633dacbb0ca056f73b73fd488a

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a172ee4926c27bcb172bf7048cbebbd41e7ad95aefe395def87dcc1600bb255d
MD5 a56fad075ce17c692bd2a5d1a63d1410
BLAKE2b-256 b64f33fcb191e415ab326c5a86dde67dedd43d4d8408567b7a82568f29e719ee

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 34e1fa873745b4a8857dbefb15d057b96359dcd27cfa243f9ebcfa76defa887c
MD5 2c607716aaf87ebdd25e8a7487fe281f
BLAKE2b-256 62906727efa0926640713421ec2561d9f1816143c94df2d970e497b592d5b354

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 73375102b6637224073e1aecd3a87e01bb609cf828f79df1f256cd03553cbec0
MD5 4003a745a4403fc022bb4ea3cc4c87f6
BLAKE2b-256 7d54d00c48aedede4ce2b2a56f51f686e7a997db3882371f6344f86b93892faf

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 d3001b9c92ed19f852dc38e891bcdb24b051214ebfaec93bf5c9900b54e2ab9e
MD5 f298ac72f18764bd8c493a7c62316080
BLAKE2b-256 46c2e0e4d8241989b4ed367a1d8f45a820dd8073b58c77204deb4db24c1263c1

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ca72fd186efd1ea684a1729193acc800c408d79984849536580b8a21bdebc492
MD5 ba0f22fa8f4a429e4a683b4741af0fd2
BLAKE2b-256 02b6eb0594af6c5a18956b3a7a1916cf8f1d811f7843d1b95e1ef6185595bba5

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51637bf737c36d29cc25637f98de32c6352a1f46789101c075fe6ec660a8a2bb
MD5 3df92cd15eeea1c3fae5f55a86a23e98
BLAKE2b-256 ee971bc53ec55f6b1b1ba6e5fe8d1fc72abde441589ee3d9a974544963be013e

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b9ce20f9bce85abb7d0330b89c260241bda47fdaf63bd8418e4f2a5361fa14ad
MD5 dc7370c3eaecab3b9383e55bd708ead3
BLAKE2b-256 df82a63dfd67008756a43826a9e725259dc016ad44c1d81563249a7fe19051c6

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fc338bdaec86079b103b6d7f734f9421e2861294731cf17de92893642ce2c0f8
MD5 54f9450876e1477f5c2f478c349f5579
BLAKE2b-256 e6bb3bab6d82cc3eab780a6082665d5af32c7c19fe2cbc711417fb51063402ce

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4ab43c8141f223f5371916ab3d8fe2ce522d532d71e42ef4f3cb5b65a4d15222
MD5 bd67ec6d4f756476ac44defeca9969ca
BLAKE2b-256 7f9eeb226fe1b7c5bf70498e70d8d3856bd5ce8259699b6b8933d3d6e175dc7d

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 8e5864e8ad75ff56e8f5326e6137284616cc547a619db180381332f1fd829838
MD5 14e2f32e3d6161ebb99e739bdb3a6e46
BLAKE2b-256 edd8433a6ef1a60665c1eff94709bb21d2c834f12b2cf46e555bbc35eb3bd0b5

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 089bfa0015f9027b694a7ee4e852ce0bd18382853f16a1b93b8651993789adfb
MD5 5935fdcf988aa08e16bb8bdfa3b27b0a
BLAKE2b-256 aafaa0810484b589614440ae3153f24fa3602537fa587fa34730527a4b1131f9

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 448e40604d9bdb0549aee8caf9e2d09574163454e4afd9ca6fea0f589282f6ec
MD5 3dc2f8f0260c2699a701c5fd8fc4ac51
BLAKE2b-256 1da818ba3936bc31669ea534e85e48fcb0dfebcad3328ea456f747d0db2c9404

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 38ccb98318c8d5e2c02fb74877c662db4b28254e150733a0748e10ebf4c8d718
MD5 3b12eb588c8d504aa8fe7e9cf3c2ab1e
BLAKE2b-256 a01eaa374ee0df51f4cbd74af784eece4f53d486c18a07c37a42f618528cfb40

See more details on using hashes here.

File details

Details for the file log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for log_surgeon_ffi-0.1.0b0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8156df2d45080e06e36ae6ad01e6494bda47396ddd00d4b64845f88c46414ae6
MD5 097f92a091935354497dc5be1d26fd13
BLAKE2b-256 9f5fee69a5c65cbd3fe3ea067311d94e548ff49c3f403f8d2e5c1ef0e02fc3b8

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