[Framework-Team] AT Schema and Zope 3 [was: Re: Login redirect in 3.0?]

Florian Schulze florian.schulze at gmx.net
Thu Dec 28 12:09:39 UTC 2006


On Thu, 28 Dec 2006 12:14:13 +0100, Martin Aspeli  
<optilude at gmx.net> wrote:

> Florian Schulze wrote:
>>  Dang! I knew this was coming. I thought about this for some time now  
>> and didn't find a good solution to add a tab here which is not Schema  
>> based. There was a thread on archetypes-devel about making interfaces  
>> and adapters for Schema and Field stuff, so you could add stuff here,  
>> but I don't know the state of it. The problem is, that this is one big  
>> form and currently only archetypes handles everything on save, ideally  
>> it would delegate the validation and mutation etc, so one could add  
>> custom fields here. We also would need to see how this works together  
>> with KSS inline validation, but if AT delegates, then it shouldn't be a  
>> problem.
>
> You can do this now if you use ContentFlavors (the 3.0 branch), which is  
> in AT svn. The necessary wiring is in AT, but CF probably needs a bit of  
> updating as I'm intending to bend Kapil's use cases a bit. The necessary  
> wiring is in AT.
>
> On the other hand, if we don't mind ATCT depending on  
> plone.app.redirector, we can do this the usual way, with a write-only  
> field and a custom mutator.

I just looked at the source, so I might be wrong. AFAICS there are two  
problems:

1. If we want to change something in the Schema globaly, then we have to  
overwrite the adapter from BaseObject to ISchema. Overwrites shouldn't be  
used in a framework though.

2. AT expects the mutators to be available in the context. I'm not really  
sure about this.

Let's see how we could to the alias stuff:

  - We either overwrite the adapter from BaseObject to ISchema or use a  
more explicit one from the ATCT base object (which would make it work for  
ATCT types only).

  - In the new adapter we return the original Schema plus the new fields  
for the alias stuff

  - When the form is saved BaseObject._processForm iterates over all the  
fields of the Schema, gets the widget, calls widget.processForm, then gets  
field.getMutator and calls it

  - To make this work we return our own field with our own widget and  
mutator

I think what's missing here is a way to provide an adapter from BaseObject  
to ISchema which is extendable by products. Maybe we could make  
archetypes_tool a local utility and provide a way to register additional  
Schema parts. I currently have no real idea how this could work properly.  
Maybe we should also use interfaces for Fields and Widgets in _processForm  
to make this more flexible.

Any ideas and insights welcome.

Regards,
Florian Schulze





More information about the Framework-Team mailing list