Grok: Now even cavemen can use Zope 3!
Grok is a smashing web framework based on Zope Toolkit technology.
Grok uses the Component Architecture and builds on Zope concepts like content objects (models), views, and adapters. Its simplicity lies in using convention over configuration and sensible defaults when wiring components together. That means neither a configuration language like ZCML nor a lot of repetition are needed to create a web application with grok.
You can find out much more about Grok at our http://grok.zope.org website.
Grok is a friendly caveman from the Stone Age. He has a big club that he hunts mammoths with. He will also use this club to smash anything he doesn’t like.
“ME GROK SMASH ZCML!”
The easiest way to get started with grok is to install the grokproject package (e.g. via easy_install grokproject) and then create a new project area by calling the grokproject script like so:
$ grokproject MyProject ... many lines of output here
This will create a project area in MyProject as well as download and install grok.
You can also get grok from the subversion repository:
svn co svn://svn.zope.org/repos/main/grok/trunk grok
Then follow the instructions of INSTALL.txt.
Note: There are a couple of changes that breaks backward compatibility with older versions.
Beside these changes lot of work has been undertaken to remove as much dependencies on “older” zope.app.* packages as possible from Grok itself and from the dependencies of Grok. This work is not complete yet.
Removed IReRaiseException adapter registration for IUnauthorized again in favor of using grokcore.startup’s configurable“debug_application_factory“ WSGI application factory function.
Use newer versions of simplejson and pytz.
See: upgrade_notes_1.0b2 for special notes on upgrading to this release.
Revert back to an older version of grokui.admin that has not seen any changes related to the grok.View permission and the View/CodeView split and still has the introspector that is removed from newer versions.
grokcore.view, grokcore.viewlet and grokcore.formlib and Grok itself have been updated to undo the View/CodeView split that we had temporarily introduced in the development versions after Grok 1.0a4. This means the behavior of grok.View is unchanged from Grok 1.0a4. Nothing to see here!
Changed the default permission to zope.View instead of zope.Public. This means a modification needs to be made to your site.zcml if you’re upgrading an existing Grok-based project. See the upgrade notes for more information.
Bump used zope.app.wsgi version (now: 3.4.2) to support product-configs in zope.conf files with paster. Fix https://bugs.launchpad.net/grok/+bug/220440
Default location for Data.fs and logfiles of grok’s sample application is now var/filestorage/ and var/log/ instead of parts/data/ and parts/log/.
Bump used z3c.testsetup version (now: 0.4). Fix https://bugs.launchpad.net/grok/+bug/395125
Added zope.publisher.interfaces.IReRaiseException adapter for IUnauthorized exceptions. Closes https://bugs.launchpad.net/grok/+bug/332061
Removed docutils and Pygment from versions.cfg. Both are pinned in grokdocs subpackage. Closes https://bugs.launchpad.net/grok/+bug/340170
Corrected Content-type; JSON views now report ‘application/json’.
updated zope.publisher dependency to 3.4.8 (fix paster.httpserver related bugs in XMLRPC, PUT)
switched buildout to paster based template (like grokproject default) https://bugs.launchpad.net/grok/+bug/307197
changed interpreter name from ‘python’ to ‘grokpy’.
Restructured the upgrade and change documentation so that they now get generated into separate files by Sphinx
See: upgrade_notes_1.0a1 for special notes on upgrading to this release.
See: upgrade_notes_0.14 for special notes on upgrading to this release.
Replace zope.deprecation.tests.warn with grok.testing.warn to:
- Make the signature identical to warnings.warn
- To check for *.pyc and *.pyo files.
When zope.deprecation is fixed this warn() function can be removed again. Makes all the tests pass under Python-2.5.
See: upgrade_notes_0.13 for special notes on upgrading to this release.
GrokTemplate sets up the namespaces for the template by calling default_namespace() ``on the view component the template is associated with. As a result, ``ViewletManagers and Viewlet can now push in the viewletmanager and viewlet namespaces into the template.
Updated tutorial section about grokproject to fit the latest changes.
Added grok.traversable directive for easy traversal to attributes and methods.
grok.require() can refer to subclasses of grok.Permission directly, instead of their id. This, for one, avoids making typos in permission ids. Permission components do still need the grok.name() directive for defining the permission’s id.
Added an optional parameter data to the method url() that accepts a dictionary that is then converted to a query string. See
Added an OrderedContainer component.
Introduced the new sphinx-based documentation engine. See grokdocs/README.txt for details.
Merged the versions from the 3.4 KGS (known good set): http://download.zope.org/zope3.4/versions-3.4.0c1.cfg
We are now using the latest Zope 3 releases for all Zope packages. See upgrade_notes_0.13 for more information.
Added support for easier test setup based on z3c.testsetup. This is a more stable and more powerful implementation of grok.testing.register_all_tests(). See
There is now a new IContext interface available. If you make your class implement that interface, it (and its subclasses) will be candidates for being a context in a module (for automatic context lookup if grok.context is not present). This relies on a feature introduced in grokcore.component 1.1.
grok.Model implements grok.interfaces.IContext now (which is imported from grokcore.component). grok.Container now implements grok.interfaces.IContainer. Traversers and default views have been set up for these interfaces, so that new implementations that function as a model or container can be easily created. Just use grok.implements(IContainer) or grok.implements(IContext). This is useful for Grok extensions that want to implement new content classes.
See: upgrade_notes_0.12 for special notes on upgrading to this release.
The new release needs new version of grokproject, please do:
$ easy_install -U grokproject
Added testsetup classes in grok.testing to improve easy setup of unit- and functional tests.
Add support for viewlets and viewlet managers, grok.Viewlet and grok.ViewletManager.
Add a new directive, grok.order(), which can be used to help sort components. At the time it is not used yet, but we intend to use it for the viewlets support. Note that this means Grok now requires Martian 0.9.3 or higher. See grok.interfaces for more documentation on this directive.
Now depend on z3c.autoinclude. This allows the use of the <includeDependencies package="."/> directive, which automatically loads up ZCML needed for the dependencies listed in your project’s setup.py. The new release of grokproject adds this line automatically. Upgrade grokproject to make use of this functionality in new projects:
$ easy_install -U grokproject
Classes that end with “-Base” are no longer implicitly considered base classes. These classes need to have the grok.baseclass() directive added to them explicitly.
See upgrade_notes_0.12 for more information.
See: upgrade_notes_0.11 for special notes on upgrading to this release.
buildout.cfg extends versions.cfg to pin down the versions of the dependency tree. This should avoid the situation where we release Grok, some dependency changes, and Grok breaks as a result. In conjunction with this we will also be releasing a new version of grokproject that will use this version infrastructure by default.
For more information about this change, see: http://grok.zope.org/releaseinfo/readme.html
Grok was released in “continuous release” mode from SVN during this period.
Grok was created in September 2006.