{ "info": { "author": "Marko Ristin", "author_email": "marko@parquery.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5" ], "description": "Swagger-to\n==========\n\nSwagger-to generates server and client code from Swagger (OpenAPI 2.0) specification; written in Python 3.\n\nWe wanted a code generator that is 1) easy to write, maintain and extend and that 2) produces readable code.\n\nTo achieve this, we wrote the tool in Python which we found to be far superior for code generation compared with other\nlanguages such as Go and Java. Since the original Swagger specification can become quite complex, we introduce an\nintermediate representation layer after parsing the specification and before generating the code. This layer allowed us\nto substantially simplify the generation code since it reduced the impedance mismatch by operating on abstract\nconstructs (such as Maps) instead of directly referring to \"raw\" Swagger constructs (such as additional properties of\nan object).\n\nThe underlying language (Python), readable generated code and the intermediate representation layer are the three main\ndifferentiators to other similar code generation projects.\n\nSupported languages:\n\n==================== ====== ======\nLanguage Client Server\n==================== ====== ======\nElm x\nGo x\nPython x\nTypescript + Angular x\n==================== ====== ======\n\nMissing Features\n----------------\nDue to the lack of time, we can not cover all of the Swagger specification. The current generators work well for all of\nour simple and not-so-simple use cases. We believe they can also cover most of the other people's needs as well.\n\nHere is a non-comprehensive list:\n\n* **anonymous objects**. We do not support anonymous objects in the definitions. Please define all objects as top level\n definitions.\n\n* **parameters**. Go server and Python client support query, body, path and header parameters.\n Elm and Typescript + Angular clients support only query, body and path parameters.\n Cookie parameters are not supported.\n\n* **default values**. We do not support default values due to the impedance mismatch between JSON and the target languages.\n\n* **validation of responses**. Responses from the server are not validated due to the complexity and the run-time overhead.\n\nRelated Projects\n================\nWe list here some of the related projects and comment why they did not satisfy our requirements.\n\n* https://github.com/go-swagger/go-swagger produces code which looked a bit too clumsy for us.\n* https://github.com/swagger-api/swagger-codegen written in Java and hence hard for us to extend and customize.\n* https://grpc.io/ gRPC is great when remote procedure calls are all you need. However, it requires you to use HTTP 2,\n and we found it hard to integrate with widely-used browsers as clients.\n\n Additionally, streaming files was not directly supported (see https://github.com/grpc/grpc-go/issues/414).\n* https://github.com/grpc-ecosystem/grpc-gateway provides a JSON gateway to gRPC. We found that it added an additional\n layer of complexity (especially when the number of client/server pairs grow), and preferred to have a simple solution\n with a single code generation tool.\n* https://github.com/twitchtv/twirp a (better?) alternative if you only want to generate remote procedure calls based on\n JSON using protocol buffers to specify the API. It forces you to stick to its representation, though, and does not\n allow you to use an arbitrary Swagger specification. This is problematic when the interface is imposed on you from\n outside (*e.g.*, by customers).\n\nInstallation\n============\n\n* Create a virtual environment:\n\n.. code-block:: bash\n\n python3 -m venv venv3\n\n* Activate it:\n\n.. code-block:: bash\n\n source venv3/bin/activate\n\n* Install swagger_to with pip:\n\n.. code-block:: bash\n\n pip3 install swagger_to\n\nUsage\n=====\nTo generate code, you need to invoke one of the ``swagger_to_*.py`` scripts. If the generated code exists, you need to\nspecify ``--force`` command-line argument in order to overwrite the existing files.\n\nElm Client\n----------\nTo generate an Elm client from a Swagger specification at ``/some/path/swagger.yaml``, invoke:\n\n.. code-block:: bash\n\n swagger_to_elm_client.py \\\n --swagger_path /some/path/swagger.yaml \\\n --outdir /some/elm/path/src/your-client-directory\n\nThe generated code will have the following structure in ``/some/elm/path/src/your-client-directory``:\n\n=========================== ========================================================================================\nFile Description\n=========================== ========================================================================================\n``Client.elm`` Elm Client, containing Models, Encoders, Decoders and Http Requests.\n``elm-package.sample.json`` The Elm JSON Package containing the libraries used in Client.elm.\n=========================== ========================================================================================\n\nTwo non-standard libraries are used in the Client:\n\n* \"NoRedInk/elm-decode-pipeline\" is used to decode JSON objects in a more scalable way than the one supported by the\n elm-lang libraries; and\n* \"elm-community/json-extra\" is needed to encode Dict variables.\n\n\nWe use Elm's built-in Int type to represent both 32 and 64-bit integers. Please be careful: Elm depends on JavaScript\nwhich uses solely double-precision floats both for integers and for floating-point numbers, which can lead to\nunexpected truncation.\n\nGo Server\n---------\nTo generate a Go server from a Swagger specification at ``/some/path/swagger.yaml``, invoke:\n\n.. code-block:: bash\n\n swagger_to_go_server.py \\\n --swagger_path /some/path/swagger.yaml \\\n --outdir /some/go/path/src/your-server-package\n\nThe generated code will have the following structure in ``/some/go/path/src/your-server-package``:\n\n========================== ========================================================================================\nFile Description\n========================== ========================================================================================\n``types.go`` Go type definitions\n``jsonschemas.go`` JSON schemas used to validate the input (using https://github.com/xeipuuv/gojsonschema)\n``routes.go`` Router specification\n``handler.go`` Handler interface\n``handler_impl.sample.go`` Empty implementation of the handler\n========================== ========================================================================================\n\nAll the types defined in the Swagger are translated to ``types.go``. The routing and validation code around\nthe endpoints is generated in ``jsonschemas.go`` and ``routes.go``.\n\nThe handler interface is given in ``handler.go``. You need to implement the handler logic yourself. You can use\n``handler_impl.sample.go`` as a starting point. We usually just copy/paste it to ``handler_impl.go`` and ignore\n``handler_impl.sample.go`` in our repositories (*e.g.*, by adding it to ``.gitignore``).\n\nIn face of Swagger (*i.e.* API) changes, our workflow includes regenerating the code and using a diff tool\nlike ``meld`` to sync the \"old\" ``handler_impl.go`` with the new ``handler_impl.sample.go``.\n\nPecularities\n~~~~~~~~~~~~\n* **parameters**. We decided to generate the code to extract the parameters only from queries, bodies and paths.\n\n It seemed difficult to automatically generate the code to extract form data arguments which would cover all the edge\n cases (such as files and duplicate entries). We still generate the handler function, but leave it to the programmer\n to extract these arguments manually from the request.\n\n Due to lack of time, we did not implement header and cookie parameters. Contributions for these features are highly\n welcome!\n\n* **response**. The auto-generated code does not check that the response conforms to the specification. We found such\n checks to be unnecessarily constraining and almost impossible to implement for all the use cases.\n\n\nPython Client\n-------------\nTo generate a Python 3 client from a Swagger specification at ``/some/path/swagger.yaml``, invoke:\n\n.. code-block:: bash\n\n swagger_to_py_client.py \\\n --swagger_path /some/path/swagger.yaml \\\n --outpath /some/py/path/your_client_module.py\n\nThe generated client uses ``requests`` library.\n\nSince input checks need to be performed by the server anyhow, we decided not to keep the code generator simple and\nmore maintainable by including only the rudimentary type checks on the inputs. Hence all the sophisticated checks\nsuch as string patterns or casting of a Python integer to int32 are deliberately excluded. Analogously, we also\ndo not validate the output coming from the server.\n\nIf time ever permits, we would like to include both more fine-grained input and output validation. At the moment,\nwe did not confront any problems in the development process.\n\n\nTypescript+Angular Client\n-------------------------\nTo generate a Python client from a Swagger specification at ``/some/path/swagger.yaml``, invoke:\n\n.. code-block:: bash\n\n swagger_to_ts_angular5_client.py \\\n --swagger_path /some/path/swagger.yaml \\\n --outpath /some/typescript/path/your_client.ts\n\nThe generated client uses Angular ``http`` library. For the same reasons as for Python client, no checks are performed\nneither on the input nor on the output.\n\nWe use Typescript's built-in number type to represent both 32 and 64-bit integers. Please be careful: Typescript\ndepends on JavaScript which uses solely double-precision floats both for integers and for floating-point numbers,\nwhich can lead to unexpected truncation.\n\n\nStyle Check\n-----------\nWe found it important to have a uniform documentation style across all the Swagger specifications in an organization.\nTo that end, swagger_to includes an utility to automatically check the style such as casing of the definition names,\nproperty names, descriptions and verb moods (present tense instead of imperative).To check the compliance of a Swagger\nspecification at ``/some/path/swagger.yaml`` to the Swagger style guides, invoke:\n\n.. code-block:: bash\n\n swagger_style.py \\\n --swagger_path /some/path/swagger.yaml\n\n\nThe following checks are performed:\n\n* The Swagger name is in camel case, its description capitalized, and the base path starts with a slash.\n* Top level type definitions are in capitalized camel case, and properties are in snake case.\n* Endpoint paths, operation_id and parameter names are in camel case.\n* All descriptions:\n * start with a present tense verb, whose first letter is lower case;\n * have no leading or trailing whitespaces, tabs or new lines;\n * contain either one line, or three or more, in which case the second is empty;\n * end with a period.\n* Endpoint paths start with a slash, and the responses contain \"200\" and \"default\".\n\nThe script call returns 0 in case of no violations found, 1 in case of failed checks or 2 in case of illegal usage.\n\nExamples\n========\n\nYou can find the following examples useful for development:\n\n* Swagger API: https://github.com/Parquery/swagger-to/blob/master/tests/cases/go_server/general/swagger.yaml\n\n* Go Server generated code: https://github.com/Parquery/swagger-to/tree/master/tests/cases/go_server/general\n\n* Py Client generated code: https://github.com/Parquery/swagger-to/blob/master/tests/cases/py_client/general/client.py\n\n* Elm client generated code: https://github.com/Parquery/swagger-to/blob/master/tests/cases/elm_client/general/Client.elm\n\n\nDevelopment\n===========\n\n* Check out the repository.\n\n* In the repository root, create the virtual environment:\n\n.. code-block:: bash\n\n python3 -m venv venv3\n\n* Activate the virtual environment:\n\n.. code-block:: bash\n\n source venv3/bin/activate\n\n* Install the development dependencies:\n\n.. code-block:: bash\n\n pip3 install -e .[dev]\n\n* Run `precommit.py` to execute pre-commit checks locally.\n\nVersioning\n==========\nWe follow `Semantic Versioning `_. The version X.Y.Z indicates:\n\n* X is the major version (backward-incompatible),\n* Y is the minor version (backward-compatible), and\n* Z is the patch version (backward-compatible bug fix).", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Parquery/swagger-to", "keywords": "swagger code generation python elm go typescript server client angular", "license": "License :: OSI Approved :: MIT License", "maintainer": "", "maintainer_email": "", "name": "swagger-to", "package_url": "https://pypi.org/project/swagger-to/", "platform": "", "project_url": "https://pypi.org/project/swagger-to/", "project_urls": { "Homepage": "https://github.com/Parquery/swagger-to" }, "release_url": "https://pypi.org/project/swagger-to/3.1.2/", "requires_dist": null, "requires_python": "", "summary": "Generate server and client code from Swagger (OpenAPI 2.0) specification", "version": "3.1.2" }, "last_serial": 5698170, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "2e767512cbce1eec77a8175181ffbe27", "sha256": "b6533532f444075b9c0519fd783711f10315d2231bf7ffd88765c43b34b11f4b" }, "downloads": -1, "filename": "swagger_to-1.0.0.tar.gz", "has_sig": false, "md5_digest": "2e767512cbce1eec77a8175181ffbe27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29086, "upload_time": "2018-04-30T06:51:35", "url": "https://files.pythonhosted.org/packages/cd/95/c5b3b10b9c4598ca6c146df92491a0faa4e9df85485df3eadd6e99cacab2/swagger_to-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "221a121011ad7a241aea02916caffc7f", "sha256": "edfb862d234327005cc2817468099aa81c81b14ed20ad481c133172cd810ec5c" }, "downloads": -1, "filename": "swagger_to-1.0.1.tar.gz", "has_sig": false, "md5_digest": "221a121011ad7a241aea02916caffc7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29360, "upload_time": "2018-04-30T06:55:19", "url": "https://files.pythonhosted.org/packages/8e/3e/172e7acd3b42476f289da1e3674c11fa7ca85306b8bd25629789214fca18/swagger_to-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "1b82ad3d3985ec80422677e1f15bc580", "sha256": "de4efb62728b8e94e46242289ce67a42cbfa569183f34c299085ff4db08c2431" }, "downloads": -1, "filename": "swagger_to-1.0.2.tar.gz", "has_sig": false, "md5_digest": "1b82ad3d3985ec80422677e1f15bc580", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30224, "upload_time": "2018-05-03T07:39:21", "url": "https://files.pythonhosted.org/packages/18/83/a3cf6ed3880583c06e606c187101cbf8957dafad8c8114c3f8972d6fca99/swagger_to-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "fa7e5322000425238df6b4441c44580a", "sha256": "14a692d516f320bfe795cab212bb66a0062c48cad8197c08a53813f87e865a79" }, "downloads": -1, "filename": "swagger_to-1.1.0.tar.gz", "has_sig": false, "md5_digest": "fa7e5322000425238df6b4441c44580a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32051, "upload_time": "2018-06-07T06:18:07", "url": "https://files.pythonhosted.org/packages/05/54/03fcd019018dd62848e9eeeaf8d96965ad6d9a0c617b2c1f9c3672d74131/swagger_to-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "1cdc4e36b86029beab4d4594a781fbf0", "sha256": "5f4a6c1e0074c8efa64456f80f6a555823e76bed7723eada9748a068c6b7538e" }, "downloads": -1, "filename": "swagger_to-1.1.1.tar.gz", "has_sig": false, "md5_digest": "1cdc4e36b86029beab4d4594a781fbf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32276, "upload_time": "2018-06-07T06:34:12", "url": "https://files.pythonhosted.org/packages/19/ee/ca94b129e72c245e9820f32a9b15342d735b5ade0fdb82923391bee39d35/swagger_to-1.1.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "f800ee37496ce91f6cc42d1d7d2523cd", "sha256": "7a330c76a241b5d57115cacbb6942a13c7b0d72cb8f8917e9cc99778e5029e15" }, "downloads": -1, "filename": "swagger_to-2.0.0.tar.gz", "has_sig": false, "md5_digest": "f800ee37496ce91f6cc42d1d7d2523cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38766, "upload_time": "2018-06-11T05:27:26", "url": "https://files.pythonhosted.org/packages/3c/7d/e322dddf2eee1d66c254da9628f5d3d587e0551e2dd62d87f55030ef078b/swagger_to-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "1e74c5998acf87885aee45ef55c3ab43", "sha256": "485a74b98b83d4f8acedcf4f380ff463ff1ffca9d7ca23e90d54f65e3fa43b71" }, "downloads": -1, "filename": "swagger_to-2.0.1.tar.gz", "has_sig": false, "md5_digest": "1e74c5998acf87885aee45ef55c3ab43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39219, "upload_time": "2018-07-25T22:27:40", "url": "https://files.pythonhosted.org/packages/22/f8/be51e89664a0977f304368ed8d3b2ae8a3e4d5a83c6cc2dfc22d8ad18cb5/swagger_to-2.0.1.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "29477a181794adc2d6274feb28c1b5c3", "sha256": "21de86a3d008060e0961aac7c46a86cc241ef655cade1272ed033d0014ff5f80" }, "downloads": -1, "filename": "swagger_to-2.1.0.tar.gz", "has_sig": false, "md5_digest": "29477a181794adc2d6274feb28c1b5c3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 41026, "upload_time": "2018-08-13T13:32:30", "url": "https://files.pythonhosted.org/packages/6c/80/3ac72731428d1e9ffcd6e2aad02ee01da67c0246501ba79c739ffa8b9303/swagger_to-2.1.0.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "d46a4566b2a64477a27bc7d838602afa", "sha256": "51f06731ceec2e85e4795d44af771cc58cd946d88b5d95fc8976f405e5f3a654" }, "downloads": -1, "filename": "swagger_to-2.2.0.tar.gz", "has_sig": false, "md5_digest": "d46a4566b2a64477a27bc7d838602afa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42327, "upload_time": "2018-08-27T14:05:44", "url": "https://files.pythonhosted.org/packages/03/6f/3c3da2a89f78dc92d15530c7e00e18f352a30c9817aef36749e46c5e42f5/swagger_to-2.2.0.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "86a012b0d0ac1c767c21b67af66137da", "sha256": "b0e93ff07e5590bfdc162a0931613b340464964b1c5a04c6fbab0d3972a01bb8" }, "downloads": -1, "filename": "swagger_to-2.2.1.tar.gz", "has_sig": false, "md5_digest": "86a012b0d0ac1c767c21b67af66137da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42395, "upload_time": "2018-10-15T13:28:55", "url": "https://files.pythonhosted.org/packages/4c/30/5e4d8d51ce3b31344ed4ff96d29747b14dc9974b5605c0da158e831fdc69/swagger_to-2.2.1.tar.gz" } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "9bb41f07663da499bc8fb53cae4d4beb", "sha256": "36affc3a0e3cb518a296caf521e91d58358960abd25e0708306c5e68b24e9732" }, "downloads": -1, "filename": "swagger_to-2.2.2.tar.gz", "has_sig": false, "md5_digest": "9bb41f07663da499bc8fb53cae4d4beb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42477, "upload_time": "2018-10-23T12:57:13", "url": "https://files.pythonhosted.org/packages/eb/1d/e6263f457a45c38c93f5dec66b2f295cbcd40101091ce80a512488271d3d/swagger_to-2.2.2.tar.gz" } ], "2.2.3": [ { "comment_text": "", "digests": { "md5": "73c2199ed8633d4d60404a15c7c7f22e", "sha256": "0ad91f5b01c837f3a3fbe3dbfd67c518825a6b0af3484215dbd8e2684ad83add" }, "downloads": -1, "filename": "swagger_to-2.2.3.tar.gz", "has_sig": false, "md5_digest": "73c2199ed8633d4d60404a15c7c7f22e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42488, "upload_time": "2018-10-26T08:52:53", "url": "https://files.pythonhosted.org/packages/33/65/d1e4778ce9619998431500d2d3621cd44d3e864280401bbc60dd67e1922a/swagger_to-2.2.3.tar.gz" } ], "2.2.4": [ { "comment_text": "", "digests": { "md5": "123f8e0273229e6caeda3e19cceb6dba", "sha256": "b267091b4a28ce9b109eaf6bb60e00fbb38f68b941a61c9d03bd3e14fd148eec" }, "downloads": -1, "filename": "swagger_to-2.2.4.tar.gz", "has_sig": false, "md5_digest": "123f8e0273229e6caeda3e19cceb6dba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42507, "upload_time": "2018-10-29T13:57:22", "url": "https://files.pythonhosted.org/packages/dd/ed/8309a87731d8baf7db0b5850c22ad1449af02330787316c20ebe51207c13/swagger_to-2.2.4.tar.gz" } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "45dae1df50300bd7afd31f304261947f", "sha256": "c389cfef20832092129d41583d2bfdd620f7b233804662d742ed8e70a858c6c4" }, "downloads": -1, "filename": "swagger_to-2.3.0.tar.gz", "has_sig": false, "md5_digest": "45dae1df50300bd7afd31f304261947f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44515, "upload_time": "2018-11-13T09:22:32", "url": "https://files.pythonhosted.org/packages/bf/49/dec3cf8b3adbae77afe2a1574fcd4b0d6b7de6e7f8c2b7492daf8230b19c/swagger_to-2.3.0.tar.gz" } ], "2.4.0": [ { "comment_text": "", "digests": { "md5": "d80792380a91cd140a93279f0de2416e", "sha256": "c16475398f5822779d7b09209d5cf1f7982f4a632cddb3bfaff79089ab2feceb" }, "downloads": -1, "filename": "swagger_to-2.4.0.tar.gz", "has_sig": false, "md5_digest": "d80792380a91cd140a93279f0de2416e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42833, "upload_time": "2018-11-16T15:18:18", "url": "https://files.pythonhosted.org/packages/b7/8b/339edf70e8dd7fd965d4e47cd2c9af83134600e0885142588aa329a1c29f/swagger_to-2.4.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "2d38a2feb5d4da5f298c6f7056f68bb7", "sha256": "efc34299de47911696b58f65d9f0825753e82ddceb9ff12255578faebeb0cab6" }, "downloads": -1, "filename": "swagger_to-3.0.0.tar.gz", "has_sig": false, "md5_digest": "2d38a2feb5d4da5f298c6f7056f68bb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49037, "upload_time": "2018-12-23T08:22:33", "url": "https://files.pythonhosted.org/packages/9c/cc/2e439a45a521ffc7128e4892b07870bb09ec4d4a71377bd5f8e2e2375d8b/swagger_to-3.0.0.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "dd0766d14ce025a7386ecf49cb209d38", "sha256": "28fd598c1ea71791f67948d76f8618a1e35ee4ba28698f7db4a38f8836b27ede" }, "downloads": -1, "filename": "swagger_to-3.0.1.tar.gz", "has_sig": false, "md5_digest": "dd0766d14ce025a7386ecf49cb209d38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49123, "upload_time": "2018-12-23T09:37:45", "url": "https://files.pythonhosted.org/packages/a6/46/ea4ae45a0db356910c797492856ecc79b1170aa30411e087a0403fa22bd5/swagger_to-3.0.1.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "99d5ec7e7786b5eaf7d0078f8f57a80f", "sha256": "b807d5c858081ade4840127b80b8fb3e9b09181241b7df385ea074a49acb470e" }, "downloads": -1, "filename": "swagger_to-3.1.0.tar.gz", "has_sig": false, "md5_digest": "99d5ec7e7786b5eaf7d0078f8f57a80f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50560, "upload_time": "2019-01-15T09:38:32", "url": "https://files.pythonhosted.org/packages/9a/fb/adc51a89c1d71ec4cab7009a6b3edf12471e39595d1e9c5c04da23443a73/swagger_to-3.1.0.tar.gz" } ], "3.1.1": [ { "comment_text": "", "digests": { "md5": "49f836078d4f73e2abf536890890b4b1", "sha256": "350c5f69c022a51687ab59ee7823e419575e440a785e13a156c03f550c16f8a3" }, "downloads": -1, "filename": "swagger_to-3.1.1.tar.gz", "has_sig": false, "md5_digest": "49f836078d4f73e2abf536890890b4b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50941, "upload_time": "2019-01-28T08:24:02", "url": "https://files.pythonhosted.org/packages/ed/f8/f2e46c7971d232aefe2a2b9c3d840031227ca7bd562073ab8060c14e146c/swagger_to-3.1.1.tar.gz" } ], "3.1.2": [ { "comment_text": "", "digests": { "md5": "bbb66c55e59fb0714f7cc360ea16d6f1", "sha256": "a199f782f8d055d51aa14a4f54c94bce1633b66fae995d62f1053b5df209ac93" }, "downloads": -1, "filename": "swagger_to-3.1.2.tar.gz", "has_sig": false, "md5_digest": "bbb66c55e59fb0714f7cc360ea16d6f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51286, "upload_time": "2019-08-19T12:51:15", "url": "https://files.pythonhosted.org/packages/ea/db/f82bdf2c0b411eada2cc3730eb497abe1b6b41c7ef9b837b2e2153fb8f18/swagger_to-3.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bbb66c55e59fb0714f7cc360ea16d6f1", "sha256": "a199f782f8d055d51aa14a4f54c94bce1633b66fae995d62f1053b5df209ac93" }, "downloads": -1, "filename": "swagger_to-3.1.2.tar.gz", "has_sig": false, "md5_digest": "bbb66c55e59fb0714f7cc360ea16d6f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51286, "upload_time": "2019-08-19T12:51:15", "url": "https://files.pythonhosted.org/packages/ea/db/f82bdf2c0b411eada2cc3730eb497abe1b6b41c7ef9b837b2e2153fb8f18/swagger_to-3.1.2.tar.gz" } ] }