geopy v2.0.0 Release Notes

Release Date: 2020-06-27 // almost 4 years ago
  • 🚀 geopy 2.0 is a major release with lots of cleanup and inner refactorings.
    The public interface of the library is mostly the same, and the set
    👍 of supported geocoders didn't change.

    🚀 If you have checked your code on the latest 1.x release with enabled
    ⚠ warnings (i.e. with -Wd key of the python command) and fixed
    ⬆️ all of them, then it should be safe to upgrade.

    🆕 New Features

    geopy.adapters module. Previously all geocoders used urllib
    👍 for HTTP requests, which doesn't support keepalives. Adapters is
    a new mechanism which allows to use other HTTP client implementations.

    There are 3 implementations coming out of the box:

    • geopy.adapters.RequestsAdapter -- uses requests library
      👍 which supports keepalives (thus it is significantly more effective
      📦 than urllib). It is used by default if requests package
      is installed.
    • geopy.adapters.URLLibAdapter -- uses urllib, basically
      0️⃣ it provides the same behavior as in geopy 1.x. It is used by default if
      📦 requests package is not installed.

    - geopy.adapters.AioHTTPAdapter -- uses aiohttp library.

    ➕ Added optional asyncio support in all geocoders via
    👀 .AioHTTPAdapter, see the new Async Mode
    doc section.

    .AsyncRateLimiter -- an async counterpart of .RateLimiter.

    .RateLimiter is now thread-safe.

    Packaging Changes

    ⬇️ Dropped support for Python 2.7 and 3.4.

    🆕 New extras:

    • geopy[requests] for geopy.adapters.RequestsAdapter.
    • geopy[aiohttp] for geopy.adapters.AioHTTPAdapter.

    💥 Breaking Changes

    • geopy.distance algorithms now raise ValueError for points with
      different altitudes, because altitude is ignored in calculations.
    • ✂ Removed geopy.distance.vincenty, use geopy.distance.geodesic instead.
    • timeout=None now disables request timeout, previously
      0️⃣ a default timeout has been used in this case.
    • ✂ Removed GoogleV3.timezone, use .GoogleV3.reverse_timezone instead.
    • ✂ Removed format_string param from all geocoders.
      👀 See Specifying Parameters Once doc section for alternatives.
    • 0️⃣ exactly_one's default is now True for all geocoders
      and methods.
    • Removed service-specific request params from all __init__ methods
      of geocoders. Pass them to the corresponding geocode/reverse
      methods instead.
    • All bounding box arguments now must be passed as a list of two Points.
      Previously some geocoders accepted unique formats like plain strings
      and lists of 4 coordinates -- these values are not valid anymore.
    • .GoogleV3.reverse_timezone used to allow numeric at_time value.
      Pass datetime instances instead.
    • 📜 reverse methods used to bypass the query if it couldn't be parsed
      as a .Point. Now a ValueError is raised in this case.
    • .Location and .Timezone classes no longer accept None
      for point and raw args.
    • 🔧 .Nominatim now raises geopy.exc.ConfigurationError when
      0️⃣ used with a default or sample user-agent.
    • .Point now raises a ValueError if constructed from a single number.
      A zero longitude must be explicitly passed to avoid the error.
    • Most of the service-specific arguments of geocoders now must be passed
      as kwargs, positional arguments are not accepted.
    • ✂ Removed default value None for authentication key arguments of
      .GeoNames, .OpenMapQuest and .Yandex.
    • 🛠 parse_* methods in geocoders have been prefixed with _
      to explicitly mark that they are private.

    🗄 Deprecations

    • 🚚 .Nominatim has been moved from geopy.geocoders.osm module
      to geopy.geocoders.nominatim. The old module is still present for
      🚚 backwards compatibility, but it will be removed in geopy 3.

Previous changes from v2.0.0.rc1

  • 🚀 geopy 2.0 is a major release with lots of cleanup and inner refactorings.
    The public interface of the library is mostly the same, and the set
    👍 of supported geocoders didn't change.

    🚀 If you have checked your code on the latest 1.x release with enabled
    ⚠ warnings (i.e. with -Wd key of the python command) and fixed
    ⬆️ all of them, then it should be safe to upgrade.

    🆕 New features

    geopy.adapters module. Previously all geocoders used urllib
    👍 for HTTP requests, which doesn't support keepalives. Adapters is
    a new mechanism which allows to use other HTTP client implementations.

    There are 3 implementations coming out of the box:

    • geopy.adapters.RequestsAdapter -- uses requests library
      👍 which supports keepalives (thus it is significantly more effective
      📦 than urllib). It is used by default if requests package
      is installed.
    • geopy.adapters.URLLibAdapter -- uses urllib, basically
      0️⃣ it provides the same behavior as in geopy 1.x. It is used by default if
      📦 requests package is not installed.

    - geopy.adapters.AioHTTPAdapter -- uses aiohttp library.

    ➕ Added optional asyncio support in all geocoders via
    👀 .AioHTTPAdapter, see the new Async Mode
    doc section.

    .AsyncRateLimiter -- an async counterpart of .RateLimiter.

    .RateLimiter is now thread-safe.

    Packaging changes

    ⬇️ Dropped support for Python 2.7 and 3.4.

    🆕 New extras:

    • geopy[requests] for geopy.adapters.RequestsAdapter.
    • geopy[aiohttp] for geopy.adapters.AioHTTPAdapter.

    Chores

    • geopy.distance algorithms now raise ValueError for points with
      different altitudes, because altitude is ignored in calculations.
    • ✂ Removed geopy.distance.vincenty, use geopy.distance.geodesic instead.
    • timeout=None now disables request timeout, previously
      0️⃣ a default timeout has been used in this case.
    • ✂ Removed GoogleV3.timezone, use .GoogleV3.reverse_timezone instead.
    • ✂ Removed format_string param from all geocoders.
      👀 See Specifying Parameters Once doc section for alternatives.
    • 0️⃣ exactly_one's default is now True for all geocoders
      and methods.
    • Removed service-specific request params from all __init__ methods
      of geocoders. Pass them to the corresponding geocode/reverse
      methods instead.
    • All bounding box arguments now must be passed as a list of two Points.
      Previously some geocoders accepted unique formats like plain strings
      and lists of 4 coordinates -- these values are not valid anymore.
    • .GoogleV3.reverse_timezone used to allow numeric at_time value.
      Pass datetime instances instead.
    • 📜 reverse methods used to bypass the query if it couldn't be parsed
      as a .Point. Now a ValueError is raised in this case.
    • .Location and .Timezone classes no longer accept None
      for point and raw args.
    • 🔧 .Nominatim now raises geopy.exc.ConfigurationError when
      0️⃣ used with a default or sample user-agent.
    • .Point now raises a ValueError if constructed from a single number.
      A zero longitude must be explicitly passed to avoid the error.
    • Most of the service-specific arguments of geocoders now must be passed
      as kwargs, positional arguments are not accepted.
    • ✂ Removed default value None for authentication key arguments of
      .GeoNames, .OpenMapQuest and .Yandex.
    • 🛠 parse_* methods in geocoders have been prefixed with _
      to explicitly mark that they are private.