{"action":"opened","number":113,"pull_request":{"url":"https://api.github.com/repos/drummonds/bene/pulls/113","id":222931043,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIyOTMxMDQz","html_url":"https://github.com/drummonds/bene/pull/113","diff_url":"https://github.com/drummonds/bene/pull/113.diff","patch_url":"https://github.com/drummonds/bene/pull/113.patch","issue_url":"https://api.github.com/repos/drummonds/bene/issues/113","number":113,"state":"open","locked":false,"title":"Scheduled weekly dependency update for week 41","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},"body":"\n\n\n\n\n### Update [psycopg2](https://pypi.org/project/psycopg2) from **2.7.4** to **2.7.5**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 2.7.5\n   ```\n   ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n- Allow non-ascii chars in namedtuple fields (regression introduced fixing\n  :ticket:`211`).\n- Fixed adaptation of arrays of arrays of nulls (:ticket:`325`).\n- Fixed building on Solaris 11 and derivatives such as SmartOS and illumos\n  (:ticket:`677`).\n- Maybe fixed building on MSYS2 (as reported in :ticket:`658`).\n- Allow string subclasses in connection and other places (:ticket:`679`).\n- Don&#39;t raise an exception closing an unused named cursor (:ticket:`716`).\n- Wheel package compiled against PostgreSQL 10.4 libpq and OpenSSL 1.0.2o.\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/psycopg2\n  - Changelog: https://pyup.io/changelogs/psycopg2/\n  - Homepage: http://initd.org/psycopg/\n</details>\n\n\n\n\n\n### Update [gevent](https://pypi.org/project/gevent) from **1.2.2** to **1.3.7**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 1.3.7\n   ```\n   ==================\n\n- Formatting run info no longer includes ``gevent.local.local``\n  objects that have no value in the greenlet. See :issue:`1275`.\n\n- Fixed negative length in pywsgi&#39;s Input read functions for non chunked body.\n  Reported in :issue:`1274` by tzickel.\n\n- Upgrade libuv from 1.22.0 to 1.23.2.\n\n- Fix opening files in text mode in CPython 2 on Windows by patching\n  libuv. See :issue:`1282` reported by wiggin15.\n   ```\n   \n  \n  \n   ### 1.3.6\n   ```\n   ==================\n\n- gevent now depends on greenlet 0.4.14 or above. gevent binary wheels\n  for 1.3.5 and below must have greenlet 0.4.13 installed on Python\n  3.7 or they will crash. Reported by Alexey Stepanov in :issue:`1260`\n  and pkittenis in :issue:`1261`.\n\n- :class:`gevent.local.local` subclasses correctly supports\n  ``staticmethod`` functions. Reported by Brendan Powers in\n  :issue:`1266`.\n   ```\n   \n  \n  \n   ### 1.3.5\n   ```\n   ==================\n\n- Update the bundled libuv from 1.20.1 to 1.22.0.\n\n- Test Python 3.7 on Appveyor. Fix the handling of Popen&#39;s\n  ``close_fds`` argument on 3.7.\n\n- Update Python versions tested on Travis, including PyPy to 6.0. See :issue:`1195`.\n\n- :mod:`gevent.queue` imports ``_PySimpleQueue`` instead of\n  ``SimpleQueue`` so that it doesn&#39;t block the event loop.\n  :func:`gevent.monkey.patch_all` makes this same substitution in\n  :mod:`queue`. This fixes issues with\n  :class:`concurrent.futures.ThreadPoolExecutor` as well. Reported in\n  :issue:`1248` by wwqgtxx and :issue:`1251` by pyld.\n\n- :meth:`gevent.socket.socket.connect` doesn&#39;t pass the port (service)\n  to :func:`socket.getaddrinfo` when it resolves an ``AF_INET`` or\n  ``AF_INET6`` address. (The standard library doesn&#39;t either.) This\n  fixes an issue on Solaris. Reported in :issue:`1252` by wiggin15.\n\n- :meth:`gevent.socket.socket.connect` works with more address\n  families, notably AF_TIPC, AF_NETLINK, AF_BLUETOOTH, AF_ALG and AF_VSOCK.\n   ```\n   \n  \n  \n   ### 1.3.4\n   ```\n   ==================\n\n- Be more careful about issuing ``MonkeyPatchWarning`` for ssl\n  imports. Now, we only issue it if we detect the one specific\n  condition that is known to lead to RecursionError. This may produce\n  false negatives, but should reduce or eliminate false positives.\n\n- Based on measurements and discussion in :issue:`1233`, adjust the\n  way :mod:`gevent.pywsgi` generates HTTP chunks. This is intended to\n  reduce network overhead, especially for smaller chunk sizes.\n\n- Additional slight performance improvements in :mod:`gevent.pywsgi`.\n  See :pr:`1241`.\n   ```\n   \n  \n  \n   ### 1.3.3\n   ```\n   ==================\n\n- :func:`gevent.sleep` updates the loop&#39;s notion of the current time\n  before sleeping so that sleep duration corresponds more closely to\n  elapsed (wall clock) time. :class:`gevent.Timeout` does the same.\n  Reported by champax and FoP in :issue:`1227`.\n\n- Fix an ``UnboundLocalError`` in SSL servers when wrapping a socket\n  throws an error. Reported in :issue:`1236` by kochelmonster.\n   ```\n   \n  \n  \n   ### 1.3.2.post0\n   ```\n   ========================\n\n- Fix a packaging error in manylinux binary wheels that prevented some\n  imports from working. See :issue:`1219`.\n   ```\n   \n  \n  \n   ### 1.3.2\n   ```\n   ==================\n\n- Allow weak refeneces to :class:`gevent.queue.Queue`. Reported in\n  :issue:`1217` by githrdw.\n   ```\n   \n  \n  \n   ### 1.3.1\n   ```\n   ==================\n\n- Allow weak references to :class:`gevent.event.Event`. Reported in\n  :issue:`1211` by Matias Guijarro.\n\n- Fix embedded uses of :func:`gevent.Greenlet.spawn`, especially under\n  uwsgi. Reported in :issue:`1212` by Kunal Gangakhedkar.\n\n- Fix :func:`gevent.os.nb_write` and :func:`gevent.os.nb_read` not\n  always closing the IO event they opened in the event of an\n  exception. This would be a problem especially for libuv.\n   ```\n   \n  \n  \n   ### 1.3.0\n   ```\n   ==================\n\n- Python 3.7 passes the automated memory leak checks. See :issue:`1197`.\n\n- Update autoconf&#39;s config.guess and config.sub to the latest versions\n  for c-ares and libev.\n\n- :class:`gevent.local.local` subclasses that mix-in ABCs can be instantiated.\n  Reported in :issue:`1201` by Bob Jordan.\n   ```\n   \n  \n  \n   ### 1.3b2\n   ```\n   ==================\n\n- On Windows, CFFI is now a dependency so that the libuv backend\n  really can be used by default.\n\n- Fix a bug detecting whether we can use the memory monitoring\n  features when psutil is not installed.\n\n- `gevent.subprocess.Popen` uses ``/proc/self/fd`` (on Linux) or\n  ``/dev/fd`` (on BSD, including macOS) to find the file descriptors\n  to close when ``close_fds`` is true. This matches an optimization\n  added to Python 3 (and backports it to Python 2.7), making process\n  spawning up to 9 times faster. Also, on Python 3, since Python 3.3\n  is no longer supported, we can also optimize the case where\n  ``close_fds`` is false (not the default), making process spawning up\n  to 38 times faster. Initially reported in :issue:`1172` by Ofer Koren.\n\n- The bundled libuv is now 1.20.1, up from 1.19.2. See :issue:`1177`.\n\n- The long-deprecated and undocumented module ``gevent.wsgi`` was removed.\n\n- Add `gevent.util.assert_switches` to build on the monitoring\n  functions. Fixes :issue:`1182`.\n\n- A started monitor thread for the active hub now survives a fork. See\n  :issue:`1185`.\n\n- The greenlet tracer functions used for the various monitoring\n  capabilities are now compiled with Cython for substantially lower\n  overhead. See :pr:`1190`.\n\n- libuv now collects all pending watchers and runs their callbacks at\n  the end of the loop iteration using UV_RUN_ONCE. This eliminates the\n  need to patch libuv to be greenlet-safe. It also means that\n  zero-duration timer watchers are actual timer watchers again\n  (instead of being turned into check watchers); newly added\n  zero-duration timers cannot block the event loop because they won&#39;t\n  be run until a safe time.\n\n- Python 3.7.0b4 is now the tested and supported version of Python\n  3.7. PyPy 6.0 has been tested, although CI continues to use 5.10.\n   ```\n   \n  \n  \n   ### 1.3b1\n   ```\n   ==================\n\nDependencies\n------------\n\n- Cython 0.28.2 is now used to build gevent from a source checkout.\n\n- The bundled libuv is now 1.19.2, up from 1.18.0.\n\nPlatform Support\n----------------\n\n- Travis CI tests on Python 3.7.0b3.\n\n- Windows now defaults to the libuv backend if CFFI is installed. See\n  :issue:`1163`.\n\nBug Fixes\n---------\n\n- On Python 2, when monkey-patching `threading.Event`, also\n  monkey-patch the underlying class, ``threading._Event``. Some code\n  may be type-checking for that. See :issue:`1136`.\n\n- Fix libuv io watchers polling for events that only stopped watchers\n  are interested in, reducing CPU usage. Reported in :issue:`1144` by\n  wwqgtxx.\n\nEnhancements\n------------\n\n- Add additional optimizations for spawning greenlets, making it\n  faster than 1.3a2.\n\n- Use strongly typed watcher callbacks in the libuv CFFI extensions.\n  This prevents dozens of compiler warnings.\n\n- When gevent prints a timestamp as part of an error message, it is\n  now in UTC format as specified by RFC3339.\n\n- Threadpool threads that exit now always destroy their hub (if one\n  was created). This prevents some forms of resource leaks (notably\n  visible as blocking functions reported by the new monitoring abilities).\n\n- Hub objects now include the value of their ``name`` attribute in\n  their repr.\n\n- Pools for greenlets and threads have lower overhead, especially for\n  ``map``. See :pr:`1153`.\n\n- The undocumented, internal implementation classes ``IMap`` and\n  ``IMapUnordered`` classes are now compiled with Cython, further\n  reducing the overhead of ``[Thread]Pool.imap``.\n\n- The classes `gevent.event.Event` and `gevent.event.AsyncResult`\n  are compiled with Cython for improved performance, as is the\n  ``gevent.queue`` module and ``gevent.hub.Waiter`` and certain\n  time-sensitive parts of the hub itself. Please report any\n  compatibility issues.\n\n- ``python -m gevent.monkey &lt;script&gt;`` accepts more values for\n  ``&lt;script&gt;``, including paths to packages or compiled bytecode.\n  Reported in :issue:`1157` by Eddie Linder.\n\n- Add a simple event framework for decoupled communication. It uses\n  :mod:`zope.event` if that is installed.\n\n- :mod:`gevent.monkey` has support for plugins in the form of event\n  subscribers and setuptools entry points. See :pr:`1158` and\n  :issue:`1162`. setuptools must be installed at runtime for its entry\n  points to function.\n\nMonitoring and Debugging\n------------------------\n\n- Introduce the configuration variable\n  `gevent.config.track_greenlet_tree` (aka\n  ``GEVENT_TRACK_GREENLET_TREE``) to allow disabling the greenlet tree\n  features for applications where greenlet spawning is performance\n  critical. This restores spawning performance to 1.2 levels.\n\n- Add an optional monitoring thread for each hub. When enabled, this\n  thread (by default) looks for greenlets that block the event loop\n  for more than 0.1s. You can add your own periodic monitoring\n  functions to this thread. Set ``GEVENT_MONITOR_THREAD_ENABLE`` to\n  use it, and ``GEVENT_MAX_BLOCKING_TIME`` to configure the blocking\n  interval.\n\n- The monitoring thread emits events when it detects certain\n  conditions, like loop blocked or memory limits exceeded.\n\n- Add settings for monitoring memory usage and emitting events when a\n  threshold is exceeded and then corrected. gevent currently supplies\n  no policy for what to do when memory exceeds the configured limit.\n  ``psutil`` must be installed to use this. See :pr:`1150`.\n   ```\n   \n  \n  \n   ### 1.3a2\n   ```\n   ==================\n\nDependencies\n------------\n\n- Cython 0.28b1 or later is now required to build gevent from a source\n  checkout (Cython is *not* required to build a source distribution\n  from PyPI).\n\n- Update c-ares to 1.14.0. See :issue:`1105`.\n\n- gevent now **requires** the patched version of libuv it is\n  distributed with. Building gevent with a non-embedded libuv, while\n  not previously supported, is not possible now. See\n  :issue:`1126`.\n\n\nPlatform Support\n----------------\n\n- Travis CI tests on Python 3.7.0b2 and PyPy 2.7 5.10.0 and PyPy 3.5\n  5.10.1.\n\nBuild Changes\n-------------\n\n- Fix building from a source distribution (PyPI) without Cython\n  installed.\n\nEnhancements\n------------\n\n- Add the ``dnspython`` resolver as a lightweight alternative to\n  c-ares. It is generally faster than c-ares and is supported on PyPy.\n  c-ares may be deprecated in the future. See :pr:`1088` and\n  :issue:`1103`.\n\n- Add the module :mod:`gevent.time` that can be imported instead of\n  :mod:`time`, much like :mod:`gevent.socket` can be imported instead\n  of :mod:`socket`. It contains ``gevent.sleep``. This aids\n  monkey-patching.\n\n- Simple subclasses of `gevent.local.local` now have the same\n  (substantially improved) performance characteristics of plain\n  `gevent.local.local` itself, making them 2 to 3 times faster than\n  before. See :pr:`1117`. If there are any compatibility\n  problems, please open issues.\n\nMonitoring and Debugging\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n- Greenlet objects now keep track of their spawning parent greenlet\n  and the code location that spawned them, in addition to maintaining\n  a &quot;spawn tree local&quot; mapping. This adds some runtime overhead in\n  relative terms, but absolute numbers are still relatively small.\n  Based on a proposal from PayPal and comments by Mahmoud Hashemi and\n  Kurt Rose. See :issue:`755` and :pr:`1115`. As always, feedback is\n  appreciated.\n\n- Greenlet objects now have a `minimal_ident\n  &lt;gevent.Greenlet.minimal_ident&gt;` property. It functions\n  similarly to ``Thread.ident`` or ``id`` by uniquely identifying the\n  greenlet object while it remains alive, and it can be reused after\n  the greenlet object is dead. It is different in that it is small and\n  sequential. Based on a proposal from PayPal and comments by Mahmoud\n  Hashemi and Kurt Rose. See :issue:`755`. As always, feedback is\n  appreciated.\n\n- `gevent.Greenlet` objects now have a `gevent.Greenlet.name`\n  attribute that is included in the default repr.\n\n- Include the values of `gevent.local.local` objects associated with\n  each greenlet in `gevent.util.format_run_info`.\n\n- Add `gevent.util.GreenletTree` to visualize the greenlet tree. This\n  is used by `gevent.util.format_run_info`.\n\n\nSubprocess\n~~~~~~~~~~\n\n- Make :class:`gevnt.subprocess.Popen` accept the ``restore_signals``\n  keyword argument on all versions of Python, and on Python 2 have it\n  default to false. It previously defaulted to true on all versions;\n  now it only defaults to true on Python 3. The standard library in\n  Python 2 does not have this argument and its behaviour with regards\n  to signals is undocumented, but there is code known to rely on\n  signals not being restored under Python 2. Initial report and patch\n  in :pr:`1063` by Florian Margaine.\n\n- Allow :class:`gevent.subprocess.Popen` to accept the keyword\n  arguments ``pass_fds`` and ``start_new_session`` under Python 2.\n  They have always had the same default as Python 3, namely an empty\n  tuple and false, but now are accessible to Python 2.\n\n- Support the ``capture_output`` argument added to Python 3.7 in\n  :func:`gevent.subprocess.run`.\n\nConfiguration\n~~~~~~~~~~~~~\n\n- Centralize all gevent configuration in an object at\n  ``gevent.config``, allowing for gevent to be configured through code\n  and not *necessarily* environment variables, and also provide a\n  centralized place for documentation. See :issue:`1090`.\n\n  - The new ``GEVENT_CORE_CFFI_ONLY`` environment variable has been\n    replaced with the pre-existing ``GEVENT_LOOP`` environment\n    variable. That variable may take the values ``libev-cext``,\n    ``libev-cffi``, or ``libuv-cffi``, (or be a list in preference\n    order, or be a dotted name; it may also be assigned to an\n    object in Python code at ``gevent.config.loop``).\n\n  - The ``GEVENTARES_SERVERS`` environment variable is deprecated in\n    favor of ``GEVENT_RESOLVER_SERVERS``. See :issue:`1103`.\n\n\nBug Fixes\n---------\n\n- Fix calling ``shutdown`` on a closed socket. It was raising\n  ``AttributeError``, now it once again raises the correct\n  ``socket.error``. Reported in :issue:`1089` by André Cimander.\n\n- Fix an interpreter crash that could happen if two or more ``loop``\n  objects referenced the default event loop and one of them was\n  destroyed and then the other one destroyed or (in the libev C\n  extension implementation only) deallocated (garbage collected). See\n  :issue:`1098`.\n\n- Fix a race condition in libuv child callbacks. See :issue:`1104`.\n\nOther Changes\n-------------\n\n- The internal, undocumented module ``gevent._threading`` has been\n  simplified.\n\n- The internal, undocumented class ``gevent._socket3._fileobject`` has\n  been removed. See :issue:`1084`.\n\n- Simplify handling of the libev default loop and the ``destroy()``\n  method. The default loop, when destroyed, can again be requested and\n  it will regenerate itself. The default loop is the only one that can\n  receive child events.\n\n- Make :meth:`gevent.socket.socket.sendall` up to ten times faster on\n  PyPy3, through the same change that was applied in gevent 1.1b3 for PyPy2.\n\n- Be more careful about issuing a warning about patching SSL on\n  Python 2. See :issue:`1108`.\n\n- Signal handling under PyPy with libuv is more reliable. See\n  :issue:`1112`.\n\n- The :mod:`gevent.greenlet` module is now compiled with Cython to\n  offset any performance decrease due to :issue:`755`. Please open\n  issues for any compatibility concerns. See :pr:`1115` and :pr:`1120`.\n\n- On CPython, allow the pure-Python implementations of\n  `gevent.Greenlet`, `gevent.local` and `gevent.lock` to be\n  used when the environment variable ``PURE_PYTHON`` is set. This is\n  not recommended except for debugging and testing. See :issue:`1118`.\n\n- :meth:`gevent.select.poll.poll` now interprets a *timeout* of -1 the\n  same as a *timeout* of *None* as the standard requires. Previously,\n  on libuv this was interpreted the same as a *timeout* of 0. In\n  addition, all *timeout* values less than zero are interpreted like\n  *None* (as they always were under libev). See :issue:`1127`.\n\n- Monkey-patching now defaults to patching ``threading.Event``.\n   ```\n   \n  \n  \n   ### 1.3a1\n   ```\n   ==================\n\nDependencies\n------------\n\n- gevent is now built and tested with Cython 0.27. This is required\n  for Python 3.7 support.\n\n- Update c-ares to 1.13.0. See :issue:`990`.\n\n\nPlatform Support\n----------------\n\n- Add initial support for Python 3.7a3. It has the same level of\n  support as Python 3.6.\n\n  - Using unreleased Cython 0.28 and greenlet 0.4.13; requires Python 3.7a3.\n\n  - The ``async`` functions and classes have been renamed to\n    ``async_`` due to ``async`` becoming a keyword in Python 3.7.\n    Aliases are still in place for older versions. See :issue:`1047`.\n\n- gevent is now tested on Python 3.6.4. This includes the following\n  fixes and changes:\n\n  - Errors raised from :mod:`gevent.subprocess` will have a\n    ``filename`` attribute set.\n  - The :class:`threading.Timer` class is now monkey-patched and can\n    be joined. Previously on Python 3.4 and above, joining a ``Timer``\n    would hang the process.\n  - :meth:`gevent.ssl.SSLSocket.unwrap` behaves more like the standard\n    library, including returning a SSLSocket and allowing certain\n    timeout-related SSL errors to propagate. The added standard\n    library tests ``test_ftplib.py`` now passes.\n  - :class:`gevent.subprocess.Popen` accepts a &quot;path-like object&quot; for\n    the *cwd* parameter on all platforms. Previously this only worked\n    on POSIX platforms under Python 3.6. Now it also works on Windows under\n    Python 3.6 (as expected) and is backported to all previous versions.\n\n- Linux CI now tests on PyPy3 3.5-5.9.0, updated from PyPy3 3.5-5.7.1.\n  See :issue:`1001`. PyPy2 has been updated to 5.9.0 from 5.7.1,\n  Python 2.7 has been updated to 2.7.14 from 2.7.13, Python 3.4 is\n  updated to 3.4.7 from 3.4.5, Python 3.5 is now 3.5.4 from 3.5.3, and\n  Python 3.6 is now 3.6.4 from 3.6.0.\n\n- Drop support for Python 3.3. The documentation has only claimed\n  support for 3.4+ since gevent 1.2 was released, and only 3.4+ has\n  been tested. This merely removes the supporting Trove classifier and\n  remaining test code. See :issue:`997`.\n\n- PyPy is now known to run on Windows using the libuv backend, with\n  caveats. See the section on libuv for more information.\n\n- Due to security concerns, official support for Python 2.7.8 and\n  earlier (without a modern SSL implementation) has been dropped.\n  These versions are no longer tested with gevent, but gevent can\n  still be installed on them. Supporting code will be removed in the\n  next major version of gevent. See :issue:`1073`.\n\nBuild Changes\n-------------\n\n- When building gevent from a source checkout (*not* a distributed\n  source distribution), ``make`` is no longer required and the\n  ``Makefile`` is not used. Neither is an external ``cython`` command.\n  Instead, the ``cythonize`` function is used, as recommended by\n  Cython. (The external commands were never required by source\n  distributions.) See :issue:`1076`.\n\n- :class:`gevent.local.local` is compiled with Cython on CPython.\n\n- The Cython ares &#39;channel&#39; class is no longer declared to be publicly\n  accessible from a named C structure. Doing so caused a conflict with\n  the c-ares header files.\n\nBug Fixes\n---------\n\n- If a single greenlet created and destroyed many\n  :class:`gevent.local.local` objects without ever exiting, there\n  would be a leak of the function objects intended to clean up the\n  locals after the greenlet exited. Introduce a weak reference to\n  avoid that. Reported in :issue:`981` by Heungsub Lee.\n\n- pywsgi also catches and ignores by default\n  :const:`errno.WSAECONNABORTED` on Windows. Initial patch in\n  :pr:`999` by Jan van Valburg.\n\n- :meth:`gevent.subprocess.Popen.communicate` returns the correct type\n  of str (not bytes) in universal newline mode under Python 3, or when\n  an encoding has been specified. Initial patch in :pr:`939` by\n  William Grzybowski.\n\n- :meth:`gevent.subprocess.Popen.communicate` (and in general,\n  accessing ``Popen.stdout`` and ``Popen.stderr``) returns the correct\n  type of str (bytes) in universal newline mode under Python 2.\n  Previously it always returned unicode strings. Reported in\n  :issue:`1039` by Michal Petrucha.\n\n- :class:`gevent.fileobject.FileObjectPosix` returns native strings in\n  universal newline mode on Python 2. This is consistent with what\n  :class:`.FileObjectThread` does. See :issue:`1039`.\n\n- ``socket.send()`` now catches ``EPROTOTYPE`` on macOS to handle a race\n  condition during shutdown. Fixed in :pr:`1035` by Jay Oster.\n\n- :func:`gevent.socket.create_connection` now properly cleans up open\n  sockets if connecting or binding raises a :exc:`BaseException` like\n  :exc:`KeyboardInterrupt`, :exc:`greenlet.GreenletExit` or\n  :exc:`gevent.timeout.Timeout`. Reported in :issue:`1044` by\n  kochelmonster.\n\n\nOther Changes\n-------------\n\n- ``Pool.add`` now accepts ``blocking`` and ``timeout`` parameters,\n  which function similarly to their counterparts in ``Semaphore``.\n  See :pr:`1032` by Ron Rothman.\n\n- Defer adjusting the stdlib&#39;s list of active threads until\n  ``threading`` is monkey patched. Previously this was done when\n  :mod:`gevent.threading` was imported. That module is documented to\n  be used as a helper for monkey patching, so this should generally\n  function the same, but some applications ignore the documentation\n  and directly import that module anyway.\n\n  A positive consequence is that ``import gevent.threading, threading;\n  threading.current_thread()`` will no longer return a DummyThread\n  before monkey-patching. Another positive consequence is that PyPy\n  will no longer print a ``KeyError`` on exit if\n  :mod:`gevent.threading` was imported *without* monkey-patching.\n\n  See :issue:`984`.\n\n- Specify the Requires-Python metadata for improved installation\n  support in certain tools (setuptools v24.2.1 or newer is required).\n  See :issue:`995`.\n\n- Monkey-patching after the :mod:`ssl` module has been imported now\n  prints a warning because this can produce ``RecursionError``.\n\n- :class:`gevent.local.local` objects are now approximately 3.5 times faster\n  getting, setting and deleting attributes on PyPy. This involved\n  implementing more of the attribute protocols directly. Please open\n  an issue if you have any compatibility problems. See :issue:`1020`.\n\n- :class:`gevent.local.local` is compiled with Cython on CPython. It\n  was already 5 to 6 times faster due to the work on :issue:`1020`,\n  and compiling it with Cython makes it another 5 to 6 times faster,\n  for a total speed up of about 35 times. It is now in the same\n  ballpark as the native :class:`threading.local` class. It also uses\n  one pointer less memory per object, and one pointer less memory per\n  greenlet. See :pr:`1024`.\n\n- More safely terminate subprocesses on Windows with\n  :meth:`gevent.subprocess.Popen.terminate`. Reported in :issue:`1023`\n  by Giacomo Debidda.\n\n- gevent now uses cffi&#39;s &quot;extern &#39;Python&#39;&quot; callbacks. These should be\n  faster and more stable. This requires at least cffi 1.4.0. See :issue:`1049`.\n\n- gevent now approximately tries to stick to a scheduling interval\n  when running callbacks, instead of simply running a count of\n  callbacks. The interval is determined by\n  :func:`gevent.getswitchinterval`. On Python 3, this is the same as\n  the thread switch interval. On Python 2, this defaults to 0.005s and\n  can be changed with :func:`gevent.setswitchinterval`. This should\n  result in more fair &quot;scheduling&quot; of greenlets, especially when\n  ``gevent.sleep(0)`` or other busy callbacks are in use. The interval\n  is checked every 50 callbacks to keep overhead low. See\n  :issue:`1072`. With thanks to Arcadiy Ivanov and Antonio Cuni.\n\nlibuv\n-----\n\n- Add initial *experimental* support for using libuv as a backend\n  instead of libev, controlled by setting the environment variable\n  ``GEVENT_CORE_CFFI_ONLY=libuv`` before importing gevent. This\n  suffers a number of limitations compared to libev, notably:\n\n  - libuv support is not available in the manylinux wheels uploaded to\n    PyPI. The manylinux specification requires glibc 2.5, while libuv\n    requires glibc 2.12. Install from source to access libuv on Linux\n    (e.g., pip&#39;s ``--no-binary`` option).\n\n  - Timers (such as ``gevent.sleep`` and ``gevent.Timeout``) only\n    support a resolution of 1ms (in practice, it&#39;s closer to 1.5ms).\n    Attempting to use something smaller will automatically increase it\n    to 1ms and issue a warning. Because libuv only supports\n    millisecond resolution by rounding a higher-precision clock to an\n    integer number of milliseconds, timers apparently suffer from more\n    jitter.\n\n  - Using negative timeouts may behave differently from libev.\n\n  - libuv blocks delivery of all signals, so signals are handled using\n    an (arbitrary) 0.3 second timer. This means that signal handling\n    will be delayed by up to that amount, and that the longest the\n    event loop can sleep in the operating system&#39;s ``poll`` call is\n    that amount. Note that this is what gevent does for libev on\n    Windows too.\n\n  - libuv only supports one io watcher per file descriptor, whereas\n    libev and gevent have always supported many watchers using\n    different settings. The libev behaviour is emulated at the Python\n    level, but that adds overhead.\n\n  - Looping multiple times and expecting events for the same file\n    descriptor to be raised each time without any data being read or\n    written (as works with libev) does not appear to work correctly on\n    Linux when using ``gevent.select.poll`` or a monkey-patched\n    ``selectors.PollSelector``.\n\n  - The build system does not support using a system libuv; the\n    embedded copy must be used. Using setuptools to compile libuv was\n    the most portable method found.\n\n  - If anything unexpected happens, libuv likes to ``abort()`` the\n    entire process instead of reporting an error. For example, closing\n    a file descriptor it is using in a watcher may cause the entire\n    process to be exited.\n\n  - There may be occasional otherwise unexplained and hard to\n    duplicate crashes. If you can duplicate a crash, **please** submit\n    an issue.\n\n  - This is the only backend that PyPy can use on Windows. As of this\n    alpha, there are many known issues with non-blocking sockets\n    (e.g., as used by :mod:`asyncore`; see ``test_ftplib.py``) and\n    sometimes sockets not getting closed in a timely fashion\n    (apparently; see ``test_httpservers.py``) and communicating with\n    subprocesses (it always hangs). Help tracking those down would be\n    appreciated. Only PyPy2 is tested.\n\n  Feedback and pull requests are welcome, especially to address the\n  issues mentioned above.\n\n  Other differences include:\n\n  - The order in which timers and other callbacks are invoked may be\n    different than in libev. In particular, timers and IO callbacks\n    happen in a different order, and timers may easily be off by up to\n    half of the supposed 1ms resolution. See :issue:`1057`.\n\n  - Starting a ``timer`` watcher does not update the loop&#39;s time by\n    default. This is because, unlike libev, a timer callback can cause\n    other timer callbacks to be run if they expire because the loop&#39;s\n    time updated, without cycling the event loop. See :issue:`1057`.\n\n    libev has also been changed to follow this behaviour.\n\n    Also see :issue:`1072`.\n\n  - Timers of zero duration do not necessarily cause the event loop to\n    cycle, as they do in libev. Instead, they may be called\n    immediately. If zero duration timers are added from other zero\n    duration timer callbacks, this can lead the loop to appear to\n    hang, as no IO will actually be done.\n\n    To mitigate this issue, ``loop.timer()`` detects attempts to use\n    zero duration timers and turns them into a check watcher. check\n    watchers do not support the ``again`` method.\n\n  - All watchers (e.g., ``loop.io``) and the ``Timeout`` class have a\n    ``close`` method that should be called when code is done using the\n    object (they also function as context managers and a ``with``\n    statement will automatically close them). gevent does this\n    internally for sockets, file objects and internal timeouts.\n    Neglecting to close an object may result in leaking native\n    resources. To debug this, set the environment variables\n    ``GEVENT_DEBUG=debug`` and ``PYTHONTRACEMALLOC=n`` before starting\n    the process.\n\n    The traditional cython-based libev backend will not leak if\n    ``close`` is not called and will not produce warnings. The\n    CFFI-based libev backend will not currently leak but will produce\n    warnings. The CFFI-based libuv backend may leak and will produce\n    warnings.\n\n  Again, this is extremely experimental and all of it is subject to\n  change.\n\n  See :issue:`790` for history and more in-depth discussion.\n\nlibev\n-----\n\n- The C extension has been updated to use more modern Cython idioms\n  and generate less code for simplicity, faster compilation and better\n  cache usage. See :pr:`1077`.\n\n  - Watcher objects may be slightly larger. On a 64-bit platform, a\n    typical watcher may be 16 bytes (2 pointers) larger. This is\n    offset by slight performance gains.\n\n  - Cython is no longer preprocessed. Certain attributes that were\n    previously only defined in certain compilation modes (notably\n    LIBEV_EMBED) are now always defined, but will raise\n    ``AttributeError`` or have a negative value when not available. In\n    general these attributes are not portable or documented and are\n    not implemented by libuv or the CFFI backend. See :issue:`1076`.\n\n  - Certain private helper functions (``gevent_handle_error``, and part of\n    ``gevent_call``) are now implemented in Cython instead of C. This\n    reduces our reliance on internal undocumented implementation\n    details of Cython and Python that could change. See :pr:`1080`.\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/gevent\n  - Changelog: https://pyup.io/changelogs/gevent/\n  - Homepage: http://www.gevent.org/\n</details>\n\n\n\n\n\n### Update [gunicorn](https://pypi.org/project/gunicorn) from **19.7.1** to **19.9.0**.\n\n\n*The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)*\n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/gunicorn\n  - Changelog: https://pyup.io/changelogs/gunicorn/\n  - Homepage: http://gunicorn.org\n</details>\n\n\n\n\n\n### Update [django-environ](https://pypi.org/project/django-environ) from **0.4.4** to **0.4.5**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 0.4.5\n   ```\n   --------------------------\nAdded\n+++++\n  - Support for Django 2.0\n  - Support for smart casting\n  - Support PostgreSQL unix domain socket paths\n  - Tip: Multiple env files\n\nChanged\n+++++++\n  - Fix parsing option values None, True and False\n  - Order of importance of engine configuration in db_url_config\n\nRemoved\n+++++++\n  - Remove django and six dependencies\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/django-environ\n  - Changelog: https://pyup.io/changelogs/django-environ/\n  - Repo: https://github.com/joke2k/django-environ\n</details>\n\n\n\n\n\n### Update [whitenoise](https://pypi.org/project/whitenoise) from **3.3.1** to **4.1**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 4.1\n   ```\n   ----\n\n * Silenced spurious warning about missing directories when in development (i.e\n   &quot;autorefresh&quot;) mode.\n * Support supplying paths as `Pathlib\n   &lt;https://docs.python.org/3.4/library/pathlib.html&gt;`_ instances, rather than\n   just strings (thanks `browniebroke &lt;https://github.com/browniebroke&gt;`_).\n * Add a new :ref:`CompressedStaticFilesStorage &lt;compression-and-caching&gt;`\n   backend to support applying compression without applying Django&#39;s hash-versioning\n   process.\n * Documentation improvements.\n   ```\n   \n  \n  \n   ### 4.0\n   ```\n   ----\n\n.. note:: **Breaking changes**\n          The latest version of WhiteNoise removes some options which were\n          deprecated in the previous major release:\n\n    * The WSGI integration option for Django\n      (which involved editing ``wsgi.py``) has been removed. Instead, you\n      should add WhiteNoise to your\n      middleware list in ``settings.py`` and remove any reference to WhiteNoise from\n      ``wsgi.py``.\n      See the :ref:`documentation &lt;django-middleware&gt;` for more details. |br|\n      (The :doc:`pure WSGI &lt;base&gt;` integration is still available for non-Django apps.)\n\n    * The ``whitenoise.django.GzipManifestStaticFilesStorage`` alias has now\n      been removed. Instead you should use the correct import path:\n      ``whitenoise.storage.CompressedManifestStaticFilesStorage``.\n\n    If you are not using either of these integration options you should have\n    no issues upgrading to the latest version.\n\nRemoved Python 3.3 Support\n++++++++++++++++++++++++++\n\nRemoved support for Python 3.3 since it&#39;s end of life was in September 2017.\n\n\nIndex file support\n++++++++++++++++++\n\nWhiteNoise now supports serving :ref:`index files &lt;index-files-django&gt;` for\ndirectories (e.g. serving ``/example/index.html`` at ``/example/``). It also\ncreates redirects so that visiting the index file directly, or visiting the URL\nwithout a trailing slash will redirect to the correct URL.\n\n\nRange header support (&quot;byte serving&quot;)\n+++++++++++++++++++++++++++++++++++++\n\nWhiteNoise now respects the HTTP Range header which allows a client to request\nonly part of a file. The main use for this is in serving video files to iOS\ndevices as Safari refuses to play videos unless the server supports the\nRange header.\n\n\nETag support\n++++++++++++\n\nWhiteNoise now adds ETag headers to files using the same algorithm used by\nnginx. This gives slightly better caching behaviour than relying purely on Last\nModified dates (although not as good as creating immutable files using\nsomething like ``ManifestStaticFilesStorage``, which is still the best option\nif you can use it).\n\nIf you need to generate your own ETags headers for any reason you can define a\ncustom :any:`add_headers_function &lt;WHITENOISE_ADD_HEADERS_FUNCTION&gt;`.\n\n\nRemove requirement to run collectstatic\n+++++++++++++++++++++++++++++++++++++++\n\nBy setting :any:`WHITENOISE_USE_FINDERS` to ``True`` files will be served\ndirectly from their original locations (usually in ``STATICFILES_DIRS`` or app\n``static`` subdirectories) without needing to be collected into ``STATIC_ROOT``\nby the collectstatic command. This was\nalways the default behaviour when in ``DEBUG`` mode but previously it wasn&#39;t\npossible to enable this behaviour in production. For small apps which aren&#39;t\nusing the caching and compression features of the more advanced storage\nbackends this simplifies the deployment process by removing the need to run\ncollectstatic as part of the build step -- in fact, it&#39;s now possible not to\nhave any build step at all.\n\n\nCustomisable immutable files test\n+++++++++++++++++++++++++++++++++\n\nWhiteNoise ships with code which detects when you are using Django&#39;s\nManifestStaticFilesStorage backend and sends optimal caching headers for files\nwhich are guaranteed not to change. If you are using a different system for\ngenerating cacheable files then you might need to supply your own function for\ndetecting such files. Previously this required subclassing WhiteNoise, but now\nyou can use the :any:`WHITENOISE_IMMUTABLE_FILE_TEST` setting.\n\n\nFix runserver_nostatic to work with Channels\n++++++++++++++++++++++++++++++++++++++++++++\n\nThe old implementation of :ref:`runserver_nostatic &lt;runserver-nostatic&gt;` (which\ndisables Django&#39;s default static file handling in development) did not work\nwith `Channels`_, which needs its own runserver implementation. The\nrunserver_nostatic command has now been rewritten so that it should work with\nChannels and with any other app which provides its own runserver.\n\n.. _Channels: https://channels.readthedocs.io/\n\n\nReduced storage requirements for static files\n+++++++++++++++++++++++++++++++++++++++++++++\n\nThe new :any:`WHITENOISE_KEEP_ONLY_HASHED_FILES` setting reduces the number of\nfiles in STATIC_ROOT by half by storing files only under their hashed names\n(e.g.  ``app.db8f2edc0c8a.js``), rather than also keeping a copy with the\noriginal name (e.g. ``app.js``).\n\n\n\nImproved start up performance\n+++++++++++++++++++++++++++++\n\nWhen in production mode (i.e. when :any:`autorefresh &lt;WHITENOISE_AUTOREFRESH&gt;`\nis disabled), WhiteNoise scans all static files when the application starts in\norder to be able to serve them as efficiently and securely as possible. For\nmost applications this makes no noticeable difference to start up time, however\nfor applications with very large numbers of static files this process can take\nsome time. In WhiteNoise 4.0 the file scanning code has been rewritten to do\nthe minimum possible amount of filesystem access which should make the start up\nprocess considerably faster.\n\n\nWindows Testing\n+++++++++++++++\n\nWhiteNoise has always aimed to support Windows as well as \\*NIX platforms but\nwe are now able to run the test suite against Windows as part of the CI process\nwhich should ensure that we can maintain Windows compatibility in future.\n\n\nModification times for compressed files\n+++++++++++++++++++++++++++++++++++++++\n\nThe compressed storage backend (which generates Gzip and Brotli compressed\nfiles) now ensures that compressed files have the same modification time as the\noriginals.  This only makes a difference if you are using the compression\nbackend with something other than WhiteNoise to actually serve the files, which\nvery few users do.\n\nReplaced brotlipy with official Brotli Python Package\n+++++++++++++++++++++++++++++++++++++++++++++++++++++\n\nSince the official `Brotli project &lt;https://github.com/google/brotli&gt;`_ offers\na `Brotli Python package &lt;https://pypi.org/project/Brotli/&gt;`_ brotlipy has been\nreplaced with Brotli.\n\nFurthermore a ``brotli`` key has been added to ``extras_require`` which allows\ninstalling WhiteNoise and Brotli together like this:\n\n.. code-block:: bash\n\n    pip install whitenoise[brotli]\n\n\n---------------------------\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/whitenoise\n  - Changelog: https://pyup.io/changelogs/whitenoise/\n  - Homepage: http://whitenoise.evans.io\n</details>\n\n\n\n\n\n### Update [django-anymail](https://pypi.org/project/django-anymail) from **1.4** to **4.3**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 4.3\n   ```\n   ----\n\n*2018-10-11*\n\nFeatures\n~~~~~~~~\n\n*  Treat MIME attachments that have a *Content-ID* but no explicit *Content-Disposition*\n   header as inline, matching the behavior of many email clients. For maximum\n   compatibility, you should always set both (or use Anymail&#39;s inline helper functions).\n   (Thanks `costela`_.)\n\nFixes\n~~~~~\n\n*  **Mailgun:** Raise `AnymailUnsupportedFeature` error when attempting to send an\n   attachment without a filename (or inline attachment without a *Content-ID*), because\n   Mailgun silently drops these attachments from the sent message. (See\n   `docs &lt;https://anymail.readthedocs.io/en/stable/esps/mailgun/limitations-and-quirks&gt;`__.\n   Thanks `costela`_ for identifying this undocumented Mailgun API limitation.)\n*  **Mailgun:** Fix problem where attachments with non-ASCII filenames would be lost.\n   (Works around Requests/urllib3 issue encoding multipart/form-data filenames in a way\n   that isn&#39;t RFC 7578 compliant. Thanks to `decibyte`_ for catching the problem.)\n\nOther\n~~~~~\n*  Add (undocumented) DEBUG_API_REQUESTS Anymail setting. When enabled, prints raw\n   API request and response during send. Currently implemented only for Requests-based\n   backends (all but Amazon SES and SparkPost). Because this can expose API keys and\n   other sensitive info in log files, it should not be used in production.\n   ```\n   \n  \n  \n   ### 4.2\n   ```\n   ----\n\n*2018-09-07*\n\nFeatures\n~~~~~~~~\n\n*  **Postmark:** Support per-recipient template `merge_data` and batch sending. (Batch\n   sending can be used with or without a template. See\n   `docs &lt;https://anymail.readthedocs.io/en/stable/esps/postmark/postmark-templates&gt;`__.)\n\nFixes\n~~~~~\n\n*  **Postmark:** When using `template_id`, ignore empty subject and body. (Postmark\n   issues an error if Django&#39;s default empty strings are used with template sends.)\n   ```\n   \n  \n  \n   ### 4.1\n   ```\n   ----\n\n*2018-08-27*\n\nFeatures\n~~~~~~~~\n\n*  **SendGrid:** Support both new &quot;dynamic&quot; and original &quot;legacy&quot; transactional\n   templates. (See\n   `docs &lt;https://anymail.readthedocs.io/en/stable/esps/sendgrid/sendgrid-templates&gt;`__.)\n*  **SendGrid:** Allow merging `esp_extra[&quot;personalizations&quot;]` dict into other message-derived\n   personalizations. (See\n   `docs &lt;https://anymail.readthedocs.io/en/stable/esps/sendgrid/sendgrid-esp-extra&gt;`__.)\n   ```\n   \n  \n  \n   ### 4.0\n   ```\n   ----\n\n*2018-08-19*\n\nBreaking changes\n~~~~~~~~~~~~~~~~\n\n*  Drop support for Django versions older than Django 1.11.\n   (For compatibility back to Django 1.8, stay on the Anymail `v3.0`_\n   extended support branch.)\n*  **SendGrid:** Remove the legacy SendGrid *v2* EmailBackend.\n   (Anymail&#39;s default since v0.8 has been SendGrid&#39;s newer v3 API.)\n   If your settings.py `EMAIL_BACKEND` still references &quot;sendgrid_v2,&quot; you must\n   `upgrade to v3 &lt;https://anymail.readthedocs.io/en/v3.0/esps/sendgrid/upgrading-to-sendgrid-s-v3-api&gt;`__.\n\nFeatures\n~~~~~~~~\n\n*  **Mailgun:** Add support for new Mailgun webhooks. (Mailgun&#39;s original &quot;legacy\n   webhook&quot; format is also still supported. See\n   `docs &lt;https://anymail.readthedocs.io/en/stable/esps/mailgun/mailgun-webhooks&gt;`__.)\n*  **Mailgun:** Document how to use new European region. (This works in earlier\n   Anymail versions, too.)\n*  **Postmark:** Add support for Anymail&#39;s normalized `metadata` in sending\n   and webhooks.\n\nFixes\n~~~~~\n\n*  Avoid problems with Gmail blocking messages that have inline attachments, when sent\n   from a machine whose local hostname ends in *.com*. Change Anymail&#39;s\n   `attach_inline_image()` default *Content-ID* domain to the literal text &quot;inline&quot;\n   (rather than Python&#39;s default of the local hostname), to work around a limitation\n   of some ESP APIs that don&#39;t permit distinct content ID and attachment filenames\n   (Mailgun, Mailjet, Mandrill and SparkPost). See `112`_ for more details.\n*  **Amazon SES:** Work around an\n   `Amazon SES bug &lt;https://forums.aws.amazon.com/thread.jspa?threadID=287048&gt;`__\n   that can corrupt non-ASCII message bodies if you are using SES&#39;s open or click\n   tracking. (See `115`_ for more details. Thanks to `varche1`_ for isolating\n   the specific conditions that trigger the bug.)\n\nOther\n~~~~~\n\n*  Maintain changelog in the repository itself (rather than in GitHub release notes).\n*  Test against released versions of Python 3.7 and Django 2.1.\n   ```\n   \n  \n  \n   ### 3.0\n   ```\n   ----\n\n*2018-05-30*\n\nThis is an extended support release. Anymail v3.x will receive security updates\nand fixes for any breaking ESP API changes through at least April, 2019.\n\nBreaking changes\n~~~~~~~~~~~~~~~~\n\n*  Drop support for Python 3.3 (see `99`_).\n*  **SendGrid:** Fix a problem where Anymail&#39;s status tracking webhooks didn&#39;t always\n   receive the same `event.message_id` as the sent `message.anymail_status.message_id`,\n   due to unpredictable behavior by SendGrid&#39;s API. Anymail now generates a UUID for\n   each sent message and attaches it as a SendGrid custom arg named anymail_id. For most\n   users, this change should be transparent. But it could be a breaking change if you\n   are relying on a specific message_id format, or relying on message_id matching the\n   *Message-ID* mail header or SendGrid&#39;s &quot;smtp-id&quot; event field. (More details in the\n   `docs &lt;https://anymail.readthedocs.io/en/stable/esps/sendgrid/sendgrid-message-id&gt;`__;\n   also see `108`_.) Thanks to `joshkersey`_ for the report and the fix.\n\nFeatures\n~~~~~~~~\n\n*  Support Django 2.1 prerelease.\n\nFixes\n~~~~~\n\n*  **Mailjet:** Fix tracking webhooks to work correctly when Mailjet &quot;group events&quot;\n   option is disabled (see `106`_).\n\nDeprecations\n~~~~~~~~~~~~\n\n*  This will be the last Anymail release to support Django 1.8, 1.9, and 1.10\n   (see `110`_).\n*  This will be the last Anymail release to support the legacy SendGrid v2 EmailBackend\n   (see `111`_). (SendGrid&#39;s newer v3 API has been the default since Anymail v0.8.)\n\nIf these deprecations affect you and you cannot upgrade, set your requirements to\n`django-anymail~=3.0` (a &quot;compatible release&quot; specifier, equivalent to `&gt;=3.0,==3.*`).\n   ```\n   \n  \n  \n   ### 2.2\n   ```\n   ----\n\n*2018-04-16*\n\nFixes\n~~~~~\n\n*  Fix a breaking change accidentally introduced in v2.1: The boto3 package is no\n   longer required if you aren&#39;t using Amazon SES.\n   ```\n   \n  \n  \n   ### 2.1\n   ```\n   ----\n\n*2018-04-11*\n\n**NOTE:** v2.1 accidentally introduced a **breaking change:** enabling Anymail webhooks\nwith `include(&#39;anymail.urls&#39;)` causes an error if boto3 is not installed, even if you\naren&#39;t using Amazon SES. This is fixed in v2.2.\n\nFeatures\n~~~~~~~~\n\n*  **Amazon SES:** Add support for this ESP\n   (`docs &lt;https://anymail.readthedocs.io/en/stable/esps/amazon_ses/&gt;`__).\n*  **SparkPost:** Add SPARKPOST_API_URL setting to support SparkPost EU and SparkPost\n   Enterprise\n   (`docs &lt;https://anymail.readthedocs.io/en/stable/esps/sparkpost/std:setting-ANYMAIL_SPARKPOST_API_URL&gt;`__).\n*  **Postmark:** Update for Postmark &quot;modular webhooks.&quot; This should not impact client\n   code. (Also, older versions of Anymail will still work correctly with Postmark&#39;s\n   webhook changes.)\n\nFixes\n~~~~~\n\n*  **Inbound:** Fix several issues with inbound messages, particularly around non-ASCII\n   headers and body content. Add workarounds for some limitations in older Python email\n   packages.\n\nOther\n~~~~~\n\n*  Use tox to manage Anymail test environments (see contributor\n   `docs &lt;https://anymail.readthedocs.io/en/stable/contributing/testing&gt;`__).\n\nDeprecations\n~~~~~~~~~~~~\n\n*  This will be the last Anymail release to support Python 3.3. See `99`_ for more\n   information.\n   ```\n   \n  \n  \n   ### 2.0\n   ```\n   ----\n\n*2018-03-08*\n\nBreaking changes\n~~~~~~~~~~~~~~~~\n\n*  Drop support for deprecated WEBHOOK_AUTHORIZATION setting. If you are using webhooks\n   and still have this Anymail setting, you must rename it to WEBHOOK_SECRET. See the\n   `v1.4`_ release notes.\n*  Handle *Reply-To,* *From,* and *To* in EmailMessage `extra_headers` the same as\n   Django&#39;s SMTP EmailBackend if supported by your ESP, otherwise raise an unsupported\n   feature error. Fixes the SparkPost backend to be consistent with other backends if\n   both `headers[&quot;Reply-To&quot;]` and `reply_to` are set on the same message. If you are\n   setting a message&#39;s `headers[&quot;From&quot;]` or `headers[&quot;To&quot;]` (neither is common), the\n   new behavior is likely a breaking change. See\n   `docs &lt;https://anymail.readthedocs.io/en/stable/sending/django_email/additional-headers&gt;`__\n   and `91`_.\n*  Treat EmailMessage `extra_headers` keys as case-\\ *insensitive* in all backends, for\n   consistency with each other (and email specs). If you are specifying duplicate\n   headers whose names differ only in case, this may be a breaking change. See\n   `docs &lt;https://anymail.readthedocs.io/en/stable/sending/django_email/additional-headers&gt;`__.\n\nFeatures\n~~~~~~~~\n\n*  **SendinBlue:** Add support for this ESP\n   (`docs &lt;https://anymail.readthedocs.io/en/stable/esps/sendinblue/&gt;`__).\n   Thanks to `RignonNoel`_ for the implementation.\n*  Add EmailMessage `envelope_sender` attribute, which can adjust the message&#39;s\n   *Return-Path* if supported by your ESP\n   (`docs &lt;https://anymail.readthedocs.io/en/stable/sending/anymail_additions/anymail.message.AnymailMessage.envelope_sender&gt;`__).\n*  Add universal wheel to PyPI releases for faster installation.\n\nOther\n~~~~~\n\n*  Update setup.py metadata, clean up implementation. (Hadn&#39;t really been touched\n   since original Djrill version.)\n*  Prep for Python 3.7.\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/django-anymail\n  - Changelog: https://pyup.io/changelogs/django-anymail/\n  - Repo: https://github.com/anymail/django-anymail\n</details>\n\n\n\n\n\n### Update [wheel](https://pypi.org/project/wheel) from **0.30.0** to **0.32.1**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 0.32.1\n   ```\n   - Fixed ``AttributeError: &#39;Requirement&#39; object has no attribute &#39;url&#39;`` on\n  setuptools/pkg_resources versions older than 18.8 (PR by Benoit Pierre)\n- Fixed ``AttributeError: &#39;module&#39; object has no attribute\n  &#39;algorithms_available&#39;`` on Python &lt; 2.7.9 (PR by Benoit Pierre)\n- Fixed permissions on the generated ``.dist-info/RECORD`` file\n   ```\n   \n  \n  \n   ### 0.32.0\n   ```\n   - Removed wheel signing and verifying features\n- Removed the &quot;wheel install&quot; and &quot;wheel installscripts&quot; commands\n- Added the ``wheel pack`` command\n- Allowed multiple license files to be specified using the ``license_files``\n  option\n- Deprecated the ``license_file`` option\n- Eliminated duplicate lines from generated requirements in\n  ``.dist-info/METADATA`` (thanks to Wim Glenn for the contribution)\n- Fixed handling of direct URL specifiers in requirements\n  (PR by Benoit Pierre)\n- Fixed canonicalization of extras (PR by Benoit Pierre)\n- Warn when the deprecated ``[wheel]`` section is used in ``setup.cfg``\n  (PR by Jon Dufresne)\n   ```\n   \n  \n  \n   ### 0.31.1\n   ```\n   - Fixed arch as ``None`` when converting eggs to wheels\n   ```\n   \n  \n  \n   ### 0.31.0\n   ```\n   - Fixed displaying of errors on Python 3\n- Fixed single digit versions in wheel files not being properly recognized\n- Fixed wrong character encodings being used (instead of UTF-8) to read and\n  write ``RECORD`` (this sometimes crashed bdist_wheel too)\n- Enabled Zip64 support in wheels by default\n- Metadata-Version is now 2.1\n- Dropped DESCRIPTION.rst and metadata.json from the list of generated files\n- Dropped support for the non-standard, undocumented ``provides-extra`` and\n  ``requires-dist`` keywords in setup.cfg metadata\n- Deprecated all wheel signing and signature verification commands\n- Removed the (already defunct) ``tool`` extras from setup.py\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/wheel\n  - Changelog: https://pyup.io/changelogs/wheel/\n  - Repo: https://github.com/pypa/wheel\n</details>\n\n\n\n\n\n### Update [django-braces](https://pypi.org/project/django-braces) from **1.12.0** to **1.13.0**.\n\n\n*The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)*\n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/django-braces\n  - Changelog: https://pyup.io/changelogs/django-braces/\n  - Repo: https://github.com/brack3t/django-braces/\n</details>\n\n\n\n\n\n### Update [django-crispy-forms](https://pypi.org/project/django-crispy-forms) from **1.7.0** to **1.7.2**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 1.7.2\n   ```\n   * Bugfixes following v1.7.1\n\nSee [1.7.1 Milestone](https://github.com/django-crispy-forms/django-crispy-forms/milestone/6?closed=1)\nfor full issue list.\n   ```\n   \n  \n  \n   ### 1.7.1\n   ```\n   * Bootstrap 4 template pack.\n\nSee [1.7.1 Milestone](https://github.com/django-crispy-forms/django-crispy-forms/milestone/5?closed=1)\nfor full issue list.\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/django-crispy-forms\n  - Changelog: https://pyup.io/changelogs/django-crispy-forms/\n  - Repo: http://github.com/maraujop/django-crispy-forms\n</details>\n\n\n\n\n\n### Update [django-model-utils](https://pypi.org/project/django-model-utils) from **3.1.1** to **3.1.2**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 3.1.2\n   ```\n   ------------------\n* Update InheritanceIterable to inherit from\n  ModelIterable instead of BaseIterable, fixes GH-277.\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/django-model-utils\n  - Changelog: https://pyup.io/changelogs/django-model-utils/\n  - Repo: https://github.com/jazzband/django-model-utils/\n</details>\n\n\n\n\n\n### Update [Pillow](https://pypi.org/project/Pillow) from **5.0.0** to **5.3.0**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 5.3.0\n   ```\n   ------------------\n\n- Changed Image size property to be read-only by default 3203\n  [radarhere]\n\n- Add warnings if image file identification fails due to lack of WebP support 3169\n  [radarhere, hugovk]\n\n- Hide the Ghostscript progress dialog popup on Windows 3378\n  [hugovk]\n\n- Adding support to reading tiled and YcbCr jpeg tiffs through libtiff 3227\n  [kkopachev]\n\n- Fixed None as TIFF compression argument 3310\n  [radarhere]\n\n- Changed GIF seek to remove previous info items 3324\n  [radarhere]\n\n- Improved PDF document info 3274\n  [radarhere]\n\n- Add line width parameter to rectangle and ellipse-based shapes 3094\n  [hugovk, radarhere]\n\n- Fixed decompression bomb check in _crop 3313\n  [dinkolubina, hugovk]\n\n- Added support to ImageDraw.floodfill for non-RGB colors 3377\n  [radarhere]\n\n- Tests: Avoid catching unexpected exceptions in tests 2203\n  [jdufresne]\n\n- Use TextIOWrapper.detach() instead of NoCloseStream 2214\n  [jdufresne]\n\n- Added transparency to matrix conversion 3205\n  [radarhere]\n\n- Added ImageOps pad method 3364\n  [radarhere]\n\n- Give correct extrema for I;16 format images 3359\n  [bz2]\n\n- Added PySide2 3279\n  [radarhere]\n\n- Corrected TIFF tags 3369\n  [radarhere]\n\n- CI: Install CFFI and pycparser without any PYTHONOPTIMIZE 3374\n  [hugovk]\n\n- Read/Save RGB webp as RGB (instead of RGBX) 3298\n  [kkopachev]\n\n- ImageDraw: Add line joints 3250\n  [radarhere]\n\n- Improved performance of ImageDraw floodfill method 3294\n  [yo1995]\n\n- Fix builds with --parallel 3272\n  [hsoft]\n\n- Add more raw Tiff modes (RGBaX, RGBaXX, RGBAX, RGBAXX) 3335\n  [homm]\n\n- Close existing WebP fp before setting new fp 3341\n  [radarhere]\n\n- Add orientation, compression and id_section as TGA save keyword arguments 3327\n  [radarhere]\n\n- Convert int values of RATIONAL TIFF tags to floats 3338\n  [radarhere, wiredfool]\n\n- Fix code for PYTHONOPTIMIZE 3233\n  [hugovk]\n\n- Changed ImageFilter.Kernel to subclass ImageFilter.BuiltinFilter, instead of the other way around 3273\n  [radarhere]\n\n- Remove unused draw.draw_line, draw.draw_point and font.getabc methods 3232\n  [hugovk]\n\n- Tests: Added ImageFilter tests 3295\n  [radarhere]\n\n- Tests: Added ImageChops tests 3230\n  [hugovk, radarhere]\n\n- AppVeyor: Download lib if not present in pillow-depends 3316\n  [radarhere]\n\n- Travis CI: Add Python 3.7 and Xenial 3234\n  [hugovk]\n\n- Docs: Added documentation for NumPy conversion 3301\n  [radarhere]\n\n- Depends: Update libimagequant to 2.12.1 3281\n  [radarhere]\n\n- Add three-color support to ImageOps.colorize 3242\n  [tsennott]\n\n- Tests: Add LA to TGA test modes 3222\n  [danpla]\n\n- Skip outline if the draw operation fills with the same colour 2922\n  [radarhere]\n\n- Flake8 fixes 3173, 3380\n  [radarhere]\n\n- Avoid deprecated &#39;U&#39; mode when opening files 2187\n  [jdufresne]\n   ```\n   \n  \n  \n   ### 5.2.0\n   ```\n   ------------------\n\n- Fixed saving a multiframe image as a single frame PDF 3137\n  [radarhere]\n\n- If a Qt version is already imported, attempt to use it first 3143\n  [radarhere]\n\n- Fix transform fill color for alpha images 3147\n  [fozcode]\n\n- TGA: Add support for writing RLE data 3186\n  [danpla]\n\n- TGA: Read and write LA data 3178\n  [danpla]\n\n- QuantOctree.c: Remove erroneous attempt to average over an empty range 3196\n  [tkoeppe]\n\n- Changed ICNS format tests to pass on OS X 10.11 3202\n  [radarhere]\n\n- Fixed bug in ImageDraw.multiline_textsize() 3114\n  [tianyu139]\n\n- Added getsize_multiline support for PIL.ImageFont 3113\n  [tianyu139]\n\n- Added ImageFile get_format_mimetype method 3190\n  [radarhere]\n\n- Changed mmap file pointer to use context manager 3216\n  [radarhere]\n\n- Changed ellipse point calculations to be more evenly distributed 3142\n  [radarhere]\n\n- Only extract first Exif segment 2946\n  [hugovk]\n\n- Tests: Test ImageDraw2, WalImageFile 3135, 2989\n  [hugovk]\n\n- Remove unnecessary &#39;if 0&#39; code 3075\n  [hugovk]\n\n- Tests: Added GD tests 1817\n  [radarhere]\n\n- Fix collections ABCs DeprecationWarning in Python 3.7 3123\n  [hugovk]\n\n- unpack_from is faster than unpack of slice 3201\n  [landfillbaby]\n\n- Docs: Add coordinate system links and file handling links in documentation 3204, 3214\n  [radarhere]\n\n- Tests: TestFilePng: Fix test_save_l_transparency() 3182\n  [danpla]\n\n- Docs: Correct argument name 3171\n  [radarhere]\n\n- Docs: Update CMake download URL 3166\n  [radarhere]\n\n- Docs: Improve Image.transform documentation 3164\n  [radarhere]\n\n- Fix transform fillcolor argument when image mode is RGBA or LA 3163\n  [radarhere]\n\n- Tests: More specific Exception testing 3158\n  [radarhere]\n\n- Add getrgb HSB/HSV color strings 3148\n  [radarhere]\n\n- Allow float values in getrgb HSL color string 3146\n  [radarhere]\n\n- AppVeyor: Upgrade to Python 2.7.15 and 3.4.4 3140\n  [radarhere]\n\n- AppVeyor: Upgrade to PyPy 6.0.0 3133\n  [hugovk]\n\n- Deprecate PILLOW_VERSION and VERSION 3090\n  [hugovk]\n\n- Support Python 3.7 3076\n  [hugovk]\n\n- Depends: Update freetype to 2.9.1, libjpeg to 9c, libwebp to 1.0.0 3121, 3136, 3108\n  [radarhere]\n\n- Build macOS wheels with Xcode 6.4, supporting older macOS versions 3068\n  [wiredfool]\n\n- Fix _i2f compilation on some GCC versions 3067\n  [homm]\n\n- Changed encoderinfo to have priority over info when saving GIF images 3086\n  [radarhere]\n\n- Rename PIL.version to PIL._version and remove it from module 3083\n  [homm]\n\n- Enable background colour parameter on rotate 3057\n  [storesource]\n\n- Remove unnecessary `if 1` directive 3072\n  [jdufresne]\n\n- Remove unused Python class, Path 3070\n  [jdufresne]\n\n- Fix dereferencing type-punned pointer will break strict-aliasing 3069\n  [jdufresne]\n   ```\n   \n  \n  \n   ### 5.1.0\n   ```\n   ------------------\n\n- Close fp before return in ImagingSavePPM 3061\n  [kathryndavies]\n\n- Added documentation for ICNS append_images 3051\n  [radarhere]\n\n- Docs: Move intro text below its header 3021\n  [hugovk]\n\n- CI: Rename appveyor.yml as .appveyor.yml 2978\n  [hugovk]\n\n- Fix TypeError for JPEG2000 parser feed 3042\n  [hugovk]\n\n- Certain corrupted jpegs can result in no data read 3023\n  [kkopachev]\n\n- Add support for BLP file format 3007\n  [jleclanche]\n\n- Simplify version checks 2998\n  [hugovk]\n\n- Fix &quot;invalid escape sequence&quot; warning on Python 3.6+ 2996\n  [timgraham]\n\n- Allow append_images to set .icns scaled images 3005\n  [radarhere]\n\n- Support appending to existing PDFs 2965\n  [vashek]\n\n- Fix and improve efficient saving of ICNS on macOS 3004\n  [radarhere]\n\n- Build: Enable pip cache in AppVeyor build 3009\n  [thijstriemstra]\n\n- Trim trailing whitespace 2985\n  [Metallicow]\n\n- Docs: Correct reference to Image.new method 3000\n  [radarhere]\n\n- Rearrange ImageFilter classes into alphabetical order 2990\n  [radarhere]\n\n- Test: Remove duplicate line 2983\n  [radarhere]\n\n- Build: Update AppVeyor PyPy version 3003\n  [radarhere]\n\n- Tiff: Open 8 bit Tiffs with 5 or 6 channels, discarding extra channels 2938\n  [homm]\n\n- Readme: Added Twitter badge 2930\n  [hugovk]\n\n- Removed __main__ code from ImageCms 2942\n  [radarhere]\n\n- Test: Changed assert statements to unittest calls 2961\n  [radarhere]\n\n- Depends: Update libimagequant to 2.11.10, raqm to 0.5.0, freetype to 2.9 3036, 3017, 2957\n  [radarhere]\n\n- Remove _imaging.crc32 in favor of builtin Python crc32 implementation 2935\n  [wiredfool]\n\n- Move Tk directory to src directory 2928\n  [hugovk]\n\n- Enable pip cache in Travis CI 2933\n  [jdufresne]\n\n- Remove unused and duplicate imports 2927\n  [radarhere]\n\n- Docs: Changed documentation references to 2.x to 2.7 2921\n  [radarhere]\n\n- Fix memory leak when opening webp files 2974\n  [wiredfool]\n\n- Setup: Fix &quot;TypeError: &#39;NoneType&#39; object is not iterable&quot; for PPC and CRUX 2951\n  [hugovk]\n\n- Setup: Add libdirs for ppc64le and armv7l 2968\n  [nehaljwani]\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/pillow\n  - Changelog: https://pyup.io/changelogs/pillow/\n  - Homepage: http://python-pillow.org\n</details>\n\n\n\n\n\n### Update [argon2-cffi](https://pypi.org/project/argon2-cffi) from **18.1.0** to **18.3.0**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 18.3.0\n   ```\n   -------------------\n\nVendoring Argon2  `670229c &lt;https://github.com/P-H-C/phc-winner-argon2/tree/670229c849b9fe882583688b74eb7dfdc846f9f6&gt;`_ (20171227)\n\n\nBackward-incompatible changes:\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n*none*\n\n\nDeprecations:\n^^^^^^^^^^^^^\n\n*none*\n\n\nChanges:\n^^^^^^^^\n\n- ``argon2.PasswordHasher``&#39;s hash type is configurable now.\n\n\n----\n   ```\n   \n  \n  \n   ### 18.2.0\n   ```\n   -------------------\n\nVendoring Argon2  `670229c &lt;https://github.com/P-H-C/phc-winner-argon2/tree/670229c849b9fe882583688b74eb7dfdc846f9f6&gt;`_ (20171227)\n\n\nChanges:\n^^^^^^^^\n\n- The hash type for ``argon2.PasswordHasher`` is Argon2\\ **id** now.\n\n  This decision has been made based on the recommendations in the latest `Argon2 RFC draft &lt;https://tools.ietf.org/html/draft-irtf-cfrg-argon2-03section-4&gt;`_.\n  `33 &lt;https://github.com/hynek/argon2_cffi/pull/33&gt;`_\n  `34 &lt;https://github.com/hynek/argon2_cffi/pull/34&gt;`_\n- To make the change of hash type backward compatible, ``argon2.PasswordHasher.verify()`` now determines the type of the hash and verifies it accordingly.\n- Some of the hash parameters have been made stricter to be closer to said recommendations.\n  The current goal for a hash verification times is around 50ms.\n  `41 &lt;https://github.com/hynek/argon2_cffi/pull/41&gt;`_\n- To allow for bespoke decisions about upgrading Argon2 parameters, it&#39;s now possible to extract them from a hash via the ``argon2.extract_parameters()`` function.\n  `41 &lt;https://github.com/hynek/argon2_cffi/pull/41&gt;`_\n- Additionally ``argon2.PasswordHasher`` now has a ``check_needs_rehash()`` method that allows to verify whether a hash has been created with the instance&#39;s parameters or whether it should be rehashed.\n  `41 &lt;https://github.com/hynek/argon2_cffi/pull/41&gt;`_\n\n\n----\n   ```\n   \n  \n</details>\n\n\n \n\n<details>\n  <summary>Links</summary>\n  \n  - PyPI: https://pypi.org/project/argon2-cffi\n  - Changelog: https://pyup.io/changelogs/argon2-cffi/\n  - Docs: https://argon2-cffi.readthedocs.io/\n</details>\n\n\n\n\n\n### Update [django-allauth](https://pypi.org/project/django-allauth) from **0.35.0** to **0.38.0**.\n\n\n<details>\n  <summary>Changelog</summary>\n  \n  \n   ### 0.38.0\n   ```\n   *******************\n\nSecurity notice\n---------------\n\nThe ``{% user_display user %}`` tag did not escape properly. Depending on the\nusername validation rules, this could lead to XSS issues.\n\n\nNote worthy changes\n-------------------\n\n- New provider: Vimeo (OAuth2).\n\n- New translations: Basque.\n   ```\n   \n  \n  \n   ### 0.37.1\n   ```\n   *******************\n\nBackwards incompatible changes\n------------------------------\n\n- Dropped the ``x-li-src: msdk`` headers from the ``linkedin_oauth2`` handshake.\n  This header is only required for mobile tokens, and breaks the regular flow.\n  Use the ``HEADERS`` setting to add this header if you need it.\n   ```\n   \n  \n  \n   ### 0.37.0\n   ```\n   *******************\n\nNote worthy changes\n-------------------\n\n- The Battle.net login backend now recognizes ``apac`` as a valid region.\n\n- User model using a ``UUIDField`` as it&#39;s primary key can now be logged\n  in upon email confirmation (if using ``ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION``).\n\n- New providers: Agave, Cern, Disqus, Globus.\n\n- New translation: Danish.\n   ```\n   \n  \n  \n   ### 0.36.0\n   ```\n  ","created_at":"2018-10-15T14:40:15Z","updated_at":"2018-10-15T14:40:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/drummonds/bene/pulls/113/commits","review_comments_url":"https://api.github.com/repos/drummonds/bene/pulls/113/comments","review_comment_url":"https://api.github.com/repos/drummonds/bene/pulls/comments{/number}","comments_url":"https://api.github.com/repos/drummonds/bene/issues/113/comments","statuses_url":"https://api.github.com/repos/drummonds/bene/statuses/7de96077a30099c8a63d404d483c344cbad51671","head":{"label":"drummonds:pyup-scheduled-update-2018-10-15","ref":"pyup-scheduled-update-2018-10-15","sha":"7de96077a30099c8a63d404d483c344cbad51671","user":{"login":"drummonds","id":3843291,"node_id":"MDQ6VXNlcjM4NDMyOTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3843291?v=4","gravatar_id":"","url":"https://api.github.com/users/drummonds","html_url":"https://github.com/drummonds","followers_url":"https://api.github.com/users/drummonds/followers","following_url":"https://api.github.com/users/drummonds/following{/other_user}","gists_url":"https://api.github.com/users/drummonds/gists{/gist_id}","starred_url":"https://api.github.com/users/drummonds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/drummonds/subscriptions","organizations_url":"https://api.github.com/users/drummonds/orgs","repos_url":"https://api.github.com/users/drummonds/repos","events_url":"https://api.github.com/users/drummonds/events{/privacy}","received_events_url":"https://api.github.com/users/drummonds/received_events","type":"User","site_admin":false},"repo":{"id":94203801,"node_id":"MDEwOlJlcG9zaXRvcnk5NDIwMzgwMQ==","name":"bene","full_name":"drummonds/bene","private":false,"owner":{"login":"drummonds","id":3843291,"node_id":"MDQ6VXNlcjM4NDMyOTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3843291?v=4","gravatar_id":"","url":"https://api.github.com/users/drummonds","html_url":"https://github.com/drummonds","followers_url":"https://api.github.com/users/drummonds/followers","following_url":"https://api.github.com/users/drummonds/following{/other_user}","gists_url":"https://api.github.com/users/drummonds/gists{/gist_id}","starred_url":"https://api.github.com/users/drummonds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/drummonds/subscriptions","organizations_url":"https://api.github.com/users/drummonds/orgs","repos_url":"https://api.github.com/users/drummonds/repos","events_url":"https://api.github.com/users/drummonds/events{/privacy}","received_events_url":"https://api.github.com/users/drummonds/received_events","type":"User","site_admin":false},"html_url":"https://github.com/drummonds/bene","description":null,"fork":false,"url":"https://api.github.com/repos/drummonds/bene","forks_url":"https://api.github.com/repos/drummonds/bene/forks","keys_url":"https://api.github.com/repos/drummonds/bene/keys{/key_id}","collaborators_url":"https://api.github.com/repos/drummonds/bene/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/drummonds/bene/teams","hooks_url":"https://api.github.com/repos/drummonds/bene/hooks","issue_events_url":"https://api.github.com/repos/drummonds/bene/issues/events{/number}","events_url":"https://api.github.com/repos/drummonds/bene/events","assignees_url":"https://api.github.com/repos/drummonds/bene/assignees{/user}","branches_url":"https://api.github.com/repos/drummonds/bene/branches{/branch}","tags_url":"https://api.github.com/repos/drummonds/bene/tags","blobs_url":"https://api.github.com/repos/drummonds/bene/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/drummonds/bene/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/drummonds/bene/git/refs{/sha}","trees_url":"https://api.github.com/repos/drummonds/bene/git/trees{/sha}","statuses_url":"https://api.github.com/repos/drummonds/bene/statuses/{sha}","languages_url":"https://api.github.com/repos/drummonds/bene/languages","stargazers_url":"https://api.github.com/repos/drummonds/bene/stargazers","contributors_url":"https://api.github.com/repos/drummonds/bene/contributors","subscribers_url":"https://api.github.com/repos/drummonds/bene/subscribers","subscription_url":"https://api.github.com/repos/drummonds/bene/subscription","commits_url":"https://api.github.com/repos/drummonds/bene/commits{/sha}","git_commits_url":"https://api.github.com/repos/drummonds/bene/git/commits{/sha}","comments_url":"https://api.github.com/repos/drummonds/bene/comments{/number}","issue_comment_url":"https://api.github.com/repos/drummonds/bene/issues/comments{/number}","contents_url":"https://api.github.com/repos/drummonds/bene/contents/{+path}","compare_url":"https://api.github.com/repos/drummonds/bene/compare/{base}...{head}","merges_url":"https://api.github.com/repos/drummonds/bene/merges","archive_url":"https://api.github.com/repos/drummonds/bene/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/drummonds/bene/downloads","issues_url":"https://api.github.com/repos/drummonds/bene/issues{/number}","pulls_url":"https://api.github.com/repos/drummonds/bene/pulls{/number}","milestones_url":"https://api.github.com/repos/drummonds/bene/milestones{/number}","notifications_url":"https://api.github.com/repos/drummonds/bene/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/drummonds/bene/labels{/name}","releases_url":"https://api.github.com/repos/drummonds/bene/releases{/id}","deployments_url":"https://api.github.com/repos/drummonds/bene/deployments","created_at":"2017-06-13T11:04:35Z","updated_at":"2017-06-13T11:06:19Z","pushed_at":"2018-10-15T14:40:14Z","git_url":"git://github.com/drummonds/bene.git","ssh_url":"git@github.com:drummonds/bene.git","clone_url":"https://github.com/drummonds/bene.git","svn_url":"https://github.com/drummonds/bene","homepage":null,"size":2148,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":2,"watchers":0,"default_branch":"test"}},"base":{"label":"drummonds:test","ref":"test","sha":"fc51352048a1560e1e9906a8ad29b9743c215a41","user":{"login":"drummonds","id":3843291,"node_id":"MDQ6VXNlcjM4NDMyOTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3843291?v=4","gravatar_id":"","url":"https://api.github.com/users/drummonds","html_url":"https://github.com/drummonds","followers_url":"https://api.github.com/users/drummonds/followers","following_url":"https://api.github.com/users/drummonds/following{/other_user}","gists_url":"https://api.github.com/users/drummonds/gists{/gist_id}","starred_url":"https://api.github.com/users/drummonds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/drummonds/subscriptions","organizations_url":"https://api.github.com/users/drummonds/orgs","repos_url":"https://api.github.com/users/drummonds/repos","events_url":"https://api.github.com/users/drummonds/events{/privacy}","received_events_url":"https://api.github.com/users/drummonds/received_events","type":"User","site_admin":false},"repo":{"id":94203801,"node_id":"MDEwOlJlcG9zaXRvcnk5NDIwMzgwMQ==","name":"bene","full_name":"drummonds/bene","private":false,"owner":{"login":"drummonds","id":3843291,"node_id":"MDQ6VXNlcjM4NDMyOTE=","avatar_url":"https://avatars0.githubusercontent.com/u/3843291?v=4","gravatar_id":"","url":"https://api.github.com/users/drummonds","html_url":"https://github.com/drummonds","followers_url":"https://api.github.com/users/drummonds/followers","following_url":"https://api.github.com/users/drummonds/following{/other_user}","gists_url":"https://api.github.com/users/drummonds/gists{/gist_id}","starred_url":"https://api.github.com/users/drummonds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/drummonds/subscriptions","organizations_url":"https://api.github.com/users/drummonds/orgs","repos_url":"https://api.github.com/users/drummonds/repos","events_url":"https://api.github.com/users/drummonds/events{/privacy}","received_events_url":"https://api.github.com/users/drummonds/received_events","type":"User","site_admin":false},"html_url":"https://github.com/drummonds/bene","description":null,"fork":false,"url":"https://api.github.com/repos/drummonds/bene","forks_url":"https://api.github.com/repos/drummonds/bene/forks","keys_url":"https://api.github.com/repos/drummonds/bene/keys{/key_id}","collaborators_url":"https://api.github.com/repos/drummonds/bene/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/drummonds/bene/teams","hooks_url":"https://api.github.com/repos/drummonds/bene/hooks","issue_events_url":"https://api.github.com/repos/drummonds/bene/issues/events{/number}","events_url":"https://api.github.com/repos/drummonds/bene/events","assignees_url":"https://api.github.com/repos/drummonds/bene/assignees{/user}","branches_url":"https://api.github.com/repos/drummonds/bene/branches{/branch}","tags_url":"https://api.github.com/repos/drummonds/bene/tags","blobs_url":"https://api.github.com/repos/drummonds/bene/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/drummonds/bene/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/drummonds/bene/git/refs{/sha}","trees_url":"https://api.github.com/repos/drummonds/bene/git/trees{/sha}","statuses_url":"https://api.github.com/repos/drummonds/bene/statuses/{sha}","languages_url":"https://api.github.com/repos/drummonds/bene/languages","stargazers_url":"https://api.github.com/repos/drummonds/bene/stargazers","contributors_url":"https://api.github.com/repos/drummonds/bene/contributors","subscribers_url":"https://api.github.com/repos/drummonds/bene/subscribers","subscription_url":"https://api.github.com/repos/drummonds/bene/subscription","commits_url":"https://api.github.com/repos/drummonds/bene/commits{/sha}","git_commits_url":"https://api.github.com/repos/drummonds/bene/git/commits{/sha}","comments_url":"https://api.github.com/repos/drummonds/bene/comments{/number}","issue_comment_url":"https://api.github.com/repos/drummonds/bene/issues/comments{/number}","contents_url":"https://api.github.com/repos/drummonds/bene/contents/{+path}","compare_url":"https://api.github.com/repos/drummonds/bene/compare/{base}...{head}","merges_url":"https://api.github.com/repos/drummonds/bene/merges","archive_url":"https://api.github.com/repos/drummonds/bene/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/drummonds/bene/downloads","issues_url":"https://api.github.com/repos/drummonds/bene/issues{/number}","pulls_url":"https://api.github.com/repos/drummonds/bene/pulls{/number}","milestones_url":"https://api.github.com/repos/drummonds/bene/milestones{/number}","notifications_url":"https://api.github.com/repos/drummonds/bene/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/drummonds/bene/labels{/name}","releases_url":"https://api.github.com/repos/drummonds/bene/releases{/id}","deployments_url":"https://api.github.com/repos/drummonds/bene/deployments","created_at":"2017-06-13T11:04:35Z","updated_at":"2017-06-13T11:06:19Z","pushed_at":"2018-10-15T14:40:14Z","git_url":"git://github.com/drummonds/bene.git","ssh_url":"git@github.com:drummonds/bene.git","clone_url":"https://github.com/drummonds/bene.git","svn_url":"https://github.com/drummonds/bene","homepage":null,"size":2148,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":2,"watchers":0,"default_branch":"test"}},"_links":{"self":{"href":"https://api.github.com/repos/drummonds/bene/pulls/113"},"html":{"href":"https://github.com/drummonds/bene/pull/113"},"issue":{"href":"https://api.github.com/repos/drummonds/bene/issues/113"},"comments":{"href":"https://api.github.com/repos/drummonds/bene/issues/113/comments"},"review_comments":{"href":"https://api.github.com/repos/drummonds/bene/pulls/113/comments"},"review_comment":{"href":"https://api.github.com/repos/drummonds/bene/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/drummonds/bene/pulls/113/commits"},"statuses":{"href":"https://api.github.com/repos/drummonds/bene/statuses/7de96077a30099c8a63d404d483c344cbad51671"}},"author_association":"COLLABORATOR","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":44,"additions":44,"deletions":44,"changed_files":4}}
{"actor":{"display_login":"pyup-bot"}}