{ "info": { "author": "Maxim Avanov", "author_email": "maxim.avanov@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Environment :: Web Environment", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: Microsoft", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Simple declarative web forms using FormEncode and WebHelpers\n==============================================\n\nStatus: **Early Development, Unstable, Unpublished**.\n\nPython Version: **2.7** (please contribute to `FormEncode Project`_ in order to make it 3.x compatible).\n\nInstallation\n--------------\n\n.. code-block:: bash\n\n pip install pyramid_webforms\n\n\nExample\n-------------\n\nConsider the following pyramid project structure:\n\n.. code-block:: plain\n\n my_pyramid_app/\n modules/\n signin/\n __init__.py\n forms.py\n validators.py\n views.py\n __init__.py\n templates/\n signin.mako\n __init__.py\n\nLet's define a sign-in form, its fields, and validators.\n\n.. code-block:: python\n\n # my_pyramid_app/modules/signin/forms.py\n from pyramid_webforms import Form\n from my_pyramid_app.i18n import _\n from . import validators\n\n\n login_or_email = {\n 'type': 'text',\n 'title': _('Login or Email'),\n 'tip': _('Please enter your login or email that was used during your registration.'),\n 'size': 30,\n 'maxlength': 50,\n 'validator': validators.UserLoginOrEmail\n }\n\n password = {\n 'type': 'password',\n 'title': _('Password'),\n 'tip': _('A password can contain any character of any alphabet (minimum is 1, maximum is 64 characters). '\n 'For reliability we recommend using non-trivial and long passwords. Note that the case of '\n 'the letters matters.'),\n 'size': 30,\n 'maxlength': 64,\n 'validator': validators.UserPassword,\n 'value': '',\n }\n\n remember_me = {\n 'type': 'checkbox',\n 'title': _('Remember me'),\n 'tip': _('Set this checkbox if you want your current browser to keep '\n 'your session for further visits.'),\n 'selected': False,\n 'validator': validators.RememberUserSession\n }\n\n class SignInForm(Form):\n # form attributes and metadata\n _id_ = 'signin-form'\n _submit_text_ = _('Sign in')\n _alternate_url_ = {'name': 'support.account_access'}\n _alternate_text_ = _(\"I cannot access my account\")\n _fieldsets_ = [\n [['login_email', 'password', 'remember_me']]\n ]\n # form fields\n login_email = login_or_email\n password = password\n remember_me = remember_me\n\n\n.. code-block:: python\n\n # my_pyramid_app/modules/signin/validators.py\n import re\n import formencode\n\n # logins are 3-16 characters long\n USERLOGINS = re.compile('[A-Za-z0-9][-A-Za-z0-9]{1,14}[A-Za-z0-9]', re.IGNORECASE)\n\n RememberUserSession = formencode.validators.Bool\n\n class UserLogin(formencode.validators.Regex):\n not_empty = True\n strip = True\n regex = USERLOGINS\n\n class UserEmail(formencode.validators.Email):\n not_empty = True\n strip = True\n max = 50\n def _to_python(self, email, state):\n email = super(UserEmail, self)._to_python(email, state)\n return email.lower()\n\n class UserLoginOrEmail(UserLogin):\n def _to_python(self, value, state):\n if '@' in value:\n validator = UserEmail\n else:\n validator = UserLogin\n value = validator.to_python(value, state)\n return value\n\n def validate_python(self, value, state):\n pass\n\n\n class UserPassword(formencode.validators.UnicodeString):\n not_empty = True\n max = 64\n\n\nNow we can use our form in pyramid view callables.\n\n.. code-block:: python\n\n # my_pyramid_app/modules/signin/views.py\n from pyramid.view import view_config\n from .forms import SignInForm\n\n\n class SignInView(object):\n\n @view_config(route_name='session.signin', renderer='templates/signin.mako')\n def signin_form(self):\n request = self.request\n if request.POST:\n try:\n form = SignInForm.validate(request)\n except SignInForm.Invalid as error:\n # redirect or error handling\n pass\n else:\n # sign in user using form data\n pass\n\n return {'signin_form': forms.SignInForm()}\n\n\n.. code-block:: mako\n\n ## my_pyramid_app/templates/signin.mako\n ${signin_form(request)}\n\n\n\nHere are the key conceptual points:\n\n- form fields are defined with plain dictionaries;\n- the fields can be reused by any other module;\n- each field record contains an assigned FormEncode-based validator;\n- a form is defined with the simple declarative interface.\n\n\nConfiguration options\n-----------------------\n\n+---------------------------------------+------------+----------------------------------------------------------+\n| Key | Type | Default |\n+=======================================+============+==========================================================+\n| pyramid_webforms.submit_tpl | str | pyramid_webforms:templates/submit_alternate.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n| pyramid_webforms.submit_alternate_tpl | str | pyramid_webforms:templates/submit_alternate.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n| pyramid_webforms.form_tpl | str | pyramid_webforms:templates/form.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n| pyramid_webforms.fieldset_tpl | str | pyramid_webforms:templates/fieldset.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n| pyramid_webforms.field_tpl | str | pyramid_webforms:templates/field.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n| pyramid_webforms.tooltip_tpl | str | pyramid_webforms:templates/tooltip.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n| pyramid_webforms.form_error_tpl | str | pyramid_webforms:templates/form_error.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n| pyramid_webforms.field_error_tpl | str | pyramid_webforms:templates/field_error.p_wf_mako |\n+---------------------------------------+------------+----------------------------------------------------------+\n\n\nSee also\n============\n\n- `FormEncode Project`_\n- `WebHelpers Project`_\n\n\n.. _FormEncode Project: https://github.com/formencode/formencode\n.. _WebHelpers Project: http://sluggo.scrapping.cc/python/WebHelpers/index.html", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/avanov/pyramid_webforms", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/avanov/pyramid_webforms", "keywords": "pyramid formencode forms templates validation", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "pyramid_webforms", "package_url": "https://pypi.org/project/pyramid_webforms/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/pyramid_webforms/", "project_urls": { "Download": "https://github.com/avanov/pyramid_webforms", "Homepage": "https://github.com/avanov/pyramid_webforms" }, "release_url": "https://pypi.org/project/pyramid_webforms/0.0.2/", "requires_dist": null, "requires_python": null, "summary": "Simple declarative web forms using FormEncode and WebHelpers", "version": "0.0.2" }, "last_serial": 5487969, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "6467a3513b3d1406a51a22b07e574713", "sha256": "c768678f3a4cbb97c117eac4580767018ed9eee2acb4255f3f5b7b01029756d6" }, "downloads": -1, "filename": "pyramid_webforms-0.0.1-py2.7.egg", "has_sig": false, "md5_digest": "6467a3513b3d1406a51a22b07e574713", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 19812, "upload_time": "2013-01-21T18:36:41", "url": "https://files.pythonhosted.org/packages/89/69/fbef5b5e765ccfaee6f4b4177a995891ff4918e66d6ec72c206958445c68/pyramid_webforms-0.0.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "46b7b3f2e7eb8e05c482ba9426514561", "sha256": "0eb41ff50709e800d5695a0b78ad2542ca6080da459a9a6c1d3c03c76b353c3a" }, "downloads": -1, "filename": "pyramid_webforms-0.0.1.tar.gz", "has_sig": false, "md5_digest": "46b7b3f2e7eb8e05c482ba9426514561", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13579, "upload_time": "2013-01-21T18:36:37", "url": "https://files.pythonhosted.org/packages/3b/96/338d49b39a956d79e9517db0a2d7683290d3fdf62f1528ccd7fbcabd25df/pyramid_webforms-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "459d0e56f7f7425c331a0737978094a5", "sha256": "78d911842700f54ae4b13f6e611042781e63d6f6410ed9bc616f5fb711a49e42" }, "downloads": -1, "filename": "pyramid_webforms-0.0.2-py2.7.egg", "has_sig": false, "md5_digest": "459d0e56f7f7425c331a0737978094a5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 19929, "upload_time": "2013-08-10T10:33:34", "url": "https://files.pythonhosted.org/packages/1c/31/b068b6fb1a06f86ac4e0ae493648190e08d13781f80489184e92b5d0fb04/pyramid_webforms-0.0.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "2b087a9b26b9e808e94bf55df37c9723", "sha256": "21fd81ae404405e970194fdb8e6fae6277ab7caf8a24b231df6318f379962130" }, "downloads": -1, "filename": "pyramid_webforms-0.0.2.tar.gz", "has_sig": false, "md5_digest": "2b087a9b26b9e808e94bf55df37c9723", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13611, "upload_time": "2013-08-10T10:33:30", "url": "https://files.pythonhosted.org/packages/eb/1f/77999192a5bdd261b09692c28c96d686ba9a599c284816819aee0b5d2f1c/pyramid_webforms-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "459d0e56f7f7425c331a0737978094a5", "sha256": "78d911842700f54ae4b13f6e611042781e63d6f6410ed9bc616f5fb711a49e42" }, "downloads": -1, "filename": "pyramid_webforms-0.0.2-py2.7.egg", "has_sig": false, "md5_digest": "459d0e56f7f7425c331a0737978094a5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 19929, "upload_time": "2013-08-10T10:33:34", "url": "https://files.pythonhosted.org/packages/1c/31/b068b6fb1a06f86ac4e0ae493648190e08d13781f80489184e92b5d0fb04/pyramid_webforms-0.0.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "2b087a9b26b9e808e94bf55df37c9723", "sha256": "21fd81ae404405e970194fdb8e6fae6277ab7caf8a24b231df6318f379962130" }, "downloads": -1, "filename": "pyramid_webforms-0.0.2.tar.gz", "has_sig": false, "md5_digest": "2b087a9b26b9e808e94bf55df37c9723", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13611, "upload_time": "2013-08-10T10:33:30", "url": "https://files.pythonhosted.org/packages/eb/1f/77999192a5bdd261b09692c28c96d686ba9a599c284816819aee0b5d2f1c/pyramid_webforms-0.0.2.tar.gz" } ] }