{ "info": { "author": "Thomas Petillon", "author_email": "petillon@topic.fr", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: Public Domain", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development", "Topic :: Utilities" ], "description": "django_dynproxy\r\n===============\r\n\r\nDynamic proxy models for Django\r\n\r\nWith django_dynproxy, you can dynamically modify a Django proxy model by :\r\n* hiding one or many fields (from the concrete parent model)\r\n* making mandatory one or many fields (who are not mandatory in the concrete parent model)\r\n\r\nThis can be useful when you want to use inheritance in your code, but not in your database\r\n\r\nWARNING : THIS IS AN ALPHA RELEASE. NOT RECOMMENDED FOR PRODUCTION USE\r\n\r\nRequirements :\r\n--------------\r\n\r\ndjango>=1.4.3\r\n\r\nInstallation :\r\n--------------\r\n\r\npip install django_dynproxy\r\n\r\nUsage :\r\n---------\r\n\r\n1) Create a concrete model\r\n\r\n2) Create a Django proxy model deriving from the concrete model\r\n\r\n3) Define a metaclass using dynproxy_metaclass_factory and specify :\r\n- which base fields you want to exclude from your proxy model\r\n- which non-mandatory base fields you want to be mandatory your proxy model\r\n\r\n4) Add the __metaclass__ to your proxy model class\r\n\r\n\r\nSample :\r\n---------\r\n\r\nfrom dynproxy.utils import dynproxy_metaclass_factory\r\n\r\nTRAVELER_TYPE_PILOT = '1'\r\nTRAVELER_TYPE_PASSENGER = '2'\r\n\r\nTRAVELER_TYPES = (\r\n (TRAVELER_TYPE_PILOT,_(u\"Pilot\")),\r\n (TRAVELER_TYPE_PASSENGER,_(u\"Passenger\"))\r\n)\r\n\r\nclass Traveler(models.Model):\r\n first_name = models.CharField(max_length=200)\r\n last_name = models.CharField(max_length=200)\r\n type = models.CharField(max_length=200,choices=TRAVELER_TYPES)\r\n passport_number = models.CharField(max_length=200,blank=True)\r\n trigram = models.CharField(max_length=200,blank=True)\r\n pilot_category = models.ForeignKey(PilotCategory,null=True,blank=True)\r\n\r\n\r\n def __unicode__(self):\r\n return \"%s %s\" % (self.first_name,self.last_name)\r\n\r\ndef traveler_manager_factory(traveler_type):\r\n class _TravelerManager(Manager):\r\n def get_query_set(self):\r\n return super(_TravelerManager,self).get_query_set().filter(type=traveler_type)\r\n return _TravelerManager\r\n\r\nPilotManager = traveler_manager_factory(TRAVELER_TYPE_PILOT)\r\nPassengerManager = traveler_manager_factory(TRAVELER_TYPE_PASSENGER)\r\n\r\n\r\nPilotMetaclass = dynproxy_metaclass_factory(\r\n mandatory_fields=['trigram','pilot_category'],\r\n fields_to_exclude=['passport_number']\r\n )\r\n\r\nPassengerMetaclass = dynproxy_metaclass_factory(\r\n mandatory_fields = ['passport_number'],\r\n fields_to_exclude =['trigram','pilot_category']\r\n )\r\n\r\n\r\nclass Pilot(Traveler):\r\n __metaclass__ = PilotMetaclass\r\n objects = PilotManager()\r\n class Meta:\r\n proxy = True\r\n\r\nclass Passenger(Traveler):\r\n __metaclass__ = PassengerMetaclass\r\n objects = PassengerManager()\r\n class Meta:\r\n proxy = True\r\n", "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/tomjerry/django_dynproxy", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "django_dynproxy", "package_url": "https://pypi.org/project/django_dynproxy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django_dynproxy/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/tomjerry/django_dynproxy" }, "release_url": "https://pypi.org/project/django_dynproxy/0.2.0/", "requires_dist": null, "requires_python": null, "summary": "Dynamic proxy models for Django", "version": "0.2.0" }, "last_serial": 791090, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "69167504a17d8e79f715ff51e39b2fd7", "sha256": "a8b3162e27450a2b8d59860651d62d14b6cab7c357ea465948e11b776fd74a4f" }, "downloads": -1, "filename": "django_dynproxy-0.1.0.zip", "has_sig": false, "md5_digest": "69167504a17d8e79f715ff51e39b2fd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2108, "upload_time": "2012-10-17T11:01:13", "url": "https://files.pythonhosted.org/packages/71/c3/78ee8f1aaa4cc593ba5d1ec1a5b4326f7c109fb01827b400bfa599d78c4e/django_dynproxy-0.1.0.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "dfc47c920480918afd89bc98a9566281", "sha256": "3cce91547b0a83d0c59be9cc23cace578099715bfcc1956d981f73604a19cf8a" }, "downloads": -1, "filename": "django_dynproxy-0.1.1.zip", "has_sig": false, "md5_digest": "dfc47c920480918afd89bc98a9566281", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1906, "upload_time": "2012-10-17T14:03:46", "url": "https://files.pythonhosted.org/packages/c4/0d/e4142ccfecbc2425f09ef5a002082f4a0261fb0f1e69293c21d61fa8d33c/django_dynproxy-0.1.1.zip" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9f5a6f512f2c1f73a58a448b3e7cb636", "sha256": "388d1e304c8c02355dab7bed2767cdf2da054cce94557de98f8eacb7c2fef1fe" }, "downloads": -1, "filename": "django_dynproxy-0.1.2.zip", "has_sig": false, "md5_digest": "9f5a6f512f2c1f73a58a448b3e7cb636", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2040, "upload_time": "2013-01-21T10:26:26", "url": "https://files.pythonhosted.org/packages/fe/8f/41413a259d8fd7bcfe580fa7437ffd6f924644cefdda9b54040331c4215f/django_dynproxy-0.1.2.zip" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "e3e77d41174027ea65d0da9b97abfcda", "sha256": "8ea35371699fa68ebf5440cc943a9a161e4bad402be50d3c318fb8a9205a1002" }, "downloads": -1, "filename": "django_dynproxy-0.1.3.zip", "has_sig": false, "md5_digest": "e3e77d41174027ea65d0da9b97abfcda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2041, "upload_time": "2013-01-21T10:28:44", "url": "https://files.pythonhosted.org/packages/7a/a2/6fdb0c1b729a967841d0d6728b348f6ba1a86ea02ae49ada5564095d0b5f/django_dynproxy-0.1.3.zip" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "7140236c83258c3b0e6f01a158b75d9d", "sha256": "8befa4ee7db7af0daa7c637067551fc1571de88c52e5e8533e640cfd1278864e" }, "downloads": -1, "filename": "django_dynproxy-0.1.4.zip", "has_sig": false, "md5_digest": "7140236c83258c3b0e6f01a158b75d9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2037, "upload_time": "2013-01-21T10:31:24", "url": "https://files.pythonhosted.org/packages/0f/b9/af61c11798fc59b8616d03e024226a09a31fe708dae04cd65969be53631f/django_dynproxy-0.1.4.zip" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "2cf0cc3c7612a9fd956170b5c7d1d3a7", "sha256": "5da8e7c4c06ce4de0c1211ee8056d2bb9f1fe70349029d3614896fd1a1d27446" }, "downloads": -1, "filename": "django_dynproxy-0.1.5.zip", "has_sig": false, "md5_digest": "2cf0cc3c7612a9fd956170b5c7d1d3a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2041, "upload_time": "2013-01-21T10:33:27", "url": "https://files.pythonhosted.org/packages/6a/b8/79caaf8e86b76056f0dd11b1446641e93b746a888eb6da8d653147ca009d/django_dynproxy-0.1.5.zip" } ], "0.1.6": [], "0.1.9": [ { "comment_text": "", "digests": { "md5": "00fbbcb801645f6bda460487a293aebc", "sha256": "1d97ed136eaea6c863b7893abf59a046b6286410d5dd5a24649ee254b6287068" }, "downloads": -1, "filename": "django_dynproxy-0.1.9.zip", "has_sig": false, "md5_digest": "00fbbcb801645f6bda460487a293aebc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3318, "upload_time": "2013-01-21T10:42:53", "url": "https://files.pythonhosted.org/packages/29/8b/37e7750ba17f06913d7a3af0504b57c8cd38f4fd6398ae2f8c30084670f6/django_dynproxy-0.1.9.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "111a137b0b5e16cc1ce9ba80f5ad9cbe", "sha256": "90057e280074c71eb4004248b68a2e60250715ad4ba143b1c3265a99eb0bdf5c" }, "downloads": -1, "filename": "django_dynproxy-0.2.0.zip", "has_sig": false, "md5_digest": "111a137b0b5e16cc1ce9ba80f5ad9cbe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3317, "upload_time": "2013-01-21T10:49:11", "url": "https://files.pythonhosted.org/packages/7b/10/b28e8f9f5e4b82b9462c52eeead8c1158ac355eddf67c4a2f3d772d703b4/django_dynproxy-0.2.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "111a137b0b5e16cc1ce9ba80f5ad9cbe", "sha256": "90057e280074c71eb4004248b68a2e60250715ad4ba143b1c3265a99eb0bdf5c" }, "downloads": -1, "filename": "django_dynproxy-0.2.0.zip", "has_sig": false, "md5_digest": "111a137b0b5e16cc1ce9ba80f5ad9cbe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3317, "upload_time": "2013-01-21T10:49:11", "url": "https://files.pythonhosted.org/packages/7b/10/b28e8f9f5e4b82b9462c52eeead8c1158ac355eddf67c4a2f3d772d703b4/django_dynproxy-0.2.0.zip" } ] }