[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