diff --git a/page.py b/page.py index f873228..3577bbd 100644 --- a/page.py +++ b/page.py @@ -1,37 +1,29 @@ -from typing import Any, Optional +from dataclasses import dataclass +from typing import Optional +@dataclass class Page: """A specifier for a page on a wiki, optionally resolved.""" title: str resolve_redirects: Optional[bool] resolution: Optional[dict] = None - def __init__(self, title: str, resolve_redirects: Optional[bool]) -> None: - if title.startswith('!'): - raise ValueError("page title '%s' cannot start with ! (ambiguous str)" % title) - self.title = title - self.resolve_redirects = resolve_redirects + def __post_init__(self) -> None: + if self.title.startswith('!'): + raise ValueError("page title '%s' cannot start with ! (ambiguous str)" % self.title) def cleanup(self) -> None: """Partially normalize the page, as a convenience for users. This should not be used as a replacement for full normalization via the MediaWiki API. """ self.title = self.title.replace('_', ' ') - def __eq__(self, value: Any) -> bool: - return type(value) is Page and \ - self.title == value.title and \ - self.resolve_redirects is value.resolve_redirects - def __str__(self) -> str: if self.resolve_redirects is False: return '!' + self.title else: return self.title - - def __repr__(self) -> str: - return 'Page(' + repr(self.title) + ', ' + repr(self.resolve_redirects) + ')' diff --git a/test_page.py b/test_page.py index b682657..2e41e22 100644 --- a/test_page.py +++ b/test_page.py @@ -1,38 +1,37 @@ from action import AddCategoryAction from page import Page page1 = Page('Page 1', True) page2 = Page('Page 2', False) def test_Page_cleanup() -> None: page = Page('Page_from_URL', True) page.cleanup() assert page == Page('Page from URL', True) def test_Page_eq_same() -> None: assert page1 == page1 def test_Page_eq_equal() -> None: assert page1 == Page(page1.title, page1.resolve_redirects) def test_Page_eq_different_type() -> None: assert page1 != AddCategoryAction('Page 1') def test_Page_eq_different_title() -> None: assert page1 != Page('Page A', page1.resolve_redirects) assert page1 != Page('Page_1', page1.resolve_redirects) def test_Page_eq_different_resolve_redirects() -> None: assert page1 != Page(page1.title, False) assert page1 != Page(page1.title, None) - assert page1 != Page(page1.title, 1) # type: ignore def test_Page_str() -> None: assert str(page1) == 'Page 1' assert str(page2) == '!Page 2' def test_Page_repr() -> None: assert eval(repr(page1)) == page1 assert eval(repr(page2)) == page2