Coverage for src/extratools_core/strtools.py: 100%
18 statements
« prev ^ index » next coverage.py v7.8.1, created at 2025-05-27 07:45 -0700
« prev ^ index » next coverage.py v7.8.1, created at 2025-05-27 07:45 -0700
1import gzip
2from base64 import b64decode, b64encode
3from collections.abc import Callable, Iterable
5from .iter import iter_to_grams
6from .seq.subseq import common_subseq, enumerate_subseqs
9def str_to_grams(
10 s: str,
11 *,
12 n: int,
13 pad: str = '',
14) -> Iterable[str]:
15 if n < 1 or len(pad) > 1:
16 raise ValueError
18 for c in iter_to_grams(s, n=n, pad=pad or None):
19 yield ''.join(c)
22def common_substr(a: str, b: str) -> str:
23 return ''.join(common_subseq(a, b))
26def enumerate_substrs(s: str) -> Iterable[str]:
27 return map(str, enumerate_subseqs(s))
30def compress(
31 s: str,
32 compress_func: Callable[[bytes], bytes] = gzip.compress,
33) -> str:
34 """
35 Compress a string by GZip + Base64 encoding.
37 https://base64.guru/developers/data-uri/gzip
39 Parameters
40 ----------
41 s : str
42 String to compress
43 compress_func : Callable[[bytes], bytes]
44 Optional function to compress (`gzip.compress` in default)
46 Returns
47 -------
48 str
49 Compressed string
50 """
52 return b64encode(compress_func(s.encode())).decode()
55def decompress(
56 s: str,
57 decompress_func: Callable[[bytes], bytes] = gzip.decompress,
58) -> str:
59 """
60 Decompress a string with GZip + Base64 encoding.
62 https://base64.guru/developers/data-uri/gzip
64 Parameters
65 ----------
66 s : str
67 String to decompress
68 compress_func : Callable[[bytes], bytes]
69 Optional function to decompress (`gzip.decompress` in default)
71 Returns
72 -------
73 str
74 Decompressed string
75 """
77 return decompress_func(b64decode(s.encode())).decode()