Utils#

Various functions and classes.

Common#

All-purpose functions

class gismap.utils.common.LazyRepr[source]#

MixIn that hides empty fields in dataclasses repr’s.

gismap.utils.common.get_classes(root, key='name')[source]#
Parameters:
  • root (class) – Starting class (can be abstract).

  • key (str, default=’name’) – Attribute to look-up

Returns:

Dictionaries of all subclasses that have a key attribute (as in class attribute key).

Return type:

dict

Examples

>>> from gismap.database.blueprint import DBAuthor
>>> subclasses = get_classes(DBAuthor, key='db_name')
>>> dict(sorted(subclasses.items())) 
{'dblp': <class 'gismap.database.dblp.DBLPAuthor'>,
'hal': <class 'gismap.database.hal.HALAuthor'>}
gismap.utils.common.unlist(x)[source]#
Parameters:

x (str or list or int) – Something.

Returns:

x – If it’s a list, make it flat.

Return type:

str or int

Requests#

Functions related to the requests

gismap.utils.requests.auto_retry_get(s, url, params=None)[source]#
Parameters:
  • s (Session) – HTTP session.

  • url (str) – Entry point to fetch.

  • params (dict, optional) – Get arguments (appended to URL).

Returns:

Result.

Return type:

Response

gismap.utils.requests.autosession(s)[source]#
Parameters:

s (Session, optional) – A session (may be None).

Returns:

A session.

Return type:

Session

gismap.utils.requests.get(url, params=None)[source]#
Parameters:
  • url (str) – Entry point to fetch.

  • params (dict, optional) – Get arguments (appended to URL).

Returns:

Result.

Return type:

Response

MixInIO#

MixInIO class (make classes easy to dump and load).

class gismap.utils.mixinio.MixInIO[source]#

Provide basic save/load capacities to other classes.

dump(filename: str, path='.', overwrite=False, compress=True, stemize=True)[source]#

Save instance to file.

Parameters:
  • filename (str) – The stem of the filename.

  • path (str or Path, optional) – The location path.

  • overwrite (bool, default=False) – Should existing file be erased if it exists?

  • compress (bool, default=True) – Should gzip compression be used?

  • stemize (bool, default=True) – Trim any extension (e.g. .xxx)

Examples

>>> import tempfile
>>> v1 = ToyClass(42)
>>> v2 = ToyClass()
>>> v2.value
0
>>> with tempfile.TemporaryDirectory() as tmpdirname:
...     v1.dump(filename='myfile', compress=True, path=tmpdirname)
...     dir_content = [file.name for file in Path(tmpdirname).glob('*')]
...     v2 = ToyClass.load(filename='myfile', path=Path(tmpdirname))
...     v1.dump(filename='myfile', compress=True, path=tmpdirname) # doctest.ELLIPSIS
File ...myfile.pkl.gz already exists! Use overwrite option to overwrite.
>>> dir_content
['myfile.pkl.gz']
>>> v2.value
42
>>> with tempfile.TemporaryDirectory() as tmpdirname:
...     v1.dump(filename='myfile', compress=False, path=tmpdirname)
...     v1.dump(filename='myfile', compress=False, path=tmpdirname) # doctest.ELLIPSIS
File ...myfile.pkl already exists! Use overwrite option to overwrite.
>>> v1.value = 51
>>> with tempfile.TemporaryDirectory() as tmpdirname:
...     v1.dump(filename='myfile', path=tmpdirname, compress=False)
...     v1.dump(filename='myfile', path=tmpdirname, overwrite=True, compress=False)
...     v2 = ToyClass.load(filename='myfile', path=tmpdirname)
...     dir_content = [file.name for file in Path(tmpdirname).glob('*')]
>>> dir_content
['myfile.pkl']
>>> v2.value
51
>>> with tempfile.TemporaryDirectory() as tmpdirname:
...    v2 = ToyClass.load(filename='thisfilenamedoesnotexist')
Traceback (most recent call last):
 ...
FileNotFoundError: [Errno 2] No such file or directory: ...
classmethod load(filename: str, path='.')[source]#

Load instance from file.

Parameters:
  • filename (str) – The stem of the filename.

  • path (str or Path, optional) – The location path.

class gismap.utils.mixinio.ToyClass(value=0)[source]#

Used to demonstrate how MixInIO works.

Parameters:

value (any) – Something to store.