{"action":"created","issue":{"url":"https://api.github.com/repos/smkell/ffl_faust/issues/35","repository_url":"https://api.github.com/repos/smkell/ffl_faust","labels_url":"https://api.github.com/repos/smkell/ffl_faust/issues/35/labels{/name}","comments_url":"https://api.github.com/repos/smkell/ffl_faust/issues/35/comments","events_url":"https://api.github.com/repos/smkell/ffl_faust/issues/35/events","html_url":"https://github.com/smkell/ffl_faust/pull/35","id":361748967,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE2NjM5MTg0","number":35,"title":"Scheduled daily dependency update on wednesday","user":{"login":"pyup-bot","id":16239342,"node_id":"MDQ6VXNlcjE2MjM5MzQy","avatar_url":"https://avatars0.githubusercontent.com/u/16239342?v=4","gravatar_id":"","url":"https://api.github.com/users/pyup-bot","html_url":"https://github.com/pyup-bot","followers_url":"https://api.github.com/users/pyup-bot/followers","following_url":"https://api.github.com/users/pyup-bot/following{/other_user}","gists_url":"https://api.github.com/users/pyup-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/pyup-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pyup-bot/subscriptions","organizations_url":"https://api.github.com/users/pyup-bot/orgs","repos_url":"https://api.github.com/users/pyup-bot/repos","events_url":"https://api.github.com/users/pyup-bot/events{/privacy}","received_events_url":"https://api.github.com/users/pyup-bot/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-09-19T13:27:09Z","updated_at":"2018-09-20T13:27:16Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/smkell/ffl_faust/pulls/35","html_url":"https://github.com/smkell/ffl_faust/pull/35","diff_url":"https://github.com/smkell/ffl_faust/pull/35.diff","patch_url":"https://github.com/smkell/ffl_faust/pull/35.patch"},"body":"\n\n\n\n\n### Update [faust](https://pypi.org/project/faust) from **1.0.30** to **1.1.1**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 1.1.1\n   ```\n   =====\n:release-date: 2018-09-17 4:06 P.M PDT\n:release-by: Ask Solem (:github_user:`ask`)\n\n- **Requirements**\n\n    + Now depends on :ref:`Mode 1.17.2 &lt;mode:version-1.17.2&gt;`.\n\n- **Web**: Blueprint registered to app with URL prefix would end up\n           having double-slash.\n\n- **Documentation**: Added :ref:`project layout suggestions &lt;project-layout&gt;`\n                     to the application user guide.\n\n- **Types**: annotations now passing checks on :pypi:`mypy` 0.630.\n\n.. _version-1.1.0:\n   ```\n   \n  \n  \n   ### 1.1.0\n   ```\n   =====\n:release-date: 2018-09-14 1:07 P.M PDT\n:release-by: Ask Solem (:github_user:`ask`)\n\n.. _v110-important-notes:\n\nImportant Notes\n---------------\n\n- **API**: Agent/Channel.send now support keyword-only arguments only\n\n    Users often make the mistake of doing:\n\n    .. sourcecode:: python\n\n        channel.send(x)\n\n    and expect that to send ``x`` as the value.\n\n    But the signature is ``(key, value, ...)``, so it ends up being\n    ``channel.send(key=x, value=None)``.\n\n    Fixing this will come in two parts:\n\n    1) Faust 1.1 (this change): Make them keyword-only arguments\n\n        This will make it an error if the names of arguments are not\n        specified:\n\n        .. sourcecode:: python\n\n            channel.send(key, value)\n\n        Needs to be changed to:\n\n        .. sourcecode:: python\n\n            channel.send(key=key, value=value)\n\n    2) Faust 1.2: We will change the signature\n        to ``channel.send(value, key=key, ...)``\n\n        At this stage all existing code will have changed to using\n        keyword-only arguments.\n\n- **App**: The default key serializer is now ``raw`` (Issue 142).\n\n    The default *value* serializer will still be ``json``, but for keys\n    it does not make as much sense to use json as the default: keys are very\n    rarely expressed using complex structures.\n\n    If you depend on the Faust 1.0 behavior you should override the\n    default key serializer for the app:\n\n    .. sourcecode:: python\n\n        app = faust.App(&#39;myapp&#39;, ..., key_serializer=&#39;json&#39;)\n\n    Contributed by Allison Wang (:github_user:`allisonwang`)\n\n- No longer depends on :pypi:`click_completion`\n\n        If you want to use the shell completion command,\n        you now have to install that dependency locally first:\n\n        .. sourcecode:: console\n\n            $ ./examples/withdrawals.py completion\n            Usage: withdrawals.py completion [OPTIONS]\n\n            Error: Missing required dependency, but this is easy to fix.\n            Run `pip install click_completion` from your virtualenv\n            and try again!\n\n        Installing :pypi:`click_completion`:\n\n        .. sourcecode:: console\n\n            $ pip install click_completion\n            [...]\n\n.. _v110-news:\n\nNews\n----\n\n- **Requirements**\n\n    + Now depends on :ref:`Mode 1.17.1 &lt;mode:version-1.17.1&gt;`.\n\n    + No longer depends on :pypi:`click_completion`\n\n- Now works with CPython 3.6.0.\n\n- **Models**: Record: Now supports `decimals` option to convert string\n  decimals back to Decimal\n\n    This can be used for any model to enable &quot;Decimal-fields&quot;:\n\n    .. code-block:: python\n\n        class Fundamentals(faust.Record, decimals=True):\n            open: Decimal\n            high: Decimal\n            low: Decimal\n            volume: Decimal\n\n    When serialized this model will use string for decimal fields\n    (the javascript float type cannot be used without losing precision, it\n    is a float after all), but when deserializing Faust will reconstruct\n    them as Decimal objects from that string.\n\n- **Model**: Records now support custom coercion handlers.\n\n    Coercion converts one type into another, for example from string to\n    :class:`~datetime.datettime`, or int/string to :class:`~decimal.Decimal`.\n\n    In models this means conversion from the serialized form back into\n    a corresponding Python type.\n\n    To define a model where all :class:`~uuid.UUID` fields are serialized\n    to string, but then converted back to :class:`~uuid.UUID` objects\n    when deserialized, do this:\n\n    .. sourcecode:: python\n\n        from uuid import UUID\n        import faust\n\n        class Account(faust.Record, coercions={UUID: UUID}):\n            id: UUID\n\n    .. admonition:: What about non-json serializable types?\n\n        The use of UUID in this example leaves one important detail\n        out: json doesn&#39;t support this type so how can models serialize it?\n\n        The Faust JSON serializer adds support for UUID objects by default,\n        but if you have a custom class you would need to add that capability\n        by adding a ``__json__`` handler:\n\n        .. sourcecode:: python\n\n            class MyType:\n\n                def __init__(self, value: str):\n                    self.value = value\n\n                def __json__(self):\n                    return self.value\n\n    You&#39;d get tired writing this out for every class, so why not make\n    an abstract model subclass:\n\n    .. sourcecode:: python\n\n        from uuid import UUID\n        import faust\n\n        class UUIDAwareRecord(faust.Record,\n                              abstract=True,\n                              coercions={UUID: UUID}):\n            ...\n\n        class Account(UUIDAwareRecord):\n            id: UUID\n\n- **App**: New :setting:`ssl_context` adds authentication support to Kafka.\n\n    Contributed by Mika Eloranta (:github_user:`melor`).\n\n- **Monitor**: New `Datadog`_ monitor (Issue 160)\n\n    Contributed by Allison Wang (:github_user:`allisonwang`).\n\n    .. _`Datadog`: http://datadoghq.com\n\n- **App**: ``app.task`` decorator now accepts ``on_leader``\n           argument (Issue 131).\n\n    Tasks created using the ``app.task`` decorator will run once a worker\n    is fully started.\n\n    Similar to the ``app.timer`` decorator, you can now create one-shot tasks\n    that run on the leader worker only:\n\n    .. sourcecode:: python\n\n        app.task(on_leader=True)\n        async def mytask():\n            print(&#39;WORKER STARTED, AND I AM THE LEADER&#39;)\n\n    The decorated function may also accept the ``app`` as an argument:\n\n    .. sourcecode:: python\n\n        app.task(on_leader=True)\n        async def mytask(app):\n            print(f&#39;WORKER FOR APP {app} STARTED, AND I AM THE LEADER&#39;)\n\n- **App**: New ``app.producer_only`` attribute.\n\n    If set the worker will start the app without\n    consumer/tables/agents/topics.\n\n- **App**: ``app.http_client`` property is now read-write.\n\n- **Channel**: In-memory channels were not working as expected.\n\n    + ``Channel.send(key=key, value=value)`` now works as expected.\n\n    + ``app.channel()`` accidentally set the ``maxsize`` to 1 by default,\n      creating a deadlock.\n\n    + ``Channel.send()`` now disregards the :setting:`stream_publish_on_commit`\n      setting.\n\n- **Transport**: :pypi:`aiokafka`: Support timestamp-less messages\n\n    Fixes error when data sent with old Kafka broker not supporting\n    timestamps:\n\n    .. code-block:: text\n\n        [2018-08-27 08:00:49,262: ERROR]: [^--Consumer]: Drain messages raised:\n            TypeError(&quot;unsupported operand type(s) for /: &#39;NoneType&#39; and &#39;float&#39;&quot;,)\n        Traceback (most recent call last):\n        File &quot;faust/transport/consumer.py&quot;, line 497, in _drain_messages\n            async for tp, message in ait:\n        File &quot;faust/transport/drivers/aiokafka.py&quot;, line 449, in getmany\n            record.timestamp / 1000.0,\n        TypeError: unsupported operand type(s) for /: &#39;NoneType&#39; and &#39;float&#39;\n\n    Contributed by Mika Eloranta (:github_user:`melor`).\n\n- **Distribution**: ``pip install faust`` no longer installs the examples\n  direcrtory.\n\n    Fix contributed by Michael Seifert (:github_user:`seifertm`)\n\n- **Web**: Adds exception handling to views.\n\n    A view can now bail out early via `raise self.NotFound()` for example.\n\n- **Web**: ``table_route`` decorator now supports taking key from\n  the URL path.\n\n    This is now used in the :file:`examples/word_count.py` example\n    to add an endpoint ``/count/{word}/`` that routes to the correct\n    worker with that count:\n\n    .. sourcecode:: python\n\n        app.page(&#39;/word/{word}/count/&#39;)\n        table_route(table=word_counts, match_info=&#39;word&#39;)\n        async def get_count(web, request, word):\n            return web.json({\n                word: word_counts[word]\n            })\n\n- **Web**: Support reverse lookup from view name via ``url_for``\n\n    .. sourcecode:: python\n\n        web.url_for(view_name, **params)\n\n- **Web**: Adds support for Flask-like &quot;blueprints&quot;\n\n    Blueprint is basically just a description of a reusable app\n    that you can add to your web application.\n\n    Blueprints are commonly used in most Flask-like web frameworks,\n    but Flask blueprints are not compatible with e.g. Sanic blueprints.\n\n    The Faust blueprint is not directly compatible with any of them,\n    but that should be fine.\n\n    To define a blueprint:\n\n    .. sourcecode:: python\n\n        from faust import web\n\n        blueprint = web.Blueprint(&#39;user&#39;)\n\n        blueprint.route(&#39;/&#39;, name=&#39;list&#39;)\n        class UserListView(web.View):\n\n            async def get(self, request: web.Request) -&gt; web.Response:\n                return self.json({&#39;hello&#39;: &#39;world&#39;})\n\n        blueprint.route(&#39;/{username}/&#39;, name=&#39;detail&#39;)\n        class UserDetailView(web.View):\n\n            async def get(self, request: web.Request) -&gt; web.Response:\n                name = request.match_info[&#39;username&#39;]\n                return self.json({&#39;hello&#39;: name})\n\n            async def post(self, request: web.Request) -&gt; web.Response:\n                ...\n\n            async def delete(self, request: web.Request) -&gt; web.Response:\n                ...\n\n    Then to add the blueprint to a Faust app you register it:\n\n    .. sourcecode:: python\n\n        blueprint.register(app, url_prefix=&#39;/users/&#39;)\n\n    .. note::\n\n        You can also create views from functions (in this case it will only\n        support GET):\n\n        .. sourcecode:: python\n\n            blueprint.route(&#39;/&#39;, name=&#39;index&#39;)\n            async def hello(self, request):\n                return self.text(&#39;Hello world&#39;)\n\n    .. admonition:: Why?\n\n        Asyncio web frameworks are moving quickly, and we want to be able\n        to quickly experiment with different backend drivers.\n\n        Blueprints is a tiny abstraction that fit well into the already\n        small web abstraction that we do have.\n\n    - Documentation and examples improvements by\n\n        + Tom Forbes (:github_user:`orf`).\n        + Matthew Grossman (:github_user:`matthewgrossman`)\n        + Denis Kataev (:github_user:`kataev`)\n        + Allison Wang (:github_user:`allisonwang`)\n        + Huyuumi (:github_user:`diplozoon`)\n\nProject\n-------\n\n- **CI**: The following Python versions have been added to the build matrix:\n\n    + CPython 3.7.0\n\n    + CPython 3.6.6\n\n    + CPython 3.6.0\n\n- **Git**:\n\n    + All the version tags have been cleaned up to follow the format ``v1.2.3``.\n\n    + New active maintenance branches: ``1.0`` and ``1.1``.\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/faust\n  - Changelog: https://pyup.io/changelogs/faust/\n  - Docs: http://faust.readthedocs.io/\n</details>\n\n\n\n\n\n### Update [Sphinx](https://pypi.org/project/Sphinx) from **1.7.9** to **1.8.0**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 1.8.0\n   ```\n   =====================================\n\nDependencies\n------------\n   ```\n   \n  \n  \n   ### 1.8.0b2\n   ```\n   * html: search box overrides to other elements if scrolled\n* i18n: warnings for translation catalogs have wrong line numbers (refs: 5321)\n* 5325: latex: cross references has been broken by multiply labeled objects\n* C++, fixes for symbol addition and lookup. Lookup should no longer break\n  in partial builds. See also 5337.\n* 5348: download reference to remote file is not displayed\n* 5282: html theme: ``pygments_style`` of theme was overrided by ``conf.py``\n  by default\n* 4379: toctree shows confusible warning when document is excluded\n* 2401: autodoc: ``:members:`` causes ``:special-members:`` not to be shown\n* autodoc: ImportError is replaced by AttributeError for deeper module\n* 2720, 4034: Incorrect links with ``:download:``, duplicate names, and\n  parallel builds\n* 5290: autodoc: failed to analyze source code in egg package\n* 5399: Sphinx crashes if unknown po file exists\n   ```\n   \n  \n  \n   ### 1.8.0b1\n   ```\n   * 5083: Fix wrong make.bat option for internationalization.\n* 5115: napoleon: add admonitions added by 4613 to the docs.\n   ```\n   \n  \n  \n   ### 1.7.10\n   ```\n   ===============================\n\nDependencies\n------------\n\nIncompatible changes\n--------------------\n\nDeprecated\n----------\n\nFeatures added\n--------------\n\nBugs fixed\n----------\n\nTesting\n--------\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/sphinx\n  - Changelog: https://pyup.io/changelogs/sphinx/\n  - Homepage: http://sphinx-doc.org/\n</details>\n\n\n\n\n\n"},"comment":{"url":"https://api.github.com/repos/smkell/ffl_faust/issues/comments/423182564","html_url":"https://github.com/smkell/ffl_faust/pull/35#issuecomment-423182564","issue_url":"https://api.github.com/repos/smkell/ffl_faust/issues/35","id":423182564,"node_id":"MDEyOklzc3VlQ29tbWVudDQyMzE4MjU2NA==","user":{"login":"pyup-bot","id":16239342,"node_id":"MDQ6VXNlcjE2MjM5MzQy","avatar_url":"https://avatars0.githubusercontent.com/u/16239342?v=4","gravatar_id":"","url":"https://api.github.com/users/pyup-bot","html_url":"https://github.com/pyup-bot","followers_url":"https://api.github.com/users/pyup-bot/followers","following_url":"https://api.github.com/users/pyup-bot/following{/other_user}","gists_url":"https://api.github.com/users/pyup-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/pyup-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pyup-bot/subscriptions","organizations_url":"https://api.github.com/users/pyup-bot/orgs","repos_url":"https://api.github.com/users/pyup-bot/repos","events_url":"https://api.github.com/users/pyup-bot/events{/privacy}","received_events_url":"https://api.github.com/users/pyup-bot/received_events","type":"User","site_admin":false},"created_at":"2018-09-20T13:27:16Z","updated_at":"2018-09-20T13:27:16Z","author_association":"CONTRIBUTOR","body":"Closing this in favor of #36"}}
{"actor":{"display_login":"pyup-bot"}}