Improve type checking: Make Url newtype

This commit is contained in:
kmein
2018-05-17 10:02:24 +02:00
parent 8db79b6c48
commit d967b8c44e

View File

@@ -3,25 +3,25 @@ from enum import Enum
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
import re import re
import requests import requests
from typing import Iterator from typing import Iterator, NewType
class Language(Enum): class Language(Enum):
EN = "en" EN = "en"
DE = "de" DE = "de"
DEFAULT_LANG = Language.DE DEFAULT_LANG = Language.DE
Url = str Url = NewType("Url", str)
def cook_soup(url: Url) -> BeautifulSoup: def cook_soup(url: Url) -> BeautifulSoup:
return BeautifulSoup(requests.get(url).text, "lxml") return BeautifulSoup(requests.get(url).text, "lxml")
def base_url(lang: Language = DEFAULT_LANG) -> str: def base_url(lang: Language = DEFAULT_LANG) -> Url:
return "https://{}.wiktionary.org".format(lang.value) return Url("https://{}.wiktionary.org".format(lang.value))
def entry_url(word: Url, lang: Language = DEFAULT_LANG) -> str: def entry_url(word: str, lang: Language = DEFAULT_LANG) -> Url:
return base_url(lang) + "/wiki/" + word return Url(base_url(lang) + "/wiki/" + word)
def rhymes_url(entry_url: Url, lang: Language = DEFAULT_LANG) -> str: def rhymes_url(entry_url: Url, lang: Language = DEFAULT_LANG) -> Url:
soup = cook_soup(entry_url) soup = cook_soup(entry_url)
result_url = base_url(lang) result_url = base_url(lang)
try: try: