argenta 1.0.6__py3-none-any.whl → 1.1.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.
@@ -1,42 +1,49 @@
1
1
  from argenta.command.flag.models import Flag, InputFlag
2
+ from abc import ABC, abstractmethod
3
+ from typing import override
2
4
 
3
5
 
4
- class BaseInputCommandException(Exception):
6
+ class InputCommandException(ABC, Exception):
5
7
  """
6
8
  Private. Base exception class for all exceptions raised when parse input command
7
9
  """
10
+ @override
11
+ @abstractmethod
12
+ def __str__(self) -> str:
13
+ raise NotImplementedError
8
14
 
9
- pass
10
15
 
11
-
12
- class UnprocessedInputFlagException(BaseInputCommandException):
16
+ class UnprocessedInputFlagException(InputCommandException):
13
17
  """
14
18
  Private. Raised when an unprocessed input flag is detected
15
19
  """
16
-
17
- def __str__(self):
20
+ @override
21
+ def __str__(self) -> str:
18
22
  return "Unprocessed Input Flags"
19
23
 
20
24
 
21
- class RepeatedInputFlagsException(BaseInputCommandException):
25
+ class RepeatedInputFlagsException(InputCommandException):
22
26
  """
23
27
  Private. Raised when repeated input flags are detected
24
28
  """
25
29
 
26
30
  def __init__(self, flag: Flag | InputFlag):
27
- self.flag = flag
31
+ self.flag: Flag | InputFlag = flag
32
+ super().__init__()
28
33
 
29
- def __str__(self):
34
+ @override
35
+ def __str__(self) -> str:
36
+ string_entity: str = self.flag.string_entity
30
37
  return (
31
38
  "Repeated Input Flags\n"
32
- f"Duplicate flag was detected in the input: '{self.flag.get_string_entity()}'"
39
+ f"Duplicate flag was detected in the input: '{string_entity}'"
33
40
  )
34
41
 
35
42
 
36
- class EmptyInputCommandException(BaseInputCommandException):
43
+ class EmptyInputCommandException(InputCommandException):
37
44
  """
38
45
  Private. Raised when an empty input command is detected
39
46
  """
40
-
41
- def __str__(self):
47
+ @override
48
+ def __str__(self) -> str:
42
49
  return "Input Command is empty"
@@ -1,7 +1,11 @@
1
- __all__ = ["Flag", "InputFlag", "UndefinedInputFlags", "ValidInputFlags", "InvalidValueInputFlags", "Flags"]
1
+ __all__ = [
2
+ "Flag",
3
+ "InputFlag",
4
+ "Flags",
5
+ "PossibleValues",
6
+ "ValidationStatus"
7
+ ]
2
8
 
3
9
 
4
- from argenta.command.flag.models import Flag, InputFlag
5
- from argenta.command.flag.flags.models import (UndefinedInputFlags,
6
- ValidInputFlags, Flags,
7
- InvalidValueInputFlags)
10
+ from argenta.command.flag.models import Flag, InputFlag, PossibleValues, ValidationStatus
11
+ from argenta.command.flag.flags.models import Flags
@@ -1,31 +1,27 @@
1
- from dataclasses import dataclass
2
- from argenta.command.flag.models import Flag
3
- import re
1
+ from typing import Literal
2
+ from argenta.command.flag.models import Flag, PossibleValues
3
+ import re
4
4
 
5
5
 
6
- @dataclass
7
- class PredefinedFlags:
8
- """
9
- Public. A dataclass with predefined flags and most frequently used flags for quick use
10
- """
6
+ DEFAULT_PREFIX: Literal["-", "--", "---"] = "-"
11
7
 
12
- HELP = Flag(name="help", possible_values=False)
13
- SHORT_HELP = Flag(name="H", prefix="-", possible_values=False)
8
+ HELP = Flag(name="help", possible_values=PossibleValues.NEITHER)
9
+ SHORT_HELP = Flag(name="H", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
14
10
 
15
- INFO = Flag(name="info", possible_values=False)
16
- SHORT_INFO = Flag(name="I", prefix="-", possible_values=False)
11
+ INFO = Flag(name="info", possible_values=PossibleValues.NEITHER) # noqa: WPS110
12
+ SHORT_INFO = Flag(name="I", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
17
13
 
18
- ALL = Flag(name="all", possible_values=False)
19
- SHORT_ALL = Flag(name="A", prefix="-", possible_values=False)
14
+ ALL = Flag(name="all", possible_values=PossibleValues.NEITHER)
15
+ SHORT_ALL = Flag(name="A", prefix=DEFAULT_PREFIX, possible_values=PossibleValues.NEITHER)
20
16
 
21
- HOST = Flag(
22
- name="host", possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
23
- )
24
- SHORT_HOST = Flag(
25
- name="H",
26
- prefix="-",
27
- possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"),
28
- )
17
+ HOST = Flag(
18
+ name="host", possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
19
+ )
20
+ SHORT_HOST = Flag(
21
+ name="H",
22
+ prefix=DEFAULT_PREFIX,
23
+ possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"),
24
+ )
29
25
 
30
- PORT = Flag(name="port", possible_values=re.compile(r"^\d{1,5}$"))
31
- SHORT_PORT = Flag(name="P", prefix="-", possible_values=re.compile(r"^\d{1,5}$"))
26
+ PORT = Flag(name="port", possible_values=re.compile(r"^\d{1,5}$"))
27
+ SHORT_PORT = Flag(name="P", prefix=DEFAULT_PREFIX, possible_values=re.compile(r"^\d{1,5}$"))
@@ -1,16 +1,10 @@
1
1
  __all__ = [
2
2
  "Flags",
3
- "InputFlags",
4
- "UndefinedInputFlags",
5
- "InvalidValueInputFlags",
6
- "ValidInputFlags",
3
+ "InputFlags"
7
4
  ]
8
5
 
9
6
 
10
7
  from argenta.command.flag.flags.models import (
11
8
  Flags,
12
- InputFlags,
13
- UndefinedInputFlags,
14
- InvalidValueInputFlags,
15
- ValidInputFlags,
9
+ InputFlags
16
10
  )
@@ -1,90 +1,106 @@
1
1
  from argenta.command.flag.models import InputFlag, Flag
2
- from typing import Generic, TypeVar
2
+ from typing import Generic, TypeVar, override
3
+ from collections.abc import Iterator
3
4
 
4
5
 
5
6
  FlagType = TypeVar("FlagType")
6
7
 
7
8
 
8
9
  class BaseFlags(Generic[FlagType]):
9
- def __init__(self, *flags: FlagType):
10
+ def __init__(self, flags: list[FlagType] | None = None) -> None:
10
11
  """
11
12
  Public. A model that combines the registered flags
12
13
  :param flags: the flags that will be registered
13
14
  :return: None
14
15
  """
15
- self._flags = flags if flags else []
16
+ self.flags: list[FlagType] = flags if flags else []
16
17
 
17
- def get_flags(self) -> list[FlagType]:
18
- """
19
- Public. Returns a list of flags
20
- :return: list of flags as list[FlagType]
21
- """
22
- return self._flags
23
-
24
- def add_flag(self, flag: FlagType):
18
+ def add_flag(self, flag: FlagType) -> None:
25
19
  """
26
20
  Public. Adds a flag to the list of flags
27
21
  :param flag: flag to add
28
22
  :return: None
29
23
  """
30
- self._flags.append(flag)
24
+ self.flags.append(flag)
31
25
 
32
- def add_flags(self, flags: list[FlagType]):
26
+ def add_flags(self, flags: list[FlagType]) -> None:
33
27
  """
34
28
  Public. Adds a list of flags to the list of flags
35
29
  :param flags: list of flags to add
36
30
  :return: None
37
31
  """
38
- self._flags.extend(flags)
32
+ self.flags.extend(flags)
33
+
34
+ def __iter__(self) -> Iterator[FlagType]:
35
+ return iter(self.flags)
36
+
37
+ def __next__(self) -> FlagType:
38
+ return next(iter(self))
39
+
40
+ def __getitem__(self, flag_index: int) -> FlagType:
41
+ return self.flags[flag_index]
42
+
43
+ def __bool__(self) -> bool:
44
+ return bool(self.flags)
39
45
 
40
- def get_flag(self, name: str) -> FlagType | None:
46
+
47
+ class Flags(BaseFlags[Flag]):
48
+ def get_flag_by_name(self, name: str) -> Flag | None:
41
49
  """
42
50
  Public. Returns the flag entity by its name or None if not found
43
51
  :param name: the name of the flag to get
44
52
  :return: entity of the flag or None
45
53
  """
46
- if name in [flag.get_name() for flag in self._flags]:
47
- return list(filter(lambda flag: flag.get_name() == name, self._flags))[0]
48
- else:
49
- return None
50
-
51
- def __iter__(self):
52
- return iter(self._flags)
53
-
54
- def __next__(self):
55
- return next(iter(self))
56
-
57
- def __getitem__(self, item):
58
- return self._flags[item]
54
+ return next((flag for flag in self.flags if flag.name == name), None)
55
+
56
+ @override
57
+ def __eq__(self, other: object) -> bool:
58
+ if not isinstance(other, Flags):
59
+ return NotImplemented
60
+
61
+ if len(self.flags) != len(other.flags):
62
+ return False
59
63
 
60
- def __bool__(self):
61
- return bool(self._flags)
64
+ flag_pairs: zip[tuple[Flag, Flag]] = zip(self.flags, other.flags)
65
+ return all(s_flag == o_flag for s_flag, o_flag in flag_pairs)
62
66
 
63
- def __eq__(self, other):
64
- if len(self.get_flags()) != len(other.get_flags()):
67
+ def __contains__(self, flag_to_check: object) -> bool:
68
+ if isinstance(flag_to_check, Flag):
69
+ for flag in self.flags:
70
+ if flag == flag_to_check:
71
+ return True
65
72
  return False
66
73
  else:
67
- for flag, other_flag in zip(self.get_flags(), other.get_flags()):
68
- if not flag == other_flag:
69
- return False
70
- return True
71
-
72
-
73
- class Flags(BaseFlags[Flag]):
74
- pass
74
+ raise TypeError
75
75
 
76
76
 
77
77
  class InputFlags(BaseFlags[InputFlag]):
78
- pass
79
-
80
-
81
- class ValidInputFlags(InputFlags):
82
- pass
78
+ def get_flag_by_name(self, name: str) -> InputFlag | None:
79
+ """
80
+ Public. Returns the flag entity by its name or None if not found
81
+ :param name: the name of the flag to get
82
+ :return: entity of the flag or None
83
+ """
84
+ return next((flag for flag in self.flags if flag.name == name), None)
85
+
86
+ @override
87
+ def __eq__(self, other: object) -> bool:
88
+ if not isinstance(other, InputFlags):
89
+ raise NotImplementedError
90
+
91
+ if len(self.flags) != len(other.flags):
92
+ return False
83
93
 
94
+ paired_flags: zip[tuple[InputFlag, InputFlag]] = zip(self.flags, other.flags)
84
95
 
85
- class UndefinedInputFlags(InputFlags):
86
- pass
96
+ return all(my_flag == other_flag for my_flag, other_flag in paired_flags)
87
97
 
98
+ def __contains__(self, ingressable_item: object) -> bool:
99
+ if isinstance(ingressable_item, InputFlag):
100
+ for flag in self.flags:
101
+ if flag == ingressable_item:
102
+ return True
103
+ return False
104
+ else:
105
+ raise TypeError
88
106
 
89
- class InvalidValueInputFlags(InputFlags):
90
- pass
@@ -1,49 +1,24 @@
1
- from typing import Literal, Pattern
1
+ from enum import Enum
2
+ from re import Pattern
3
+ from typing import Literal, override
2
4
 
3
5
 
4
- class BaseFlag:
5
- def __init__(self, name: str, prefix: Literal["-", "--", "---"] = "--") -> None:
6
- """
7
- Private. Base class for flags
8
- :param name: the name of the flag
9
- :param prefix: the prefix of the flag
10
- :return: None
11
- """
12
- self._name = name
13
- self._prefix = prefix
6
+ class PossibleValues(Enum):
7
+ NEITHER = 'NEITHER'
8
+ ALL = 'ALL'
14
9
 
15
- def get_string_entity(self) -> str:
16
- """
17
- Public. Returns a string representation of the flag
18
- :return: string representation of the flag as str
19
- """
20
- string_entity: str = self._prefix + self._name
21
- return string_entity
22
10
 
23
- def get_name(self) -> str:
24
- """
25
- Public. Returns the name of the flag
26
- :return: the name of the flag as str
27
- """
28
- return self._name
11
+ class ValidationStatus(Enum):
12
+ VALID = 'VALID'
13
+ INVALID = 'INVALID'
14
+ UNDEFINED = 'UNDEFINED'
29
15
 
30
- def get_prefix(self) -> str:
31
- """
32
- Public. Returns the prefix of the flag
33
- :return: the prefix of the flag as str
34
- """
35
- return self._prefix
36
16
 
37
- def __eq__(self, other) -> bool:
38
- return self.get_string_entity() == other.get_string_entity()
39
-
40
-
41
- class Flag(BaseFlag):
17
+ class Flag:
42
18
  def __init__(
43
- self,
44
- name: str,
19
+ self, name: str, *,
45
20
  prefix: Literal["-", "--", "---"] = "--",
46
- possible_values: list[str] | Pattern[str] | False = True,
21
+ possible_values: list[str] | Pattern[str] | PossibleValues = PossibleValues.ALL,
47
22
  ) -> None:
48
23
  """
49
24
  Public. The entity of the flag being registered for subsequent processing
@@ -52,42 +27,58 @@ class Flag(BaseFlag):
52
27
  :param possible_values: The possible values of the flag, if False then the flag cannot have a value
53
28
  :return: None
54
29
  """
55
- super().__init__(name, prefix)
56
- self.possible_values = possible_values
30
+ self.name: str = name
31
+ self.prefix: Literal["-", "--", "---"] = prefix
32
+ self.possible_values: list[str] | Pattern[str] | PossibleValues = possible_values
57
33
 
58
- def validate_input_flag_value(self, input_flag_value: str | None):
34
+ def validate_input_flag_value(self, input_flag_value: str | None) -> bool:
59
35
  """
60
36
  Private. Validates the input flag value
61
37
  :param input_flag_value: The input flag value to validate
62
38
  :return: whether the entered flag is valid as bool
63
39
  """
64
- if self.possible_values is False:
65
- if input_flag_value is None:
66
- return True
67
- else:
68
- return False
69
- elif isinstance(self.possible_values, Pattern):
70
- if isinstance(input_flag_value, str):
71
- is_valid = bool(self.possible_values.match(input_flag_value))
72
- if bool(is_valid):
73
- return True
74
- else:
75
- return False
76
- else:
77
- return False
40
+ if self.possible_values == PossibleValues.NEITHER:
41
+ return input_flag_value is None
42
+
43
+ if isinstance(self.possible_values, Pattern):
44
+ return isinstance(input_flag_value, str) and bool(self.possible_values.match(input_flag_value))
78
45
 
79
- elif isinstance(self.possible_values, list):
80
- if input_flag_value in self.possible_values:
81
- return True
82
- else:
83
- return False
46
+ if isinstance(self.possible_values, list):
47
+ return input_flag_value in self.possible_values
48
+
49
+ return True
50
+
51
+ @property
52
+ def string_entity(self) -> str:
53
+ """
54
+ Public. Returns a string representation of the flag
55
+ :return: string representation of the flag as str
56
+ """
57
+ string_entity: str = self.prefix + self.name
58
+ return string_entity
59
+
60
+ @override
61
+ def __str__(self) -> str:
62
+ return self.string_entity
63
+
64
+ @override
65
+ def __repr__(self) -> str:
66
+ return f'Flag<name={self.name}, prefix={self.prefix}>'
67
+
68
+ @override
69
+ def __eq__(self, other: object) -> bool:
70
+ if isinstance(other, Flag):
71
+ return self.string_entity == other.string_entity
84
72
  else:
85
- return True
73
+ raise NotImplementedError
86
74
 
87
75
 
88
- class InputFlag(BaseFlag):
76
+ class InputFlag:
89
77
  def __init__(
90
- self, name: str, prefix: Literal["-", "--", "---"] = "--", value: str | None = None
78
+ self, name: str, *,
79
+ prefix: Literal['-', '--', '---'] = '--',
80
+ input_value: str | None,
81
+ status: ValidationStatus | None
91
82
  ):
92
83
  """
93
84
  Public. The entity of the flag of the entered command
@@ -96,26 +87,33 @@ class InputFlag(BaseFlag):
96
87
  :param value: the value of the input flag
97
88
  :return: None
98
89
  """
99
- super().__init__(name, prefix)
100
- self._flag_value = value
101
-
102
- def get_value(self) -> str | None:
90
+ self.name: str = name
91
+ self.prefix: Literal['-', '--', '---'] = prefix
92
+ self.input_value: str | None = input_value
93
+ self.status: ValidationStatus | None = status
94
+
95
+ @property
96
+ def string_entity(self) -> str:
103
97
  """
104
- Public. Returns the value of the flag
105
- :return: the value of the flag as str
98
+ Public. Returns a string representation of the flag
99
+ :return: string representation of the flag as str
106
100
  """
107
- return self._flag_value
101
+ string_entity: str = self.prefix + self.name
102
+ return string_entity
108
103
 
109
- def set_value(self, value):
110
- """
111
- Private. Sets the value of the flag
112
- :param value: the fag value to set
113
- :return: None
114
- """
115
- self._flag_value = value
104
+ @override
105
+ def __str__(self) -> str:
106
+ return f'{self.string_entity} {self.input_value}'
107
+
108
+ @override
109
+ def __repr__(self) -> str:
110
+ return f'InputFlag<name={self.name}, prefix={self.prefix}, value={self.input_value}, status={self.status}>'
116
111
 
117
- def __eq__(self, other) -> bool:
118
- return (
119
- self.get_string_entity() == other.get_string_entity()
120
- and self.get_value() == other.get_value()
121
- )
112
+ @override
113
+ def __eq__(self, other: object) -> bool:
114
+ if isinstance(other, InputFlag):
115
+ return (
116
+ self.name == other.name
117
+ )
118
+ else:
119
+ raise NotImplementedError