XZise has uploaded a new change for review.
https://gerrit.wikimedia.org/r/174107
Change subject: [FIX] Allow deprecation of all parameters
......................................................................
[FIX] Allow deprecation of all parameters
With 7aa43ba4a0c8e12bda4a62e32e062672ec8851fa the parameters of several
methods have been deprecated leaving just 'self'. Because only one or
two parameters were used before, the possibility is high that they were
used positionally (without the parameter name) and the @deprecated_args
syntax can't support that (reliably).
This adds a decorator to deprecate all parameters (except self) of a
function, so if any parameters are given at all, it'll drop them and
issue a warning.
Bug: 73489
Change-Id: I9035f3b6be86fe7b34e515e19affe8ef1a9a558e
---
M pywikibot/page.py
M pywikibot/site.py
M pywikibot/tools.py
3 files changed, 58 insertions(+), 11 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/07/174107/1
diff --git a/pywikibot/page.py b/pywikibot/page.py
index 68bfd5c..ee6ebc5 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -49,7 +49,8 @@
SiteDefinitionError
)
from pywikibot.tools import (
- ComparableMixin, deprecated, deprecate_arg, deprecated_args
+ ComparableMixin, deprecated, deprecate_arg, deprecated_args,
+ remove_all_args
)
from pywikibot import textlib
@@ -241,7 +242,7 @@
title = title.replace(forbidden, '_')
return title
- @deprecated_args(decode=None, underscore=None)
+ @remove_all_args(['decode', 'underscore'], True)
def section(self):
"""Return the name of the section this Page refers to.
@@ -536,7 +537,7 @@
return self._lastNonBotUser
- @deprecated_args(datetime=None)
+ @remove_all_args(['datetime'], True)
def editTime(self):
"""Return timestamp of last revision to page.
@@ -1273,7 +1274,7 @@
return self.site.pageimages(self, step=step, total=total,
content=content)
- @deprecate_arg("get_redirect", None)
+ @remove_all_args(['get_redirect'], True)
def templatesWithParams(self):
"""Iterate templates used on this Page.
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 4a139fa..6249e00 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -29,7 +29,7 @@
import pywikibot.family
from pywikibot.tools import (
itergroup, deprecated, deprecate_arg, UnicodeMixin, ComparableMixin,
- redirect_func, add_decorated_full_name, deprecated_args,
+ redirect_func, add_decorated_full_name, deprecated_args, remove_all_args,
SelfCallDict, SelfCallString,
)
from pywikibot.tools import MediaWikiVersion as LV
@@ -707,17 +707,17 @@
old_name='normalizeNamespace',
class_name='BaseSite')
- @deprecated_args(default=None)
+ @remove_all_args(('default', ), True)
def redirect(self):
"""Return list of localized redirect tags for the site."""
return [u"REDIRECT"]
- @deprecated_args(default=None)
+ @remove_all_args(('default', ), True)
def pagenamecodes(self):
"""Return list of localized PAGENAME tags for the site."""
return [u"PAGENAME"]
- @deprecated_args(default=None)
+ @remove_all_args(('default', ), True)
def pagename2codes(self):
"""Return list of localized PAGENAMEE tags for the site."""
return [u"PAGENAMEE"]
@@ -2001,7 +2001,7 @@
else:
return [word]
- @deprecated_args(default=None)
+ @remove_all_args(('default', ), True)
def redirect(self):
"""Return the localized #REDIRECT keyword."""
# return the magic word without the preceding '#' character
@@ -2024,12 +2024,12 @@
pattern = None
return BaseSite.redirectRegex(self, pattern)
- @deprecated_args(default=None)
+ @remove_all_args(('default', ), True)
def pagenamecodes(self):
"""Return list of localized PAGENAME tags for the site."""
return self.getmagicwords("pagename")
- @deprecated_args(default=None)
+ @remove_all_args(('default', ), True)
def pagename2codes(self):
"""Return list of localized PAGENAMEE tags for the site."""
return self.getmagicwords("pagenamee")
diff --git a/pywikibot/tools.py b/pywikibot/tools.py
index ad890eb..60d1857 100644
--- a/pywikibot/tools.py
+++ b/pywikibot/tools.py
@@ -656,6 +656,52 @@
return decorator
+def remove_all_args(arg_names, has_self):
+ """
+ Decorator to declare all args deprecated and drop them.
+
+ @param arg_names: The names of all arguments.
+ @param has_self: Don't drop the first positional argument.
+ """
+ def decorator(obj):
+ """Outer wrapper.
+
+ The outer wrapper is used to create the decorating wrapper.
+
+ @param obj: function being wrapped
+ @type obj: object
+ """
+ def wrapper(*__args, **__kw):
+ """Replacement function.
+
+ @param __args: args passed to the decorated function
+ @type __args: list
+ @param __kwargs: kwargs passed to the decorated function
+ @type __kwargs: dict
+ @return: the value returned by the decorated function
+ @rtype: any
+ """
+ name = obj.__full_name__
+ if has_self:
+ new_args = (__args[0], )
+ else:
+ new_args = ()
+
+ if len(__args) > len(new_args) or __kw:
+ warning(u"All arguments ('{0}') of {1} are deprecated.".format(
+ "', '".join(arg_names), name))
+ return obj(*new_args)
+
+ wrapper.__doc__ = obj.__doc__
+ wrapper.__name__ = obj.__name__
+ wrapper.__module__ = obj.__module__
+ if not hasattr(obj, '__full_name__'):
+ add_decorated_full_name(obj)
+ wrapper.__full_name__ = obj.__full_name__
+ return wrapper
+ return decorator
+
+
def redirect_func(target, source_module=None, target_module=None,
old_name=None, class_name=None):
"""
--
To view, visit https://gerrit.wikimedia.org/r/174107
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9035f3b6be86fe7b34e515e19affe8ef1a9a558e
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: XZise <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits