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):

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1063011?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I6249245a2267a5eaf153704969f130f20a42a95a
Gerrit-Change-Number: 1063011
Gerrit-PatchSet: 3
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to