{ "info": { "author": "Paylogic International", "author_email": "developers@paylogic.com", "bugtrack_url": null, "classifiers": [], "description": "forms2: Django forms extra features\n===================================\n\nThe ``forms2`` package provides an enhanced version of django forms. In particular, the SQLAchemy integration and\na per-field access control.\n\n.. image:: https://api.travis-ci.org/paylogic/forms2.png\n :target: https://travis-ci.org/paylogic/forms2\n.. image:: https://pypip.in/v/forms2/badge.png\n :target: https://crate.io/packages/forms2/\n.. image:: https://coveralls.io/repos/paylogic/forms2/badge.png?branch=master\n :target: https://coveralls.io/r/paylogic/forms2\n.. image:: https://readthedocs.org/projects/forms2/badge/?version=latest\n :alt: Documentation Status\n :scale: 100%\n :target: https://readthedocs.org/projects/forms2/\n\n\nInstallation\n------------\n\n.. sourcecode::\n\n pip install forms2\n\n\nUsage\n-----\n\nSQLAlchemy model form example:\n\n.. code-block:: python\n\n class MyModelForm(SAModelForm):\n class Meta:\n model = MyModel\n mapping = {\n 'field1': 'instance.child.attribute',\n 'field2': 'attribute3',\n }\n field1 = forms.IntegerField()\n field2 = forms.CharField()\n\n\nA simple example showing field access control:\n\n.. code-block:: python\n\n class MyForm(FieldAccessMixin, Form):\n class Meta:\n access = {\n ('field1', 'field2'): access_admin,\n 'field3': MyForm.access_admin1,\n None: lambda user, instance: FieldAccess.enabled,\n }\n field1 = forms.IntegerField()\n\n @classmethod\n def access_admin1(cls):\n return FieldAccess.readonly\n\nA more realistic example for field access control:\n\n.. code-block:: python\n\n def access_bank_details(user, instance):\n if not has_perm(user, instance, 'edit_bank_account'):\n if has_perm(user, instance, 'edit_contract_id'):\n return FieldAccess.readonly\n return FieldAccess.excluded\n return FieldAccess.enabled\n\n def access_contract_id(user, instance):\n if not (has_perm(user, instance, 'edit_contract_id') and has_perm(user, instance, 'do_stuff')):\n return FieldAccess.readonly\n\n class BankForm(FieldAccessMixin, Form):\n class Meta:\n access = {\n ('bank_account', 'bank_name', 'bank_balance'): access_bank_details,\n 'contract_id': access_contract_id,\n None: BankForm.access_check,\n }\n\n bank_account = forms.CharField()\n bank_name = forms.CharField()\n bank_balance = forms.FloatField()\n\n contract_id = forms.IntegerField()\n\n some_other_field = forms.CharField()\n\n @classmethod\n def access_check(cls):\n return FieldAccess.readonly\n\nField access control using filter syntax:\n\n.. code-block:: python\n\n @access_filter\n def can_view_event(user, instance):\n if user.has_perm('event', 'view'):\n return FieldAccess.enabled\n\n @access_filter\n def can_view_merchant(user, instance):\n if user.has_perm('merchant', 'view'):\n return FieldAccess.enabled\n\n @access_filter\n def exclude_for_not_finance(user, instance):\n if not user.has_perm('merchant', 'some_financial_permission'):\n return FieldAccess.excluded\n\n ...\n\n access = {\n # Filters are applied left to right, the result is the first filter to return a FieldAccess value\n\n # This will be enabled if you can view the event, else readonly\n 'field_a': can_view_event | default(FieldAccess.readonly),\n\n # This will be enabled if you can view the event OR the merchant, else excluded\n 'field_b': can_view_event | can_view_merchant | default(FieldAccess.excluded),\n\n # This will be enabled if you can view the event AND the merchant, else excluded\n 'field_b2': can_view_event & can_view_merchant | default(FieldAccess.excluded),\n\n # This will be excluded if you don't have some finance permission, else enabled (this is the default)\n 'field_c': exclude_for_not_finance\n }\n\n\nContact\n-------\n\nIf you have questions, bug reports, suggestions, etc. please create an issue on\nthe `GitHub project page `_.\n\n\nLicense\n-------\n\nThis software is licensed under the `MIT license `_\n\nSee `License `_\n\n\n\u00a9 2013 Paylogic International.\n\nChangelog\n=========\n\n1.1.2\n-----\n\n* Allow to pass queryset as callable to make it lazy (bubenkoff)\n\n\n1.0.1\n-----\n\n* No logging of exception getting the id from the value (bubenkoff)\n\n\n0.1.9\n-----\n\n* Removed relative imports (wlansu)\n* Added a default instance=None to constructor method of BaseModelForm (wlansu)\n* Fixed a pep8 issue in tests.__init__() (wlansu)\n\n\n0.1.8\n-----\n\n* Initial public release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "django forms extensions sqlalchemy acl", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "forms2", "package_url": "https://pypi.org/project/forms2/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/forms2/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/forms2/1.1.2/", "requires_dist": null, "requires_python": null, "summary": "Extra features for Django Forms", "version": "1.1.2" }, "last_serial": 1489562, "releases": { "0.1.8": [ { "comment_text": "", "digests": { "md5": "52414c78eee12ee631c41c9ed73025bc", "sha256": "fb8e4d698b3e91917674b599fa81a02fe268cbc93a26d960462686e97507a62c" }, "downloads": -1, "filename": "forms2-0.1.8.tar.gz", "has_sig": false, "md5_digest": "52414c78eee12ee631c41c9ed73025bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6060, "upload_time": "2014-04-09T13:34:50", "url": "https://files.pythonhosted.org/packages/a1/e0/93e69d0e12f2afadf4f2a0abd376d7a3a00bee0526081ae3425663dc352d/forms2-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "built for Linux-3.15.2-1-ARCH-x86_64-with-glibc2.2.5", "digests": { "md5": "81c1fa23b78e2a6dfa3680ba9cc65442", "sha256": "e8490879a7920def8398896b30e62f06b5bd9829eb9ba2c8a67539d96863afea" }, "downloads": -1, "filename": "forms2-0.1.9.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "81c1fa23b78e2a6dfa3680ba9cc65442", "packagetype": "bdist_dumb", "python_version": "any", "requires_python": null, "size": 5096, "upload_time": "2014-07-10T14:15:54", "url": "https://files.pythonhosted.org/packages/df/e8/ba2037bb9beae4c693e322437325c0b3ba4d608049751a79fe329f3e69c3/forms2-0.1.9.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "1b1b12c5250c1333652b6fed1318e2a0", "sha256": "99429d26aa08e4f359414273dcd325f7809fd88de41d98ce5b0cdc16ea41de47" }, "downloads": -1, "filename": "forms2-0.1.9.tar.gz", "has_sig": false, "md5_digest": "1b1b12c5250c1333652b6fed1318e2a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6172, "upload_time": "2014-07-11T10:00:36", "url": "https://files.pythonhosted.org/packages/cf/50/78bdba252e0cca6c17f0c65fde0e43d8c45957b4011de47de760d979c036/forms2-0.1.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "a5f999fd796d1e77c18449ff5b48d0aa", "sha256": "8a0ffb4d9db23206150cb1b72ab8ee3c5f7d667208f118195b3dae0bf719a553" }, "downloads": -1, "filename": "forms2-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a5f999fd796d1e77c18449ff5b48d0aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6330, "upload_time": "2015-01-13T13:20:15", "url": "https://files.pythonhosted.org/packages/19/c1/8a251e56f902f2a1ad97776c8f38b8b1f8cfee64d9a2e8bdfd7266785ac6/forms2-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "bedf5e95fb72db5a615308695f9e3e9a", "sha256": "b65c1c15ff4bba458860e28e33e41ff5da68e61eb651c279e9e4580fe3a7bf51" }, "downloads": -1, "filename": "forms2-1.0.1.tar.gz", "has_sig": false, "md5_digest": "bedf5e95fb72db5a615308695f9e3e9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6412, "upload_time": "2015-01-15T12:42:57", "url": "https://files.pythonhosted.org/packages/d3/d1/1b888d3569b40290383d8c185f084a7904e94f24e3db83dd86b3d1dae6cc/forms2-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "b15edcaf652a3703f3125bbe506535d9", "sha256": "22afef3a95f278806f4db4b6d8f4210f0dbabf66d61a2f67653da0ec4c85f4f2" }, "downloads": -1, "filename": "forms2-1.1.0.tar.gz", "has_sig": false, "md5_digest": "b15edcaf652a3703f3125bbe506535d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6207, "upload_time": "2015-04-03T09:04:18", "url": "https://files.pythonhosted.org/packages/89/88/a059b871ca64efb2588f672dd4a3e73285531ef07e2c7a63e1cb5a53b23c/forms2-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "8723c172a72b0cca82b562007a4d3f17", "sha256": "d3581ed3a3fee28eed59e66541e402252e4eff462da6eef77621474fa1d89170" }, "downloads": -1, "filename": "forms2-1.1.1.tar.gz", "has_sig": false, "md5_digest": "8723c172a72b0cca82b562007a4d3f17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6281, "upload_time": "2015-04-03T10:50:02", "url": "https://files.pythonhosted.org/packages/29/8e/a70ce0ff8a10ad6d2055751ce642b859946a1180ca79f4682748ab040ddf/forms2-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "a76a2340c6f2b623334ff416546bcc48", "sha256": "d23919e3fb41f39b1f443710062c201ee7ee83f88c5a189b57b68f13fd3f9c90" }, "downloads": -1, "filename": "forms2-1.1.2.tar.gz", "has_sig": false, "md5_digest": "a76a2340c6f2b623334ff416546bcc48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6280, "upload_time": "2015-04-03T12:18:51", "url": "https://files.pythonhosted.org/packages/f9/fe/cbd1da6f7819c0991c8479ca717a490d5e8e0d32457e21ae2d634f116436/forms2-1.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a76a2340c6f2b623334ff416546bcc48", "sha256": "d23919e3fb41f39b1f443710062c201ee7ee83f88c5a189b57b68f13fd3f9c90" }, "downloads": -1, "filename": "forms2-1.1.2.tar.gz", "has_sig": false, "md5_digest": "a76a2340c6f2b623334ff416546bcc48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6280, "upload_time": "2015-04-03T12:18:51", "url": "https://files.pythonhosted.org/packages/f9/fe/cbd1da6f7819c0991c8479ca717a490d5e8e0d32457e21ae2d634f116436/forms2-1.1.2.tar.gz" } ] }