Skip to content
This repository has been archived by the owner on Feb 9, 2023. It is now read-only.

Commit

Permalink
Added plugin info traverser and base utility class
Browse files Browse the repository at this point in the history
  • Loading branch information
trollfot committed Feb 26, 2010
1 parent a91e03e commit d50b740
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
4 changes: 3 additions & 1 deletion src/grokui/base/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from grokui.base.interfaces import IGrokUIRealm, IUIPanel, IMainMenu
from grokui.base.interfaces import IGrokUIRealm, IGrokUIPluginInfo
from grokui.base.interfaces import IUIPanel, IMainMenu
from grokui.base.info import BasePluginInfo
from grokui.base.namespace import GrokUILayer, GrokUISkin, GrokUINamespace
from grokui.base.contentproviders import Header, Footer, MainMenu, Messages
from grokui.base.layout import GrokUIView
9 changes: 9 additions & 0 deletions src/grokui/base/interfaces.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-

from zope.dublincore.interfaces import IDCDescriptiveProperties
from zope.interface import Interface, Attribute
from zope.schema import TextLine


class IMainMenu(Interface):
Expand All @@ -19,3 +21,10 @@ class IGrokUIRealm(Interface):
"""
root = Attribute("The root folder object.")
request = Attribute("The HTTP request object.")


class IGrokUIPluginInfo(IDCDescriptiveProperties):
"""Represents a component dedicated to give specific info
about a grokui extension package.
"""
version = TextLine(title="Version of the package")
20 changes: 19 additions & 1 deletion src/grokui/base/namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import grok
from zope.site.interfaces import IRootFolder
from zope.location import LocationProxy
from zope.component import queryUtility
from zope.publisher.browser import applySkin
from zope.publisher.interfaces import browser
from zope.publisher.interfaces import NotFound
from zope.traversing.interfaces import ITraversable
from grokui.base.interfaces import IGrokUIRealm
from grokui.base.interfaces import IGrokUIRealm, IGrokUIPluginInfo


class GrokUILayer(grok.IDefaultBrowserLayer):
Expand Down Expand Up @@ -35,3 +37,19 @@ def __init__(self, context, request):

def traverse(self, name, ignore):
return LocationProxy(self, self.root, "++grokui++")


class GrokUIPluginInfo(grok.MultiAdapter):
grok.name('info')
grok.provides(ITraversable)
grok.adapts(IGrokUIRealm, browser.IBrowserRequest)

def __init__(self, context, request):
self.root = context
self.request = request

def traverse(self, name, ignore):
info = queryUtility(IGrokUIPluginInfo, name=name)
if info is None:
raise NotFound(self.context, name, self.request)
return LocationProxy(info, self.context, "++info++%s" % name)

0 comments on commit d50b740

Please sign in to comment.