{ "info": { "author": "Denis Makogon", "author_email": "denys.makogon@oracle.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Python SDK for [CloudEvents](https://github.com/cloudevents/spec)\n\n**NOTE: This SDK is still considered work in progress, things might (and will) break with every update.**\n\nPackage **cloudevents** provides primitives to work with CloudEvents specification: https://github.com/cloudevents/spec.\n\nParsing upstream Event from HTTP Request:\n```python\nimport io\n\nfrom cloudevents.sdk.event import v02\nfrom cloudevents.sdk import marshaller\n\nm = marshaller.NewDefaultHTTPMarshaller()\nevent = m.FromRequest(\n v02.Event(),\n {\n \"content-type\": \"application/cloudevents+json\",\n \"ce-specversion\": \"0.2\",\n \"ce-time\": \"2018-10-23T12:28:22.4579346Z\",\n \"ce-id\": \"96fb5f0b-001e-0108-6dfe-da6e2806f124\",\n \"ce-source\": \"\",\n \"ce-type\": \"word.found.name\",\n },\n io.BytesIO(b\"this is where your CloudEvent data\"), \n lambda x: x.read()\n)\n\n```\n\nCreating a minimal CloudEvent in version 0.1:\n```python\nfrom cloudevents.sdk.event import v01\n\nevent = (\n v01.Event().\n SetContentType(\"application/json\").\n SetData('{\"name\":\"john\"}').\n SetEventID(\"my-id\").\n SetSource(\"from-galaxy-far-far-away\").\n SetEventTime(\"tomorrow\").\n SetEventType(\"cloudevent.greet.you\")\n)\n\n```\n\nCreating HTTP request from CloudEvent:\n```python\nfrom cloudevents.sdk import converters\nfrom cloudevents.sdk import marshaller\nfrom cloudevents.sdk.converters import structured\nfrom cloudevents.sdk.event import v01\n\nevent = (\n v01.Event().\n SetContentType(\"application/json\").\n SetData('{\"name\":\"john\"}').\n SetEventID(\"my-id\").\n SetSource(\"from-galaxy-far-far-away\").\n SetEventTime(\"tomorrow\").\n SetEventType(\"cloudevent.greet.you\")\n)\nm = marshaller.NewHTTPMarshaller(\n [\n structured.NewJSONHTTPCloudEventConverter()\n ]\n)\n\nheaders, body = m.ToRequest(event, converters.TypeStructured, lambda x: x)\n\n```\n\n## HOWTOs with various Python HTTP frameworks\n\nIn this topic you'd find various example how to integrate an SDK with various HTTP frameworks.\n\n### Python requests\n\nOne of popular framework is [0.2-force-improvements](http://docs.python-requests.org/en/master/).\n\n\n#### CloudEvent to request\n\nThe code below shows how integrate both libraries in order to convert a CloudEvent into an HTTP request:\n\n```python\ndef run_binary(event, url):\n binary_headers, binary_data = http_marshaller.ToRequest(\n event, converters.TypeBinary, json.dumps)\n\n print(\"binary CloudEvent\")\n for k, v in binary_headers.items():\n print(\"{0}: {1}\\r\\n\".format(k, v))\n print(binary_data.getvalue())\n response = requests.post(url,\n headers=binary_headers,\n data=binary_data.getvalue())\n response.raise_for_status()\n\n\ndef run_structured(event, url):\n structured_headers, structured_data = http_marshaller.ToRequest(\n event, converters.TypeStructured, json.dumps\n )\n print(\"structured CloudEvent\")\n print(structured_data.getvalue())\n\n response = requests.post(url,\n headers=structured_headers,\n data=structured_data.getvalue())\n response.raise_for_status()\n\n```\n\nComplete example of turning a CloudEvent into a request you can find [here](samples/python-requests/cloudevent_to_request.py).\n\n#### Request to CloudEvent\n\nThe code below shows how integrate both libraries in order to create a CloudEvent from an HTTP request:\n```python\n response = requests.get(url)\n response.raise_for_status()\n headers = response.headers\n data = io.BytesIO(response.content)\n event = v02.Event()\n http_marshaller = marshaller.NewDefaultHTTPMarshaller()\n event = http_marshaller.FromRequest(\n event, headers, data, json.load)\n\n```\nComplete example of turning a CloudEvent into a request you can find [here](samples/python-requests/request_to_cloudevent.py).\n\n\n## SDK versioning\n\nThe goal of this package is to provide support for all released versions of CloudEvents, ideally while maintaining\nthe same API. It will use semantic versioning with following rules:\n* MAJOR version increments when backwards incompatible changes is introduced.\n* MINOR version increments when backwards compatible feature is introduced INCLUDING support for new CloudEvents version.\n* PATCH version increments when a backwards compatible bug fix is introduced.\n\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://cloudevents.io/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "cloudevents", "package_url": "https://pypi.org/project/cloudevents/", "platform": "", "project_url": "https://pypi.org/project/cloudevents/", "project_urls": { "Homepage": "https://cloudevents.io/" }, "release_url": "https://pypi.org/project/cloudevents/0.2.4/", "requires_dist": [ "pbr (!=2.1.0,>=2.0.0)" ], "requires_python": "", "summary": "CloudEvents SDK Python", "version": "0.2.4" }, "last_serial": 5371363, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "42317151592840256e02ba1525b7326d", "sha256": "3aec073f32edfce9f31cae94470bebea7cbc9d634cd316df4c4b3617dabce791" }, "downloads": -1, "filename": "cloudevents-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "42317151592840256e02ba1525b7326d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21372, "upload_time": "2018-11-19T20:37:14", "url": "https://files.pythonhosted.org/packages/13/b8/080aba2a3bdc874798c4a48a4458ac82f96a8cd9e5770c0473b58fc32ac0/cloudevents-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a78da4d39a68d7a9a77253be87826cf3", "sha256": "21ccf8150fbf8c6eb4849fc4ec7467b045afd43b9880ffbd91b2b25d560217fc" }, "downloads": -1, "filename": "cloudevents-0.0.1.tar.gz", "has_sig": false, "md5_digest": "a78da4d39a68d7a9a77253be87826cf3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 188308, "upload_time": "2018-11-19T20:37:17", "url": "https://files.pythonhosted.org/packages/d1/4a/7f03c89f458b82911ae5deea86e0359496e05079a876badaa4a3ab64917f/cloudevents-0.0.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bf3c5f49368b6b0302107bee5d458240", "sha256": "053e0707cedbaab215357c6923d560c3046af6a9e16f63a86fb4090969aef4a7" }, "downloads": -1, "filename": "cloudevents-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bf3c5f49368b6b0302107bee5d458240", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21010, "upload_time": "2018-12-09T00:10:27", "url": "https://files.pythonhosted.org/packages/af/6f/4caa949a38b5bfa249ecbbc8897279d5d96e67d430d4c43e9801c13b6c70/cloudevents-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b7c20f876b49a33feea264a01b8ccb15", "sha256": "7a4344cf5a50c6d0fadccc4c15724427c33b8e8363de761ec483acac20e281f2" }, "downloads": -1, "filename": "cloudevents-0.2.0.tar.gz", "has_sig": false, "md5_digest": "b7c20f876b49a33feea264a01b8ccb15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 188157, "upload_time": "2018-12-09T00:10:28", "url": "https://files.pythonhosted.org/packages/17/a4/8179f01668bd12b756a1b8be6ac50e7856e176d44a57a91ad7009bb91d71/cloudevents-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "fc837c8f8c876c05747ea0e98e86f120", "sha256": "76098a6a8a5820fcc5e0ac8be47b94826f7238980ecf3f010fa35a29941c06c6" }, "downloads": -1, "filename": "cloudevents-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fc837c8f8c876c05747ea0e98e86f120", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22342, "upload_time": "2019-01-16T15:00:49", "url": "https://files.pythonhosted.org/packages/6e/57/0c7ccf493eef7f42536562ddf36f565396412247b20a3096ff6e7243d0c9/cloudevents-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2378c30956573a4f41a56315facbf0af", "sha256": "2d8c24e116f35b8087e7c5cc853c2c25c756fd74ba0ecb18084444e7a72e0006" }, "downloads": -1, "filename": "cloudevents-0.2.1.tar.gz", "has_sig": false, "md5_digest": "2378c30956573a4f41a56315facbf0af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 190594, "upload_time": "2019-01-16T15:00:52", "url": "https://files.pythonhosted.org/packages/dc/05/a9234df42faaad83c1ee76750e50ebe34127923df1da00dedc626aafa089/cloudevents-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6313245cc5d17727a5335cc5b0a84e0d", "sha256": "8cc437b98aba1a820e082c9e484632ae5e6ede3507053328a88d122decc4bff8" }, "downloads": -1, "filename": "cloudevents-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6313245cc5d17727a5335cc5b0a84e0d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23431, "upload_time": "2019-01-17T00:28:11", "url": "https://files.pythonhosted.org/packages/ea/17/e641056f34a04b9abd1005bb2c9525cc7130765ff25d5cb5dffbd5097dc4/cloudevents-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "609cb5e325018a84d5e1a8eff66dc846", "sha256": "3f0a8d2474cdaffc5ee2e09d1af7f87f1ad47edc1bf93b439dcb2908f5ee37f5" }, "downloads": -1, "filename": "cloudevents-0.2.2.tar.gz", "has_sig": false, "md5_digest": "609cb5e325018a84d5e1a8eff66dc846", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 191166, "upload_time": "2019-01-17T00:28:14", "url": "https://files.pythonhosted.org/packages/f8/c9/0c39b0abb6c9a2314912057dec97cded9b36834368bb4da3b71d17870adf/cloudevents-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "b864acdfaa4071927ab6f15df8b16424", "sha256": "bd03ee805e31ca392592e97c05bab278546aca01aad5bb735c029b03a18c44f9" }, "downloads": -1, "filename": "cloudevents-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b864acdfaa4071927ab6f15df8b16424", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23443, "upload_time": "2019-04-20T08:18:25", "url": "https://files.pythonhosted.org/packages/d2/00/eb40de9e1a0ff393c84a58a43c009a1623cc9fb32c9c38b388e153b7d40c/cloudevents-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "caf2a112789c56a59a9deb783e114052", "sha256": "7b5974b0df4ca47a277f3930f7dba4a008ad9873408d800f0d6c8e7963f0afae" }, "downloads": -1, "filename": "cloudevents-0.2.3.tar.gz", "has_sig": false, "md5_digest": "caf2a112789c56a59a9deb783e114052", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 191228, "upload_time": "2019-04-20T08:18:27", "url": "https://files.pythonhosted.org/packages/0c/45/ccdb1eea75c8fdff25ee2422da81b68fe878a0072c072144354eafb70c37/cloudevents-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "517d818cb69b5920e5abd504bc733c13", "sha256": "a3508bd57417038849d16ad11aa7c3bd3495eeac968f244ea9fc1329f6323e7f" }, "downloads": -1, "filename": "cloudevents-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "517d818cb69b5920e5abd504bc733c13", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23469, "upload_time": "2019-06-07T12:47:20", "url": "https://files.pythonhosted.org/packages/c5/ea/fd7579bc63cb8d6462fa6d53d7cdb8592296de1fc01a8aeba29d63f87863/cloudevents-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c199282208569f134abac43d4a4fd08", "sha256": "18c547e8e15b6e196d0913f39fbbff28e2862715e463f07f86a460da1281518d" }, "downloads": -1, "filename": "cloudevents-0.2.4.tar.gz", "has_sig": false, "md5_digest": "3c199282208569f134abac43d4a4fd08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 191287, "upload_time": "2019-06-07T12:47:23", "url": "https://files.pythonhosted.org/packages/91/d6/29fcca5f96fccb4c0c74dac100a78d7c0bbddacd8027f02f2de5bcede1e1/cloudevents-0.2.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "517d818cb69b5920e5abd504bc733c13", "sha256": "a3508bd57417038849d16ad11aa7c3bd3495eeac968f244ea9fc1329f6323e7f" }, "downloads": -1, "filename": "cloudevents-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "517d818cb69b5920e5abd504bc733c13", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23469, "upload_time": "2019-06-07T12:47:20", "url": "https://files.pythonhosted.org/packages/c5/ea/fd7579bc63cb8d6462fa6d53d7cdb8592296de1fc01a8aeba29d63f87863/cloudevents-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c199282208569f134abac43d4a4fd08", "sha256": "18c547e8e15b6e196d0913f39fbbff28e2862715e463f07f86a460da1281518d" }, "downloads": -1, "filename": "cloudevents-0.2.4.tar.gz", "has_sig": false, "md5_digest": "3c199282208569f134abac43d4a4fd08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 191287, "upload_time": "2019-06-07T12:47:23", "url": "https://files.pythonhosted.org/packages/91/d6/29fcca5f96fccb4c0c74dac100a78d7c0bbddacd8027f02f2de5bcede1e1/cloudevents-0.2.4.tar.gz" } ] }