Merge pull request #384 from jodal/feature/extension-names
Explicitly defined extension names
This commit is contained in:
commit
0302a6802a
@ -126,7 +126,7 @@ the PyPI registration.
|
||||
|
||||
The package must have ``install_requires`` on ``setuptools`` and ``Mopidy``, in
|
||||
addition to any other dependencies required by your extension. The
|
||||
``entry_points`` part must be included. The ``mopidy.extension`` part cannot be
|
||||
``entry_points`` part must be included. The ``mopidy.ext`` part cannot be
|
||||
changed, but the innermost string should be changed. It's format is
|
||||
``ext_name = package_name:Extension``. ``ext_name`` should be a short
|
||||
name for your extension, typically the part after "Mopidy-" in lowercase. This
|
||||
@ -166,7 +166,7 @@ class that will connect the rest of the dots.
|
||||
'pysoundspot',
|
||||
],
|
||||
entry_points={
|
||||
b'mopidy.extension': [
|
||||
b'mopidy.ext': [
|
||||
'soundspot = mopidy_soundspot:Extension',
|
||||
],
|
||||
},
|
||||
@ -234,7 +234,8 @@ meaningful defaults blank, like ``username`` and ``password``.
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-Soundspot'
|
||||
dist_name = 'Mopidy-Soundspot'
|
||||
ext_name = 'soundspot'
|
||||
version = __version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -130,7 +130,7 @@ def check_old_folders():
|
||||
|
||||
def load_extensions():
|
||||
extensions = []
|
||||
for entry_point in pkg_resources.iter_entry_points('mopidy.extension'):
|
||||
for entry_point in pkg_resources.iter_entry_points('mopidy.ext'):
|
||||
logger.debug('Loading extension %s', entry_point.name)
|
||||
|
||||
# TODO Filter out disabled extensions
|
||||
@ -145,18 +145,25 @@ def load_extensions():
|
||||
|
||||
extension = extension_class()
|
||||
|
||||
if entry_point.name != extension.ext_name:
|
||||
logger.warning(
|
||||
'Disabled extension %(ep)s: entry point name (%(ep)s) '
|
||||
'does not match extension name (%(ext)s)',
|
||||
{'ep': entry_point.name, 'ext': extension.ext_name})
|
||||
continue
|
||||
|
||||
# TODO Validate configuration
|
||||
|
||||
try:
|
||||
extension.validate_environment()
|
||||
except exceptions.ExtensionError as ex:
|
||||
logger.info(
|
||||
'Disabled extension: %s (%s)', extension.name, ex.message)
|
||||
'Disabled extension %s: %s', entry_point.name, ex.message)
|
||||
continue
|
||||
|
||||
logger.info(
|
||||
'Loaded extension %s: %s %s',
|
||||
entry_point.name, extension.name, extension.version)
|
||||
entry_point.name, extension.dist_name, extension.version)
|
||||
extensions.append(extension)
|
||||
return extensions
|
||||
|
||||
|
||||
@ -46,7 +46,8 @@ None
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-Local'
|
||||
dist_name = 'Mopidy-Local'
|
||||
ext_name = 'local'
|
||||
version = mopidy.__version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -67,7 +67,8 @@ https://github.com/mopidy/mopidy/issues?labels=Spotify+backend
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-Spotify'
|
||||
dist_name = 'Mopidy-Spotify'
|
||||
ext_name = 'spotify'
|
||||
version = mopidy.__version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -45,7 +45,8 @@ None
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-Stream'
|
||||
dist_name = 'Mopidy-Stream'
|
||||
ext_name = 'stream'
|
||||
version = mopidy.__version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -5,7 +5,8 @@ from mopidy.utils import config
|
||||
|
||||
class Extension(object):
|
||||
|
||||
name = None
|
||||
dist_name = None
|
||||
ext_name = None
|
||||
version = None
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -519,7 +519,8 @@ Example to get started with
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-HTTP'
|
||||
dist_name = 'Mopidy-HTTP'
|
||||
ext_name = 'http'
|
||||
version = mopidy.__version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -44,7 +44,8 @@ The frontend is enabled by default if all dependencies are available.
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-Lastfm'
|
||||
dist_name = 'Mopidy-Lastfm'
|
||||
ext_name = 'lastfm'
|
||||
version = mopidy.__version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -88,7 +88,8 @@ near future:
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-MPD'
|
||||
dist_name = 'Mopidy-MPD'
|
||||
ext_name = 'mpd'
|
||||
version = mopidy.__version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
@ -70,7 +70,8 @@ Now you can control Mopidy through the player object. Examples:
|
||||
|
||||
class Extension(ext.Extension):
|
||||
|
||||
name = 'Mopidy-MPRIS'
|
||||
dist_name = 'Mopidy-MPRIS'
|
||||
ext_name = 'mpris'
|
||||
version = mopidy.__version__
|
||||
|
||||
def get_default_config(self):
|
||||
|
||||
2
setup.py
2
setup.py
@ -44,7 +44,7 @@ setup(
|
||||
'mopidy = mopidy.__main__:main',
|
||||
'mopidy-scan = mopidy.scanner:main',
|
||||
],
|
||||
b'mopidy.extension': [
|
||||
b'mopidy.ext': [
|
||||
'http = mopidy.frontends.http:Extension [http]',
|
||||
'lastfm = mopidy.frontends.lastfm:Extension [lastfm]',
|
||||
'local = mopidy.backends.local:Extension',
|
||||
|
||||
@ -10,8 +10,11 @@ class ExtensionTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.ext = Extension()
|
||||
|
||||
def test_name_is_none(self):
|
||||
self.assertIsNone(self.ext.name)
|
||||
def test_dist_name_is_none(self):
|
||||
self.assertIsNone(self.ext.dist_name)
|
||||
|
||||
def test_ext_name_is_none(self):
|
||||
self.assertIsNone(self.ext.ext_name)
|
||||
|
||||
def test_version_is_none(self):
|
||||
self.assertIsNone(self.ext.version)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user