Esempio n. 1
0
def _update08plugins(request, language):
    site = Site.objects.get_current()
    title = "Update PyLucid v0.8 plugin data"
    out = SimpleStringIO()

    method_kwargs = {
        "out": out,
        "language": language,
    }

    filename = settings.PYLUCID.UPDATE08_PLUGIN_FILENAME
    view_name = settings.PYLUCID.UPDATE08_PLUGIN_VIEWNAME

    for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
        try:
            plugin_instance.call_plugin_view(request, filename, view_name,
                                             method_kwargs)
        except Exception, err:
            if str(err).endswith("No module named %s" % filename):
                # Plugin has no update API
                continue
            if settings.DEBUG:
                raise
            messages.error(request, "failed updating %s." % plugin_name)
            messages.debug(request,
                           mark_safe("<pre>%s</pre>" % traceback.format_exc()))
        else:
            out.write(" --- %s END ---" % plugin_name)
Esempio n. 2
0
def _update08plugins(request, language):
    site = Site.objects.get_current()
    title = "Update PyLucid v0.8 plugin data"
    out = SimpleStringIO()

    method_kwargs = {
        "out": out,
        "language": language,
    }

    filename = settings.PYLUCID.UPDATE08_PLUGIN_FILENAME
    view_name = settings.PYLUCID.UPDATE08_PLUGIN_VIEWNAME

    for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
        try:
            plugin_instance.call_plugin_view(request, filename, view_name,
                                             method_kwargs)
        except Exception, err:
            if str(err).endswith("No module named %s" % filename):
                # Plugin has no update API
                continue
            if settings.DEBUG:
                raise
            messages.error(request, "failed updating %s." % plugin_name)
            messages.debug(request,
                           mark_safe("<pre>%s</pre>" % traceback.format_exc()))
        else:
            out.write(" --- %s END ---" % plugin_name)
Esempio n. 3
0
    def call_searchs(self, search_languages, search_strings, search_results):
        """ Call every plugin, witch has the search API. """
        filename = settings.PYLUCID.SEARCH_FILENAME
        class_name = settings.PYLUCID.SEARCH_CLASSNAME

        max_hits = self.preferences["max_hits"]

        plugin_count = 0
        too_much_hits = 0
        use_plugin = 0
        for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
            try:
                SearchClass = plugin_instance.get_plugin_object(filename, class_name)
#                plugin_instance.call_plugin_view(self.request, filename, view_name, method_kwargs)
            except plugin_instance.ObjectNotFound:
                # Plugin has no search API
                continue
            except Exception:
                if self.request.debug or self.request.user.is_staff:
                    messages.error(self.request, "Can't collect search results from %s." % plugin_name)
                    messages.debug(self.request, mark_safe("<pre>%s</pre>" % traceback.format_exc()))
                continue

            try:
                search_instance = SearchClass()
            except PluginNotOnSite, err:
                # Plugin is not used on this SITE
                if self.request.debug or self.request.user.is_staff:
                    messages.debug(self.request, "Skip %s: %s" % (plugin_name, err))
                continue
            else:
                plugin_count += 1

            queryset = search_instance.get_queryset(self.request, search_languages, search_strings)
            count = queryset.count()
            if self.request.user.is_staff:
                messages.info(self.request, "%s hits in %s" % (count, plugin_name))

            if count >= max_hits:
                too_much_hits += 1
                messages.info(self.request, "Skip too many results from %s" % plugin_name)
                LogEntry.objects.log_action(
                    app_label="search", action="too mutch hits",
                    message="Skip %s hits in %s for %s" % (count, plugin_name, repr(search_strings)),
                    data={
                        "search_strings": search_strings,
                        "hits": count,
                    }
                )
                continue

            use_plugin += 1

            if count > 0:
                search_instance.add_search_results(self.request, queryset, search_results)
Esempio n. 4
0
    def __init__(self, request, out):
        self.request = request
        self.out = out

        for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
            if plugin_name == "pylucid":
                continue
            out.write("\tplugin: %r" % plugin_name)
            out.write("\t\tpath: %r" % plugin_instance.fs_path)
            self.test_objects(plugin_instance)
            self.test_modules(plugin_instance)
