untils 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,267 @@
1
+ """constants.py - All constants and strings."""
2
+
3
+ # pylint: disable=line-too-long
4
+ # pylint: disable=too-few-public-methods
5
+
6
+ from typing import Tuple, Literal
7
+
8
+ from string import Template
9
+
10
+ from untils.utils.enums import ConfigVersions
11
+
12
+ class Constants:
13
+ """The library constants."""
14
+
15
+ SUPPORTED_CONFIG_FORMATS: Tuple[Literal[".json", ".json5"], ...] = (".json", ".json5")
16
+ """All config formats, which supported in current version of the library."""
17
+
18
+ STANDART_CONFIG_FORMATS: Tuple[Literal['.json']] = (".json",)
19
+ """All standart config format, which must be used in final product."""
20
+
21
+ LATEST_CONFIG_VERSION = ConfigVersions.V1
22
+ """Current config version."""
23
+
24
+ class Strings:
25
+ """The library strings."""
26
+
27
+ UNKNOWN_VERSION = "<unknown>"
28
+ """Unknown version identifier."""
29
+
30
+ ANY_VERSION = "<any>"
31
+ """Any version identifier."""
32
+
33
+ REMOVED_METHOD = "Removed method's body, shall be replaced."
34
+ """This method was removed and hasn't implementations."""
35
+
36
+ DEPRECATED_METHOD = "Deprecated method, may be removed in future."
37
+ """This method must be replaced to other, but now works."""
38
+
39
+ ALTERNATIVE_METHOD = "Alternative method, it is not in standart, but is stable."
40
+ """This method is stable, but can be replaced to standart analog."""
41
+
42
+ CONFIG_FILE_NOT_EXISTS = "The config file is not exists."
43
+ """Config file didn't found by it's path."""
44
+
45
+ CONFIG_EXTENSION_NOT_SUPPORTS = "The config file extension is not supported. Try to use another format or dictionary."
46
+ """Config file not supported by IOReader."""
47
+
48
+ AUTO_CORRECT_TO_LATEST = "Auto-correcting to the latest."
49
+ """Auto-correcting to the latest version of something."""
50
+
51
+ AUTO_CORRECT_TO_DEFAULTS = "Auto-correcting to default."
52
+ """Auto-correcting to the dafault value of something."""
53
+
54
+ AUTO_CORRECT_WITH_REMOVING = "Auto-correcting with removing."
55
+ """Auto-correcting with removing of something."""
56
+
57
+ AUTO_CORRECT_WITH_SKIPPING = "Skipping."
58
+ """Auto-correcting with ignore of something."""
59
+
60
+ AUTO_CORRECT_WITH_ACCEPTING = "Accepting, but try to use other variant later."
61
+ """Auto-correcting with accepting of something."""
62
+
63
+ AUTO_CORRECT_WITH_CASTING = "Auto-correcting to correct type."
64
+ """Auto-correcting to correct type."""
65
+
66
+ AUTO_CORRECT_WITH_RENAMING = "Auto-correcting to first available name."
67
+ """Auto-correcting to first available name."""
68
+
69
+ INVALID_CONFIG_VERSION: Template = Template("Config version $version is not valid. Change to the latest with migration.")
70
+ """String: \"The config version $version is not valid. Change to the latest with migration.\"
71
+
72
+ The config version is not supported, must be changed.
73
+
74
+ Placeholders:
75
+ $version - The version number.
76
+ """
77
+
78
+ INVALID_CONFIG_STATES = "The config states signature are not valid."
79
+ """The config states signature are not valid."""
80
+
81
+ INVALID_CONFIG_COMMANDS = "The config commands did not written."
82
+ """The config commands did not written."""
83
+
84
+ STATE_INVALID_NAME = "You cannot use an internal state name singature."
85
+ """You cannot use an internal state name singature."""
86
+
87
+ STATE_INTERNAL_NAME_INVALID: Template = Template("Expected length 2 of the special internal state name character, got $length.")
88
+ """String: \"Expected length 2 of the special internal state name character, got $length.\"
89
+
90
+ Invalid internal state name signature.
91
+
92
+ Placeholders:
93
+ $length - Length of special characters sequence.
94
+ """
95
+
96
+ COMMAND_UNKNOWN_NAME = "Command name is not valid."
97
+ """Command name is not valid."""
98
+
99
+ COMMAND_UNKNOWN_TYPE = "Command type did not written."
100
+ """Command type did not written."""
101
+
102
+ COMMAND_INVALID_TYPE = "The command type is not valid."
103
+ """Command type is not valid."""
104
+
105
+ COMMAND_INVALID_DEFAULT = "Command default value did not written."
106
+ """Command default value did not written."""
107
+
108
+ COMMAND_UNKNOWN_ALIASES = "Command aliases did not written."
109
+ """Command aliases did not written."""
110
+
111
+ COMMAND_INVALID_ALIASES = "The command aliases must be list with strings."
112
+ """The command aliases must be list with strings."""
113
+
114
+ COMMAND_ALIAS_COPIED: Template = Template("The command alias \'$alias\' was duplicated.")
115
+ """String: \"The command alias \'$alias\' was duplicated.\"
116
+
117
+ Placeholders:
118
+ $alias - The alias name.
119
+ """
120
+
121
+ COMMAND_ALIAS_REDUNDANCY: Template = Template("The command alias \"$alias\" is copying an original name.")
122
+ """String: \"The command alias \"$alias\" is copying an original name.\"
123
+
124
+ Placeholders:
125
+ $alias - The alias name.
126
+ """
127
+
128
+ COMMAND_ALIAS_INVALID: Template = Template("The command alias \"$alias\" is not string.")
129
+ """String: \"The command alias \"$alias\" is not string.\"
130
+
131
+ The alias type is not valid.
132
+
133
+ Placeholders:
134
+ $alias - The alias name.
135
+ """
136
+
137
+ COMMAND_INVALID_CHILDREN = "The command children is written, but empty."
138
+ """The command children is written, but empty."""
139
+
140
+ COMMAND_NAME_EMPTY = "The command name is empty."
141
+ """The command name is empty."""
142
+
143
+ COMMAND_NAME_STARTS_INVALID = "The command name starts from '-'."
144
+ """The command name starts from '-'."""
145
+
146
+ COMMAND_NAME_SPECIAL: Template = Template("The command name uses the blocked special character \'$character\'.")
147
+ """String: \"The command name uses the blocked special character \'$character\'.\"
148
+
149
+ The command name contains special characters.
150
+
151
+ Placeholders:
152
+ $character - The special character.
153
+ """
154
+
155
+ COMMAND_NOT_IN_CURRENT_STATE: Template = Template("The command is not defined in the current state '$state' or in the '__base__' state.")
156
+ """String: \"The command is not defined in the current state '$state' or in the '__base__' state.\"
157
+
158
+ The command not in current context.
159
+
160
+ Placeholders:
161
+ $state - The state name.
162
+ """
163
+
164
+ COMMAND_FALLBACK_DOLLAR_NOT_FOUND = "The `Fallback` command may has a single \'$\' character on name start by the standart, but it is not found."
165
+ """The `Fallback` command must be has the \'$\' symbol on name start, but it is only for readability."""
166
+
167
+ COMMAND_FALLBACK_DOLLAR_OVERLOAD = "The `Fallback` command has several \'$\' character."
168
+ """The `Fallback` command cannot has several \'$\' symbols in name."""
169
+
170
+ COMMAND_FALLBACK_DOLLAR_MISPOSITION = "The `Fallback` command has \'$\' character not on start."
171
+ """The `Fallback` command must be has the \'$\' symbol only on name start."""
172
+
173
+ UNKNOWN_CHARACTER: Template = Template("Unknown character '$character'.")
174
+ """String: \"Unknown character '$character'.\"
175
+
176
+ Placeholders:
177
+ $character - Unknown character.
178
+ """
179
+
180
+ END_OF_INPUT = "End of input."
181
+ """Expected next token, got end of input."""
182
+
183
+ TOKEN_MINUS_OVERFLOW: Template = Template("The `Minus` token has count $count overflow.")
184
+ """String: \"`The `Minus` token has count $count overflow.\"
185
+
186
+ The `Minus` token defines a next token signature, but it can be only 1 or 2 in a row.
187
+
188
+ Placeholders:
189
+ $count - Count of tokens.
190
+ """
191
+
192
+ EXPECTED_TOKEN: Template = Template("Expected $expected token, got $token.")
193
+ """String: \"Expected $expected token, got $token.\"
194
+
195
+ Placeholders:
196
+ $expected - Expected token.
197
+ $token - Got token.
198
+ """
199
+
200
+ EXPECTED_SYNTAX_FLAG = "Expected `Flag` token syntax."
201
+ """Expected `Flag` token syntax."""
202
+
203
+ EXPECTED_SYNTAX_OPTION = "Expected `Option` token syntax."
204
+ """Expected `Option` token syntax."""
205
+
206
+ UNKNOWN_TOKEN = "Got unknown token."
207
+ """Got unknown token."""
208
+
209
+ OPTION_NAME_INVALID = "The option's name is not valid."
210
+ """The option's name is not valid."""
211
+
212
+ OPTION_VALUE_INVALID = "The option's value is not valid."
213
+ """The option's value is not valid."""
214
+
215
+ INPUT_PATH_INVALID: Template = Template("A command with name \'$name\' is not found.")
216
+ """String: \"A command with name \'$name\' is not found.\"
217
+
218
+ Expected a command with unknown name.
219
+
220
+ Placeholders:
221
+ $name - A command name.
222
+ """
223
+
224
+ COMMAND_NOT_WRITTEN: str = "Expected a command string, got void."
225
+ """Expected a command string, got void."""
226
+
227
+ COMMAND_NOT_IMPLEMENTED: Template = Template("Not implemented: '$input_str'.")
228
+ """String: \"Not implemented: '$input_str'.\"
229
+
230
+ Command was not implemented in `CommandSystem.route` field.
231
+
232
+ Placeholders:
233
+ $input_str - Input string.
234
+ """
235
+
236
+ LOG_SETTINGS_INIT = "`untils` was initialized with settings."
237
+ """The library was started with settings."""
238
+
239
+ LOG_CONFIG_NOT_LOADED = "Config is not loaded."
240
+ """Config is not loaded."""
241
+
242
+ LOG_CALCULATE_NORMALIZED_PATH_START = "Calculating a normalized path."
243
+ """Calculating a normalized path."""
244
+
245
+ LOG_CALCULATE_NORMALIZED_PATH_END = "Calculated the normalized path."
246
+ """Calculated the normalized path."""
247
+
248
+ INVALID_INTERNAL_STATE_CHANGE: Template = Template("Expected '__init__' internal state, got '$state'.")
249
+ """String: \"Expected '__init__' internal state, got $state.\".
250
+
251
+ `Settings` can accept only `__init__` state.
252
+
253
+ Placeholders:
254
+ $state - State name.
255
+ """
256
+
257
+ UNKNOWN_STATE_CHANGE: Template = Template("State '$state' is not defined in config.")
258
+ """String: \"State $state is not defined in config.\".
259
+
260
+ Unknown state or config wasn't loaded.
261
+
262
+ Placeholders:
263
+ $state - State name.
264
+ """
265
+
266
+ NON_POSITIVE_OFFSET = "Offset cannot be less than 1."
267
+ """Offset cannot be less than 1."""
@@ -0,0 +1,47 @@
1
+ """decorators.py - All decorators for functions and methods to define them status."""
2
+
3
+ import warnings
4
+
5
+ from functools import wraps
6
+
7
+ from typing import Callable, Any, TypeVar
8
+
9
+ from untils.utils.constants import Strings
10
+
11
+ T = TypeVar("T", bound=Callable[..., Any])
12
+
13
+ def deprecated(
14
+ version: str = Strings.UNKNOWN_VERSION,
15
+ reason: str = Strings.DEPRECATED_METHOD
16
+ ) -> Callable[[T], T]:
17
+ """Deprecated method decorator."""
18
+
19
+ def decorator(func: T) -> T:
20
+ @wraps(func)
21
+ def wrapper(*args: Any, **kwargs: Any) -> Any:
22
+ warnings.warn(
23
+ f"{func.__name__}: {reason} [Version: {version}]",
24
+ DeprecationWarning,
25
+ stacklevel=2
26
+ )
27
+ return func(*args, **kwargs)
28
+ return wrapper # pyright: ignore[reportReturnType]
29
+ return decorator
30
+
31
+ def alternative(
32
+ version: str = Strings.UNKNOWN_VERSION,
33
+ reason: str = Strings.ALTERNATIVE_METHOD
34
+ ) -> Callable[[T], T]:
35
+ """Alternative method decorator."""
36
+
37
+ def decorator(func: T) -> T:
38
+ @wraps(func)
39
+ def wrapper(*args: Any, **kwargs: Any) -> Any:
40
+ warnings.warn(
41
+ f"{func.__name__}: {reason} [Version: {version}]",
42
+ FutureWarning,
43
+ stacklevel=2
44
+ )
45
+ return func(*args, **kwargs)
46
+ return wrapper # pyright: ignore[reportReturnType]
47
+ return decorator
untils/utils/enums.py ADDED
@@ -0,0 +1,48 @@
1
+ """enums.py - Enums."""
2
+
3
+ from enum import IntEnum, Enum
4
+
5
+ class WarningsLevel(IntEnum):
6
+ """Error alerts level."""
7
+
8
+ IGNORE = 0
9
+ """Silent errors."""
10
+ BASIC = 1
11
+ """Display with auto-correcting."""
12
+ STRICT = 2
13
+ """Raise exceptions."""
14
+
15
+ class ConfigVersions(IntEnum):
16
+ """The all config versions."""
17
+
18
+ V1 = 1
19
+
20
+ class RawTokenType(IntEnum):
21
+ """The raw token type."""
22
+
23
+ SPACE = 0
24
+ WORD = 1
25
+ MINUS = 2
26
+ NOT = 3
27
+ STRING = 4
28
+
29
+ def __repr__(self) -> str:
30
+ return self.name
31
+
32
+ class FinalTokenType(IntEnum):
33
+ """The final token type."""
34
+
35
+ WORD = 0
36
+ FLAG = 1
37
+ OPTION = 2
38
+
39
+ def __repr__(self) -> str:
40
+ return self.name
41
+
42
+ class InternalState(Enum):
43
+ """The all internal states in config."""
44
+
45
+ BASE = "__base__"
46
+ """Commands in this state will be always available."""
47
+ INIT = "__init__"
48
+ """Initial state."""
@@ -0,0 +1,43 @@
1
+ """lib_warnings.py - All warnings and exceptions."""
2
+
3
+ class ConfigWarning(Warning):
4
+ """Warning class for all config validation issues."""
5
+
6
+ class FileWarning(ConfigWarning):
7
+ """Warning class for IOReader issues."""
8
+
9
+ class ConfigStructureWarning(ConfigWarning):
10
+ """Warning class for config structure issues."""
11
+
12
+ class ConfigValuesWarning(ConfigWarning):
13
+ """Warning class for config values issues."""
14
+
15
+ class InputWarning(Warning):
16
+ """Warning class for all input validation issues."""
17
+
18
+ class InputStructureWarning(InputWarning):
19
+ """Warning class for input structure issues."""
20
+
21
+ class InputValuesWarning(InputWarning):
22
+ """Warning class for input values issues."""
23
+
24
+ class ConfigError(Exception):
25
+ """Exception class for all config validation issues."""
26
+
27
+ class FileError(ConfigError):
28
+ """Exception class for IOReader issues."""
29
+
30
+ class ConfigStructureError(ConfigError):
31
+ """Config exception class for config structure issues."""
32
+
33
+ class ConfigValuesError(ConfigError):
34
+ """Config exception class for config values issues."""
35
+
36
+ class InputError(Exception):
37
+ """Exception class for all input validation issues."""
38
+
39
+ class InputStructureError(InputError):
40
+ """Input exception class for input structure issues."""
41
+
42
+ class InputValuesError(InputError):
43
+ """Input exception class for input values issues."""
@@ -0,0 +1,42 @@
1
+ """protocols.py - Abstract and Protocol classes."""
2
+
3
+ # pyright: reportReturnType=false
4
+
5
+ # pylint: disable=too-few-public-methods
6
+
7
+ from typing import Protocol, Any, runtime_checkable
8
+ from abc import ABC, abstractmethod
9
+
10
+ from untils.utils.type_aliases import UnknownConfigType
11
+ from untils.utils.enums import FinalTokenType
12
+
13
+ from untils.settings import Settings
14
+
15
+ class IOReaderMixin(ABC):
16
+ """The abstract class for all IOReader mixins."""
17
+
18
+ @staticmethod
19
+ @abstractmethod
20
+ def read(settings: Settings, file_path: str) -> UnknownConfigType:
21
+ """Reads a config file."""
22
+
23
+ @runtime_checkable
24
+ class IOReaderProtocol(Protocol):
25
+ """The protocol for all IOReader mixins."""
26
+
27
+ @staticmethod
28
+ def read(settings: Settings, file_path: str) -> UnknownConfigType:
29
+ """Mixin for `IOReader`."""
30
+
31
+ class Factoric(Protocol):
32
+ """The protocol for all factories."""
33
+
34
+ @classmethod
35
+ def create(cls, settings: Settings, *args: Any, **kwargs: Any) -> Any:
36
+ """Creates an object."""
37
+
38
+ class FinalInputProtocol(Protocol):
39
+ """The protocol for all final input tokens."""
40
+
41
+ type: FinalTokenType
42
+ value: Any
@@ -0,0 +1,88 @@
1
+ """type_aliases.py - Type aliases."""
2
+
3
+ from typing import (
4
+ TypeAlias, Dict, Literal, TypedDict, List, Union, Any, Optional, NotRequired, Tuple, Callable
5
+ )
6
+
7
+ ConfigVersion: TypeAlias = Literal[1]
8
+ CommandClass: TypeAlias = Union[
9
+ 'WordCommandConfig', 'FallbackCommandConfig', 'FlagCommandConfig', 'OptionCommandConfig'
10
+ ]
11
+ UnknownCommandClass: TypeAlias = Union[CommandClass, 'UnknownCommandConfig']
12
+ CommandType: TypeAlias = Literal["word", "fallback", "flag", "option"]
13
+ InternalCommandStates: TypeAlias = Literal["__base__", "__init__"]
14
+ CommandStates: TypeAlias = Dict[Union[InternalCommandStates, str], List[str]]
15
+ ConfigSupportedExtensions: TypeAlias = Literal[".json", ".json5"]
16
+ CommandPathSection: TypeAlias = Union[Literal["-any"], str]
17
+ CommandPathLevel: TypeAlias = Union[
18
+ CommandPathSection, List[CommandPathSection], Tuple[CommandPathSection, ...]
19
+ ]
20
+ CommandPath: TypeAlias = Union[List[CommandPathLevel], Tuple[CommandPathLevel, ...]]
21
+ CallableCommand: TypeAlias = Callable[[str, 'InputDict'], None]
22
+
23
+ class UnknownCommandConfig(TypedDict):
24
+ """`CommandConfig` unknown variation for dynamic validations."""
25
+
26
+ aliases: NotRequired[List[str]]
27
+ type: NotRequired[CommandType]
28
+ default: NotRequired[Any]
29
+ children: NotRequired[Dict[str, CommandClass]]
30
+
31
+ class WordCommandConfig(TypedDict):
32
+ """`Word` command type."""
33
+
34
+ aliases: NotRequired[List[str]]
35
+ type: Literal["word"]
36
+ children: NotRequired[Dict[str, CommandClass]]
37
+
38
+ class FallbackCommandConfig(TypedDict):
39
+ """`Fallback` command type."""
40
+
41
+ type: Literal["fallback"]
42
+ default: Any
43
+ children: NotRequired[Dict[str, CommandClass]]
44
+
45
+ class FlagCommandConfig(TypedDict):
46
+ """`Flag` command type."""
47
+
48
+ aliases: NotRequired[List[str]]
49
+ type: Literal["flag"]
50
+ default: Optional[bool]
51
+
52
+ class OptionCommandConfig(TypedDict):
53
+ """`Option` command type."""
54
+
55
+ aliases: NotRequired[List[str]]
56
+ type: Literal["option"]
57
+ default: Any
58
+
59
+ class ConfigType(TypedDict):
60
+ """Config typed dict."""
61
+
62
+ version: ConfigVersion
63
+ states: CommandStates
64
+ commands: Dict[str, CommandClass]
65
+
66
+ class UnknownConfigType(TypedDict):
67
+ """Unknown config type dict for dynamic validations."""
68
+
69
+ version: NotRequired[ConfigVersion]
70
+ states: NotRequired[CommandStates]
71
+ commands: NotRequired[Dict[str, UnknownCommandClass]]
72
+
73
+ class InputDict(TypedDict):
74
+ """Output dict for input."""
75
+
76
+ path: List[str]
77
+ flags: Dict[str, Optional[bool]]
78
+ options: Dict[str, Any]
79
+
80
+ class CommandHistory(TypedDict):
81
+ """Command history."""
82
+
83
+ max_size: int
84
+ """Max notes count. By default is `100`."""
85
+ is_write_overflow: bool
86
+ """Is delete the oldest notes from history and save the newest on max size limit. If disabled, new notes won't catched in history. By default is `True`."""
87
+ notes: List[Tuple[str, InputDict]]
88
+ """Catched inputs with tracking."""
@@ -0,0 +1,73 @@
1
+ Metadata-Version: 2.4
2
+ Name: untils
3
+ Version: 1.0.0
4
+ Summary: Light-weight library for console games or small utils to process user input as commands and describe structure with config.
5
+ Author: BesBobowyy
6
+ Project-URL: GitHub, https://github.com/BesBobowyy/untils
7
+ Keywords: cli,console,lightweight
8
+ Classifier: Development Status :: 5 - Production/Stable
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Requires-Python: >=3.12
15
+ Description-Content-Type: text/markdown
16
+ License-File: README.md
17
+ Provides-Extra: test
18
+ Requires-Dist: pytest>=9.0.0; extra == "test"
19
+ Provides-Extra: docs
20
+ Requires-Dist: mkdocs>=1.6.0; extra == "docs"
21
+ Requires-Dist: mkdocs-material; extra == "docs"
22
+ Dynamic: license-file
23
+
24
+ # Welcome to `untils`
25
+
26
+ ![Version](https://img.shields.io/badge/version-1.0.0-blue)
27
+ ![License](https://img.shields.io/badge/license-MIT-green)
28
+ ![Python](https://img.shields.io/badge/python-3.12-yellow)
29
+
30
+ *untils* - Is light-weight library for console games or small utils to process user input as commands and describe structure with config.
31
+
32
+ ## Abilities
33
+
34
+ - Module-based config in markup line.
35
+ - Custom logic in OOP.
36
+ - Validation and parsing user input for 10 lines.
37
+ - Process exceptions.
38
+ - Almost-perfect detailed annotations everywhere.
39
+ - Fast command processing (~208µs).
40
+ - Infinitely extendable abilities.
41
+ - Calm about anything.
42
+
43
+ ## Architecture
44
+
45
+ This library was builded with next architecture:
46
+
47
+ ![Architecture diagramm.](docs/assets/diagramm0.svg)
48
+
49
+ ## Installation
50
+
51
+ ```bash
52
+ pip install untils
53
+ ```
54
+
55
+ ## Documentation
56
+
57
+ [Start Course](start-guide/01-first-project.md "Beginner course into the library.")
58
+
59
+ [API Reference](api-reference.md)
60
+
61
+ ## Roadmap
62
+
63
+ I have resolve my thoughs to several categories:
64
+
65
+ 1. **Main**:
66
+ - [ ] Add command description in `"description"` field.
67
+ - [ ] Add reserved commands in format like internal state name: `"__help__"` - Get all and available commands.
68
+
69
+ 2. **Additional**:
70
+ - [ ] ...
71
+
72
+ 3. **Conceptions**:
73
+ - [ ] Typing system in config through `"type"` field.
@@ -0,0 +1,26 @@
1
+ untils/__init__.py,sha256=NnBfQQO65AbP2rmy1vG1sZVriH8EXLrxT4kXvYSADH8,1048
2
+ untils/command.py,sha256=EJqPd8t5b8V5aaw-gsHswboTTcd1gagZn-AH4rxG_C0,3947
3
+ untils/command_system.py,sha256=aJNuhLwf3UtWUGaLxZsxmwhZiHlK1UXfM5cri768znA,13022
4
+ untils/commands_config.py,sha256=Gtq-9BtW9B1zaCdi3JXogFzupMM7HZ9u02iotb5rND4,779
5
+ untils/config_validator.py,sha256=io9cwQGMPtqze1DnEtnfQXFBzd9zNL10hoqv4NQtmyk,22933
6
+ untils/factories.py,sha256=kInoLY6GyaHVwK6L-_SXLN2eXi7T9qTcIG7KqflXksM,1206
7
+ untils/input_token.py,sha256=9rAt-pEHeifY5u4iuMSW6WidVIWFzp3dkB61XLozwRo,3047
8
+ untils/input_validator.py,sha256=49JDZlBZIYW95R_hMD6v58RmD2KcHB3PDNlqG6FO20U,19188
9
+ untils/ioreader.py,sha256=_Hibgd1Z4G1rtSY8dTNcyiR44hJADjdsQYGDx7o9qr0,1641
10
+ untils/iovalidator.py,sha256=1vtxUSRFoQd9dJDNQJvVYkBeeAmeOJopeNy-X6jSZzg,1883
11
+ untils/parser.py,sha256=KP-D7hMj54MtOLxqzEUloJ3G-EoTO55UPqr2qD0qhPI,4597
12
+ untils/processor.py,sha256=N17c9LiK1Z3dGuENbi22vHFz6UAIpT7X4gpDpkb5tk0,3112
13
+ untils/settings.py,sha256=o5PA3RN0bTnZk5DZ59OcM37PdVg2QbhlISVNpRpr3o0,4034
14
+ untils/tokenizer.py,sha256=CUycI8wLY2XQOG29wsNAlozL2MeKdo359ydBEg4LC3c,3605
15
+ untils/utils/__init__.py,sha256=ZJfeUTZDaj-9yYM2fs-zOqfYcUuDbBfJhD5hBpiIQXY,1083
16
+ untils/utils/constants.py,sha256=lZ_VC_St4FJhFscvY0VGF5c3o-ekJgSHRtF-qqM5D14,9581
17
+ untils/utils/decorators.py,sha256=Q7V-bzrZLDNUtr_L4nkNs_2FHqtHbjf_kKuytQy_x9s,1409
18
+ untils/utils/enums.py,sha256=iw_yUDGL6EUQtwzC-tqpVzw7qCtMQi88_onPi6Vc3GA,885
19
+ untils/utils/lib_warnings.py,sha256=FBpNudaAE9sMerTGTY35LzAHFEIaUIFLrvdgLoOer0s,1341
20
+ untils/utils/protocols.py,sha256=IREbkDIG_pk42PT_eJb2GqZTjmlpvvyZ-TbNyw8d6dA,1137
21
+ untils/utils/type_aliases.py,sha256=tsbOYmgJMFbx4rOJ3Osvwok3CUHqT_mvKfiULN2n3sM,2876
22
+ untils-1.0.0.dist-info/licenses/README.md,sha256=nQuH-5TL59tCmFSPHzGPtFQqDsVKRkPUmA77kjONkVU,1305
23
+ untils-1.0.0.dist-info/METADATA,sha256=0dJ0i7_vwD_Cm68dGBXXO9BZg5NG5JAIBAJnQQ8qyGU,2193
24
+ untils-1.0.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
25
+ untils-1.0.0.dist-info/top_level.txt,sha256=52AuaMKK8ulQOXv_XQtQIMYGkOtr4CuX67GneJRShtg,7
26
+ untils-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.2)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+