{ "info": { "author": "night-crawler", "author_email": "lilo.panic@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5" ], "description": "Installation\n------------\n.. code:: bash\n\n pip install -e git+https://github.com/night-crawler/drf-metadata.git@#egg=drf-metadata\n\nModels\n------\n\n.. code:: python\n\n class Author(models.Model):\n name = models.CharField(max_length=255)\n birth = models.DateField('birth date')\n\n def __str__(self):\n return self.name\n\n\n class Publisher(models.Model):\n name = models.CharField(max_length=255)\n state = models.PositiveSmallIntegerField(\n 'publisher state',\n choices=(\n (0, 'Active'),\n (1, 'Disabled')\n ),\n default=1\n )\n\n def __str__(self):\n return self.name\n\n\n class Book(models.Model):\n title = models.CharField(max_length=255)\n authors = models.ManyToManyField(Author)\n publisher = models.ForeignKey(Publisher)\n\nUsage\n-----\n\n.. code:: python\n\n from drf_metadata.meta import MetaData, AbstractField, CustomMetadata\n\n class BookMetadata(MetaData):\n model = Book\n\n serializers = {\n 'publisher': PublisherSerializer\n }\n\n update_fields = {\n 'authors': {\n 'omg': {'lol': 1}\n }\n }\n\n # skip serialization (don't include model instances to choice field)\n dataset_urls = {\n 'authors': '/author/',\n 'publisher': '/publisher/',\n }\n\n # custom queryset for instance (self has `obj` if you need to filter qs)\n def get_authors_queryset(self, field):\n return Author.objects.filter(name='author0')\n\n # use custom serializer for field instance(s)\n def get_authors_serializer(self, field):\n # self.request, self.view, self.obj are available in MetaData instance\n return AuthorSerializer\n\n # update field bundle with runtime values\n def update_authors_field_meta(field, obj):\n return {'new': 1, 'obj': str(obj)}\n\n # use own serializer\n def get_publisher_field_meta(field, obj):\n return {'new': 1, 'obj': str(obj)}\n\n\nUsage with django-rest-framework\n--------------------------------\n\n.. code:: python\n\n # or redefine OPTIONS handler\n class BookViewSet(viewsets.ReadOnlyModelViewSet):\n @list_route()\n def describe_book(self, request):\n md = metadata.BookMetadata().determine_metadata(request, self)\n return Response(md)\n\nSample response\n---------------\n\n.. code:: json\n\n {\n \"title\": \"book\", \"description\": \"description\",\n \"fields\": [\n {\n \"type\": \"CharField\", \"max_length\": 255,\n \"name\": \"title\",\n \"verbose_name\": \"title\",\n \"help_text\": \"\", \"blank\": false, \"null\": false, \"editable\": true, \"required\": true},\n {\n \"type\": \"ForeignKey\",\n \"name\": \"publisher\", \"verbose_name\": \"publisher\", \"help_text\": \"\",\n \"blank\": false, \"null\": false, \"editable\": true, \"required\": true,\n \"data\": [\n {\"id\": 47, \"name\": \"pub0\"},\n {\"id\": 48, \"name\": \"pub1\"},\n {\"id\": 49, \"name\": \"pub2\"}\n ]\n },\n {\n \"type\": \"ManyToManyField\",\n \"name\": \"authors\", \"verbose_name\": \"authors\", \"help_text\": \"\",\n \"blank\": false, \"null\": false, \"editable\": true, \"required\": true,\n \"data\": [\n {\"id\": 37, \"name\": \"author0\"},\n {\"id\": 38, \"name\": \"author1\"},\n {\"id\": 39, \"name\": \"author2\"}\n ]\n }\n ]\n }\n\nNon-model MetaData\n------------------\n\n.. code:: python\n\n class ImpersonateMetadata(CustomMetadata):\n title = 'View site as another user'\n action_name = 'Impersonate'\n\n fields = (\n AbstractField(type='ForeignKey',\n name='user_id',\n verbose_name='User',\n data='/data/',\n required=True),\n )\n\n # method fields\n def get_superfield(self, request):\n return {\n 'name': 'hero',\n 'super': True\n }\n\n def get_lol(self, request):\n return {\n 'name': 'lol',\n 'super': False\n }\n\n # update field `user_id`\n def get_field_user_id(self, field_name, request):\n return {\n 'lol': 1\n }\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/night-crawler/drf-metadata", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "drf-metadata", "package_url": "https://pypi.org/project/drf-metadata/", "platform": "", "project_url": "https://pypi.org/project/drf-metadata/", "project_urls": { "Homepage": "https://github.com/night-crawler/drf-metadata" }, "release_url": "https://pypi.org/project/drf-metadata/0.1.12/", "requires_dist": null, "requires_python": "", "summary": "Metadata generator for Django Rest Framework", "version": "0.1.12" }, "last_serial": 3450031, "releases": { "0.1.11": [ { "comment_text": "", "digests": { "md5": "323ee08dae72f4c5abe3368db6c06355", "sha256": "b44452ce8219e7b65f6624b39bcc3ca87cb7ca5ce508499239c4427693183cd8" }, "downloads": -1, "filename": "drf_metadata-0.1.11-py3-none-any.whl", "has_sig": false, "md5_digest": "323ee08dae72f4c5abe3368db6c06355", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 13780, "upload_time": "2017-12-29T09:58:07", "url": "https://files.pythonhosted.org/packages/87/38/1d4232cbac60fc84b2b55a7d529d18f5ad6f90699bb13acb8b48bfd919c8/drf_metadata-0.1.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2cdfe86a11d284ccc1df741c5c2d3e1f", "sha256": "dd314f9fc6487111e01c04257267e6c541ae0edf0e708b04aa9cd0f91ad0b923" }, "downloads": -1, "filename": "drf-metadata-0.1.11.tar.gz", "has_sig": false, "md5_digest": "2cdfe86a11d284ccc1df741c5c2d3e1f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9411, "upload_time": "2017-12-29T09:58:05", "url": "https://files.pythonhosted.org/packages/14/a8/2d43dabd35926e1e346db748cc2facb9a150ce9782d65c31add20fef5cd8/drf-metadata-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "c4f51da7b4830144ae7eae56f51ba529", "sha256": "c3146350e73f69046406a8049b4eb984e384a74eab6be04920a5042b29e57da3" }, "downloads": -1, "filename": "drf_metadata-0.1.12-py3-none-any.whl", "has_sig": false, "md5_digest": "c4f51da7b4830144ae7eae56f51ba529", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 14382, "upload_time": "2017-12-29T14:05:30", "url": "https://files.pythonhosted.org/packages/d6/52/67b560912a97cb2c3cc9585d559771233fc408833fad4d3054582a994a39/drf_metadata-0.1.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7f4b9ac8e22057b8ab61c5991723031", "sha256": "dfcd4b0760972be360c012fb7fccd900026be0c752f87ba2a326d1164e62b7e9" }, "downloads": -1, "filename": "drf-metadata-0.1.12.tar.gz", "has_sig": false, "md5_digest": "d7f4b9ac8e22057b8ab61c5991723031", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10034, "upload_time": "2017-12-29T14:05:28", "url": "https://files.pythonhosted.org/packages/16/b8/0fe7d0046fd9e6c10715ed9cdb55778fc705bd448d5820312b78cbf1c512/drf-metadata-0.1.12.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c4f51da7b4830144ae7eae56f51ba529", "sha256": "c3146350e73f69046406a8049b4eb984e384a74eab6be04920a5042b29e57da3" }, "downloads": -1, "filename": "drf_metadata-0.1.12-py3-none-any.whl", "has_sig": false, "md5_digest": "c4f51da7b4830144ae7eae56f51ba529", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 14382, "upload_time": "2017-12-29T14:05:30", "url": "https://files.pythonhosted.org/packages/d6/52/67b560912a97cb2c3cc9585d559771233fc408833fad4d3054582a994a39/drf_metadata-0.1.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7f4b9ac8e22057b8ab61c5991723031", "sha256": "dfcd4b0760972be360c012fb7fccd900026be0c752f87ba2a326d1164e62b7e9" }, "downloads": -1, "filename": "drf-metadata-0.1.12.tar.gz", "has_sig": false, "md5_digest": "d7f4b9ac8e22057b8ab61c5991723031", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10034, "upload_time": "2017-12-29T14:05:28", "url": "https://files.pythonhosted.org/packages/16/b8/0fe7d0046fd9e6c10715ed9cdb55778fc705bd448d5820312b78cbf1c512/drf-metadata-0.1.12.tar.gz" } ] }