Some utilities for PyGeoOGC.

Module Contents#

class pygeoogc.utils.RetrySession(retries=3, backoff_factor=0.3, status_to_retry=(500, 502, 504), prefixes=('https://',), cache_name=None, expire_after=EXPIRE_AFTER, disable=False, ssl=True)#

Configures the passed-in session to retry on failed requests.


The fails can be due to connection errors, specific HTTP response codes and 30X redirections. The code was originally based on: bustawin/retry-requests

  • retries (int, optional) – The number of maximum retries before raising an exception, defaults to 5.

  • backoff_factor (float, optional) – A factor used to compute the waiting time between retries, defaults to 0.5.

  • status_to_retry (tuple, optional) – A tuple of status codes that trigger the reply behaviour, defaults to (500, 502, 504).

  • prefixes (tuple, optional) – The prefixes to consider, defaults to (”http://”, “https://”)

  • cache_name (str, optional) – Path to a folder for caching the session, default to None which uses system’s temp directory.

  • expire_after (int, optional) – Expiration time for the cache in seconds, defaults to -1 (never expire).

  • disable (bool, optional) – If True temporarily disable caching request/responses, defaults to False.

  • ssl (bool, optional) – If True verify SSL certificates, defaults to True.

property disable: bool#

Disable caching request/responses.


Close the session.

get(url, payload=None, params=None, headers=None, stream=None)#

Retrieve data from a url by GET and return the Response.

head(url, params=None, data=None, json=None, headers=None)#

Retrieve data from a url by POST and return the Response.

post(url, payload=None, data=None, json=None, headers=None, stream=None)#

Retrieve data from a url by POST and return the Response.

pygeoogc.utils.match_crs(geom, in_crs, out_crs)#

Reproject a geometry to another CRS.

  • geom (list or tuple or geometry) – Input geometry which could be a list of coordinates such as [(x1, y1), ...], a bounding box like so (xmin, ymin, xmax, ymax), or any valid shapely’s geometry such as Polygon, MultiPolygon, etc..

  • in_crs (str, int, or pyproj.CRS) – Spatial reference of the input geometry

  • out_crs (str, int, or pyproj.CRS) – Target spatial reference


same type as the input geometry – Transformed geometry in the target CRS.


>>> from pygeoogc.utils import match_crs
>>> from shapely.geometry import Point
>>> point = Point(-7766049.665, 5691929.739)
>>> match_crs(point, "epsg:3857", 4326).xy
(array('d', [-69.7636111130079]), array('d', [45.44549114818127]))
>>> bbox = (-7766049.665, 5691929.739, -7763049.665, 5696929.739)
>>> match_crs(bbox, "epsg:3857", 4326)
(-69.7636111130079, 45.44549114818127, -69.73666165448431, 45.47699468552394)
>>> coords = [(-7766049.665, 5691929.739)]
>>> match_crs(coords, "epsg:3857", 4326)
[(-69.7636111130079, 45.44549114818127)]
pygeoogc.utils.streaming_download(urls, kwds=None, fnames=None, file_prefix='', file_extention='', method='GET', ssl=True, chunk_size=CHUNK_SIZE, n_jobs=MAX_CONN)#
pygeoogc.utils.streaming_download(urls: list[str], kwds: list[dict[str, dict[Any, Any]]] | None = None, fnames: Sequence[str | Path] | None = None, file_prefix: str = '', file_extention: str = '', method: str = 'GET', ssl: bool = True, chunk_size: int = CHUNK_SIZE, n_jobs: int = MAX_CONN) list[pathlib.Path]

Download and store files in parallel from a list of URLs/Keywords.


This function runs asynchronously in parallel using n_jobs threads.

  • urls (tuple or list) – A list of URLs to download.

  • kwds (tuple or list, optional) – A list of keywords associated with each URL, e.g., ({“params”: …, “headers”: …}, …). Defaults to None.

  • fnames (tuple or list, optional) – A list of filenames associated with each URL, e.g., (“”, …). Defaults to None. If not provided, random unique filenames will be generated based on URL and keyword pairs.

  • file_prefix (str, optional) – Prefix to add to filenames when storing the files, defaults to None, i.e., no prefix. This argument will be only be used if fnames is not passed.

  • file_extention (str, optional) – Extension to use for storing the files, defaults to None, i.e., no extension if fnames is not provided otherwise. This argument will be only be used if fnames is not passed.

  • method (str, optional) – HTTP method to use, i.e, GET or POST, by default “GET”.

  • ssl (bool, optional) – Whether to use SSL verification, defaults to True.

  • chunk_size (int, optional) – Chunk size to use when downloading, defaults to 100 * 1024 * 1024 i.e., 100 MB.

  • n_jobs (int, optional) – The maximum number of concurrent downloads, defaults to 10.


list – A list of pathlib.Path objects associated with URLs in the same order.

pygeoogc.utils.traverse_json(items, ipath)#

Extract an element from a JSON file along a specified ipath.

This function is based on bcmullins.

  • items (dict) – The input json dictionary

  • ipath (list) – The ipath to the requested element


list – The sub_items founds in the JSON


>>> from pygeoogc.utils import traverse_json
>>> data = [{
...     "employees": [
...         {"name": "Alice", "role": "dev", "nbr": 1},
...         {"name": "Bob", "role": "dev", "nbr": 2}],
...     "firm": {"name": "Charlie's Waffle Emporium", "location": "CA"},
... },]
>>> traverse_json(data, ["employees", "name"])
[['Alice', 'Bob']]

Validate a CRS.


crs (str, int, or pyproj.CRS) – Input CRS.


str – Validated CRS as a string.