argenta 1.0.5__py3-none-any.whl → 1.0.6__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.
@@ -5,7 +5,7 @@ from typing import Never
5
5
 
6
6
  class AutoCompleter:
7
7
  def __init__(
8
- self, history_filename: str = False, autocomplete_button: str = "tab"
8
+ self, history_filename: str | None = None, autocomplete_button: str = "tab"
9
9
  ) -> None:
10
10
  """
11
11
  Public. Configures and implements auto-completion of input command
argenta/app/models.py CHANGED
@@ -208,13 +208,12 @@ class BaseApp:
208
208
  :param raw_command: the raw input command
209
209
  :return: None
210
210
  """
211
- match error:
212
- case UnprocessedInputFlagException():
213
- self._incorrect_input_syntax_handler(raw_command)
214
- case RepeatedInputFlagsException():
215
- self._repeated_input_flags_handler(raw_command)
216
- case EmptyInputCommandException():
217
- self._empty_input_command_handler()
211
+ if isinstance(error, UnprocessedInputFlagException):
212
+ self._incorrect_input_syntax_handler(raw_command)
213
+ elif isinstance(error, RepeatedInputFlagsException):
214
+ self._repeated_input_flags_handler(raw_command)
215
+ elif isinstance(error, EmptyInputCommandException):
216
+ self._empty_input_command_handler()
218
217
 
219
218
  def _setup_system_router(self) -> None:
220
219
  """
@@ -258,11 +257,11 @@ class BaseApp:
258
257
  """
259
258
  self._prompt = "[italic dim bold]What do you want to do?\n"
260
259
  self._initial_message = (
261
- f"\n[bold red]{text2art(self._initial_message, font='tarty1')}\n"
260
+ "\n"+f"[bold red]{text2art(self._initial_message, font='tarty1')}"+"\n"
262
261
  )
263
262
  self._farewell_message = (
264
- f"[bold red]\n{text2art(f'\n{self._farewell_message}\n', font='chanky')}[/bold red]\n"
265
- f"[red i]github.com/koloideal/Argenta[/red i] | [red bold i]made by kolo[/red bold i]\n"
263
+ "[bold red]\n\n"+text2art(self._farewell_message, font='chanky')+"\n[/bold red]\n"
264
+ "[red i]github.com/koloideal/Argenta[/red i] | [red bold i]made by kolo[/red bold i]\n"
266
265
  )
267
266
  self._description_message_gen = lambda command, description: (
268
267
  f"[bold red]{escape('[' + command + ']')}[/bold red] "
@@ -302,22 +301,30 @@ class BaseApp:
302
301
  self._setup_system_router()
303
302
 
304
303
  for router_entity in self._registered_routers:
305
- self._all_registered_triggers_in_default_case.extend(router_entity.get_triggers())
306
- self._all_registered_triggers_in_default_case.extend(router_entity.get_aliases())
304
+ router_triggers = router_entity.get_triggers()
305
+ router_aliases = router_entity.get_aliases()
306
+ combined = router_triggers + router_aliases
307
307
 
308
- self._all_registered_triggers_in_lower_case.extend([x.lower() for x in router_entity.get_triggers()])
309
- self._all_registered_triggers_in_lower_case.extend([x.lower() for x in router_entity.get_aliases()])
308
+ self._all_registered_triggers_in_default_case.extend(combined)
309
+
310
+ self._all_registered_triggers_in_lower_case.extend(x.lower() for x in combined)
310
311
 
311
312
  self._autocompleter.initial_setup(self._all_registered_triggers_in_lower_case)
312
313
 
313
314
  if self._ignore_command_register:
314
- for cmd in set(self._all_registered_triggers_in_lower_case):
315
- if self._all_registered_triggers_in_lower_case.count(cmd) != 1:
316
- Console().print(f"\n[b red]WARNING:[/b red] Overlapping trigger or alias: [b blue]{cmd}[/b blue]")
315
+ seen = {}
316
+ for item in self._all_registered_triggers_in_lower_case:
317
+ if item in seen:
318
+ Console().print(f"\n[b red]WARNING:[/b red] Overlapping trigger or alias: [b blue]{item}[/b blue]")
319
+ else:
320
+ seen[item] = True
317
321
  else:
318
- for cmd in set(self._all_registered_triggers_in_default_case):
319
- if self._all_registered_triggers_in_default_case.count(cmd) != 1:
320
- Console().print(f"\n[b red]WARNING:[/b red] Overlapping trigger or alias: [b blue]{cmd}[/b blue]")
322
+ seen = {}
323
+ for item in self._all_registered_triggers_in_default_case:
324
+ if item in seen:
325
+ Console().print(f"\n[b red]WARNING:[/b red] Overlapping trigger or alias: [b blue]{item}[/b blue]")
326
+ else:
327
+ seen[item] = True
321
328
 
322
329
  if not self._override_system_messages:
323
330
  self._setup_default_view()
@@ -415,11 +422,22 @@ class App(BaseApp):
415
422
  self._print_framed_text(res)
416
423
  continue
417
424
 
418
- with redirect_stdout(io.StringIO()) as f:
419
- for registered_router in self._registered_routers:
420
- registered_router.finds_appropriate_handler(input_command)
421
- res: str = f.getvalue()
422
- self._print_framed_text(res)
425
+ for registered_router in self._registered_routers:
426
+ if registered_router.disable_redirect_stdout:
427
+ if isinstance(self._dividing_line, StaticDividingLine):
428
+ self._print_func(self._dividing_line.get_full_static_line(self._override_system_messages))
429
+ registered_router.finds_appropriate_handler(input_command)
430
+ self._print_func(self._dividing_line.get_full_static_line(self._override_system_messages))
431
+ else:
432
+ self._print_func(StaticDividingLine(self._dividing_line.get_unit_part()).get_full_static_line(self._override_system_messages))
433
+ registered_router.finds_appropriate_handler(input_command)
434
+ self._print_func(StaticDividingLine(self._dividing_line.get_unit_part()).get_full_static_line(self._override_system_messages))
435
+ else:
436
+ with redirect_stdout(io.StringIO()) as f:
437
+ registered_router.finds_appropriate_handler(input_command)
438
+ res: str = f.getvalue()
439
+ if res:
440
+ self._print_framed_text(res)
423
441
 
424
442
  def include_router(self, router: Router) -> None:
425
443
  """
@@ -4,7 +4,7 @@ from argenta.router import Router
4
4
 
5
5
 
6
6
  class RegisteredRouters:
7
- def __init__(self, registered_routers: list[Router] = None) -> None:
7
+ def __init__(self, registered_routers: list[Router] | None = None) -> None:
8
8
  """
9
9
  Private. Combines registered routers
10
10
  :param registered_routers: list of the registered routers
@@ -87,7 +87,7 @@ class Flag(BaseFlag):
87
87
 
88
88
  class InputFlag(BaseFlag):
89
89
  def __init__(
90
- self, name: str, prefix: Literal["-", "--", "---"] = "--", value: str = None
90
+ self, name: str, prefix: Literal["-", "--", "---"] = "--", value: str | None = None
91
91
  ):
92
92
  """
93
93
  Public. The entity of the flag of the entered command
argenta/command/models.py CHANGED
@@ -5,10 +5,7 @@ from argenta.command.exceptions import (
5
5
  RepeatedInputFlagsException,
6
6
  EmptyInputCommandException,
7
7
  )
8
- from typing import Generic, TypeVar, cast, Literal
9
-
10
-
11
- InputCommandType = TypeVar("InputCommandType")
8
+ from typing import cast, Literal
12
9
 
13
10
 
14
11
  class BaseCommand:
@@ -31,9 +28,9 @@ class Command(BaseCommand):
31
28
  def __init__(
32
29
  self,
33
30
  trigger: str,
34
- description: str = None,
35
- flags: Flag | Flags = None,
36
- aliases: list[str] = None,
31
+ description: str | None = None,
32
+ flags: Flag | Flags | None = None,
33
+ aliases: list[str] | None = None,
37
34
  ):
38
35
  """
39
36
  Public. The command that can and should be registered in the Router
@@ -109,8 +106,8 @@ class Command(BaseCommand):
109
106
  return self._description
110
107
 
111
108
 
112
- class InputCommand(BaseCommand, Generic[InputCommandType]):
113
- def __init__(self, trigger: str, input_flags: InputFlag | InputFlags = None):
109
+ class InputCommand(BaseCommand):
110
+ def __init__(self, trigger: str, input_flags: InputFlag | InputFlags | None = None):
114
111
  """
115
112
  Private. The model of the input command, after parsing
116
113
  :param trigger:the trigger of the command
@@ -142,7 +139,7 @@ class InputCommand(BaseCommand, Generic[InputCommandType]):
142
139
  return self._input_flags
143
140
 
144
141
  @staticmethod
145
- def parse(raw_command: str) -> InputCommandType:
142
+ def parse(raw_command: str) -> 'InputCommand':
146
143
  """
147
144
  Private. Parse the raw input command
148
145
  :param raw_command: raw input command
argenta/metrics/main.py CHANGED
@@ -2,15 +2,15 @@ import io
2
2
  from contextlib import redirect_stdout
3
3
  from time import time
4
4
 
5
- from argenta.router import Router
6
- from argenta.command import Command
7
- from argenta.response import Response
8
- from argenta.response.status import Status
9
- from argenta.command.flag import Flag, Flags
10
5
  from argenta.app import App
11
6
 
12
7
 
13
8
  def get_time_of_pre_cycle_setup(app: App) -> float:
9
+ """
10
+ Public. Return time of pre cycle setup
11
+ :param app: app instance for testing time of pre cycle setup
12
+ :return: time of pre cycle setup as float
13
+ """
14
14
  start = time()
15
15
  with redirect_stdout(io.StringIO()):
16
16
  app.pre_cycle_setup()
@@ -5,13 +5,13 @@ from argenta.orchestrator.argparser import ArgParser
5
5
 
6
6
 
7
7
  class Orchestrator:
8
- def __init__(self, arg_parser: ArgParser = False):
8
+ def __init__(self, arg_parser: ArgParser | None = None):
9
9
  """
10
10
  Public. An orchestrator and configurator that defines the behavior of an integrated system, one level higher than the App
11
11
  :param arg_parser: Cmd argument parser and configurator at startup
12
12
  :return: None
13
13
  """
14
- self.arg_parser: ArgParser | False = arg_parser
14
+ self.arg_parser: ArgParser | None = arg_parser
15
15
  if arg_parser:
16
16
  self.arg_parser.register_args()
17
17
 
@@ -11,7 +11,7 @@ class Response:
11
11
 
12
12
  def __init__(
13
13
  self,
14
- status: Status = None,
14
+ status: Status | None = None,
15
15
  valid_flags: ValidInputFlags = ValidInputFlags(),
16
16
  undefined_flags: UndefinedInputFlags = UndefinedInputFlags(),
17
17
  invalid_value_flags: InvalidValueInputFlags = InvalidValueInputFlags(),
@@ -38,7 +38,7 @@ class CommandHandler:
38
38
 
39
39
 
40
40
  class CommandHandlers:
41
- def __init__(self, command_handlers: list[CommandHandler] = None):
41
+ def __init__(self, command_handlers: list[CommandHandler] | None = None):
42
42
  """
43
43
  Private. The model that unites all CommandHandler of the routers
44
44
  :param command_handlers: list of CommandHandlers for register
argenta/router/entity.py CHANGED
@@ -22,13 +22,19 @@ from argenta.router.exceptions import (
22
22
 
23
23
 
24
24
  class Router:
25
- def __init__(self, title: str | None = "Awesome title"):
25
+ def __init__(self, title: str | None = "Awesome title", disable_redirect_stdout: bool = False):
26
26
  """
27
27
  Public. Directly configures and manages handlers
28
28
  :param title: the title of the router, displayed when displaying the available commands
29
+ :param disable_redirect_stdout: Disables stdout forwarding, if the argument value is True,
30
+ the StaticDividingLine will be forced to be used as a line separator for this router,
31
+ disabled forwarding is needed when there is text output in conjunction with a text input request (for example, input()),
32
+ if the argument value is True, the output of the input() prompt is intercepted and not displayed,
33
+ which is ambiguous behavior and can lead to unexpected work
29
34
  :return: None
30
35
  """
31
36
  self.title = title
37
+ self.disable_redirect_stdout = disable_redirect_stdout
32
38
 
33
39
  self._command_handlers: CommandHandlers = CommandHandlers()
34
40
  self._ignore_command_register: bool = False
@@ -39,13 +45,15 @@ class Router:
39
45
  :param command: Registered command
40
46
  :return: decorated handler as Callable
41
47
  """
42
- self._validate_command(command)
43
48
  if isinstance(command, str):
44
- command = Command(command)
49
+ redefined_command = Command(command)
50
+ else:
51
+ redefined_command = command
52
+ self._validate_command(redefined_command)
45
53
 
46
54
  def command_decorator(func):
47
55
  Router._validate_func_args(func)
48
- self._command_handlers.add_handler(CommandHandler(func, command))
56
+ self._command_handlers.add_handler(CommandHandler(func, redefined_command))
49
57
 
50
58
  def wrapper(*args, **kwargs):
51
59
  return func(*args, **kwargs)
@@ -117,13 +125,12 @@ class Router:
117
125
  flag_status: Literal["Undefined", "Valid", "Invalid"] = (
118
126
  handled_command.validate_input_flag(flag)
119
127
  )
120
- match flag_status:
121
- case "Valid":
122
- valid_input_flags.add_flag(flag)
123
- case "Undefined":
124
- undefined_input_flags.add_flag(flag)
125
- case "Invalid":
126
- invalid_value_input_flags.add_flag(flag)
128
+ if flag_status == "Valid":
129
+ valid_input_flags.add_flag(flag)
130
+ elif flag_status == "Undefined":
131
+ undefined_input_flags.add_flag(flag)
132
+ elif flag_status == "Invalid":
133
+ invalid_value_input_flags.add_flag(flag)
127
134
 
128
135
  if (
129
136
  not invalid_value_input_flags.get_flags()
@@ -157,19 +164,14 @@ class Router:
157
164
  :param command: validated command
158
165
  :return: None if command is valid else raise exception
159
166
  """
160
- match type(command).__name__:
161
- case "Command":
162
- command_name: str = command.get_trigger()
163
- if command_name.find(" ") != -1:
164
- raise TriggerContainSpacesException()
165
- flags: Flags = command.get_registered_flags()
166
- if flags:
167
- flags_name: list = [x.get_string_entity().lower() for x in flags]
168
- if len(set(flags_name)) < len(flags_name):
169
- raise RepeatedFlagNameException()
170
- case "str":
171
- if command.find(" ") != -1:
172
- raise TriggerContainSpacesException()
167
+ command_name: str = command.get_trigger()
168
+ if command_name.find(" ") != -1:
169
+ raise TriggerContainSpacesException()
170
+ flags: Flags = command.get_registered_flags()
171
+ if flags:
172
+ flags_name: list = [x.get_string_entity().lower() for x in flags]
173
+ if len(set(flags_name)) < len(flags_name):
174
+ raise RepeatedFlagNameException()
173
175
 
174
176
  @staticmethod
175
177
  def _validate_func_args(func: Callable) -> None:
@@ -191,7 +193,7 @@ class Router:
191
193
  if arg_annotation is Response:
192
194
  pass
193
195
  else:
194
- file_path: str = getsourcefile(func)
196
+ file_path: str | None = getsourcefile(func)
195
197
  source_line: int = getsourcelines(func)[1]
196
198
  fprint = Console().print
197
199
  fprint(f'\nFile "{file_path}", line {source_line}\n[b red]WARNING:[/b red] [i]The typehint '
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: argenta
3
- Version: 1.0.5
3
+ Version: 1.0.6
4
4
  Summary: Python library for building modular CLI applications
5
5
  Author-email: kolo <kolo.is.main@gmail.com>
6
6
  License: MIT
@@ -73,7 +73,6 @@ if __name__ == '__main__':
73
73
  # Features in development
74
74
 
75
75
  - Full support for autocompleter on Linux
76
- - Ability to configure stdout capture when handling input by the handler
77
76
 
78
77
  ## Full [docs](https://argenta-docs.vercel.app) | MIT 2025 kolo | made by [kolo](https://t.me/kolo_id)
79
78
 
@@ -1,39 +1,39 @@
1
1
  argenta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  argenta/app/__init__.py,sha256=I8FTXU17ajDI-hbC6Rw0LxLmvDYipdQaos3v1pmu14E,57
3
3
  argenta/app/defaults.py,sha256=TmpHGfEmJeefgJlgW90rfw9xTgssNANRds6JZqKdDrc,379
4
- argenta/app/models.py,sha256=8Kr2605VMa2X7S9_XvLLR1WvOh7Y9mf8VqkWgBqNgfg,19777
4
+ argenta/app/models.py,sha256=lY7ZbKxXUcWdJdsIE_oWv2muheK9sDK2ajgl62ki24A,20726
5
5
  argenta/app/autocompleter/__init__.py,sha256=VT_p3QA78UnczV7pYR2NnwQ0Atd8mnDUnLazvUQNqJk,93
6
- argenta/app/autocompleter/entity.py,sha256=QgEZ2Tzfp9liWBCd-BdRpUE-ELUOxAhPpW7KBLVcPRE,3556
6
+ argenta/app/autocompleter/entity.py,sha256=55yUwlCEPPF8Z4t7y8Fl4DgLyH27qeybynXphDJ6XvM,3562
7
7
  argenta/app/dividing_line/__init__.py,sha256=jJZDDZix8XYCAUWW4FzGJH0JmJlchYcx0FPWifjgv1I,147
8
8
  argenta/app/dividing_line/models.py,sha256=syBTrzcIIt6E6RiaKC9QH3kdAuWLBDNIX0cH7Bnn0mk,2265
9
9
  argenta/app/registered_routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- argenta/app/registered_routers/entity.py,sha256=OH7plYfjQrlyVliXE6OLVD2ftOAd5U1VO6SlyvLNikk,1078
10
+ argenta/app/registered_routers/entity.py,sha256=xTRW3R2dWnSOz8QIsiUVmG8VuMJmyOMUqHzEDDpNX-0,1085
11
11
  argenta/command/__init__.py,sha256=RvacrM84ZwBdVDy4MUwjLTyzQdDQrjjoikZxwh5ov-0,69
12
12
  argenta/command/exceptions.py,sha256=86Gs_9-NutmbSkduEMljtxQHWHhDRFcqyyOKDhQ440o,1060
13
- argenta/command/models.py,sha256=hhW1FJgRrxLg3MP1FkTqp5t1iDuhKyB4l2QCZ7dC76M,7185
13
+ argenta/command/models.py,sha256=aJ06JARGx7oq9I84VfW1VZrG53tPW6tmY6dWuf3GVZE,7114
14
14
  argenta/command/flag/__init__.py,sha256=Xjh_nR4vsHPPHFxQmc5o0673DvbnRkdr_vUaA31GeEk,384
15
15
  argenta/command/flag/defaults.py,sha256=1F9bEngv6tB_yn5lLQg5pxWZSuinryfGGdXnWD7EvuY,1035
16
- argenta/command/flag/models.py,sha256=KAzyoNWVOVLiIT4f8auI15D0TCHosGXHGw_xXRuEtgY,3875
16
+ argenta/command/flag/models.py,sha256=J3KYso6lVzMaOrITZvEANBlJPeib1P-GR4Lif0KRlE0,3882
17
17
  argenta/command/flag/flags/__init__.py,sha256=-HfdBZ3WXrjMrM8vEDWg0LLOLuQafqncrjw9KVFyqoE,294
18
18
  argenta/command/flag/flags/models.py,sha256=U4nOwCqsCOURGigTKiQx07zBUKj0EoY0fCwgTNq4GIg,2332
19
19
  argenta/metrics/__init__.py,sha256=PPLFPxhe4j7r6hP1P1pk0A_gnXgylbTaHqopky872AU,109
20
- argenta/metrics/main.py,sha256=tMMrbpUIiW4BjYLhB7yWYK4mSBdjppeZtslf4VoXPsI,514
20
+ argenta/metrics/main.py,sha256=c8Ktthxa985kcgXQ-iYBHoFsFr5gtCa-5m1QlSPBleY,488
21
21
  argenta/orchestrator/__init__.py,sha256=vFtJEJTjFfoYP3DZx0gNlhoa0Tk8u-yzkGIUN3SiABA,86
22
- argenta/orchestrator/entity.py,sha256=kgTHGrbWdsTDR7aAKv2Bvm8pO7LKFv7v8Dv1LDsdrTo,1093
22
+ argenta/orchestrator/entity.py,sha256=I0HWZnpoD0Pen5azeTBh8s-CFU8vs0bTILpgRls-1hI,1098
23
23
  argenta/orchestrator/argparser/__init__.py,sha256=akbTPC5CfNrgJTVVu1A2E9KeI8KPN4JnMM8M8U21jc8,90
24
24
  argenta/orchestrator/argparser/entity.py,sha256=i3lCsCr_8JT09OosvxRuRD7KKP1MgeNFYz5kTTTqu9Q,2087
25
25
  argenta/orchestrator/argparser/arguments/__init__.py,sha256=lRsKyJeiibPYhFZoeB3BRfIYM4mlUFp6nZpy9RdbgYg,213
26
26
  argenta/orchestrator/argparser/arguments/models.py,sha256=wF4rIaEAx9Rt-c6rAeq6kZLfNPTn4v9WBNt9JHzJ0RA,1548
27
27
  argenta/response/__init__.py,sha256=u4NuwUQkWa55aX67hTQs_B_gIaZ9Dn4Fe7xhSFQ_Rpw,128
28
- argenta/response/entity.py,sha256=urzUQmZxk7BNGJj9tR9AcrTNM5dDLUiGLJDg3VdhDVk,1047
28
+ argenta/response/entity.py,sha256=vUVeiOp8BbuUW2VRtyQlFMQ_-KkQPjOgz9p7DxwyoeE,1054
29
29
  argenta/response/status.py,sha256=bWFMHvyIHpOA4LxUQFoSpld-F8gu183M9nY-zN-MiZM,244
30
30
  argenta/router/__init__.py,sha256=rvqAx80IXHFdVw7cWBRGaTtb94a4OQQEsMJ5f7YA1gU,68
31
31
  argenta/router/defaults.py,sha256=vvkwFYCQdwjtMntfyrJuisxFX8XxeyhDMA-RwteHZGg,87
32
- argenta/router/entity.py,sha256=7vRhw8_U-gKb2KoKXBCYr8q0inuDQsGrxV49abt6bwU,9607
32
+ argenta/router/entity.py,sha256=dYkAdmHWj2-0y6RH8lDSoLs6gjbtwGoANPe2VzJEbnc,10058
33
33
  argenta/router/exceptions.py,sha256=5k0mTHYYItWHzGC0NU5oHHYrHxU0M5fEbO5wne_wFg8,860
34
34
  argenta/router/command_handler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- argenta/router/command_handler/entity.py,sha256=xmHgbXBvD_-JMLpUPc5w3VVe-upTJ-y4lR13rUiiygo,2387
36
- argenta-1.0.5.dist-info/METADATA,sha256=4achR5RDIS460uWEATjty-kIc7Q6OVqLvspnCwVMaTU,1649
37
- argenta-1.0.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
38
- argenta-1.0.5.dist-info/licenses/LICENSE,sha256=zmqoGh2n5rReBv4s8wPxF_gZEZDgauJYSPMuPczgOiU,1082
39
- argenta-1.0.5.dist-info/RECORD,,
35
+ argenta/router/command_handler/entity.py,sha256=ascEf3AzYcWh-G5cml08WOoRr2q9QkfLP2IaKC1iKWM,2394
36
+ argenta-1.0.6.dist-info/METADATA,sha256=eWiuw7lBvYabikTozeG_PQV_9U2XITr9WK_0Sf1pelA,1576
37
+ argenta-1.0.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
38
+ argenta-1.0.6.dist-info/licenses/LICENSE,sha256=zmqoGh2n5rReBv4s8wPxF_gZEZDgauJYSPMuPczgOiU,1082
39
+ argenta-1.0.6.dist-info/RECORD,,