tag_list.py :  » Content-Management-Systems » PyLucid » PyLucid_standalone » pylucid_project » pylucid_plugins » page_admin » admin_views » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Content Management Systems » PyLucid 
PyLucid » PyLucid_standalone » pylucid_project » pylucid_plugins » page_admin » admin_views » tag_list.py
# coding:utf-8

"""
    PyLucid tag list
    ~~~~~~~~~~~~~~~~
    
    List all available lucidTag
"""

import inspect

from django.template import RequestContext
from django.utils.translation import ugettext

from pylucid_project.apps.pylucid.markup.django_tags import DjangoTagAssembler
from pylucid_project.apps.pylucid.decorators import check_permissions,render_to


from pylucid_project.system.pylucid_plugins import PYLUCID_PLUGINS
from pylucid_project.apps.pylucid.models import PageTree,PageMeta
from pylucid_project.utils.escape import escape




@render_to("page_admin/tag_list_popup.html")
@check_permissions(superuser_only=False,
    permissions=('pylucid.change_pagecontent', 'pylucid.change_pagemeta')
)
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

        lucidtag_doc = None
        examples = None
        fallback_example = None

        if lucidtag_view.__name__ == "wrapper":
            request.page_msg(
                _("Info: lucidTag %s used a decorator without functools.wraps!") % plugin_name
            )
        else:
            lucidtag_doc = inspect.getdoc(lucidtag_view)
            if lucidtag_doc: # Cutout lucidTag examples from DocString
                assembler = DjangoTagAssembler()
                _, cut_data = assembler.cut_out(lucidtag_doc)
                examples = cut_data

                for example in examples:
                    if not example.startswith("{%% lucidTag %s " % plugin_name):
                        request.page_msg(
                            _("Info: lucidTag %(plugin_name)s has wrong tag example: %(example)r") % {
                                "plugin_name": plugin_name, "example": example
                            }
                        )

                lucidtag_doc = lucidtag_doc.split("example:", 1)[0].strip()

                # Escape "&", "<", ">" and django template tags chars like "{" and "}"
                lucidtag_doc = escape(lucidtag_doc)

        if not examples:
            # No DocString or it contains no examples -> generate a example
            fallback_example = escape("{%% lucidTag %s %%}" % plugin_name)


        lucid_tags.append({
            "plugin_name": plugin_name.replace("_", " "),
            "fallback_example": fallback_example,
            "examples": examples,
            "doc": lucidtag_doc,
        })

    # Sort by plugin name case-insensitive
    lucid_tags.sort(cmp=lambda x, y: cmp(x["plugin_name"].lower(), y["plugin_name"].lower()))


    # Add PageTree and PageMeta instance to request.PYLUCID for get
    # context keys witch are related to these objects.
    # see pylucid_project.apps.pylucid.context_processors
    old_pylucid_obj = request.PYLUCID

    pagetree = PageTree.objects.get_root_page(request.user)
    pagemeta = PageTree.objects.get_pagemeta(request, pagetree, show_lang_errors=False)
    request.PYLUCID.pagetree = pagetree
    request.PYLUCID.pagemeta = pagemeta

    request_context = RequestContext(request)

    request.PYLUCID = old_pylucid_obj

    # Collect all existing tags from all context dicts
    request_context_dicts = request_context.dicts
    context_keys = set()
    for d in request_context_dicts:
        context_keys.update(set(d.keys()))

    context_keys = list(context_keys)
    context_keys.sort(cmp=lambda x, y: cmp(x.lower(), y.lower()))

    context = {
        "title": "lucidTag list",
        "context_keys": context_keys,
        "lucid_tags": lucid_tags
    }
    return context


www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.