|
|
|
@@ -18,11 +18,16 @@ |
|
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
|
|
# SOFTWARE. |
|
|
|
|
|
|
|
from typing import TYPE_CHECKING, Any, Union |
|
|
|
|
|
|
|
import re |
|
|
|
|
|
|
|
from ...string_mixin import StringMixIn |
|
|
|
from ...utils import parse_anything |
|
|
|
|
|
|
|
if TYPE_CHECKING: |
|
|
|
from ...wikicode import Wikicode |
|
|
|
|
|
|
|
__all__ = ["Parameter"] |
|
|
|
|
|
|
|
|
|
|
|
@@ -35,47 +40,47 @@ class Parameter(StringMixIn): |
|
|
|
``showkey`` is ``True``. |
|
|
|
""" |
|
|
|
|
|
|
|
def __init__(self, name, value, showkey=True): |
|
|
|
def __init__(self, name: Any, value: Any, showkey: bool = True) -> None: |
|
|
|
super().__init__() |
|
|
|
self.name = name |
|
|
|
self.value = value |
|
|
|
self.showkey = showkey |
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
def __str__(self) -> str: |
|
|
|
if self.showkey: |
|
|
|
return str(self.name) + "=" + str(self.value) |
|
|
|
return str(self.value) |
|
|
|
|
|
|
|
@staticmethod |
|
|
|
def can_hide_key(key): |
|
|
|
def can_hide_key(key: Any) -> Union[re.Match, None]: |
|
|
|
"""Return whether or not the given key can be hidden.""" |
|
|
|
return re.match(r"[1-9][0-9]*$", str(key).strip()) |
|
|
|
|
|
|
|
@property |
|
|
|
def name(self): |
|
|
|
def name(self) -> "Wikicode": |
|
|
|
"""The name of the parameter as a :class:`.Wikicode` object.""" |
|
|
|
return self._name |
|
|
|
|
|
|
|
@name.setter |
|
|
|
def name(self, newval: Any) -> None: |
|
|
|
self._name = parse_anything(newval) |
|
|
|
|
|
|
|
@property |
|
|
|
def value(self): |
|
|
|
def value(self) -> "Wikicode": |
|
|
|
"""The value of the parameter as a :class:`.Wikicode` object.""" |
|
|
|
return self._value |
|
|
|
|
|
|
|
@value.setter |
|
|
|
def value(self, newval: Any) -> None: |
|
|
|
self._value = parse_anything(newval) |
|
|
|
|
|
|
|
@property |
|
|
|
def showkey(self): |
|
|
|
def showkey(self) -> bool: |
|
|
|
"""Whether to show the parameter's key (i.e., its "name").""" |
|
|
|
return self._showkey |
|
|
|
|
|
|
|
@name.setter |
|
|
|
def name(self, newval): |
|
|
|
self._name = parse_anything(newval) |
|
|
|
|
|
|
|
@value.setter |
|
|
|
def value(self, newval): |
|
|
|
self._value = parse_anything(newval) |
|
|
|
|
|
|
|
@showkey.setter |
|
|
|
def showkey(self, newval): |
|
|
|
def showkey(self, newval: Any) -> None: |
|
|
|
newval = bool(newval) |
|
|
|
if not newval and not self.can_hide_key(self.name): |
|
|
|
raise ValueError("parameter key {!r} cannot be hidden".format(self.name)) |
|
|
|
|