Esempio n. 5
0
def tag_list(request):
    """ Create a list of all existing lucidTag plugin views. """
    lucid_tags = []
    for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
        try:
            lucidtag_view = plugin_instance.get_plugin_object(
                mod_name="views", obj_name="lucidTag"
            )
        except plugin_instance.ObjectNotFound, err:
            continue
        except Exception, err:
            if settings.DEBUG:
                raise
            messages.error(request, "Can't get plugin view: %s" % err)
            continue
Esempio n. 6
0
def install_plugins(request):
    """
    Simple call all plugin install view, if exist.
    
    TODO: create a "install plugins" managment command and call it here! (This is useful for unittests)
    """
    output = []

    # Delete all items
    PyLucidAdminPage.objects.all().delete()

    output.append("*** Install Plugins:")

    filename = settings.ADMIN.VIEW_FILENAME
    view_name = settings.ADMIN.PLUGIN_INSTALL_VIEW_NAME

    for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
        try:
            response = plugin_instance.call_plugin_view(request,
                                                        filename,
                                                        view_name,
                                                        method_kwargs={})
        except Exception, err:
            if str(err).endswith("No module named %s" % filename):
                # Plugin has no install API
                if settings.DEBUG:
                    output.append(
                        "Skip plugin %r, because it has no install view (%s)" %
                        (plugin_name, err))
                continue

            messages.error(
                request,
                "failed call %s.%s: %s" % (plugin_name, view_name, err))
            continue

        output.append("_" * 79)
        output.append(" *** install plugin %r ***" % plugin_name)
        assert isinstance(
            response, basestring
        ) == True, "Plugin install view must return a basestring!"
        output.append(response)

        output.append(" --- %s END ---" % plugin_name)
        output.append("")
Esempio n. 7
0
def install_plugins(request):
    """
    Simple call all plugin install view, if exist.
    
    TODO: create a "install plugins" managment command and call it here! (This is useful for unittests)
    """
    output = []

    # Delete all items
    PyLucidAdminPage.objects.all().delete()

    output.append("*** Install Plugins:")

    filename = settings.ADMIN.VIEW_FILENAME
    view_name = settings.ADMIN.PLUGIN_INSTALL_VIEW_NAME

    for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
        try:
            response = plugin_instance.call_plugin_view(request, filename, view_name, method_kwargs={})
        except Exception, err:
            if str(err).endswith("No module named %s" % filename):
                # Plugin has no install API
                if settings.DEBUG:
                    output.append("Skip plugin %r, because it has no install view (%s)" % (plugin_name, err))
                continue

            messages.error(request, "failed call %s.%s: %s" % (plugin_name, view_name, err))
            continue

        output.append("_" * 79)
        output.append(" *** install plugin %r ***" % plugin_name)
        assert isinstance(response, basestring) == True, "Plugin install view must return a basestring!"
        output.append(response)

        output.append(" --- %s END ---" % plugin_name)
        output.append("")
Esempio n. 8
0
    def call_searchs(self, search_languages, search_strings, search_results):
        """ Call every plugin, witch has the search API. """
        method_kwargs = {
            "search_languages": search_languages,
            "search_strings": search_strings,
            "search_results": search_results
        }

        filename = settings.PYLUCID.SEARCH_FILENAME
        view_name = settings.PYLUCID.SEARCH_VIEWNAME

        plugin_count = 0
        for plugin_name, plugin_instance in PYLUCID_PLUGINS.iteritems():
            try:
                plugin_instance.call_plugin_view(self.request, filename, view_name, method_kwargs)
            except Exception, err:
                if str(err).endswith("No module named %s" % filename):
                    # Plugin has no search API
                    continue
                if settings.DEBUG or self.request.user.is_staff:
                    messages.error(self.request, "Can't collect search results from %s." % plugin_name)
                    messages.debug(self.request, mark_safe("<pre>%s</pre>" % traceback.format_exc()))
            else:
                plugin_count += 1