code cleaning
This commit is contained in:
+68
-34
@@ -5,10 +5,18 @@ from typing import List, Optional, Union
|
|||||||
from Levenshtein import distance
|
from Levenshtein import distance
|
||||||
|
|
||||||
|
|
||||||
|
# region path utils
|
||||||
|
|
||||||
|
|
||||||
def relative_path(file: str, *args: str) -> str:
|
def relative_path(file: str, *args: str) -> str:
|
||||||
return path.realpath(path.join(path.dirname(path.realpath(file)), *args))
|
return path.realpath(path.join(path.dirname(path.realpath(file)), *args))
|
||||||
|
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region dict utils
|
||||||
|
|
||||||
|
|
||||||
def read_key_safe(d: dict, k: str, default=None, *,
|
def read_key_safe(d: dict, k: str, default=None, *,
|
||||||
types: Optional[List[type]] = None,
|
types: Optional[List[type]] = None,
|
||||||
is_list: bool = False,
|
is_list: bool = False,
|
||||||
@@ -37,6 +45,11 @@ def read_key(d: dict, k: str, default=None, *,
|
|||||||
raise KeyError(k)
|
raise KeyError(k)
|
||||||
|
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region type utils
|
||||||
|
|
||||||
|
|
||||||
def check_type(obj, types: List[type], is_list: bool = False, is_list_size: Optional[int] = None):
|
def check_type(obj, types: List[type], is_list: bool = False, is_list_size: Optional[int] = None):
|
||||||
if is_list:
|
if is_list:
|
||||||
if not is_list_of(obj, types, is_list_size):
|
if not is_list_of(obj, types, is_list_size):
|
||||||
@@ -65,6 +78,11 @@ def is_list_of(obj, types: List[type], length: Optional[int] = None) -> bool:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region args utils
|
||||||
|
|
||||||
|
|
||||||
args_regex = re.compile('"([^"]*)"|\'([^\']*)\'|([^ ]+)')
|
args_regex = re.compile('"([^"]*)"|\'([^\']*)\'|([^ ]+)')
|
||||||
|
|
||||||
|
|
||||||
@@ -78,6 +96,29 @@ def parse_arguments(src: str) -> List[str]:
|
|||||||
return [get_found_match(m) for m in args_regex.findall(src)]
|
return [get_found_match(m) for m in args_regex.findall(src)]
|
||||||
|
|
||||||
|
|
||||||
|
def read_argument(args: List[str], *names: str, valued: bool = False, delete: bool = False):
|
||||||
|
for i, arg in enumerate(args):
|
||||||
|
if arg.lower() in names:
|
||||||
|
if delete:
|
||||||
|
del args[i]
|
||||||
|
i -= 1
|
||||||
|
if not valued:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
v = None
|
||||||
|
if i + 1 < len(args):
|
||||||
|
v = args[i + 1]
|
||||||
|
if delete:
|
||||||
|
del args[i + 1]
|
||||||
|
return v
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region lang utils
|
||||||
|
|
||||||
|
|
||||||
def find_nearest(word: str, wlist: List[str], threshold: int = 5) -> Optional[str]:
|
def find_nearest(word: str, wlist: List[str], threshold: int = 5) -> Optional[str]:
|
||||||
distances = [
|
distances = [
|
||||||
(distance(word, w), # distance
|
(distance(word, w), # distance
|
||||||
@@ -91,6 +132,10 @@ def find_nearest(word: str, wlist: List[str], threshold: int = 5) -> Optional[st
|
|||||||
return found[2]
|
return found[2]
|
||||||
|
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region text formatting utils
|
||||||
|
|
||||||
def justify_text(src: str, n_lines: int) -> Optional[str]:
|
def justify_text(src: str, n_lines: int) -> Optional[str]:
|
||||||
spaces_indexes = find_all(src, " ")
|
spaces_indexes = find_all(src, " ")
|
||||||
if n_lines - 1 > len(spaces_indexes):
|
if n_lines - 1 > len(spaces_indexes):
|
||||||
@@ -102,6 +147,28 @@ def justify_text(src: str, n_lines: int) -> Optional[str]:
|
|||||||
return replace_at(src, "\n", break_indexes, 1)
|
return replace_at(src, "\n", break_indexes, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def place_line_breaks(breaks_positions: List[float], spaces_indexes: List[int]) -> List[int]:
|
||||||
|
breaks_positions = breaks_positions[:]
|
||||||
|
breaks_indexes = []
|
||||||
|
dist = sys.maxsize
|
||||||
|
for i, value in enumerate(spaces_indexes):
|
||||||
|
if not len(breaks_positions):
|
||||||
|
break
|
||||||
|
if dist < abs(value - breaks_positions[0]):
|
||||||
|
breaks_indexes += [spaces_indexes[i - 1]]
|
||||||
|
breaks_positions.pop(0)
|
||||||
|
else:
|
||||||
|
dist = abs(value - breaks_positions[0])
|
||||||
|
if len(breaks_positions):
|
||||||
|
breaks_indexes += [spaces_indexes[-1]]
|
||||||
|
return breaks_indexes
|
||||||
|
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region string utils
|
||||||
|
|
||||||
|
|
||||||
def find_all(src: str, pattern: str) -> List[int]:
|
def find_all(src: str, pattern: str) -> List[int]:
|
||||||
indexes = []
|
indexes = []
|
||||||
i = safe_index(src, pattern)
|
i = safe_index(src, pattern)
|
||||||
@@ -121,43 +188,10 @@ def replace_at(src: str, pattern: str, indexes: List[int], remove: int) -> str:
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
def place_line_breaks(breaks_positions: List[float], spaces_indexes: List[int]) -> List[int]:
|
|
||||||
breaks_positions = breaks_positions[:]
|
|
||||||
breaks_indexes = []
|
|
||||||
dist = sys.maxsize
|
|
||||||
for i, value in enumerate(spaces_indexes):
|
|
||||||
if not len(breaks_positions):
|
|
||||||
break
|
|
||||||
if dist < abs(value - breaks_positions[0]):
|
|
||||||
breaks_indexes += [spaces_indexes[i - 1]]
|
|
||||||
breaks_positions.pop(0)
|
|
||||||
else:
|
|
||||||
dist = abs(value - breaks_positions[0])
|
|
||||||
if len(breaks_positions):
|
|
||||||
breaks_indexes += [spaces_indexes[-1]]
|
|
||||||
return breaks_indexes
|
|
||||||
|
|
||||||
|
|
||||||
def safe_index(src: Union[str, list], pattern, start: int = 0):
|
def safe_index(src: Union[str, list], pattern, start: int = 0):
|
||||||
try:
|
try:
|
||||||
return src.index(pattern, start)
|
return src.index(pattern, start)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# endregion
|
||||||
def read_argument(args: List[str], *names: str, valued: bool = False, delete: bool = False):
|
|
||||||
for i, arg in enumerate(args):
|
|
||||||
if arg.lower() in names:
|
|
||||||
if delete:
|
|
||||||
del args[i]
|
|
||||||
i -= 1
|
|
||||||
if not valued:
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
v = None
|
|
||||||
if i + 1 < len(args):
|
|
||||||
v = args[i + 1]
|
|
||||||
if delete:
|
|
||||||
del args[i + 1]
|
|
||||||
return v
|
|
||||||
return None
|
|
||||||
|
|||||||
Reference in New Issue
Block a user