isogeo_pysdk.utils module

Complementary set of utils to use with Isogeo API.

class isogeo_pysdk.utils.IsogeoUtils(proxies: dict = {})[source]

Bases: object

Complementary set of utilitary methods and functions to make it easier using Isogeo API.

API_URLS = {'prod': 'api', 'qa': 'api.qa'}
APP_URLS = {'prod': 'https://app.isogeo.com', 'qa': 'https://qa-isogeo-app.azurewebsites.net'}
CSW_URLS = {'prod': 'https://services.api.isogeo.com/', 'qa': 'http://services.api.qa.isogeo.com'}
MNG_URLS = {'prod': 'https://manage.isogeo.com', 'qa': 'https://qa-isogeo-manage.azurewebsites.net'}
OC_URLS = {'prod': 'https://open.isogeo.com', 'qa': 'https://qa-isogeo-open.azurewebsites.net'}
WEBAPPS = {'csw_getcap': {'args': ('share_id', 'share_token'), 'url': 'https://services.api.isogeo.com/ows/s/{share_id}/{share_token}?service=CSW&version=2.0.2&request=GetCapabilities'}, 'csw_getrec': {'args': ('md_uuid_urn', 'share_id', 'share_token'), 'url': 'https://services.api.isogeo.com/ows/s/{share_id}/{share_token}?service=CSW&version=2.0.2&request=GetRecordById&id={md_uuid_urn}&elementsetname=full&outputSchema=http://www.isotc211.org/2005/gmd'}, 'csw_getrecords': {'args': ('share_id', 'share_token'), 'url': 'https://services.api.isogeo.com/ows/s/{share_id}/{share_token}?service=CSW&version=2.0.2&request=GetRecords&ResultType=results&ElementSetName=brief&maxRecords=20&OutputFormat=application/xml&OutputSchema=http://www.opengis.net/cat/csw/2.0.2&namespace=xmlns(csw=http://www.opengis.net/cat/csw/2.0.2)&TypeNames=csw:Record&startPosition=1'}, 'oc': {'args': ('md_id', 'share_id', 'share_token'), 'url': 'https://open.isogeo.com/s/{share_id}/{share_token}/r/{md_id}'}, 'pixup_portal': {'args': ('md_id', 'portal_url'), 'url': 'http://{portal_url}/?muid={md_id}'}}
classmethod cache_clearer(only_already_hit: bool = 1)[source]

Clear all LRU cached functions.

Parameters:only_already_hit (bool) – option to clear cache only for functions which have been already hit. Defaults to True.
classmethod convert_octets(octets: int) → str[source]

Convert a mount of octets in readable size.

Parameters:octets (int) – mount of octets to convert
classmethod convert_uuid(in_uuid: str = <class 'str'>, mode: bool = 0)[source]

Convert a metadata UUID to its URI equivalent. And conversely.

Parameters:
  • in_uuid (str) – UUID or URI to convert
  • mode (int) –

    conversion direction. Options:

    • 0 to HEX
    • 1 to URN (RFC4122)
    • 2 to URN (Isogeo specific style)
classmethod credentials_loader(in_credentials: str = 'client_secrets.json') → dict[source]

Loads API credentials from a file, JSON or INI.

Parameters:in_credentials (str) – path to the credentials file. By default, ./client_secrets.json
Return type:dict
Returns:a dictionary with credentials (ID, secret, URLs, platform…)
Example:
api_credentials = IsogeoUtils.credentials_loader("./_auth/client_secrets.json")
pprint.pprint(api_credentials)
>>> {
        'auth_mode': 'group',
        'client_id': 'python-minimalist-sdk-test-uuid-1a2b3c4d5e6f7g8h9i0j11k12l',
        'client_secret': 'application-secret-1a2b3c4d5e6f7g8h9i0j11k12l13m14n15o16p17Q18rS',
        'kind': None,
        'platform': 'prod',
        'scopes': ['resources:read'],
        'staff': None,
        'type': None,
        'uri_auth': 'https://id.api.isogeo.com/oauth/authorize',
        'uri_base': 'https://api.isogeo.com',
        'uri_redirect': None,
        'uri_token': 'https://id.api.isogeo.com/oauth/token'
    }
classmethod encoded_words_to_text(in_encoded_words: str)[source]

Pull out the character set, encoding, and encoded text from the input encoded words. Next, it decodes the encoded words into a byte string, using either the quopri module or base64 module as determined by the encoding. Finally, it decodes the byte string using the character set and returns the result.

See:

Parameters:in_encoded_words (str) – base64 or quori encoded character string.
get_edit_url(metadata: isogeo_pysdk.models.metadata.Metadata, tab: str = 'identification') → str[source]

Returns the edition URL of a metadata.

Parameters:
  • metadata (Metadata) – metadata
  • tab (str) – target tab in the web form. Optionnal. Defaults to ‘identification’.
get_isogeo_version(component: str = 'api', prot: str = 'https')[source]

Get Isogeo components versions. Authentication not required.

Parameters:component (str) –

which platform component. Options:

  • api [default]
  • db
  • app
get_request_base_url(route: str, prot: str = 'https') → str[source]

Build the request url for the specified route.

Parameters:
  • route (str) – route to format
  • prot (str) – https [DEFAULT] or http
classmethod get_url_base_from_url_token(url_api_token: str = 'https://id.api.isogeo.com/oauth/token') → str[source]

Returns the Isogeo API root URL (not included into credentials file) from the token or the auth URL (always included).

Parameters:str (url_api_token) – url to Isogeo API ID token generator
Return type:str
Example:
IsogeoUtils.get_url_base_from_url_token()
>>> "https://api.isogeo.com"
IsogeoUtils.get_url_base_from_url_token(url_api_token="https://id.api.qa.isogeo.com/oauth/token")
>>> "https://api.qa.isogeo.com"
get_view_url(webapp: str = 'oc', **kwargs)[source]

Constructs the view URL of a metadata.

Parameters:
  • webapp (str) – web app destination
  • kwargs (dict) – web app specific parameters. For example see WEBAPPS
classmethod guess_platform_from_url(url: str = 'https://api.isogeo.com/') → str[source]

Returns the Isogeo platform from a given URL.

Parameters:str (url) – URL string to guess from
Return type:str
Returns:“prod” or “qa” or “unknown”
Example:
IsogeoUtils.guess_platform_from_url("https://api.isogeo.com")
>>> "prod"
IsogeoUtils.guess_platform_from_url("https://api.qa.isogeo.com")
>>> "qa"
IsogeoUtils.guess_platform_from_url("https://api.isogeo.ratp.local")
>>> "unknown"
classmethod hlpr_datetimes(in_date: str, try_again: bool = 1) → datetime.datetime[source]

Helper to handle differnts dates formats. See: https://github.com/isogeo/isogeo-api-py-minsdk/issues/85

Parameters:
  • raw_object (dict) – metadata dictionary returned by a request.json()
  • try_again (bool) – iterations on the method
Returns:

a correct datetime object

Return type:

datetime

Example:
# for an event date
IsogeoUtils.hlpr_datetimes"2018-06-04T00:00:00+00:00")
>>> 2018-06-04 00:00:00
# for a metadata creation date with 6 digits as milliseconds
IsogeoUtils.hlpr_datetimes"2019-05-17T13:01:08.559123+00:00")
>>> 2019-05-17 13:01:08.559123
# for a metadata creation date with more than 6 digits as milliseconds
IsogeoUtils.hlpr_datetimes"2019-06-13T16:21:38.1917618+00:00")
>>> 2019-06-13 16:21:38.191761
lang = 'fr'
classmethod pages_counter(total: int, page_size: int = 100) → int[source]

Simple helper to handle pagination. Returns the number of pages for a given number of results.

Parameters:
  • total (int) – count of metadata in a search request
  • page_size (int) – count of metadata to display in each page
register_webapp(webapp_name: str, webapp_args: list, webapp_url: str)[source]

Register a new WEBAPP to use with the view URL builder.

Parameters:
  • webapp_name (str) – name of the web app to register
  • webapp_args (list) – dynamic arguments to complete the URL. Typically ‘md_id’.
  • webapp_url (str) – URL of the web app to register with args tags to replace. Example: ‘https://www.ppige-npdc.fr/portail/geocatalogue?uuid={md_id}’
set_base_url(platform: str = 'prod')[source]

Set Isogeo base URLs according to platform.

Parameters:platform (str) –

platform to use. Options:

  • prod [DEFAULT]
  • qa
  • int
classmethod set_lang_and_locale(lang: str)[source]

Set requests language and the matching locale.

Parameters:lang (str) – language code to set API localization (“en” or “fr”). Defaults to ‘fr’.
tags_to_dict(tags=<class 'dict'>, prev_query=<class 'dict'>, duplicated: str = 'rename')[source]

Reverse search tags dictionary to values as keys. Useful to populate filters comboboxes for example.

Parameters:
  • tags (dict) – tags dictionary from a search request
  • prev_query (dict) – query parameters returned after a search request. Typically search.get(“query”).
  • duplicated (str) –

    what to do about duplicated tags label. Values:

    • ignore - last tag parsed survives
    • merge - add duplicated in value as separated list (sep = ‘||’)
    • rename [default] - if duplicated tag labels are part of different workgroup, so the tag label is renamed with workgroup.