Add extra plugin properties
* Add 'Experimental' and 'Beta' status options. * Add audience property with possible values: 'All', 'Developer' and 'Expert'. * Add maintainers and maintainers email properties. * Add requires_mod, requires_gi and requires_exe properties to specify addon requirements. * Allow help url for all plugin types.
This commit is contained in:
parent
ae1b4dbf2a
commit
70265c3a94
@ -52,11 +52,26 @@ LOG = logging.getLogger('._manager')
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
#a plugin is stable or unstable
|
# Development status
|
||||||
STABLE = 0
|
UNSTABLE = 0
|
||||||
UNSTABLE = 1
|
EXPERIMENTAL = 1
|
||||||
STATUS = [STABLE, UNSTABLE]
|
BETA = 2
|
||||||
STATUSTEXT = {STABLE: _('Stable'), UNSTABLE: _('Unstable')}
|
STABLE = 3
|
||||||
|
STATUS = [UNSTABLE, EXPERIMENTAL, BETA, STABLE]
|
||||||
|
STATUSTEXT = {UNSTABLE: _('Unstable'),
|
||||||
|
EXPERIMENTAL: _('Experimental'),
|
||||||
|
BETA: _('Beta'),
|
||||||
|
STABLE: _('Stable')}
|
||||||
|
|
||||||
|
# Intended audience
|
||||||
|
EVERYONE = 0
|
||||||
|
DEVELOPER = 1
|
||||||
|
EXPERT = 2
|
||||||
|
AUDIENCE = [EVERYONE, DEVELOPER, EXPERT]
|
||||||
|
AUDIENCETEXT = {EVERYONE: _('Everyone'),
|
||||||
|
DEVELOPER: _('Developer'),
|
||||||
|
EXPERT: _('Expert')}
|
||||||
|
|
||||||
#possible plugin types
|
#possible plugin types
|
||||||
REPORT = 0
|
REPORT = 0
|
||||||
QUICKREPORT = 1 # deprecated
|
QUICKREPORT = 1 # deprecated
|
||||||
@ -208,8 +223,10 @@ class PluginData:
|
|||||||
.. attribute:: version
|
.. attribute:: version
|
||||||
The version of the plugin
|
The version of the plugin
|
||||||
.. attribute:: status
|
.. attribute:: status
|
||||||
The status of the plugin, STABLE or UNSTABLE
|
The development status of the plugin, UNSTABLE, EXPERIMENTAL, BETA or
|
||||||
UNSTABLE is only visible in development code, not in release
|
STABLE. UNSTABLE is only visible in development code, not in release
|
||||||
|
.. attribute:: audience
|
||||||
|
The intended audience of the plugin, EVERYONE, DEVELOPER or EXPERT.
|
||||||
.. attribute:: fname
|
.. attribute:: fname
|
||||||
The python file where the plugin implementation can be found
|
The python file where the plugin implementation can be found
|
||||||
.. attribute:: fpath
|
.. attribute:: fpath
|
||||||
@ -221,6 +238,10 @@ class PluginData:
|
|||||||
List of authors of the plugin, default=[]
|
List of authors of the plugin, default=[]
|
||||||
.. attribute:: authors_email
|
.. attribute:: authors_email
|
||||||
List of emails of the authors of the plugin, default=[]
|
List of emails of the authors of the plugin, default=[]
|
||||||
|
.. attribute:: maintainers
|
||||||
|
List of maintainers of the plugin, default=[]
|
||||||
|
.. attribute:: maintainers_email
|
||||||
|
List of emails of the maintainers of the plugin, default=[]
|
||||||
.. attribute:: supported
|
.. attribute:: supported
|
||||||
Bool value indicating if the plugin is still supported, default=True
|
Bool value indicating if the plugin is still supported, default=True
|
||||||
.. attribute:: load_on_reg
|
.. attribute:: load_on_reg
|
||||||
@ -240,6 +261,18 @@ class PluginData:
|
|||||||
.. attribute: icondir
|
.. attribute: icondir
|
||||||
The directory to use for the icons. If icondir is not set or None, it
|
The directory to use for the icons. If icondir is not set or None, it
|
||||||
reverts to the plugindirectory itself.
|
reverts to the plugindirectory itself.
|
||||||
|
.. attribute:: help_url
|
||||||
|
The URL where documentation for the plugin can be found
|
||||||
|
.. attribute:: requires_mod
|
||||||
|
A list of required modules that should be importable using the python
|
||||||
|
`import` statement.
|
||||||
|
.. attribute:: requires_gi
|
||||||
|
A list of (module, version) tuples that specify required modules that
|
||||||
|
are reuired to be loaded via the GObject introspection system.
|
||||||
|
eg: [('GExiv2', '0.10')]
|
||||||
|
.. attribute:: requires_exe
|
||||||
|
A list of executables required by the plugin. These are searched for in
|
||||||
|
the paths specified in the PATH environment variable.
|
||||||
|
|
||||||
Attributes for RELCALC plugins:
|
Attributes for RELCALC plugins:
|
||||||
|
|
||||||
@ -334,8 +367,6 @@ class PluginData:
|
|||||||
Title to use for the gramplet, default = _('Gramplet')
|
Title to use for the gramplet, default = _('Gramplet')
|
||||||
.. attribute:: navtypes
|
.. attribute:: navtypes
|
||||||
Navigation types that the gramplet is appropriate for, default = []
|
Navigation types that the gramplet is appropriate for, default = []
|
||||||
.. attribute:: help_url
|
|
||||||
The URL where documentation for the URL can be found
|
|
||||||
|
|
||||||
Attributes for VIEW plugins
|
Attributes for VIEW plugins
|
||||||
|
|
||||||
@ -392,17 +423,24 @@ class PluginData:
|
|||||||
self._gramps_target_version = None
|
self._gramps_target_version = None
|
||||||
self._description = None
|
self._description = None
|
||||||
self._status = UNSTABLE
|
self._status = UNSTABLE
|
||||||
|
self._audience = EVERYONE
|
||||||
self._fname = None
|
self._fname = None
|
||||||
self._fpath = None
|
self._fpath = None
|
||||||
self._ptype = None
|
self._ptype = None
|
||||||
self._authors = []
|
self._authors = []
|
||||||
self._authors_email = []
|
self._authors_email = []
|
||||||
|
self._maintainers = []
|
||||||
|
self._maintainers_email = []
|
||||||
self._supported = True
|
self._supported = True
|
||||||
self._load_on_reg = False
|
self._load_on_reg = False
|
||||||
self._icons = []
|
self._icons = []
|
||||||
self._icondir = None
|
self._icondir = None
|
||||||
self._depends_on = []
|
self._depends_on = []
|
||||||
|
self._requires_mod = []
|
||||||
|
self._requires_gi = []
|
||||||
|
self._requires_exe = []
|
||||||
self._include_in_listing = True
|
self._include_in_listing = True
|
||||||
|
self._help_url = None
|
||||||
#derived var
|
#derived var
|
||||||
self.mod_name = None
|
self.mod_name = None
|
||||||
#RELCALC attr
|
#RELCALC attr
|
||||||
@ -442,7 +480,6 @@ class PluginData:
|
|||||||
self._gramplet_title = _('Gramplet')
|
self._gramplet_title = _('Gramplet')
|
||||||
self._navtypes = []
|
self._navtypes = []
|
||||||
self._orientation = None
|
self._orientation = None
|
||||||
self._help_url = None
|
|
||||||
#VIEW attr
|
#VIEW attr
|
||||||
self._viewclass = None
|
self._viewclass = None
|
||||||
self._stock_icon = None
|
self._stock_icon = None
|
||||||
@ -510,6 +547,14 @@ class PluginData:
|
|||||||
def _get_status(self):
|
def _get_status(self):
|
||||||
return self._status
|
return self._status
|
||||||
|
|
||||||
|
def _set_audience(self, audience):
|
||||||
|
if audience not in AUDIENCE:
|
||||||
|
raise ValueError('plugin audience cannot be %s' % str(audience))
|
||||||
|
self._audience = audience
|
||||||
|
|
||||||
|
def _get_audience(self):
|
||||||
|
return self._audience
|
||||||
|
|
||||||
def _set_fname(self, fname):
|
def _set_fname(self, fname):
|
||||||
self._fname = fname
|
self._fname = fname
|
||||||
|
|
||||||
@ -558,6 +603,22 @@ class PluginData:
|
|||||||
def _get_authors_email(self):
|
def _get_authors_email(self):
|
||||||
return self._authors_email
|
return self._authors_email
|
||||||
|
|
||||||
|
def _set_maintainers(self, maintainers):
|
||||||
|
if not maintainers or not isinstance(maintainers, list):
|
||||||
|
return
|
||||||
|
self._maintainers = maintainers
|
||||||
|
|
||||||
|
def _get_maintainers(self):
|
||||||
|
return self._maintainers
|
||||||
|
|
||||||
|
def _set_maintainers_email(self, maintainers_email):
|
||||||
|
if not maintainers_email or not isinstance(maintainers_email, list):
|
||||||
|
return
|
||||||
|
self._maintainers_email = maintainers_email
|
||||||
|
|
||||||
|
def _get_maintainers_email(self):
|
||||||
|
return self._maintainers_email
|
||||||
|
|
||||||
def _set_supported(self, supported):
|
def _set_supported(self, supported):
|
||||||
if not isinstance(supported, bool):
|
if not isinstance(supported, bool):
|
||||||
raise ValueError('Plugin must have supported=True or False')
|
raise ValueError('Plugin must have supported=True or False')
|
||||||
@ -596,6 +657,30 @@ class PluginData:
|
|||||||
raise ValueError('Plugin must have depends_on as a list')
|
raise ValueError('Plugin must have depends_on as a list')
|
||||||
self._depends_on = depends
|
self._depends_on = depends
|
||||||
|
|
||||||
|
def _get_requires_mod(self):
|
||||||
|
return self._requires_mod
|
||||||
|
|
||||||
|
def _set_requires_mod(self, requires):
|
||||||
|
if not isinstance(requires, list):
|
||||||
|
raise ValueError('Plugin must have requires_mod as a list')
|
||||||
|
self._requires_mod = requires
|
||||||
|
|
||||||
|
def _get_requires_gi(self):
|
||||||
|
return self._requires_gi
|
||||||
|
|
||||||
|
def _set_requires_gi(self, requires):
|
||||||
|
if not isinstance(requires, list):
|
||||||
|
raise ValueError('Plugin must have requires_gi as a list')
|
||||||
|
self._requires_gi = requires
|
||||||
|
|
||||||
|
def _get_requires_exe(self):
|
||||||
|
return self._requires_exe
|
||||||
|
|
||||||
|
def _set_requires_exe(self, requires):
|
||||||
|
if not isinstance(requires, list):
|
||||||
|
raise ValueError('Plugin must have requires_exe as a list')
|
||||||
|
self._requires_exe = requires
|
||||||
|
|
||||||
def _get_include_in_listing(self):
|
def _get_include_in_listing(self):
|
||||||
return self._include_in_listing
|
return self._include_in_listing
|
||||||
|
|
||||||
@ -604,6 +689,12 @@ class PluginData:
|
|||||||
raise ValueError('Plugin must have include_in_listing as a bool')
|
raise ValueError('Plugin must have include_in_listing as a bool')
|
||||||
self._include_in_listing = include
|
self._include_in_listing = include
|
||||||
|
|
||||||
|
def _set_help_url(self, help_url):
|
||||||
|
self._help_url = help_url
|
||||||
|
|
||||||
|
def _get_help_url(self):
|
||||||
|
return self._help_url
|
||||||
|
|
||||||
id = property(_get_id, _set_id)
|
id = property(_get_id, _set_id)
|
||||||
name = property(_get_name, _set_name)
|
name = property(_get_name, _set_name)
|
||||||
name_accell = property(_get_name_accell, _set_name_accell)
|
name_accell = property(_get_name_accell, _set_name_accell)
|
||||||
@ -612,17 +703,24 @@ class PluginData:
|
|||||||
gramps_target_version = property(_get_gramps_target_version,
|
gramps_target_version = property(_get_gramps_target_version,
|
||||||
_set_gramps_target_version)
|
_set_gramps_target_version)
|
||||||
status = property(_get_status, _set_status)
|
status = property(_get_status, _set_status)
|
||||||
|
audience = property(_get_audience, _set_audience)
|
||||||
fname = property(_get_fname, _set_fname)
|
fname = property(_get_fname, _set_fname)
|
||||||
fpath = property(_get_fpath, _set_fpath)
|
fpath = property(_get_fpath, _set_fpath)
|
||||||
ptype = property(_get_ptype, _set_ptype)
|
ptype = property(_get_ptype, _set_ptype)
|
||||||
authors = property(_get_authors, _set_authors)
|
authors = property(_get_authors, _set_authors)
|
||||||
authors_email = property(_get_authors_email, _set_authors_email)
|
authors_email = property(_get_authors_email, _set_authors_email)
|
||||||
|
maintainers = property(_get_maintainers, _set_maintainers)
|
||||||
|
maintainers_email = property(_get_maintainers_email, _set_maintainers_email)
|
||||||
supported = property(_get_supported, _set_supported)
|
supported = property(_get_supported, _set_supported)
|
||||||
load_on_reg = property(_get_load_on_reg, _set_load_on_reg)
|
load_on_reg = property(_get_load_on_reg, _set_load_on_reg)
|
||||||
icons = property(_get_icons, _set_icons)
|
icons = property(_get_icons, _set_icons)
|
||||||
icondir = property(_get_icondir, _set_icondir)
|
icondir = property(_get_icondir, _set_icondir)
|
||||||
depends_on = property(_get_depends_on, _set_depends_on)
|
depends_on = property(_get_depends_on, _set_depends_on)
|
||||||
|
requires_mod = property(_get_requires_mod, _set_requires_mod)
|
||||||
|
requires_gi = property(_get_requires_gi, _set_requires_gi)
|
||||||
|
requires_exe = property(_get_requires_exe, _set_requires_exe)
|
||||||
include_in_listing = property(_get_include_in_listing, _set_include_in_listing)
|
include_in_listing = property(_get_include_in_listing, _set_include_in_listing)
|
||||||
|
help_url = property(_get_help_url, _set_help_url)
|
||||||
|
|
||||||
def statustext(self):
|
def statustext(self):
|
||||||
return STATUSTEXT[self.status]
|
return STATUSTEXT[self.status]
|
||||||
@ -885,14 +983,6 @@ class PluginData:
|
|||||||
def _get_gramplet_title(self):
|
def _get_gramplet_title(self):
|
||||||
return self._gramplet_title
|
return self._gramplet_title
|
||||||
|
|
||||||
def _set_help_url(self, help_url):
|
|
||||||
if not self._ptype == GRAMPLET:
|
|
||||||
raise ValueError('help_url may only be set for GRAMPLET plugins')
|
|
||||||
self._help_url = help_url
|
|
||||||
|
|
||||||
def _get_help_url(self):
|
|
||||||
return self._help_url
|
|
||||||
|
|
||||||
def _set_navtypes(self, navtypes):
|
def _set_navtypes(self, navtypes):
|
||||||
if not self._ptype == GRAMPLET:
|
if not self._ptype == GRAMPLET:
|
||||||
raise ValueError('navtypes may only be set for GRAMPLET plugins')
|
raise ValueError('navtypes may only be set for GRAMPLET plugins')
|
||||||
@ -917,7 +1007,6 @@ class PluginData:
|
|||||||
gramplet_title = property(_get_gramplet_title, _set_gramplet_title)
|
gramplet_title = property(_get_gramplet_title, _set_gramplet_title)
|
||||||
navtypes = property(_get_navtypes, _set_navtypes)
|
navtypes = property(_get_navtypes, _set_navtypes)
|
||||||
orientation = property(_get_orientation, _set_orientation)
|
orientation = property(_get_orientation, _set_orientation)
|
||||||
help_url = property(_get_help_url, _set_help_url)
|
|
||||||
|
|
||||||
def _set_viewclass(self, viewclass):
|
def _set_viewclass(self, viewclass):
|
||||||
if not self._ptype == VIEW:
|
if not self._ptype == VIEW:
|
||||||
@ -1078,8 +1167,13 @@ def make_environment(**kwargs):
|
|||||||
env = {
|
env = {
|
||||||
'newplugin': newplugin,
|
'newplugin': newplugin,
|
||||||
'register': register,
|
'register': register,
|
||||||
'STABLE': STABLE,
|
|
||||||
'UNSTABLE': UNSTABLE,
|
'UNSTABLE': UNSTABLE,
|
||||||
|
'EXPERIMENTAL': EXPERIMENTAL,
|
||||||
|
'BETA': BETA,
|
||||||
|
'STABLE': STABLE,
|
||||||
|
'EVERYONE': EVERYONE,
|
||||||
|
'DEVELOPER': DEVELOPER,
|
||||||
|
'EXPERT': EXPERT,
|
||||||
'REPORT': REPORT,
|
'REPORT': REPORT,
|
||||||
'QUICKREPORT': QUICKREPORT,
|
'QUICKREPORT': QUICKREPORT,
|
||||||
'TOOL': TOOL,
|
'TOOL': TOOL,
|
||||||
|
Loading…
Reference in New Issue
Block a user