X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=string_utils.py;h=55e67313253d650116a4fab3c9902420fb277a3c;hb=6ba90a1f30f1c0cf4df12fcd0c62181f29bc3668;hp=9f67207cdf11af0772a6f3872a17fa5a1be67306;hpb=9d3650cc7009183d92422e70cf0089b2674e1e9b;p=python_utils.git diff --git a/string_utils.py b/string_utils.py index 9f67207..55e6731 100644 --- a/string_utils.py +++ b/string_utils.py @@ -27,29 +27,20 @@ This class is based on: https://github.com/daveoncode/python-string-utils. """ import base64 -import contextlib +import contextlib # type: ignore import datetime import io -from itertools import zip_longest import json import logging import numbers import random import re import string -from typing import ( - Any, - Callable, - Dict, - Iterable, - List, - Optional, - Sequence, - Tuple, -) import unicodedata -from uuid import uuid4 import warnings +from itertools import zip_longest +from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Tuple +from uuid import uuid4 import list_utils @@ -1095,7 +1086,7 @@ def to_date(in_str: str) -> Optional[datetime.date]: """ Parses a date string. See DateParser docs for details. """ - import dateparse.dateparse_utils as dp + import dateparse.dateparse_utils as dp # type: ignore try: d = dp.DateParser() @@ -1241,7 +1232,7 @@ class SprintfStdout(object): def __init__(self) -> None: self.destination = io.StringIO() - self.recorder = None + self.recorder: contextlib.redirect_stdout def __enter__(self) -> Callable[[], str]: self.recorder = contextlib.redirect_stdout(self.destination) @@ -1338,7 +1329,7 @@ def trigrams(txt: str): def shuffle_columns_into_list( - input_lines: Iterable[str], column_specs: Iterable[Iterable[int]], delim='' + input_lines: Sequence[str], column_specs: Iterable[Iterable[int]], delim='' ) -> Iterable[str]: """Helper to shuffle / parse columnar data and return the results as a list. The column_specs argument is an iterable collection of @@ -1368,7 +1359,7 @@ def shuffle_columns_into_list( def shuffle_columns_into_dict( - input_lines: Iterable[str], + input_lines: Sequence[str], column_specs: Iterable[Tuple[str, Iterable[int]]], delim='', ) -> Dict[str, str]: @@ -1425,7 +1416,7 @@ def to_ascii(x: str): raise Exception('to_ascii works with strings and bytes') -def to_base64(txt: str, *, encoding='utf-8', errors='surrogatepass') -> str: +def to_base64(txt: str, *, encoding='utf-8', errors='surrogatepass') -> bytes: """Encode txt and then encode the bytes with a 64-character alphabet. This is compatible with uudecode. @@ -1458,7 +1449,7 @@ def is_base64(txt: str) -> bool: return True -def from_base64(b64: str, encoding='utf-8', errors='surrogatepass') -> str: +def from_base64(b64: bytes, encoding='utf-8', errors='surrogatepass') -> str: """Convert base64 encoded string back to normal strings. >>> from_base64(b'aGVsbG8/\\n') @@ -1529,7 +1520,7 @@ def from_bitstring(bits: str, encoding='utf-8', errors='surrogatepass') -> str: return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode(encoding, errors) or '\0' -def ip_v4_sort_key(txt: str) -> Tuple[int]: +def ip_v4_sort_key(txt: str) -> Optional[Tuple[int, ...]]: """Turn an IPv4 address into a tuple for sorting purposes. >>> ip_v4_sort_key('10.0.0.18') @@ -1546,7 +1537,7 @@ def ip_v4_sort_key(txt: str) -> Tuple[int]: return tuple([int(x) for x in txt.split('.')]) -def path_ancestors_before_descendants_sort_key(volume: str) -> Tuple[str]: +def path_ancestors_before_descendants_sort_key(volume: str) -> Tuple[str, ...]: """Chunk up a file path so that parent/ancestor paths sort before children/descendant paths.