src/url.py

Реализуйте абстракцию для работы с URL. Она должна извлекать и менять части адреса.

Интерфейс:

  • make(url) - Конструктор. Создает URL.
  • get_scheme(data) - Селектор (геттер). Извлекает схему.
  • set_scheme(data, scheme) - Сеттер. Меняет схему.
  • get_host(data) - Геттер. Извлекает host.
  • set_host(data, host) - Сеттер. Меняет host.
  • get_path(data) - Геттер. Извлекает путь.
  • set_path(data, path) - Сеттер. Меняет путь.
  • get_query_param(data, param_name, default=None) - Геттер. Извлекает значение для параметра запроса. Третьим параметром функция принимает значение по умолчанию, которое возвращается тогда, когда в запросе не было такого параметра
  • set_query_param(data, key, value) - Сеттер. Устанавливает значение для параметра запроса. Если передано значение None, то параметр отбрасывается.
  • to_string(data) - Геттер. Преобразует URL в строковой вид.

Все сеттеры должны возвращать новый изменённый URL, а старый оставлять неизменным.

Примеры

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> import url
>>> u = url.make('https://hexlet.io/community?q=low')
>>>
>>> u = url.set_scheme(u, 'http')
>>> url.to_string(url)
'http://hexlet.io/community?q=low'
>>>
>>> u = url.set_path(u, '/404')
>>> url.to_string(u)
'http://hexlet.io/404?q=low'
>>>
>>> url.get_query_param(u, 'q')
'low'
>>>
>>> u = url.set_query_param(u, 'page', 5)
>>> url.to_string(u)
'http://hexlet.io/404?q=low&page=5'
>>>
>>> u = url.set_query_param(u, 'q', 'high')
>>> url.to_string(u)
'http://hexlet.io/404?q=high&page=5'
>>>
>>> u = url.set_query_param(u, 'q', None)
>>> url.to_string(u)
'http://hexlet.io/404?page=5'

Подсказки

urlparse возвращает иммутабельный объект типа namedtuple. Получить копию такого объекта с одним изменённым значением можно с помощью метода _replace.

Успешных завершений: 75%

Последние код-ревью

Автор Дата обновления Версий
user-fd9e85e38a31bc8c 27 нояб., 09:09 1
all_done 13 нояб., 14:45 2
user-43b67d74234d0587 05 нояб., 10:30 1
veetors 01 нояб., 17:53 2
bl1ndy 22 окт., 10:04 1