Skip to content

Commit a0b93bb

Browse files
committed
try_3
1 parent 05a7c72 commit a0b93bb

File tree

1 file changed

+34
-33
lines changed

1 file changed

+34
-33
lines changed

homework.py

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
import logging
23
import os
34
import time
@@ -12,26 +13,35 @@
1213

1314
class ServiceError(Exception):
1415
"""Ошибка отсутствия доступа по заданному эндпойнту."""
15-
16+
pass
1617

1718
class NetworkError(Exception):
1819
"""Ошибка отсутствия сети."""
20+
pass
1921

2022

2123
class EndpointError(Exception):
2224
"""Ошибка, если эндпойнт не корректен."""
25+
pass
2326

2427

2528
class MessageSendingError(Exception):
2629
"""Ошибка отправки сообщения."""
30+
pass
2731

2832

2933
class GlobalsError(Exception):
3034
"""Ошибка, если есть пустые глобальные переменные."""
35+
pass
3136

3237

3338
class DataTypeError(Exception):
3439
"""Ошибка, если тип данных не dict."""
40+
pass
41+
42+
class ResponseFormatError(Exception):
43+
"""Ошибка, если формат response не json."""
44+
pass
3545

3646

3747
CONNECTION_ERROR = '{error}, {url}, {headers}, {params}'
@@ -43,9 +53,10 @@ class DataTypeError(Exception):
4353
STATUS_IS_CHANGED = '{verdict}, {homework}'
4454
STATUS_IS_NOT_CHANGED = 'Статус не изменился, нет записей.'
4555
FAILURE_TO_SEND_MESSAGE = '{error}, {message}'
46-
GLOBAL_VARIABLE_IS_MISSING = 'Отсутствует глобальная переменная {}'
47-
GLOBAL_VARIABLE_IS_EMPTY = 'Пустая глобальная переменная {}'
56+
GLOBAL_VARIABLE_IS_MISSING = 'Отсутствует глобальная переменная'
57+
GLOBAL_VARIABLE_IS_EMPTY = 'Пустая глобальная переменная'
4858
MESSAGE_IS_SENT = 'Сообщение {} отправлено'
59+
FORMAT_NOT_JSON = 'Формат не json {}'
4960

5061
PRACTICUM_TOKEN = os.getenv('PRACTICUM_TOKEN')
5162
TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN')
@@ -55,7 +66,6 @@ class DataTypeError(Exception):
5566
ENDPOINT = 'https://practicum.yandex.ru/api/user_api/homework_statuses/'
5667
HEADERS = {'Authorization': f'OAuth {PRACTICUM_TOKEN}'}
5768

58-
5969
HOMEWORK_STATUSES = {
6070
'approved': 'Работа проверена: ревьюеру всё понравилось. Ура!',
6171
'reviewing': 'Работа взята на проверку ревьюером.',
@@ -72,19 +82,17 @@ def send_message(bot, message):
7282
error=error,
7383
message=message,
7484
))
75-
else:
76-
logging.info(f'Message \'{message}\' is sent')
85+
logging.info(f'Message \'{message}\' is sent')
7786

7887

7988
def get_api_answer(current_timestamp):
8089
"""Делает запрос к единственному эндпоинту API-сервиса."""
8190
timestamp = current_timestamp or int(time.time())
8291
params = {'from_date': timestamp}
83-
headers = {'Authorization': f'OAuth {PRACTICUM_TOKEN}'}
84-
all_params = dict(url=ENDPOINT, headers=headers, params=params)
92+
all_params = dict(url=ENDPOINT, headers=HEADERS, params=params)
8593
try:
8694
response = requests.get(**all_params)
87-
except telegram.error.TelegramError as error:
95+
except requests.exceptions.RequestException as error:
8896
raise telegram.TelegramError(CONNECTION_ERROR.format(
8997
error=error,
9098
**all_params,
@@ -95,27 +103,28 @@ def get_api_answer(current_timestamp):
95103
response_status=response_status,
96104
**all_params,
97105
))
98-
return response.json()
106+
try:
107+
return response.json()
108+
except Exception as error:
109+
raise ResponseFormatError(FORMAT_NOT_JSON.format(error))
99110

100111

101112
def check_response(response):
102113
"""
103114
Возвращает домашку, если есть.
104115
Проверяет валидность её статуса.
105116
"""
106-
try:
107-
return response['homeworks'][0]
108-
except 'code' in response:
117+
if 'code' in response:
109118
raise ServiceError(SERVICE_REJECTION.format(
110119
code=response.get('code'),
111120
))
121+
return response['homeworks'][0]
112122

113123

114124
def parse_status(homework):
115125
"""Возвращает текст сообщения от ревьюера."""
116-
data_type = type(homework)
117-
if data_type != dict:
118-
raise DataTypeError(WRONG_DATA_TYPE.format(data_type))
126+
if not isinstance(homework, dict):
127+
raise DataTypeError(WRONG_DATA_TYPE.format(type(homework)))
119128
homework_name = homework.get('homework_name')
120129
homework_status = homework.get('status')
121130

@@ -129,17 +138,12 @@ def parse_status(homework):
129138

130139
def check_tokens():
131140
"""Проверяет доступность переменных окружения."""
132-
for key in (
133-
'PRACTICUM_TOKEN',
134-
'TELEGRAM_TOKEN',
135-
'TELEGRAM_CHAT_ID',
136-
'ENDPOINT'
137-
):
138-
if globals()[key] is None:
139-
logging.error(GLOBAL_VARIABLE_IS_MISSING.format(key))
141+
for key in (PRACTICUM_TOKEN, TELEGRAM_TOKEN, TELEGRAM_CHAT_ID, ENDPOINT):
142+
if key is None:
143+
logging.error(GLOBAL_VARIABLE_IS_MISSING)
140144
return False
141-
elif not globals()[key]:
142-
logging.error(GLOBAL_VARIABLE_IS_EMPTY.format(key))
145+
if not key:
146+
logging.error(GLOBAL_VARIABLE_IS_EMPTY)
143147
return False
144148
return True
145149

@@ -148,8 +152,6 @@ def main():
148152
"""Основная логика работы бота."""
149153
if not check_tokens():
150154
raise GlobalsError('Ошибка глобальной переменной. Смотрите логи.')
151-
check_tokens()
152-
153155
bot = telegram.Bot(token=TELEGRAM_TOKEN)
154156
current_timestamp = int(time.time())
155157

@@ -159,20 +161,19 @@ def main():
159161
homework = check_response(response)
160162
message = parse_status(homework)
161163
send_message(bot, message)
162-
print(response)
164+
logging.info(homework)
163165
current_timestamp = response.get('current_date')
164-
time.sleep(RETRY_TIME)
165166

166167
except IndexError:
167168
message = 'Статус работы не изменился'
168169
send_message(bot, message)
169-
time.sleep(RETRY_TIME)
170+
logging.info('Статус работы не изменился')
170171
except Exception as error:
171172
message = f'Сбой в работе программы: {error}'
172173
send_message(bot, message)
174+
finally:
173175
time.sleep(RETRY_TIME)
174-
else:
175-
logging.info(MESSAGE_IS_SENT.format(message))
176+
logging.info(MESSAGE_IS_SENT.format(message))
176177

177178

178179
if __name__ == '__main__':

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy