You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
IMPORTANT: Python 3.10 or greater is required. If you are using an older
version, please use an earlier release.
Databases can now be loaded from buffers. This can be done by passing in a
buffer as the database and using mode MODE_FD. Pull request by Emanuel
Seemann. GitHub #234.
The C extension now supports Python 3.13+ free-threading mode and is
thread-safe for concurrent reads on platforms with pthread support (such as
Linux and macOS) and Windows. On other platforms, the extension will use
GIL-based protection.
The C extension now uses PEP 489 multi-phase initialization, enabling
proper subinterpreter support and module isolation for Python 3.12+. This
modernizes the extension to use heap types instead of static types and
implements per-module state management. Key benefits include support for
Python 3.12+ isolated subinterpreters, multiple independent module
instances, and future-proofing for Python 3.14's InterpreterPoolExecutor.
Requested by R. Christian McDonald in GitHub #105.
BREAKING: The pure Python maxminddb.reader.Metadata class has been
converted to a frozen dataclass. The __repr__ format has changed from maxminddb.reader.Metadata(...) to Metadata(...). More importantly,
all Metadata attributes are now readonly and cannot be modified after
creation. If you were modifying metadata attributes after object creation,
you will need to update your code. All functionality remains the same,
including the node_byte_size and search_tree_size properties. Note:
The C extension's Metadata class has always been readonly, so this change
brings the pure Python implementation into consistency with the C extension.
MODE constants have been converted to an IntEnum (maxminddb.const.Mode).
The old constants (MODE_AUTO, MODE_FILE, etc.) remain available for
backward compatibility and are now aliases to the enum members. This provides
better IDE support and type safety while maintaining full backward
compatibility. You can now use either Mode.FILE or MODE_FILE - both
work identically. Since IntEnum is int-compatible, existing code using
the constants will continue to work without modification.