{ "info": { "author": "Nathan Van Gheem", "author_email": "vangheem@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python :: 3" ], "description": "A Python structured logger for Fluentd\n======================================\n\nWARNING: This is a fork of the https://github.com/fluent/fluent-logger-python\nproject to work with asyncio.\n\n\nMany web/mobile applications generate huge amount of event logs (c,f.\nlogin, logout, purchase, follow, etc). To analyze these event logs could\nbe really valuable for improving the service. However, the challenge is\ncollecting these logs easily and reliably.\n\n`Fluentd `__ solves that problem by\nhaving: easy installation, small footprint, plugins, reliable buffering,\nlog forwarding, etc.\n\n**aiofluent** is a Python library, to record the events from\nPython application.\n\nRequirements\n------------\n\n- Python 3.5 or greater\n- ``msgpack-python``\n\nInstallation\n------------\n\nThis library is distributed as 'aiofluent' python package. Please\nexecute the following command to install it.\n\n.. code:: sh\n\n $ pip install aiofluent\n\nConfiguration\n-------------\n\nFluentd daemon must be launched with a tcp source configuration:\n\n::\n\n \n type forward\n port 24224\n \n\nTo quickly test your setup, add a matcher that logs to the stdout:\n\n::\n\n \n type stdout\n \n\nUsage\n-----\n\nFluentSender Interface\n~~~~~~~~~~~~~~~~~~~~~~\n\n`sender.FluentSender` is a structured event logger for Fluentd.\n\nBy default, the logger assumes fluentd daemon is launched locally. You\ncan also specify remote logger by passing the options.\n\n.. code:: python\n\n from aiofluent import sender\n\n # for local fluent\n logger = sender.FluentSender('app')\n\n # for remote fluent\n logger = sender.FluentSender('app', host='host', port=24224)\n\nFor sending event, call `emit` method with your event. Following example will send the event to\nfluentd, with tag 'app.follow' and the attributes 'from' and 'to'.\n\n.. code:: python\n\n # Use current time\n logger.emit('follow', {'from': 'userA', 'to': 'userB'})\n\n # Specify optional time\n cur_time = int(time.time())\n logger.emit_with_time('follow', cur_time, {'from': 'userA', 'to':'userB'})\n\nYou can detect an error via return value of `emit`. If an error happens in `emit`, `emit` returns `False` and get an error object using `last_error` method.\n\n.. code:: python\n\n if not logger.emit('follow', {'from': 'userA', 'to': 'userB'}):\n print(logger.last_error)\n logger.clear_last_error() # clear stored error after handled errors\n\nIf you want to shutdown the client, call `close()` method.\n\n.. code:: python\n\n logger.close()\n\nEvent-Based Interface\n~~~~~~~~~~~~~~~~~~~~~\n\nThis API is a wrapper for `sender.FluentSender`.\n\nFirst, you need to call ``sender.setup()`` to create global `sender.FluentSender` logger\ninstance. This call needs to be called only once, at the beginning of\nthe application for example.\n\nInitialization code of Event-Based API is below:\n\n.. code:: python\n\n from aiofluent import sender\n\n # for local fluent\n sender.setup('app')\n\n # for remote fluent\n sender.setup('app', host='host', port=24224)\n\nThen, please create the events like this. This will send the event to\nfluentd, with tag 'app.follow' and the attributes 'from' and 'to'.\n\n.. code:: python\n\n from aiofluent import event\n\n # send event to fluentd, with 'app.follow' tag\n event.Event('follow', {\n 'from': 'userA',\n 'to': 'userB'\n })\n\n`event.Event` has one limitation which can't return success/failure result.\n\nOther methods for Event-Based Interface.\n\n.. code:: python\n\n sender.get_global_sender # get instance of global sender\n sender.close # Call FluentSender#close\n\nHandler for buffer overflow\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can inject your own custom proc to handle buffer overflow in the event of connection failure. This will mitigate the loss of data instead of simply throwing data away.\n\n.. code:: python\n\n import msgpack\n from io import BytesIO\n\n def handler(pendings):\n unpacker = msgpack.Unpacker(BytesIO(pendings))\n for unpacked in unpacker:\n print(unpacked)\n\n logger = sender.FluentSender('app', host='host', port=24224, buffer_overflow_handler=handler)\n\nYou should handle any exception in handler. aiofluent ignores exceptions from ``buffer_overflow_handler``.\n\nThis handler is also called when pending events exist during `close()`.\n\nPython logging.Handler interface\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis client-library also has ``FluentHandler`` class for Python logging\nmodule.\n\n.. code:: python\n\n import logging\n from aiofluent import handler\n\n custom_format = {\n 'host': '%(hostname)s',\n 'where': '%(module)s.%(funcName)s',\n 'type': '%(levelname)s',\n 'stack_trace': '%(exc_text)s'\n }\n\n logging.basicConfig(level=logging.INFO)\n l = logging.getLogger('fluent.test')\n h = handler.FluentHandler('app.follow', host='host', port=24224)\n formatter = handler.FluentRecordFormatter(custom_format)\n h.setFormatter(formatter)\n l.addHandler(h)\n l.info({\n 'from': 'userA',\n 'to': 'userB'\n })\n l.info('{\"from\": \"userC\", \"to\": \"userD\"}')\n l.info(\"This log entry will be logged with the additional key: 'message'.\")\n\nYou can also customize formatter via logging.config.dictConfig\n\n.. code:: python\n\n import logging.config\n import yaml\n\n with open('logging.yaml') as fd:\n conf = yaml.load(fd)\n\n logging.config.dictConfig(conf['logging'])\n\nA sample configuration ``logging.yaml`` would be:\n\n.. code:: python\n\n logging:\n version: 1\n\n formatters:\n brief:\n format: '%(message)s'\n default:\n format: '%(asctime)s %(levelname)-8s %(name)-15s %(message)s'\n datefmt: '%Y-%m-%d %H:%M:%S'\n fluent_fmt:\n '()': fluent.handler.FluentRecordFormatter\n format:\n level: '%(levelname)s'\n hostname: '%(hostname)s'\n where: '%(module)s.%(funcName)s'\n\n handlers:\n console:\n class : logging.StreamHandler\n level: DEBUG\n formatter: default\n stream: ext://sys.stdout\n fluent:\n class: fluent.handler.FluentHandler\n host: localhost\n port: 24224\n tag: test.logging\n formatter: fluent_fmt\n level: DEBUG\n none:\n class: logging.NullHandler\n\n loggers:\n amqp:\n handlers: [none]\n propagate: False\n conf:\n handlers: [none]\n propagate: False\n '': # root logger\n handlers: [console, fluent]\n level: DEBUG\n propagate: False\n\nLicense\n-------\n\nApache License, Version 2.0\n\n\n1.2.3 (2019-04-01)\n------------------\n\n- Fix release\n\n\n1.2.2 (2019-04-01)\n------------------\n\n- nanosecond_precision by default\n [davidonna]\n\n1.2.1 (2018-10-31)\n------------------\n\n- Add support for nanosecond precision timestamps\n [davidonna]\n\n1.2.0 (2018-06-14)\n------------------\n\n- Maintain one AsyncIO queue for all logs\n [vangheem]\n\n1.1.4 (2018-05-29)\n------------------\n\n- Handle RuntimeError on canceling tasks/cleanup\n [vangheem]\n\n\n1.1.3 (2018-02-15)\n------------------\n\n- Lock calling the close method of sender\n [vangheem]\n\n- Increase default timeout\n [vangheem]\n\n\n1.1.2 (2018-02-07)\n------------------\n\n- lock the whole method\n [vangheem]\n\n\n1.1.1 (2018-02-07)\n------------------\n\n- Use lock on getting connection object\n [vangheem]\n\n\n1.1.0 (2018-01-25)\n------------------\n\n- Move to using asyncio connection infrastructure instead of sockets\n [vangheem]\n\n\n1.0.8 (2018-01-04)\n------------------\n\n- Always close out buffer data\n [vangheem]\n\n\n1.0.7 (2018-01-04)\n------------------\n\n- Handle errors processing log queue\n [vangheem]\n\n\n1.0.6 (2017-11-14)\n------------------\n\n- Prevent log queue from getting too large\n [vangheem]\n\n\n1.0.5 (2017-10-17)\n------------------\n\n- Fix release to include CHANGELOG.rst file\n [vangheem]\n\n\n1.0.4 (2017-10-10)\n------------------\n\n- Fix pushing initial record\n\n\n1.0.3 (2017-10-10)\n------------------\n\n- Handle Runtime error when logging done before event loop started\n [vangheem]\n\n\n1.0.2 (2017-10-09)\n------------------\n\n- Fix to make normal logging call async\n [vangheem]\n\n\n1.0.1 (2017-07-03)\n------------------\n\n- initial release\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "http://pypi.python.org/pypi/aiofluent/", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/onna/aiofluent", "keywords": "", "license": "Apache License, Version 2.0", "maintainer": "", "maintainer_email": "", "name": "aiofluent", "package_url": "https://pypi.org/project/aiofluent/", "platform": "", "project_url": "https://pypi.org/project/aiofluent/", "project_urls": { "Download": "http://pypi.python.org/pypi/aiofluent/", "Homepage": "https://github.com/onna/aiofluent" }, "release_url": "https://pypi.org/project/aiofluent/1.2.3/", "requires_dist": [ "msgpack-python", "pytest (>=3.8.0) ; extra == 'test'", "pytest-asyncio (>=0.10.0) ; extra == 'test'", "pytest-cov ; extra == 'test'", "coverage (>=4.0.3) ; extra == 'test'" ], "requires_python": "", "summary": "A Python logging handler for Fluentd event collector", "version": "1.2.3" }, "last_serial": 5022460, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "1b9ea45e88c87803c9a9436a394e1aa7", "sha256": "f5877daad17ba0453ea1622652d4a34fbc100c55dd66328d47779de487d31cb9" }, "downloads": -1, "filename": "aiofluent-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1b9ea45e88c87803c9a9436a394e1aa7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10641, "upload_time": "2017-07-03T15:33:50", "url": "https://files.pythonhosted.org/packages/a1/2c/c585b1986d24bd6d9a99f9d3811221d13c3016ef38b33d337a3b400df5a7/aiofluent-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56135229f4536e347cdbfa0e4d8d16b4", "sha256": "24180d3712debb87c6e5f370dcf5044642fc03c5ceb39d7858831b746b8c2703" }, "downloads": -1, "filename": "aiofluent-1.0.0.tar.gz", "has_sig": false, "md5_digest": "56135229f4536e347cdbfa0e4d8d16b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9661, "upload_time": "2017-07-03T15:33:51", "url": "https://files.pythonhosted.org/packages/25/3d/93840b4b9234515005318a764c0d57139bf23c1f4d44fb7e22bcc6c2771a/aiofluent-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2934f113e9c0c0bb5441968b2bd0e4bf", "sha256": "63e0c2911a1a5fc242ee84fd76e26b840ceecc6d7fd77c3c3bee81814df3710e" }, "downloads": -1, "filename": "aiofluent-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2934f113e9c0c0bb5441968b2bd0e4bf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10658, "upload_time": "2017-07-03T15:53:53", "url": "https://files.pythonhosted.org/packages/b1/6a/df085b2cf1c034ab73c92edb6ae5ad1b36995f96a89f5eae1842585e5033/aiofluent-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0074dad0b74ebfa948f00daaa2cbcd4", "sha256": "1312a53b9c87caaf12d6d4488b242c8a11443362e5c253deccd5249aba2bfea1" }, "downloads": -1, "filename": "aiofluent-1.0.1.tar.gz", "has_sig": false, "md5_digest": "d0074dad0b74ebfa948f00daaa2cbcd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9651, "upload_time": "2017-07-03T15:53:54", "url": "https://files.pythonhosted.org/packages/dc/ed/2d89bec9afcb3bc08fac7cd68babe6980ef3682d5b8cfcf2d6441bd85b8e/aiofluent-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "fbd4ad86ee3f887bacc944f075b5a67f", "sha256": "37772de06053258cb22d7a2100b04d1f05ff865d29e2cc1ad2d89f69e824484d" }, "downloads": -1, "filename": "aiofluent-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fbd4ad86ee3f887bacc944f075b5a67f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10899, "upload_time": "2017-10-09T15:47:17", "url": "https://files.pythonhosted.org/packages/c6/bf/0f7f27440902db50812dfd592140ca3c31fb6efb6a047f0887f31238eeca/aiofluent-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d08cea912efa1d2fc6a7fd8e37ecc3bd", "sha256": "c20042f43bd6aec221e83bd6d6de6b9f4e24cd52e7a5ed756ef654254973e267" }, "downloads": -1, "filename": "aiofluent-1.0.2.tar.gz", "has_sig": false, "md5_digest": "d08cea912efa1d2fc6a7fd8e37ecc3bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9947, "upload_time": "2017-10-09T15:47:18", "url": "https://files.pythonhosted.org/packages/57/43/dc3205eea0770bbf2e2c336f28d82ac4351584b8d96d10c2a77f8a25a950/aiofluent-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "1af9632bc2be4bfcc90d8135f2492d73", "sha256": "08b9834c12dcdc4b199785a495fdd1d35c2895b4cb342572dccacc4885ccb58b" }, "downloads": -1, "filename": "aiofluent-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1af9632bc2be4bfcc90d8135f2492d73", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11015, "upload_time": "2017-10-10T09:47:37", "url": "https://files.pythonhosted.org/packages/5f/a0/df5ac433ce53f98fec7245e65cd205f3a791d6ace614ae9a17f80c3b1af5/aiofluent-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5cc3bee6a34e657921e664f159ac32a2", "sha256": "87615cdd05d6371cc33996f931f3185e743b67cf21dce8ec6d75270340846f7f" }, "downloads": -1, "filename": "aiofluent-1.0.3.tar.gz", "has_sig": false, "md5_digest": "5cc3bee6a34e657921e664f159ac32a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10000, "upload_time": "2017-10-10T09:47:39", "url": "https://files.pythonhosted.org/packages/72/6e/47891e25f57de3ea97aae3862c3a214e40af80769dd27b37cecca6be4ce8/aiofluent-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "3624dea7a586939c3898a3aa3d86c212", "sha256": "9db832941ada68a0f73c1e257cc447245cfa3029294205c1b78441186f8d78a8" }, "downloads": -1, "filename": "aiofluent-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3624dea7a586939c3898a3aa3d86c212", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11045, "upload_time": "2017-10-10T16:28:53", "url": "https://files.pythonhosted.org/packages/6f/83/100c288142a9c004e370809ae833d528e7a511b7e9ec415e94a47938fcd7/aiofluent-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1a8f244a78bf49e04dfd8fde3a97e8b", "sha256": "bc1abe78291447c226d578e7a78d8e3db83d8a8a10be11c5e777fcccb9e2fe08" }, "downloads": -1, "filename": "aiofluent-1.0.4.tar.gz", "has_sig": false, "md5_digest": "b1a8f244a78bf49e04dfd8fde3a97e8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10031, "upload_time": "2017-10-10T16:28:55", "url": "https://files.pythonhosted.org/packages/a1/f3/a7156f155983c02c524042b4a3690e624996e023c92ee39ec812b7dd103d/aiofluent-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "bec82ed79efc91aa5163a83670acbbb8", "sha256": "2643f015118f131062cfdfda48932c70e1be3819252d656479be8177d74557a8" }, "downloads": -1, "filename": "aiofluent-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bec82ed79efc91aa5163a83670acbbb8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11118, "upload_time": "2017-10-17T10:14:03", "url": "https://files.pythonhosted.org/packages/a0/38/b761396735dd0c0b397d32a54f37340556f2dc2f1992183e3b0a53f607ad/aiofluent-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b01e333afba30b4a5cc8a53e7929d78", "sha256": "f3fab4d5b565289a7b5463120a574f45c8c06090bfbe1d620a58509cc77eb905" }, "downloads": -1, "filename": "aiofluent-1.0.5.tar.gz", "has_sig": false, "md5_digest": "7b01e333afba30b4a5cc8a53e7929d78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10135, "upload_time": "2017-10-17T10:14:04", "url": "https://files.pythonhosted.org/packages/cb/b5/c9b6b0f8ddfa2819aff42d352089722e725eb60d012943b388f437d6f735/aiofluent-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "e4b9423ea5d05dbd3c3a3435192a4589", "sha256": "aaf782848e20b7cd596ea7374377adcc5ca1918c7fad9adbe1439efda96e2c1e" }, "downloads": -1, "filename": "aiofluent-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e4b9423ea5d05dbd3c3a3435192a4589", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11387, "upload_time": "2017-11-14T20:04:42", "url": "https://files.pythonhosted.org/packages/fd/27/08c706d5fc957b7b8c8a2df31a4e70d45c8f777756f3763a2966c59ddc7d/aiofluent-1.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd69f844139d9074752ef5ee5151a480", "sha256": "22bb76629b6c51c0100b5ec392d643b96be1eeb00161bd161e726e45319bc785" }, "downloads": -1, "filename": "aiofluent-1.0.6.tar.gz", "has_sig": false, "md5_digest": "bd69f844139d9074752ef5ee5151a480", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10326, "upload_time": "2017-11-14T20:04:44", "url": "https://files.pythonhosted.org/packages/41/b9/5ba7871d9dc3b8874bfa2ab83d7c7a126172ecd50420671c25a02bf64c09/aiofluent-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "0058632c52b041bf32f46e14c44fb4a8", "sha256": "31e7e431c40d0380b706a68bc34fed347061f9b02f71949e8b19f906764d03a5" }, "downloads": -1, "filename": "aiofluent-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0058632c52b041bf32f46e14c44fb4a8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11374, "upload_time": "2018-01-04T13:44:50", "url": "https://files.pythonhosted.org/packages/f9/d1/78502e11d1f174769ef355654693bbcf36e2eaa779cc5dc075123f29291f/aiofluent-1.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a898ab2b151cc7edda86af644502ebf6", "sha256": "574fd29421bc1b5f66b3828152927eeca8c2ca996bc9f36e12a40e3c37d27cb1" }, "downloads": -1, "filename": "aiofluent-1.0.7.tar.gz", "has_sig": false, "md5_digest": "a898ab2b151cc7edda86af644502ebf6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12709, "upload_time": "2018-01-04T13:44:53", "url": "https://files.pythonhosted.org/packages/3b/db/62922335e3bb2e5eb90b20b88aeebd917f8018bcb1d57203129a7a21bcf4/aiofluent-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "05f29d9e60773518ccdc40f0ada42a86", "sha256": "2dd612bd6f58659352305bfd0401afe627ee3ac4ffb11a4cb9b45f87a5cd595d" }, "downloads": -1, "filename": "aiofluent-1.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "05f29d9e60773518ccdc40f0ada42a86", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11500, "upload_time": "2018-01-04T16:35:56", "url": "https://files.pythonhosted.org/packages/92/8a/64a1d726eda434c52a4acdf14eff77cbff42ec8bc8bb68adeb555c4e97d8/aiofluent-1.0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f902b5c7497f84fb30476bf9204e6c1e", "sha256": "4259fb1038781b5ace5a5b95ea9bdc7a4b734a98a3ccdcf7241ccc452da4e040" }, "downloads": -1, "filename": "aiofluent-1.0.8.tar.gz", "has_sig": false, "md5_digest": "f902b5c7497f84fb30476bf9204e6c1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12838, "upload_time": "2018-01-04T16:35:55", "url": "https://files.pythonhosted.org/packages/a2/57/17dd33a8b571dd5461a2d7af0fa079658da9ebbc36cdad1c87f0fc11ed73/aiofluent-1.0.8.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d9e6644370595e339210d4a988ffd9d1", "sha256": "732911673cc225b255781eb435cda137b00ad273afaefc2d976b65efa3f09c05" }, "downloads": -1, "filename": "aiofluent-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d9e6644370595e339210d4a988ffd9d1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11335, "upload_time": "2018-01-25T19:15:43", "url": "https://files.pythonhosted.org/packages/aa/49/69b2fe991b1e0737cd09901b69069eb1faf6a83c3ee22b277089ec408662/aiofluent-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5453d4de806153f7ecedba3a7188a061", "sha256": "1452d3f76124e2b5487d5e9d25da09f9b557a05228d9a821c508e779485ee9c2" }, "downloads": -1, "filename": "aiofluent-1.1.0.tar.gz", "has_sig": false, "md5_digest": "5453d4de806153f7ecedba3a7188a061", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12522, "upload_time": "2018-01-25T19:15:42", "url": "https://files.pythonhosted.org/packages/02/ee/4f4d5e7560ced013f57546032c9b17506fc72e273c0e541e7a01b48d2423/aiofluent-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "e12e4e36f50c9ed021f07f4a829c2457", "sha256": "3aadef4118428a70d448a509ab6949132eda446aba695c88e4df61ed3075df63" }, "downloads": -1, "filename": "aiofluent-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e12e4e36f50c9ed021f07f4a829c2457", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11421, "upload_time": "2018-02-07T18:05:50", "url": "https://files.pythonhosted.org/packages/c0/f0/064808469c6b6dfc476cb8f72b4217622875bae2cfa6271a04c2fb1d80c4/aiofluent-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c3c6a7c50d2e5f3f0ba5c878ea4afdf2", "sha256": "50c04b2ab6a91322d2ed6ca80114ece761485060e826e42004c861b799d7878d" }, "downloads": -1, "filename": "aiofluent-1.1.1.tar.gz", "has_sig": false, "md5_digest": "c3c6a7c50d2e5f3f0ba5c878ea4afdf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12630, "upload_time": "2018-02-07T18:05:49", "url": "https://files.pythonhosted.org/packages/9b/84/e9054ffed69cbc65c05fb57a97096b612a8b53c18ed25d2a46907386d7c7/aiofluent-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "92d90bce94a74b8d8381476c27ef8039", "sha256": "a05324896c63c242344019e245b139dfd988eece4e53dc1c8e9356991b315c05" }, "downloads": -1, "filename": "aiofluent-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "92d90bce94a74b8d8381476c27ef8039", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11463, "upload_time": "2018-02-07T18:16:03", "url": "https://files.pythonhosted.org/packages/93/c8/754262f5b816ac323abb340d7f9c2183a653df9248774dc3300eced8c1a7/aiofluent-1.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "715de82b27d85543f684b8f0beb01e11", "sha256": "bc9735971d5ed3255061bbc8986239759384fefe9d568477447d82896cda0333" }, "downloads": -1, "filename": "aiofluent-1.1.2.tar.gz", "has_sig": false, "md5_digest": "715de82b27d85543f684b8f0beb01e11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12684, "upload_time": "2018-02-07T18:16:04", "url": "https://files.pythonhosted.org/packages/a2/95/50beeb06d81fb62ab0256aa5c314205c2bc87b0189a6852505fd6fd4ae3b/aiofluent-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "303168a0a9258d767e80886e4f382d69", "sha256": "8fc73c8ad9edab36688e498df58bcf7771f41cf52c0b3853e87d57c8ca1960af" }, "downloads": -1, "filename": "aiofluent-1.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "303168a0a9258d767e80886e4f382d69", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11536, "upload_time": "2018-02-15T15:22:56", "url": "https://files.pythonhosted.org/packages/a2/42/36a7fe1376503aee79ce6e187cfbec9dcced6564db2aa60ddb2224c56873/aiofluent-1.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b550dfb300882105b2c352fe94de6084", "sha256": "4d88e0f058eac852118defb40b0c7a2a45aaace168ed7323bc41c345d7c0fc9e" }, "downloads": -1, "filename": "aiofluent-1.1.3.tar.gz", "has_sig": false, "md5_digest": "b550dfb300882105b2c352fe94de6084", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12775, "upload_time": "2018-02-15T15:22:59", "url": "https://files.pythonhosted.org/packages/d6/24/32bccad0bd709f5d2319b56a6532df0929dd67da9888d16422a80fa3bac1/aiofluent-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "036e6bf6c583c4dd38d219d78d6a3e61", "sha256": "fd3cff589402fe46a07c97a4c00719455d0c4797a2a6179db6cfd608ce905e4d" }, "downloads": -1, "filename": "aiofluent-1.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "036e6bf6c583c4dd38d219d78d6a3e61", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11620, "upload_time": "2018-05-29T18:05:35", "url": "https://files.pythonhosted.org/packages/0a/7a/50a130c1920132a1e88f447b26e81d9a52970dc45ca22c0bbe299798ba88/aiofluent-1.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "551b1b606096e0c1c89b764957e16b6b", "sha256": "d7ffd69c1ac3006d799bbf0d1ca86347ec469ed7ca48d7f811211b58edd9b6b1" }, "downloads": -1, "filename": "aiofluent-1.1.4.tar.gz", "has_sig": false, "md5_digest": "551b1b606096e0c1c89b764957e16b6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12851, "upload_time": "2018-05-29T18:05:34", "url": "https://files.pythonhosted.org/packages/b6/af/349bd2554e10da757d82b08198da2809af0dec8c8eae3c67c314fa1e60c2/aiofluent-1.1.4.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "a9c16440eaf9f8e548c4da84a3a0fa68", "sha256": "b64b58218d924fae35ca45b4865b1ac3d3546d08e85b0c8110f92908c20ee25d" }, "downloads": -1, "filename": "aiofluent-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a9c16440eaf9f8e548c4da84a3a0fa68", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11980, "upload_time": "2018-06-14T20:44:22", "url": "https://files.pythonhosted.org/packages/c5/57/5b01b08ed2e59552d6cd96ee1788a4334dbc0f5a7e090ba69d880bae2673/aiofluent-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "32698b8c141dd299a781aa7b416e2df5", "sha256": "6e70780c61eb4ea42c2699b98284f196e5824d0b872c2ac69c056299c2316590" }, "downloads": -1, "filename": "aiofluent-1.2.0.tar.gz", "has_sig": false, "md5_digest": "32698b8c141dd299a781aa7b416e2df5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13254, "upload_time": "2018-06-14T20:44:23", "url": "https://files.pythonhosted.org/packages/ab/0c/055643859135408a10b17cb7f8915facdc285582a12705e5404105abbc8e/aiofluent-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "67a026ea61ca0ed47d35f7222d8423ff", "sha256": "1915b014502595a7c035817c70a44a8938ac880a74876f25424858b0521f5a5a" }, "downloads": -1, "filename": "aiofluent-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "67a026ea61ca0ed47d35f7222d8423ff", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8469, "upload_time": "2018-10-31T11:05:00", "url": "https://files.pythonhosted.org/packages/d1/d2/2fbfb6589929eb6646c8e2eb8d4edf0d06538a2c9709baa580ecf9b6d3e1/aiofluent-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d6d409cf4e3b55ccf1205bcd63c6120", "sha256": "b30548847da499fb587aa139c366717093d9daa47cea09d46d811fd47be832b7" }, "downloads": -1, "filename": "aiofluent-1.2.1.tar.gz", "has_sig": false, "md5_digest": "3d6d409cf4e3b55ccf1205bcd63c6120", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13856, "upload_time": "2018-10-31T11:05:02", "url": "https://files.pythonhosted.org/packages/75/8a/dedac4b74158866f89b198fcd87b4325d663a702adea827774c84117cabe/aiofluent-1.2.1.tar.gz" } ], "1.2.2.dev0": [ { "comment_text": "", "digests": { "md5": "b777b9a4518e2ef340cef49b84074048", "sha256": "f9703b776054240019ee0eb6ea90804e88e841c0ac3c783ded3ebd592c3145dd" }, "downloads": -1, "filename": "aiofluent-1.2.2.dev0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b777b9a4518e2ef340cef49b84074048", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9088, "upload_time": "2019-04-01T14:30:50", "url": "https://files.pythonhosted.org/packages/a7/a8/0423d68cee8a8c3a9090b4f27dd6f2e28bdc18c260529fdf6d6bbc502b85/aiofluent-1.2.2.dev0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "781ce1da9f5212d8e8e3d9bce6d84b7f", "sha256": "72d7b6908965d8bd39ecf9fbae0a32083a148ff1ab418b7f8c6b7b0e6baf9805" }, "downloads": -1, "filename": "aiofluent-1.2.2.dev0.tar.gz", "has_sig": false, "md5_digest": "781ce1da9f5212d8e8e3d9bce6d84b7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12227, "upload_time": "2019-04-01T14:30:51", "url": "https://files.pythonhosted.org/packages/2c/39/e9cb2613179f3422ad02f1ee1f4189cfc03652e0bb3d2ed6c42de721585a/aiofluent-1.2.2.dev0.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "1e9dc911be772acb0289bc219576b610", "sha256": "0f615aa4316a75872906941b0bd70de1de2c5f1b2f336e69761e22c00cd81696" }, "downloads": -1, "filename": "aiofluent-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e9dc911be772acb0289bc219576b610", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9042, "upload_time": "2019-04-01T14:38:14", "url": "https://files.pythonhosted.org/packages/c8/da/7a7136bf91fe373894b9d2ece30c93d6bf85d89420db6afcf0e3641ef684/aiofluent-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35f89b6bc75763dff579e13aea0c7841", "sha256": "1eb94e42684c8596c12610c3b4d7953ba944ba8cad186d751a863f38fa68f4b6" }, "downloads": -1, "filename": "aiofluent-1.2.3.tar.gz", "has_sig": false, "md5_digest": "35f89b6bc75763dff579e13aea0c7841", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12246, "upload_time": "2019-04-01T14:38:15", "url": "https://files.pythonhosted.org/packages/d4/36/36aebe622df6d5cb92a3dc7448d39a708a3fccd0cccfadd1941382f4bcf2/aiofluent-1.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1e9dc911be772acb0289bc219576b610", "sha256": "0f615aa4316a75872906941b0bd70de1de2c5f1b2f336e69761e22c00cd81696" }, "downloads": -1, "filename": "aiofluent-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e9dc911be772acb0289bc219576b610", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9042, "upload_time": "2019-04-01T14:38:14", "url": "https://files.pythonhosted.org/packages/c8/da/7a7136bf91fe373894b9d2ece30c93d6bf85d89420db6afcf0e3641ef684/aiofluent-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35f89b6bc75763dff579e13aea0c7841", "sha256": "1eb94e42684c8596c12610c3b4d7953ba944ba8cad186d751a863f38fa68f4b6" }, "downloads": -1, "filename": "aiofluent-1.2.3.tar.gz", "has_sig": false, "md5_digest": "35f89b6bc75763dff579e13aea0c7841", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12246, "upload_time": "2019-04-01T14:38:15", "url": "https://files.pythonhosted.org/packages/d4/36/36aebe622df6d5cb92a3dc7448d39a708a3fccd0cccfadd1941382f4bcf2/aiofluent-1.2.3.tar.gz" } ] }