argenta 0.3.0__py3-none-any.whl → 0.3.1__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.
- argenta/app/__init__.py +2 -6
- argenta/app/entity.py +48 -41
- argenta/app/exceptions.py +0 -26
- argenta/command/input_comand/exceptions.py +15 -0
- argenta/router/__init__.py +1 -2
- argenta/router/entity.py +27 -40
- argenta/router/exceptions.py +15 -5
- {argenta-0.3.0.dist-info → argenta-0.3.1.dist-info}/METADATA +1 -1
- {argenta-0.3.0.dist-info → argenta-0.3.1.dist-info}/RECORD +11 -11
- {argenta-0.3.0.dist-info → argenta-0.3.1.dist-info}/LICENSE +0 -0
- {argenta-0.3.0.dist-info → argenta-0.3.1.dist-info}/WHEEL +0 -0
argenta/app/__init__.py
CHANGED
@@ -1,7 +1,3 @@
|
|
1
1
|
from .entity import App
|
2
|
-
from .exceptions import (
|
3
|
-
|
4
|
-
InvalidRouterInstanceException,
|
5
|
-
OnlyOneMainRouterIsAllowedException,
|
6
|
-
MissingMainRouterException,
|
7
|
-
MissingHandlerForUnknownCommandsException)
|
2
|
+
from .exceptions import (InvalidDescriptionMessagePatternException,
|
3
|
+
InvalidRouterInstanceException)
|
argenta/app/entity.py
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
from typing import Callable
|
2
|
+
from inspect import getfullargspec
|
3
|
+
|
2
4
|
from ..command.entity import Command
|
3
|
-
from argenta.command.input_comand.entity import InputCommand
|
4
|
-
from argenta.command.input_comand.exceptions import InvalidInputFlagException
|
5
5
|
from ..router.entity import Router
|
6
|
+
from ..command.input_comand.entity import InputCommand
|
7
|
+
from ..command.input_comand.exceptions import (IncorrectInputFlagException,
|
8
|
+
InvalidInputFlagsHandlerHasBeenAlreadyCreatedException,
|
9
|
+
IncorrectNumberArgsHandlerException,
|
10
|
+
UnknownCommandHandlerHasBeenAlreadyCreatedException)
|
6
11
|
from .exceptions import (InvalidRouterInstanceException,
|
7
12
|
InvalidDescriptionMessagePatternException,
|
8
|
-
OnlyOneMainRouterIsAllowedException,
|
9
|
-
MissingMainRouterException,
|
10
|
-
MissingHandlerForUnknownCommandsException,
|
11
|
-
HandlerForUnknownCommandsOnNonMainRouterException,
|
12
13
|
NoRegisteredRoutersException,
|
13
14
|
NoRegisteredHandlersException,
|
14
15
|
RepeatedCommandInDifferentRoutersException)
|
@@ -44,6 +45,8 @@ class App:
|
|
44
45
|
self.repeat_command_groups = repeat_command_groups
|
45
46
|
|
46
47
|
self._routers: list[Router] = []
|
48
|
+
self._invalid_input_flags_handler: Callable[[str], None] | None = None
|
49
|
+
self._unknown_command_handler: Callable[[Command], None] | None = None
|
47
50
|
self._registered_router_entities: list[dict[str, str | list[dict[str, Callable[[], None] | Command]] | Router]] = []
|
48
51
|
self._app_main_router: Router | None = None
|
49
52
|
self._description_message_pattern: str = '[{command}] *=*=* {description}'
|
@@ -52,7 +55,6 @@ class App:
|
|
52
55
|
def start_polling(self) -> None:
|
53
56
|
self._validate_number_of_routers()
|
54
57
|
self._validate_included_routers()
|
55
|
-
self._validate_main_router()
|
56
58
|
self._validate_all_router_commands()
|
57
59
|
|
58
60
|
self.print_func(self.initial_message)
|
@@ -67,11 +69,16 @@ class App:
|
|
67
69
|
self.print_func(self.prompt)
|
68
70
|
|
69
71
|
raw_command: str = input()
|
72
|
+
|
70
73
|
try:
|
71
74
|
input_command: InputCommand = InputCommand.parse(raw_command=raw_command)
|
72
|
-
except
|
75
|
+
except IncorrectInputFlagException:
|
76
|
+
self.print_func(self.line_separate)
|
77
|
+
if self._invalid_input_flags_handler:
|
78
|
+
self._invalid_input_flags_handler(raw_command)
|
79
|
+
else:
|
80
|
+
self.print_func(f'Incorrect flag syntax: "{raw_command}"')
|
73
81
|
self.print_func(self.line_separate)
|
74
|
-
self.print_func(self.command_group_description_separate)
|
75
82
|
if not self.repeat_command_groups:
|
76
83
|
self.print_func(self.prompt)
|
77
84
|
continue
|
@@ -79,7 +86,8 @@ class App:
|
|
79
86
|
self._checking_command_for_exit_command(input_command.get_string_entity())
|
80
87
|
self.print_func(self.line_separate)
|
81
88
|
|
82
|
-
is_unknown_command: bool = self._check_is_command_unknown(input_command
|
89
|
+
is_unknown_command: bool = self._check_is_command_unknown(input_command)
|
90
|
+
|
83
91
|
if is_unknown_command:
|
84
92
|
if not self.repeat_command_groups:
|
85
93
|
self.print_func(self.prompt)
|
@@ -111,8 +119,26 @@ class App:
|
|
111
119
|
self._description_message_pattern: str = pattern
|
112
120
|
|
113
121
|
|
114
|
-
def
|
115
|
-
|
122
|
+
def set_invalid_input_flags_handler(self, handler: Callable[[str], None]) -> None:
|
123
|
+
if self._invalid_input_flags_handler:
|
124
|
+
raise InvalidInputFlagsHandlerHasBeenAlreadyCreatedException()
|
125
|
+
else:
|
126
|
+
args = getfullargspec(handler).args
|
127
|
+
if len(args) != 1:
|
128
|
+
raise IncorrectNumberArgsHandlerException()
|
129
|
+
else:
|
130
|
+
self._invalid_input_flags_handler = handler
|
131
|
+
|
132
|
+
|
133
|
+
def set_unknown_command_handler(self, handler: Callable[[str], None]) -> None:
|
134
|
+
if self._unknown_command_handler:
|
135
|
+
raise UnknownCommandHandlerHasBeenAlreadyCreatedException()
|
136
|
+
else:
|
137
|
+
args = getfullargspec(handler).args
|
138
|
+
if len(args) != 1:
|
139
|
+
raise IncorrectNumberArgsHandlerException()
|
140
|
+
else:
|
141
|
+
self._unknown_command_handler = handler
|
116
142
|
|
117
143
|
|
118
144
|
def get_all_app_commands(self) -> list[str]:
|
@@ -123,17 +149,10 @@ class App:
|
|
123
149
|
return all_commands
|
124
150
|
|
125
151
|
|
126
|
-
def include_router(self, router: Router
|
152
|
+
def include_router(self, router: Router) -> None:
|
127
153
|
if not isinstance(router, Router):
|
128
154
|
raise InvalidRouterInstanceException()
|
129
155
|
|
130
|
-
if is_main:
|
131
|
-
if not self._app_main_router:
|
132
|
-
self._app_main_router = router
|
133
|
-
router.set_router_as_main()
|
134
|
-
else:
|
135
|
-
raise OnlyOneMainRouterIsAllowedException(self._app_main_router.get_name())
|
136
|
-
|
137
156
|
router.set_ignore_command_register(self.ignore_command_register)
|
138
157
|
self._routers.append(router)
|
139
158
|
|
@@ -155,23 +174,6 @@ class App:
|
|
155
174
|
raise NoRegisteredHandlersException(router.get_name())
|
156
175
|
|
157
176
|
|
158
|
-
def _validate_main_router(self):
|
159
|
-
if not self._app_main_router:
|
160
|
-
if len(self._routers) > 1:
|
161
|
-
raise MissingMainRouterException()
|
162
|
-
else:
|
163
|
-
router = self._routers[0]
|
164
|
-
router.set_router_as_main()
|
165
|
-
self._app_main_router = router
|
166
|
-
|
167
|
-
if not self._app_main_router.get_unknown_command_func():
|
168
|
-
raise MissingHandlerForUnknownCommandsException()
|
169
|
-
|
170
|
-
for router in self._routers:
|
171
|
-
if router.get_unknown_command_func() and self._app_main_router is not router:
|
172
|
-
raise HandlerForUnknownCommandsOnNonMainRouterException()
|
173
|
-
|
174
|
-
|
175
177
|
def _validate_all_router_commands(self) -> None:
|
176
178
|
for idx in range(len(self._registered_router_entities)):
|
177
179
|
current_router: Router = self._registered_router_entities[idx]['entity']
|
@@ -199,17 +201,22 @@ class App:
|
|
199
201
|
exit(0)
|
200
202
|
|
201
203
|
|
202
|
-
def _check_is_command_unknown(self, command:
|
204
|
+
def _check_is_command_unknown(self, command: Command):
|
203
205
|
registered_router_entities: list[dict[str, str | list[dict[str, Callable[[], None] | Command]] | Router]] = self._registered_router_entities
|
204
206
|
for router_entity in registered_router_entities:
|
205
207
|
for command_entity in router_entity['commands']:
|
206
|
-
if command_entity['command'].get_string_entity().lower() == command.lower():
|
208
|
+
if command_entity['command'].get_string_entity().lower() == command.get_string_entity().lower():
|
207
209
|
if self.ignore_command_register:
|
208
210
|
return False
|
209
211
|
else:
|
210
|
-
if command_entity['command'].get_string_entity() == command:
|
212
|
+
if command_entity['command'].get_string_entity() == command.get_string_entity():
|
211
213
|
return False
|
212
|
-
|
214
|
+
|
215
|
+
if self._unknown_command_handler:
|
216
|
+
self._unknown_command_handler(command)
|
217
|
+
else:
|
218
|
+
print(f"Unknown command: {command.get_string_entity()}")
|
219
|
+
|
213
220
|
self.print_func(self.line_separate)
|
214
221
|
self.print_func(self.command_group_description_separate)
|
215
222
|
return True
|
argenta/app/exceptions.py
CHANGED
@@ -13,32 +13,6 @@ class InvalidDescriptionMessagePatternException(Exception):
|
|
13
13
|
f"Your pattern: {self.pattern}")
|
14
14
|
|
15
15
|
|
16
|
-
class OnlyOneMainRouterIsAllowedException(Exception):
|
17
|
-
def __init__(self, existing_main_router):
|
18
|
-
self.existing_main_router = existing_main_router
|
19
|
-
|
20
|
-
def __str__(self):
|
21
|
-
return ("Only One Main Router Allowed\n"
|
22
|
-
f"Existing main router is: {self.existing_main_router}")
|
23
|
-
|
24
|
-
|
25
|
-
class MissingMainRouterException(Exception):
|
26
|
-
def __str__(self):
|
27
|
-
return ("Missing Main Router\n"
|
28
|
-
"One of the registered routers must be the main one")
|
29
|
-
|
30
|
-
|
31
|
-
class MissingHandlerForUnknownCommandsException(Exception):
|
32
|
-
def __str__(self):
|
33
|
-
return ("Missing Handlers For Unknown Commands On The Main Router\n"
|
34
|
-
"The main router must have a declared handler for unknown commands")
|
35
|
-
|
36
|
-
|
37
|
-
class HandlerForUnknownCommandsOnNonMainRouterException(Exception):
|
38
|
-
def __str__(self):
|
39
|
-
return '\nThe handler for unknown commands can only be declared for the main router'
|
40
|
-
|
41
|
-
|
42
16
|
class NoRegisteredRoutersException(Exception):
|
43
17
|
def __str__(self):
|
44
18
|
return "No Registered Router Found"
|
@@ -21,4 +21,19 @@ class RepeatedInputFlagsException(Exception):
|
|
21
21
|
f"Duplicate flag was detected in the input: '{self.flag.get_string_entity()}'")
|
22
22
|
|
23
23
|
|
24
|
+
class InvalidInputFlagsHandlerHasBeenAlreadyCreatedException(Exception):
|
25
|
+
def __str__(self):
|
26
|
+
return "Invalid Input Flags Handler has already been created"
|
27
|
+
|
28
|
+
|
29
|
+
class UnknownCommandHandlerHasBeenAlreadyCreatedException(Exception):
|
30
|
+
def __str__(self):
|
31
|
+
return "Unknown Command Handler has already been created"
|
32
|
+
|
33
|
+
|
34
|
+
class IncorrectNumberArgsHandlerException(Exception):
|
35
|
+
def __str__(self):
|
36
|
+
return "Incorrect Input Flags Handler has incorrect number of arguments"
|
37
|
+
|
38
|
+
|
24
39
|
|
argenta/router/__init__.py
CHANGED
argenta/router/entity.py
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
from typing import Callable, Any
|
2
|
+
from inspect import getfullargspec
|
2
3
|
from ..command.entity import Command
|
3
4
|
from ..command.input_comand.entity import InputCommand
|
4
5
|
from ..command.input_comand.exceptions import InvalidInputFlagException
|
5
6
|
from ..command.params.flag.flags_group.entity import FlagsGroup
|
6
|
-
from ..router.exceptions import (
|
7
|
-
|
7
|
+
from ..router.exceptions import (RepeatedCommandException, RepeatedFlagNameException,
|
8
|
+
CurrentCommandDoesNotProcessFlagsException,
|
9
|
+
TooManyTransferredArgsException,
|
10
|
+
RequiredArgumentNotPassedException)
|
8
11
|
|
9
12
|
|
10
13
|
class Router:
|
@@ -16,16 +19,18 @@ class Router:
|
|
16
19
|
self.name = name
|
17
20
|
|
18
21
|
self._command_entities: list[dict[str, Callable[[], None] | Command]] = []
|
19
|
-
self._unknown_command_func: Callable[[str], None] | None = None
|
20
|
-
self._is_main_router: bool = False
|
21
22
|
self._ignore_command_register: bool = False
|
22
23
|
|
24
|
+
self._unknown_command_handler: Callable[[str], None] | None = None
|
25
|
+
self._not_valid_flag_handler: Callable[[str], None] | None = None
|
26
|
+
|
23
27
|
|
24
28
|
def command(self, command: Command) -> Callable[[Any], Any]:
|
25
29
|
command.validate_commands_params()
|
26
30
|
self._validate_command(command)
|
27
31
|
|
28
32
|
def command_decorator(func):
|
33
|
+
Router._validate_func_args(command, func)
|
29
34
|
self._command_entities.append({'handler_func': func,
|
30
35
|
'command': command})
|
31
36
|
def wrapper(*args, **kwargs):
|
@@ -35,22 +40,11 @@ class Router:
|
|
35
40
|
return command_decorator
|
36
41
|
|
37
42
|
|
38
|
-
def unknown_command(self, func):
|
39
|
-
if self._unknown_command_func is not None:
|
40
|
-
raise UnknownCommandHandlerHasAlreadyBeenCreatedException()
|
41
|
-
|
42
|
-
self._unknown_command_func: Callable = func
|
43
|
-
|
44
|
-
def wrapper(*args, **kwargs):
|
45
|
-
return func(*args, **kwargs)
|
46
|
-
return wrapper
|
47
|
-
|
48
|
-
|
49
43
|
def input_command_handler(self, input_command: InputCommand):
|
50
44
|
input_command_name: str = input_command.get_string_entity()
|
51
45
|
for command_entity in self._command_entities:
|
52
46
|
if input_command_name.lower() == command_entity['command'].get_string_entity().lower():
|
53
|
-
if
|
47
|
+
if command_entity['command'].get_flags():
|
54
48
|
if input_command.get_input_flags():
|
55
49
|
for flag in input_command.get_input_flags():
|
56
50
|
is_valid = command_entity['command'].validate_input_flag(flag)
|
@@ -58,25 +52,12 @@ class Router:
|
|
58
52
|
raise InvalidInputFlagException(flag)
|
59
53
|
return command_entity['handler_func'](input_command.get_input_flags())
|
60
54
|
else:
|
61
|
-
return command_entity['handler_func']()
|
55
|
+
return command_entity['handler_func'](FlagsGroup(None))
|
62
56
|
else:
|
63
|
-
if
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
if not is_valid:
|
68
|
-
raise InvalidInputFlagException(flag)
|
69
|
-
return command_entity['handler_func'](input_command.get_input_flags())
|
70
|
-
else:
|
71
|
-
return command_entity['handler_func']()
|
72
|
-
|
73
|
-
|
74
|
-
def get_unknown_command_func(self):
|
75
|
-
return self._unknown_command_func
|
76
|
-
|
77
|
-
|
78
|
-
def unknown_command_handler(self, unknown_command):
|
79
|
-
self._unknown_command_func(unknown_command)
|
57
|
+
if input_command.get_input_flags():
|
58
|
+
raise CurrentCommandDoesNotProcessFlagsException()
|
59
|
+
else:
|
60
|
+
return command_entity['handler_func']()
|
80
61
|
|
81
62
|
|
82
63
|
def _validate_command(self, command: Command):
|
@@ -94,10 +75,17 @@ class Router:
|
|
94
75
|
raise RepeatedFlagNameException()
|
95
76
|
|
96
77
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
78
|
+
@staticmethod
|
79
|
+
def _validate_func_args(command: Command, func: Callable):
|
80
|
+
registered_args = command.get_flags()
|
81
|
+
transferred_args = getfullargspec(func).args
|
82
|
+
if registered_args and transferred_args:
|
83
|
+
if len(transferred_args) != 1:
|
84
|
+
raise TooManyTransferredArgsException()
|
85
|
+
elif registered_args and not transferred_args:
|
86
|
+
raise RequiredArgumentNotPassedException()
|
87
|
+
elif not registered_args and transferred_args:
|
88
|
+
raise TooManyTransferredArgsException()
|
101
89
|
|
102
90
|
|
103
91
|
def set_ignore_command_register(self, ignore_command_register: bool):
|
@@ -123,8 +111,7 @@ class Router:
|
|
123
111
|
'ignore_command_register': self._ignore_command_register,
|
124
112
|
'attributes': {
|
125
113
|
'command_entities': self._command_entities,
|
126
|
-
'unknown_command_func': self.
|
127
|
-
'is_main_router': self._is_main_router
|
114
|
+
'unknown_command_func': self._unknown_command_handler
|
128
115
|
}
|
129
116
|
|
130
117
|
}
|
argenta/router/exceptions.py
CHANGED
@@ -3,11 +3,6 @@ class InvalidDescriptionInstanceException(Exception):
|
|
3
3
|
return "Invalid Description Instance"
|
4
4
|
|
5
5
|
|
6
|
-
class UnknownCommandHandlerHasAlreadyBeenCreatedException(Exception):
|
7
|
-
def __str__(self):
|
8
|
-
return "Only one unknown command handler can be declared"
|
9
|
-
|
10
|
-
|
11
6
|
class RepeatedCommandException(Exception):
|
12
7
|
def __str__(self):
|
13
8
|
return "Commands in handler cannot be repeated"
|
@@ -16,3 +11,18 @@ class RepeatedCommandException(Exception):
|
|
16
11
|
class RepeatedFlagNameException(Exception):
|
17
12
|
def __str__(self):
|
18
13
|
return "Repeated flag name in register command"
|
14
|
+
|
15
|
+
|
16
|
+
class CurrentCommandDoesNotProcessFlagsException(Exception):
|
17
|
+
def __str__(self):
|
18
|
+
return "Current command does not process flags"
|
19
|
+
|
20
|
+
|
21
|
+
class TooManyTransferredArgsException(Exception):
|
22
|
+
def __str__(self):
|
23
|
+
return "Too many transferred arguments"
|
24
|
+
|
25
|
+
|
26
|
+
class RequiredArgumentNotPassedException(Exception):
|
27
|
+
def __str__(self):
|
28
|
+
return "Required argument not passed"
|
@@ -1,13 +1,13 @@
|
|
1
1
|
argenta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
argenta/app/__init__.py,sha256=
|
3
|
-
argenta/app/entity.py,sha256=
|
4
|
-
argenta/app/exceptions.py,sha256=
|
2
|
+
argenta/app/__init__.py,sha256=yOt8-2lholVRUtLPwAXuemh115q1unP1PKLBR_7cd4E,152
|
3
|
+
argenta/app/entity.py,sha256=wVhagcMloMIh3INmeflAIfMJ_Jgh9K35LB2-FCBwzrs,10840
|
4
|
+
argenta/app/exceptions.py,sha256=7_p_5NS_paLAU3xGAWufpfkdTxRx07T2zWYzGKdlCMs,1086
|
5
5
|
argenta/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
6
|
argenta/command/entity.py,sha256=9FkU_NbI1WsXrnKA1Ba86xwYoRwLLdk81yI9dj7RsF8,2451
|
7
7
|
argenta/command/exceptions.py,sha256=qTt3G0XaWW5BBQyxNkVWFY0SMGn92VuxvSRs0G37lHI,366
|
8
8
|
argenta/command/input_comand/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
argenta/command/input_comand/entity.py,sha256=YyJPMV8Hy1QSgvgu_w9cjWdiQ2JXG21EbCabns4w_ek,2585
|
10
|
-
argenta/command/input_comand/exceptions.py,sha256=
|
10
|
+
argenta/command/input_comand/exceptions.py,sha256=16KtQpv2ZkXPQLu0V28HGoGjfXlxtyJe90pTjDYQbng,1252
|
11
11
|
argenta/command/params/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
argenta/command/params/flag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
argenta/command/params/flag/entity.py,sha256=gUax6hkuSuarH8yQwFC4QsGql8n1POi19Ww4yEh2c2k,1446
|
@@ -15,10 +15,10 @@ argenta/command/params/flag/flags_group/__init__.py,sha256=47DEQpj8HBSa-_TImW-5J
|
|
15
15
|
argenta/command/params/flag/flags_group/entity.py,sha256=aFbo5mzevuDxVb8VpaRCUSgUCLn6GK-ODCz5N5650Q8,638
|
16
16
|
argenta/command/params/flag/input_flag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
17
|
argenta/command/params/flag/input_flag/entity.py,sha256=KHoZRE7pRc30LyS6yF_7G7IrA8DrH-gS-Hg_qNstkzU,195
|
18
|
-
argenta/router/__init__.py,sha256=
|
19
|
-
argenta/router/entity.py,sha256=
|
20
|
-
argenta/router/exceptions.py,sha256=
|
21
|
-
argenta-0.3.
|
22
|
-
argenta-0.3.
|
23
|
-
argenta-0.3.
|
24
|
-
argenta-0.3.
|
18
|
+
argenta/router/__init__.py,sha256=ZedowNgGR9OphLSg9fXp6-uvjyf23rbq-rEtuHScAIM,87
|
19
|
+
argenta/router/entity.py,sha256=NvJZXZl03UTnJOBPsN9KNn4DB7HUL_CQxvrCzICIuWY,5268
|
20
|
+
argenta/router/exceptions.py,sha256=MAgKSmH5hHmIvHAQlIvM1V7Ft_35GA2X3F5e7bR4vcE,789
|
21
|
+
argenta-0.3.1.dist-info/LICENSE,sha256=zmqoGh2n5rReBv4s8wPxF_gZEZDgauJYSPMuPczgOiU,1082
|
22
|
+
argenta-0.3.1.dist-info/METADATA,sha256=V0qTkOj2nemtbDlKt8tLm7vi1AroOHwo7RMltFKHwlc,12638
|
23
|
+
argenta-0.3.1.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
24
|
+
argenta-0.3.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|