diff --git a/CHANGELOG.md b/CHANGELOG.md index da6b872..5b5cf73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # MediaWiki Changelog +## Version 0.7.5 + +* Move configuration items to a configuration data class + * Will allow for the deprication of some top level properties in lieu of changing against the `Configuration` class + ## Version 0.7.4 * Add typing support diff --git a/mediawiki/configuraton.py b/mediawiki/configuraton.py index b5fd197..2493b81 100644 --- a/mediawiki/configuraton.py +++ b/mediawiki/configuraton.py @@ -29,7 +29,6 @@ class Configuration: _reset_session: bool = field(default=True, init=False, repr=False) _clear_memoized: bool = field(default=False, init=False, repr=False) _rate_limit_last_call: Optional[datetime] = field(default=None, init=False, repr=False) - _login: bool = field(default=False, init=False, repr=False) def __init__( self, @@ -91,7 +90,7 @@ def __repr__(self): keys = [ x.replace("_", "", 1) for x in sorted(asdict(self).keys()) - if x not in ["_login", "_rate_limit_last_call", "_clear_memoized", "_reset_session"] + if x not in ["_rate_limit_last_call", "_clear_memoized", "_reset_session"] ] full = [f"{x}={self.__getattribute__(x)}" for x in keys] return f"Configuration({', '.join(full)})" @@ -224,8 +223,6 @@ def username(self) -> Optional[str]: def username(self, username: Optional[str]): """set the username, if needed, to log into the mediawiki site""" self._username = username - if self.username and self.password: - self._login = True @property def password(self) -> Optional[str]: @@ -236,8 +233,6 @@ def password(self) -> Optional[str]: def password(self, password: Optional[str]): """set the password, if needed, to log into the mediawiki site""" self._password = password - if self.username and self.password: - self._login = True @property def refresh_interval(self) -> Optional[int]: diff --git a/mediawiki/mediawiki.py b/mediawiki/mediawiki.py index 6eb7344..59ee873 100644 --- a/mediawiki/mediawiki.py +++ b/mediawiki/mediawiki.py @@ -335,6 +335,7 @@ def login(self, username: str, password: str, strict: bool = True) -> bool: res = self._post_response(params) if res["login"]["result"] == "Success": self._is_logged_in = True + self._config._login = False return True self._is_logged_in = False reason = res["login"]["reason"] diff --git a/tests/mediawiki_test.py b/tests/mediawiki_test.py index 0db6e62..9c003f7 100644 --- a/tests/mediawiki_test.py +++ b/tests/mediawiki_test.py @@ -37,6 +37,10 @@ def __init__( rate_limit_wait=timedelta(milliseconds=50), cat_prefix="Category", user_agent=None, + username=None, + password=None, + proxies=None, + verify_ssl=True, ): """new init""" @@ -55,8 +59,15 @@ def __init__( rate_limit_wait=rate_limit_wait, cat_prefix=cat_prefix, user_agent=user_agent, + username=username, + password=password, + proxies=proxies, + verify_ssl=verify_ssl, ) + def __repr__(self): + return super().__repr__() + def _get_response(self, params): """override the __get_response method""" new_params = json.dumps(tuple(sorted(params.items()))) @@ -151,6 +162,18 @@ def test_extensions(self): response = site.responses[site.api_url] self.assertEqual(site.extensions, response["extensions"]) + def test_repr_function(self): + """test the config repr function""" + site = MediaWikiOverloaded() + res = ( + "Configuration(api_url=https://en.wikipedia.org/w/api.php, category_prefix=Category, " + "lang=en, password=None, proxies=None, rate_limit=False, rate_limit_min_wait=0:00:00.050000, " + "refresh_interval=None, timeout=15.0, use_cache=True, " + "user_agent=python-mediawiki/VERSION-0.7.4/(https://github.com/barrust/mediawiki)/BOT, username=None, verify_ssl=True)" + ) + print(str(site._config)) + self.assertEqual(str(site._config), res) + def test_change_api_url(self): """test switching the api url""" site = MediaWikiOverloaded() @@ -347,6 +370,11 @@ def test_successful_login(self): self.assertEqual(site.logged_in, True) self.assertEqual(res, True) + def test_successful_login_on_load(self): + """test login success on load!""" + site = MediaWikiOverloaded(username="username", password="fakepassword") + self.assertEqual(site.logged_in, True) + def test_failed_login(self): """test that login failure throws the correct exception""" site = MediaWikiOverloaded()