Files
Iris/mopidy_iris/__init__.py

126 lines
3.3 KiB
Python
Raw Normal View History

2016-10-30 07:51:39 +13:00
from __future__ import unicode_literals
import logging, os, json
import tornado.web
import tornado.websocket
2017-02-18 12:45:48 +13:00
import handlers
2016-10-30 07:51:39 +13:00
from mopidy import config, ext
2017-02-18 12:45:48 +13:00
from frontend import IrisFrontend
2017-02-18 22:04:05 +13:00
from handlers import WebsocketHandler, HttpHandler
2017-02-18 12:45:48 +13:00
from core import IrisCore
2016-10-30 07:51:39 +13:00
logger = logging.getLogger(__name__)
2019-02-21 18:30:30 +13:00
__version__ = '3.33.0'
2016-10-30 07:51:39 +13:00
##
# Core extension class
#
# Loads config and gets the party started. Initiates any additional frontends, etc.
##
class Extension( ext.Extension ):
2016-10-30 07:51:39 +13:00
dist_name = 'Mopidy-Iris'
ext_name = 'iris'
version = __version__
def get_default_config(self):
conf_file = os.path.join(os.path.dirname(__file__), 'ext.conf')
return config.read(conf_file)
def get_config_schema(self):
schema = config.ConfigSchema(self.ext_name)
schema['enabled'] = config.Boolean()
schema['country'] = config.String()
schema['locale'] = config.String()
2017-11-02 21:20:56 +13:00
schema['spotify_authorization_url'] = config.String()
schema['lastfm_authorization_url'] = config.String()
2018-08-20 08:48:46 +12:00
schema['genius_authorization_url'] = config.String()
schema['snapcast_enabled'] = config.Boolean()
schema['snapcast_host'] = config.String()
schema['snapcast_port'] = config.Integer()
2016-10-30 07:51:39 +13:00
return schema
def setup(self, registry):
# Add web extension
registry.add('http:app', {
'name': self.ext_name,
2017-02-18 12:45:48 +13:00
'factory': iris_factory
2016-10-30 07:51:39 +13:00
})
2017-02-18 12:45:48 +13:00
# create our core instance
mem.iris = IrisCore()
mem.iris.version = self.version
# Add our frontend
registry.add('frontend', IrisFrontend)
##
# Customised handler for react router URLS
#
# This routes all URLs to the same path, so that React can handle the path etc
##
class ReactRouterHandler(tornado.web.StaticFileHandler):
def initialize(self, path):
self.path = path
self.dirname, self.filename = os.path.split(path)
super(ReactRouterHandler, self).initialize(self.dirname)
def get(self, path=None, include_body=True):
super(ReactRouterHandler, self).get(self.path, include_body)
2017-02-18 12:45:48 +13:00
##
# Frontend factory
##
2017-02-18 12:45:48 +13:00
def iris_factory(config, core):
path = os.path.join( os.path.dirname(__file__), 'static')
return [
2019-03-06 13:28:37 +13:00
(
r"/images/(.*)",
tornado.web.StaticFileHandler,
{
'path': config['local-images']['image_dir']
}
),
(
r'/http/([^/]*)',
handlers.HttpHandler,
{
'core': core,
'config': config
}
),
(
r'/ws/?',
handlers.WebsocketHandler,
{
'core': core,
'config': config
}
),
(
r'/assets/(.*)',
tornado.web.StaticFileHandler,
{
'path': path+'/assets'
}
),
(
r'/app/(.*)',
tornado.web.StaticFileHandler,
{
'path': path+'/app'
}
),
(
r'/(.*)',
ReactRouterHandler, {
'path': path+'/index.html'
}
),
2017-03-02 20:37:04 +13:00
]