dublib 0.6.2__tar.gz → 0.7.0__tar.gz

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.
Files changed (28) hide show
  1. {dublib-0.6.2/src/dublib.egg-info → dublib-0.7.0}/PKG-INFO +6 -2
  2. {dublib-0.6.2 → dublib-0.7.0}/README.md +5 -1
  3. {dublib-0.6.2 → dublib-0.7.0}/pyproject.toml +1 -1
  4. {dublib-0.6.2/src/dublib → dublib-0.7.0/src/dublib/CLI}/StyledPrinter.py +12 -8
  5. dublib-0.7.0/src/dublib/CLI/Templates.py +33 -0
  6. {dublib-0.6.2/src/dublib/Exceptions → dublib-0.7.0/src/dublib/CLI}/__init__.py +0 -0
  7. {dublib-0.6.2/src/dublib → dublib-0.7.0/src/dublib/Exceptions}/__init__.py +0 -0
  8. dublib-0.6.2/src/dublib/Methods.py → dublib-0.7.0/src/dublib/Methods/Data.py +24 -128
  9. dublib-0.7.0/src/dublib/Methods/Filesystem.py +38 -0
  10. dublib-0.7.0/src/dublib/Methods/JSON.py +28 -0
  11. dublib-0.7.0/src/dublib/Methods/System.py +44 -0
  12. dublib-0.7.0/src/dublib/Methods/__init__.py +0 -0
  13. {dublib-0.6.2 → dublib-0.7.0}/src/dublib/TelebotUtils.py +61 -15
  14. {dublib-0.6.2 → dublib-0.7.0}/src/dublib/Terminalyzer.py +5 -1
  15. dublib-0.7.0/src/dublib/__init__.py +0 -0
  16. {dublib-0.6.2 → dublib-0.7.0/src/dublib.egg-info}/PKG-INFO +6 -2
  17. {dublib-0.6.2 → dublib-0.7.0}/src/dublib.egg-info/SOURCES.txt +10 -4
  18. {dublib-0.6.2 → dublib-0.7.0}/LICENSE +0 -0
  19. {dublib-0.6.2 → dublib-0.7.0}/setup.cfg +0 -0
  20. /dublib-0.6.2/src/dublib/Exceptions/StyledPrinter.py → /dublib-0.7.0/src/dublib/Exceptions/CLI.py +0 -0
  21. {dublib-0.6.2 → dublib-0.7.0}/src/dublib/Exceptions/TelebotUtils.py +0 -0
  22. {dublib-0.6.2 → dublib-0.7.0}/src/dublib/Exceptions/Terminalyzer.py +0 -0
  23. {dublib-0.6.2 → dublib-0.7.0}/src/dublib/Exceptions/WebRequestor.py +0 -0
  24. {dublib-0.6.2 → dublib-0.7.0}/src/dublib/Polyglot.py +0 -0
  25. {dublib-0.6.2 → dublib-0.7.0}/src/dublib/WebRequestor.py +0 -0
  26. {dublib-0.6.2 → dublib-0.7.0}/src/dublib.egg-info/dependency_links.txt +0 -0
  27. {dublib-0.6.2 → dublib-0.7.0}/src/dublib.egg-info/requires.txt +0 -0
  28. {dublib-0.6.2 → dublib-0.7.0}/src/dublib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dublib
3
- Version: 0.6.2
3
+ Version: 0.7.0
4
4
  Summary: Коллекция модулей от DUB1401.
5
5
  Author-email: DUB1401 <vlad.milosta@outlook.com>
6
6
  License: This is free and unencumbered software released into the public domain.
@@ -55,11 +55,15 @@ Requires-Dist: pyTelegramBotAPI; extra == "telebot"
55
55
  # dublib
56
56
  **dublib** – это библиотека, поставляющая компоненты, требующиеся в проектах [@DUB1401](https://github.com/DUB1401), написанных на Python.
57
57
 
58
+ Данный набор модулей распространяется по Rolling-модели. Это значит, что разработчик не заботится об обратной совместимости с прошлыми релизами, потому рекомендуется привязывать ваш проект строго к определённой версии библиотеки.
59
+
60
+ Все компоненты поставляют лишь базовую документацию, необходимую для общего понимания принципов работы. Библиотека является самодокументируемой.
61
+
58
62
  # Поставляемые компоненты
59
63
  Библиотека включает следующие модули:
64
+ * [CLI](https://github.com/DUB1401/dublib/blob/main/docs/CLI.md)
60
65
  * [Methods](https://github.com/DUB1401/dublib/blob/main/docs/Methods.md)
61
66
  * [Polyglot](https://github.com/DUB1401/dublib/blob/main/docs/Polyglot.md)
62
- * [StyledPrinter](https://github.com/DUB1401/dublib/blob/main/docs/StyledPrinter.md)
63
67
  * [TelebotUtils](https://github.com/DUB1401/dublib/blob/main/docs/Terminalyzer.md)
64
68
  * [Terminalyzer](https://github.com/DUB1401/dublib/blob/main/docs/Terminalyzer.md)
65
69
  * [WebRequestor](https://github.com/DUB1401/dublib/blob/main/docs/WebRequestor.md)
@@ -1,11 +1,15 @@
1
1
  # dublib
2
2
  **dublib** – это библиотека, поставляющая компоненты, требующиеся в проектах [@DUB1401](https://github.com/DUB1401), написанных на Python.
3
3
 
4
+ Данный набор модулей распространяется по Rolling-модели. Это значит, что разработчик не заботится об обратной совместимости с прошлыми релизами, потому рекомендуется привязывать ваш проект строго к определённой версии библиотеки.
5
+
6
+ Все компоненты поставляют лишь базовую документацию, необходимую для общего понимания принципов работы. Библиотека является самодокументируемой.
7
+
4
8
  # Поставляемые компоненты
5
9
  Библиотека включает следующие модули:
10
+ * [CLI](https://github.com/DUB1401/dublib/blob/main/docs/CLI.md)
6
11
  * [Methods](https://github.com/DUB1401/dublib/blob/main/docs/Methods.md)
7
12
  * [Polyglot](https://github.com/DUB1401/dublib/blob/main/docs/Polyglot.md)
8
- * [StyledPrinter](https://github.com/DUB1401/dublib/blob/main/docs/StyledPrinter.md)
9
13
  * [TelebotUtils](https://github.com/DUB1401/dublib/blob/main/docs/Terminalyzer.md)
10
14
  * [Terminalyzer](https://github.com/DUB1401/dublib/blob/main/docs/Terminalyzer.md)
11
15
  * [WebRequestor](https://github.com/DUB1401/dublib/blob/main/docs/WebRequestor.md)
@@ -3,7 +3,7 @@ requires = ["setuptools", "cython"]
3
3
 
4
4
  [project]
5
5
  name = "dublib"
6
- version = "0.6.2"
6
+ version = "0.7.0"
7
7
  description = "Коллекция модулей от DUB1401."
8
8
  authors = [
9
9
  {name = "DUB1401", email = "vlad.milosta@outlook.com"}
@@ -1,9 +1,13 @@
1
- from .Exceptions.StyledPrinter import DuplicatedStyles
1
+ from ..Exceptions.CLI import DuplicatedStyles
2
2
 
3
3
  import enum
4
4
 
5
+ #==========================================================================================#
6
+ # >>>>> СТИЛИЗАЦИЯ ТЕКСТА <<<<< #
7
+ #==========================================================================================#
8
+
5
9
  class Styles:
6
- """Содержит перечисления декораций и стилей."""
10
+ """Перечисления декораций и стилей."""
7
11
 
8
12
  class Colors(enum.Enum):
9
13
  """Перечисление цветов."""
@@ -32,11 +36,11 @@ class Styles:
32
36
  Upperlined = "53"
33
37
 
34
38
  class StylesGroup:
35
- """Контейнер стилей. Предоставляет возможность комбинировать стили для их однократной инициализации с последующим многократным использования."""
39
+ """Контейнер стилей. Предоставляет возможность комбинировать стили для их однократной инициализации с последующим многократным использованием."""
36
40
 
37
41
  def __init__(self, decorations: list[Styles.Decorations] = list(), text_color: Styles.Colors | None = None, background_color: Styles.Colors | None = None):
38
42
  """
39
- Контейнер стилей. Предоставляет возможность комбинировать стили для их однократной инициализации с последующим многократным использования.
43
+ Контейнер стилей. Предоставляет возможность комбинировать стили для их однократной инициализации с последующим многократным использованием.
40
44
  decorations – список декораций;
41
45
  text_color – цвет текста;
42
46
  background_color – цвет фона.
@@ -50,9 +54,9 @@ class StylesGroup:
50
54
  # Добавить каждый маркер стиля к общей строке.
51
55
  for Decoration in decorations: self.__StylesMarkers += Decoration.value + ";"
52
56
  # Если передан цвет текста, создать соответствующий маркер.
53
- if TextColor != None: self.__StylesMarkers += "3" + TextColor.value + ";"
57
+ if text_color != None: self.__StylesMarkers += "3" + text_color.value + ";"
54
58
  # Если передан цвет фона, создать соответствующий маркер.
55
- if BackgroundColor != None: self.__StylesMarkers += "4" + BackgroundColor.value + ";"
59
+ if background_color != None: self.__StylesMarkers += "4" + background_color.value + ";"
56
60
  # Постановка завершающего символа маркировки.
57
61
  self.__StylesMarkers = self.__StylesMarkers.rstrip(';') + "m"
58
62
 
@@ -61,7 +65,7 @@ class StylesGroup:
61
65
 
62
66
  def StyledPrinter(text: str, styles: StylesGroup | None = None, decorations: list[Styles.Decorations] = list(), text_color: Styles.Colors | None = None, background_color: Styles.Colors | None = None, autoreset: bool = True, end: bool = True):
63
67
  """
64
- Выводит в терминал стилизованный текст.
68
+ Выводит в терминал стилизованный с помощью ANSI-кодов текст.
65
69
  text – стилизуемый текст;
66
70
  styles – контейнер стилей;
67
71
  decorations – список декораций;
@@ -84,7 +88,7 @@ def StyledPrinter(text: str, styles: StylesGroup | None = None, decorations: lis
84
88
 
85
89
  def TextStyler(text: str, styles: StylesGroup | None = None, decorations: list[Styles.Decorations] = list(), text_color: Styles.Colors | None = None, background_color: Styles.Colors | None = None, autoreset: bool = True) -> str:
86
90
  """
87
- Стилизует текст.
91
+ Стилизует текст с помощью ANSI-кодов.
88
92
  text – стилизуемый текст;
89
93
  styles – контейнер стилей;
90
94
  decorations – список декораций;
@@ -0,0 +1,33 @@
1
+ import readline
2
+
3
+ #==========================================================================================#
4
+ # >>>>> ШАБЛОНЫ ВВОДА-ВЫВОДА <<<<< #
5
+ #==========================================================================================#
6
+
7
+ def Confirmation(text: str, question: str | None = None, yes: str | None = None, no: str | None = None) -> bool:
8
+ """
9
+ Запрашивает подтверждение.
10
+ text – описание вопроса;
11
+ question – строка, обозначающая сам вопрос в используемом языке;
12
+ yes – строка, обозначающая согласие при вводе в консоль;
13
+ yes – строка, обозначающая отсутствие согласия при вводе в консоль.
14
+ """
15
+
16
+ # Ответ.
17
+ Response = None
18
+ # Если не заданы необязательные параметры, использовать стандартные.
19
+ if not question: question = "Confirm?"
20
+ if not yes: yes = "Y"
21
+ if not no: no = "N"
22
+
23
+ # Постоянно.
24
+ while True:
25
+ # Запрос подтверждения.
26
+ InputLine = input(f"{text}\n{question} [{yes}/{no}]: ").strip().lower()
27
+ # Проверка ответов.
28
+ if InputLine == yes.lower(): Response = True
29
+ if InputLine == no.lower(): Response = False
30
+ # Если ответ дан, остановить цикл.
31
+ if Response != None: break
32
+
33
+ return Response
@@ -1,101 +1,44 @@
1
- import shutil
2
- import html
3
- import json
4
- import sys
5
- import os
6
- import re
7
-
8
1
  #==========================================================================================#
9
- # >>>>> ФУНКЦИИ РАБОТЫ С СИСТЕМОЙ <<<<< #
2
+ # >>>>> ФУНКЦИИ ПРОВЕРКИ ДАННЫХ <<<<< #
10
3
  #==========================================================================================#
11
4
 
12
- def CheckPythonMinimalVersion(major: int, minor: int, raise_exception: bool = True) -> bool:
5
+ def CheckForCyrillic(text: str) -> bool:
13
6
  """
14
- Проверяет, соответствует ли используемая версия Python минимальной требуемой.
15
- majorидентификатор Major-версии Python;
16
- minor – идентификатор Minor-версии Python;
17
- raise_exception – указывает, как поступать при несоответствии версии: выбрасывать исключение или возвращать значение.
7
+ Проверяет, имеются ли кирилические символы в строке.
8
+ textпроверяемая строка.
18
9
  """
19
10
 
20
- # Состояние: корректна ли версия.
21
- IsVersionCorrect = True
22
-
23
- # Если версия Python старше минимальной требуемой.
24
- if sys.version_info < (major, minor):
25
-
26
- # Если указано выбросить исключение.
27
- if raise_exception == True:
28
- # Выброс исключения.
29
- raise RuntimeError(f"Python {major}.{minor} or newer is required.")
30
-
31
- else:
32
- # Переключение статуса проверки.
33
- IsVersionCorrect = False
34
-
35
- return IsVersionCorrect
36
-
37
- def Cls():
38
- """Очищает консоль."""
39
-
40
- os.system("cls" if os.name == "nt" else "clear")
11
+ # Русский алфавит в нижнем регистре.
12
+ Alphabet = set("абвгдеёжзийклмнопрстуфхцчшщъыьэюя")
13
+ # Состояние: содержит ли строка кирилические символы.
14
+ IsTextContainsCyrillicCharacters = not Alphabet.isdisjoint(text.lower())
41
15
 
42
- def MakeRootDirectories(directories: list[str]):
43
- """
44
- Создаёт каталоги в текущей корневой директории скрипта.
45
- directories – список названий каталогов.
46
- """
47
-
48
- # Для каждого названия каталога.
49
- for Name in directories:
50
- # Если каталог не существует, то создать его.
51
- if os.path.exists(Name) == False: os.makedirs(Name)
16
+ return IsTextContainsCyrillicCharacters
52
17
 
53
- def RemoveFolderContent(path: str):
18
+ def IsNotAlpha(text: str) -> bool:
54
19
  """
55
- Удаляет всё содержимое каталога.
56
- path – путь к каталогу.
20
+ Проверяет, состоит ли строка целиком из небуквенных символов.
57
21
  """
58
22
 
59
- # Список содержимого в папке.
60
- FolderContent = os.listdir(path)
61
-
62
- # Для каждого элемента.
63
- for Item in FolderContent:
64
-
65
- # Если элемент является каталогом.
66
- if os.path.isdir(path + "/" + Item):
67
- # Удаление каталога.
68
- shutil.rmtree(path + "/" + Item)
23
+ # Результат проверки.
24
+ Result = True
69
25
 
70
- else:
71
- # Удаление файла.
72
- os.remove(path + "/" + Item)
26
+ # Для каждого символа в строке.
27
+ for Character in text:
73
28
 
74
- def Shutdown():
75
- """Выключает устройство."""
29
+ # Если символ является буквой.
30
+ if Character.isalpha():
31
+ # Изменение результата.
32
+ Result = False
33
+ # Прерывание цикла.
34
+ break
76
35
 
77
- # Если устройство работает под управлением ОС семейства Linux.
78
- if sys.platform in ["linux", "linux2"]: os.system("sudo shutdown now")
79
- # Если устройство работает под управлением ОС семейства Windows.
80
- if sys.platform == "win32": os.system("shutdown /s")
36
+ return Result
81
37
 
82
38
  #==========================================================================================#
83
- # >>>>> ФУНКЦИИ ОБРАБОТКИ ТИПОВ ДАННЫХ <<<<< #
39
+ # >>>>> ФУНКЦИИ ОБРАБОТКИ ДАННЫХ <<<<< #
84
40
  #==========================================================================================#
85
41
 
86
- def CheckForCyrillicPresence(text: str) -> bool:
87
- """
88
- Проверяет, имеются ли кирилические символы в строке.
89
- text – проверяемая строка.
90
- """
91
-
92
- # Русский алфавит в нижнем регистре.
93
- Alphabet = set("абвгдеёжзийклмнопрстуфхцчшщъыьэюя")
94
- # Состояние: содержит ли строка кирилические символы.
95
- IsTextContainsCyrillicCharacters = not Alphabet.isdisjoint(text.lower())
96
-
97
- return IsTextContainsCyrillicCharacters
98
-
99
42
  def ChunkList(value: list, length: int) -> list[list]:
100
43
  """
101
44
  Разделяет список на фрагменты фиксированной длинны.
@@ -131,26 +74,6 @@ def ChunkList(value: list, length: int) -> list[list]:
131
74
 
132
75
  return Result
133
76
 
134
- def IsNotAlpha(text: str) -> bool:
135
- """
136
- Проверяет, состоит ли строка целиком из небуквенных символов.
137
- """
138
-
139
- # Результат проверки.
140
- Result = True
141
-
142
- # Для каждого символа в строке.
143
- for Character in text:
144
-
145
- # Если символ является буквой.
146
- if Character.isalpha():
147
- # Изменение результата.
148
- Result = False
149
- # Прерывание цикла.
150
- break
151
-
152
- return Result
153
-
154
77
  def MergeDictionaries(base_dictionary: dict, mergeable_dictionary: dict, overwrite: bool = False) -> dict:
155
78
  """
156
79
  Объединяет словари.
@@ -237,31 +160,4 @@ def Zerotify(value: any) -> any:
237
160
  # Если значение логически интерпретируется в False, обнулить его.
238
161
  if bool(value) == False: value = None
239
162
 
240
- return value
241
-
242
- #==========================================================================================#
243
- # >>>>> ФУНКЦИИ РАБОТЫ С JSON <<<<< #
244
- #==========================================================================================#
245
-
246
- def ReadJSON(path: str) -> dict:
247
- """
248
- Читает файл JSON и конвертирует его в словарь.
249
- path – путь к файлу.
250
- """
251
-
252
- # Словарь для преобразования.
253
- JSON = dict()
254
- # Открытие и чтение файла JSON.
255
- with open(path, encoding = "utf-8") as FileRead: JSON = json.load(FileRead)
256
-
257
- return JSON
258
-
259
- def WriteJSON(path: str, dictionary: dict):
260
- """
261
- Записывает стандартизированный JSON файл. Для отступов используются символы табуляции.
262
- path – путь к файлу;
263
- dictionary – словарь, конвертируемый в формат JSON.
264
- """
265
-
266
- # Запись словаря в JSON файл.
267
- with open(path, "w", encoding = "utf-8") as FileWrite: json.dump(dictionary, FileWrite, ensure_ascii = False, indent = '\t', separators = (",", ": "))
163
+ return value
@@ -0,0 +1,38 @@
1
+ import shutil
2
+ import os
3
+
4
+ #==========================================================================================#
5
+ # >>>>> ФУНКЦИИ РАБОТЫ С ФАЙЛАМИ И ДИРЕКТОРИЯМИ <<<<< #
6
+ #==========================================================================================#
7
+
8
+ def MakeRootDirectories(directories: list[str]):
9
+ """
10
+ Создаёт каталоги в текущей корневой директории скрипта.
11
+ directories – список названий каталогов.
12
+ """
13
+
14
+ # Для каждого названия каталога.
15
+ for Name in directories:
16
+ # Если каталог не существует, то создать его.
17
+ if os.path.exists(Name) == False: os.makedirs(Name)
18
+
19
+ def RemoveDirectoryContent(path: str):
20
+ """
21
+ Удаляет всё содержимое каталога.
22
+ path – путь к каталогу.
23
+ """
24
+
25
+ # Список содержимого в папке.
26
+ FolderContent = os.listdir(path)
27
+
28
+ # Для каждого элемента.
29
+ for Item in FolderContent:
30
+
31
+ # Если элемент является каталогом.
32
+ if os.path.isdir(path + "/" + Item):
33
+ # Удаление каталога.
34
+ shutil.rmtree(path + "/" + Item)
35
+
36
+ else:
37
+ # Удаление файла.
38
+ os.remove(path + "/" + Item)
@@ -0,0 +1,28 @@
1
+ import json
2
+
3
+ #==========================================================================================#
4
+ # >>>>> ФУНКЦИИ УПРОЩЁННОЙ РАБОТЫ С JSON <<<<< #
5
+ #==========================================================================================#
6
+
7
+ def ReadJSON(path: str) -> dict:
8
+ """
9
+ Читает файл JSON и конвертирует его в словарь.
10
+ path – путь к файлу.
11
+ """
12
+
13
+ # Словарь для преобразования.
14
+ JSON = dict()
15
+ # Открытие и чтение файла JSON.
16
+ with open(path, encoding = "utf-8") as FileRead: JSON = json.load(FileRead)
17
+
18
+ return JSON
19
+
20
+ def WriteJSON(path: str, dictionary: dict):
21
+ """
22
+ Записывает стандартизированный JSON файл. Для отступов используются символы табуляции.
23
+ path – путь к файлу;
24
+ dictionary – словарь, конвертируемый в формат JSON.
25
+ """
26
+
27
+ # Запись словаря в JSON файл.
28
+ with open(path, "w", encoding = "utf-8") as FileWrite: json.dump(dictionary, FileWrite, ensure_ascii = False, indent = "\t", separators = (",", ": "))
@@ -0,0 +1,44 @@
1
+ import sys
2
+ import os
3
+
4
+ #==========================================================================================#
5
+ # >>>>> ФУНКЦИИ РАБОТЫ С СИСТЕМОЙ <<<<< #
6
+ #==========================================================================================#
7
+
8
+ def CheckPythonMinimalVersion(major: int, minor: int, raise_exception: bool = True) -> bool:
9
+ """
10
+ Проверяет, соответствует ли используемая версия Python минимальной требуемой.
11
+ major – идентификатор Major-версии Python;
12
+ minor – идентификатор Minor-версии Python;
13
+ raise_exception – указывает, как поступать при несоответствии версии: выбрасывать исключение или возвращать значение.
14
+ """
15
+
16
+ # Состояние: корректна ли версия.
17
+ IsVersionCorrect = True
18
+
19
+ # Если версия Python старше минимальной требуемой.
20
+ if sys.version_info < (major, minor):
21
+
22
+ # Если указано выбросить исключение.
23
+ if raise_exception == True:
24
+ # Выброс исключения.
25
+ raise RuntimeError(f"Python {major}.{minor} or newer is required.")
26
+
27
+ else:
28
+ # Переключение статуса проверки.
29
+ IsVersionCorrect = False
30
+
31
+ return IsVersionCorrect
32
+
33
+ def Cls():
34
+ """Очищает консоль."""
35
+
36
+ os.system("cls" if os.name == "nt" else "clear")
37
+
38
+ def Shutdown():
39
+ """Выключает устройство."""
40
+
41
+ # Если устройство работает под управлением ОС семейства Linux.
42
+ if sys.platform in ["linux", "linux2"]: os.system("sudo shutdown now")
43
+ # Если устройство работает под управлением ОС семейства Windows.
44
+ if sys.platform == "win32": os.system("shutdown /s")
File without changes
@@ -16,6 +16,12 @@ class UserData:
16
16
  # >>>>> СВОЙСТВА ТОЛЬКО ДЛЯ ЧТЕНИЯ <<<<< #
17
17
  #==========================================================================================#
18
18
 
19
+ @property
20
+ def expected_type(self) -> int:
21
+ """Тип ожидаемого значения."""
22
+
23
+ return self.__Data["expected_type"]
24
+
19
25
  @property
20
26
  def id(self) -> int:
21
27
  """ID пользователя."""
@@ -56,6 +62,19 @@ class UserData:
56
62
  # Запись локального файла.
57
63
  WriteJSON(self.__StorageDirectory + f"/{self.__ID}.json", self.__Data)
58
64
 
65
+ def __SetProperty(self, property_type: str, key: str, value: any):
66
+ """
67
+ Задаёт свойство пользователя.
68
+ property_type – ключ раздела хранения свойства;
69
+ key – ключ свойства;
70
+ value – значение.
71
+ """
72
+
73
+ # Обновление данных.
74
+ self.__Data[property_type][key] = value
75
+ # Сохранение данных.
76
+ self.__SaveData()
77
+
59
78
  #==========================================================================================#
60
79
  # >>>>> ПУБЛИЧНЫЕ МЕТОДЫ <<<<< #
61
80
  #==========================================================================================#
@@ -79,8 +98,10 @@ class UserData:
79
98
  "username": None,
80
99
  "language": None,
81
100
  "is_premium": None,
101
+ "expected_type": None,
82
102
  "permissions": [],
83
- "data": {}
103
+ "data": {},
104
+ "temp": {}
84
105
  }
85
106
 
86
107
  # Если переданы данные в виде словаря.
@@ -129,6 +150,14 @@ class UserData:
129
150
  # Сохранение данных.
130
151
  self.__SaveData()
131
152
 
153
+ def clear_temp_properties(self):
154
+ """Очищает временные свойства пользователя."""
155
+
156
+ # Сброс временных свойств.
157
+ self.__Data["temp"] = dict()
158
+ # Сохранение данных.
159
+ self.__SaveData()
160
+
132
161
  def create_property(self, key: str, value: any, force: bool = True):
133
162
  """
134
163
  Создаёт свойство пользователя и задаёт ему значение, если такового ещё не существует.
@@ -137,20 +166,20 @@ class UserData:
137
166
  force – указывает, необходимо ли перезаписывать значение уже существующего ключа.
138
167
  """
139
168
 
140
- # Если свойства не существует.
141
- if key not in self.__Data["data"].keys() or force:
142
- # Создание свойства.
143
- self.__Data["data"][key] = value
144
- # Сохранение данных.
145
- self.__SaveData()
169
+ # Если свойства не существует или включён режим перезаписи, создать его.
170
+ if key not in self.__Data["data"].keys() or force: self.__SetProperty("data", key, value)
146
171
 
147
172
  def get_property(self, key: str) -> any:
148
173
  """
149
- Возвращает значение свойства пользователя.
174
+ Возвращает значение свойства пользователя, в том числе временного.
150
175
  key – ключ свойства.
151
176
  """
152
177
 
153
- return self.__Data["data"][key]
178
+ # Получение значения из свойств пользователя.
179
+ if key in self.__Data["data"].keys(): return self.__Data["data"][key]
180
+ if key in self.__Data["temp"].keys(): return self.__Data["temp"][key]
181
+
182
+ raise KeyError(key)
154
183
 
155
184
  def has_permissions(self, permissions: list[str] | str) -> bool:
156
185
  """
@@ -210,6 +239,17 @@ class UserData:
210
239
  # Сохранение данных.
211
240
  self.__SaveData()
212
241
 
242
+ def set_expected_type(self, type_name: str):
243
+ """
244
+ Задаёт ожидаемый от пользователя тип данных.
245
+ type_name – название типа.
246
+ """
247
+
248
+ # Установка ожидаемого типа.
249
+ self.__Data["expected_type"] = type_name
250
+ # Сохранение данных.
251
+ self.__SaveData()
252
+
213
253
  def set_property(self, key: str, value: any):
214
254
  """
215
255
  Обновляет значение существующего свойства пользователя.
@@ -217,12 +257,18 @@ class UserData:
217
257
  value – значение.
218
258
  """
219
259
 
220
- # Если свойство существует.
221
- if key in self.__Data["data"].keys():
222
- # Обновление данных.
223
- self.__Data["data"][key] = value
224
- # Сохранение данных.
225
- self.__SaveData()
260
+ # Установка свойства пользователя.
261
+ self.__SetProperty("data", key, value)
262
+
263
+ def set_temp_property(self, key: str, value: any):
264
+ """
265
+ Задаёт значение временного свойства пользователя.
266
+ key – ключ свойства;
267
+ value – значение.
268
+ """
269
+
270
+ # Установка временного свойства пользователя.
271
+ self.__SetProperty("temp", key, value)
226
272
 
227
273
  def update(self, user: User):
228
274
  """
@@ -678,7 +678,9 @@ class Terminalyzer:
678
678
  if FreeParameters[Index] != None:
679
679
 
680
680
  # Если параметр соответствует типу.
681
- if self.__CheckArgumentsTypes(FreeParameters[Index], ArgumentsDescription[Index]["type"]) == True:
681
+ if self.__CheckArgumentsTypes(FreeParameters[Index], ArgumentsDescription[Index]["type"]):
682
+ # Если значение должно быть числом, провести преобразование.
683
+ if ArgumentsDescription[Index]["type"] == ArgumentsTypes.Number: FreeParameters[Index] = int(FreeParameters[Index])
682
684
  # Сохранение параметра в качестве аргумента.
683
685
  Values.append(FreeParameters[Index])
684
686
 
@@ -848,6 +850,8 @@ class Terminalyzer:
848
850
  IsPositionActivated = True
849
851
  # Проверка типа значения ключа.
850
852
  self.__CheckArgumentsTypes(Keys[KeyName], KeysPositions[PositionIndex]["types"][KeyIndex])
853
+ # Если значение должно быть числом, провести преобразование.
854
+ if KeysPositions[PositionIndex]["types"][KeyIndex] == ArgumentsTypes.Number: Keys[KeyName] = int(Keys[KeyName])
851
855
 
852
856
  # Если для ключа задан слой.
853
857
  if KeysPositions[PositionIndex]["layout-index"] != None:
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dublib
3
- Version: 0.6.2
3
+ Version: 0.7.0
4
4
  Summary: Коллекция модулей от DUB1401.
5
5
  Author-email: DUB1401 <vlad.milosta@outlook.com>
6
6
  License: This is free and unencumbered software released into the public domain.
@@ -55,11 +55,15 @@ Requires-Dist: pyTelegramBotAPI; extra == "telebot"
55
55
  # dublib
56
56
  **dublib** – это библиотека, поставляющая компоненты, требующиеся в проектах [@DUB1401](https://github.com/DUB1401), написанных на Python.
57
57
 
58
+ Данный набор модулей распространяется по Rolling-модели. Это значит, что разработчик не заботится об обратной совместимости с прошлыми релизами, потому рекомендуется привязывать ваш проект строго к определённой версии библиотеки.
59
+
60
+ Все компоненты поставляют лишь базовую документацию, необходимую для общего понимания принципов работы. Библиотека является самодокументируемой.
61
+
58
62
  # Поставляемые компоненты
59
63
  Библиотека включает следующие модули:
64
+ * [CLI](https://github.com/DUB1401/dublib/blob/main/docs/CLI.md)
60
65
  * [Methods](https://github.com/DUB1401/dublib/blob/main/docs/Methods.md)
61
66
  * [Polyglot](https://github.com/DUB1401/dublib/blob/main/docs/Polyglot.md)
62
- * [StyledPrinter](https://github.com/DUB1401/dublib/blob/main/docs/StyledPrinter.md)
63
67
  * [TelebotUtils](https://github.com/DUB1401/dublib/blob/main/docs/Terminalyzer.md)
64
68
  * [Terminalyzer](https://github.com/DUB1401/dublib/blob/main/docs/Terminalyzer.md)
65
69
  * [WebRequestor](https://github.com/DUB1401/dublib/blob/main/docs/WebRequestor.md)
@@ -1,9 +1,7 @@
1
1
  LICENSE
2
2
  README.md
3
3
  pyproject.toml
4
- src/dublib/Methods.py
5
4
  src/dublib/Polyglot.py
6
- src/dublib/StyledPrinter.py
7
5
  src/dublib/TelebotUtils.py
8
6
  src/dublib/Terminalyzer.py
9
7
  src/dublib/WebRequestor.py
@@ -13,8 +11,16 @@ src/dublib.egg-info/SOURCES.txt
13
11
  src/dublib.egg-info/dependency_links.txt
14
12
  src/dublib.egg-info/requires.txt
15
13
  src/dublib.egg-info/top_level.txt
16
- src/dublib/Exceptions/StyledPrinter.py
14
+ src/dublib/CLI/StyledPrinter.py
15
+ src/dublib/CLI/Templates.py
16
+ src/dublib/CLI/__init__.py
17
+ src/dublib/Exceptions/CLI.py
17
18
  src/dublib/Exceptions/TelebotUtils.py
18
19
  src/dublib/Exceptions/Terminalyzer.py
19
20
  src/dublib/Exceptions/WebRequestor.py
20
- src/dublib/Exceptions/__init__.py
21
+ src/dublib/Exceptions/__init__.py
22
+ src/dublib/Methods/Data.py
23
+ src/dublib/Methods/Filesystem.py
24
+ src/dublib/Methods/JSON.py
25
+ src/dublib/Methods/System.py
26
+ src/dublib/Methods/__init__.py
File without changes
File without changes
File without changes