Source code for plugins.info
# ../plugins/info.py
"""Provides plugin information storing."""
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python Imports
# Cvars
from cvars.public import PublicConVar
# =============================================================================
# >> ALL DECLARATION
# =============================================================================
__all__ = ('PluginInfo',
)
# =============================================================================
# >> CLASSES
# =============================================================================
[docs]class PluginInfo(dict):
"""Store information for a plugin."""
[docs] def __init__(self, name, verbose_name=None, author=None, description=None,
version=None, url=None, permissions=None, public_convar=True,
display_in_listing=None, **kwargs):
"""Initialize the instance.
:param str name:
Name of the plugin on the file system.
:param str verbose_name:
A verbose name for the plugin (e.g. GunGame).
:param str author:
Name of the author.
:param str description:
A short description of what the plugin does.
:param str version:
Current version of the plugin.
:param str url:
A link to a thread in the 'Plugin Releases' forum section or the
plugin's SPPM link.
:param list permissions:
A list of permissions defined or used by the plugin. The list
should contain tuples that define the permission and a short
description of the permission.
:param public_convar:
If set to ``True``, a public convar will be generated based on the
plugin name, verbose name and version. Set it to ``False`` if you
don't want a public convar or set it to a dictionary containing
the parameters to create a :class:`cvars.public.PublicConvar`
instance.
:param list display_in_listing:
A list that contains custom attributes that should appear in the
plugin listing (e.g. sp plugin list).
:param kwargs:
Any additional attributes you want to set. If you want those
attributes to appear in the plugin listing, update
:attr:`display_in_listing`.
"""
super().__init__(**kwargs)
self.name = name
self._verbose_name = verbose_name
self.author = author
self.description = description
self._version = version
self.url = url
# All permissions defined by this plugin
# A list that contains tuples:
# Example:
# [('test1.kick', 'Permission to kick players.'),
# ('test1.ban', 'Permission to ban players.'),
# ('test1.start_vote', 'Permission to start a vote.')]
self.permissions = [] if permissions is None else permissions
self.public_convar = public_convar
self.display_in_listing = [] if display_in_listing is None else display_in_listing
def _create_public_convar(self):
"""Create a public convar if :attr:`public_convar` is set to True."""
name = '{}_version'.format(self.name)
description = '{} version.'.format(self.verbose_name)
if self.public_convar is True:
self.public_convar = PublicConVar(
name,
self.version,
description
)
elif isinstance(self.public_convar, dict):
self.public_convar = PublicConVar(
self.public_convar.pop('name', name),
self.public_convar.pop('value', self.version),
self.public_convar.pop('description', description),
**self.public_convar)
[docs] def get_verbose_name(self):
"""Return the verbose name of the plugin.
If no verbose name has been set, the plugin name will be titled.
:rtype: str
"""
if self._verbose_name is None:
return self.name.replace('_', ' ').title()
return self._verbose_name
[docs] def set_verbose_name(self, value):
"""Set the verbose name of the plugin."""
self._verbose_name = value
verbose_name = property(get_verbose_name, set_verbose_name)
[docs] def get_version(self):
"""Return the plugin's version.
:rtype: str
"""
if self._version is None:
return 'unversioned'
return self._version
[docs] def set_version(self, value):
"""Set the plugin's version."""
self._version = value
version = property(get_version, set_version)
# Redirect __getitem__ and __setitem__ to __getattr__ and __setattr__
__getattr__ = dict.__getitem__
__setattr__ = dict.__setitem__