Подправлены настройки валидации

Для сокращения кода код проверки вынесен в отдельную функцию. В некоторых методах валидации не было, сейчас все функции валидируются
This commit is contained in:
Ilia Miheev
2025-11-11 21:26:41 +03:00
parent bb99e7296c
commit ecfc326b36
+44 -14
View File
@@ -13,14 +13,19 @@ from cerberus import Validator
class Pars: class Pars:
'''Модуль для работы с запросами и bs4''' '''Модуль для работы с запросами и bs4'''
def __validation(self, schema, expected):
v = Validator(schema)
if not v.validate(expected):
raise ValueError(v.errors)
def mkdir(self, nameDir: str): def mkdir(self, nameDir: str):
'''Создаёт папку если её ещё нет '''Создаёт папку если её ещё нет
nameDir: название папки которая будет создана''' nameDir: название папки которая будет создана'''
schema = {'nameDir': {'type': 'string'}} schema = {'nameDir': {'type': 'string'}}
v = Validator(schema) expected = {'nameDir': nameDir}
if not v.validate({'nameDir': nameDir}): self.__validation(schema, expected)
raise ValueError(v.errors)
if not exists(nameDir): if not exists(nameDir):
mkdir(nameDir) mkdir(nameDir)
@@ -36,9 +41,8 @@ class Pars:
'encoding': {'type': 'string'}, 'encoding': {'type': 'string'},
'parser': {'type': 'string'}, 'parser': {'type': 'string'},
} }
v = Validator(schema) expected = {'pathToFile': pathToFile, 'encoding': encoding, 'parser': parser}
if not v.validate({'pathToFile': pathToFile, 'encoding': encoding, 'parser': parser}): sels.__validation(schema, expected)
raise ValueError(v.errors)
with open(pathToFile, encoding=encoding) as file: with open(pathToFile, encoding=encoding) as file:
src = file.read() src = file.read()
@@ -55,9 +59,8 @@ class Pars:
'arr': {'type': 'list'}, 'arr': {'type': 'list'},
'needFix': {'type': 'boolean'}, 'needFix': {'type': 'boolean'},
} }
v = Validator(schema) expected = {'arr': arr, 'needFix': needFix}
if not v.validate({'arr': arr, 'needFix': needFix}): self.__validation(schema, expected)
raise ValueError(v.errors)
result = [] result = []
for item in arr: for item in arr:
@@ -80,6 +83,15 @@ class Pars:
arr: список объектов bs4 из которых будет извлекаться атрибут arr: список объектов bs4 из которых будет извлекаться атрибут
att: строка с названием атрибута по которому будет осуществляться поиск''' att: строка с названием атрибута по которому будет осуществляться поиск'''
schema = {
'arr': {'type': 'list'},
'att': {'type': 'string'}
}
expected = {'arr': arr, 'att': att}
self.__validation(schema, expected)
result = [] result = []
for item in arr: for item in arr:
data = item.get(att) data = item.get(att)
@@ -97,11 +109,11 @@ class Pars:
pprint(data) pprint(data)
def getStaticPage(self, pathToSaveFile: str, url: str, writeMethod: str = 'w', headers: dict = None) -> int: def getStaticPage(self, pathToSaveFile: str, url: str, writeMethod: str = 'w', headers: dict = None) -> int:
'''Получаем статическую страницу и возвращаем статус ответа от сервера '''Сохраняем статическую страницу и возвращаем статус ответа от сервера
pathToSaveFile: путь, куда сохранится полученный файл pathToSaveFile: путь, куда сохранится полученный файл
url: ссылка на данные url: ссылка на данные
writeMethod: метод записи данных в файл. "W" записывает текст, "WB" — байты writeMethod: метод записи данных в файл. "w" записывает текст, "wb" — байты
headers: заголовки запроса к серверу''' headers: заголовки запроса к серверу'''
if headers is None: if headers is None:
@@ -127,6 +139,17 @@ class Pars:
"User-Agent": user_agent "User-Agent": user_agent
} }
schema = {
'pathToSaveFile': {'type': 'string'},
'url': {'type': 'string'},
'writeMethod': {'type': 'string', 'allowed': ['w', 'wb']},
'headers': {'type': 'dict'},
}
expected = {'pathToSaveFile': pathToSaveFile, 'att': att, 'writeMethod': writeMethod, 'headers': headers,}
self.__validation(schema, expected)
try: try:
# Отправляем запрос # Отправляем запрос
req = requests.get(url, headers=headers) req = requests.get(url, headers=headers)
@@ -182,9 +205,8 @@ class Pars:
'closeWindow': {'type': 'boolean'}, 'closeWindow': {'type': 'boolean'},
'timeSleep': {'type': 'integer', 'min': 2}, 'timeSleep': {'type': 'integer', 'min': 2},
} }
v = Validator(schema) expected = {'pathToSaveFile': pathToSaveFile, 'url': url, 'closeWindow': closeWindow, 'timeSleep': timeSleep}
if not v.validate({'pathToSaveFile': pathToSaveFile, 'url': url, 'closeWindow': closeWindow, 'timeSleep': timeSleep}): self.__validation(schema, expected)
raise ValueError(v.errors)
# Устанавливаем опции для Chrome WebDriver # Устанавливаем опции для Chrome WebDriver
@@ -205,6 +227,14 @@ class Pars:
url: ссылка на сайт url: ссылка на сайт
timeSleep: время ожидания браузера перед тем как скролить страницу дальше''' timeSleep: время ожидания браузера перед тем как скролить страницу дальше'''
schema = {
'pathToSaveFile': {'type': 'string'},
'url': {'type': 'string'},
'timeSleep': {'type': 'integer', 'min': 2},
}
expected = {'pathToSaveFile': pathToSaveFile, 'url': url, 'timeSleep': timeSleep}
self.__validation(schema, expected)
with webdriver.Chrome() as driver: with webdriver.Chrome() as driver:
driver.get(url) driver.get(url)
a = input('Нажми ENTER когда закончишь') a = input('Нажми ENTER когда закончишь')