{ "info": { "author": "Funding Options", "author_email": "techsupport@fundingoptions.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License" ], "description": "# BlueJay Client\n\nThis is a thin client library for sending events to the BlueJay service.\n\n## Backends\n\n### SNS\n\nBlueJay can currently receive events using AWS SNS.\n\nYou must provide access to Publish SNS requests. An example policy is:\n\n```tf\ndata \"aws_iam_policy_document\" \"bluejay-events\" {\n statement {\n actions = [\n \"sns:Publish\",\n ]\n resources = [\n \"arn:aws:sns:::\"\n ]\n }\n}\n```\n\n### Logging\n\nWe provide a Logging backend, for use in development.\n\nPython `logging` is used, with a name of `bluejay.backend.logging`, and will output at the\n`INFO` level to stdout by default.\nYou can configure the logging in 2 ways:\n\n- Changing your central logging config\n- Providing a custom Logging class\n\n\n## Usage\n\n```py\nimport bluejay\n## SNS\n\ntopic_arn = ''\nbackend = bluejay.backend.SNSBackend.build(topic_arn=topic_arn)\n### OR\nbackend = bluejay.backend.SNSBackend(client=boto3.client('sns'), topic_arn=topic_arn)\n\n## Logging\n\nbackend = bluejay.backend.LoggingBackend()\n### OR\nbackend = bleujay.backend.LoggingBackend(logger=logging.getLogger())\n\n# Client\nclient = bluejay.Client(backend=backend)\n\nclient.send(bluejay.event.AppReceived(\n app_id='1234-45676',\n occurred_on=datetime.datetime.now(),\n))\n```\n\n## Events\n\nEvents are described in `bluejay.events`, as well as in the `/schemas` directory in the BlueJay Receiver repo.\n\nThe code uses `attrs` for constructing objects, so everything you need to know (attributes, types) is very clear.\n\n## Sending Raw data\n\nDon't like using our Event objects? You can send the data in\na raw form if you so wish.\n\n```py\nclient.send_raw(event_name=\"custom-event\", message={\n \"app_id\": \"1234-1234\",\n \"occurred_on\": datetime.datetime.now(),\n})\n```\n\n## Using the Backend directly\n\nNot expecting this to be an actual usecase, but it's useful to know.\n\nThe backend receives a \"command\" object, `bluejay.backend.command.SendEvent`.\nIn reality, you can send any object in, for instance, this will work:\n\n```py\nclass Event:\n pass\ne = Event()\ne.payload = {'app_id': '1234-1234', 'occurred_on': dt}\ne.event_name = 'application_received'\nbackend.send(e)\n```\n\nThe backend is responsible for taking an event (made of an event name, and a payload), encoding it, and sending it to wherever.\n\nIn our case, we JSON encode the payload, including transforming datetime objects to RFC3339 compliant date strings.\n\n## Testing\n\nPytest is used as the testing framework, and tests are structured to loosely define the behaviour of what each component does.\n\nCoverage reports are generated in an effort to identify untested code.\nRemember that your tests are **not** complete until all your expected behaviours are covered.\n\nIn CI, `tox` is used to ensure we work across Python 3.5-3.9.\n\nIn development, you can run `make test`, which is the equivilant of running `python -m pytest`\n\n## Linting\n\n4 linting tools are used in this project:\n\n- `black`, for the unforgiving formatting capabilities.\n If you wish to disobey it, make sure you document why in each case.\n- `autoflake`, dead import/code removal\n- `isort`, Order is key\n- `mypy`, To make sure our components can interact with each other, and to aid IDEs and Mypy users with the development flows. Tests are not currently covered.\n\nThe bulk of the linting can be adhered to by running `make autofix`.\n\nYou can lint your code by running `make lint`.\n\n## Publishing\n\nWe use [flit][flit] for publishing to the PyPI.\n\nBy default, we publish to the test PyPI. This is to prevent accidental publishing.\n\nYou need to configure your `~/.pypirc` file. An example is:\n\n```ini\n[distutils]\nindex-servers =\n pypi\n testpypi\n\n[pypi]\nrepository = https://upload.pypi.org/legacy/\n\n[testpypi]\nrepository = https://test.pypi.org/legacy/\n```\n\nTo do an actual publish, run `PYPI_INDEX_NAME=pypi make publish`.\nThis will guide you through the process.\n\n\n[flit]: https://flit.readthedocs.io/\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/FundingOptions/bluejay-client", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "fundingoptions-bluejay", "package_url": "https://pypi.org/project/fundingoptions-bluejay/", "platform": "", "project_url": "https://pypi.org/project/fundingoptions-bluejay/", "project_urls": { "Homepage": "https://github.com/FundingOptions/bluejay-client" }, "release_url": "https://pypi.org/project/fundingoptions-bluejay/0.3.0/", "requires_dist": [ "attrs", "typing_extensions", "black ; extra == \"dev\"", "isort ; extra == \"dev\"", "autoflake ; extra == \"dev\"", "mypy ; extra == \"dev\"", "tox ; extra == \"dev\"", "boto3 ; extra == \"sns\"", "faker ; extra == \"test\"", "pytest ; extra == \"test\"", "pytest-cov ; extra == \"test\"", "pytest-randomly ; extra == \"test\"" ], "requires_python": ">=3.5", "summary": "The BlueJay Client", "version": "0.3.0", "yanked": false, "yanked_reason": null }, "last_serial": 12225700, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "9ebe1bf27b9915f54c296faa63b8430b", "sha256": "faad11c0574cbf31912d89648e2eaaf05e478f0cd82d15dd05baa5a4cbbfc045" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9ebe1bf27b9915f54c296faa63b8430b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10374, "upload_time": "2019-09-23T09:35:39", "upload_time_iso_8601": "2019-09-23T09:35:39.651683Z", "url": "https://files.pythonhosted.org/packages/cf/36/661d5e0c8fde25f484fc9f4118b18c0fbe4ebcdf959b735565c75f709b5d/fundingoptions_bluejay-0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "59ffcca894b9785057a9202b4f2d1cfa", "sha256": "69321457b7b8fd5f437df53c7ad6f9fe1ad713b58b5661e0bda326a6801f78ed" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.1.tar.gz", "has_sig": false, "md5_digest": "59ffcca894b9785057a9202b4f2d1cfa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10123, "upload_time": "2019-09-23T09:35:48", "upload_time_iso_8601": "2019-09-23T09:35:48.783671Z", "url": "https://files.pythonhosted.org/packages/5d/d8/fef6d377915edd387618300ee433144e9303280a24642869565633e3ee61/fundingoptions-bluejay-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "6b6cf8ee0b5e02d9e5636ce812b43946", "sha256": "770dd269c50368ecedab7abf9fb94232d160f41b78b82e512f8504ff0c6fac3c" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6b6cf8ee0b5e02d9e5636ce812b43946", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10394, "upload_time": "2019-09-23T14:39:51", "upload_time_iso_8601": "2019-09-23T14:39:51.342776Z", "url": "https://files.pythonhosted.org/packages/60/46/038c501c19370db588fed20c89e49aadc230680037b220e54d5fde866441/fundingoptions_bluejay-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2402af868b3c9e22e07434f1f57c4f8d", "sha256": "d0145e4a40d62c14c928cc567aee9efe41d39d8fea6955d41d66ac3c992024cb" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2402af868b3c9e22e07434f1f57c4f8d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 9524, "upload_time": "2019-09-23T14:40:00", "upload_time_iso_8601": "2019-09-23T14:40:00.042784Z", "url": "https://files.pythonhosted.org/packages/44/3a/cecc1ca8d7c5fcec8ca1cc7f87148b6afda04104420f91b1f1a0938ede68/fundingoptions-bluejay-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b6818a047b083b50a10bf5d6eb9abf64", "sha256": "75ed174c8b467a67341b7bc76a20a66c8bf975b2b9cd919a9aaad2e751daf048" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b6818a047b083b50a10bf5d6eb9abf64", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10479, "upload_time": "2019-09-25T14:10:12", "upload_time_iso_8601": "2019-09-25T14:10:12.698168Z", "url": "https://files.pythonhosted.org/packages/35/0e/f740985f47378b4254e0eb8492b6bc136bf0e39ad83f070a98cdf4c5b615/fundingoptions_bluejay-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6566258064f0437076c413e76a096abd", "sha256": "10d20a98a7b2b57ba1a7a72c69bdbeaa37105a42d2504269b0fd003a7c703ad7" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6566258064f0437076c413e76a096abd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 9967, "upload_time": "2019-09-25T14:10:28", "upload_time_iso_8601": "2019-09-25T14:10:28.134792Z", "url": "https://files.pythonhosted.org/packages/31/4c/bc8aefb49e1a3cb3a38d0ca44b45210cdef0f67d206b0fc8a35b359950e1/fundingoptions-bluejay-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "09b44ac7380aae4f631a77ca59c8f7f2", "sha256": "bc35be4671b69b59af86e4473de60a3cbc230879d1114ad202ca3d9c2ba070e3" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "09b44ac7380aae4f631a77ca59c8f7f2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10543, "upload_time": "2019-09-26T14:55:57", "upload_time_iso_8601": "2019-09-26T14:55:57.920791Z", "url": "https://files.pythonhosted.org/packages/2e/19/e71d55549f1f64dd53d4515b2adf1fd747d952c8b0e707bb8db03224fb40/fundingoptions_bluejay-0.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c3307782c5e50f9c690ddbee39feb9cb", "sha256": "edeaa36588fff1a322c265c75703216422df049dcd36ec253117b98693f3800c" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c3307782c5e50f9c690ddbee39feb9cb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10045, "upload_time": "2019-09-26T14:56:07", "upload_time_iso_8601": "2019-09-26T14:56:07.662782Z", "url": "https://files.pythonhosted.org/packages/ce/41/8a02effedad0607aff26701df59dc6b448a2c3e28a3e1fdd7d8daa917a23/fundingoptions-bluejay-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f8d49c2377f51380ecaa73a2a32ebbae", "sha256": "ce657ad15fd2de5952da9b60519edeb61d53ea11bb3ea13f8340a3e7f274f6f0" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f8d49c2377f51380ecaa73a2a32ebbae", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10820, "upload_time": "2019-10-28T12:32:53", "upload_time_iso_8601": "2019-10-28T12:32:53.750786Z", "url": "https://files.pythonhosted.org/packages/db/59/c1cb64b528adb81d37e60da553ef0039170fcd7ffcd93cf95c0594b61a07/fundingoptions_bluejay-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7916e040cc4e6148883d8806b56830c9", "sha256": "43aa104412122e07c86a36893d5b4c6276a28d9fefa61aeed7803218ee54c9ec" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.2.0.tar.gz", "has_sig": false, "md5_digest": "7916e040cc4e6148883d8806b56830c9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10181, "upload_time": "2019-10-28T12:33:06", "upload_time_iso_8601": "2019-10-28T12:33:06.642041Z", "url": "https://files.pythonhosted.org/packages/dd/7e/cb73d17dadb0c5cfc517013cd10bc680bcc98aee0724dd4aed1c07c06073/fundingoptions-bluejay-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "05a536a0f4af33a28da88554ec337cc4", "sha256": "a993dcc2cd136a41392675f9a2c109a964667d2d06b41dcb498a8e4a18667fb1" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "05a536a0f4af33a28da88554ec337cc4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 10781, "upload_time": "2019-10-30T14:17:30", "upload_time_iso_8601": "2019-10-30T14:17:30.716273Z", "url": "https://files.pythonhosted.org/packages/4c/e6/4e2f26fad1770fbc126a74005af91787693fb56e37c5fac026df0ccb571c/fundingoptions_bluejay-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4d2a0e2da4aec51645ca8c30c72675d4", "sha256": "183c8296f698584fc6e05951d4c162dc47957b3c11c0237f2100ecc581e27f4b" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.2.1.tar.gz", "has_sig": false, "md5_digest": "4d2a0e2da4aec51645ca8c30c72675d4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10157, "upload_time": "2019-10-30T14:17:37", "upload_time_iso_8601": "2019-10-30T14:17:37.966310Z", "url": "https://files.pythonhosted.org/packages/bf/3f/bc804c8bde00d12fcf1a3569714a7c1a0dea1bcf719b5c92f5b8ad664291/fundingoptions-bluejay-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "ff33113fc7397facd6a3a011dc9981f8", "sha256": "869cf15936e919c479a0768eba934453a145f88bb34e4c1e80db3b7365cc018a" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ff33113fc7397facd6a3a011dc9981f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 7651, "upload_time": "2021-04-05T13:36:22", "upload_time_iso_8601": "2021-04-05T13:36:22.501054Z", "url": "https://files.pythonhosted.org/packages/1f/f8/c649b763b97c85d3f7af5a8fe117929c243f6037a0279bf3ea7ce29a6b14/fundingoptions_bluejay-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0d4da54ff1410739f41e31e526338db3", "sha256": "296b458724478c9ac70393b4f0218f6b4d3634790c7723fde7cd30ade352c36f" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0d4da54ff1410739f41e31e526338db3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10206, "upload_time": "2021-04-05T13:36:24", "upload_time_iso_8601": "2021-04-05T13:36:24.133061Z", "url": "https://files.pythonhosted.org/packages/31/b2/11ebac819fe465b695b71a0ecdd40e0dba0503cf2e9a2462b4ca08492ffd/fundingoptions-bluejay-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ff33113fc7397facd6a3a011dc9981f8", "sha256": "869cf15936e919c479a0768eba934453a145f88bb34e4c1e80db3b7365cc018a" }, "downloads": -1, "filename": "fundingoptions_bluejay-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ff33113fc7397facd6a3a011dc9981f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 7651, "upload_time": "2021-04-05T13:36:22", "upload_time_iso_8601": "2021-04-05T13:36:22.501054Z", "url": "https://files.pythonhosted.org/packages/1f/f8/c649b763b97c85d3f7af5a8fe117929c243f6037a0279bf3ea7ce29a6b14/fundingoptions_bluejay-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0d4da54ff1410739f41e31e526338db3", "sha256": "296b458724478c9ac70393b4f0218f6b4d3634790c7723fde7cd30ade352c36f" }, "downloads": -1, "filename": "fundingoptions-bluejay-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0d4da54ff1410739f41e31e526338db3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 10206, "upload_time": "2021-04-05T13:36:24", "upload_time_iso_8601": "2021-04-05T13:36:24.133061Z", "url": "https://files.pythonhosted.org/packages/31/b2/11ebac819fe465b695b71a0ecdd40e0dba0503cf2e9a2462b4ca08492ffd/fundingoptions-bluejay-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }