{ "info": { "author": "IMT Computer Services", "author_email": "webadmin@imtapps.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Application Frameworks" ], "description": "Sometimes when you develop apps for other people, they like to\ndefine their own sets of \"rules\".\n\nFor example, one customer might say the value of a certain field on\na model might be valid when it is between 100 and 1000. Another customer\nmight consider the same field valid only when the value is between\n500 and 1000.\n\nThat kind of validation is extremely difficult to do in a modelform's\nclean method like you would if you knew beforehand what the valid values\nwere supposed to be.\n\nThis app lets you create some boundaries for various arbitrary parameters\nthat are tied to some other arbitrary model. Each customer can then define\nwhat the rule parameters will be for their particular organization.\n\n\nUsage:\nFirst create a file called dynamic_actions.\nInside dynamic actions, you must register your rule class\nwith the dynamic_rules site.\n\nThe rule class must have the following attributes:\n key: a string to identify the rule class with the registry\n display_name: a name to use for the admin_form to show a readable name\n fields: a dictionary of field_names, and django form classes. This declares\n the parameters available.\n\nThe following optional attribute is available:\n category: a grouping used as the header of an option group in the Key dropdown\n in the admin to make it easier to organize rules.\n If a category is not provided, the rule defaults to \"uncategorized'.\n\nAdditionally, the rule class must accept a rule_model and model_to_check\nas initialization arguments, and have a run method that accepts\n*args and **kwargs.\n\nTo see the dynamic rules in action, syncdb from this project and fire\nup the admin. Create a rule tied to group_object_id: 1 (i.e. customer 1)\nand content type: 'customer'\n\nAdd a ModelToCheck model from the sample app that has a value that\nviolates your rule. Check the runserver console and see that the\nviolation printed.\n\nThis is best used in conjunction with django-dynamic-validation which lets you\ntrack and store violations to the rules, or django-dynamic-manipulation\nwhich lets you manipulate other data because of a triggered rule.\n\n - http://pypi.python.org/pypi/django-dynamic-validation\n - http://pypi.python.org/pypi/django-dynamic-manipulation\n\n\nRecent Updates\n--------------\n1/24/2012\n\nUpdated dynamic_rules to use latest version of django-class-registry (0.0.3)\nwhich handles the registry like a dictionary.\n\n'dynamic_rules.site' should now be referred to as 'dynamic_rule.rule_registry'\nhowever, you can access 'site' for a while. We just believe 'rule_registry'\nis a much better name.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/imtapps/django-dynamic-rules", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "django-dynamic-rules", "package_url": "https://pypi.org/project/django-dynamic-rules/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-dynamic-rules/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/imtapps/django-dynamic-rules" }, "release_url": "https://pypi.org/project/django-dynamic-rules/1.0.1/", "requires_dist": null, "requires_python": null, "summary": "Allows you to create dynamic rules related to a particular model", "version": "1.0.1" }, "last_serial": 989830, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "bd929be82f5bc962c6249c0580898444", "sha256": "4cb2f44500ea13a3f478b603797d700123b9130941244d41273bdba12b2ab1af" }, "downloads": -1, "filename": "django-dynamic-rules-0.1.0.tar.gz", "has_sig": false, "md5_digest": "bd929be82f5bc962c6249c0580898444", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3756, "upload_time": "2011-08-15T23:07:27", "url": "https://files.pythonhosted.org/packages/41/41/0539b76009fc77e1f264dc93ec0ca4f02d4ec5f3139ca1995aed6fe1c4f3/django-dynamic-rules-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "36803b3ba86cc1a14cd34438796f67a6", "sha256": "f94c3c979667c014c5950ae3e9889e1deec93eb64fd40554fec4a837a7562f9e" }, "downloads": -1, "filename": "django-dynamic-rules-0.1.1.tar.gz", "has_sig": false, "md5_digest": "36803b3ba86cc1a14cd34438796f67a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3785, "upload_time": "2011-08-16T15:54:26", "url": "https://files.pythonhosted.org/packages/df/7e/928465fcb2bd035f4ae72eec0d89a5388992b8ebd6d382030de90fea043a/django-dynamic-rules-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "02320a39504db053f333d30cfe4c72ba", "sha256": "f2f7f86dc53e9889b858e0a60c607c2c9988a0cd9cc974b7ed29bbc31c7f47c0" }, "downloads": -1, "filename": "django-dynamic-rules-0.1.2.tar.gz", "has_sig": false, "md5_digest": "02320a39504db053f333d30cfe4c72ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3825, "upload_time": "2011-08-16T16:19:09", "url": "https://files.pythonhosted.org/packages/99/8a/1870b09b8158bf8468e39e467d8ee6c45f8df81ef36198120082c25a8710/django-dynamic-rules-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "727769742d0c4d35794760ea4726bf20", "sha256": "f29b091da73fa6b3dc21eaab95942c1e012bd554e8c542a18cec64f703ff2065" }, "downloads": -1, "filename": "django-dynamic-rules-0.1.3.tar.gz", "has_sig": false, "md5_digest": "727769742d0c4d35794760ea4726bf20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3881, "upload_time": "2011-08-16T16:30:15", "url": "https://files.pythonhosted.org/packages/ba/32/5f7625b59f8807590422e68f26d412f8a8bf95459a1d00dfc515139b726e/django-dynamic-rules-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "bf3806ee2188df25d41dee06d28b8037", "sha256": "6a4a69d704f712fb0d99114b990c5c001c8420fae1361d19d7a349e6e322e841" }, "downloads": -1, "filename": "django-dynamic-rules-0.1.4.tar.gz", "has_sig": false, "md5_digest": "bf3806ee2188df25d41dee06d28b8037", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6625, "upload_time": "2011-08-17T17:16:12", "url": "https://files.pythonhosted.org/packages/1a/c9/01d6513869f36934a944d7b9ffbc62e4f9d2de9a111388975b32a0a953d4/django-dynamic-rules-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "1eb1d6283d16e3daedbf5d1f61a54b81", "sha256": "a9e4cf8729cc751146d9c704f65d49848eb4ff2ceaeb3dc29e1bebbf4fc71bd0" }, "downloads": -1, "filename": "django-dynamic-rules-0.1.5.tar.gz", "has_sig": false, "md5_digest": "1eb1d6283d16e3daedbf5d1f61a54b81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7010, "upload_time": "2011-08-17T18:15:10", "url": "https://files.pythonhosted.org/packages/3e/20/e2cf28b1a7e684a4d37784744ec6e36886187267f30ac1105a77fa28d400/django-dynamic-rules-0.1.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e5eb5cb268e1aaf4edefe55c820e0a04", "sha256": "045130d5ca94c1cedc9df2f245c5701d9a6847dc2e96e9378b932183f1430443" }, "downloads": -1, "filename": "django-dynamic-rules-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e5eb5cb268e1aaf4edefe55c820e0a04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7509, "upload_time": "2011-08-17T21:54:27", "url": "https://files.pythonhosted.org/packages/26/db/88bd0a343962ef1b8e6a16c08c1c66ea5c285279c26fb4bc5a9711240a8b/django-dynamic-rules-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "96175c331088ca4e46c8884677746a3d", "sha256": "9216bd9397817105623d4fd7daffb502d4d6ccd69eadb4527b18cddbc5ac6070" }, "downloads": -1, "filename": "django-dynamic-rules-0.2.1.tar.gz", "has_sig": false, "md5_digest": "96175c331088ca4e46c8884677746a3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8371, "upload_time": "2011-08-23T17:24:14", "url": "https://files.pythonhosted.org/packages/0a/cd/f5c01f7e2d7c13b08f01c9c01ba6e094119b5f4d148b2f8109d02bb8f2cc/django-dynamic-rules-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "f0c0d964e65a76db3a265283d32cc19c", "sha256": "f3bc48ca02f4ba9903b4bb7f08cf18e56efc7fb6d38d678d47179a3ef5acad92" }, "downloads": -1, "filename": "django-dynamic-rules-0.2.2.tar.gz", "has_sig": false, "md5_digest": "f0c0d964e65a76db3a265283d32cc19c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9833, "upload_time": "2011-08-26T20:35:40", "url": "https://files.pythonhosted.org/packages/31/7e/17a237c3286a90bea2df7ed221fe4a7c2b99a1bb226243f5306a7e7f35c9/django-dynamic-rules-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "d635d701bd49e4b3d1a43fc148cb5a85", "sha256": "622ee62e7f62807c98a023c3f1878ee901683c0a3f93ff354e462e3af536245c" }, "downloads": -1, "filename": "django-dynamic-rules-0.2.3.tar.gz", "has_sig": false, "md5_digest": "d635d701bd49e4b3d1a43fc148cb5a85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9584, "upload_time": "2011-08-26T23:00:01", "url": "https://files.pythonhosted.org/packages/a7/d2/1ef2147fd02c38358392ab4d4585495983428bdaf90d05d29ced3cb8ad04/django-dynamic-rules-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "f13ffc6b9cc31d20558cf5094f5c4eff", "sha256": "c8744c11b15ea4993731944b8a267bfc59f55934c55b8775c76fbe86a2ac78b0" }, "downloads": -1, "filename": "django-dynamic-rules-0.2.4.tar.gz", "has_sig": false, "md5_digest": "f13ffc6b9cc31d20558cf5094f5c4eff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9562, "upload_time": "2011-08-26T23:06:56", "url": "https://files.pythonhosted.org/packages/fd/d7/b0fb85c41eb24dfff3995640313ed615d975247f0d97a698746e6ea9a36e/django-dynamic-rules-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "dc75c1e9272f3d83e7f54fd93a6d2a43", "sha256": "1c482e5ecf6e296af0f6e64445c6f22693093f94d43d55b49ccec7e6107e3b08" }, "downloads": -1, "filename": "django-dynamic-rules-0.2.5.tar.gz", "has_sig": false, "md5_digest": "dc75c1e9272f3d83e7f54fd93a6d2a43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9597, "upload_time": "2011-08-29T21:53:23", "url": "https://files.pythonhosted.org/packages/ef/9e/8ccfaaede6167e47b867ad05b5bdab0ce7a49494a67d997f6d81ec51aa39/django-dynamic-rules-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "2430638bb4b24e4cd5b8763e0b68f0f3", "sha256": "b518570d21bb9caa21527ac6982078ded0a363b48715114d21c45f2eb6d43716" }, "downloads": -1, "filename": "django-dynamic-rules-0.2.6.tar.gz", "has_sig": false, "md5_digest": "2430638bb4b24e4cd5b8763e0b68f0f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8745, "upload_time": "2011-11-03T20:52:14", "url": "https://files.pythonhosted.org/packages/e4/1e/4bb1c3a1cb707dd15b4c2ddcca2bc97f8a5f787e995b537d6868ba6b6f20/django-dynamic-rules-0.2.6.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c1494bb2359d7e6ca1126b869524f71e", "sha256": "e24c62a5aaa03f2a0c1081a8ff6dd8cedf96cd6b3e3d2e0d68fbc6fddef5d233" }, "downloads": -1, "filename": "django-dynamic-rules-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c1494bb2359d7e6ca1126b869524f71e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10412, "upload_time": "2012-01-24T22:00:58", "url": "https://files.pythonhosted.org/packages/19/dd/62dbe20ed64f87c1515f86a35ac552cf63064bbc3991ce7c62a70ac62a17/django-dynamic-rules-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "d0de16a0a7dc4d528f4db218a8301715", "sha256": "a71b0badb79c0057b1033337f4c81eb449fbfa1a10971973a817b5955b88e2a1" }, "downloads": -1, "filename": "django-dynamic-rules-0.3.1.tar.gz", "has_sig": false, "md5_digest": "d0de16a0a7dc4d528f4db218a8301715", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10526, "upload_time": "2012-01-24T23:00:33", "url": "https://files.pythonhosted.org/packages/78/dc/8c50c82a0d025122583aa2790a2393dec162351636254668163a03efd48c/django-dynamic-rules-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "eeebd287713674f7748c398812aadf3d", "sha256": "d9b0b72561466ed1c58d3d2c350316a6552f8c762b420132fef99071cf528565" }, "downloads": -1, "filename": "django-dynamic-rules-0.3.2.tar.gz", "has_sig": false, "md5_digest": "eeebd287713674f7748c398812aadf3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9567, "upload_time": "2012-02-23T22:43:21", "url": "https://files.pythonhosted.org/packages/4d/9e/7b24158af4d92eb394501a8a4d0963e3fe53bae62e36348c840b2aa274a3/django-dynamic-rules-0.3.2.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "24e17874c333cf5ff8ced0fd6d652534", "sha256": "27e3943b4ca862076510af1b056d67bb83c365dbaf07a06ade4b7c12bfb71818" }, "downloads": -1, "filename": "django-dynamic-rules-0.4.0.tar.gz", "has_sig": false, "md5_digest": "24e17874c333cf5ff8ced0fd6d652534", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9411, "upload_time": "2013-08-16T15:34:42", "url": "https://files.pythonhosted.org/packages/f3/e0/267dc4dcb40f85a56c28bac37e3b4ae7c8026981ada92fde2944aefe0fee/django-dynamic-rules-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "097f532b14713f15ec5b9aef1ca19de2", "sha256": "d460e0219c477a38761fbeb6940819d396847301015193338635387bdb3fbc72" }, "downloads": -1, "filename": "django-dynamic-rules-0.5.0.tar.gz", "has_sig": false, "md5_digest": "097f532b14713f15ec5b9aef1ca19de2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9564, "upload_time": "2013-08-23T18:34:04", "url": "https://files.pythonhosted.org/packages/28/33/89990022624bf22c04a7a16574cd396a42cfd5c9836300f1add065de7377/django-dynamic-rules-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "ae8b767fec30c2a0dc102ba1212394d6", "sha256": "52f1c88eb47389286b76b9fcaf713260cfa9d558248e58bdecac942c4ed17f53" }, "downloads": -1, "filename": "django-dynamic-rules-0.6.0.tar.gz", "has_sig": false, "md5_digest": "ae8b767fec30c2a0dc102ba1212394d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9451, "upload_time": "2013-08-30T20:59:01", "url": "https://files.pythonhosted.org/packages/a0/87/97b5d40c43175da47ff9ede0400c3d6ca03ba010bb699b4553fa338df135/django-dynamic-rules-0.6.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "9aebe38cfcf08bc536069c460604a4d8", "sha256": "d107fe1fc86db2a7b4c18ed228535949f9db15908b58197e534411e13eb9e0d5" }, "downloads": -1, "filename": "django-dynamic-rules-1.0.1.tar.gz", "has_sig": false, "md5_digest": "9aebe38cfcf08bc536069c460604a4d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10147, "upload_time": "2014-02-03T21:35:32", "url": "https://files.pythonhosted.org/packages/0e/95/2754c824eebee56dd82efac493d824b196d68b75116d2f7f4edfad9c36f2/django-dynamic-rules-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9aebe38cfcf08bc536069c460604a4d8", "sha256": "d107fe1fc86db2a7b4c18ed228535949f9db15908b58197e534411e13eb9e0d5" }, "downloads": -1, "filename": "django-dynamic-rules-1.0.1.tar.gz", "has_sig": false, "md5_digest": "9aebe38cfcf08bc536069c460604a4d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10147, "upload_time": "2014-02-03T21:35:32", "url": "https://files.pythonhosted.org/packages/0e/95/2754c824eebee56dd82efac493d824b196d68b75116d2f7f4edfad9c36f2/django-dynamic-rules-1.0.1.tar.gz" } ] }