Replace DB-IP Country Lite with IPinfo Lite (9.8.0) (#711)

Switch the bundled IP-to-country database from DB-IP Country Lite to
IPinfo Lite for greater lookup accuracy. The download URL, cached
filename, and packaged module path all move from
dbip/dbip-country-lite.mmdb to ipinfo/ipinfo_lite.mmdb.

IPinfo Lite uses a different MMDB schema (flat country_code) that is
incompatible with geoip2's Reader.country() helper, so get_ip_address_country()
now uses maxminddb directly and handles both the IPinfo schema and
the MaxMind/DBIP nested country.iso_code schema so users who drop in
their own MMDB from any of these providers continue to work.

Drop the geoip2 dependency (it was only used for the incompatible
helper) and add maxminddb as a direct dependency — it was already
installed transitively through geoip2.

Callers that imported parsedmarc.resources.dbip directly need to switch
to parsedmarc.resources.ipinfo. Old parsedmarc versions downloading
from the dbip/ GitHub raw URL will 404 and fall back to their bundled
copy — this is the documented behavior of load_ip_db().

Co-authored-by: Sean Whalen <seanthegeek@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sean Whalen
2026-04-23 00:31:54 -04:00
committed by GitHub
parent 67f46a7ec9
commit 2ac8cb406e
12 changed files with 75 additions and 51 deletions

View File

@@ -44,19 +44,20 @@ least:
### geoipupdate setup
:::{note}
Starting in `parsedmarc` 7.1.0, a static copy of the
[IP to Country Lite database] from IPDB is distributed with
`parsedmarc`, under the terms of the
[Creative Commons Attribution 4.0 International License].
Starting in `parsedmarc` 9.8.0, a static copy of the
[IPinfo Lite] database is distributed with `parsedmarc`, under the
terms of the [Creative Commons Attribution-ShareAlike 4.0 License],
as a fallback if the [MaxMind GeoLite2 Country database] is not
installed.
installed. Prior versions bundled the DB-IP Country Lite database
instead; both share the same MMDB format, so users who have installed
either (or a MaxMind GeoLite2) database locally will continue to work
without changes.
Starting in `parsedmarc` 9.6.0, the bundled DB-IP database is
automatically updated at startup by downloading the latest copy from
GitHub, unless the `offline` flag is set. The database is cached
locally and refreshed on each run (or on `SIGHUP` in watch mode).
If the download fails, a previously cached copy or the bundled
database is used as a fallback.
The bundled database is automatically updated at startup by downloading
the latest copy from GitHub, unless the `offline` flag is set. The
database is cached locally and refreshed on each run (or on `SIGHUP`
in watch mode). If the download fails, a previously cached copy or the
bundled database is used as a fallback.
The download URL can be overridden with the `ip_db_url` setting, and
the location of a local database file can be overridden with the
@@ -203,7 +204,8 @@ sudo apt-get install libemail-outlook-message-perl
[Component "contrib"]: https://wiki.debian.org/SourcesList#Component
[geoipupdate]: https://github.com/maxmind/geoipupdate
[geoipupdate releases page on github]: https://github.com/maxmind/geoipupdate/releases
[ip to country lite database]: https://db-ip.com/db/download/ip-to-country-lite
[ipinfo lite]: https://ipinfo.io/lite
[creative commons attribution-sharealike 4.0 license]: https://creativecommons.org/licenses/by-sa/4.0/deed.en
[license keys]: https://www.maxmind.com/en/accounts/current/license-key
[maxmind geoipupdate page]: https://dev.maxmind.com/geoip/updating-databases/
[maxmind geolite2 country database]: https://dev.maxmind.com/geoip/geolite2-free-geolocation-data

View File

@@ -133,7 +133,7 @@ The full set of configuration options are:
- `forensic_json_filename` - str: filename for the forensic
JSON output file
- `ip_db_path` - str: An optional custom path to a MMDB file
from MaxMind or DBIP
from IPinfo, MaxMind, or DBIP
- `ip_db_url` - str: Overrides the default download URL for the
IP-to-country database (env var: `PARSEDMARC_GENERAL_IP_DB_URL`)
- `offline` - bool: Do not use online queries for geolocation