[Zope] z3c.form with Boring [Re: trivial: hello world...]

David Zejda dvid at atlas.cz
Thu Mar 19 07:24:02 EDT 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Tim, thanks,

I'm playing with a simple product called JWFind, derived from Boring
now. The product sits in the products directory, can be added and
removed using ZMI, it is all OK.

Because I'm willing to use it in Plone, the Zope version is 2.10.6-final.

Now, I'm trying to handle the view of product using form made of
z3c.form. There is a problem. Currently, I'm getting

Traceback (innermost last):
  Module ZPublisher.Publish, line 119, in publish
  Module ZPublisher.mapply, line 88, in mapply
  Module ZPublisher.Publish, line 42, in call_object
  Module Products.JWFind.JWFind, line 55, in index_html
  Module z3c.form.form, line 189, in __call__
  Module z3c.form.form, line 184, in update
  Module z3c.form.form, line 134, in update
  Module z3c.form.form, line 120, in updateWidgets
  Module zope.component._api, line 103, in getMultiAdapter
  Module zope.component._api, line 103, in getMultiAdapter
ComponentLookupError: ((<Products.JWFind.Person.Person object at
0xb5003b2c>, <HTTPRequest, URL=http://localhost:8091/pokus/index_html>,
<JWFind at /pokus>), <InterfaceClass z3c.form.interfaces.IWidgets>, u'')

I guess, the error tells, that something implementing ``IWidgets``
cannot be found. But, I have no idea, how to deal with it. Maybe, should
I prepare the specific layer and skin to be able to use z3cforms and If
so, how to do it and especially how to register it properly? Or is there
a problem with the form definition itself? Or should I register
something to zope in addition to registration made in __init__?

The relevant part of product source JWFind.py:

    def index_html(self, REQUEST=None):
	"""JWFind Form"""
	out = Person(self, REQUEST)()
	return out.PersonView

The form is in separate file Person.py:

from zope import interface, schema
from z3c.form import form, field, button
from plone.app.z3cform.layout import wrap_form

class IPerson(interface.Interface):
    age = schema.Int(
	title=u"Age",
	required=True)

class Person(form.Form):
     fields = field.Fields(IPerson)
     ignoreContext = True # don't use context to get widget data
     label = u"Please enter your age"

     @button.buttonAndHandler(u'Apply')
     def handleApply(self, action):
         data, errors = self.extractData()
         print data['age'] # ... or do stuff

PersonView = wrap_form(Person)

The whole source is attached.

Please, any ideas?

Thanks a lot..

David


Tim Nash napsal(a):
> If you want simple:
> 1. download this product and put it into your products directory.
> http://www.zope.org/Members/gtk/Boring
> 2. Start Zope and go to 127.0.0.1:8080/manage and add the Boring product.
> Click test, there is your url.
> 3. Modify the 'Boring' code and repeat.
> 
> -Tim
> 
> On Tue, Mar 10, 2009 at 3:06 PM, David Zejda <dvid at atlas.cz> wrote:
> 
> Thanks for a tips,
> 
> I have looked on the Guide you suggested.
> I think I understand the concepts, but still missing something.
> To make the simplest case,
> 
> 1. I started with fresh instance prepared by the paster,
> 2. created this source:
> 
> # src/my.py
> class Contact(object):
>    "blah blah"
> 
>    firstName = "aaaa"
> 
> c = Contact()
> 
> 3. to the sys.path in bin/instance added the "/path/to/src" (which
> contains my.py),
> 4. started instance and checked, that the /path/to/src is on loaded
> sys.path,
> 5. pointed browser to localhost:8091/c/firstName .
> 
> Resource c not found, Zope says. Yes, it can't be SO simple, but
> please, what should I do?
> 
> Thanks for your patience..
> 
> David
> 
> Lennart Regebro napsal(a):
>>>> On Sat, Mar 7, 2009 at 23:21, David Zejda <dvid at atlas.cz> wrote:
>>>>> And now, please, what to do now, to have a few python lines somewhere in
>>>>> the egg dir, which the zope would know how to deal with?
>>>> The "egg dir" as you call it is a Python module, and you put Python
>>>> code there. Zope knows how to deal with it, that is not the problem.
>>>> What you need to do is get the Python code to deal with Zope. :)
>>>>
>>>>> And on what url will be the "hello world" available then?
>>>> That is completely up to you. :)
>>>>
>>>>
>>>> The question now, is this Zope 3 or Zope 2?
>>>>
>>>> For Zope 3, you should probably get a book. http://worldcookery.com/
>>>> There was another book to in the beginning of Zope 3, but I don't know
>>>> it has been updated.
>>>> You could also, for Zope 3, opt to use Grok, which is a framework
>>>> built on Zope 3 that makes Zope 3 easier: http://grok.zope.org/
>>>>
>>>> For Zope 2, you can start here:
> http://docs.zope.org/zope2/zdgbook/source/
>>>> Then, you should probably buy the above book too. Zope 3 technologies
>>>> are getting very common in Zope 2.
>>>>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAknCK1IACgkQ3oCkkciamVGtDACfTe7/Nj9NBsTRPAOBkOowN6lJ
31YAnAlz37ZuBgcNylLDbIyaTQDEw9yn
=uJ4o
-----END PGP SIGNATURE-----
-------------- next part --------------
A non-text attachment was scrubbed...
Name: JWFind.tar.gz
Type: application/gzip
Size: 2483 bytes
Desc: not available
Url : http://mail.zope.org/pipermail/zope/attachments/20090319/edb8be8b/attachment.bin 


More information about the Zope mailing list