Removed dashboard configuration from HttpBackend, removed old HTTP
static files and replaced them with Vue app target dist/ directory.
This commit is contained in:
parent
887a0e5e88
commit
04cb2324aa
3 changed files with 3 additions and 135 deletions
|
@ -1,3 +1,2 @@
|
||||||
recursive-include platypush/backend/http/static *
|
recursive-include platypush/backend/http/dist *
|
||||||
recursive-include platypush/backend/http/templates *
|
|
||||||
include platypush/plugins/http/webpage/mercury-parser.js
|
include platypush/plugins/http/webpage/mercury-parser.js
|
||||||
|
|
|
@ -29,7 +29,7 @@ class HttpBackend(Backend):
|
||||||
by default available on your web root document. Any plugin that you have configured and available as a panel
|
by default available on your web root document. Any plugin that you have configured and available as a panel
|
||||||
plugin will appear on the web panel as well as a tab.
|
plugin will appear on the web panel as well as a tab.
|
||||||
|
|
||||||
* To display a fullscreen dashboard with your configured widgets, by default available under ``/dashboard``
|
* To display a fullscreen dashboard with your configured widgets, by default available under ``/dashboard/<dashboard_name>``
|
||||||
|
|
||||||
* To stream media over HTTP through the ``/media`` endpoint
|
* To stream media over HTTP through the ``/media`` endpoint
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ class HttpBackend(Backend):
|
||||||
|
|
||||||
def __init__(self, port=_DEFAULT_HTTP_PORT,
|
def __init__(self, port=_DEFAULT_HTTP_PORT,
|
||||||
websocket_port=_DEFAULT_WEBSOCKET_PORT,
|
websocket_port=_DEFAULT_WEBSOCKET_PORT,
|
||||||
disable_websocket=False, dashboard=None, resource_dirs=None,
|
disable_websocket=False, resource_dirs=None,
|
||||||
ssl_cert=None, ssl_key=None, ssl_cafile=None, ssl_capath=None,
|
ssl_cert=None, ssl_key=None, ssl_cafile=None, ssl_capath=None,
|
||||||
maps=None, run_externally=False, uwsgi_args=None, **kwargs):
|
maps=None, run_externally=False, uwsgi_args=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -104,38 +104,6 @@ class HttpBackend(Backend):
|
||||||
the value is the absolute path to expose.
|
the value is the absolute path to expose.
|
||||||
:type resource_dirs: dict[str, str]
|
:type resource_dirs: dict[str, str]
|
||||||
|
|
||||||
:param dashboard: Set it if you want to use the dashboard service. It will contain the configuration for the
|
|
||||||
widgets to be used (look under ``platypush/backend/http/templates/widgets/`` for the available widgets).
|
|
||||||
|
|
||||||
Example configuration::
|
|
||||||
|
|
||||||
dashboard:
|
|
||||||
background_image: https://site/image.png
|
|
||||||
widgets: # Each row of the dashboard will have 6 columns
|
|
||||||
-
|
|
||||||
widget: calendar # Calendar widget
|
|
||||||
columns: 6
|
|
||||||
-
|
|
||||||
widget: music # Music widget
|
|
||||||
columns: 3
|
|
||||||
-
|
|
||||||
widget: date-time-weather # Date, time and weather widget
|
|
||||||
columns: 3
|
|
||||||
-
|
|
||||||
widget: image-carousel # Image carousel
|
|
||||||
columns: 6
|
|
||||||
# Absolute path (valid as long as it's a subdirectory of one of the available `resource_dirs`)
|
|
||||||
images_path: ~/Dropbox/Photos/carousel
|
|
||||||
refresh_seconds: 15
|
|
||||||
-
|
|
||||||
widget: rss-news # RSS feeds widget
|
|
||||||
# Requires backend.http.poll to be enabled with some RSS sources and write them to sqlite db
|
|
||||||
columns: 6
|
|
||||||
limit: 25
|
|
||||||
db: "sqlite:////home/user/.local/share/platypush/feeds/rss.db"
|
|
||||||
|
|
||||||
:type dashboard: dict
|
|
||||||
|
|
||||||
:param run_externally: If set, then the HTTP backend will not directly
|
:param run_externally: If set, then the HTTP backend will not directly
|
||||||
spawn the web server. Set this option if you plan to run the webapp
|
spawn the web server. Set this option if you plan to run the webapp
|
||||||
in a separate web server (recommended), like uwsgi or uwsgi+nginx.
|
in a separate web server (recommended), like uwsgi or uwsgi+nginx.
|
||||||
|
@ -161,7 +129,6 @@ class HttpBackend(Backend):
|
||||||
|
|
||||||
self.port = port
|
self.port = port
|
||||||
self.websocket_port = websocket_port
|
self.websocket_port = websocket_port
|
||||||
self.dashboard = dashboard or {}
|
|
||||||
self.maps = maps or {}
|
self.maps = maps or {}
|
||||||
self.server_proc = None
|
self.server_proc = None
|
||||||
self.disable_websocket = disable_websocket
|
self.disable_websocket = disable_websocket
|
||||||
|
|
98
setup.py
98
setup.py
|
@ -1,83 +1,9 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import errno
|
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
from distutils.cmd import Command
|
|
||||||
from distutils.command.build import build as _build
|
|
||||||
from distutils.command.install import install as _install
|
|
||||||
from setuptools.command.bdist_egg import bdist_egg as _bdist_egg
|
|
||||||
from setuptools import setup, find_packages
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
|
||||||
class WebBuildCommand(Command):
|
|
||||||
"""
|
|
||||||
Custom command to build the web files
|
|
||||||
"""
|
|
||||||
|
|
||||||
description = 'Build components and styles for the web pages'
|
|
||||||
user_options = []
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def generate_css_files(cls):
|
|
||||||
try:
|
|
||||||
# noinspection PyPackageRequirements
|
|
||||||
from scss import Compiler
|
|
||||||
except ImportError:
|
|
||||||
print('pyScss module not found: {}. You will have to generate ' +
|
|
||||||
'the CSS files manually through python setup.py build install')
|
|
||||||
return
|
|
||||||
|
|
||||||
print('Building CSS files')
|
|
||||||
base_path = path(os.path.join('platypush', 'backend', 'http', 'static', 'css'))
|
|
||||||
input_path = path(os.path.join(base_path, 'source'))
|
|
||||||
output_path = path(os.path.join(base_path, 'dist'))
|
|
||||||
|
|
||||||
for root, dirs, files in os.walk(input_path, followlinks=True):
|
|
||||||
scss_file = os.path.join(root, 'index.scss')
|
|
||||||
if os.path.isfile(scss_file):
|
|
||||||
css_path = os.path.split(scss_file[len(input_path):])[0][1:] + '.css'
|
|
||||||
css_dir = os.path.join(output_path, os.path.dirname(css_path))
|
|
||||||
css_file = os.path.join(css_dir, os.path.basename(css_path))
|
|
||||||
|
|
||||||
os.makedirs(css_dir, exist_ok=True)
|
|
||||||
print('\tGenerating CSS {scss} -> {css}'.format(scss=scss_file, css=css_file))
|
|
||||||
|
|
||||||
with open(css_file, 'w') as f:
|
|
||||||
css_content = Compiler(output_style='compressed', search_path=[root, input_path]).compile(scss_file)
|
|
||||||
css_content = cls._fix_css4_vars(css_content)
|
|
||||||
f.write(css_content)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _fix_css4_vars(css):
|
|
||||||
return re.sub(r'var\("--([^"]+)"\)', r'var(--\1)', css)
|
|
||||||
|
|
||||||
def initialize_options(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def finalize_options(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
self.generate_css_files()
|
|
||||||
|
|
||||||
|
|
||||||
class install(_install):
|
|
||||||
def do_egg_install(self):
|
|
||||||
self.run_command('web_build')
|
|
||||||
_install.do_egg_install(self)
|
|
||||||
|
|
||||||
|
|
||||||
class bdist_egg(_bdist_egg):
|
|
||||||
def run(self):
|
|
||||||
self.run_command('web_build')
|
|
||||||
_bdist_egg.run(self)
|
|
||||||
|
|
||||||
|
|
||||||
class build(_build):
|
|
||||||
sub_commands = _build.sub_commands + [('web_build', None)]
|
|
||||||
|
|
||||||
|
|
||||||
def path(fname=''):
|
def path(fname=''):
|
||||||
return os.path.abspath(os.path.join(os.path.dirname(__file__), fname))
|
return os.path.abspath(os.path.join(os.path.dirname(__file__), fname))
|
||||||
|
|
||||||
|
@ -97,23 +23,8 @@ def pkg_files(dir):
|
||||||
return paths
|
return paths
|
||||||
|
|
||||||
|
|
||||||
def create_etc_dir():
|
|
||||||
# noinspection PyShadowingNames
|
|
||||||
path = '/etc/platypush'
|
|
||||||
try:
|
|
||||||
os.makedirs(path)
|
|
||||||
except OSError as e:
|
|
||||||
if isinstance(e, PermissionError):
|
|
||||||
print('WARNING: Could not create /etc/platypush')
|
|
||||||
elif e.errno == errno.EEXIST and os.path.isdir(path):
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
|
|
||||||
plugins = pkg_files('platypush/plugins')
|
plugins = pkg_files('platypush/plugins')
|
||||||
backend = pkg_files('platypush/backend')
|
backend = pkg_files('platypush/backend')
|
||||||
# create_etc_dir()
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="platypush",
|
name="platypush",
|
||||||
|
@ -135,15 +46,6 @@ setup(
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
scripts=['bin/platyvenv'],
|
scripts=['bin/platyvenv'],
|
||||||
cmdclass={
|
|
||||||
'web_build': WebBuildCommand,
|
|
||||||
'install': install,
|
|
||||||
'build': build,
|
|
||||||
'bdist_egg': bdist_egg,
|
|
||||||
},
|
|
||||||
# data_files = [
|
|
||||||
# ('/etc/platypush', ['platypush/config.example.yaml'])
|
|
||||||
# ],
|
|
||||||
long_description=readfile('README.md'),
|
long_description=readfile('README.md'),
|
||||||
long_description_content_type='text/markdown',
|
long_description_content_type='text/markdown',
|
||||||
classifiers=[
|
classifiers=[
|
||||||
|
|
Loading…
Reference in a new issue