{ "info": { "author": "Timothy Allen", "author_email": "tallen@wharton.upenn.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "# Automagic REST\n\nAutomagic REST automatically builds a full Django app as a Django REST Framework read-only environment for a set of tables in a PostgreSQL database.\n\nThis is very much in heavy development, being extracted from a production system and genericized for open source release.\n\n## Installation\n\nTo get started, `pip install automagic-rest` and add `automagic_rest` to your `INSTALLED_APPS` setting in Django.\n\n## Configuration and Customization\n\nSetting up a secondary database in Django is recommended. For the following examples, we'll set up one called `my_pg_data` with the user `my_pg_user`:\n\n```python\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': 'pg_web_db',\n 'USER': 'web_user',\n 'PASSWORD': '',\n 'HOST': 'pg-web.domain.com',\n },\n 'my_pg_data': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': 'pg_data_db',\n 'USER': 'my_pg_user',\n 'PASSWORD': '',\n 'HOST': 'pg-data.domain.com',\n },\n}\n```\n\nBy default, Automagic REST will create a directory called `data_path` at the root of your Django project, where `manage.py` lives. The follow options can be passed to the command:\n\n* `--database` (default: `my_pg_data`): the name of the Django database as defined in the `DATABASES` setting.\n* `--owner` (default: `my_pg_user`): the name of the PostgreSQL user which owns the schemata to be processed. This will normally be the same as the `USER` in the `DATABASES` setting for the database above.\n* `--path` (default: `data_path`): the path to write the models and serializers to. This path will be completely deleted and rewritten whenever the command is run, so be careful!\n\nExample: `python manage.py build_data_models --database=my_data --owner=my_user --path=my_data_path`\n\nMethods are provided which can be overridden to customize the endpoint with your own Django management command.\n\n### class automagic_rest.management.commands.build_data_models.Command\n\n`get_db` (default: `my_pg_data`): the name of the PostgreSQL database in Django's settings that we will introspect to build the API.\n\n`get_owner` (default: `my_pg_user`): the name of the PostgreSQL user that owns the schemata we will introspect.\n\n`get_allowed_schemata` (default: `None`): if set, returns a list of schemata in the database to be built. If `None`, selects all schemata for the specific user.\n\n`get_root_python_path` (default: `data_path`): a Python path where you would like to write the models, serializers, and routes. **IMPORTANT**: this path will be wiped and re-written every time the build command is run. It should be a dedicated directory with nothing else in it.\n\n`get_view` (default: `automagic_rest.views.GenericViewSet`): the view to use.\n\n`get_router` (default: `rest_framework.routers.DefaultRouter`): the router to use.\n\n`get_max_digits_default` (default: 100): the number of `max_digits` to provide for `NUMERIC` field types that are not explicitly set in PostgreSQL.\n\n`get_decimal_places_default` (default: 25): the number of `decimal_places` to provide for `NUMERIC` field types that are not explicitly set in PostgreSQL.\n\n`sanitize_sql_identifier`: this method takes a string, and sanitizes it for injections into SQL, allowing only alphanumerics and underscores.\n\n`metadata_sql`: this method returns the SQL used to pull the metadata from PostgreSQL to build the endpoints.\n\nTo customize the build command, here is an example:\n\n```python\n# my_app/home/management/commands/my_build_data_models.py\nfrom automagic_rest.management.commands import build_data_models\n\n\nclass Command(build_data_models.Command):\n \"\"\"\n My specific overrides for DRF PG Builder command.\n \"\"\"\n\n def get_db(self, options):\n \"\"\"\n Returns our customized Django DB name.\n \"\"\"\n return \"my_data\"\n\n def get_owner(self, options):\n \"\"\"\n Returns our customized schema owner.\n \"\"\"\n return \"my_user\"\n\n def get_root_python_path(self, options):\n \"\"\"\n Returns our customized build path.\n \"\"\"\n return \"my_data_path\"\n\n def get_view(self):\n \"\"\"\n Returns our customized view path.\n \"\"\"\n return \"my_app.views.MyDataViewSet\"\n\n def get_allowed_schemata(self, options, cursor):\n \"\"\"\n Return a list of allowed schemata we want to create RESTful\n endpoints for. If None, will create endpoints for all schemata\n owner the the schema owner user.\n \"\"\"\n allowed_schemata = ['my_data', 'public_data']\n\n return allowed_schemata\n```\n\n### class views.GenericViewSet\n\nThe view has several methods and attributes which can be overridden as well.\n\n#### Attributes\n\n`index_sql`: this attribute defines SQL to return the first column in each index for the current table for the Model. These will be used to dynamically make all indexed fields searchable and filterable.\n\n#### Methods\n\n`get_serializer_class_name` (default: `rest_framework.serializers.ModelSerializer`): the full path of the serializer class to use.\n\n`get_permission` (default: `None`): returns a permission class to use for the endpoint. When left at the default of `None`, uses the default permission class set by Django REST Framework.\n\n`get_estimate_count_limit` (default: `999_999`): to prevent long-running `SELECT COUNT(*)` queries, the view estimates the number of rows in the table by examing the query plan. If greater than this number, it will estimate pagination counts for vastly improved speed.\n\nTo follow on the example above, here is an example of an overridden view, which sets the permission type and includes a mixin for naming Excel file downloads:\n\n```python\nfrom rest_framework.permissions import IsAuthenticated\nfrom drf_renderer_xlsx.mixins import XLSXFileMixin\n\nclass MyGenericViewSet(XLSXFileMixin, GenericViewSet):\n \"\"\"\n \"\"\"\n \"\"\"\n Override the defaults from DRF PG Builder.\n \"\"\"\n filename = 'my_export.xlsx'\n\n def get_permission(self):\n return IsAuthenticated\n```\n\n### After the Files Are Built\n\nAfter running the build command, you should have a directory created that you defined as `path` (or overrode with `get_root_python_path()`) that contains models, serializers, and a `urls.py` file. Include the `urls.py` file with a route from your Django project, and you should be able to visit the Django REST Framework browsable API.\n\n## Release Notes\n\n### 0.2.2\n\n* Ensure defaults for field type `NUMERIC` populate.\n\n### 0.2.1\n\n* Pull the reserved word list from Python dynamically.\n\n### 0.2.0\n\n* Refactored to use a generic serializer created on the fly. This is potentially a breaking change if you overrode the `get_serializer` method of the `build_data_models` command.\n * This has been replaced by a view method called `get_serializer_class_name`.\n * The serializer is now built on-the-fly rather than by the code generator.\n\n### 0.1.2\n\n* Add support for `DecimalField` with `max_digits` and `decimal_places` from `information_schema.columns` fields.\n\n### 0.1.1\n\n* Switched to naming models and serializers with a combination of `schema_name` and `table_name` to avoid model naming conflicts in Django if the same table exists across multiple schemata.\n\n### 0.1.0\n\n* Initial release.\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/wharton/automagic-rest", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "automagic-rest", "package_url": "https://pypi.org/project/automagic-rest/", "platform": "", "project_url": "https://pypi.org/project/automagic-rest/", "project_urls": { "Homepage": "https://github.com/wharton/automagic-rest" }, "release_url": "https://pypi.org/project/automagic-rest/0.2.3/", "requires_dist": [ "djangorestframework (>=3.7.7)", "djangorestframework-filters (==1.0.0.dev0)" ], "requires_python": "", "summary": "Automagic REST: Django REST Framework PostgreSQL Builder", "version": "0.2.3" }, "last_serial": 5857544, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e3aaeb18a6c50ec704ea3f7c52ac988e", "sha256": "f2d18fb018cd8d6d96f645e61b49856e11c9285b2caa7dbbbb66ee104fbd2e8a" }, "downloads": -1, "filename": "automagic_rest-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e3aaeb18a6c50ec704ea3f7c52ac988e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12363, "upload_time": "2019-04-09T20:08:34", "url": "https://files.pythonhosted.org/packages/a7/ab/359fd1b260d4791ee0d6c138ce8e801e28d8725bf3dafa13ebbdb79119cb/automagic_rest-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "104caca3120efffa9b52a5ea621eddc2", "sha256": "ef3bcd083c740d1dc44e244bf2b37c90348950ba5d4806593fa3fc2b709505d7" }, "downloads": -1, "filename": "automagic-rest-0.1.0.tar.gz", "has_sig": false, "md5_digest": "104caca3120efffa9b52a5ea621eddc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10377, "upload_time": "2019-04-09T20:08:36", "url": "https://files.pythonhosted.org/packages/28/04/ea7347b7e6cf2765e2e0ba57493c9cb0e80de519ba1a54f1986879092853/automagic-rest-0.1.0.tar.gz" } ], "0.1.0.dev0": [ { "comment_text": "", "digests": { "md5": "7b00d897d5831ef3660d16c8fa210e62", "sha256": "c204564ae1e3fdc2a2425be8f08c031e561a88dce8e1bb9d7e9ff8782216bc45" }, "downloads": -1, "filename": "automagic_rest-0.1.0.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "7b00d897d5831ef3660d16c8fa210e62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4889, "upload_time": "2019-04-08T14:16:01", "url": "https://files.pythonhosted.org/packages/81/54/cd1b27d08c2a15cb5307df8885e81074edc718c0ce61d4797eac6ee9aa04/automagic_rest-0.1.0.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d1ea7ccc852b87ac2fd230984663fc49", "sha256": "ab519c04a1191fdaa9baa8bd583a0ef7f868d213d6354617a19fc65f9e1f2668" }, "downloads": -1, "filename": "automagic-rest-0.1.0.dev0.tar.gz", "has_sig": false, "md5_digest": "d1ea7ccc852b87ac2fd230984663fc49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3646, "upload_time": "2019-04-08T14:16:03", "url": "https://files.pythonhosted.org/packages/fe/dd/0ecee9314957666e451b0db85934658c9c851bbc1df62e6e0ac95e424a6d/automagic-rest-0.1.0.dev0.tar.gz" } ], "0.1.0.dev1": [ { "comment_text": "", "digests": { "md5": "c44b85159f6487a4dd791b08106adb9d", "sha256": "3d3958b8fcd344be31da23dcab3b848948b2392de2bf3ca5f95e3f74d9750470" }, "downloads": -1, "filename": "automagic_rest-0.1.0.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "c44b85159f6487a4dd791b08106adb9d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8896, "upload_time": "2019-04-08T14:22:57", "url": "https://files.pythonhosted.org/packages/c1/bb/505b5f73d97e799e784468f75245b4bd7480ff69a0c1875632b2576243b4/automagic_rest-0.1.0.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab86e262dc2f61b51de17d389e4cd2fc", "sha256": "6e384d400ecbfb2c45b66d5261c42566892ebe6b52af7c19d65983312cd44d1d" }, "downloads": -1, "filename": "automagic-rest-0.1.0.dev1.tar.gz", "has_sig": false, "md5_digest": "ab86e262dc2f61b51de17d389e4cd2fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7021, "upload_time": "2019-04-08T14:22:58", "url": "https://files.pythonhosted.org/packages/c6/6c/181eeb6089dd4b9473334c1e8f487cbe6fa428a2b1c462f017e9f72db907/automagic-rest-0.1.0.dev1.tar.gz" } ], "0.1.0.dev2": [ { "comment_text": "", "digests": { "md5": "65f1ac56c8e88a0171e59498043b3f78", "sha256": "13aea0b0d6ded743b90bb61ff7b8bb57851a94426c1c7859fda46779dc153c2c" }, "downloads": -1, "filename": "automagic_rest-0.1.0.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "65f1ac56c8e88a0171e59498043b3f78", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10049, "upload_time": "2019-04-08T20:33:57", "url": "https://files.pythonhosted.org/packages/9f/47/76845d031e8494608e6bdf80d5a633155fe9c30120970083477e5b32d2e8/automagic_rest-0.1.0.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c590cd8dddd915c1943a61315257ed2", "sha256": "564864b341f6333b7fad64eb2bfebe08b904d4c1777d7041f1be92d659650f1b" }, "downloads": -1, "filename": "automagic-rest-0.1.0.dev2.tar.gz", "has_sig": false, "md5_digest": "6c590cd8dddd915c1943a61315257ed2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9170, "upload_time": "2019-04-08T20:33:58", "url": "https://files.pythonhosted.org/packages/8b/fb/266d0bd3f447ff36f99d62563a74532654bea57adc28068cc9902c809d88/automagic-rest-0.1.0.dev2.tar.gz" } ], "0.1.0.dev3": [ { "comment_text": "", "digests": { "md5": "294a745716f5670a8acbe1b9304d2f56", "sha256": "fb1b6ed9dcb1f206c71328477881a1b33e8129770744a1fd024dc2300d6917c4" }, "downloads": -1, "filename": "automagic_rest-0.1.0.dev3-py3-none-any.whl", "has_sig": false, "md5_digest": "294a745716f5670a8acbe1b9304d2f56", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12335, "upload_time": "2019-04-09T19:30:59", "url": "https://files.pythonhosted.org/packages/9c/3a/d023ab1c5c8f48e897c69a4dfdca1e0bd5faa19bb9db3302fe4b8cd1f276/automagic_rest-0.1.0.dev3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4ae34b6c38493108726b03f53f6114e", "sha256": "4cb10e4449773c145bebe3e8eac57e5ae4e5921cacc2b82df0b588c54cbac593" }, "downloads": -1, "filename": "automagic-rest-0.1.0.dev3.tar.gz", "has_sig": false, "md5_digest": "a4ae34b6c38493108726b03f53f6114e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10281, "upload_time": "2019-04-09T19:31:00", "url": "https://files.pythonhosted.org/packages/30/c1/8bcb2185415662cc804cf8fb2be8f9b72bae73964db10aeb47dd67cd6be0/automagic-rest-0.1.0.dev3.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ece0c72b0fe540b1196910f583aab161", "sha256": "5d573c492c4074209611e8600e17f02fb8538f5bdbe81c6ad58c6874f9b14105" }, "downloads": -1, "filename": "automagic_rest-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ece0c72b0fe540b1196910f583aab161", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12317, "upload_time": "2019-04-15T17:17:43", "url": "https://files.pythonhosted.org/packages/9a/30/ed4cc54262ebdb469907751b4f078cd7cc2cdc366e83d9b242b5bde84809/automagic_rest-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff1541ac4af996de2ea7b27cfceec5f3", "sha256": "3d6887b09a33117c8dea7cbec72af9738e222d83cc631207064d1f90e484a077" }, "downloads": -1, "filename": "automagic-rest-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ff1541ac4af996de2ea7b27cfceec5f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10333, "upload_time": "2019-04-15T17:17:44", "url": "https://files.pythonhosted.org/packages/72/c5/cc35c601c1300e0cc85e7d62b582414e91f1feb3a21dd09d01917ac9472e/automagic-rest-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "055337f282e7a28e3818f6745eff1810", "sha256": "a04b1f5b4e8fed9b19b44fafc5f2160111b897da98c7aa94458e3c41ee1c6dc5" }, "downloads": -1, "filename": "automagic_rest-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "055337f282e7a28e3818f6745eff1810", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12599, "upload_time": "2019-04-17T18:31:43", "url": "https://files.pythonhosted.org/packages/e7/d0/21f17be7d2281250da9da371f85e372a42971d7be73ddfb23fd397d0f997/automagic_rest-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e5d56202c61578b831fe5b7879930e0c", "sha256": "c92cd20e2baa5061a55cddc283d3e97ab0e4c2e1ed2395bc37494a0a6db76526" }, "downloads": -1, "filename": "automagic-rest-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e5d56202c61578b831fe5b7879930e0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10619, "upload_time": "2019-04-17T18:31:44", "url": "https://files.pythonhosted.org/packages/c2/e9/d8c33542fdef55c133fefc0d6fb90cc3fe65bc9492469409f59f0c23ecb6/automagic-rest-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8c232accbb62c5dc3f278316470aece3", "sha256": "10da665823a108a617ee502e14f8ef883639ca6c7625bbed2bd7be037bd44d70" }, "downloads": -1, "filename": "automagic_rest-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8c232accbb62c5dc3f278316470aece3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12824, "upload_time": "2019-04-30T18:20:52", "url": "https://files.pythonhosted.org/packages/9a/9d/0c566c196ca01d56a0b5eff40c773b7e80e5781135a79f38e45d802f21fb/automagic_rest-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17748f96997509bd2cbccae3b5fe11a4", "sha256": "fa2c8735dbac8cccb66d13f1bf82f3ce43c304c29b32fc362dc2c8a421f13a7d" }, "downloads": -1, "filename": "automagic-rest-0.2.0.tar.gz", "has_sig": false, "md5_digest": "17748f96997509bd2cbccae3b5fe11a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10661, "upload_time": "2019-04-30T18:20:56", "url": "https://files.pythonhosted.org/packages/fd/44/018ada4cac9bc5f81ae1b6561525eee6925e815967b345a1bccc2296d057/automagic-rest-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "99866ae4d1899d88e252e0d1be20454a", "sha256": "c13c4260f9db4f63b6d53f0da39b6218c5033ed64c5fe0ea6c16e2f172f20bfe" }, "downloads": -1, "filename": "automagic_rest-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "99866ae4d1899d88e252e0d1be20454a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12784, "upload_time": "2019-05-15T18:12:41", "url": "https://files.pythonhosted.org/packages/99/49/a7fd1fb10c9cec25ae58733a71f0e421f192b4ee0a2e598ac53a402b0e83/automagic_rest-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2252dfd61224177e072cb7a19d23898f", "sha256": "b088d5c8f76431752bfe77b5750637b2135a134f994bdfcbbbe48ed838b17593" }, "downloads": -1, "filename": "automagic-rest-0.2.1.tar.gz", "has_sig": false, "md5_digest": "2252dfd61224177e072cb7a19d23898f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10608, "upload_time": "2019-05-15T18:12:42", "url": "https://files.pythonhosted.org/packages/b6/de/600882311823070157fb8de17a791ec8f4b1e495218e75f76d1ccdf604be/automagic-rest-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "45a5a8e5fefa8a1a05e5d05f49f14007", "sha256": "661e3551bd1fe7c8947fc0db45071129596917ad1ed95807c3f6a9609cd84da8" }, "downloads": -1, "filename": "automagic_rest-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "45a5a8e5fefa8a1a05e5d05f49f14007", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12992, "upload_time": "2019-07-02T17:48:55", "url": "https://files.pythonhosted.org/packages/a1/63/f072d443fcd9689e864302d0f576e1e4ec1c99cb235bd66b5608090530b6/automagic_rest-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef3232972755b278d1f824b30117f1e1", "sha256": "724692887bb54b6431f1dc36c918a11d0535a0eada3de46c65901eff26b89bd6" }, "downloads": -1, "filename": "automagic-rest-0.2.2.tar.gz", "has_sig": false, "md5_digest": "ef3232972755b278d1f824b30117f1e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10841, "upload_time": "2019-07-02T17:48:56", "url": "https://files.pythonhosted.org/packages/99/bc/8f1939b1562ca4740d16c55e57bc45a212b4c078a36e9d692823fbaf2d8f/automagic-rest-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "1f5569d2518cdccdab0360631291df9e", "sha256": "f7c039654ff259271c9cd7863f210915780e9eb250af22ca029b703be0b4e7a8" }, "downloads": -1, "filename": "automagic_rest-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1f5569d2518cdccdab0360631291df9e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14005, "upload_time": "2019-09-19T16:30:10", "url": "https://files.pythonhosted.org/packages/99/a0/7240b596d010f03acc63de5eaf19ccf5b8f5ce34b07354d0d80f5f58e178/automagic_rest-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "719fad1e4bc5b6560024c2a54834f9d6", "sha256": "009a60d13d0e5e405afdfcec7324b871f74191fd4fdded5942d2506d5f84ac54" }, "downloads": -1, "filename": "automagic-rest-0.2.3.tar.gz", "has_sig": false, "md5_digest": "719fad1e4bc5b6560024c2a54834f9d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10858, "upload_time": "2019-09-19T16:30:12", "url": "https://files.pythonhosted.org/packages/fb/4d/dd3088baf89a9984666530f51679c2c33137169b020317477de4e0b55a72/automagic-rest-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1f5569d2518cdccdab0360631291df9e", "sha256": "f7c039654ff259271c9cd7863f210915780e9eb250af22ca029b703be0b4e7a8" }, "downloads": -1, "filename": "automagic_rest-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1f5569d2518cdccdab0360631291df9e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14005, "upload_time": "2019-09-19T16:30:10", "url": "https://files.pythonhosted.org/packages/99/a0/7240b596d010f03acc63de5eaf19ccf5b8f5ce34b07354d0d80f5f58e178/automagic_rest-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "719fad1e4bc5b6560024c2a54834f9d6", "sha256": "009a60d13d0e5e405afdfcec7324b871f74191fd4fdded5942d2506d5f84ac54" }, "downloads": -1, "filename": "automagic-rest-0.2.3.tar.gz", "has_sig": false, "md5_digest": "719fad1e4bc5b6560024c2a54834f9d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10858, "upload_time": "2019-09-19T16:30:12", "url": "https://files.pythonhosted.org/packages/fb/4d/dd3088baf89a9984666530f51679c2c33137169b020317477de4e0b55a72/automagic-rest-0.2.3.tar.gz" } ] }