Пример #1
0
def plugins(request):
    pm = PluginManager()

    lisa_all_plugins = _get_global_plugins()
    if lisa_all_plugins:
        request.session['lisa_all_plugins'] = lisa_all_plugins
        lisa_template_plugins = {}

        for plugin_name in lisa_all_plugins:
            plugin = lisa_all_plugins[plugin_name]

            local_version = pm.get_version(plugin_name=plugin_name)
            if not local_version:
                local_version = False

            is_enabled = False
            if plugin_name in pm.plugins:
                is_enabled = True

            should_upgrade = False
            if local_version:
                if StrictVersion(local_version) < StrictVersion(plugin['version']):
                    should_upgrade = True

            lisa_template_plugins[plugin_name] = {
                'name': plugin['name'],
                'remote_version': plugin['version'],
                'local_version': local_version,
                'summary': plugin['summary'],
                'is_enabled': is_enabled,
                'should_upgrade': should_upgrade,
                'author': plugin['author'],
                'repo_url': plugin['repo_url'],
                'keywords': plugin['keywords']
            }
        context = {
            'lisa_plugins': lisa_template_plugins
        }
    else:
        context = {'error': 'Could not retrieve the plugin list'}
    context_instance = RequestContext(request)
    return render(request, 'plugins.html', context, context_instance)
Пример #2
0
def plugins(request):
    pm = PluginManager()

    lisa_all_plugins = _get_global_plugins()
    if lisa_all_plugins:
        request.session['lisa_all_plugins'] = lisa_all_plugins
        lisa_template_plugins = {}

        for plugin_name in lisa_all_plugins:
            plugin = lisa_all_plugins[plugin_name]

            local_version = pm.get_version(plugin_name=plugin_name)
            if not local_version:
                local_version = False

            is_enabled = False
            if plugin_name in pm.plugins:
                is_enabled = True

            should_upgrade = False
            if local_version:
                if StrictVersion(local_version) < StrictVersion(
                        plugin['version']):
                    should_upgrade = True

            lisa_template_plugins[plugin_name] = {
                'name': plugin['name'],
                'remote_version': plugin['version'],
                'local_version': local_version,
                'summary': plugin['summary'],
                'is_enabled': is_enabled,
                'should_upgrade': should_upgrade,
                'author': plugin['author'],
                'repo_url': plugin['repo_url'],
                'keywords': plugin['keywords']
            }
        context = {'lisa_plugins': lisa_template_plugins}
    else:
        context = {'error': 'Could not retrieve the plugin list'}
    context_instance = RequestContext(request)
    return render(request, 'plugins.html', context, context_instance)
Пример #3
0
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
COMPRESS_ROOT = os.path.join(BASE_DIR, 'static')

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', 'django_libsass.SassCompiler'),
)

# COMPRESS_ENABLED = True
# COMPRESS_OFFLINE = True

PROJECT_APPS = [
    'lisa_api.api',
    'lisa_api.frontend',
]

PM = PluginManager()

INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS + PluginManager().django_plugins

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.locale.LocaleMiddleware',
)
Пример #4
0
"""
WSGI config for lisa_api project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lisa_api.lisa.settings")

application = get_wsgi_application()

from lisa_api.lisa.plugin_manager import PluginManager
from django.core.management import call_command

call_command("migrate")
PM = PluginManager()
PM.load_intents()
Пример #5
0
"""
from django.conf.urls import include, url
from django.contrib import admin
from lisa_api.api import views as api_views
from rest_framework import routers
from lisa_api.lisa.plugin_manager import PluginManager


router = routers.DefaultRouter()
router.register(r'clients', api_views.ClientViewSet)
router.register(r'groups', api_views.GroupViewSet)
router.register(r'intents', api_views.IntentViewSet)
router.register(r'plugins', api_views.PluginViewSet)
router.register(r'users', api_views.UserViewSet)
router.register(r'zones', api_views.ZoneViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    url(r'^', include('lisa_api.frontend.urls', namespace='frontend')),
    url(r'^api/v1/core/', include(router.urls)),
    url(r'^api/v1/core/speak/', api_views.SpeakView),
    url(r'^api/v1/core/tts/', api_views.TTSView),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^docs/', include('rest_framework_swagger.urls')),
]

for plugin in PluginManager().plugins:
        urlpatterns.append(url(r'^api/v1/plugin-%s' % plugin, include('lisa_plugins_%s.urls' % plugin)))
Пример #6
0
 def setUp(self):
     # Every test needs access to the request factory.
     self.plugin = Plugin.objects.create(name="testplugin")
     self.plugin_url = '/api/v1/core/plugins/%s/' % self.plugin.name
     self.plugin_manager = PluginManager()
Пример #7
0
class CoreTests(APITestCase):
    def setUp(self):
        # Every test needs access to the request factory.
        self.plugin = Plugin.objects.create(name="testplugin")
        self.plugin_url = '/api/v1/core/plugins/%s/' % self.plugin.name
        self.plugin_manager = PluginManager()

    @mock.patch.object(pip, 'main')
    def test_v1_create_plugin(self, mock_pip_main):
        """
        Ensure we can install a new plugin
        """
        url = '/api/v1/core/plugins/'
        data = {
            'name': u'shopping',
            'version': u'1.8.3'
        }
        response = self.client.post(url, data, format='json')
        mock_pip_main.assert_called_once_with(['install', 'lisa-plugins-' + ''.join([data.get('name'), "==",
                                                                                     data.get('version')])])
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(response.data.get('name'), data.get('name'))

    @mock.patch.object(pip, 'main')
    def test_v1_destroy_plugin(self, mock_pip_main):
        """
        Ensure we can uninstall a plugin
        """
        response = self.client.delete(self.plugin_url, format='json')
        mock_pip_main.assert_called_once_with(['uninstall', '--yes', 'lisa-plugins-' + self.plugin.name])
        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

    @mock.patch.object(pip, 'main')
    def test_v1_modify_plugin(self, mock_pip_main):
        """
        Ensure we can modify a plugin
        """
        data = {
            'name': u'testplugin',
            'version': u'1.0'
        }
        response = self.client.put(self.plugin_url, data, format='json')
        mock_pip_main.assert_called_once_with(['install', 'lisa-plugins-' + ''.join([data.get('name'), "==",
                                                                                     data.get('version')])])
        self.assertEqual(response.data.get('version'), data.get('version'))

    @log_capture()
    def test_v1_load_intent_plugin(self, l):
        """
        Load plugin intents
        """
        self.plugin_manager.load_intents()
        l.check(
            ('lisa_api', 'INFO', 'There is no plugin loaded')
        )

    @log_capture()
    def test_v1_get_version_plugin(self, l):
        """
        Load plugin version
        """
        version = self.plugin_manager.get_version(plugin_name='shopping')
        # As we don't have plugin loaded, it should use the
        # default value of the base class which is None
        self.assertEqual(version, None)