app.site.functions   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 32
dl 0
loc 49
rs 10
c 0
b 0
f 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A get_data() 0 37 4
1
from __future__ import annotations
2
3
import re
4
from urllib.error import HTTPError
5
from urllib.request import Request, urlopen
6
7
from bs4 import BeautifulSoup
8
9
from app.logger import log
10
11
12
def get_data(url: str) -> str | BeautifulSoup:
13
    """
14
    This function downloads and parses content of URL site
15
    :url: address of needed site or directory
16
    :return: *BeautifulSoup* OR
17
        *str* with error message if Result is False
18
    """
19
    pattern_http = "^http"
20
    m_l = {
21
        "start": "Начинаем загрузку данных с сайта",
22
        "error": "Не удалось получить данные:\n\t>> Адрес:\t%s\n\t>> Ошибка:\t%s",
23
        "get_site": "Пробуем скачать данные с ресурса",
24
        "url_check": "Проверяем, являются ли введенные данные адресом веб-страницы",
25
        "url_correct": "Введен корректный адрес веб-страницы:\t%s",
26
        "parse": "Пробуем обработать полученные данные",
27
        "success": "Данные с сайта успешно загружены",
28
    }
29
30
    log.info(m_l["start"])
31
    log.debug(m_l["url_check"])
32
33
    if not re.match(pattern_http, url):
34
        return ""
35
36
    log.debug(m_l["url_correct"], url)
37
    log.debug(m_l["get_site"])
38
39
    try:
40
        with urlopen(Request(url=url)) as response:
41
            log.debug(m_l["parse"])
42
            soup = BeautifulSoup(response, "lxml")
43
            log.info(m_l["success"])
44
            return soup
45
46
    except HTTPError as err:
47
        log.error(m_l["error"], url, err)
48
        return str(err)
49