[TransWarp] New to PEAK

Phillip J. Eby pje at telecommunity.com
Wed Jun 18 09:34:54 EDT 2003

At 09:50 PM 6/17/03 -0500, darryl wrote:
>Thanks for the link.
>Well, build P.ython E.nterprise A.pplications of course :)
>I think I have some idea of what PyProtocols is all about as
>I've read up on the Zope3 tutorial and the Twisted Components

Zope and Twisted interfaces are a very small subset of the functionality 
that PyProtocols offers; where they offer a subtle change to one's coding 
style, PyProtocols has the ability to make a quantum jump in how frameworks 
are used and designed.  PEAK itself is beginning to be transformed by this; 
by the alpha 3 release it should be quite visible, as the use of adaptation 
should be widespread.  If you don't read anything else in the PyProtocols 
docs, read the sections that present examples or coding techniques; those 
should give you a flavor for where PyProtocols is different from "mere" 

>I guess where i'm sticking is how do I figure out what naming
>and binding are about.

In a true "enterprise-class" application environment, many "resources" 
exist, from database servers on the one end, to small objects like 
logfiles, lockfiles, printers, etc. on the other.  Referring to these 
resources by hardcoding in programs is unacceptable; naming services exist 
to allow objects to be referenced by *name* instead of by details such as 
addresses.  One uses naming to associate names with resources.  Also, the 
naming system provides mechanisms for defining name or address 
schemes.  For example, 'peak.naming' implements address schemes like 
"pgsql://user:pass@server/dbname" to describe a database connection.  These 
addresses are then stored in a naming service (which can be as simple as 
using the configuration properties mechanism provided by 'peak.config') for 
lookup by name.

The binding system is really all about creating component hierarchies, and 
linking components together.  You define an "attribute binding" in a class 
that defines how that attribute will be computed.  You can use naming 
system names to define the bindings, so that you can reference other 
components or enterprise resources.

The binding package is the basis for all of PEAK's components, as it's a 
very convenient way to build components in general, and make them highly 

>  What i'm looking to do (at least to start)
>is to support plugable backends either file based or SQL etc.

The first thing you do is define your application model, using 'peak.model' 
classes.  Then, you write "data managers" that load or save them from 
whatever format.  The application model is independent of the data managers 
and contains no storage code, only the application logic and data 
structures.  Thus, whatever data manager (DM) components you use them with, 
they will be compatible.  DM's just implement a few methods like '_load()' 
and '_save()', and a few more depending on what features you need that DM 
to have.  Basically, the DM works like a dictionary that you use to 
retrieve items from via their primary key.  But, once you have retrieved an 
object, its attributes will refer to other objects automatically without 
further intervention at the application level.

Typically, an application will have multiple DM components for various 
kinds of application objects.  The DM's are usually arranged in a component 
hierarchy under an application "root" component.

Again, this could be more specific if you had a specific application in mind.

More information about the PEAK mailing list