[Checkins] SVN: megrok.feeds/trunk/src/megrok/feeds/ Through very
determined cargo-culting, I actually seem to have created a
Brandon Rhodes
brandon at rhodesmill.org
Sat Jul 19 16:18:53 EDT 2008
Log message for revision 88615:
Through very determined cargo-culting, I actually seem to have created a
grokker that begins to grok my AtomFeed subclasses. Incredible.
Changed:
A megrok.feeds/trunk/src/megrok/feeds/components.py
U megrok.feeds/trunk/src/megrok/feeds/configure.zcml
U megrok.feeds/trunk/src/megrok/feeds/ftests/atom/atom.py
A megrok.feeds/trunk/src/megrok/feeds/meta.py
A megrok.feeds/trunk/src/megrok/feeds/meta.zcml
-=-
Added: megrok.feeds/trunk/src/megrok/feeds/components.py
===================================================================
--- megrok.feeds/trunk/src/megrok/feeds/components.py (rev 0)
+++ megrok.feeds/trunk/src/megrok/feeds/components.py 2008-07-19 20:18:53 UTC (rev 88615)
@@ -0,0 +1,9 @@
+"""Components for megrok.feeds.
+"""
+import vice.outbound.core
+from vice.outbound.core.browser.feed import Atom_1_0_FeedView
+
+
+class AtomFeed(Atom_1_0_FeedView):
+ pass
+ #grok.context(IFeedable)
Modified: megrok.feeds/trunk/src/megrok/feeds/configure.zcml
===================================================================
--- megrok.feeds/trunk/src/megrok/feeds/configure.zcml 2008-07-19 20:08:56 UTC (rev 88614)
+++ megrok.feeds/trunk/src/megrok/feeds/configure.zcml 2008-07-19 20:18:53 UTC (rev 88615)
@@ -3,4 +3,6 @@
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:grok="http://namespaces.zope.org/grok">
+ <include package="megrok.feeds" file="meta.zcml" />
+
</configure>
Modified: megrok.feeds/trunk/src/megrok/feeds/ftests/atom/atom.py
===================================================================
--- megrok.feeds/trunk/src/megrok/feeds/ftests/atom/atom.py 2008-07-19 20:08:56 UTC (rev 88614)
+++ megrok.feeds/trunk/src/megrok/feeds/ftests/atom/atom.py 2008-07-19 20:18:53 UTC (rev 88615)
@@ -65,16 +65,6 @@
class MammothBox(object): #grok.Container): #grok.Application, #grok.Container
implements(IFeedable) #(2)
- def __init__(self):
- import zope.component
- provideAdapter(AtomFormat,
- #adapts=(IFeedable, IHTTPRequest),
- (IFeedable, IHTTPRequest),#IDefaultBrowserLayer),
- #provides=Interface,
- provides=IBrowserView,
- name=u'atom')
- #print "########################", \
- # zope.component.getAdapters()
from datetime import datetime
@@ -102,12 +92,21 @@
while False:
yield None
-class AtomFormat(Atom_1_0_FeedView): #, grok.View):
- grok.context(MammothBox)
+#class AtomFormat(Atom_1_0_FeedView): #, grok.View):
+# grok.context(IFeedable)
#@grok.require('zope.View')
#def __call__(self, *args, **kw):
# super(self, AtomFormat).__call__(self, *args, **kw)
+from megrok.feeds.components import AtomFeed
+
+class Atom(AtomFeed):
+ grok.context(IFeedable)
+
+#class AtomFormat(Atom_1_0_FeedView): #, grok.View):
+# grok.context(IFeedable)
+
+
from zope.component import provideAdapter
from zope.publisher.interfaces.browser import IBrowserPage, IBrowserView
from zope.publisher.interfaces.http import IHTTPRequest
Added: megrok.feeds/trunk/src/megrok/feeds/meta.py
===================================================================
--- megrok.feeds/trunk/src/megrok/feeds/meta.py (rev 0)
+++ megrok.feeds/trunk/src/megrok/feeds/meta.py 2008-07-19 20:18:53 UTC (rev 88615)
@@ -0,0 +1,53 @@
+"""Grokkers for megrok.feeds components."""
+import grok
+import martian
+from zope import interface, component
+from megrok.feeds import components
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+from grok import util
+
+def default_view_name(factory, module=None, **data):
+ return factory.__name__.lower()
+
+class AtomFeedGrokker(martian.ClassGrokker):
+ martian.component(components.AtomFeed)
+ martian.directive(grok.context)
+ martian.directive(grok.layer, default=IDefaultBrowserLayer)
+ martian.directive(grok.name, get_default=default_view_name)
+ martian.directive(grok.require, name='permission')
+
+ def grok(self, name, factory, module_info, **kw):
+ # Need to store the module info object on the view class so that it
+ # can look up the 'static' resource directory.
+ factory.module_info = module_info
+ return super(AtomFeedGrokker, self).grok(name, factory, module_info, **kw)
+
+ def execute(self, factory, config, context, layer, name, permission, **kw):
+ # safety belt: make sure that the programmer didn't use
+ # @grok.require on any of the view's methods.
+ methods = util.methods_from_class(factory)
+ for method in methods:
+ if grok.require.bind().get(method) is not None:
+ raise GrokError('The @grok.require decorator is used for '
+ 'method %r in view %r. It may only be used '
+ 'for XML-RPC methods.'
+ % (method.__name__, factory), factory)
+
+ # __view_name__ is needed to support IAbsoluteURL on views
+ factory.__view_name__ = name
+ adapts = (context, layer)
+
+ config.action(
+ discriminator=('adapter', adapts, interface.Interface, name),
+ callable=component.provideAdapter,
+ args=(factory, adapts, interface.Interface, name),
+ )
+
+ config.action(
+ discriminator=('protectName', factory, '__call__'),
+ callable=util.make_checker,
+ args=(factory, factory, permission),
+ )
+
+ return True
Added: megrok.feeds/trunk/src/megrok/feeds/meta.zcml
===================================================================
--- megrok.feeds/trunk/src/megrok/feeds/meta.zcml (rev 0)
+++ megrok.feeds/trunk/src/megrok/feeds/meta.zcml 2008-07-19 20:18:53 UTC (rev 88615)
@@ -0,0 +1,12 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:meta="http://namespaces.zope.org/meta"
+ xmlns:grok="http://namespaces.zope.org/grok">
+
+ <include package="z3c.autoinclude" file="meta.zcml" />
+
+ <!-- Load the grokkers -->
+ <grok:grok package=".meta" />
+
+</configure>
+
\ No newline at end of file
More information about the Checkins
mailing list