Closed rowland closed 4 years ago
This is a dupe of #16. I am not looking to do a breaking release at this time.
Generally, I would recommend checking whether the data you are interested in is present rather than relying on whether the lookup succeeded. Even if the lookup succeeds, it doesn't mean that any particular piece of data will be present in the result.
LookupNetwork
method. Closing in favor of that.
One would hope to be able to distinguish between an IP address with no registered country (or city) without examining each and every member of the returned struct, but that does not appear to be possible, because
maxminddb.Reader.Lookup
obscures the difference.This change breaks many tests that currently expect nil, even though a record was not found.
If it is desired that errors be reserved for operational issues, this information needs to be made available to
geoip2
frommaxminddb
so thatgeoip2
can return a nil for*City
or*Country
instead of an error.It would be possible to work around this issue without breaking the existing API by using
LookupOffset
andDecode
inmaxminddb
, but themaxminddb.Reader
instance is private ingeoip2
, so 3rd-party code can't reach it.Alternatively, in order to maintain strict backwards-compatibility, I could implement new methods in
geoip2.Reader
that would lookup records and behave as desired, but that would mean adding 7 new methods or a new mode for the 7 existing methods.