Repository: buildbot/buildbot

Issue:
Scheduled weekly dependency update for week 25



## Updates
Here's a list of all the updates bundled in this pull request. I've added some links to make it easier for you to find all the information you need.
<table align="center">

<tr>
<td><b>autobahn</b></td>
<td align="center">17.5.1</td>
<td align="center">&raquo;</td>
<td align="center">17.6.1</td>
<td>
     <a href="https://pypi.python.org/pypi/autobahn">PyPI</a> | <a href="https://pyup.io/changelogs/autobahn/">Changelog</a> | <a href="http://crossbar.io/autobahn">Homepage</a> 

</td>

<tr>
<td><b>botocore</b></td>
<td align="center">1.5.60</td>
<td align="center">&raquo;</td>
<td align="center">1.5.70</td>
<td>
     <a href="https://pypi.python.org/pypi/botocore">PyPI</a> | <a href="https://pyup.io/changelogs/botocore/">Changelog</a> | <a href="https://github.com/boto/botocore">Repo</a> 

</td>

<tr>
<td><b>isort</b></td>
<td align="center">4.2.13</td>
<td align="center">&raquo;</td>
<td align="center">4.2.15</td>
<td>
     <a href="https://pypi.python.org/pypi/isort">PyPI</a> | <a href="https://pyup.io/changelogs/isort/">Changelog</a> | <a href="https://github.com/timothycrosley/isort">Repo</a> 

</td>

<tr>
<td><b>isort</b></td>
<td align="center">4.2.13</td>
<td align="center">&raquo;</td>
<td align="center">4.2.15</td>
<td>
     <a href="https://pypi.python.org/pypi/isort">PyPI</a> | <a href="https://pyup.io/changelogs/isort/">Changelog</a> | <a href="https://github.com/timothycrosley/isort">Repo</a> 

</td>

<tr>
<td><b>lz4</b></td>
<td align="center">0.9.4</td>
<td align="center">&raquo;</td>
<td align="center">0.10.0</td>
<td>
     <a href="https://pypi.python.org/pypi/lz4">PyPI</a> | <a href="https://pyup.io/changelogs/lz4/">Changelog</a> | <a href="https://github.com/python-lz4/python-lz4">Repo</a> 

</td>

<tr>
<td><b>pathlib2</b></td>
<td align="center">2.2.1</td>
<td align="center">&raquo;</td>
<td align="center">2.3.0</td>
<td>
     <a href="https://pypi.python.org/pypi/pathlib2">PyPI</a> | <a href="https://pyup.io/changelogs/pathlib2/">Changelog</a> | <a href="https://pypi.python.org/pypi/pathlib2/">Homepage</a> 

</td>

<tr>
<td><b>requests</b></td>
<td align="center">2.17.3</td>
<td align="center">&raquo;</td>
<td align="center">2.18.1</td>
<td>
     <a href="https://pypi.python.org/pypi/requests">PyPI</a> | <a href="https://pyup.io/changelogs/requests/">Changelog</a> | <a href="http://python-requests.org">Homepage</a> 

</td>

<tr>
<td><b>txaio</b></td>
<td align="center">2.7.1</td>
<td align="center">&raquo;</td>
<td align="center">2.8.0</td>
<td>
     <a href="https://pypi.python.org/pypi/txaio">PyPI</a> | <a href="https://pyup.io/changelogs/txaio/">Changelog</a> | <a href="https://github.com/crossbario/txaio">Repo</a> 

</td>

<tr>
<td><b>zope.interface</b></td>
<td align="center">4.4.1</td>
<td align="center">&raquo;</td>
<td align="center">4.4.2</td>
<td>
     <a href="https://pypi.python.org/pypi/zope.interface">PyPI</a> | <a href="https://pyup.io/changelogs/zope.interface/">Changelog</a> | <a href="https://github.com/zopefoundation/zope.interface">Repo</a> 

</td>

<tr>
<td><b>zope.interface</b></td>
<td align="center">4.4.1</td>
<td align="center">&raquo;</td>
<td align="center">4.4.2</td>
<td>
     <a href="https://pypi.python.org/pypi/zope.interface">PyPI</a> | <a href="https://pyup.io/changelogs/zope.interface/">Changelog</a> | <a href="https://github.com/zopefoundation/zope.interface">Repo</a> 

</td>

<tr>
<td><b>buildbot-www</b></td>
<td align="center">0.9.7</td>
<td align="center">&raquo;</td>
<td align="center">0.9.8</td>
<td>
     <a href="https://pypi.python.org/pypi/buildbot-www">PyPI</a> | <a href="http://buildbot.net/">Homepage</a> 

</td>

</tr>
</table>



## Changelogs


### autobahn 17.5.1 -> 17.6.1

>### 17.6.1

