jenkins-bot has submitted this change. ( https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1063011?usp=email )
Change subject: [flow] deprecate flow extension support ......................................................................
[flow] deprecate flow extension support
Bug: T371180 Change-Id: I6249245a2267a5eaf153704969f130f20a42a95a --- M pywikibot/flow.py M pywikibot/site/_extensions.py M tests/flow_tests.py 3 files changed, 119 insertions(+), 29 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/flow.py b/pywikibot/flow.py index bb51164..1e1db84 100644 --- a/pywikibot/flow.py +++ b/pywikibot/flow.py @@ -35,7 +35,24 @@ UnknownExtensionError, ) from pywikibot.page import BasePage, PageSourceType, User -from pywikibot.tools import cached, deprecated_args +from pywikibot.tools import ( + ModuleDeprecationWrapper, + cached, + deprecated_args, + suppress_warnings, +) +from pywikibot.tools._deprecate import _NotImplementedWarning + + +__all__ = ( + 'Board', + 'FlowPage', + 'Post', + 'Topic', +) + +FLOW_WARNING = (r'pywikibot.site._extensions.(Thanks)?FlowMixin.[a-z_]+ ' + r'is deprecated since release 9.4.0.')
__all__ = ( @@ -108,7 +125,8 @@ :param force: Whether to force a reload if the data is already loaded """ if not hasattr(self, '_data') or force: - self._data = self.site.load_board(self) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self._data = self.site.load_board(self) return self._data
@staticmethod @@ -166,11 +184,18 @@ """ maxlimit = min(config.step, 100) if config.step > 0 else 100 request_limit = min(total, maxlimit) - data = self.site.load_topiclist(self, content_format=content_format, - limit=request_limit, sortby=sort_by, - toconly=toc_only, offset=offset, - offset_id=offset_uuid, reverse=reverse, - include_offset=include_offset) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + data = self.site.load_topiclist( + self, + content_format=content_format, + limit=request_limit, + sortby=sort_by, + toconly=toc_only, + offset=offset, + offset_id=offset_uuid, + reverse=reverse, + include_offset=include_offset + ) count = 0 while data['roots']: for root in data['roots']: @@ -182,7 +207,8 @@ return
continue_args = self._parse_url(data['links']['pagination']) - data = self.site.load_topiclist(self, **continue_args) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + data = self.site.load_topiclist(self, **continue_args)
def new_topic(self, title: str, content: str, content_format: str = 'wikitext') -> Topic: @@ -209,7 +235,8 @@ :param content_format: The post format in which to load """ if not hasattr(self, '_data') or force: - self._data = self.site.load_topic(self, content_format) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self._data = self.site.load_topic(self, content_format) return self._data
def _reload(self) -> None: @@ -300,7 +327,8 @@
:param reason: The reason for locking this topic """ - self.site.lock_topic(self, True, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.lock_topic(self, True, reason) self._reload()
def unlock(self, reason: str) -> None: @@ -308,7 +336,8 @@
:param reason: The reason for unlocking this topic """ - self.site.lock_topic(self, False, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.lock_topic(self, False, reason) self._reload()
def delete_mod(self, reason: str) -> None: @@ -316,7 +345,8 @@
:param reason: The reason for deleting this topic. """ - self.site.delete_topic(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.delete_topic(self, reason) self._reload()
def hide(self, reason: str) -> None: @@ -324,7 +354,8 @@
:param reason: The reason for hiding this topic. """ - self.site.hide_topic(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.hide_topic(self, reason) self._reload()
def suppress(self, reason: str) -> None: @@ -332,7 +363,8 @@
:param reason: The reason for suppressing this topic. """ - self.site.suppress_topic(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.suppress_topic(self, reason) self._reload()
def restore(self, reason: str) -> None: @@ -340,7 +372,8 @@
:param reason: The reason for restoring this topic. """ - self.site.restore_topic(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.restore_topic(self, reason) self._reload()
def summary(self) -> str | None: @@ -358,7 +391,8 @@
:param summary: The summary that will be added to the topic. """ - self.site.summarize_topic(self, summary) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.summarize_topic(self, summary) self._reload()
@@ -440,8 +474,9 @@ if load_from_topic: data = self.page._load(force=force, content_format=content_format) else: - data = self.site.load_post_current_revision(self.page, self.uuid, - content_format) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + data = self.site.load_post_current_revision( + self.page, self.uuid, content_format) self._set_data(data) return self._current_revision
@@ -542,8 +577,9 @@ if self.uuid == reply_to: del self._current_revision del self._replies - data = self.site.reply_to_post(self.page, reply_to, content, - content_format) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + data = self.site.reply_to_post(self.page, reply_to, content, + content_format) return Post(self.page, data['post-id'])
# Moderation @@ -552,7 +588,8 @@
:param reason: The reason for deleting this post. """ - self.site.delete_post(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.delete_post(self, reason) self._load()
def hide(self, reason: str) -> None: @@ -560,7 +597,8 @@
:param reason: The reason for hiding this post. """ - self.site.hide_post(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.hide_post(self, reason) self._load()
def suppress(self, reason: str) -> None: @@ -568,7 +606,8 @@
:param reason: The reason for suppressing this post. """ - self.site.suppress_post(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.suppress_post(self, reason) self._load()
def restore(self, reason: str) -> None: @@ -576,9 +615,20 @@
:param reason: The reason for restoring this post. """ - self.site.restore_post(self, reason) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.restore_post(self, reason) self._load()
def thank(self) -> None: """Thank the user who made this post.""" - self.site.thank_post(self) + with suppress_warnings(FLOW_WARNING, _NotImplementedWarning): + self.site.thank_post(self) + + +wrapper = ModuleDeprecationWrapper(__name__) +for cls in __all__: + wrapper.add_deprecated_attr( + cls, + replacement_name='', + since='9.4.0', + future_warning=False) diff --git a/pywikibot/site/_extensions.py b/pywikibot/site/_extensions.py index 46490fd..503f03f 100644 --- a/pywikibot/site/_extensions.py +++ b/pywikibot/site/_extensions.py @@ -19,7 +19,7 @@ SiteDefinitionError, ) from pywikibot.site._decorators import need_extension, need_right -from pywikibot.tools import merge_unique_dicts +from pywikibot.tools import deprecated, merge_unique_dicts
class EchoMixin: @@ -354,10 +354,18 @@
class ThanksFlowMixin:
- """APISite mixin for Thanks and Flow extension.""" + """APISite mixin for Thanks and Structured Discussions extension. + + .. deprecated:: 9.4.0 + Structured Discussions extension formerly known as Flow + extenstion is not maintained and will be removed. Users are + encouraged to stop using it. (:phab:`T371180`) + .. seealso:: :mod:`flow` + """
@need_extension('Flow') @need_extension('Thanks') + @deprecated(since='9.4.0') def thank_post(self, post): """Corresponding method to the 'action=flowthank' API action.
@@ -378,9 +386,17 @@
class FlowMixin:
- """APISite mixin for Flow extension.""" + """APISite mixin for Structured Discussions extension. + + .. deprecated:: 9.4.0 + Structured Discussions extension formerly known as Flow + extenstion is not maintained and will be removed. Users are + encouraged to stop using it. (:phab:`T371180`) + .. seealso:: :mod:`flow` + """
@need_extension('Flow') + @deprecated(since='9.4.0') def load_board(self, page): """ Retrieve the data for a Flow board. @@ -396,6 +412,7 @@ return data['flow']['view-topiclist']['result']['topiclist']
@need_extension('Flow') + @deprecated(since='9.4.0') def load_topiclist(self, page: pywikibot.flow.Board, *, @@ -440,6 +457,7 @@ return data['flow']['view-topiclist']['result']['topiclist']
@need_extension('Flow') + @deprecated(since='9.4.0') def load_topic(self, page, content_format: str): """ Retrieve the data for a Flow topic. @@ -458,6 +476,7 @@ return data['flow']['view-topic']['result']['topic']
@need_extension('Flow') + @deprecated(since='9.4.0') def load_post_current_revision(self, page, post_id, content_format: str): """ Retrieve the data for a post to a Flow topic. @@ -479,6 +498,7 @@
@need_right('edit') @need_extension('Flow') + @deprecated(since='9.4.0') def create_new_topic(self, page, title, content, content_format): """ Create a new topic on a Flow board. @@ -504,6 +524,7 @@
@need_right('edit') @need_extension('Flow') + @deprecated(since='9.4.0') def reply_to_post(self, page, reply_to_uuid: str, content: str, content_format: str) -> dict: """Reply to a post on a Flow topic. @@ -526,6 +547,7 @@
@need_right('flow-lock') @need_extension('Flow') + @deprecated(since='9.4.0') def lock_topic(self, page, lock, reason): """ Lock or unlock a Flow topic. @@ -550,6 +572,7 @@
@need_right('edit') @need_extension('Flow') + @deprecated(since='9.4.0') def moderate_topic(self, page, state, reason): """ Moderate a Flow topic. @@ -571,6 +594,8 @@ data = req.submit() return data['flow']['moderate-topic']['committed']['topic']
+ @need_extension('Flow') + @deprecated(since='9.4.0') def summarize_topic(self, page, summary): """ Add summary to Flow topic. @@ -595,6 +620,7 @@
@need_right('flow-delete') @need_extension('Flow') + @deprecated(since='9.4.0') def delete_topic(self, page, reason): """ Delete a Flow topic. @@ -610,6 +636,7 @@
@need_right('flow-hide') @need_extension('Flow') + @deprecated(since='9.4.0') def hide_topic(self, page, reason): """ Hide a Flow topic. @@ -625,6 +652,7 @@
@need_right('flow-suppress') @need_extension('Flow') + @deprecated(since='9.4.0') def suppress_topic(self, page, reason): """ Suppress a Flow topic. @@ -640,6 +668,7 @@
@need_right('edit') @need_extension('Flow') + @deprecated(since='9.4.0') def restore_topic(self, page, reason): """ Restore a Flow topic. @@ -655,6 +684,7 @@
@need_right('edit') @need_extension('Flow') + @deprecated(since='9.4.0') def moderate_post(self, post, state, reason): """ Moderate a Flow post. @@ -680,6 +710,7 @@
@need_right('flow-delete') @need_extension('Flow') + @deprecated(since='9.4.0') def delete_post(self, post, reason): """ Delete a Flow post. @@ -695,6 +726,7 @@
@need_right('flow-hide') @need_extension('Flow') + @deprecated(since='9.4.0') def hide_post(self, post, reason): """ Hide a Flow post. @@ -710,6 +742,7 @@
@need_right('flow-suppress') @need_extension('Flow') + @deprecated(since='9.4.0') def suppress_post(self, post, reason): """ Suppress a Flow post. @@ -725,6 +758,7 @@
@need_right('edit') @need_extension('Flow') + @deprecated(since='9.4.0') def restore_post(self, post, reason): """ Restore a Flow post. diff --git a/tests/flow_tests.py b/tests/flow_tests.py index 56da2aa..ffafc2f 100755 --- a/tests/flow_tests.py +++ b/tests/flow_tests.py @@ -12,12 +12,18 @@
from pywikibot import config from pywikibot.exceptions import LockedPageError, NoPageError -from pywikibot.flow import Board, Post, Topic from tests.aspects import TestCase from tests.basepage import ( BasePageLoadRevisionsCachingTestBase, BasePageMethodsTestBase, ) +from pywikibot.tools import suppress_warnings + + +with suppress_warnings(r'pywikibot.flow.(Board|Post|Topic) is deprecated ' + r'since release 9.4.0.', + DeprecationWarning): + from pywikibot.flow import Board, Post, Topic
class TestMediaWikiFlowSandbox(TestCase):
pywikibot-commits@lists.wikimedia.org