Skip to content
Snippets Groups Projects
Commit bbe85a62 authored by KERDREUX Jerome's avatar KERDREUX Jerome
Browse files

Type hints for tools.py is Ok

At least one piece is Ok ;)
parent 40cf3231
No related branches found
No related tags found
1 merge request!1First try of type hints
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
import os import os
import re import re
from typing import Optional, Union
import pysodium import pysodium
...@@ -32,7 +33,7 @@ from .bindings import UUID ...@@ -32,7 +33,7 @@ from .bindings import UUID
XAAL_DEVTYPE_PATTERN = '^[a-zA-Z][a-zA-Z0-9_-]*\\.[a-zA-Z][a-zA-Z0-9_-]*$' XAAL_DEVTYPE_PATTERN = '^[a-zA-Z][a-zA-Z0-9_-]*\\.[a-zA-Z][a-zA-Z0-9_-]*$'
def get_cfg_filename(name, cfg_dir=config.conf_dir): def get_cfg_filename(name: str, cfg_dir: str = config.conf_dir) -> str:
if name.startswith('xaal.'): if name.startswith('xaal.'):
name = name[5:] name = name[5:]
filename = '%s.ini' % name filename = '%s.ini' % name
...@@ -40,71 +41,71 @@ def get_cfg_filename(name, cfg_dir=config.conf_dir): ...@@ -40,71 +41,71 @@ def get_cfg_filename(name, cfg_dir=config.conf_dir):
print("Your configuration directory doesn't exist: [%s]" % cfg_dir) print("Your configuration directory doesn't exist: [%s]" % cfg_dir)
return os.path.join(cfg_dir, filename) return os.path.join(cfg_dir, filename)
def load_cfg_file(filename): def load_cfg_file(filename: str) -> Optional[ConfigObj]:
""" load .ini file and return it as dict""" """ load .ini file and return it as dict"""
if os.path.isfile(filename): if os.path.isfile(filename):
return ConfigObj(filename,indent_type=' ',encoding="utf8") return ConfigObj(filename,indent_type=' ',encoding="utf8")
return None return None
def load_cfg(app_name): def load_cfg(app_name: str) -> Optional[ConfigObj]:
filename = get_cfg_filename(app_name) filename = get_cfg_filename(app_name)
return load_cfg_file(filename) return load_cfg_file(filename)
def load_cfg_or_die(app_name): def load_cfg_or_die(app_name: str) -> ConfigObj:
cfg = load_cfg(app_name) cfg = load_cfg(app_name)
if not cfg: if not cfg:
print("Unable to load config file %s" % get_cfg_filename(app_name)) print("Unable to load config file %s" % get_cfg_filename(app_name))
sys.exit(-1) sys.exit(-1)
return cfg return cfg
def new_cfg(app_name): def new_cfg(app_name: str) -> ConfigObj:
filename = get_cfg_filename(app_name) filename = get_cfg_filename(app_name)
cfg = ConfigObj(filename,indent_type=' ') cfg = ConfigObj(filename,indent_type=' ')
cfg['config'] = {} cfg['config'] = {}
cfg['config']['addr']=get_random_uuid().str cfg['config']['addr']=get_random_uuid().str
return cfg return cfg
def get_random_uuid(): def get_random_uuid() -> UUID:
return UUID.random() return UUID.random()
def get_random_base_uuid(digit=2): def get_random_base_uuid(digit=2) -> UUID:
return UUID.random_base(digit) return UUID.random_base(digit)
def get_uuid(val): def get_uuid(val: Union[UUID, str, None]) -> Optional[UUID]:
if isinstance(val,UUID): if isinstance(val,UUID):
return val return val
if isinstance(val,str): if isinstance(val,str):
return str_to_uuid(val) return str_to_uuid(val)
return None return None
def str_to_uuid(val): def str_to_uuid(val: str) -> Optional[UUID]:
""" return an xAAL address for a given string""" """ return an xAAL address for a given string"""
try: try:
return UUID(val) return UUID(val)
except ValueError: except ValueError:
return None return None
def bytes_to_uuid(val): def bytes_to_uuid(val: bytes) -> Optional[UUID]:
try: try:
return UUID(bytes=val) return UUID(bytes=val)
except ValueError: except ValueError:
return None return None
def is_valid_uuid(val): def is_valid_uuid(val: Union[UUID, str]) -> bool:
return isinstance(val,UUID) return isinstance(val,UUID)
def is_valid_address(val): def is_valid_address(val: Union[UUID, str]) -> bool:
return is_valid_uuid(val) return is_valid_uuid(val)
@functools.lru_cache(maxsize=128) @functools.lru_cache(maxsize=128)
def is_valid_dev_type(val): def is_valid_dev_type(val: str) -> bool:
if not isinstance(val,str): if not isinstance(val,str):
return False return False
if re.match(XAAL_DEVTYPE_PATTERN,val): if re.match(XAAL_DEVTYPE_PATTERN,val):
return True return True
return False return False
def pass2key(passphrase): def pass2key(passphrase: str) -> bytes:
"""Generate key from passphrase using libsodium """Generate key from passphrase using libsodium
crypto_pwhash_scryptsalsa208sha256 func crypto_pwhash_scryptsalsa208sha256 func
salt: buffer of zeros salt: buffer of zeros
...@@ -123,7 +124,7 @@ def pass2key(passphrase): ...@@ -123,7 +124,7 @@ def pass2key(passphrase):
return key return key
@functools.lru_cache(maxsize=128) @functools.lru_cache(maxsize=128)
def reduce_addr(addr): def reduce_addr(addr: UUID) -> str:
"""return a string based addred without all digits""" """return a string based addred without all digits"""
tmp = addr.str tmp = addr.str
return tmp[:5] + '..' + tmp[-5:] return tmp[:5] + '..' + tmp[-5:]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment