{ "info": { "author": "Wes Kendall", "author_email": "opensource@ambition.com", "bugtrack_url": null, "classifiers": [ "Framework :: Django", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "[![Build Status](https://travis-ci.org/ambitioninc/django-entity.png)](https://travis-ci.org/ambitioninc/django-smart-manager)\nDjango Smart Manager\n==================\nDjango Smart Manager provides a simple framework for representing and managing Django models from serializable templates.\n\n\n# Problem Overview\n\nOftentimes what we model in Django spans multiple objects and tables. Managing a single object that is represented by multiple models can be quite cumbersome through the shell or through basic Django administration. This app provides a framework such that a user can write templates that represent many models and complex relationships.\n\nFor example, assume that you model a person. The ``Person`` model contains a unique identifier for that person, multiple ``PhoneNumber`` models that point to it, and multiple ``Address`` models. With Django Smart Manager, one can construct a template in the following manner:\n\n```python\n{\n 'unique_id': 'person_unique_id':\n 'phone_numbers': ['865-123-4985', '956-345-5678'],\n 'addresses': [{\n 'street': 'my street address1',\n 'city': 'my city',\n }],\n}\n```\n\nUsing the framework (as shown soon), we can construct a parser for this template that maintains the appropriate model representation underneath while also providing a much simpler way to manage all of those underlying models. This management includes updates to the data in the template and deletions to objects in the template.\n\n# Building the Person Example\nBefore we show how to build the example just illustrated in the problem overview, the models in the example are laid out below:\n\n```python\nclass Person(models.Model):\n unique_id = models.CharField(max_length=64, unique=True)\n\n\nclass PhoneNumber(models.Model):\n person = models.ForeignKey(Person)\n number = models.CharField(max_length=32)\n\n\nclass Address(models.Model):\n person = models.ForeignKey(Person)\n street = models.CharField(max_length=128)\n city = models.CharField(max_length=128)\n```\n\nIn order to achieve the ability of specifying the ``Person`` model (and its related models) via a template as shown above, the user must create a model template class that inherits ``BaseSmartManager``. This class will be responsible for taking in the template and managing the object(s) represented by the template.\n\nFor the sake of example, let's assume we're going to build three model template classes: one to manage addresses, one to manage phone numbers, and one to manage a person and its associated addresses and phone numbers. We'll begin from the bottom up by building the ``Address`` model template. The code for this is shown below:\n\n```python\nfrom smart_manager import BaseSmartManager\n\n\nclass AddressSmartManager(BaseSmartManager):\n def build(self):\n self.build_obj(\n person_id=self._template['person'],\n street=self._template['street'],\n city=self._template['city'],\n )\n```\n\nNow that we have this class, it can be called in the following way to build its associated object:\n\n```python\nAddressSmartManager({\n 'person': 1, # The pk of a Person object\n 'street': 'my street',\n 'city': 'my city',\n}).build()\n```\n\nUnderneath the hood, it is passing the parameters of build_obj to the ``upsert`` function [Django Manager Utils](https://github.com/ambitioninc/django-manager-utils) and also internally maintaining all of the objects that have been built.\n\nNow that the model template class has been created, a ``SmartManager`` model can be constructed as follows:\n\n```python\nfrom smart_manager import SmartManager\n\n\nmt = SmartManager.objects.create(smart_manager_class='path.to.AddressSmartManager', template={\n 'person': 1,\n 'street': 'my street',\n 'city': 'my city',\n})\n```\n\nOnce this model is created, it manages all of the objects associated with the template. If the user was to change the template and save the ``mt`` variable from the example, the underlying ``Address`` model would be updated. Similarly, the underlying ``Address`` model will also be deleted when ``mt`` is deleted. The deletion behavior can be turned off by specifying ``manages_deletions=False`` in the creation of the model template.\n\nWhile this example is trivial, the power of Django Smart Manager is unleashed when you start to build more and more complex objects that need ot be managed. Let's assume that the user can now build the associated ``PhoneNumberSmartManager`` class for creating ``PhoneNumber`` objects and move on to creating the ``PersonSmartManager`` model template class:\n\n```python\nclass PersonSmartManager(BaseSmartManager):\n def build(self):\n # Build the parent person object\n person = self.build_obj(unique_id=self._template['unique_id'])\n\n # Build its child phone number objects using the PhoneNumberSmartManager\n for phone_number in self._template['phone_numbers']:\n self.build_obj_using(PhoneSmartManager, {\n 'person': person.id,\n 'phone_number': phone_number\n })\n\n # Build its child address objects using the AddressSmartManager\n for address in self._template['addresses']:\n self.build_obj_using(AddressSmartManager, {\n 'person': person.id,\n 'street': address['street'],\n 'city': address['city'],\n })\n```\n\nNote that the ``PersonSmartManager`` uses the ``build_obj_using`` function to build an object using another model template. This ensures that the objects managed by that model template are also managed by the calling model template.\n\nSimilarly, one can now make a ``SmartManager`` object using this model template class to manage a complete ``Person`` object.\n\n# Using Smart Managers Directly with Django Models and Managers\nSmart mangers can be directly used by models and managers in Django. All they need to do is inherit the ``SmartModelMixin`` or ``SmartManagerMixin``. If a model inherits ``SmartModelMixin``, it is provided a ``smart_upsert`` and ``smart_delete`` function. These function both take a smart manager class and template. The ``smart_upsert`` function upserts the template using the smart manager that linked to it (or creating a smart manager if it doesn't exist). The ``smart_delete`` function will delete the smart manager that is associated with the model, which in turn deletes all other objects managed by that smart manager.\n\nIf a Django model manager inherits ``SmartManagerMixin``, it is provided a ``smart_create`` function that takes a smart manager class and template. The objects are created using the template and a smart manager is returned.\n\nThese methods are meant as convenience methods so that a user can still interact with their models and not have to directly query smart managers.\n\nNote that all functions return a smart manager, and the mixins can be imported directly from ``smart_manager`` as so:\n\n```python\nfrom smart_manager import SmartModelMixin, SmartManagerMixin\n```\n\n# Caveats with Smart Managers\nIt is up to the programmer to ultimately define how a template manages its underlying objects. By default, Django Smart Manager will manage deletions of every object built using the ``build_obj`` function. This, however, can cause undesired side effects for some objects that simply should not be deleted if the template is deleted. If this is the case, a ``is_deletable`` kwarg can be passed to the ``build_obj`` function to override the default behavior of managing its deletion.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ambitioninc/django-smart-manager", "keywords": "Django,Models,ORM,Manager,Templates", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-smart-manager", "package_url": "https://pypi.org/project/django-smart-manager/", "platform": "", "project_url": "https://pypi.org/project/django-smart-manager/", "project_urls": { "Homepage": "https://github.com/ambitioninc/django-smart-manager" }, "release_url": "https://pypi.org/project/django-smart-manager/1.2.0/", "requires_dist": [ "Django (>=2.0)", "django-manager-utils (>=1.4.0)", "jsonfield (>=0.9.20)" ], "requires_python": "", "summary": "Make templates that manage models", "version": "1.2.0" }, "last_serial": 5519580, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "fda31180082911f453b4cdddbe4b3d62", "sha256": "022cf6e8a3c03c438dfc678ca39b17befcd7c9922aec89c77fed6f49f0c86d25" }, "downloads": -1, "filename": "django-smart-manager-0.1.1.tar.gz", "has_sig": false, "md5_digest": "fda31180082911f453b4cdddbe4b3d62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7921, "upload_time": "2014-06-03T05:14:50", "url": "https://files.pythonhosted.org/packages/66/3f/d757e8dd660dd6c8e0992b5135d449ba58050a2da3efdcab1bc4e17cb99d/django-smart-manager-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "d4d4add9ed18ed32b16b36ebefb1aacd", "sha256": "53597fa925162596c9e2f24c024c920b2a51503ec17955f0c28b2a672311a14a" }, "downloads": -1, "filename": "django-smart-manager-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d4d4add9ed18ed32b16b36ebefb1aacd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8262, "upload_time": "2014-06-04T15:02:53", "url": "https://files.pythonhosted.org/packages/2c/79/271a4f8d68bd868009d1d8b1f127180b0393c3331d50a7bb41eca652ef72/django-smart-manager-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "ea4b194dd8039e8c7cdae64f2aaad163", "sha256": "eabe4e2ab1edea130e5713ddba81ffe33230716dab68da18d01d317c0eba7b4e" }, "downloads": -1, "filename": "django-smart-manager-0.1.3.tar.gz", "has_sig": false, "md5_digest": "ea4b194dd8039e8c7cdae64f2aaad163", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8749, "upload_time": "2014-06-20T17:49:49", "url": "https://files.pythonhosted.org/packages/a4/dd/6c159c6977bc9b004696caffcf4ae853e686020f2da0272b597677824eca/django-smart-manager-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "4f26a6eabdbe0110df1038f1b4d7228a", "sha256": "324561189aee3574f4a409380e51b8e56687f8575afd98a20a7c469c31f20120" }, "downloads": -1, "filename": "django-smart-manager-0.1.4.tar.gz", "has_sig": false, "md5_digest": "4f26a6eabdbe0110df1038f1b4d7228a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8801, "upload_time": "2014-06-21T13:03:27", "url": "https://files.pythonhosted.org/packages/fc/e0/7d482362acfdf829298431401415e930b119a98a43c07ae1999431a50836/django-smart-manager-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "e85eabc8538893718e1a1ebaddc6b4e6", "sha256": "1ba09bd3965cf245936e08aaefcd133e576dbdf671cafbcc89431360a6ce7347" }, "downloads": -1, "filename": "django-smart-manager-0.1.5.tar.gz", "has_sig": false, "md5_digest": "e85eabc8538893718e1a1ebaddc6b4e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9086, "upload_time": "2014-06-22T06:47:57", "url": "https://files.pythonhosted.org/packages/80/fd/a264ae42d72548a0329dfc5182edfda51e6244ddf034d93f24559461eeb6/django-smart-manager-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "fc69e9259a92b4d1f8590f576c2db0d0", "sha256": "ec2f462fe1d967bddf4fbe6c43167fbb7429573018ec93e4fb12bfcc04f97e8d" }, "downloads": -1, "filename": "django-smart-manager-0.1.6.tar.gz", "has_sig": false, "md5_digest": "fc69e9259a92b4d1f8590f576c2db0d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9436, "upload_time": "2014-06-24T03:19:32", "url": "https://files.pythonhosted.org/packages/37/c4/6e960ebd75a2bfa68af363b7d74f11c1883ad1f62424008d3fc8fd681209/django-smart-manager-0.1.6.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "fed3d8f4945185cf1de16a607d8d1ea9", "sha256": "8157eaf44fec78381be212cea3a06d72fade102a19879e1dec69afe39d8097ce" }, "downloads": -1, "filename": "django-smart-manager-0.2.0.tar.gz", "has_sig": false, "md5_digest": "fed3d8f4945185cf1de16a607d8d1ea9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9698, "upload_time": "2014-07-31T21:25:36", "url": "https://files.pythonhosted.org/packages/62/ba/20631e03aee1978a869d9ee90208faa70bc4492e71fd3c36c55ee0c766dd/django-smart-manager-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b74bf6ae76ef737634e84720817b3846", "sha256": "ff6b605f45b5e6cdf97e5e5592c0370e9d2d978d31bb2d8b1d304d23500663f9" }, "downloads": -1, "filename": "django-smart-manager-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b74bf6ae76ef737634e84720817b3846", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11360, "upload_time": "2014-08-24T18:16:33", "url": "https://files.pythonhosted.org/packages/6a/c5/f415dfe9a4a9961655bf7e0d70633c52d304ce1e6c8d46ce8935e7ea9929/django-smart-manager-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "a4a5b7ce979d165fa41330819ebb7f59", "sha256": "8fa6f9fb71da5d5cba7e638fb5740ceb01c8a15de1c1c8e2d84cd4e5f2b92660" }, "downloads": -1, "filename": "django-smart-manager-0.3.1.tar.gz", "has_sig": false, "md5_digest": "a4a5b7ce979d165fa41330819ebb7f59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11382, "upload_time": "2014-08-25T13:08:15", "url": "https://files.pythonhosted.org/packages/1d/5f/a97df91f55a4714f749827971e3285a671152baa84481bb04632a684c580/django-smart-manager-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "094da6d8a409fd8776bc7a1a76d7e4fb", "sha256": "679be08ef4d72c669412a7b826acd72705a29b358b6355ad5cc8aaf955d38383" }, "downloads": -1, "filename": "django-smart-manager-0.3.2.tar.gz", "has_sig": false, "md5_digest": "094da6d8a409fd8776bc7a1a76d7e4fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11957, "upload_time": "2014-08-29T00:27:38", "url": "https://files.pythonhosted.org/packages/f0/10/e5c88edeee7343a46f193307e80ecea9250249e6a7e778b0373f863dc8b2/django-smart-manager-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "641c28edf717caf4f262a4f7f186bd9c", "sha256": "29bed7e39a62b74adc9096de65afca7494e032a77152f6889969f06edf7299e2" }, "downloads": -1, "filename": "django-smart-manager-0.3.3.tar.gz", "has_sig": false, "md5_digest": "641c28edf717caf4f262a4f7f186bd9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11980, "upload_time": "2014-09-08T13:56:19", "url": "https://files.pythonhosted.org/packages/b4/0b/6f0f73f81990e78dae11c7b1ceac1036764eb08251f0022a45513e118736/django-smart-manager-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "b1c770acbb79f420eddddbb5c35b155c", "sha256": "10d13c97ea78c18168ea183440432b76d2ebcabccef69c4405b76b9aa818fe9e" }, "downloads": -1, "filename": "django_smart_manager-0.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b1c770acbb79f420eddddbb5c35b155c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 22855, "upload_time": "2015-04-01T20:19:54", "url": "https://files.pythonhosted.org/packages/0b/9b/1014cccd0a9a015ad5ffcc2d65af62949dea035969e4e4bd785e50437d0d/django_smart_manager-0.3.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18d93b7689aca5a4450e0ed1516289c3", "sha256": "1f66beba66bcf13aa32e169629254d3ecec87976c3d967b5fc18600343e286e6" }, "downloads": -1, "filename": "django-smart-manager-0.3.4.tar.gz", "has_sig": false, "md5_digest": "18d93b7689aca5a4450e0ed1516289c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12543, "upload_time": "2015-04-01T20:19:51", "url": "https://files.pythonhosted.org/packages/ab/8e/3b5916fa419918722964ecad554befbd65738af0353adf5b87e7834c352c/django-smart-manager-0.3.4.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "df2ad1ec5aed1f502ddde40750ef9a54", "sha256": "bcda090509cdf0ddb7ea08e6dac959abac39256a90441ce4550f96fa9bfb0379" }, "downloads": -1, "filename": "django_smart_manager-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "df2ad1ec5aed1f502ddde40750ef9a54", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17872, "upload_time": "2015-05-02T21:39:55", "url": "https://files.pythonhosted.org/packages/a4/51/a42eb47772be042e29e8fded05b3145ddd483081a69fef9944f230e22b53/django_smart_manager-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc2baeb13f62ac19df3c8cade3e38bd5", "sha256": "5405f22f8325e9c12b8bb6d2214b8f8865db3f1c440d615f662b4e70c62f2107" }, "downloads": -1, "filename": "django-smart-manager-0.4.0.tar.gz", "has_sig": false, "md5_digest": "dc2baeb13f62ac19df3c8cade3e38bd5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11097, "upload_time": "2015-05-02T21:39:52", "url": "https://files.pythonhosted.org/packages/fa/92/c88d8a1a1a9c935dcf85acc6dd69a3e4e662b6bddfa777544af912ec8391/django-smart-manager-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "46d48fa054e11ac6ee79148a13e4676f", "sha256": "74f9228559b734398f3a5b43d3fda1a3aae3988b4e63137b08c17fb1540143e4" }, "downloads": -1, "filename": "django_smart_manager-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "46d48fa054e11ac6ee79148a13e4676f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17874, "upload_time": "2015-05-02T22:38:02", "url": "https://files.pythonhosted.org/packages/b6/71/bb8286bff455e7f64008d52f979730f1a08d7adf458792404c8af0d35236/django_smart_manager-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e3c8a3fbf81317cf9c76838fada4d1c8", "sha256": "20cd910e6e694eadaf43f8ccb4389812b07132ad8516b470c16aa1daa048431c" }, "downloads": -1, "filename": "django-smart-manager-0.4.1.tar.gz", "has_sig": false, "md5_digest": "e3c8a3fbf81317cf9c76838fada4d1c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11112, "upload_time": "2015-05-02T22:38:00", "url": "https://files.pythonhosted.org/packages/3e/7b/4b39e6de4372400aab0863aa6fafeb5752517ed725d38efdad0603e5eb42/django-smart-manager-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "566140642f49f26a385cfe43564c7f5c", "sha256": "40dd68a284b915b0865ccd2315094e3c3b73defcbc81234efd595591c5357702" }, "downloads": -1, "filename": "django_smart_manager-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "566140642f49f26a385cfe43564c7f5c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17864, "upload_time": "2016-02-18T20:41:58", "url": "https://files.pythonhosted.org/packages/1e/aa/09d68f12145f0a2d18914fc5e446b3feaf104fc714c2e6049c615571e7b6/django_smart_manager-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0e2ae2720420f641c704ab31181f006", "sha256": "c2d1f10c82d66c7ee1c29f07392b70272cc9ad9590a6fa5e486b8a6ce5efd0be" }, "downloads": -1, "filename": "django-smart-manager-0.5.0.tar.gz", "has_sig": false, "md5_digest": "f0e2ae2720420f641c704ab31181f006", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11133, "upload_time": "2016-02-18T20:41:47", "url": "https://files.pythonhosted.org/packages/d1/3d/e0d316b472fbebfcf5d97324583785a296f9691ada9cdf03f86014c408fa/django-smart-manager-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "20e8be9525e17fd617dc5fba867ffaad", "sha256": "7ac6920f31afe817c6d7b8465ce49b93245a931db72c1143c115ce319b550b70" }, "downloads": -1, "filename": "django_smart_manager-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "20e8be9525e17fd617dc5fba867ffaad", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17883, "upload_time": "2016-11-29T15:22:14", "url": "https://files.pythonhosted.org/packages/21/d1/f830971c61a1f026ad97814b4d1f2d1e9ac414ed2c8280cb3c9b4e78fe15/django_smart_manager-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d565716f3cd70d7aad222d51b1348a2c", "sha256": "848903ce85bae176d374a61879ad977eecad8e90cdf7e3c168818f07274f1634" }, "downloads": -1, "filename": "django-smart-manager-0.6.0.tar.gz", "has_sig": false, "md5_digest": "d565716f3cd70d7aad222d51b1348a2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11112, "upload_time": "2016-11-29T15:22:12", "url": "https://files.pythonhosted.org/packages/e3/c9/6f16cdaafb2cb0d25b9ec50975202df07b71733dbed7f5fc82126003d4a1/django-smart-manager-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "4e5eeba096e5f7aabcbb833f2959a4f5", "sha256": "f3a878c3310dc56ab1c4b4e3278d1f22ee930aec819f42252a4226f4b79aacce" }, "downloads": -1, "filename": "django_smart_manager-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4e5eeba096e5f7aabcbb833f2959a4f5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17888, "upload_time": "2017-09-19T21:43:58", "url": "https://files.pythonhosted.org/packages/d2/a6/20d2d4c3c9cb9f861a6cae8ff2cb19d46d5a0420af9e25eea36fb9771483/django_smart_manager-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc7d4833a0102304d707d427c65311ba", "sha256": "04cd192662d1ec25fdc2ebb5d710a678001d5d4f82c4d563f14863a7b1b4c4a4" }, "downloads": -1, "filename": "django-smart-manager-0.7.0.tar.gz", "has_sig": false, "md5_digest": "fc7d4833a0102304d707d427c65311ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11178, "upload_time": "2017-09-19T21:44:01", "url": "https://files.pythonhosted.org/packages/ec/fd/54f2bee6bdf626be83a6f282d6e06a1992e51e0142dfd8cf6863d944f68e/django-smart-manager-0.7.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "5c975bf96e630a305138370d50fd2d90", "sha256": "c03ff633568a3cbec68bf17a26b48c341756dc86908a02827b4131b8d2aa838a" }, "downloads": -1, "filename": "django_smart_manager-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5c975bf96e630a305138370d50fd2d90", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17915, "upload_time": "2017-12-08T23:14:43", "url": "https://files.pythonhosted.org/packages/fd/d1/2f239cc34f40fe587a121bfa5c815480dc6204371198c22afb41dbdcdfff/django_smart_manager-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00c17d14f3b88bb6253758128545200f", "sha256": "b75e26dc4e03ee2ce058c96e42c27b7379ffa74437c2db1ad5d63fb5378f1cf5" }, "downloads": -1, "filename": "django-smart-manager-1.0.0.tar.gz", "has_sig": false, "md5_digest": "00c17d14f3b88bb6253758128545200f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11187, "upload_time": "2017-12-08T23:14:45", "url": "https://files.pythonhosted.org/packages/8a/66/fef15b32b753bb504241fda27d36c5e3b56c6df60578e9da9d86249599da/django-smart-manager-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "a4a3ff0f729935de8da78e872fed207b", "sha256": "166667777e5bf81fbc2212fdc8690c4a84d97076e3b81586fbd1df202d90da87" }, "downloads": -1, "filename": "django_smart_manager-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a4a3ff0f729935de8da78e872fed207b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17924, "upload_time": "2018-04-27T21:36:56", "url": "https://files.pythonhosted.org/packages/d8/6e/03e3c70449ac4206962fbf44c84c3bd83e464f054a8c0189f09dd795894d/django_smart_manager-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ad16ea39461ecceb9eea3c2cf8db7f1", "sha256": "31d1007a4ef94186efefb72857e73683110f1f21471c905d90fad2f39b38422f" }, "downloads": -1, "filename": "django-smart-manager-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9ad16ea39461ecceb9eea3c2cf8db7f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11273, "upload_time": "2018-04-27T21:36:57", "url": "https://files.pythonhosted.org/packages/01/3d/9f12499105d439cff7debf4d2d6456b7170d263926ecc977a550f9200117/django-smart-manager-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "54d21fe2c6b78e53fadb0f9bebb5a28b", "sha256": "e569606c4d0b11acbf50ba9c44ba846e34bbaba7486a8d65655db5e225c2da1d" }, "downloads": -1, "filename": "django_smart_manager-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "54d21fe2c6b78e53fadb0f9bebb5a28b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14516, "upload_time": "2019-07-11T19:00:20", "url": "https://files.pythonhosted.org/packages/c5/ac/ab11dc3b88275db9cdfd4c6a7836fbf0df86e07c62c489409bc280a44441/django_smart_manager-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4e59ecb24a8b4766bac398acefdd2c2b", "sha256": "9b80723d91f66732f1da1136f13f6178f95888a8e76af2b03632e74b36b21ed2" }, "downloads": -1, "filename": "django-smart-manager-1.2.0.tar.gz", "has_sig": false, "md5_digest": "4e59ecb24a8b4766bac398acefdd2c2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11289, "upload_time": "2019-07-11T19:00:21", "url": "https://files.pythonhosted.org/packages/3f/5a/9c5866477622b34d6029becb4af857cb5ee6f2b2b749e22b3e739d078a32/django-smart-manager-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "54d21fe2c6b78e53fadb0f9bebb5a28b", "sha256": "e569606c4d0b11acbf50ba9c44ba846e34bbaba7486a8d65655db5e225c2da1d" }, "downloads": -1, "filename": "django_smart_manager-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "54d21fe2c6b78e53fadb0f9bebb5a28b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14516, "upload_time": "2019-07-11T19:00:20", "url": "https://files.pythonhosted.org/packages/c5/ac/ab11dc3b88275db9cdfd4c6a7836fbf0df86e07c62c489409bc280a44441/django_smart_manager-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4e59ecb24a8b4766bac398acefdd2c2b", "sha256": "9b80723d91f66732f1da1136f13f6178f95888a8e76af2b03632e74b36b21ed2" }, "downloads": -1, "filename": "django-smart-manager-1.2.0.tar.gz", "has_sig": false, "md5_digest": "4e59ecb24a8b4766bac398acefdd2c2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11289, "upload_time": "2019-07-11T19:00:21", "url": "https://files.pythonhosted.org/packages/3f/5a/9c5866477622b34d6029becb4af857cb5ee6f2b2b749e22b3e739d078a32/django-smart-manager-1.2.0.tar.gz" } ] }