Необходимо написать программу на Python (рекомендуем использовать библиотеку requests), которая по заданному URL определяет URL, который не предполагает редиректов. Программа должна учитывать:
- множественные редиректы;
- зацикленные редиректы;
- редиректы с бесконечным или достаточно большим телом ответа
Для тестирования программы необходимо написать тестовый сервер, который будет эмулировать указанные крайние случаи.
Также , пожалуйста, напишите свой фидбек о тестовом: Он не должен быть очень большим. Нам интересно было бы узнать:
- Примерную оценку времени, которое вы потратили на выполнение задания;
- Комментарии по коду, почему выбран тот или иной способ решения;
- Возникали ли проблемы при выполнении тестового.
pip install .
./run_tests.sh
Actually, tested with Python3.8 only, as I used several 3.8 features just to try.
Starts bottle
server in the background, runs tests against it, then kills server.
It was possible to monkeypatch requests.get used inside redirector by specific pytest
functionality
and use bottle
server answers as fixtures
in order to have consistent runs,
instead of running server on loopback interface.
from redirector import Redirector
redir = Redirector(max_redirects=30, content_limit=2 ** 33)
final_link = redir.resolve_redirects('http://localhost/redirected_link/')
Throws exceptions (all exceptions are inherited from redirector.exceptions.RDException
):
RDTooManyRedirectsException
- when redirects count exceedsmax_redirects
;RDTooBigBodyException
- when answer body exceedscontent_limit
(redir answer body is not fetched);RDCycleRedirectsException
- when redirects are cycled.