mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
123 lines
3.6 KiB
Python
123 lines
3.6 KiB
Python
from typing import Literal, Pattern
|
|
from abc import ABC, abstractmethod
|
|
|
|
|
|
class BaseFlag(ABC):
|
|
def __init__(self, name: str,
|
|
prefix: Literal['-', '--', '---'] = '--') -> None:
|
|
"""
|
|
Private. Base class for flags
|
|
:param name: the name of the flag
|
|
:param prefix: the prefix of the flag
|
|
:return: None
|
|
"""
|
|
self._name = name
|
|
self._prefix = prefix
|
|
|
|
def get_string_entity(self) -> str:
|
|
"""
|
|
Public. Returns a string representation of the flag
|
|
:return: string representation of the flag as str
|
|
"""
|
|
string_entity: str = self._prefix + self._name
|
|
return string_entity
|
|
|
|
def get_name(self) -> str:
|
|
"""
|
|
Public. Returns the name of the flag
|
|
:return: the name of the flag as str
|
|
"""
|
|
return self._name
|
|
|
|
def get_prefix(self) -> str:
|
|
"""
|
|
Public. Returns the prefix of the flag
|
|
:return: the prefix of the flag as str
|
|
"""
|
|
return self._prefix
|
|
|
|
|
|
|
|
class Flag(BaseFlag):
|
|
def __init__(self, name: str,
|
|
prefix: Literal['-', '--', '---'] = '--',
|
|
possible_values: list[str] | Pattern[str] | False = True) -> None:
|
|
"""
|
|
Public. The entity of the flag being registered for subsequent processing
|
|
:param name: The name of the flag
|
|
:param prefix: The prefix of the flag
|
|
:param possible_values: The possible values of the flag, if False then the flag cannot have a value
|
|
:return: None
|
|
"""
|
|
super().__init__(name, prefix)
|
|
self.possible_values = possible_values
|
|
|
|
def validate_input_flag_value(self, input_flag_value: str | None):
|
|
"""
|
|
Private. Validates the input flag value
|
|
:param input_flag_value: The input flag value to validate
|
|
:return: whether the entered flag is valid as bool
|
|
"""
|
|
if self.possible_values is False:
|
|
if input_flag_value is None:
|
|
return True
|
|
else:
|
|
return False
|
|
elif isinstance(self.possible_values, Pattern):
|
|
if isinstance(input_flag_value, str):
|
|
is_valid = bool(self.possible_values.match(input_flag_value))
|
|
if bool(is_valid):
|
|
return True
|
|
else:
|
|
return False
|
|
else:
|
|
return False
|
|
|
|
elif isinstance(self.possible_values, list):
|
|
if input_flag_value in self.possible_values:
|
|
return True
|
|
else:
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
|
|
class ValidInputFlag(BaseFlag):
|
|
def __init__(self, name: str,
|
|
prefix: Literal['-', '--', '---'] = '--',
|
|
value: str = None):
|
|
"""
|
|
Public. The entity of the flag of the entered command
|
|
:param name: the name of the input flag
|
|
:param prefix: the prefix of the input flag
|
|
:param value: the value of the input flag
|
|
:return: None
|
|
"""
|
|
super().__init__(name, prefix)
|
|
self._flag_value = value
|
|
|
|
def get_value(self) -> str | None:
|
|
"""
|
|
Public. Returns the value of the flag
|
|
:return: the value of the flag as str
|
|
"""
|
|
return self._flag_value
|
|
|
|
def set_value(self, value):
|
|
"""
|
|
Private. Sets the value of the flag
|
|
:param value: the fag value to set
|
|
:return: None
|
|
"""
|
|
self._flag_value = value
|
|
|
|
|
|
|
|
class UndefinedInputFlag(ValidInputFlag): pass
|
|
|
|
|
|
|
|
class InvalidValueInputFlag(ValidInputFlag): pass
|
|
|