>------

>`Published 2017-06-07 &lt;https://pypi.python.org/pypi/autobahn/17.6.1&gt;`__

>* new: allow components to pass WebSocket/RawSocket options
>* fix: register/subscribe decorators support different URI syntax from what session.register and session.subscribe support
>* new: allow for standard Crossbar a.c..d style pattern URIs to be used with Pattern
>* new: dynamic authorizer example
>* new: configurable log level in `ApplicationRunner.run` for asyncio
>* fix: forward reason of hard dropping WebSocket connection in `wasNotCleanReason`



>### 17.5.2


>* new: WAMP-cryptosign authentication support

>---







### botocore 1.5.60 -> 1.5.70

>### 1.5.70

>======

>* api-change:``xray``: Update xray client to latest version




>### 1.5.69

>======

>* api-change:``iot``: Update iot client to latest version
>* api-change:``servicecatalog``: Update servicecatalog client to latest version
>* api-change:``ecs``: Update ecs client to latest version
>* api-change:``ec2``: Update ec2 client to latest version




>### 1.5.68

>======

>* api-change:``clouddirectory``: Update clouddirectory client to latest version
>* api-change:``application-autoscaling``: Update application-autoscaling client to latest version




>### 1.5.67

>======

>* api-change:``config``: Update config client to latest version




>### 1.5.66

>======

>* api-change:``rds``: Update rds client to latest version




>### 1.5.65

>======

>* api-change:``opsworks``: Update opsworks client to latest version




>### 1.5.64

>======

>* api-change:``rekognition``: Update rekognition client to latest version
>* api-change:``iot``: Update iot client to latest version
>* api-change:``pinpoint``: Update pinpoint client to latest version




>### 1.5.63

>======

>* api-change:``greengrass``: Update greengrass client to latest version
>* api-change:``codebuild``: Update codebuild client to latest version




>### 1.5.62

>======

>* api-change:``cloudfront``: Update cloudfront client to latest version
>* api-change:``iot``: Update iot client to latest version
>* api-change:``acm``: Update acm client to latest version




>### 1.5.61

>======

>* api-change:``iot``: Update iot client to latest version
>* api-change:``appstream``: Update appstream client to latest version








### isort 4.2.13 -> 4.2.15

>### 4.2.15

>IMPORTANT NOTE: This will be the last release with Python 2.6 support, subsequent releases will be 2.7+ only
>- Fixed certain one line imports not being successfully wrapped



>### 4.2.14

>- Fixed 559 &amp; 565: Added missing standard library imports







### isort 4.2.13 -> 4.2.15

>### 4.2.15

>IMPORTANT NOTE: This will be the last release with Python 2.6 support, subsequent releases will be 2.7+ only
>- Fixed certain one line imports not being successfully wrapped



>### 4.2.14

>- Fixed 559 &amp; 565: Added missing standard library imports







### lz4 0.9.4 -> 0.10.0

>### 0.10.0

>Key changes in this release:
>* Update bundled LZ4 library to version 1.7.5
>* When version 1.7.5 or later of the LZ4 library is in use we change the default compression level for HC (high_compression) mode to match that of upstream
>* Add parameter to lz4.block[de]compress to optionally return bytearray
>* lz4.block[de]compress now accept any source object which implements the buffer interface







### pathlib2 2.2.1 -> 2.3.0

>### 2.3.0

>^^^^^^^^^^^^^

>- Sync with upstream pathlib from CPython 3.6.1 (7d1017d).







### requests 2.17.3 -> 2.18.1

>### 2.18.1

>+++++++++++++++++++

>**Bugfixes**

>- Fix an error in the packaging whereby the *.whl contained incorrect data that
>  regressed the fix in v2.17.3.



>### 2.18.0

>+++++++++++++++++++

>**Improvements**

>- ``Response`` is now a context manager, so can be used directly in a ``with`` statement
>  without first having to be wrapped by ``contextlib.closing()``.

>**Bugfixes**

>- Resolve installation failure if multiprocessing is not available
>- Resolve tests crash if multiprocessing is not able to determine the number of CPU cores
>- Resolve error swallowing in utils set_environ generator








### txaio 2.7.1 -> 2.8.0

>### 2.8.0

>-----

>- June 8, 2017
>- fix: asyncio - remove the hacks for &quot;simulating&quot; chained futures (no longer works - cpy36 has native code for future)
>- new: run CI on Python 3.5 and 3.6








### zope.interface 4.4.1 -> 4.4.2

>### 4.4.2

>------------------

>- Fix a regression storing
>  ``zope.component.persistentregistry.PersistentRegistry`` instances.
>  See `issue 85 &lt;https://github.com/zopefoundation/zope.interface/issues/85&gt;`_.

