On Sat, Sep 09, 2006 at 02:28:40PM +0400, Timur Izhbulatov wrote:
>
> On Fri, Sep 08, 2006 at 04:51:15PM -0400, Kevin Dangoor wrote:
> >
> > On Sep 6, 2006, at 9:34 AM, Timur Izhbulatov wrote:
> > >
> > > On Wed, Sep 06, 2006 at 07:24:46AM -0400, Kevin Dangoor wrote:
> > >>
> > >> On Sep 6, 2006, at 2:33 AM, Timur Izhbulatov wrote:
> > >>
> > >>> Sorry, but I still don't get your idea. I agree, I can pass the
> > >>> schema from the
> > >>> controller to the template engine through expose using its mapping
> > >>> argument. But
> > >>> how the validate decorator will receive it than?
> > >>
> > >> Ahh. I think I might have missed something with your original
> > >> thought. I thought the schema was known beforehand...
> > >>
> > >> if that's not the case, the only way at present to dynamically
> > >> provide a schema to validate is by passing a callable (eg a function)
> > >> to the decorator, and it will call that at the time that it wants to
> > >> do validation. (I know you can do this with the form, I'm not 100%
> > >> sure you can do this with a schema...)
> > >
> > > That's what I was afraid of. I have to create my own decorator. The
> > > existing
> > > decorators I've seen (like validate) look rather complex (or even
> > > scary :)
> > >
> > > The problem is that I can build schema only when I already have a
> > > business
> > > object which I display form for. In my original application I get
> > > an object plus
> > > some metadata for validation from the model and pass everything to
> > > the template
> > > engine which generates the form, the validation logic resides in
> > > the controller.
> > >
> > > My initial goal was to have the form and the schema generated in
> > > one place and
> > > get rid of my own validation logic in favour of TG's validate. But
> > > taking into
> > > account that I have to write my own decorator and some callable for
> > > schema
> > > generation, looks like there is no point in using
> > > htmlfill_schemabuilder
> > > anymore.
> >
> > I don't think you have to write your own decorator. You just need to
> > pass a callable to @validate.
>
> Yes, I noticed that @validate checks if form is callable. At that moment I
> thought the form argument can be only useful if you are working with widgets.
> I
> didn't use widgets and was focused on validators.
>
> The other thing which confused me was that @validate didn't try to catch any
> exception while calling form. I needed to do some kind of "prevalidation"
> inside
> the callable and to return possible validation errors back to the decorator.
>
> While typing this I realized that in case of an error I could merely return
> the
> form validating only the field which caused the error:
>
> class my_callable_form(object):
> def __call__(self):
> args = cherrypy.request.params
> id_ = args.get('id', '')
> try:
> id_ = self.id_validator.to_python(id_)
> except Invalid, error:
> return self.get_form_for_id()
> data = model.get_metadata(id_)
> return self.get_complete_form(data)
>
> Looks good enough.
>
> > BTW, the decorator stuff is only a bit scary because it works hard to
> > preserve the original method signature. We have an overhaul in mind
> > for TG 1.1 that will behave the same but be extraordinarily simple
> > inside.
>
> All this signature magic seem to cause some weird effects (unexpected field
> 'self'..., multiple values for keyword argument 'foo') in python 2.3. I'll try
> to find out more next week.
http://trac.turbogears.org/turbogears/wiki/DynamicValidation
Any suggestions/additions/corrections are welcome.
--
Timur Izhbulatov
OILspace, 26 Leninskaya sloboda, bld. 2, 2nd floor, 115280 Moscow, Russia
P:+7 495 105 7245 + ext.205 F:+7 495 105 7246 E:[EMAIL PROTECTED]
Building Successful Supply Chains - One Solution At A Time.
www.oilspace.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/turbogears
-~----------~----~----~----~------~----~------~--~---