X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=string_utils.py;h=b93dc93aaa78e9b1b901499169c3b902f3445a59;hb=b454ad295eb3024a238d32bf2aef1ebc3c496b44;hp=097dc1b092dc51bb031f104e82e09047bef1b8ad;hpb=ba223f821df1e9b8abbb6f6d23d5ba92c5a70b05;p=python_utils.git diff --git a/string_utils.py b/string_utils.py index 097dc1b..b93dc93 100644 --- a/string_utils.py +++ b/string_utils.py @@ -14,6 +14,7 @@ import string from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Tuple import unicodedata from uuid import uuid4 +import warnings import list_utils @@ -861,16 +862,16 @@ def words_count(in_str: str) -> int: return len(WORDS_COUNT_RE.findall(in_str)) -def generate_uuid(as_hex: bool = False) -> str: +def generate_uuid(omit_dashes: bool = False) -> str: """ Generated an UUID string (using `uuid.uuid4()`). generate_uuid() # possible output: '97e3a716-6b33-4ab9-9bb1-8128cb24d76b' - generate_uuid(as_hex=True) # possible output: '97e3a7166b334ab99bb18128cb24d76b' + generate_uuid(omit_dashes=True) # possible output: '97e3a7166b334ab99bb18128cb24d76b' """ uid = uuid4() - if as_hex: + if omit_dashes: return uid.hex return str(uid) @@ -1097,7 +1098,9 @@ def to_date(in_str: str) -> Optional[datetime.date]: d.parse(in_str) return d.get_date() except dp.ParseException: - logger.warning(f'Unable to parse date {in_str}.') + msg = f'Unable to parse date {in_str}.' + logger.warning(msg) + warnings.warn(msg) return None @@ -1111,7 +1114,9 @@ def valid_date(in_str: str) -> bool: _ = d.parse(in_str) return True except dp.ParseException: - logger.warning(f'Unable to parse date {in_str}.') + msg = f'Unable to parse date {in_str}.' + logger.warning(msg) + warnings.warn(msg) return False @@ -1126,7 +1131,9 @@ def to_datetime(in_str: str) -> Optional[datetime.datetime]: if type(dt) == datetime.datetime: return dt except ValueError: - logger.warning(f'Unable to parse datetime {in_str}.') + msg = f'Unable to parse datetime {in_str}.' + logger.warning(msg) + warnings.warn(msg) return None @@ -1137,7 +1144,9 @@ def valid_datetime(in_str: str) -> bool: _ = to_datetime(in_str) if _ is not None: return True - logger.warning(f'Unable to parse datetime {in_str}.') + msg = f'Unable to parse datetime {in_str}.' + logger.warning(msg) + warnings.warn(msg) return False @@ -1466,8 +1475,9 @@ def chunk(txt: str, chunk_size): """ if len(txt) % chunk_size != 0: - logger.warning( - f'String to chunk\'s length ({len(txt)} is not an even multiple of chunk_size ({chunk_size})') + msg = f'String to chunk\'s length ({len(txt)} is not an even multiple of chunk_size ({chunk_size})' + logger.warning(msg) + warnings.warn(msg) for x in range(0, len(txt), chunk_size): yield txt[x:x+chunk_size] @@ -1553,6 +1563,19 @@ def path_ancestors_before_descendants_sort_key(volume: str) -> Tuple[str]: return tuple([x for x in volume.split('/') if len(x) > 0]) +def replace_all(in_str: str, replace_set: str, replacement: str) -> str: + """Execute several replace operations in a row. + + >>> s = 'this_is a-test!' + >>> replace_all(s, ' _-!', '') + 'thisisatest' + + """ + for char in replace_set: + in_str = in_str.replace(char, replacement) + return in_str + + if __name__ == '__main__': import doctest doctest.testmod()