>- Fix a regression that could lead to the utility registration cache
>  of ``Components`` getting out of sync. See `issue 93
>  &lt;https://github.com/zopefoundation/zope.interface/issues/93&gt;`_.







### zope.interface 4.4.1 -> 4.4.2

>### 4.4.2

>------------------

>- Fix a regression storing
>  ``zope.component.persistentregistry.PersistentRegistry`` instances.
>  See `issue 85 &lt;https://github.com/zopefoundation/zope.interface/issues/85&gt;`_.

>- Fix a regression that could lead to the utility registration cache
>  of ``Components`` getting out of sync. See `issue 93
>  &lt;https://github.com/zopefoundation/zope.interface/issues/93&gt;`_.










That's it for now!

Happy merging! 🤖



Discussion:

Resolving patch:
diff --git a/master/buildbot/steps/python.py b/master/buildbot/steps/python.py
--- a/master/buildbot/steps/python.py
+++ b/master/buildbot/steps/python.py
@@ -103,6 +103,8 @@ def logConsumer(self):
         first = True
         while True:
             stream, line = yield
+            if stream == 'h':
+                continue
             # the first few lines might contain echoed commands from a 'make
             # pyflakes' step, so don't count these as warnings. Stop ignoring
             # the initial lines as soon as we see one with a colon.
@@ -223,6 +225,8 @@ def logConsumer(self):
         line_re = None  # decide after first match
         while True:
             stream, line = yield
+            if stream == 'h':
+                continue
             if not line_re:
                 # need to test both and then decide on one
                 if self._parseable_line_re.match(line):


Test patch:
diff --git a/master/buildbot/test/unit/test_steps_python.py b/master/buildbot/test/unit/test_steps_python.py
--- a/master/buildbot/test/unit/test_steps_python.py
+++ b/master/buildbot/test/unit/test_steps_python.py
@@ -165,6 +165,18 @@ def test_error(self):
         self.expectProperty('pylint-error', 1)
         return self.runStep()
 
+    def test_header_output(self):
+        self.setupStep(python.PyLint(command=['pylint']))
+        self.expectCommands(
+            ExpectShell(workdir='wkdir', command=['pylint'],
+                        usePTY='slave-config')
+            + ExpectShell.log(
+                'stdio',
+                header='W: 11: Bad indentation. Found 6 spaces, expected 4\n')
+            + 0)
+        self.expectOutcome(result=SUCCESS, state_string='pylint')
+        return self.runStep()
+
     def test_failure(self):
         self.setupStep(python.PyLint(command=['pylint']))
         self.expectCommands(
@@ -360,6 +372,19 @@ def test_success(self):
         self.expectOutcome(result=SUCCESS, state_string='pyflakes')
         return self.runStep()
 
+    def test_content_in_header(self):
+        self.setupStep(python.PyFlakes())
+        self.expectCommands(
+            ExpectShell(workdir='wkdir', command=['make', 'pyflakes'],
+                        usePTY='slave-config')
+            + ExpectShell.log(
+                'stdio',
+                # don't match pyflakes-like output in the header
+                header="foo.py:1: 'bar' imported but unused\n")
+            + 0)
+        self.expectOutcome(result=0, state_string='pyflakes')
+        return self.runStep()
+
     def test_unused(self):
         self.setupStep(python.PyFlakes())
         self.expectCommands(
diff --git a/master/buildbot/test/util/steps.py b/master/buildbot/test/util/steps.py
--- a/master/buildbot/test/util/steps.py
+++ b/master/buildbot/test/util/steps.py
@@ -75,7 +75,8 @@ def _describe_cmd_difference(exp, command):
         print('Keys in expectation missing from command: {0}'.format(missing_in_cmd))
     if diff:
         formatted_diff = ['"{0}": expected {1}, vs actual {2}'.format(*d) for d in diff]
-        print('Key differences between expectation and command: {0}'.format('\n'.join(formatted_diff)))
+        print('Key differences between expectation and command: {0}'.format(
+            '\n'.join(formatted_diff)))
 
 
 class BuildStepMixin(object):
@@ -305,14 +306,13 @@ def check(result):
                     print(loog.stdout)
                     print(loog.stderr)
 
-            self.assertEqual(result, self.exp_result, "expected result")
+            self.assertEqual(result, self.exp_result)
             if self.exp_state_string:
                 stepStateString = self.master.data.updates.stepStateString
                 stepids = list(stepStateString)
                 assert stepids, "no step state strings were set"
                 self.assertEqual(stepStateString[stepids[0]],
-                                 self.exp_state_string,
-                                 "expected step state strings")
+                                 self.exp_state_string)
             for pn, (pv, ps) in iteritems(self.exp_properties):
                 self.assertTrue(self.properties.hasProperty(pn),
                                 "missing property '%s'" % pn)