| @@ -1,7 +1,8 @@ | |||||
| v0.3 (unreleased): | v0.3 (unreleased): | ||||
| - Added various new features to the WikiProjectTagger task. | - Added various new features to the WikiProjectTagger task. | ||||
| - Copyvio detector: improved sentence splitting algorithm. | |||||
| - Copyvio detector: improved sentence splitting algorithm; many performance | |||||
| improvements. | |||||
| - Improved config file command/task exclusion logic. | - Improved config file command/task exclusion logic. | ||||
| - IRC > !cidr: Added; new command for calculating range blocks. | - IRC > !cidr: Added; new command for calculating range blocks. | ||||
| - IRC > !notes: Improved help and added aliases. | - IRC > !notes: Improved help and added aliases. | ||||
| @@ -13,6 +14,8 @@ v0.3 (unreleased): | |||||
| - IRC: Try not to join channels before NickServ auth has completed. | - IRC: Try not to join channels before NickServ auth has completed. | ||||
| - IRC: Improved detection of maximum IRC message length. | - IRC: Improved detection of maximum IRC message length. | ||||
| - IRC: Improved some help commands. | - IRC: Improved some help commands. | ||||
| - Wiki: Added logging for warnings. | |||||
| - Wiki: Updated some deprecated API calls. | |||||
| - Wiki: Fixed Page.toggle_talk() behavior on mainspace titles with colons. | - Wiki: Fixed Page.toggle_talk() behavior on mainspace titles with colons. | ||||
| v0.2 (released November 8, 2015): | v0.2 (released November 8, 2015): | ||||
| @@ -264,13 +264,15 @@ class Page(CopyvioMixIn): | |||||
| if not result: | if not result: | ||||
| query = self.site.api_query | query = self.site.api_query | ||||
| result = query(action="query", prop="revisions", rvlimit=1, | result = query(action="query", prop="revisions", rvlimit=1, | ||||
| rvprop="content|timestamp", titles=self._title) | |||||
| rvprop="content|timestamp", rvslots="main", | |||||
| titles=self._title) | |||||
| res = result["query"]["pages"].values()[0] | res = result["query"]["pages"].values()[0] | ||||
| try: | try: | ||||
| self._content = res["revisions"][0]["*"] | |||||
| self._basetimestamp = res["revisions"][0]["timestamp"] | |||||
| except KeyError: | |||||
| revision = res["revisions"][0] | |||||
| self._content = revision["slots"]["main"]["*"] | |||||
| self._basetimestamp = revision["timestamp"] | |||||
| except (KeyError, IndexError): | |||||
| # This can only happen if the page was deleted since we last called | # This can only happen if the page was deleted since we last called | ||||
| # self._load_attributes(). In that case, some of our attributes are | # self._load_attributes(). In that case, some of our attributes are | ||||
| # outdated, so force another self._load_attributes(): | # outdated, so force another self._load_attributes(): | ||||
| @@ -582,7 +584,7 @@ class Page(CopyvioMixIn): | |||||
| query = self.site.api_query | query = self.site.api_query | ||||
| result = query(action="query", rvlimit=1, titles=self._title, | result = query(action="query", rvlimit=1, titles=self._title, | ||||
| prop="info|revisions", inprop="protection|url", | prop="info|revisions", inprop="protection|url", | ||||
| rvprop="content|timestamp") | |||||
| rvprop="content|timestamp", rvslots="main") | |||||
| self._load_attributes(result=result) | self._load_attributes(result=result) | ||||
| self._assert_existence() | self._assert_existence() | ||||
| self._load_content(result=result) | self._load_content(result=result) | ||||
| @@ -1,6 +1,6 @@ | |||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
| # | # | ||||
| # Copyright (C) 2009-2017 Ben Kurtovic <ben.kurtovic@gmail.com> | |||||
| # Copyright (C) 2009-2019 Ben Kurtovic <ben.kurtovic@gmail.com> | |||||
| # | # | ||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| # of this software and associated documentation files (the "Software"), to deal | # of this software and associated documentation files (the "Software"), to deal | ||||
| @@ -298,6 +298,17 @@ class Site(object): | |||||
| e = "API query failed: JSON could not be decoded." | e = "API query failed: JSON could not be decoded." | ||||
| raise exceptions.APIError(e) | raise exceptions.APIError(e) | ||||
| if "warnings" in res: | |||||
| for name, value in res["warnings"].items(): | |||||
| try: | |||||
| warning = value["warnings"] | |||||
| except KeyError: | |||||
| try: | |||||
| warning = value["*"] | |||||
| except KeyError: | |||||
| warning = value | |||||
| self._logger.warning("API warning: %s: %s", name, warning) | |||||
| try: | try: | ||||
| code = res["error"]["code"] | code = res["error"]["code"] | ||||
| info = res["error"]["info"] | info = res["error"]["info"] | ||||