{ "info": { "author": "Tonye Jack", "author_email": "jtonye@ymail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP" ], "description": ".. image:: https://badge.fury.io/py/django-dynamic-model-validation.svg\n :target: https://badge.fury.io/py/django-dynamic-model-validation\n.. image:: https://travis-ci.org/jackton1/django-dynamic-model-validation.svg?branch=master\n :target: https://travis-ci.org/jackton1/django-dynamic-model-validation\n.. image:: https://api.codacy.com/project/badge/Coverage/33797e94524e4277b476c051618ad495 \n :target: https://www.codacy.com/app/jackton1/django-dynamic-model-validation?utm_source=github.com&utm_medium=referral&utm_content=jackton1/django-dynamic-model-validation&utm_campaign=Badge_Coverage\n.. image:: https://api.codacy.com/project/badge/Grade/33797e94524e4277b476c051618ad495\n :target: https://www.codacy.com/app/jackton1/django-dynamic-model-validation?utm_source=github.com&utm_medium=referral&utm_content=jackton1/django-dynamic-model-validation&utm_campaign=Badge_Grade\n\nExtra model validation.\n\ndjango-dynamic-model-validation\n===============================\n\n\n\n.. contents:: **Table of Contents**\n :backlinks: none\n\nIntroduction\n------------\nThis package aims to provide tools needed to define custom field validation logic once which can be used independently or with\ndjango forms, test cases, API implementation or any model operation that requires saving data to the database.\n\nThis can also be extended by defining table check constraints if needed but currently validation\nwill only be handled at the model level.\n\n\nInstallation\n------------\n\ndjango-dynamic-model-validation is distributed on `PyPI `_ as a universal\nwheel and is available on Linux/macOS and Windows and supports\nPython 2.7/3.5+ and PyPy.\n\n.. code-block:: bash\n\n $ pip install django-dynamic-model-validation\n\n.. code-block:: python\n\n INSTALLED_APPS = [\n ...\n 'dynamic_validator',\n ]\n\nUsage\n-----\nThis provides model level validation which includes conditional validation, cross field validation,\nrequired field validation etc.\n\n\nThis is done using model attributes below.\n\n.. code-block:: python\n\n # Using a list/iterable: [['a', 'b'], ['c', 'd']] which validates that a field from each item is provided.\n REQUIRED_TOGGLE_FIELDS = []\n\n # Using a list/iterable validates that all fields are provided.\n REQUIRED_FIELDS = []\n\n # Optional toggle fields list: [['a', 'b']] which runs the validation only when any of the fields are present.\n OPTIONAL_TOGGLE_FIELDS = []\n\n # Conditional field validation using a list of tuples the condition which could be boolean or a callable and the list/iterable of fields that are required if the condition evaluates to `True`.\n # [(condition, [fields]), (condition, fields)]\n\n # Using a callable CONDITIONAL_REQUIRED_FIELDS = [(lambda instance: instance.is_admin, ['a', 'd'])]\n # Using a boolean CONDITIONAL_REQUIRED_TOGGLE_FIELDS = [(True, ['b', 'c']), (True, ['d', f])] \n # asserts that either 'b' or 'c' is provided and either 'd' or 'f'.\n # (Note: This can also be handled using REQUIRED_FIELDS/REQUIRED_TOGGLE_FIELDS)\n\n # Validates that all fields are present if the condition is True\n CONDITIONAL_REQUIRED_FIELDS = []\n # Validated at least one not both fields are provided if the condition is True.\n CONDITIONAL_REQUIRED_TOGGLE_FIELDS = []\n\n\n[Validates] That only one of the listed fields is provided.\n***********************************************************\n\n.. code-block:: python\n\n from django.db import models\n from dynamic_validator import ModelFieldRequiredMixin\n\n\n class TestModel(ModelFieldRequiredMixin, models.Model):\n amount = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)\n fixed_price = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)\n percentage = models.DecimalField(max_digits=3, decimal_places=0, null=True, blank=True)\n\n REQUIRED_TOGGLE_FIELDS = [\n ['amount', 'fixed_price', 'percentage'],\n ]\n\n.. code-block:: bash\n\n $ python manage.py shell\n ...\n >>> from decimal import Decimal\n >>> from demo.models import TestModel\n >>> TestModel.objects.create(amount=Decimal('2.50'), fixed_price=Decimal('3.00'))\n ...\n ValueError: {'fixed_price': ValidationError([u'Please provide only one of: Amount, Fixed price, Percentage'])}\n\n[Validates] That a field without a default is required.\n*******************************************************\n\n.. code-block:: python\n\n from django.db import models\n from dynamic_validator import ModelFieldRequiredMixin\n\n\n class TestModel(ModelFieldRequiredMixin, models.Model):\n amount = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)\n fixed_price = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)\n percentage = models.DecimalField(max_digits=3, decimal_places=0, null=True, blank=True)\n\n REQUIRED_FIELDS = ['amount'] # Always requires an amount to create the instance.\n\n.. code-block:: bash\n\n $ python manage.py shell\n ...\n >>> from decimal import Decimal\n >>> from demo.models import TestModel\n >>> TestModel.objects.create(fixed_price=Decimal('3.00'))\n ...\n ValueError: {'amount': ValidationError([u'Please provide a value for: \"amount\".'])}\n\n\n[Validates] That optional fields should only have one value if provided.\n************************************************************************\n\n.. code-block:: python\n\n from django.db import models\n from dynamic_validator import ModelFieldRequiredMixin\n\n\n class TestModel(ModelFieldRequiredMixin, models.Model):\n amount = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)\n fixed_price = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)\n percentage = models.DecimalField(max_digits=3, decimal_places=0, null=True, blank=True)\n\n OPTIONAL_TOGGLE_FIELDS = [\n ['fixed_price', 'percentage'] # Optionally validates that only fixed price/percentage are provided.\n ]\n\n.. code-block:: bash\n\n $ python manage.py shell\n ...\n >>> from decimal import Decimal\n >>> from demo.models import TestModel\n >>> first_obj = TestModel.objects.create(amount=Decimal('2.0'))\n >>> second_obj = TestModel.objects.create(amount=Decimal('2.0'), fixed_price=Decimal('3.00'))\n >>> third_obj = TestModel.objects.create(amount=Decimal('2.0'), fixed_price=Decimal('3.00'), percentage=Decimal('10.0'))\n ...\n ValueError: {'percentage': ValidationError([u'Please provide only one of: Fixed price, Percentage'])}\n\n\n[Validates] That when a user is active (ie. instance.user.is_active) both fields should be provided.\n****************************************************************************************************\n\n.. code-block:: python\n\n from django.db import models\n from django.conf import settings\n from dynamic_validator import ModelFieldRequiredMixin\n\n\n class TestModel(ModelFieldRequiredMixin, models.Model):\n user = models.ForeignKey(settings.AUTH_USER_MODEL)\n\n amount = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)\n fixed_price = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)\n percentage = models.DecimalField(max_digits=3, decimal_places=0, null=True, blank=True)\n\n CONDITIONAL_REQUIRED_FIELDS = [\n (\n lambda instance: instance.user.is_active, ['amount', 'percentage'],\n ),\n ]\n\n.. code-block:: bash\n\n $ python manage.py shell\n ...\n >>> from decimal import Decimal\n >>> from django.contrib.auth import get_user_model\n >>> from demo.models import TestModel\n >>> user = get_user_model().objects.create(username='test', is_active=True)\n >>> first_obj = TestModel.objects.create(user=user, amount=Decimal('2.0'))\n ...\n ValueError: {u'percentage': ValidationError([u'Please provide a value for: \"percentage\"'])}\n\n[Validates] That when a user is active (ie. instance.user.is_active) any of the fields should be provided.\n**********************************************************************************************************\n\n.. code-block:: python\n\n from django.db import models\n from django.conf import settings\n from dynamic_validator import ModelFieldRequiredMixin\n\n\n class TestModel(ModelFieldRequiredMixin, models.Model):\n user = models.ForeignKey(settings.AUTH_USER_MODEL)\n\n amount = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)\n fixed_price = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True)\n percentage = models.DecimalField(max_digits=3, decimal_places=0, null=True, blank=True)\n\n CONDITIONAL_REQUIRED_TOGGLE_FIELDS = [\n (\n lambda instance: instance.user.is_active, ['fixed_price', 'percentage', 'amount'],\n ),\n ]\n\n.. code-block:: bash\n\n $ python manage.py shell\n ...\n >>> from decimal import Decimal\n >>> from django.contrib.auth import get_user_model\n >>> from demo.models import TestModel\n >>> user = get_user_model().objects.create(username='test', is_active=True)\n >>> first_obj = TestModel.objects.create(user=user)\n ...\n ValueError: {'__all__': ValidationError([u'Please provide a valid value for any of the following fields: Fixed price, Percentage, Amount'])}\n ...\n >>>first_obj = TestModel.objects.create(user=user, amount=Decimal('2'), fixed_price=Decimal('2'))\n ...\n ValueError: {'__all__': ValidationError([u'Please provide only one of the following fields: Fixed price, Percentage, Amount'])}\n ...\n\n\nLicense\n-------\n\ndjango-dynamic-model-validation is distributed under the terms of both\n\n- `MIT License `_\n- `Apache License, Version 2.0 `_\n\nat your option.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jackton1/django-dynamic-model-validation.git", "keywords": "django,model validation,django models,django object validation,field validation,conditional validation,cross field validation,django validation,django validators,django custom validation", "license": "MIT/Apache-2.0", "maintainer": "Tonye Jack", "maintainer_email": "jtonye@ymail.com", "name": "django-dynamic-model-validation", "package_url": "https://pypi.org/project/django-dynamic-model-validation/", "platform": "", "project_url": "https://pypi.org/project/django-dynamic-model-validation/", "project_urls": { "Homepage": "https://github.com/jackton1/django-dynamic-model-validation.git" }, "release_url": "https://pypi.org/project/django-dynamic-model-validation/0.1.11/", "requires_dist": [ "future (==0.17.1)", "readme-renderer[md] ; extra == 'deploy'", "bumpversion (==0.5.3) ; extra == 'deploy'", "Django (>=1.11.18) ; extra == 'development'", "pip-tools (==3.1.0) ; extra == 'development'", "check-manifest (==0.37) ; extra == 'development'", "future (==0.17.1) ; extra == 'development'", "tox (==3.1.2) ; extra == 'development'", "pytest-django (==3.4.4) ; extra == 'development'", "pluggy (>=0.7) ; extra == 'development'", "mock (==2.0.0) ; extra == 'development'", "codacy-coverage (==1.3.10) ; extra == 'development'", "flake8 (==3.4.1) ; extra == 'development'", "yamllint (==1.10.0) ; extra == 'development'", "isort (==4.2.15) ; extra == 'development'", "flake8 (==3.4.1) ; extra == 'lint'", "yamllint (==1.10.0) ; extra == 'lint'", "isort (==4.2.15) ; extra == 'lint'", "tox (==3.1.2) ; extra == 'test'", "pytest-django (==3.4.4) ; extra == 'test'", "pluggy (>=0.7) ; extra == 'test'", "mock (==2.0.0) ; extra == 'test'", "codacy-coverage (==1.3.10) ; extra == 'test'", "Django (>=1.11.18) ; extra == 'tox'", "pip-tools (==3.1.0) ; extra == 'tox'", "check-manifest (==0.37) ; extra == 'tox'" ], "requires_python": ">=2.6", "summary": "Extra django model validation.", "version": "0.1.11" }, "last_serial": 5151720, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a2ca08b88df518df6485eb22f55ce078", "sha256": "0b50979f3ae6359fe52e5b20cc2b855b173ce08f9197a9f39c3b9613b0b5cfa6" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "a2ca08b88df518df6485eb22f55ce078", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 9377, "upload_time": "2018-12-09T01:08:47", "url": "https://files.pythonhosted.org/packages/9b/ec/753ea02e4854e4c27ff8739135a11de8232f514a0c053ece04962bb9ece8/django_dynamic_model_validation-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c37905f8fc3687c17a4eb3c7dabc51bf", "sha256": "aeedb36dc828d122bb75e4a19e75671d2fc864d3a8346f1891c10cfd5cbc321f" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c37905f8fc3687c17a4eb3c7dabc51bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 11872, "upload_time": "2018-12-09T01:08:49", "url": "https://files.pythonhosted.org/packages/3c/f3/31f95c10ba498f68f34b3f7568493d74afd4495768eec44d4903138f4554/django-dynamic-model-validation-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "c2ccf37e5bfd2c5255d6621f2fdedaa2", "sha256": "4979050ea1ada79f329eea834564c4071f201a4626d6b5573b21cd5eef9e132c" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "c2ccf37e5bfd2c5255d6621f2fdedaa2", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 7651, "upload_time": "2018-12-09T01:13:08", "url": "https://files.pythonhosted.org/packages/15/1a/c22dbeda3d2229a97451b0ff6d040e276cbedb7069f5ac339e78626594b7/django_dynamic_model_validation-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f2db61f03fa8afab1e8341942f4777a", "sha256": "4b3ed0463677e5c9f430986ab5f4386a317324d753709e085ae3472d83431b7b" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6f2db61f03fa8afab1e8341942f4777a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 10217, "upload_time": "2018-12-09T01:13:10", "url": "https://files.pythonhosted.org/packages/9b/3a/58f91c40c1b57ed4be990da4310e9d264969258b18b72e9d67d5bf21c385/django-dynamic-model-validation-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "f49eb6f4fcd73310cfaef2bcff5842e9", "sha256": "e1525ee750caf88f7f818b270c0f4e33bd44937367e4e9b16fde3e3a9960cd06" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "f49eb6f4fcd73310cfaef2bcff5842e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6", "size": 15064, "upload_time": "2019-01-29T02:13:30", "url": "https://files.pythonhosted.org/packages/0e/b9/f9df8ba77bcd490aba4c796de83a7435e6aefda17fa149b5780cb5e1f755/django_dynamic_model_validation-0.1.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2c505201622680f7e5579131d1ae9c08", "sha256": "e94be06374ed3d58c19a89c1ae823be6e1da59bc3e4b80fbb771099aff2c1e0e" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.10.tar.gz", "has_sig": false, "md5_digest": "2c505201622680f7e5579131d1ae9c08", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12321, "upload_time": "2019-01-29T02:13:31", "url": "https://files.pythonhosted.org/packages/7d/24/fde2c39a80bb1365749b84a6cd83719552220857d4cab8fbdf6b4577bc75/django-dynamic-model-validation-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "60319af5e7fe64941b9491e9219264d6", "sha256": "a81602351e14437840cc59db2592f11110903b282d09c6f43362d3796e8a3a3a" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.11-py2-none-any.whl", "has_sig": false, "md5_digest": "60319af5e7fe64941b9491e9219264d6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 15122, "upload_time": "2019-04-16T19:16:55", "url": "https://files.pythonhosted.org/packages/11/2c/6a6a34a62533c8bb79799dd2a89dc0b4c2547b9d407f35a067a00dda5857/django_dynamic_model_validation-0.1.11-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06b265072343698fb927265b6f902090", "sha256": "cc214f3a6eb781a1106516b9e6ae8c334d4723817c5ac7229c45d8343070cdac" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.11.tar.gz", "has_sig": false, "md5_digest": "06b265072343698fb927265b6f902090", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12787, "upload_time": "2019-04-16T19:16:56", "url": "https://files.pythonhosted.org/packages/c5/9d/a3043a3d2c3009b01208ef96d6b9b2c2fb08776aaabad8d6323e6da2ebd4/django-dynamic-model-validation-0.1.11.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a0a71928a9233d3ecbb8ed4ddd955af9", "sha256": "513328729049a4eaa394f6ff8edc349f0d4b5ae3b1cf18e141ab97b4a04cd4ce" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "a0a71928a9233d3ecbb8ed4ddd955af9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 9650, "upload_time": "2018-12-09T02:09:13", "url": "https://files.pythonhosted.org/packages/d4/ac/e892f2980b98602d35ad3036f0f454e812de64c2375345f115ba0c41e244/django_dynamic_model_validation-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f6049b3c4220d859b9635343c7893603", "sha256": "8987c6a85c12b89a621ae5890827755072c76d8e28d265e359e4343a684da018" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f6049b3c4220d859b9635343c7893603", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12391, "upload_time": "2018-12-09T02:09:14", "url": "https://files.pythonhosted.org/packages/1f/1a/892effd38560a39e9743ce3f2614cea978cf352d2def4a37c09a60d82af1/django-dynamic-model-validation-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "8899cbe2d6625675c97be7856e1a972f", "sha256": "aa92b7cf5c8801cc7271567e7419cb3cd1a5074e31de330f9f1390c676011965" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "8899cbe2d6625675c97be7856e1a972f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 9626, "upload_time": "2018-12-09T02:16:14", "url": "https://files.pythonhosted.org/packages/da/99/c828030e4116cb8453bd7029565a310fe6ed8202fdf41228fb939c37bfeb/django_dynamic_model_validation-0.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69c372b5dec5dca9444f51386ddd34a1", "sha256": "72903b484acb8cf6d144068ed54d940d89e34d9b4bbc707f117ac6c0bc1853e8" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.3.tar.gz", "has_sig": false, "md5_digest": "69c372b5dec5dca9444f51386ddd34a1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12345, "upload_time": "2018-12-09T02:16:16", "url": "https://files.pythonhosted.org/packages/90/30/6ebb37a78b6e5254176c6b9748d306e3e293ecdfd2ebe868f67c627fa49c/django-dynamic-model-validation-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "4893167ce11fc958e98a8dc24cb45091", "sha256": "7845595c09d82436c752053c7b7dbe7f5c6403b7a33b0a6f27fd19c882826798" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.4-py2-none-any.whl", "has_sig": false, "md5_digest": "4893167ce11fc958e98a8dc24cb45091", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 9601, "upload_time": "2018-12-09T20:01:25", "url": "https://files.pythonhosted.org/packages/63/0f/a5d1f546d0dbff9cbecdddf8266a10c83711c99f1562474a518e7c477121/django_dynamic_model_validation-0.1.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "facb394c3bce474ac18cd432213a4994", "sha256": "f218b058d558397d2eb92bc965be71d204e9c4ebd25ddffa47e489b543c5770e" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.4.tar.gz", "has_sig": false, "md5_digest": "facb394c3bce474ac18cd432213a4994", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12296, "upload_time": "2018-12-09T20:01:27", "url": "https://files.pythonhosted.org/packages/74/46/bd802094aad914d9d79ebf4479ac9242f01f52d6c1397b23c49e155a8fcd/django-dynamic-model-validation-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "7d2a30e7b4204e2b9be0b575e2783905", "sha256": "9f63b7204a298513188568e504bfc5fcb38cd7e1d58bab87bf77809dfea94336" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "7d2a30e7b4204e2b9be0b575e2783905", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6", "size": 9597, "upload_time": "2019-01-27T20:06:42", "url": "https://files.pythonhosted.org/packages/73/59/5124d08bf80bee577fe1f0c6e22e99a505d4391d1790e999ca36833dc79b/django_dynamic_model_validation-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ecb46760810ecd32e62ddba42e15398f", "sha256": "0e4309784b6620bb18dbaa9ba762254d34727f7dc8babdc2a95843123af88291" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.5.tar.gz", "has_sig": false, "md5_digest": "ecb46760810ecd32e62ddba42e15398f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12227, "upload_time": "2019-01-27T20:06:43", "url": "https://files.pythonhosted.org/packages/3b/79/90be1cdee9afea2a71a20b425c2b83803d9b826194ea265b4b73f33cd352/django-dynamic-model-validation-0.1.5.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "68b0cdd0399d33a978c9412be788b51d", "sha256": "aeb2640415278baa0f84fd988a1f650238b553d856d9bb99bfbccee88c564421" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "68b0cdd0399d33a978c9412be788b51d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6", "size": 15054, "upload_time": "2019-01-29T01:12:06", "url": "https://files.pythonhosted.org/packages/65/19/05ef6a68b3b880eae1bdd87cbdebd262d5f7494f1521414555c3c865680a/django_dynamic_model_validation-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "61d423e824554350f7f544d1846fe542", "sha256": "cfc628abfc4cb453e6628c581c6d25d8212ba192992185b008cfb226a9f843bc" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.7.tar.gz", "has_sig": false, "md5_digest": "61d423e824554350f7f544d1846fe542", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 14014, "upload_time": "2019-01-29T01:12:08", "url": "https://files.pythonhosted.org/packages/87/69/2caf86c4cb6f1bc970696129a10170e7f07497804b89d6cac65f7cce1310/django-dynamic-model-validation-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "3b149d0d1481d66c2f21a97b9a28187d", "sha256": "b951d2f216c9d92fa5031d23e72625a5e3df4ae0cb0fbeef2b937875a93071a2" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "3b149d0d1481d66c2f21a97b9a28187d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6", "size": 15052, "upload_time": "2019-01-29T01:46:01", "url": "https://files.pythonhosted.org/packages/55/b7/dbd5c3132dbd201ce8790aa750cf7e024578c9626d63594c60cbcf69dc96/django_dynamic_model_validation-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bc8e9e0eb4eec05e8d77645e45c991d5", "sha256": "335be54a16a60feaf4ebbb5df738966557514577a27b5afddf05070c89826c58" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.8.tar.gz", "has_sig": false, "md5_digest": "bc8e9e0eb4eec05e8d77645e45c991d5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12608, "upload_time": "2019-01-29T01:46:03", "url": "https://files.pythonhosted.org/packages/70/23/88db6cc69e0608a421a579aabb4d9225c1b57320b07ceb895fd87ac0c241/django-dynamic-model-validation-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "f6a812e0095aef7ca26b12b4fbfbbc04", "sha256": "43073aa19c5b4856cce857c5e5dbcccb7d5cecdc464fdd9577cb21522a96b207" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "f6a812e0095aef7ca26b12b4fbfbbc04", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6", "size": 15052, "upload_time": "2019-01-29T02:04:28", "url": "https://files.pythonhosted.org/packages/56/9c/65e0919a7e21c9ad87374b60fda5ac16be0d11cb1aa264460f6d1a32f2aa/django_dynamic_model_validation-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "746e54f5a530be54e9efb4dbb8f703e3", "sha256": "74a50ff2228c729e413adcd8763846c063872fdfd79fad6f7bbcc40b4e467ed6" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.9.tar.gz", "has_sig": false, "md5_digest": "746e54f5a530be54e9efb4dbb8f703e3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 14005, "upload_time": "2019-01-29T02:04:30", "url": "https://files.pythonhosted.org/packages/c7/b1/f4b044f5361b40ffd59d077f49834bab9e93ad39f6b71b29e87d7d0a7bae/django-dynamic-model-validation-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "60319af5e7fe64941b9491e9219264d6", "sha256": "a81602351e14437840cc59db2592f11110903b282d09c6f43362d3796e8a3a3a" }, "downloads": -1, "filename": "django_dynamic_model_validation-0.1.11-py2-none-any.whl", "has_sig": false, "md5_digest": "60319af5e7fe64941b9491e9219264d6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 15122, "upload_time": "2019-04-16T19:16:55", "url": "https://files.pythonhosted.org/packages/11/2c/6a6a34a62533c8bb79799dd2a89dc0b4c2547b9d407f35a067a00dda5857/django_dynamic_model_validation-0.1.11-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06b265072343698fb927265b6f902090", "sha256": "cc214f3a6eb781a1106516b9e6ae8c334d4723817c5ac7229c45d8343070cdac" }, "downloads": -1, "filename": "django-dynamic-model-validation-0.1.11.tar.gz", "has_sig": false, "md5_digest": "06b265072343698fb927265b6f902090", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 12787, "upload_time": "2019-04-16T19:16:56", "url": "https://files.pythonhosted.org/packages/c5/9d/a3043a3d2c3009b01208ef96d6b9b2c2fb08776aaabad8d6323e6da2ebd4/django-dynamic-model-validation-0.1.11.tar.gz" } ] }