{ "info": { "author": "Andrey Mikhaylenko", "author_email": "andy@neithere.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Programming Language :: Python", "Topic :: Database", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: General" ], "description": "EAV-Django\n==========\n\nEAV-Django is a reusable Django application which provides an implementation of\nthe Entity-Attribute-Value data model.\n\n Entity-Attribute-Value model (EAV), also known as object-attribute-value\n model and open schema which is used in circumstances where the number of\n attributes (properties, parameters) that can be used to describe a thing (an\n \"entity\" or \"object\") is potentially very vast, but the number that will\n actually apply to a given entity is relatively modest.\n\n(See the `Wikipedia article `_\nfor more details.)\n\nEAV-Django works fine with traditional RDBMS (tested on SQLite and MySQL).\n\nPriorities\n----------\n\nThe application grew from an online shop project, so it is pretty practical and\nnot just an academic exercise. The main priorities were:\n\na) flexibility of data,\nb) efficiency of queries, and\nc) maximum maintainability without editing the code.\n\nOf course this implies trade-offs, and the goal was to find the least harmful\ncombination for the general case.\n\nFeatures\n--------\n\nAll provided models are abstract, i.e. EAV-Django does not store any information\nin its own tables. Instead, it provides a basis for your own models which will\nhave support for EAV out of the box.\n\nThe EAV API includes:\n\n* *Create/update/access:* model instances provide standart API for both \"real\"\n fields and EAV attributes. The abstraction, however, does not stand in your\n way and provides means to deal with the underlying stuff.\n* *Query:* BaseEntityManager includes uniform approach in `filter()` and\n `exclude()` to query \"real\" and EAV attributes.\n* Customizable *schemata for attributes*.\n* *Admin:* all dynamic attributes can be represented and modified in the Django\n admin with no or little effort (using `eav.admin.BaseEntityAdmin`). Schemata\n can be edited separately, as ordinary Django model objects.\n* *Facets:* facet search is an important feature of online shops, catalogues,\n etc. Basically you will need a form representing a certain subset of model\n attributes with appropriate widgets and choices so that the user can choose\n desirable values of some properties, submit the form and get a list of\n matching items. In general case django-filter would do, but it won't work\n with EAV, so EAV-Django provides a complete set of tools for that.\n\nExamples\n--------\n\nLet's define an EAV-friendly model, create an EAV attribute and see how it\nbehaves. By \"EAV attributes\" I mean those stored in the database as separate\nobjects but accessed and searched in such a way as if they were columns in the\nentity's table:\n\n.. code-block:: python\n\n from django.db import models\n from eav.models import BaseEntity, BaseSchema, BaseAttribute\n\n class Fruit(BaseEntity):\n title = models.CharField(max_length=50)\n\n class Schema(BaseSchema):\n pass\n\n class Attr(BaseAttribute):\n schema = models.ForeignKey(Schema, related_name='attrs')\n\n # in Python shell:\n\n # define attribute named \"colour\"\n >>> colour = Schema.objects.create(\n ... title = 'Colour',\n ... name = 'colour', # omit to populate/slugify from title\n ... datatype = Schema.TYPE_TEXT\n ... )\n\n # create an entity\n >>> e = Fruit.objects.create(title='Apple', colour='green')\n\n # define \"real\" and EAV attributes the same way\n >>> e.title\n 'Apple'\n >>> e.colour\n 'green'\n\n >>> e.save() # deals with EAV attributes automatically\n\n # list EAV attributes as Attr instances\n >>> e.attrs.all()\n []\n\n # search by an EAV attribute as if it was an ordinary field\n >>> Fruit.objects.filter(colour='yellow')\n []\n\n # all compound lookups are supported\n >>> Fruit.objects.filter(colour__contains='yell')\n []\n\nNote that we can access, modify and query `colour` as if it was a true Entity\nfield, but at the same time its name, type and even existance are completely\ndefined by a Schema instance. A Schema object can be understood as a class, and\nrelated Attr objects are its instances. In other words, Schema objects are like\nCharField, IntegerField and such, only defined on data level, not hard-coded in\nPython. And they can be \"instantiated\" for any Entity (unless you put custom\nconstraints which are outside of EAV-Django's area of responsibility).\n\nThe names of attributes are defined in related schemata. This can lead to fears\nthat once a name is changed, the code is going to break. Actually this is not\nthe case as names are only directly used for manual lookups. In all other cases\nthe lookups are constructed without hard-coded names, and the EAV objects are\ninterlinked by primary keys, not by names. The names are present if forms, but\nthe forms are generated depending on current state of metadata, so you can safely\nrename the schemata. What you *can* break from the admin interface is the types.\nIf you change the data type of a schema, all its attributes will remain the same\nbut will use another column to store their values. When you restore the data type,\npreviously stored values are visible again.\n\nYou can find more examples in the source code: see directory \"example/\" and the\ntests.\n\nData types\n----------\n\nMetadata-driven structure extends flexibility but implies some trade-offs. One\nof them is increased number of JOINs (and, therefore, slower queries). Another\nis fewer data types. Theoretically, we can support all data types available for\na storage, but in practice it would mean creating many columns per attribute\nwith just a few being used -- exactly what we were trying to avoid by using EAV.\nThis is why EAV-Django only supports some basic types (though you can extend\nthis list if needed):\n\n* Schema.TYPE_TEXT, a TextField;\n* Schema.TYPE_FLOAT, a FloatField;\n* Schema.TYPE_DATE, a DateField;\n* Schema.TYPE_BOOL, a NullBooleanField;\n* Schema.TYPE_MANY for multiple choices (i.e. lists of values).\n\nAll EAV attributes are stored as records in a table with unique combinations of\nreferences to entities and schemata. (Entity is referenced through the\ncontenttypes framework, schema is referenced via foreign key.) In other words,\nthere can be only one attribute with given entity *and* schema. The schema is a\ndefinition of attribute. The schema defines name, title, data type and a number\nof other properties which apply to any attribute of this schema. When we access\nor search EAV attributes, the EAV machinery always uses schemata as attributes\nmetadata. Why? Because the attribute's name is stored in related schema, and\nthe value is stored in *a* column of the attributes table. We don't know which\ncolumn it is until we look at metadata.\n\nIn the example provided above we've only played with a text attribute. All other\ntypes behave exactly the same except for TYPE_MANY. The many-to-many is a\nspecial case as it involves an extra model for choices. EAV-Django provides an\nabstract model but requires you to define a concrete model (e.g. Choice), and\npoint to it from the attribute model (i.e. put foreign key named \"choice\"). The\nChoice model will also have to point at Schema. Check the tests for an example.\n\nDocumentation\n-------------\n\nCurrently there is no tutorial. Still, the code itself is rather\nwell-documented and the whole logic is pretty straightforward. \n\nPlease see:\n\n* tests_, as they contain good examples of model definitions and queries;\n* the bundled example (\"grocery shop\", comes with fixtures);\n* the `discussion group`_.\n\n.. _discussion group: https://groups.google.com/forum/#!forum/eav-django\n.. _tests: https://eav-django.readthedocs.org/en/latest/reference.html#tests\n\nDependencies\n------------\n\nIn theory, Python 2.5 to 2.7 is supported; however, the library is only tested\nagainst **Python 2.6 and 2.7**.\n\nYou'll also need **Django 1.1 or newer** and a couple of small libraries:\ndjango_autoslug and django_view_shortcuts. This is usually handled\nautomatically by the installer.\n\nAlternatives, Forks\n-------------------\n\ndjango-eav_\n A fork of eav-django that became a new app. Doesn't seem to be actively\n developed but is probably better in certain aspects. The original author\n of eav-django encourages users to give this app a try, too.\n\n.. _django-eav: http://mvpdev.github.com/django-eav/\n\nAuthor\n------\n\nThis application was initially created by\n`Andrey Mikhaylenko `_. For complete list of contributors\nconsult the AUTHORS file.\n\nPlease feel free to file issues and/or submit patches.\n\nLicensing\n---------\n\nEAV-Django is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Lesser General Public License as\npublished by the Free Software Foundation; either version 3 of the\nLicense, or (at your option) any later version.\n\nEAV-Django is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\nLesser General Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public\nLicense along with this program; see the file COPYING.LESSER. If not,\nsee `GNU licenses `_.", "description_content_type": null, "docs_url": null, "download_url": "http://bitbucket.org/neithere/eav-django/get/tip.zip", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://bitbucket.org/neithere/eav-django/", "keywords": "django eav flexible data model object entity attribute value", "license": "GNU Lesser General Public License (LGPL), Version 3", "maintainer": null, "maintainer_email": null, "name": "eav-django", "package_url": "https://pypi.org/project/eav-django/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/eav-django/", "project_urls": { "Download": "http://bitbucket.org/neithere/eav-django/get/tip.zip", "Homepage": "http://bitbucket.org/neithere/eav-django/" }, "release_url": "https://pypi.org/project/eav-django/1.4.7/", "requires_dist": null, "requires_python": null, "summary": "a reusable Django application which implements the Entity-Attribute-Value data model.", "version": "1.4.7" }, "last_serial": 1247304, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "d0a4d63b44e3be7278ed66c8a2906b72", "sha256": "2c964b596fb4e8220f0e88a8d513f33746386d7a7e4c780e43543a024e179eeb" }, "downloads": -1, "filename": "eav-django-1.0.0.tar.gz", "has_sig": false, "md5_digest": "d0a4d63b44e3be7278ed66c8a2906b72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16621, "upload_time": "2010-02-02T07:32:40", "url": "https://files.pythonhosted.org/packages/92/34/a3ab7b60c57c972049db3f16f0bbe81dd2d1ff04a3fa69bf03656689392a/eav-django-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "ce709df77107c1a1691a423c97b6f755", "sha256": "3b6b1c22e51e2a661c245d3e5a0fe5821196fedbcb7c62469c4e52d9dd0b0b87" }, "downloads": -1, "filename": "eav-django-1.0.1.tar.gz", "has_sig": false, "md5_digest": "ce709df77107c1a1691a423c97b6f755", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18907, "upload_time": "2010-03-04T19:23:20", "url": "https://files.pythonhosted.org/packages/75/32/1c63389fe767379f15f0d3fcea4b0820e0ea1eb68dd191a2206e20ef8e84/eav-django-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "4d40c531358d5c8482645fd2d3b4c752", "sha256": "97edaa2abe5bef57800e76318a4a16a5befdc149486f1632223ec6c0c14516a2" }, "downloads": -1, "filename": "eav-django-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4d40c531358d5c8482645fd2d3b4c752", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16673, "upload_time": "2010-03-04T19:42:28", "url": "https://files.pythonhosted.org/packages/12/6a/105f81c1c1207ba66b46f65e0c35637c67f0670a93058995c84854162313/eav-django-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "c317a67855074f63231879f06e4ad9ad", "sha256": "c7e23fdb8a26edd0cd11f9d024795ef7b36c3e98565fd4ba754aa2d370d9e654" }, "downloads": -1, "filename": "eav-django-1.0.3.tar.gz", "has_sig": false, "md5_digest": "c317a67855074f63231879f06e4ad9ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16710, "upload_time": "2010-03-25T01:05:20", "url": "https://files.pythonhosted.org/packages/aa/8f/2d1c013d16f333b252e0feeca6b53612fc27d539f5a3735ecf86e3b2210f/eav-django-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "b9baf1492e776d885e374dd4dd522578", "sha256": "5cd0edcbe6a6d03532575727d341a198de625adf4ff94a32611bbfc311d78e09" }, "downloads": -1, "filename": "eav-django-1.1.0.tar.gz", "has_sig": false, "md5_digest": "b9baf1492e776d885e374dd4dd522578", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18198, "upload_time": "2010-04-21T14:02:13", "url": "https://files.pythonhosted.org/packages/68/c3/3bd5aede27af3f03e96aeb6d14f3ba989bbb7836c8630a66bca663b49f48/eav-django-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "c832c26ad900b29a9e9ab7dde67a7ac4", "sha256": "ccf210247c7cfcc8bc3fe7843cde84c4078a75a37ac457d847f19a3aadae9426" }, "downloads": -1, "filename": "eav-django-1.2.0.tar.gz", "has_sig": false, "md5_digest": "c832c26ad900b29a9e9ab7dde67a7ac4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18621, "upload_time": "2010-04-25T15:04:52", "url": "https://files.pythonhosted.org/packages/06/52/1769546fb682ccd7e7eaa016bff70241927d9d182964d72f5f16dd6d8cac/eav-django-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "40b6e327aede5322df1eeb8bd870e497", "sha256": "eddefb6f0f1c6148cd1fbae4ff44ed0240bf67735ea28df05d6db15d579eff63" }, "downloads": -1, "filename": "eav-django-1.2.1.tar.gz", "has_sig": false, "md5_digest": "40b6e327aede5322df1eeb8bd870e497", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18629, "upload_time": "2010-04-27T12:13:35", "url": "https://files.pythonhosted.org/packages/2c/83/e9ef542f3abc400aebd228f5f39e6173bcbb536209bfdbb84b276db1ffef/eav-django-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "394785b723c04e9c1e7c2ba565923017", "sha256": "198f26a8b735e570fc2c2cda3a0c88e9cf9a1e7f3b6b7d8932089c9952829292" }, "downloads": -1, "filename": "eav-django-1.2.2.tar.gz", "has_sig": false, "md5_digest": "394785b723c04e9c1e7c2ba565923017", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18647, "upload_time": "2010-04-27T12:30:07", "url": "https://files.pythonhosted.org/packages/9f/b7/052560199b024f013aebd862bc0baa2131aed36e929cdb96c555d178dba1/eav-django-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "5c450b6798796d851f5169c5d4ffdfef", "sha256": "e3f36e1fa9c94cf85d4cd83cb0059d5fec76753fe78ed104328d4e6a47a9b65d" }, "downloads": -1, "filename": "eav-django-1.2.3.tar.gz", "has_sig": false, "md5_digest": "5c450b6798796d851f5169c5d4ffdfef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18681, "upload_time": "2010-04-28T12:26:15", "url": "https://files.pythonhosted.org/packages/2e/46/f6cac0c9bf2d69e72cc68c7beb7247b320748e669b252c6002a733b454af/eav-django-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "8af3f3fa09bc1ec7a2790af509aa2e80", "sha256": "d770c27fe14cb2d0fab1d9cc0c787da82dc22c51ac0f20f5ae62be961930c63f" }, "downloads": -1, "filename": "eav-django-1.2.4.tar.gz", "has_sig": false, "md5_digest": "8af3f3fa09bc1ec7a2790af509aa2e80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18700, "upload_time": "2010-04-29T20:58:32", "url": "https://files.pythonhosted.org/packages/cd/3e/e294f66ec8c849e994bfd1e3545d92ad4033ef4b2726c51eb6227a245966/eav-django-1.2.4.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "f8f5d547b7a76dc39d8ef243f83cd576", "sha256": "8c7f9afdebe543169a02b3403570c658f244e17807b644c94e289f6e123c2c75" }, "downloads": -1, "filename": "eav-django-1.3.0.tar.gz", "has_sig": false, "md5_digest": "f8f5d547b7a76dc39d8ef243f83cd576", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19226, "upload_time": "2010-05-15T11:47:50", "url": "https://files.pythonhosted.org/packages/ff/9a/fd8e997b458ed3a922b49016b604cafc20e575a0d936dd0e128425578114/eav-django-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "79e1c6fe4f237fa107cc612ef4d0bb02", "sha256": "e4a3fc330cb1fa7e03194a72428dad2ebf27dfcac138b4890c2be8fa3e0d9c9d" }, "downloads": -1, "filename": "eav-django-1.3.1.tar.gz", "has_sig": false, "md5_digest": "79e1c6fe4f237fa107cc612ef4d0bb02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19219, "upload_time": "2010-05-16T00:16:59", "url": "https://files.pythonhosted.org/packages/98/07/68dc4f1a4c673e210912d3242e7f750d3a7db57f512177b13bd673aefd64/eav-django-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "e7762592dc2931a1863bb3c4f5b730bc", "sha256": "5635ceacf524279e93ce1480d783db76622a62a05c7f6589ee095946a483e5ce" }, "downloads": -1, "filename": "eav-django-1.3.2.tar.gz", "has_sig": false, "md5_digest": "e7762592dc2931a1863bb3c4f5b730bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19271, "upload_time": "2010-05-31T13:19:14", "url": "https://files.pythonhosted.org/packages/ce/1f/ae86ff68c4a7e3db0ca24a35b3c991829ac74371d45ae5e5cf326bd3f36e/eav-django-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "20375ea18146e9ce13865daad9790ad0", "sha256": "d6197fb09dd788ae0fcfa289c77729540dc0020cef4ce05dcc43cfac7ab0f0cc" }, "downloads": -1, "filename": "eav-django-1.3.3.tar.gz", "has_sig": false, "md5_digest": "20375ea18146e9ce13865daad9790ad0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19271, "upload_time": "2010-09-16T19:08:00", "url": "https://files.pythonhosted.org/packages/15/ed/79451dfac4215ebd08e0f5a0d603910cb0c8f11be3e0f1079505e490d98d/eav-django-1.3.3.tar.gz" } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "df957f0c322b0308e9d4c19645aae808", "sha256": "693aec0e9ec5700e1b11e6e4bc8e4ebad528926375f5a5817b543f35666ee6e8" }, "downloads": -1, "filename": "eav-django-1.3.4.tar.gz", "has_sig": false, "md5_digest": "df957f0c322b0308e9d4c19645aae808", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19348, "upload_time": "2010-11-27T10:45:55", "url": "https://files.pythonhosted.org/packages/13/a5/08edbc060cc9862e5d58b9a632a7765d046406a7f2c811f4a80ef29859ba/eav-django-1.3.4.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "17e20f37d9c6527f5987d0250ebd8a94", "sha256": "2d103f91997a6d212179d1095c1f4696fa8e3b049e62a23884778528a7677aa9" }, "downloads": -1, "filename": "eav-django-1.4.0.tar.gz", "has_sig": false, "md5_digest": "17e20f37d9c6527f5987d0250ebd8a94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19537, "upload_time": "2011-11-25T01:51:03", "url": "https://files.pythonhosted.org/packages/cc/3a/f359680283c9dcc1101e7f944766d32dffeb6133daeef04fe07aee5c1b07/eav-django-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "6af87bccf21fd65a2ff0cdf1ba80048a", "sha256": "96b2acdac3bd26ea86827677e148faf76a1502f6d0532cffc3d8d66e43ddbdba" }, "downloads": -1, "filename": "eav-django-1.4.1.tar.gz", "has_sig": false, "md5_digest": "6af87bccf21fd65a2ff0cdf1ba80048a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23522, "upload_time": "2011-12-08T16:01:39", "url": "https://files.pythonhosted.org/packages/a9/13/706e1a6c793971c6500b351228094bf6512ce99b4047986b93fc1cb4528e/eav-django-1.4.1.tar.gz" } ], "1.4.2": [], "1.4.3": [ { "comment_text": "", "digests": { "md5": "7022eb8587daab04bf08c91403e37a3c", "sha256": "94f9d2979f3030eb3f279f348b8dd42489b2525f3dd19f3b964937a6229df9d3" }, "downloads": -1, "filename": "eav-django-1.4.3.tar.gz", "has_sig": false, "md5_digest": "7022eb8587daab04bf08c91403e37a3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24254, "upload_time": "2012-05-27T17:46:45", "url": "https://files.pythonhosted.org/packages/77/be/d7b32052dacc2c191271990208530d6b0597ae429e6a95bf061812991a4d/eav-django-1.4.3.tar.gz" } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "7f858db13c4f63b8bbfced643dd5220a", "sha256": "a2dcb1115c555f4381efb3f3c6dec51fe6ab0096afd5014b640f87897f2a581e" }, "downloads": -1, "filename": "eav-django-1.4.4.tar.gz", "has_sig": false, "md5_digest": "7f858db13c4f63b8bbfced643dd5220a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24301, "upload_time": "2012-05-31T17:48:44", "url": "https://files.pythonhosted.org/packages/e4/85/2440058ad848abd806b2c7887404ee11eff143f0f1a18d18b0c0f54c741e/eav-django-1.4.4.tar.gz" } ], "1.4.5": [ { "comment_text": "", "digests": { "md5": "376873faa5dea0ec55c2d7132a384b4e", "sha256": "d5dfec0a67919b2bb2e21c73c553f28036dd36a553257ed7e5973f6028e33837" }, "downloads": -1, "filename": "eav-django-1.4.5.tar.gz", "has_sig": false, "md5_digest": "376873faa5dea0ec55c2d7132a384b4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24413, "upload_time": "2014-03-13T19:47:04", "url": "https://files.pythonhosted.org/packages/d4/4c/025dc388309ceb52e2c82eee485f06acab827fdedc3035b50bd6d16333e9/eav-django-1.4.5.tar.gz" } ], "1.4.6": [ { "comment_text": "", "digests": { "md5": "5a86460675c2ee594b514fbcf43fcb69", "sha256": "98151ac6f6feb867d742dd6bc69094140a5f6e839c02f5e168818162ac1f84a1" }, "downloads": -1, "filename": "eav-django-1.4.6.tar.gz", "has_sig": false, "md5_digest": "5a86460675c2ee594b514fbcf43fcb69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27863, "upload_time": "2014-07-30T17:04:55", "url": "https://files.pythonhosted.org/packages/fd/28/8d3c4306366524197d0469157b798b7f058a6793654d1e741d282e2a9701/eav-django-1.4.6.tar.gz" } ], "1.4.7": [ { "comment_text": "", "digests": { "md5": "2bd572bbb7336038e8f48c49aac16e02", "sha256": "ce44aa604817ed471a60cc40ab1cedf241a978b5f69913f80a69aed77d07cc7b" }, "downloads": -1, "filename": "eav-django-1.4.7.tar.gz", "has_sig": false, "md5_digest": "2bd572bbb7336038e8f48c49aac16e02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27867, "upload_time": "2014-10-03T21:30:44", "url": "https://files.pythonhosted.org/packages/4b/ba/36d2a2f26f5dd9765d82b08852fc532c93aab1fb8f2fbb869940258b6f0c/eav-django-1.4.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2bd572bbb7336038e8f48c49aac16e02", "sha256": "ce44aa604817ed471a60cc40ab1cedf241a978b5f69913f80a69aed77d07cc7b" }, "downloads": -1, "filename": "eav-django-1.4.7.tar.gz", "has_sig": false, "md5_digest": "2bd572bbb7336038e8f48c49aac16e02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27867, "upload_time": "2014-10-03T21:30:44", "url": "https://files.pythonhosted.org/packages/4b/ba/36d2a2f26f5dd9765d82b08852fc532c93aab1fb8f2fbb869940258b6f0c/eav-django-1.4.7.tar.gz" } ] }