Skip to main content

Python binding for bgpkit-parser

Project description

bgpkit-parser-py

Python binding for bgpkit-parser

Example

from pybgpkit_parser import Parser
import json

parser = Parser(
    url="https://spaces.bgpkit.org/parser/update-example",
    filters={"peer_ips": "185.1.8.65, 2001:7f8:73:0:3:fa4:0:1"},
)

for elem in parser:
    print(elem.origin_asns)
    print(json.dumps(elem.to_dict(), indent=4))
    break

You can also add cache_dir to Parser to cache the downloaded files to a specified directory.

Here is an example:

from pybgpkit_parser import Parser
import json

parser = Parser(
    url="https://spaces.bgpkit.org/parser/update-example",
    filters={"peer_ips": "185.1.8.65, 2001:7f8:73:0:3:fa4:0:1"},
    cache_dir="./"
)

for elem in parser:
    print(elem.origin_asns)
    print(json.dumps(elem.to_dict(), indent=4))
    break

Filters

The original dictionary-based filter API is still supported:

parser = Parser(url, filters={"peer_ips": "185.1.8.65,2001:7f8:73:0:3:fa4:0:1"})

Reusable Rust-backed filters are also available:

from pybgpkit_parser import Filter, Parser

filters = [
    Filter.peer_ips(["185.1.8.65", "2001:7f8:73:0:3:fa4:0:1"]),
    Filter.elem_type("a"),
]
parser = Parser.from_filters(url, filters)

Available helper constructors:

  • Filter.peer_ip(...)
  • Filter.peer_ips([...])
  • Filter.origin_asn(...)
  • Filter.prefix(...)
  • Filter.elem_type(...)

Available fields for Elem

    #[pyclass]
    #[derive(Clone, PartialEq)]
    pub struct Elem {
        #[pyo3(get, set)]
        pub timestamp: f64,
        #[pyo3(get, set)]
        pub elem_type: String,
        #[pyo3(get, set)]
        pub peer_ip: String,
        #[pyo3(get, set)]
        pub peer_asn: u32,
        #[pyo3(get, set)]
        pub peer_bgp_id: Option<String>,
        #[pyo3(get, set)]
        pub prefix: String,
        #[pyo3(get, set)]
        pub next_hop: Option<String>,
        #[pyo3(get, set)]
        pub as_path: Option<String>,
        #[pyo3(get, set)]
        pub origin_asns: Option<Vec<u32>>,
        #[pyo3(get, set)]
        pub origin: Option<String>,
        #[pyo3(get, set)]
        pub local_pref: Option<u32>,
        #[pyo3(get, set)]
        pub med: Option<u32>,
        #[pyo3(get, set)]
        pub communities: Option<Vec<String>>,
        #[pyo3(get, set)]
        pub atomic: Option<String>,
        #[pyo3(get, set)]
        pub aggr_asn: Option<u32>,
        #[pyo3(get, set)]
        pub aggr_ip: Option<String>,
        #[pyo3(get, set)]
        pub only_to_customer: Option<u32>,
    }

Supported Python Version

  • Python3.9
  • Python3.10
  • Python3.11
  • Python3.12
  • Python3.13

Installation

python3 -m pip install pybgpkit-parser

Develop

maturin develop builds local python module and add to the venv.

High-performance projected iteration

For best performance, prefer projected tuple iteration when you only need a subset of fields. This avoids creating full Elem objects and skips conversion for unused fields.

from pybgpkit_parser import Parser, ROUTE_FIELDS

# Fast: only converts requested fields
for timestamp, prefix, as_path in Parser(url).iter_tuples(["timestamp", "prefix", "as_path"]):
    pass

# Faster for large files: batch Python boundary crossings
fields = ["timestamp", "prefix", "as_path"]
for batch in Parser(url).iter_tuple_batches(fields, batch_size=10_000):
    for timestamp, prefix, as_path in batch:
        pass

Available field presets:

  • BASIC_FIELDS: timestamp, elem_type, peer_ip, peer_asn, prefix
  • ROUTE_FIELDS: BASIC_FIELDS + as_path
  • NEXT_HOP_FIELDS: BASIC_FIELDS + next_hop

You can also pass your own field list, e.g. Parser(url).iter_tuples(["peer_asn", "prefix"]).

Utility methods

Elem exposes Rust-like helper methods:

  • is_announcement()
  • is_withdrawal()
  • get_origin_asn()
  • get_origin_asns()
  • has_as_path()
  • to_dict() / as_dict()
  • origin_asn property
  • to_json()
  • to_psv()
  • Elem.get_psv_header()
  • module constants: ELEM_TYPE_ANNOUNCE, ELEM_TYPE_WITHDRAW, PSV_HEADER

