[Grok-dev] GrokPaste: a grok pastebin app
    Kevin Teague 
    kevin at bud.ca
       
    Fri Mar 23 23:32:58 EDT 2007
    
    
  
I've been doing some work on my second Grok project (my first project  
is a simple Group/User Manager app that reads/writes from LDAP which  
I've been using at work, which I plan on getting ready for release in  
soonish).
My second project is a PasteBin app called GrokPaste (although I am  
considering a better name for the app if it causes too much confusion  
with Python Paste).
Right now the app just has enough features to perform the basics of a  
pastebin app. Long term, I'd like GrokPaste to be a fairly feature  
rich pastebin app.
There is an instance running at:
http://www.bud.ca:8021/grokpaste/
The SVN repo and Trac browser are at:
https://bud.ca:9722/svn/grokpaste/trunk/
https://bud.ca:9722/wheat/browser/grokpaste/trunk
Currently the code is still very rough. I plan on applying some  
polish to, and packing it into a tarball so we can link to from the  
Grok site.
Some observations I noticed while working on this app:
Traversal
------------
Human readable URLs are not yet as easy to work with as other  
framworks, Rails/Django etc. It might be cool to have some Traversal  
conventions. Perhaps some convenience methods in the Traversal base  
class?
To support URLs such as /tags/foo/bar I wrote:
     def traverse(self, name):
         if name == 'tags':
             self.request.form['tags'] =  
self.request.getTraversalStack()
             self.request.setTraversalStack([])
             return queryMultiAdapter(
                 (self.context, self.request), name='tagsearch')
         else:
             # try to get the item from the container
             return self.context.get(name)
Something like this could be nice:
     def traverse(self, name):
         if name == 'tags':
             self.viewStackToList('tagsearch')
         else:
             # try to get the item from the container
             return self.context.get(name)
Either that or some pre-built Traversal components that perhaps  
expect a URLConfig Model to available?
Human Readable Time Deltas
-----------------------------------------
I really like web sites with "posted 4 hours ago". To that end I made  
a TimeReadable Global Utility. Right now this includes about 50 lines  
of code that I grabbed from django.utils.timesince.py.
It would be nice to eventually have this functionaly in a megrok  
package, or Grok core.
Development experience
----------------------------------
Grok rocks! w00t!
Consider the Plain-text Paste View:
class PastePlainView(grok.View):
     "Plain-text view of a single Paste"
     grok.context(Paste)
     grok.name('plain')
     def render(self):
         return self.context.body
Where in Zope 2 I might write:
/skins/grokpaste_scripts/pastePlainText.py
## Script (Python) "pastePlainText"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=Plain-text view of a single Paste
return context.body
And in Zope 2 I'd have to keep the code in a skins directory,  
floating around with a bunch of other unrelated files. And in Zope 3  
I'd have to write a bunch of ZCML. With Grok I can put all my Paste  
Views beside each other, and I only need to state the bare essence of  
what I want the app to do - yummy!
    
    
More information about the Grok-dev
mailing list