{ "info": { "author": "Benjamin Sergeant", "author_email": "bsergean@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": "# General\n\n[![PyPI version](https://badge.fury.io/py/cobras.svg)](https://badge.fury.io/py/cobras)\n[![Build Status](https://travis-ci.org/machinezone/cobra.svg?branch=master)](https://travis-ci.org/machinezone/cobra)\n[![PyPI Python Versions](https://img.shields.io/pypi/pyversions/cobras.svg)](https://img.shields.io/pypi/pyversions/cobras)\n[![License](https://img.shields.io/pypi/l/cobras.svg)](https://img.shields.io/pypi/l/cobras)\n[![Wheel](https://img.shields.io/pypi/wheel/cobras.svg)](https://img.shields.io/pypi/wheel/cobras)\n[![codecov](https://codecov.io/gh/machinezone/cobra/branch/master/graph/badge.svg)](https://codecov.io/gh/machinezone/cobra)\n\nCobra is a realtime messaging server using Python3, WebSockets and Redis Streams. It was presented in great details during [RedisConf 2019](https://events.redislabs.com/redis-conf/redis-conf-2019/). Since then we've added history support which let cobra retain messages published to a channel that no-one is subscribed to. This makes it easier to blow up your systems through [OOMs](https://en.wikipedia.org/wiki/Out_of_memory) and fill your hard drives, but it makes cobra much more useful.\n\n* [slides](https://bsergean.github.io/redis_conf_2019/slides.html)\n* [youtube](https://www.youtube.com/watch?v=o8CC8qYfRQE&t=147s)\n\n[![Alt text](https://image.slidesharecdn.com/06benjaminsergeant-190507205253/95/real-time-health-analytics-with-websockets-python-3-and-redis-pubsub-benjamin-sergeant-1-638.jpg)](https://www.youtube.com/watch?v=o8CC8qYfRQE)\n\nCobra has been used in production receiving heavy traffic for about a year. Since it was written in Python it was named after a snake as an hommage to a great programming language.\n\nThere are 4 operations that a client can execute against a cobra server: *publish*, *subscribe*, *read* and *write*. *publish* and *subscribe* are the 2 operations core to a group-chat. *read* and *write* are the typical operations that key value stores (such as memcached), or a python dictionnary provide.\n\n* *publish*: send data to a channel, which will be broadcasted to anyone subscribed to that channel\n* *subscribe*: receive events sent to a channel in real time.\n* *write*: record some data (addressed by a key)\n* *read*: retrieve data\n\n# News\n\nCobra is actively being developed, check out the [changelog](CHANGELOG.md) to know what's cooking.\n\n# Installation\n\n## With pip\n\n```\npip install cobras\n```\n\n## With docker\n\n```\ndocker pull bsergean/cobra\n```\n\n## For development\n\n```\ngit clone \ncd cobra\npython3 -m venv venv\nsource venv/bin/activate\nmake dev\nmake test\n```\n\n# Usage\n\n## Cobra server and test clients\n\n```\n$ cobra\nUsage: cobra [OPTIONS] COMMAND [ARGS]...\n\n Cobra is a realtime messaging server using Python3, WebSockets and Redis\n PubSub.\n\nOptions:\n --version Show the version and exit.\n --help Show this message and exit.\n\nCommands:\n admin Run admin commands.\n health Health check\n init Setup cobra\n monitor Monitor cobra\n publish Publish to a channel\n run Run the cobra server\n redis_subscribe Subscribe to a channel (with redis)\n subscribe Subscribe to a channel\n secret Generate secrets used for authentication...\n```\n\nTo run the server use `cobra run`. You can run a health-check against the server with `cobra health`.\n\n```\ncobra health --url 'ws://jeanserge.com/v2?appkey=_health' --secret A5a3BdEfbc6Df5AAFFcadE7F9Dd7F17E --role health\n```\n\n## bavarde\n\n*bavarde* is a chat client that runs against the public cobra server. Bring up 2 terminals, runs the 2 commands below and start typing.\n\n```\n$ bavarde client\n...\n```\n\n```\n$ bavarde client --username bob\n...\n```\n\n\n# Setup\n\n`cobras init` needs to be run once to generate an app configuration file, in `~/.cobra.yaml`. That file contains all the roles, secrets and apps configured. Clients will use this data to authenticate.\n\nTo run in production you will need a redis (version > 5) instance. Here are environment variables that you will likely want to tweak, to connect to 2 redis instances (for scalabity), and to bind on 0.0.0.0 so that the internet can see your instance.\n\n```\n- name: COBRA_HOST\n value: 0.0.0.0\n- name: COBRA_REDIS_URLS\n value: redis://redis1;redis://redis2\n\n# config can be a path to a file\n- name: COBRA_APPS_CONFIG_PATH\n value: /path/to/your/cobra.yaml\n\n# config can be a blob of gziped + base64 data (if you do not want to mount volumes)\n# Generate it with:\n# `gzip -c ~/.cobra.yaml | base64`\n- name: COBRA_APPS_CONFIG_CONTENT\n value: BIGBLOGOFDATA\n```\n\n# Thank you\n\nThere would be no cobra without some other amazing open-source projects and tech. Here are 3 very remarkable ones.\n\n- [Python](https://www.python.org/) (and [asyncio](https://realpython.com/async-io-python/), one of the killer python3 feature !)\n- [Redis](https://redis.io/), the swiss army knife of the internet which provide a very scalable publish/subscribe feature to dispatch messages while retaining them and allowing lookups of old messages (see [Redis Streams] (https://redis.io/topics/streams-intro).\n- The python [websockets](https://websockets.readthedocs.io/en/stable/intro.html) library, very elegantly implementing the [WebSockets](https://tools.ietf.org/html/rfc6455) protocol using **asyncio**.\n- The python [aioredis](https://aioredis.readthedocs.io/en/v1.2.0/) library used to talk to Redis. This [redis labs](https://redislabs.com/blog/async-await-programming-basics-python-examples/) article explains some pitfalls with asyncio and how to get the best performance out of it.\n\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/machinezone/cobra", "keywords": "", "license": "BSD 3", "maintainer": "", "maintainer_email": "", "name": "cobras", "package_url": "https://pypi.org/project/cobras/", "platform": "", "project_url": "https://pypi.org/project/cobras/", "project_urls": { "Homepage": "https://github.com/machinezone/cobra" }, "release_url": "https://pypi.org/project/cobras/2.3.3/", "requires_dist": [ "aioredis (==1.3.0)", "click (>=7.0)", "coloredlogs (==10.0)", "hiredis (==1.0.0)", "humanfriendly (==4.18)", "psutil (==5.4.6)", "python-rapidjson (==0.8.0)", "PyYAML (==5.1.1)", "sentry-sdk (==0.13.0)", "tabulate (==0.8.5)", "uhashring (==1.1)", "websockets (==8.0.2)", "wheel ; extra == 'dev'", "isort ; extra == 'dev'", "mypy ; extra == 'dev'", "twine ; extra == 'dev'", "black ; extra == 'dev'", "pre-commit ; extra == 'dev'" ], "requires_python": "", "summary": "A realtime messaging server using WebSockets and Redis.", "version": "2.3.3" }, "last_serial": 6000646, "releases": { "0.0.191": [ { "comment_text": "", "digests": { "md5": "bf793f5241fd13a34fac98a1f1bc0776", "sha256": "8bc1a5c06d1004b2134ffe2b00243a5a17093b5433818857ec08892a2f14ea87" }, "downloads": -1, "filename": "cobras-0.0.191.tar.gz", "has_sig": false, "md5_digest": "bf793f5241fd13a34fac98a1f1bc0776", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26441, "upload_time": "2019-07-28T00:57:07", "url": "https://files.pythonhosted.org/packages/37/e8/30e24d08fcfd924311c3cc4c415ba41e588abaaaf1ef97e0f5ae5de1e1b5/cobras-0.0.191.tar.gz" } ], "0.0.192": [ { "comment_text": "", "digests": { "md5": "8321df5893fcde75569f9346e82d019f", "sha256": "1a496ce728276bc25eaf285be3ccd4f307b9c302b93721801ccadcee9f26c16c" }, "downloads": -1, "filename": "cobras-0.0.192.tar.gz", "has_sig": false, "md5_digest": "8321df5893fcde75569f9346e82d019f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26452, "upload_time": "2019-07-29T21:00:25", "url": "https://files.pythonhosted.org/packages/78/3b/84b350e982017428654aae76b0c8cb3b55e8e87bb0859a1a41bf5389e824/cobras-0.0.192.tar.gz" } ], "0.0.193": [ { "comment_text": "", "digests": { "md5": "625377be9a45f039106f9830354ecc59", "sha256": "87752c942aaa65737afe68aca230817f22da81cf0ef791fb5b6431075b2b9dad" }, "downloads": -1, "filename": "cobras-0.0.193.tar.gz", "has_sig": false, "md5_digest": "625377be9a45f039106f9830354ecc59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26447, "upload_time": "2019-07-29T21:05:31", "url": "https://files.pythonhosted.org/packages/90/6a/152a08f02b27c6e71604a5c3b4760285448da8cf3924a29deec2041e0bd8/cobras-0.0.193.tar.gz" } ], "0.0.194": [ { "comment_text": "", "digests": { "md5": "73bd5a878b1f72e7be3f7e8a478af5e5", "sha256": "d357f99f53ee6d7b0b6e6bc30344994cd2dd9894650efc050d41019f16388e46" }, "downloads": -1, "filename": "cobras-0.0.194.tar.gz", "has_sig": false, "md5_digest": "73bd5a878b1f72e7be3f7e8a478af5e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26475, "upload_time": "2019-07-29T21:19:21", "url": "https://files.pythonhosted.org/packages/70/7b/3ac802f9ce503d9f779a5ff73beca6f96741e954f633e56b636e869bb9c5/cobras-0.0.194.tar.gz" } ], "0.0.196": [ { "comment_text": "", "digests": { "md5": "067d28ee56ff3f7754e65a52050eff5f", "sha256": "456e2934bec49f55554425a9d0d348c90a921d09b5eb306c3cb789d4674b92e0" }, "downloads": -1, "filename": "cobras-0.0.196.tar.gz", "has_sig": false, "md5_digest": "067d28ee56ff3f7754e65a52050eff5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25771, "upload_time": "2019-07-30T18:52:26", "url": "https://files.pythonhosted.org/packages/be/f0/7a03b4e728da69ee3e585f663cb566e69ab006caf83a5773461010fd1a70/cobras-0.0.196.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "874ae75e5bbc5f714a17957b3bfadc50", "sha256": "053e738e4f5b9be592d9e398556acf9a77197aa58ea880a1a8c9ee28d06825c8" }, "downloads": -1, "filename": "cobras-1.0.0.tar.gz", "has_sig": false, "md5_digest": "874ae75e5bbc5f714a17957b3bfadc50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25718, "upload_time": "2019-07-31T23:46:14", "url": "https://files.pythonhosted.org/packages/bd/dc/d36d739846563f3a3d310b3256006c44018093e6c7258b132c170ec81185/cobras-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "8d02cac53a2085faa2f21232d2f13603", "sha256": "5184c915b0cddbd058ec0e11d5aab63065c0a5c76a58f44582adc3dc60d71976" }, "downloads": -1, "filename": "cobras-1.1.0.tar.gz", "has_sig": false, "md5_digest": "8d02cac53a2085faa2f21232d2f13603", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27158, "upload_time": "2019-08-07T01:50:20", "url": "https://files.pythonhosted.org/packages/f3/b4/fbe2e5068f6434050fc5c5d427e240869980eb6563139ae27f99d521882f/cobras-1.1.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "0a4446d72ba9c0c8667ac8840f31f49b", "sha256": "913256d01060749b1bbd2f18ba7c39cadb5da4c7ba31e06e7fafc7a9d1fc6510" }, "downloads": -1, "filename": "cobras-1.2.1.tar.gz", "has_sig": false, "md5_digest": "0a4446d72ba9c0c8667ac8840f31f49b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29605, "upload_time": "2019-08-09T07:41:21", "url": "https://files.pythonhosted.org/packages/52/7a/ac293e08bb69377b2514741285b0a5f16345223cdec4e568e00a8ac3ba37/cobras-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "122f905855fff52eccf619675d59edd0", "sha256": "4925b57fa90a31b9e8139823abf4cf06ea7027807d44845c2cc86aab8f18e182" }, "downloads": -1, "filename": "cobras-1.2.2.tar.gz", "has_sig": false, "md5_digest": "122f905855fff52eccf619675d59edd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30967, "upload_time": "2019-08-09T08:30:12", "url": "https://files.pythonhosted.org/packages/ab/f8/1ff5d3ec7104340c9a603a4e8664cd74d32bc67cbf6cc74dadcd8ba8febe/cobras-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "e130c327cc6fb53d31bf797d3c89b968", "sha256": "cddc04b2fe1865f1c15eaed761bfe6753faeeef4e951c35804d70daa338c6e71" }, "downloads": -1, "filename": "cobras-1.2.3.tar.gz", "has_sig": false, "md5_digest": "e130c327cc6fb53d31bf797d3c89b968", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31562, "upload_time": "2019-08-11T01:53:25", "url": "https://files.pythonhosted.org/packages/4e/13/e7f868b5d05bc0b70a1e05fe171a124aa65cc8787f5d1290a5dbebe39bb7/cobras-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "9c3f0149ed82e438c1bba93d82407629", "sha256": "2b161727325ea6a2199e60e203fcb1ba1fc65cfccb90ec626097e1fa6fc70353" }, "downloads": -1, "filename": "cobras-1.2.4.tar.gz", "has_sig": false, "md5_digest": "9c3f0149ed82e438c1bba93d82407629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31589, "upload_time": "2019-08-12T22:33:16", "url": "https://files.pythonhosted.org/packages/27/22/96b62a1a0ee3a32c09d7a980bb91f104e7569811858483d085ada7fe711b/cobras-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "fac31fdcf7bb270e54b0ea735606a8e1", "sha256": "a312a5ee666a0d3434e86f8151c487a3d740115a8e8500f30df5bb82bd952361" }, "downloads": -1, "filename": "cobras-1.2.5.tar.gz", "has_sig": false, "md5_digest": "fac31fdcf7bb270e54b0ea735606a8e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31630, "upload_time": "2019-08-12T23:14:06", "url": "https://files.pythonhosted.org/packages/af/73/b56048f11776f437121f19db5b8caa50948542f75991205e5280aaf8a028/cobras-1.2.5.tar.gz" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "d0a084fd69d7ea72013b77e9564dbc14", "sha256": "4bce3fbd46625c539e235f1790f2888254ad3855afa85abe7e957b833dbb73db" }, "downloads": -1, "filename": "cobras-1.2.6.tar.gz", "has_sig": false, "md5_digest": "d0a084fd69d7ea72013b77e9564dbc14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31828, "upload_time": "2019-08-13T07:17:24", "url": "https://files.pythonhosted.org/packages/36/be/0027b93aa6cd88175953530742baa2be5c82ca0e7892de1e8c74f1a74512/cobras-1.2.6.tar.gz" } ], "1.2.7": [ { "comment_text": "", "digests": { "md5": "809f387ef43ad208abdcd943a75cbf4b", "sha256": "4598bdbf7a2ef96b6f3b4c72798a8b4731201c4079c50f20dab2d6e3fda0de82" }, "downloads": -1, "filename": "cobras-1.2.7.tar.gz", "has_sig": false, "md5_digest": "809f387ef43ad208abdcd943a75cbf4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31875, "upload_time": "2019-08-14T06:53:45", "url": "https://files.pythonhosted.org/packages/06/49/255b54099c0056e1c40c2dff0b1029ec4cdab8ff602cc7002dfd4695b624/cobras-1.2.7.tar.gz" } ], "1.2.8": [ { "comment_text": "", "digests": { "md5": "2c617e9a374c2242deefb99c61dbcd3e", "sha256": "d7df6d207344b595bc538fc58c8530d30e6cab76371335af2f6587c49273ac26" }, "downloads": -1, "filename": "cobras-1.2.8.tar.gz", "has_sig": false, "md5_digest": "2c617e9a374c2242deefb99c61dbcd3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32068, "upload_time": "2019-08-15T04:42:49", "url": "https://files.pythonhosted.org/packages/3a/07/254e349ce51a0b91a1cbad8cdec00babf8ead92cf0cce5579d2faafa50b8/cobras-1.2.8.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "ad543b47322e72115e3d065652246314", "sha256": "9cff8173ee6a61427c93789065a3a464105422a6accfdb08ffb4cfb496567374" }, "downloads": -1, "filename": "cobras-1.3.2.tar.gz", "has_sig": false, "md5_digest": "ad543b47322e72115e3d065652246314", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33544, "upload_time": "2019-08-16T00:30:40", "url": "https://files.pythonhosted.org/packages/68/df/abadb23f2d15593f9f408b186a238a438c5c4fa1ce5ecfde210ab2142932/cobras-1.3.2.tar.gz" } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "af03ca33d050a19627a4265ad9edac29", "sha256": "2b40ce71858474bdbca3b4b5a94124128c9eafc1724277d95d607e6656a554ab" }, "downloads": -1, "filename": "cobras-1.3.4.tar.gz", "has_sig": false, "md5_digest": "af03ca33d050a19627a4265ad9edac29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33705, "upload_time": "2019-08-16T02:58:28", "url": "https://files.pythonhosted.org/packages/c1/9b/b1b11d9c709be46eb3409b5a1cca51a8ee4a8424d6366590626ea9df05ef/cobras-1.3.4.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "12fa4c8946c6855aa678dc02ff4212b5", "sha256": "cc1b8c4bb55bef43122e99dba5664b93f49e511ee79476abab308eefb4ff99e1" }, "downloads": -1, "filename": "cobras-1.4.0.tar.gz", "has_sig": false, "md5_digest": "12fa4c8946c6855aa678dc02ff4212b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33935, "upload_time": "2019-08-16T19:22:35", "url": "https://files.pythonhosted.org/packages/72/d0/254df8e68ee6a875babb23da1b88b9ac6faf711cabd4ad3ee711a0dc6269/cobras-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "4443d25214853f828b915144115b996a", "sha256": "c988c91c41db0b92c8ea74806c4dfcb3b7955ef1cc344f29ed3250e3d6ba4f5a" }, "downloads": -1, "filename": "cobras-1.4.1.tar.gz", "has_sig": false, "md5_digest": "4443d25214853f828b915144115b996a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34213, "upload_time": "2019-08-16T21:46:48", "url": "https://files.pythonhosted.org/packages/ee/4f/87d0ef8619743c2951ba8e54b9ebb49b18dac5bb2814bf8ef88aa4b342cf/cobras-1.4.1.tar.gz" } ], "1.4.10": [ { "comment_text": "", "digests": { "md5": "b6cd2a1b5e3f99809283023e983e657a", "sha256": "02ff11d475d0e6d57b21a768b7921bc13f8e235c863083874b69be3d6f1c03d5" }, "downloads": -1, "filename": "cobras-1.4.10.tar.gz", "has_sig": false, "md5_digest": "b6cd2a1b5e3f99809283023e983e657a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34396, "upload_time": "2019-08-17T04:21:27", "url": "https://files.pythonhosted.org/packages/e2/92/1b4b63803633ccf986aeea28a4f68fd3299a4838ac23ec66b4eecddd5ee2/cobras-1.4.10.tar.gz" } ], "1.4.11": [ { "comment_text": "", "digests": { "md5": "d435b1b9a7f50a2b8f5ace5bb20846b0", "sha256": "08d22113301d18e916318b05fa7660461e3bd9fe4eebb573295e9df1a5214c63" }, "downloads": -1, "filename": "cobras-1.4.11.tar.gz", "has_sig": false, "md5_digest": "d435b1b9a7f50a2b8f5ace5bb20846b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34353, "upload_time": "2019-08-17T05:14:34", "url": "https://files.pythonhosted.org/packages/97/a1/f83170e8ab29f6d061689a338982a076e7e8c429e37d1e46fea38050058c/cobras-1.4.11.tar.gz" } ], "1.4.12": [ { "comment_text": "", "digests": { "md5": "dfa46dfeaac5c60c2a3b063b9329c719", "sha256": "61709ac9d30a14098244b3fb05c322f444560cdecfefb64c24d8a63eed233c36" }, "downloads": -1, "filename": "cobras-1.4.12.tar.gz", "has_sig": false, "md5_digest": "dfa46dfeaac5c60c2a3b063b9329c719", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34408, "upload_time": "2019-08-17T05:36:52", "url": "https://files.pythonhosted.org/packages/2d/03/7b8e5a3935e9a2f1db40f7e2ad745666562228a2977bd5c0b9221c5e2002/cobras-1.4.12.tar.gz" } ], "1.4.13": [ { "comment_text": "", "digests": { "md5": "6cea36d73f1bec27423e09d34084b080", "sha256": "0455d9314dcd538fc65b672150fe9cda8170613b313722d96dbea7e29d50d4d0" }, "downloads": -1, "filename": "cobras-1.4.13.tar.gz", "has_sig": false, "md5_digest": "6cea36d73f1bec27423e09d34084b080", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34479, "upload_time": "2019-08-17T05:49:52", "url": "https://files.pythonhosted.org/packages/22/d5/382fc87ea01e23b4008b94d33c0a4c4331ce2dabda072362590f27fc6416/cobras-1.4.13.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "daea10881c175d3d7fd95f1545a751af", "sha256": "06531e12c8ce0b4b1de816aa25bfd0b8c546c09dc46b71f748869573ad90e30b" }, "downloads": -1, "filename": "cobras-1.4.2.tar.gz", "has_sig": false, "md5_digest": "daea10881c175d3d7fd95f1545a751af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34365, "upload_time": "2019-08-16T22:09:50", "url": "https://files.pythonhosted.org/packages/2a/a5/8b4fda3fb409b07d6ec2c082f0ac4425351a66210de2df422dde25b9097c/cobras-1.4.2.tar.gz" } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "1876d422cfdaec473ccbc92c460088c2", "sha256": "888e042452799617e039b92ee96b694ac973143cf274fd952e7925243b5307dc" }, "downloads": -1, "filename": "cobras-1.4.3.tar.gz", "has_sig": false, "md5_digest": "1876d422cfdaec473ccbc92c460088c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34471, "upload_time": "2019-08-16T22:40:10", "url": "https://files.pythonhosted.org/packages/14/88/c81477103116b25446136cf5135cd823e3d3ac853ed9bd97bce452ff6aff/cobras-1.4.3.tar.gz" } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "44099e30d3ef87ec3630d21ee5702f5f", "sha256": "7640a43429e2e36169ddeaf5d8e580bcaaf590016a00384261e20f15baf3da55" }, "downloads": -1, "filename": "cobras-1.4.4.tar.gz", "has_sig": false, "md5_digest": "44099e30d3ef87ec3630d21ee5702f5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34464, "upload_time": "2019-08-16T22:45:27", "url": "https://files.pythonhosted.org/packages/3a/59/ab184e6596fe99b0d8502465be9d2ae69c3da691aeab56077304d8d5ed4c/cobras-1.4.4.tar.gz" } ], "1.4.5": [ { "comment_text": "", "digests": { "md5": "e8100831c660d2ac2201641fff354d7a", "sha256": "9757cd2e90a787a620394031deb267c6c7a508c23c0afe301aa15a7b5c469b35" }, "downloads": -1, "filename": "cobras-1.4.5.tar.gz", "has_sig": false, "md5_digest": "e8100831c660d2ac2201641fff354d7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34386, "upload_time": "2019-08-16T22:48:58", "url": "https://files.pythonhosted.org/packages/a8/8f/583f6d002c76784eeade92d8d887e56b5c0a03b2939e30448eb63c66c6b8/cobras-1.4.5.tar.gz" } ], "1.4.6": [ { "comment_text": "", "digests": { "md5": "3b1b195020246e4b63c0d70dc157429a", "sha256": "5935384f1e6629a94d5af18b34c2e7c2bc9c1ead7d5e243c3330fdc49165bdde" }, "downloads": -1, "filename": "cobras-1.4.6.tar.gz", "has_sig": false, "md5_digest": "3b1b195020246e4b63c0d70dc157429a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34400, "upload_time": "2019-08-17T00:21:57", "url": "https://files.pythonhosted.org/packages/fb/09/398470190e69790059b09776cbbde40729153c181504438f12607dd6b642/cobras-1.4.6.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "96ebd4e9687eef5519c7b809a027096c", "sha256": "c18ac8bb6655b0adb47f7ef9e0b8a11c14d6e983df6433299ea44e5835df47f9" }, "downloads": -1, "filename": "cobras-1.5.0.tar.gz", "has_sig": false, "md5_digest": "96ebd4e9687eef5519c7b809a027096c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34494, "upload_time": "2019-08-17T05:58:23", "url": "https://files.pythonhosted.org/packages/8f/7e/834f2e9590ca061719f21920a276169362f6d98fe026aace30c4792ed214/cobras-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "76b203a43199a06e7091a457fbaec44e", "sha256": "80d64f70d3fbcd1fb6f6e4cb89f546eedef50c98b6a6ffab0afaad429a93bcc0" }, "downloads": -1, "filename": "cobras-1.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "76b203a43199a06e7091a457fbaec44e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 50926, "upload_time": "2019-08-18T16:46:25", "url": "https://files.pythonhosted.org/packages/f4/56/e90848f712454f2453f8daf53d3517eeac13271a3f67a5407dabf51b9908/cobras-1.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0df1f89ba6141e547404051e0edf711f", "sha256": "d7cd9e86346cc56b630c5c256877d40242fe4e965bc17e25318d3e0e6be13003" }, "downloads": -1, "filename": "cobras-1.5.1.tar.gz", "has_sig": false, "md5_digest": "0df1f89ba6141e547404051e0edf711f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35093, "upload_time": "2019-08-18T16:46:27", "url": "https://files.pythonhosted.org/packages/30/53/a87cc18505978597132bfe33285329eecf8aec0187c29cded90dee9339b6/cobras-1.5.1.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "996bb9c1606d898eda224e3a4f96a06f", "sha256": "85d6362d8ee7b513997c05d45b09ace4f7a397f6d23fdeac4ef83178bbe452dd" }, "downloads": -1, "filename": "cobras-1.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "996bb9c1606d898eda224e3a4f96a06f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 51929, "upload_time": "2019-08-20T21:38:40", "url": "https://files.pythonhosted.org/packages/c3/a0/a30642298b182c352b24ce61b26aeb0e17b50c4ee4b1aa1f84ba1338c0c9/cobras-1.5.3-py3-none-any.whl" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "30bc9cc22a4074ab19c248e59ebc0678", "sha256": "485b6c2346b8afbf4fff5a9e7f36e11bf310e7891da59e13d697cef3532513b2" }, "downloads": -1, "filename": "cobras-1.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "30bc9cc22a4074ab19c248e59ebc0678", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 51930, "upload_time": "2019-08-20T21:39:29", "url": "https://files.pythonhosted.org/packages/6c/a6/2bdc1b7c656bc34d77bcd76a97876580e940a8c441d362986ccd5983a78b/cobras-1.6.1-py3-none-any.whl" } ], "1.6.10": [ { "comment_text": "", "digests": { "md5": "37e562ba3577682a2e1bb1c8cb0e3579", "sha256": "cee1a4f529bb02e432bb0ec6ef1c84b7a1a611b0df234c9cda46349eebba5c04" }, "downloads": -1, "filename": "cobras-1.6.10-py3-none-any.whl", "has_sig": false, "md5_digest": "37e562ba3577682a2e1bb1c8cb0e3579", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54151, "upload_time": "2019-08-24T21:31:30", "url": "https://files.pythonhosted.org/packages/35/0a/0138763b5fd4fbd3acccd6f423e6f87498a32e3df6dac6375507bb57a3b6/cobras-1.6.10-py3-none-any.whl" } ], "1.6.11": [ { "comment_text": "", "digests": { "md5": "70cd738193e16badbd9124ef57debfba", "sha256": "8916b7e28729cbe921e7d30e42d3bae787b8c96961b8be8db904a2a59d013b87" }, "downloads": -1, "filename": "cobras-1.6.11-py3-none-any.whl", "has_sig": false, "md5_digest": "70cd738193e16badbd9124ef57debfba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54150, "upload_time": "2019-08-28T17:58:28", "url": "https://files.pythonhosted.org/packages/2f/49/6956e5ee876a7a4a216e9ee5c96f38786f334cf4152f90d7fd9411128c1c/cobras-1.6.11-py3-none-any.whl" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "f5635579a98e6e58344f38391d55a1af", "sha256": "a9c5d6cb6c491d50ffe220d7e49ef65ed39d311022e16353af5e9fcee60e291c" }, "downloads": -1, "filename": "cobras-1.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f5635579a98e6e58344f38391d55a1af", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52034, "upload_time": "2019-08-20T22:11:12", "url": "https://files.pythonhosted.org/packages/22/fa/a48196a81d31238574c0932270cb08e4fc2f5cb7da13c4b748d27c289927/cobras-1.6.2-py3-none-any.whl" } ], "1.6.3": [ { "comment_text": "", "digests": { "md5": "d5c62147291d349601bac3a4142a998d", "sha256": "35dae59a41b427e41444dcbdb63cdb4ce0b3519e38bda54a4d133e03a80dbda4" }, "downloads": -1, "filename": "cobras-1.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "d5c62147291d349601bac3a4142a998d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52037, "upload_time": "2019-08-20T23:59:59", "url": "https://files.pythonhosted.org/packages/65/02/c49541bd00652fda6dc2300eca833642bc4e413cca1c9c1d015abc87c462/cobras-1.6.3-py3-none-any.whl" } ], "1.6.4": [ { "comment_text": "", "digests": { "md5": "e64d08d51a81862a100bf6b402dc4599", "sha256": "f4897c015ff698ec1442ddb7f94cf128e77b1c806a83c0b65120515ac04d2a74" }, "downloads": -1, "filename": "cobras-1.6.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e64d08d51a81862a100bf6b402dc4599", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52109, "upload_time": "2019-08-21T17:27:00", "url": "https://files.pythonhosted.org/packages/09/60/96d7b00d37b9a8b154a0bd12bb7768f14d3f40e23c13d918a2e49b5102d9/cobras-1.6.4-py3-none-any.whl" } ], "1.6.5": [ { "comment_text": "", "digests": { "md5": "bd0826db5111accc2df5971728318a7e", "sha256": "f5a1045b19674099c61ecdea9216fc26fae886485390199aee3a93eea826f764" }, "downloads": -1, "filename": "cobras-1.6.5-py3-none-any.whl", "has_sig": false, "md5_digest": "bd0826db5111accc2df5971728318a7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 48499, "upload_time": "2019-08-21T21:25:04", "url": "https://files.pythonhosted.org/packages/da/8e/9c74eaf04e829dc3ec46ef8fcc5cb9f7bba776ade6d44fe8ea7297572ef6/cobras-1.6.5-py3-none-any.whl" } ], "1.6.6": [ { "comment_text": "", "digests": { "md5": "8ad53429b8a035fb2703a8bfde9234a5", "sha256": "752472f138f881537b26c6da16b4bc0380d1a4c34dcf681b96330b17ff0e35c6" }, "downloads": -1, "filename": "cobras-1.6.6-py3-none-any.whl", "has_sig": false, "md5_digest": "8ad53429b8a035fb2703a8bfde9234a5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47745, "upload_time": "2019-08-23T00:46:02", "url": "https://files.pythonhosted.org/packages/14/e0/0a986077bc5e6f17ecd93f52ef8c7a9b1ea13fad4f80ac8f7d45e85af842/cobras-1.6.6-py3-none-any.whl" } ], "1.6.7": [ { "comment_text": "", "digests": { "md5": "05a183bd557e4b41a0b8f170ac5b9106", "sha256": "176722ac33bfc7a302aebb7cd18e6c17461d5b067388bd6bb415719255ee3bbd" }, "downloads": -1, "filename": "cobras-1.6.7-py3-none-any.whl", "has_sig": false, "md5_digest": "05a183bd557e4b41a0b8f170ac5b9106", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47762, "upload_time": "2019-08-23T13:34:41", "url": "https://files.pythonhosted.org/packages/67/9c/d76bc0669b002972c4cd797e80abd64fb331ffa62924c2b7face488623ec/cobras-1.6.7-py3-none-any.whl" } ], "1.6.8": [ { "comment_text": "", "digests": { "md5": "b4c6c1461623513785948493344b3044", "sha256": "a748db9e71804089573e46a9caa46c156f6a0e4e6f2592a502e46e2525a91ed4" }, "downloads": -1, "filename": "cobras-1.6.8-py3-none-any.whl", "has_sig": false, "md5_digest": "b4c6c1461623513785948493344b3044", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47932, "upload_time": "2019-08-23T23:55:57", "url": "https://files.pythonhosted.org/packages/10/52/5314be055c78f1ee980fb2fbb0842c2089cfce0305edd5c9722b48fd9030/cobras-1.6.8-py3-none-any.whl" } ], "1.6.9": [ { "comment_text": "", "digests": { "md5": "f2dc0939dac3ce602bd9ec3bb97eab24", "sha256": "fce6ca55e362240ea621166352ca7c963476b9742ecfc84050595bcbce02322f" }, "downloads": -1, "filename": "cobras-1.6.9-py3-none-any.whl", "has_sig": false, "md5_digest": "f2dc0939dac3ce602bd9ec3bb97eab24", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54136, "upload_time": "2019-08-24T00:29:29", "url": "https://files.pythonhosted.org/packages/ac/44/d78450fb7ab9214c354f74c9fa3ea2c5d722adb134733005b7fb38280b7f/cobras-1.6.9-py3-none-any.whl" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "b1e04d06f2fbdd45d7003258b43a5aa4", "sha256": "b484ae73b62a68d2e83d6a3ced5bcdc30208fb9325ce4b4bcd88176fcdb7493f" }, "downloads": -1, "filename": "cobras-1.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b1e04d06f2fbdd45d7003258b43a5aa4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54749, "upload_time": "2019-08-29T02:13:57", "url": "https://files.pythonhosted.org/packages/9d/cf/69890d1d205f6f93533e6c6e32d995b1c803ac8cfd1f56329191725c48e7/cobras-1.7.0-py3-none-any.whl" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "62df7fc24d62ec79bfcb01e87c34f936", "sha256": "bb98380a7bc91a1c054d9058812a8d1b89b3b09b90dea10d04fb1914adbd8a34" }, "downloads": -1, "filename": "cobras-1.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "62df7fc24d62ec79bfcb01e87c34f936", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54749, "upload_time": "2019-08-30T00:18:45", "url": "https://files.pythonhosted.org/packages/86/09/9532586399774911cf63b95fb86f6d203b19183e2360e64899901a4a1b2e/cobras-1.7.1-py3-none-any.whl" } ], "1.7.4": [ { "comment_text": "", "digests": { "md5": "0c538a6f94af8336fa79142022697818", "sha256": "3a9e915486276ff5ed0867ba518c8283f3bad6d6361bdb0c2da679222eb57b9f" }, "downloads": -1, "filename": "cobras-1.7.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0c538a6f94af8336fa79142022697818", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54970, "upload_time": "2019-09-11T04:26:30", "url": "https://files.pythonhosted.org/packages/d1/41/77ef759488638ba0e767f23aac0e82f3c99ccf7e04510fcfa3b9f0f5859c/cobras-1.7.4-py3-none-any.whl" } ], "1.7.5": [ { "comment_text": "", "digests": { "md5": "d071f6f3292353136824426c6337091e", "sha256": "999730a8f09fe9de8c519fa0fb3a968572b7379ec866446fea7fb07262d03c39" }, "downloads": -1, "filename": "cobras-1.7.5-py3-none-any.whl", "has_sig": false, "md5_digest": "d071f6f3292353136824426c6337091e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54936, "upload_time": "2019-09-11T21:04:19", "url": "https://files.pythonhosted.org/packages/f6/f2/386275e70ea346cb2c7516fedf42473654983716cb9c81e22335983c44ca/cobras-1.7.5-py3-none-any.whl" } ], "1.7.6": [ { "comment_text": "", "digests": { "md5": "4a6cc46935c1d0242ac3d4b325befd63", "sha256": "4a70abc7305da037ed7ab3f8a693eba0f0c8f2a0d10a80718a61374c7f1e7dc9" }, "downloads": -1, "filename": "cobras-1.7.6-py3-none-any.whl", "has_sig": false, "md5_digest": "4a6cc46935c1d0242ac3d4b325befd63", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55017, "upload_time": "2019-09-11T21:32:00", "url": "https://files.pythonhosted.org/packages/44/22/cae2cb021aba4d7cc6cd890dd2180314c922743cffff3729777e60249f6a/cobras-1.7.6-py3-none-any.whl" } ], "1.7.7": [ { "comment_text": "", "digests": { "md5": "c9c76efa0513a173b711af501169f766", "sha256": "78fa406ef4584c55a1d98444705afa0c2cc18575e43294a26249abb1dff23dd2" }, "downloads": -1, "filename": "cobras-1.7.7-py3-none-any.whl", "has_sig": false, "md5_digest": "c9c76efa0513a173b711af501169f766", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55018, "upload_time": "2019-09-11T22:18:35", "url": "https://files.pythonhosted.org/packages/9a/74/162acbad05446db9a0f34818b9402faeb033250a20a6cda3ff0cecde87c6/cobras-1.7.7-py3-none-any.whl" } ], "1.7.9": [ { "comment_text": "", "digests": { "md5": "94ccc797096971b0dad3b0c7263bb5e3", "sha256": "2054ac852ac65e4b43f9665f0da0aee2a78261896dd5f7c917a615cce4e7bbc1" }, "downloads": -1, "filename": "cobras-1.7.9-py3-none-any.whl", "has_sig": false, "md5_digest": "94ccc797096971b0dad3b0c7263bb5e3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55307, "upload_time": "2019-09-17T19:04:15", "url": "https://files.pythonhosted.org/packages/da/a1/e9f6b5f5c6a78095b2f4ded0f0f2474795b68cd20a34bbc6ab009d20690d/cobras-1.7.9-py3-none-any.whl" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "2b5ceabd56ac65966fa8b5b4842f5ae3", "sha256": "77dbb76de9222ef01130b8869a5f29b141710becbe02415ad60bcd8fd65956ca" }, "downloads": -1, "filename": "cobras-1.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2b5ceabd56ac65966fa8b5b4842f5ae3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55359, "upload_time": "2019-09-17T20:51:21", "url": "https://files.pythonhosted.org/packages/d3/fe/adcd3053e34e8d33fe53f2b59d2b0271d1641033d1b13d5ddc19c0492223/cobras-1.8.0-py3-none-any.whl" } ], "1.8.1": [ { "comment_text": "", "digests": { "md5": "73f228e500494d01b28248974c5d0f05", "sha256": "203e9ba74d493ca5998cdfc58fb8c2af0edf32e58824d943a20b1cff360a8338" }, "downloads": -1, "filename": "cobras-1.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "73f228e500494d01b28248974c5d0f05", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55414, "upload_time": "2019-09-17T21:15:18", "url": "https://files.pythonhosted.org/packages/14/2a/2762e07a01f7cfc8a8ba11b1eebd85c87a136205287849571b0a2fbd7a4b/cobras-1.8.1-py3-none-any.whl" } ], "1.9.0": [ { "comment_text": "", "digests": { "md5": "f91ab36f439f5571a796b055771dcf48", "sha256": "e4333122cfd01c14d7a4cbfc98c1e395d8b046a0e7911947eadf2ae8355de569" }, "downloads": -1, "filename": "cobras-1.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f91ab36f439f5571a796b055771dcf48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55605, "upload_time": "2019-09-18T16:26:07", "url": "https://files.pythonhosted.org/packages/a5/41/3964cef9522a300481891e8d6e52d5f346f139a11d90d418176e457fc8bb/cobras-1.9.0-py3-none-any.whl" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "f736ff3d28472faf877fc41cabcb2d46", "sha256": "dec46ed3db2d1f282a69ca19ac91ad3f2917ff007f5371338bc0963c34b5af27" }, "downloads": -1, "filename": "cobras-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f736ff3d28472faf877fc41cabcb2d46", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55467, "upload_time": "2019-09-20T23:28:56", "url": "https://files.pythonhosted.org/packages/bd/32/de5f9301b01278d3aa77d50568f4942e09781ba038640478fd3aef05bb59/cobras-2.0.0-py3-none-any.whl" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "cc0a2fe7f7e014d727a9e0a7fe1ce979", "sha256": "7a9715baa5ebd898a7796084aec95f5e36ef09a1a734975db5f0a573de4fe819" }, "downloads": -1, "filename": "cobras-2.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cc0a2fe7f7e014d727a9e0a7fe1ce979", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55427, "upload_time": "2019-09-26T22:54:59", "url": "https://files.pythonhosted.org/packages/76/0e/ba02f486a8fc8959eab3290dd99fae27a0329c37c5783efa9d6329724039/cobras-2.1.1-py3-none-any.whl" } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "01e04a746f769df78c94e1ab017d327e", "sha256": "1c16a3bade59a2286b0303b631d039244a74dc8fcfd49191149df723c4015ffc" }, "downloads": -1, "filename": "cobras-2.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "01e04a746f769df78c94e1ab017d327e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55433, "upload_time": "2019-09-27T23:51:11", "url": "https://files.pythonhosted.org/packages/95/13/df7144e3c89585fa614ec05e7f5c4b1e93b3fceb1ac633d8d46354e1ce13/cobras-2.1.2-py3-none-any.whl" } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "dd17f25aba6b0a63b1ed02d6460fd685", "sha256": "aa6aaa9e61446afe21e4c28e50412416314cfe836b25ff9f7c976fdc37c0f15d" }, "downloads": -1, "filename": "cobras-2.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "dd17f25aba6b0a63b1ed02d6460fd685", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55462, "upload_time": "2019-09-30T22:11:06", "url": "https://files.pythonhosted.org/packages/bb/8e/4ef6829b83d43e49c25db32d2a1ec60faf6ab783145f58f76498cb10b7af/cobras-2.1.3-py3-none-any.whl" } ], "2.1.4": [ { "comment_text": "", "digests": { "md5": "e131bce9f7542e322d625dbe52eca18c", "sha256": "965977c13c0c1f574f9fbd2a93014a7193658b1b7ed693cbada4f572cf7b8ce2" }, "downloads": -1, "filename": "cobras-2.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e131bce9f7542e322d625dbe52eca18c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55557, "upload_time": "2019-10-01T01:56:02", "url": "https://files.pythonhosted.org/packages/02/1b/3da1dbfdda19880d749268b99f03331b77f4f27374a213b1203eaebd6503/cobras-2.1.4-py3-none-any.whl" } ], "2.1.5": [ { "comment_text": "", "digests": { "md5": "231b9e6345178e89daf06926fc699916", "sha256": "e08b8348b0dca06aba64b0062a07faed7c125345cb66f90fdbc0e3315fa68c15" }, "downloads": -1, "filename": "cobras-2.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "231b9e6345178e89daf06926fc699916", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55525, "upload_time": "2019-10-01T17:22:13", "url": "https://files.pythonhosted.org/packages/86/8b/f6d3d4c1329056fc1161634e9eea09a9fcb81ebd9b62a48b60164d8076a9/cobras-2.1.5-py3-none-any.whl" } ], "2.1.6": [ { "comment_text": "", "digests": { "md5": "c3d1d31ef5721eeb750300019beefa17", "sha256": "9399518534413badd22f62f0b6916f2ea7ee2daa1d0c861b0fefd9237ce508cb" }, "downloads": -1, "filename": "cobras-2.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "c3d1d31ef5721eeb750300019beefa17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55573, "upload_time": "2019-10-01T19:08:24", "url": "https://files.pythonhosted.org/packages/d2/04/3542c0d8868a9e500c144a0fdf10879ef2d81324756ecef0b2dba931e560/cobras-2.1.6-py3-none-any.whl" } ], "2.1.7": [ { "comment_text": "", "digests": { "md5": "2b3412561e5bb2aa3fd73ba49b89665a", "sha256": "86ee6d7c52b18d56eff02dda3c151540a1174ae48c8a2837d486a04996ee960d" }, "downloads": -1, "filename": "cobras-2.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2b3412561e5bb2aa3fd73ba49b89665a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55650, "upload_time": "2019-10-02T21:46:36", "url": "https://files.pythonhosted.org/packages/36/40/5fe2e1d13ba9f1e708acdd61ba3e1a4443ec8c78177f9bc5d6da5491c961/cobras-2.1.7-py3-none-any.whl" } ], "2.1.8": [ { "comment_text": "", "digests": { "md5": "8676122a199b5c2a2f9e8e96d222046f", "sha256": "931cde93d399442d57a1dd643a620e3c0f356a954f8fe79701000d4f5ed9e53b" }, "downloads": -1, "filename": "cobras-2.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "8676122a199b5c2a2f9e8e96d222046f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55648, "upload_time": "2019-10-08T21:16:48", "url": "https://files.pythonhosted.org/packages/36/ba/5944d5dbb37bce2a60abba483d911edda9ad9c53b93a963d5d6120eb8b02/cobras-2.1.8-py3-none-any.whl" } ], "2.1.9": [ { "comment_text": "", "digests": { "md5": "536fb8f03528f235d2bd3133fd1bc176", "sha256": "bbb5b25bfbcbce7f462841024fbf7f8340c8b0740e22c60e835bd64e03cf26f0" }, "downloads": -1, "filename": "cobras-2.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "536fb8f03528f235d2bd3133fd1bc176", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55650, "upload_time": "2019-10-15T22:32:10", "url": "https://files.pythonhosted.org/packages/54/29/c08a3c86e4cef158ea062fe7280675fd7a893972bf3f3d9f1023aa669050/cobras-2.1.9-py3-none-any.whl" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "6bd5b39def641e0b19f48c61d86d425e", "sha256": "5a70be45b23f0e77988ad49e62fc2649b11fe28e22315fad53d9fbc82a65b232" }, "downloads": -1, "filename": "cobras-2.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6bd5b39def641e0b19f48c61d86d425e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55748, "upload_time": "2019-10-16T01:14:18", "url": "https://files.pythonhosted.org/packages/92/b0/1d2bdca08b125728fafde6261b5f5c0799838eb6399d5dd3e0d0777c9be5/cobras-2.2.0-py3-none-any.whl" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "d93b960b76535cf670c9a126e0fa4aaf", "sha256": "0f6574f8e8534d266b30c99500f8cdf472a30460aaa202456b53ef28e4b658f0" }, "downloads": -1, "filename": "cobras-2.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d93b960b76535cf670c9a126e0fa4aaf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55810, "upload_time": "2019-10-16T21:22:06", "url": "https://files.pythonhosted.org/packages/e8/b2/c0cd22fe8d9d4d62565d295bc7cb47abcbb47b1ee066ea843562e1b81dbb/cobras-2.2.1-py3-none-any.whl" } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "3580acede40336662460257b6bc806df", "sha256": "53d6f15d570c41f1908922e9a960982784dbcb0dc8defb48c804eec9748735e0" }, "downloads": -1, "filename": "cobras-2.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3580acede40336662460257b6bc806df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55837, "upload_time": "2019-10-16T22:52:31", "url": "https://files.pythonhosted.org/packages/89/6a/7a18d82ce1956acbb82f65a1c6ab12943cfc05ba0c1202d28628c4e29cc0/cobras-2.2.2-py3-none-any.whl" } ], "2.2.3": [ { "comment_text": "", "digests": { "md5": "59149b9b3846114d63c24096ae2d9b5e", "sha256": "b6fee16cea113376808660727347684db7e0a3f45d0d831235c363f175616081" }, "downloads": -1, "filename": "cobras-2.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "59149b9b3846114d63c24096ae2d9b5e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55890, "upload_time": "2019-10-17T23:49:12", "url": "https://files.pythonhosted.org/packages/ad/59/4652bf0d2ac3aa165d86ab824ce990dcf35513577f02200ef5483b1c4ade/cobras-2.2.3-py3-none-any.whl" } ], "2.2.4": [ { "comment_text": "", "digests": { "md5": "00feb87e8706d4f4044e744a173f580f", "sha256": "1870cf89cf45adebfafb2efce76d625e1bcc2787ddc3c0b6ce169b688a00135c" }, "downloads": -1, "filename": "cobras-2.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "00feb87e8706d4f4044e744a173f580f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55958, "upload_time": "2019-10-18T00:41:45", "url": "https://files.pythonhosted.org/packages/d8/6a/2e87b020f035de126f422e3d0c5f765cbd0440646b3c0489756ae9e02a0a/cobras-2.2.4-py3-none-any.whl" } ], "2.2.5": [ { "comment_text": "", "digests": { "md5": "65e8a7e1d7c92d684c349a10f9a6b871", "sha256": "132c89489b23c2d4c7137e61c5dd962fd7a3e705fbffeac230a269eefae9496b" }, "downloads": -1, "filename": "cobras-2.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "65e8a7e1d7c92d684c349a10f9a6b871", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55955, "upload_time": "2019-10-18T00:48:55", "url": "https://files.pythonhosted.org/packages/5d/53/71b610725db92e6d3253c6b9efc3a98c83480e47f98564fe2979afa3f067/cobras-2.2.5-py3-none-any.whl" } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "af8bc75719ea32e3d780361534551886", "sha256": "e73b2f3d436fd4e3ab0135d4fe4c5f046af1a0087f327ae0f1de03ce861fa0c4" }, "downloads": -1, "filename": "cobras-2.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "af8bc75719ea32e3d780361534551886", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56035, "upload_time": "2019-10-18T19:19:11", "url": "https://files.pythonhosted.org/packages/34/34/ff637d1d55ce6659b5aaaac392103e24f54f3841f7dee0944bbf2a353a0d/cobras-2.3.0-py3-none-any.whl" } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "40153b4ae867692be39809b3555674b1", "sha256": "a94e701a7197a5b1c505b4b96b854436837a88466f00ebb68edc356b2b2fac1b" }, "downloads": -1, "filename": "cobras-2.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "40153b4ae867692be39809b3555674b1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56133, "upload_time": "2019-10-18T21:07:13", "url": "https://files.pythonhosted.org/packages/ac/7b/791eba12baecef0afe7a383f0eb03340f1086fe4c646f69df62d4bd533b1/cobras-2.3.1-py3-none-any.whl" } ], "2.3.2": [ { "comment_text": "", "digests": { "md5": "6973a1b75995cb2c203621ca4737f9fa", "sha256": "d2f0a530fa3bf7ee11f6096ed5933c048ae690fd1a7b0e93729fa9135c3e3457" }, "downloads": -1, "filename": "cobras-2.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6973a1b75995cb2c203621ca4737f9fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56059, "upload_time": "2019-10-19T16:35:14", "url": "https://files.pythonhosted.org/packages/76/be/4c7fcd741efab6eb96f37048a1239970f1dc8032a07a9fd5ecebb9502350/cobras-2.3.2-py3-none-any.whl" } ], "2.3.3": [ { "comment_text": "", "digests": { "md5": "bdeba51fec3634ba49a26566771f8489", "sha256": "86034ffd5d1f4e19ff49d64679d9666d7cd12bdf900a096beee92c0223e145ed" }, "downloads": -1, "filename": "cobras-2.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bdeba51fec3634ba49a26566771f8489", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56058, "upload_time": "2019-10-19T18:28:17", "url": "https://files.pythonhosted.org/packages/bd/28/298aa4214f56adf003496c63f51a712934e20ed64e4dc30b2185ec013bfd/cobras-2.3.3-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bdeba51fec3634ba49a26566771f8489", "sha256": "86034ffd5d1f4e19ff49d64679d9666d7cd12bdf900a096beee92c0223e145ed" }, "downloads": -1, "filename": "cobras-2.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bdeba51fec3634ba49a26566771f8489", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56058, "upload_time": "2019-10-19T18:28:17", "url": "https://files.pythonhosted.org/packages/bd/28/298aa4214f56adf003496c63f51a712934e20ed64e4dc30b2185ec013bfd/cobras-2.3.3-py3-none-any.whl" } ] }