Parser also provides stream-consuming helpers:

  • count()
  • iter_batches(batch_size)
  • iter_tuples(fields) — recommended for high-performance subset-field scans
  • iter_tuple_batches(fields, batch_size) — recommended for large-file scans

Route-level parsing

RouteParser exposes upstream BgpRouteElem iteration for faster scans when you only need route identity fields:

from pybgpkit_parser import RouteParser

for route in RouteParser(url):
    print(route.timestamp, route.peer_ip, route.peer_asn, route.prefix, route.as_path)

RouteElem fields:

  • timestamp
  • elem_type
  • peer_ip
  • peer_asn
  • prefix
  • as_path

RouteParser supports the same constructor style, from_filters(...), parse_all(), parse_next(), count(), iter_batches(batch_size), iter_tuples(fields), and iter_tuple_batches(fields, batch_size).

For route scans, this is the fastest object-based API; for maximum throughput use RouteParser.iter_tuples(ROUTE_FIELDS) or RouteParser.iter_tuple_batches(ROUTE_FIELDS, batch_size).

Build and publish

See BUILD.md for automated GitHub Actions release details.

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

pybgpkit_parser-0.18.0.tar.gz (31.5 kB view details)

Uploaded Source

Built Distributions

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

pybgpkit_parser-0.18.0-cp39-abi3-win_amd64.whl (3.6 MB view details)

Uploaded CPython 3.9+Windows x86-64

pybgpkit_parser-0.18.0-cp39-abi3-manylinux_2_38_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.38+ x86-64

pybgpkit_parser-0.18.0-cp39-abi3-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

pybgpkit_parser-0.18.0-cp39-abi3-macosx_10_12_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file pybgpkit_parser-0.18.0.tar.gz.

File metadata

  • Download URL: pybgpkit_parser-0.18.0.tar.gz
  • Upload date:
  • Size: 31.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pybgpkit_parser-0.18.0.tar.gz
Algorithm Hash digest
SHA256 e131be45eb75568b2edbd0922657253d103d7b82ad9c8782ba735feb17a1f016
MD5 c22cda864900de96075e45609743ae80
BLAKE2b-256 b144f78e619827e8823a185e8dd79de9736b09c680281db403eb42bb44717d17

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybgpkit_parser-0.18.0.tar.gz:

Publisher: release.yml on bgpkit/bgpkit-parser-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybgpkit_parser-0.18.0-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pybgpkit_parser-0.18.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c3392b70dd780e8ef07d8a67b31fbe08f166b928c5f0477dee4c5790fa390408
MD5 0b6105772ea89e53e75b81025c71fe27
BLAKE2b-256 2c614cf198dab91bae820b0c4b06951317069a3c8a9a9a1e7582798dfbb8a54b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybgpkit_parser-0.18.0-cp39-abi3-win_amd64.whl:

Publisher: release.yml on bgpkit/bgpkit-parser-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybgpkit_parser-0.18.0-cp39-abi3-manylinux_2_38_x86_64.whl.

File metadata

File hashes

Hashes for pybgpkit_parser-0.18.0-cp39-abi3-manylinux_2_38_x86_64.whl
Algorithm Hash digest
SHA256 f8a519a89ad658f081bedb47cb314ffe8108e9f3dd7592bd9017e39f28446aae
MD5 6cd54afd225b47ac4078a8d4ec2ad177
BLAKE2b-256 5e092954b18f44022efd24dc9ffde71b89108a983cce585794f1137562ec00f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybgpkit_parser-0.18.0-cp39-abi3-manylinux_2_38_x86_64.whl:

Publisher: release.yml on bgpkit/bgpkit-parser-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybgpkit_parser-0.18.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybgpkit_parser-0.18.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab734081fa975f41d2b5a6f47d6b3755710e8b892aa671b3bc429a12dd650720
MD5 d410c516224a8c1c48a02b1013dfd146
BLAKE2b-256 9a95c6b2fad3836021b336f500a9090a5366aca17773e09770c0dc4663cdb335

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybgpkit_parser-0.18.0-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on bgpkit/bgpkit-parser-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pybgpkit_parser-0.18.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pybgpkit_parser-0.18.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 34cfd0acb852427ab4dc58d3325da299b62b668ebcea9c7a71b2b31a94d4ca35
MD5 cb62578c46a4741524aa52c41142c001
BLAKE2b-256 8285d8bba96758f88ef0586a819c5095857af8b7db676132509c704d6e892aca

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybgpkit_parser-0.18.0-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on bgpkit/bgpkit-parser-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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