Source code for common.tools

import re
from pathlib import Path
from common.constants import LOCATOR_LEN_HEX


[docs]def is_compressed_pk(value): """ Checks if a given value is a 33-byte hex-encoded string starting by 02 or 03. Args: value(:obj:`str`): the value to be checked. Returns: :obj:`bool`: Whether or not the value matches the format. """ return isinstance(value, str) and re.match(r"^0[2-3][0-9A-Fa-f]{64}$", value) is not None
[docs]def is_256b_hex_str(value): """ Checks if a given value is a 32-byte hex encoded string. Args: value(:mod:`str`): the value to be checked. Returns: :obj:`bool`: Whether or not the value matches the format. """ return isinstance(value, str) and re.match(r"^[0-9A-Fa-f]{64}$", value) is not None
[docs]def is_u4int(value): """ Checks if a given value is an unsigned 4-byte integer. Args: value(:mod:`int`): the value to be checked. Returns: :obj:`bool`: Whether or not the value matches the format. """ return isinstance(value, int) and 0 <= value <= pow(2, 32) - 1
[docs]def is_locator(value): """ Checks if a given value is a 16-byte hex encoded string. Args: value(:mod:`str`): the value to be checked. Returns: :obj:`bool`: Whether or not the value matches the format. """ return isinstance(value, str) and re.match(r"^[0-9A-Fa-f]{32}$", value) is not None
[docs]def compute_locator(tx_id): """ Computes an appointment locator given a transaction id. Args: tx_id (:obj:`str`): the transaction id used to compute the locator. Returns: :obj:`str`: The computed locator. """ return tx_id[:LOCATOR_LEN_HEX]
[docs]def setup_data_folder(data_folder): """ Create a data folder for either the client or the server side if the folder does not exists. Args: data_folder (:obj:`str`): the path of the folder. """ Path(data_folder).mkdir(parents=True, exist_ok=True)
[docs]def intify(obj): """ Takes an object that is a recursive composition of primitive types, lists and dictionaries, and returns an equivalent object where every `float` number that is actually an integer is replaced with the corresponding :obj:`int`. Args: obj: an object as specified. Returns: The modified version of ``obj``. """ if isinstance(obj, list): return [intify(x) for x in obj] elif isinstance(obj, dict): return {k: intify(v) for k, v in obj.items()} elif isinstance(obj, float) and obj.is_integer(): return int(obj) else: return obj