package: Remove package module

- It does not work on all the modules available.

- It does not reload Plinth after changes.

- As of now, there is not strong case for disabling modules in Plinth
  making it unnecessary UI complication.

- Split into multiple small Debian packages is not yet implemented for
  Plinth.  The module expects to work on the Debian modules.  When
  smaller Debian packages are available perhaps we should consider using
  packages.py library instead.
This commit is contained in:
Sunil Mohan Adapa 2015-07-28 16:51:19 +05:30
parent f002336050
commit 05ef2921db
7 changed files with 0 additions and 334 deletions

View File

@ -1,85 +0,0 @@
#!/bin/sh
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Usage:
# module-manager list-available
# module-manager list-enabled <python_root>
# module-manager enable <python_root> <module_name>
# module-manager disable <python_root> <module_name>
# list of modules that may be enabled/disabled
modules="owncloud"
case "$1" in
"list-available")
# TODO: Replace this with something like "aptitude search -F %p plinth-"
echo "$modules"
;;
"list-enabled")
# TODO: Replace this with something like 'aptitude search -F %p | grep "plinth-"'
for module in "$modules"
do
if [ -e "$2"/modules/enabled/"$module" ] ; then
echo "$module"
fi
done
;;
"enable")
# TODO: Replace this with "aptitude install plinth-<module>"
for module in "$modules"
do
if [ "$3" = "$module" ] ; then
if [ ! -e "$2"/modules/enabled/"$3" ] ; then
touch "$2"/modules/enabled/"$3"
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
echo "enabled" "$3"
else
echo "failed to enable" "$3"
fi
exit $RETVAL
fi
fi
done
echo "failed to enable invalid module" "$3"
exit 1
;;
"disable")
# TODO: Replace this with "aptitude purge plinth-<module>"
for module in "$modules"
do
if [ "$3" = "$module" ] ; then
if [ -e "$2"/modules/enabled/"$3" ] ; then
rm -f "$2"/modules/enabled/"$3"
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
echo "disabled" "$3"
else
echo "failed to disable" "$3"
fi
exit $RETVAL
fi
fi
done
echo "failed to disable invalid module" "$3"
exit 1
;;
esac

View File

@ -1 +0,0 @@
plinth.modules.packages

View File

@ -1,27 +0,0 @@
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""
Plinth module to manage packages
"""
from . import packages
from .packages import init
__all__ = ['packages', 'init']
depends = ['plinth.modules.system']

View File

@ -1,130 +0,0 @@
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from django import forms
from django.contrib import messages
from django.template.response import TemplateResponse
from gettext import gettext as _
import os
from plinth import actions
from plinth import cfg
def get_modules_available():
"""Return list of all modules"""
output = actions.run('module-manager', ['list-available'])
return output.split()
def get_modules_enabled():
"""Return list of all modules"""
root = os.path.join(os.path.dirname(__file__), '..', '..')
output = actions.run('module-manager',
['list-enabled', root])
return output.split()
class PackagesForm(forms.Form):
"""Packages form"""
def __init__(self, *args, **kwargs):
# pylint: disable-msg=E1002, E1101
super(forms.Form, self).__init__(*args, **kwargs)
modules_available = get_modules_available()
for module in modules_available:
label = _('Enable {module}').format(module=module)
self.fields[module + '_enabled'] = forms.BooleanField(
label=label, required=False)
def init():
"""Initialize the Packages module"""
menu = cfg.main_menu.get('system:index')
menu.add_urlname('Package Manager', 'glyphicon-gift', 'packages:index', 20)
def index(request):
"""Serve the form"""
status = get_status()
form = None
if request.method == 'POST':
form = PackagesForm(request.POST, prefix='packages')
# pylint: disable-msg=E1101
if form.is_valid():
_apply_changes(request, status, form.cleaned_data)
status = get_status()
form = PackagesForm(initial=status, prefix='packages')
else:
form = PackagesForm(initial=status, prefix='packages')
return TemplateResponse(request, 'packages.html',
{'title': _('Add/Remove Plugins'),
'form': form})
def get_status():
"""Return the current status"""
modules_available = get_modules_available()
modules_enabled = get_modules_enabled()
return {module + '_enabled': module in modules_enabled
for module in modules_available}
def _apply_changes(request, old_status, new_status):
"""Apply form changes"""
root = os.path.join(os.path.dirname(__file__), '..', '..')
for field, enabled in new_status.items():
if not field.endswith('_enabled'):
continue
if old_status[field] == new_status[field]:
continue
module = field.split('_enabled')[0]
if enabled:
try:
actions.superuser_run('module-manager',
['enable', root, module])
except Exception:
# TODO: need to get plinth to load the module we just
# enabled
messages.error(
request, _('Error enabling module - {module}').format(
module=module))
else:
messages.success(
request, _('Module enabled - {module}').format(
module=module))
else:
try:
actions.superuser_run('module-manager',
['disable', root, module])
except Exception:
# TODO: need a smoother way for plinth to unload the
# module
messages.error(
request, _('Error disabling module - {module}').format(
module=module))
else:
messages.success(
request, _('Module disabled - {module}').format(
module=module))

View File

@ -1,63 +0,0 @@
{% extends "base.html" %}
{% comment %}
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
{% endcomment %}
{% load bootstrap %}
{% block content %}
<h2>{{ title }}</h2>
<p><code>aptitude purge modules</code></p>
<p><code>aptitude install modules</code></p>
<p>The modules should depend on the appropriate Debian packages.</p>
<h2>Manage Plugins</h2>
<form class="form" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<p>Enabling a plugin will cause a corresponding page to appear in
Plinth.</p>
<input type="submit" class="btn btn-primary" value="Update setup"/>
</form>
{% endblock %}
{% block sidebar %}
<div class="sidebar">
<h3>Help</h3>
<p>On this page, you can add or remove {{ cfg.product_name }}
plugins to your {{ cfg.box_name }}.</p>
<p>Plugins are just Debian packages, so Debian's usual package
management features should make this job fairly easy.</p>
</div>
{% endblock %}

View File

@ -1,28 +0,0 @@
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""
URLs for the Packages module
"""
from django.conf.urls import patterns, url
urlpatterns = patterns( # pylint: disable-msg=C0103
'plinth.modules.packages.packages',
url(r'^sys/packages/$', 'index', name='index')
)