20251007
This commit is contained in:
17
.run/Тест GUID.run.xml
Normal file
17
.run/Тест GUID.run.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Тест GUID" type="tests" factoryName="Autodetect">
|
||||
<module name="anb_python_components" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests/types" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="_new_additionalArguments" value="""" />
|
||||
<option name="_new_target" value=""$PROJECT_DIR$/tests/types/guid_test.py"" />
|
||||
<option name="_new_targetType" value=""PATH"" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
17
.run/Тест TwoDimSize.run.xml
Normal file
17
.run/Тест TwoDimSize.run.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Тест TwoDimSize" type="tests" factoryName="Autodetect">
|
||||
<module name="anb_python_components" />
|
||||
<option name="ENV_FILES" value="" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests/types" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="_new_additionalArguments" value="""" />
|
||||
<option name="_new_target" value=""$PROJECT_DIR$/tests/types/two_dim_size_test.py"" />
|
||||
<option name="_new_targetType" value=""PATH"" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
@@ -59,12 +59,12 @@ class TwoDimSize:
|
||||
"""
|
||||
|
||||
# Если некорректно заданы минимальные и максимальные значения ширины
|
||||
if min_width > max_width:
|
||||
if min_width is not None and max_width is not None and min_width > max_width:
|
||||
# - то выбрасываю исключение
|
||||
raise ValueError("Минимальная ширина не может быть больше максимальной.")
|
||||
|
||||
# Если некорректно заданы минимальные и максимальные значения высоты
|
||||
elif min_height > max_height:
|
||||
elif min_height is not None and max_height is not None and min_height > max_height:
|
||||
# - то выбрасываю исключение
|
||||
raise ValueError("Минимальная высота не может быть больше максимальной.")
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# Класс `GUID`
|
||||
# Тип `GUID`
|
||||
|
||||
Класс `GUID` представляет реализацию уникального глобального идентификатора (Global Unique Identifier), широко
|
||||
применяемого в разработке программного обеспечения для уникальной идентификации сущностей. Данный класс добавляет
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# Класс `TwoDimSize`
|
||||
# Тип `TwoDimSize`
|
||||
|
||||
Класс `TwoDimSize` предназначен для работы с двумерными размерами, такими как ширина и высота. Он предоставляет ряд
|
||||
инструментов для эффективного управления и обработки размеров, включая ограничение минимальных/максимальных границ,
|
||||
|
108
help/class_desc/types/version_info.md
Normal file
108
help/class_desc/types/version_info.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Тип `VersionInfo`
|
||||
|
||||
Класс `VersionInfo` предназначен для эффективной работы с версиями программного обеспечения, обеспечивая гибкую
|
||||
структуру и удобные механизмы для представления, сопоставления и форматирования версий.
|
||||
|
||||
## Основная информация
|
||||
|
||||
- **Имя файла**: anb_python_components\types\version_info.py
|
||||
- **Автор**: Александр Бабаев
|
||||
- **Версия**: 1.0.0
|
||||
- **Дата начала поддержки**: с версии 1.0
|
||||
|
||||
## Атрибуты и методы класса
|
||||
|
||||
### Конструктор (`__init__`)
|
||||
|
||||
Конструктор принимает обязательные и необязательные параметры для детализации версии:
|
||||
|
||||
- `major: int`: Майор-версия (обязательно).
|
||||
- `minor: int`: Минор-версия (обязательно).
|
||||
- `release: int`: Релиз-версия (обязательно).
|
||||
- `build: int`: Номер билда (обязательно).
|
||||
- `stage: str = ''`: Текущая стадия жизненного цикла продукта (например, альфа, бета, RC).
|
||||
- `stage_number: int = 0`: Номер этапа развития (по умолчанию 0).
|
||||
|
||||
Пример использования:
|
||||
|
||||
```python
|
||||
from anb_python_components.types.version_info import VersionInfo
|
||||
|
||||
version = VersionInfo(1, 2, 3, 4, "beta", 1)
|
||||
```
|
||||
|
||||
### Свойства
|
||||
|
||||
- `major: int`, `minor: int`, `release: int`, `build: int`: Числовые составляющие версии, доступные как для чтения, так
|
||||
и для записи.
|
||||
- `stage: str`: Строковое свойство, характеризующее этап разработки (альфа, бета и т.п.).
|
||||
- `stage_number: int`: Целевое свойство, отражающее номер стадии.
|
||||
|
||||
### Основные методы
|
||||
|
||||
#### Метод `to_string`
|
||||
|
||||
Преобразует версию в строку с использованием шаблона, указанного в параметрах. По умолчанию выводит стандартный формат.
|
||||
|
||||
**Пример использования**:
|
||||
|
||||
```python
|
||||
from anb_python_components.types.version_info import VersionInfo
|
||||
|
||||
version = VersionInfo(1, 2, 3, 4, "RC", 1)
|
||||
print(version.to_string()) # 1.2.3.4 RC 1
|
||||
```
|
||||
|
||||
#### Метод `in_range`
|
||||
|
||||
Проверяет, попадает ли данная версия в заданный диапазон.
|
||||
|
||||
**Пример использования**:
|
||||
|
||||
```python
|
||||
from anb_python_components.types.version_info import VersionInfo
|
||||
|
||||
current_version = VersionInfo(1, 2, 3, 4)
|
||||
start_version = VersionInfo(1, 1, 0, 0)
|
||||
end_version = VersionInfo(2, 0, 0, 0)
|
||||
|
||||
print(current_version.in_range(start = start_version, end = end_version)) # True
|
||||
```
|
||||
|
||||
#### Метод `parse`
|
||||
|
||||
Разбирает строку, содержащую версию, и создаёт экземпляр класса `VersionInfo`.
|
||||
|
||||
**Пример использования**:
|
||||
|
||||
```python
|
||||
from anb_python_components.types.version_info import VersionInfo
|
||||
|
||||
version = VersionInfo.parse("1.2.3 beta 1")
|
||||
print(version.major) # 1
|
||||
print(version.stage) # beta
|
||||
```
|
||||
|
||||
### Магические методы
|
||||
|
||||
- `__str__`, `__repr__`: Форматируют объект в удобочитаемую строку.
|
||||
- `__eq__`, `__ne__`, `__lt__`, `__gt__`, `__le__`, `__ge__`: Реализуют операции сравнения
|
||||
версий.
|
||||
|
||||
**Пример использования**:
|
||||
|
||||
```python
|
||||
from anb_python_components.types.version_info import VersionInfo
|
||||
|
||||
ver1 = VersionInfo(1, 2, 3, 4)
|
||||
ver2 = VersionInfo(1, 2, 3, 5)
|
||||
|
||||
print(ver1 < ver2) # True
|
||||
```
|
||||
|
||||
## Заключение
|
||||
|
||||
Класс `VersionInfo` обеспечивает универсальность и простоту работы с версиями продуктов, предоставляя удобные средства
|
||||
для форматирования, сравнения и парсинга версий.
|
||||
|
||||
[На главную](../../index.md)
|
@@ -44,6 +44,7 @@
|
||||
|
||||
- [тип `GUID`](class_desc/types/guid.md)
|
||||
- [тип `TwoDimSize`](class_desc/types/two_dim_size.md)
|
||||
- [тип `VersionInfo`](class_desc/types/version_info.md)
|
||||
|
||||
### Модели
|
||||
|
||||
|
@@ -1,78 +1,14 @@
|
||||
# anb_python_components/types/guid.py
|
||||
import re
|
||||
# guid_test.py
|
||||
|
||||
from anb_python_components.exceptions.wrong_type_exception import WrongTypeException
|
||||
import unittest
|
||||
|
||||
class GUID:
|
||||
"""
|
||||
Тип GUID.
|
||||
"""
|
||||
|
||||
# Константа пустого GUID
|
||||
EMPTY: str = "00000000-0000-0000-0000-000000000000"
|
||||
|
||||
def __init__ (self, guid = EMPTY):
|
||||
"""
|
||||
Инициализация расширения.
|
||||
:param guid: str | GUID - Передаваемый GUID
|
||||
"""
|
||||
# Проверка типа аргумента guid
|
||||
# - если аргумент не является строкой
|
||||
if not isinstance(guid, str):
|
||||
# -- если аргумент является экземпляром GUID
|
||||
if isinstance(guid, GUID):
|
||||
# - преобразуем его в строку
|
||||
guid = str(guid)
|
||||
else:
|
||||
# -- иначе генерируем исключение
|
||||
raise WrongTypeException("Неверный тип аргумента!", "GUID", str(type(guid)), "guid")
|
||||
from anb_python_components.types.guid import GUID
|
||||
|
||||
class GUIDTest(unittest.TestCase):
|
||||
def test_init (self):
|
||||
guid = GUID('12345678-1234-1234-1234-123456789012', )
|
||||
|
||||
# Проверка GUID на валидность
|
||||
if not self.validate_str(guid):
|
||||
# и если GUID невалидный, то генерируем исключение
|
||||
raise WrongTypeException("Неверный формат GUID!", "GUID", guid, "guid")
|
||||
|
||||
# Инициализируем приватный атрибут __value (текстовое представление хранящегося GUID)
|
||||
self.__value = guid
|
||||
|
||||
def __str__ (self):
|
||||
"""
|
||||
Переопределение метода __str__.
|
||||
:return: Текстовое представление GUID.
|
||||
"""
|
||||
return self.__value if self.__value else self.EMPTY
|
||||
|
||||
def __eq__ (self, other):
|
||||
"""
|
||||
Переопределение метода __eq__.
|
||||
:param other: Объект для сравнения.
|
||||
:return: True, если GUID равны, иначе False.
|
||||
"""
|
||||
|
||||
# Если аргумент не является экземпляром GUID
|
||||
if not isinstance(other, GUID):
|
||||
# - генерируем исключение
|
||||
raise WrongTypeException("Неверный тип аргумента!", "GUID", type(other), "other")
|
||||
|
||||
# Преобразование второго аргумента в строку
|
||||
other_str = str(other)
|
||||
|
||||
# Сравниваем строки
|
||||
return self.__value == other_str
|
||||
|
||||
@staticmethod
|
||||
def validate_str (guid: str | None) -> bool:
|
||||
"""
|
||||
Проверка строки на валидность GUID.
|
||||
:return: True, если GUID валидный, иначе False.
|
||||
"""
|
||||
|
||||
# Проверка на пустоту
|
||||
if not guid:
|
||||
return False
|
||||
|
||||
# Регулярное выражение для проверки формата GUID
|
||||
pattern = r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'
|
||||
|
||||
# Проверка на соответствие формату
|
||||
return bool(re.fullmatch(pattern, guid))
|
||||
self.assertEqual(str(guid), '12345678-1234-1234-1234-123456789012')
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
@@ -1 +1,37 @@
|
||||
# two_dim_size_test.py
|
||||
# two_dim_size_test.py
|
||||
|
||||
import unittest
|
||||
|
||||
from anb_python_components.types.two_dim_size import TwoDimSize
|
||||
|
||||
class TwoDimSizeTest(unittest.TestCase):
|
||||
def test_init (self):
|
||||
size = TwoDimSize(1, 2)
|
||||
|
||||
self.assertEqual(size.width, 1)
|
||||
self.assertEqual(size.height, 2)
|
||||
|
||||
size = TwoDimSize(1, 5, 3, max_height = 4)
|
||||
self.assertEqual(size.width, 3)
|
||||
self.assertEqual(size.height, 4)
|
||||
|
||||
def test_math (self):
|
||||
size_1 = TwoDimSize(1, 2)
|
||||
size_2 = TwoDimSize(3, 4)
|
||||
size_3 = size_1 + size_2
|
||||
|
||||
self.assertEqual(size_3.width, 4)
|
||||
self.assertEqual(size_3.height, 6)
|
||||
|
||||
self.assertTrue(size_3 == TwoDimSize(4, 6))
|
||||
|
||||
def test_parse (self):
|
||||
str_size = "1x2"
|
||||
|
||||
size = TwoDimSize.parse(str_size, 'x')
|
||||
|
||||
self.assertEqual(size.width, 1)
|
||||
self.assertEqual(size.height, 2)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
Reference in New Issue
Block a user