Skip to main content

Make `mmdb` format ip library file which can be read by maxmind official language reader

Project description

MaxMind-DB-Writer-python

Make mmdb format ip library file which can be read by maxmind official language reader

The official perl writer was written in perl, which was difficult to customize. So I implemented the MaxmindDB format ip library in python language.

MaxMind has now released an official Go version of the MMDB writer. If you prefer using Go, you can check out the official Go implementation mmdbwriter. This project still provides a Python alternative for those who need it.

Looking for better performance? The feature/rust branch is a beta Rust rewrite via PyO3. It uses a simplified API (no netaddr dependency) and is 6–8× faster overall, with insert speeds up to 5× faster than this pure-Python version.

Install the beta directly from GitHub:

pip install "git+https://github.com/vimt/MaxMind-DB-Writer-python.git@feature/rust"

Note: the beta requires a Rust toolchain to build from source, or pre-built wheels when available.

Install

pip install -U mmdb_writer

Usage

from netaddr import IPSet

from mmdb_writer import MMDBWriter

writer = MMDBWriter()

writer.insert_network(IPSet(['1.1.0.0/24', '1.1.1.0/24']), {'country': 'COUNTRY', 'isp': 'ISP'})
writer.to_db_file('test.mmdb')

import maxminddb

m = maxminddb.open_database('test.mmdb')
r = m.get('1.1.1.1')
assert r == {'country': 'COUNTRY', 'isp': 'ISP'}

Examples

see csv_to_mmdb.py Here is a professional and clear translation of the README.md section from Chinese into English:

Using the Java Client

If you are using the Java client, you need to be careful to set the int_type parameter so that Java correctly recognizes the integer type in the MMDB file.

Example:

from mmdb_writer import MMDBWriter

writer = MMDBWriter(int_type='i32')

Alternatively, you can explicitly specify data types using the Type Enforcement section.

Underlying Principles

In Java, when deserializing to a structure, the numeric types will use the original MMDB numeric types. The specific conversion relationships are as follows:

mmdb type java type
float Float
double Double
int32 Integer
uint16 Integer
uint32 Long
uint64 BigInteger
uint128 BigInteger

When using the Python writer to generate an MMDB file, by default, it converts integers to the corresponding MMDB type based on the size of the int. For instance, int(1) would convert to uint16, and int(2**16+1) would convert to uint32. This may cause deserialization failures in Java clients. Therefore, it is necessary to specify the int_type parameter when generating MMDB files to define the numeric type accurately.

Type Enforcement

MMDB supports a variety of numeric types such as int32, uint16, uint32, uint64, uint128 for integers, and f32, f64 for floating points, while Python only has one integer type and one float type (actually f64).

Therefore, when generating an MMDB file, you need to specify the int_type parameter to define the numeric type of the MMDB file. The behaviors for different int_type settings are:

int_type Behavior
auto (default) Automatically selects the MMDB numeric type based on the value size.
Rules:
int32 for value < 0
uint16 for 0 <= value < 2^16
uint32 for 2^16 <= value < 2^32
uint64 for 2^32 <= value < 2^64
uint128 for value >= 2^64.
i32 Stores all integer types as int32.
u16 Stores all integer types as uint16.
u32 Stores all integer types as uint32.
u64 Stores all integer types as uint64.
u128 Stores all integer types as uint128.

If you want to use different int types for different scenarios, you can use type wrapping:

from mmdb_writer import MMDBWriter, MmdbI32, MmdbF32

writer = MMDBWriter()
# the value of field "i32" will be stored as int32 type
writer.insert_network(IPSet(["1.0.0.0/24"]), {"i32": MmdbI32(128), "f32": MmdbF32(1.22)})

Reference:

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

mmdb_writer-0.2.7.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

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

mmdb_writer-0.2.7-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file mmdb_writer-0.2.7.tar.gz.

File metadata

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

File hashes

Hashes for mmdb_writer-0.2.7.tar.gz
Algorithm Hash digest
SHA256 b012797b2b63d6b8dfe21cfa9391395e7b5b92e166825bd3ad4724f5a670215a
MD5 94ac687c82eb17597a4ad1846c2f253d
BLAKE2b-256 b0c888443e7361ed203b0172c0ab32d2fcecc15fd261da44300145d6f04fcc97

See more details on using hashes here.

Provenance

The following attestation bundles were made for mmdb_writer-0.2.7.tar.gz:

Publisher: publish.yml on vimt/MaxMind-DB-Writer-python

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

File details

Details for the file mmdb_writer-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: mmdb_writer-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mmdb_writer-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 aee3fe2aa556b56914711a14a68890d2fadc03f1e77bc589d7845652e30a04f8
MD5 5b7a0f53501f6272415f113b06ce1bd8
BLAKE2b-256 fe8f7a240ae6dfe612ac61ee1133954ca6ef4f8aa9e1a8443c9b7fc2e137b35c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mmdb_writer-0.2.7-py3-none-any.whl:

Publisher: publish.yml on vimt/MaxMind-DB-Writer-python

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