diff --git a/plone/formwidget/captcha/README.txt b/plone/formwidget/captcha/README.txt new file mode 100644 index 0000000..a8718f0 --- /dev/null +++ b/plone/formwidget/captcha/README.txt @@ -0,0 +1,66 @@ +Captcha widget +============== + +plone.formwidget.captcha provides a captcha widget based on the +collective.captcha widget. + + >>> from plone.formwidget.captcha import CaptchaFieldWidget + +First, set up a simple test form and context. + + >>> from zope.interface import alsoProvides + >>> from zope.publisher.browser import TestRequest + >>> from zope.annotation.interfaces import IAttributeAnnotatable + >>> from z3c.form.interfaces import IFormLayer + + >>> def make_request(path, form={}): + ... request = TestRequest() + ... request.form.update(form) + ... alsoProvides(request, IFormLayer) + ... alsoProvides(request, IAttributeAnnotatable) + ... request._traversed_names = path.split('/') + ... return request + + >>> from zope.interface import Interface + >>> from zope import schema + >>> from z3c.form import form, field, button + >>> from plone.z3cform.layout import wrap_form + + >>> class ICaptchaForm(Interface): + ... subject = schema.TextLine(title=u"Subject", + ... description=u"", + ... required=True) + ... + ... captcha = schema.TextLine(title=u"Captcha", + ... description=u"", + ... required=False) + + >>> from z3c.form.interfaces import IFieldsForm + >>> from zope.interface import implements + >>> class CaptchaForm(form.Form): + ... implements(ICaptchaForm) + ... fields = field.Fields(ICaptchaForm) + ... fields['captcha'].widgetFactory = CaptchaFieldWidget + ... + ... @button.buttonAndHandler(u'Apply') + ... def handleApply(self, action): + ... data, errors = self.extractData() + ... if data.has_key('captcha'): + ... # Verify the user input against the captcha + ... captcha = CaptchaValidator(self.context, self.request, None, ICaptchaForm['captcha'], None) + ... if data.has_key('subject') and captcha.validate(data['captcha']): + ... # if captcha validation passes, print the subject + ... print data['subject'] + ... return + + + >>> form_view = wrap_form(CaptchaForm) + + >>> from zope.component import provideAdapter + >>> from zope.publisher.interfaces.browser import IBrowserRequest + >>> from zope.interface import Interface + + >>> provideAdapter(adapts=(ICaptchaForm, IBrowserRequest), + ... provides=Interface, + ... factory=form_view, + ... name=u"captcha-form") \ No newline at end of file diff --git a/plone/formwidget/captcha/tests.py b/plone/formwidget/captcha/tests.py index a77c956..a2ae73b 100644 --- a/plone/formwidget/captcha/tests.py +++ b/plone/formwidget/captcha/tests.py @@ -30,9 +30,9 @@ def test_suite(): return unittest.TestSuite([ # Unit tests - #doctestunit.DocFileSuite( - # 'README.txt', package='plone.formwidget.captcha', - # setUp=testing.setUp, tearDown=testing.tearDown), + doctestunit.DocFileSuite( + 'README.txt', package='plone.formwidget.captcha', + setUp=testing.setUp, tearDown=testing.tearDown), #doctestunit.DocTestSuite( # module='plone.formwidget.captcha.mymodule',