python-client: taskcluster requires an exact version for requests library (2.4.3)

RESOLVED FIXED

Status

Taskcluster
General
RESOLVED FIXED
2 years ago
2 years ago

People

(Reporter: parkouss, Assigned: jhford)

Tracking

Details

(Reporter)

Description

2 years ago
The taskcluster python client requires the requests library to be at version 2.4.3 exactly. This is causing me trouble for mozregression as we require >=2.5.1.

I *feel* that taskcluster should not require an exact version of requests, as it is inteded to be used as a library. Plus requests really seems safe in term of API changes, so maybe you could just replace the required version with >=2.4.3 ?

I got this kind of error:

https://travis-ci.org/parkouss/mozregression#L486
(Reporter)

Updated

2 years ago
Blocks: 1177923
The same we will hit with mozdownload once will we make use of taskcluster too. So I agree to Julien's proposal.
Hi John,

I looked into this, but had some problems running the tests - any idea what might be up with my environment?

I had a look at travis, and it also is failing, but only for one test: https://travis-ci.org/jhford/taskcluster-client.py/jobs/41642975

Thanks,
Pete

(taskcluster-client.py)pmoore@Peters-iMac:~/git/taskcluster-client.py master $ make test
FLAKE8=env-python/bin/flake8 PYTHON=env-python/bin/python \
	NODE_BIN=/Users/pmoore/git/taskcluster-client.py/node-v0.10.33-darwin-x64/bin/node NOSE=env-python/bin/nosetests ./test.sh
Linting
Done linting
setup.py tests
running test
running egg_info
writing requirements to taskcluster.egg-info/requires.txt
writing taskcluster.egg-info/PKG-INFO
writing top-level names to taskcluster.egg-info/top_level.txt
writing dependency_links to taskcluster.egg-info/dependency_links.txt
reading manifest file 'taskcluster.egg-info/SOURCES.txt'
writing manifest file 'taskcluster.egg-info/SOURCES.txt'
running build_ext
test_mock_auth_ascii_encodable_unicode (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_auth_ascii_encoding_fail (test.test_client.TestAuthenticationMockServer) ... ok
test_mock_auth_bad_scope (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_auth_expired (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_auth_invalid (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_auth_signed_url (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_auth_signed_url_bad_credentials (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_auth_works (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_auth_works_with_small_scope (test.test_client.TestAuthenticationMockServer) ... ERROR
test_mock_is_up (test.test_client.TestAuthenticationMockServer) ... ERROR
test_builds_surl_keyword (test.test_client.TestBuildSignedUrl) ... ok
test_builds_surl_positional (test.test_client.TestBuildSignedUrl) ... ok
test_build_url_keyword (test.test_client.TestBuildUrl) ... ok
test_build_url_positional (test.test_client.TestBuildUrl) ... ok
test_fails_to_build_not_enough_args (test.test_client.TestBuildUrl) ... ok
test_fails_to_build_url_for_missing_method (test.test_client.TestBuildUrl) ... ok
test_creates_methods (test.test_client.TestMakeApiCall) ... ok
test_hits_no_args_no_input (test.test_client.TestMakeApiCall) ... ok
test_hits_no_args_with_input (test.test_client.TestMakeApiCall) ... ok
test_hits_two_args_no_input (test.test_client.TestMakeApiCall) ... ok
test_hits_two_args_with_input (test.test_client.TestMakeApiCall) ... ok
test_input_is_procesed (test.test_client.TestMakeApiCall) ... ok
test_kwargs (test.test_client.TestMakeApiCall) ... ok
test_methods_setup_correctly (test.test_client.TestMakeApiCall) ... ok
test_missing_input_raises (test.test_client.TestMakeApiCall) ... ok
test_mixing_kw_and_positional_fails (test.test_client.TestMakeApiCall) ... ok
test_exhaust_retries_try_status_code (test.test_client.TestMakeHttpRequest) ... ok
test_failure_connection_errors (test.test_client.TestMakeHttpRequest) ... ok
test_failure_status_code (test.test_client.TestMakeHttpRequest) ... ok
test_success_fifth_try_connection_errors (test.test_client.TestMakeHttpRequest) ... ok
test_success_fifth_try_status_code (test.test_client.TestMakeHttpRequest) ... ok
test_success_first_try (test.test_client.TestMakeHttpRequest) ... ok
test_change_default_doesnt_change_previous_instances (test.test_client.TestOptions) ... ok
test_credentials_which_cannot_be_encoded_in_unicode_work (test.test_client.TestOptions) ... ok
test_defaults_should_work (test.test_client.TestOptions) ... ok
test_int_args (test.test_client.TestProcessArgs) ... ok
test_invalid_missing_arg_positional (test.test_client.TestProcessArgs) ... ok
test_invalid_not_enough_args (test.test_client.TestProcessArgs) ... ok
test_invalid_not_enough_args_because_of_overwriting (test.test_client.TestProcessArgs) ... ok
test_invalid_positional_not_string_empty_dict (test.test_client.TestProcessArgs) ... ok
test_invalid_positional_not_string_non_empty_dict (test.test_client.TestProcessArgs) ... ok
test_invalid_too_many_keyword_args (test.test_client.TestProcessArgs) ... ok
test_invalid_too_many_positional_args (test.test_client.TestProcessArgs) ... ok
test_keyword_and_positional (test.test_client.TestProcessArgs) ... ok
test_keyword_args_only (test.test_client.TestProcessArgs) ... ok
test_no_args (test.test_client.TestProcessArgs) ... ok
test_positional_args_only (test.test_client.TestProcessArgs) ... ok
test_invalid_one_sub (test.test_client.TestSubArgsInRoute) ... ok
test_invalid_route_no_arg (test.test_client.TestSubArgsInRoute) ... ok
test_invalid_route_no_sub (test.test_client.TestSubArgsInRoute) ... ok
test_valid_no_subs (test.test_client.TestSubArgsInRoute) ... ok
test_valid_one_sub (test.test_client.TestSubArgsInRoute) ... ok
test_both_args_and_kwargs (test.test_client.TestTopicExchange) ... ok
test_constant (test.test_client.TestTopicExchange) ... ok
test_does_insertion (test.test_client.TestTopicExchange) ... ok
test_exchange (test.test_client.TestTopicExchange) ... ok
test_exchange_trailing_slash (test.test_client.TestTopicExchange) ... ok
test_no_args_no_kwargs (test.test_client.TestTopicExchange) ... ok
test_string_pass_through (test.test_client.TestTopicExchange) ... ok
test_too_many_star_args (test.test_client.TestTopicExchange) ... ok
test_has_no_spaces (test.test_utils.DumpJsonTests) ... ok
test_serializes_aware_date (test.test_utils.DumpJsonTests) ... ok
test_serializes_naive_date (test.test_utils.DumpJsonTests) ... ok
test_aware (test.test_utils.StringDateTests) ... ok
test_naive (test.test_utils.StringDateTests) ... ok
test_encode_string_for_b64_header (test.test_utils.TestBase64Utils) ... ok
test_makeb64urlsafe (test.test_utils.TestBase64Utils) ... ok
test_makeb64urlunsafe (test.test_utils.TestBase64Utils) ... ok
test_failure (test.test_utils.TestMakeSingleHttpRequest) ... ok
test_success_no_payload (test.test_utils.TestMakeSingleHttpRequest) ... ok
test_success_payload (test.test_utils.TestMakeSingleHttpRequest) ... ok
test_success_put_file (test.test_utils.TestPutfile) ... ok
test_slug_id (test.test_utils.TestSlugId) ... ok

======================================================================
ERROR: test_mock_auth_ascii_encodable_unicode (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 518, in test_mock_auth_ascii_encodable_unicode
    result = client.getCredentials('admin')
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 455, in apiCall
    return self._makeApiCall(e, *args, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 232, in _makeApiCall
    return self._makeHttpRequest(entry['method'], route, payload)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 382, in _makeHttpRequest
    superExc=rerr
TaskclusterConnectionError: ('Failed to establish connection', ConnectionError(ProtocolError('Connection aborted.', error(61, 'Connection refused')),))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: Route is: client/admin/credentials
taskcluster.client: DEBUG: Full URL used is: http://localhost:5555/v1/client/admin/credentials
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'c5vqVU',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583382}
taskcluster.client: DEBUG: Making attempt 0
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583382", nonce="c5vqVU", ext="e30=", mac="t/CAT88GBq3KjdJ+PPca2ERxn31qulqVJdLIsW/rLPA="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.10 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'ZrBTAS',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583382}
taskcluster.client: DEBUG: Making attempt 1
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583382", nonce="ZrBTAS", ext="e30=", mac="+WPycIXOYOofi0ZD6lU/6aT3/8KKNJ7u4E1bdcuPbbA="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.40 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'fCoJjD',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583383}
taskcluster.client: DEBUG: Making attempt 2
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583383", nonce="fCoJjD", ext="e30=", mac="VFfiPZo9z/w/I1IaB6KezbTrUgBngOcs20CGmGPHw/U="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.90 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'PiS5cb',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583384}
taskcluster.client: DEBUG: Making attempt 3
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583384", nonce="PiS5cb", ext="e30=", mac="vYaAnPDKvDrsWfpC31NQE35tF0uk74oeKJRrE/jKFCI="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 1.60 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'oNIx1P',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583385}
taskcluster.client: DEBUG: Making attempt 4
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583385", nonce="oNIx1P", ext="e30=", mac="td/TTSjZp4YKdWQqzl5/0ymUo2d6OF4gV/eh2ly1iwk="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 2.50 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'M13_XK',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583388}
taskcluster.client: DEBUG: Making attempt 5
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583388", nonce="M13_XK", ext="e30=", mac="72IBej1Jr/hUHqTlbrMoL5I8g/1AbM4STMR+HJMf96M="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_auth_bad_scope (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 551, in test_mock_auth_bad_scope
    client.getCredentials('admin')
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 455, in apiCall
    return self._makeApiCall(e, *args, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 232, in _makeApiCall
    return self._makeHttpRequest(entry['method'], route, payload)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 382, in _makeHttpRequest
    superExc=rerr
TaskclusterConnectionError: ('Failed to establish connection', ConnectionError(ProtocolError('Connection aborted.', error(61, 'Connection refused')),))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: Route is: client/admin/credentials
taskcluster.client: DEBUG: Full URL used is: http://localhost:5555/v1/client/admin/credentials
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'OCxmT5',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583388}
taskcluster.client: DEBUG: Making attempt 0
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="badScope", ts="1435583388", nonce="OCxmT5", ext="e30=", mac="U6Fw3ehGov82pWccF/wfBEjUXUz5a8qQpdyrZCZNWt8="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.10 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'fZL9lj',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583388}
taskcluster.client: DEBUG: Making attempt 1
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="badScope", ts="1435583388", nonce="fZL9lj", ext="e30=", mac="oLDa5FQia+GRXrsnGMPsgw8eQXrX31T31Sk6wkrO6GM="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.40 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'Ipubrf',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583388}
taskcluster.client: DEBUG: Making attempt 2
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="badScope", ts="1435583388", nonce="Ipubrf", ext="e30=", mac="cfDRYTV+oJnG5qMjvZTJJ3Dh6QKN9SDyJ9QhtauV86A="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.90 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'yghbwZ',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583389}
taskcluster.client: DEBUG: Making attempt 3
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="badScope", ts="1435583389", nonce="yghbwZ", ext="e30=", mac="csiKuP6geuBj7666WJDSmCJ6C05dov3IEENZo7C4xv4="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 1.60 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': '6CFXYY',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583391}
taskcluster.client: DEBUG: Making attempt 4
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="badScope", ts="1435583391", nonce="6CFXYY", ext="e30=", mac="eAQC/IRx3koFampN0dhq0OpDqWnnGerdFnTg4q6OEEc="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 2.50 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'NAnyUz',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583393}
taskcluster.client: DEBUG: Making attempt 5
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="badScope", ts="1435583393", nonce="NAnyUz", ext="e30=", mac="TpqEZ8P36x+BMlILYs75kxNQKMfvBx3q8s7f3FVCCBk="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_auth_expired (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 540, in test_mock_auth_expired
    client.getCredentials('admin')
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 455, in apiCall
    return self._makeApiCall(e, *args, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 232, in _makeApiCall
    return self._makeHttpRequest(entry['method'], route, payload)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 382, in _makeHttpRequest
    superExc=rerr
TaskclusterConnectionError: ('Failed to establish connection', ConnectionError(ProtocolError('Connection aborted.', error(61, 'Connection refused')),))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: Route is: client/admin/credentials
taskcluster.client: DEBUG: Full URL used is: http://localhost:5555/v1/client/admin/credentials
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'VO1y3C',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583393}
taskcluster.client: DEBUG: Making attempt 0
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="expired", ts="1435583393", nonce="VO1y3C", ext="e30=", mac="n7zidiVW5Kldvo1a97mugTH88yVBBlwtt1nyJdeaylQ="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.10 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': '3rN3Q6',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583394}
taskcluster.client: DEBUG: Making attempt 1
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="expired", ts="1435583394", nonce="3rN3Q6", ext="e30=", mac="Yv+UM6a2jHDvTWfF+ty21Ddgzpy7XDBgG/YH5yav9lE="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.40 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'jZUc22',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583394}
taskcluster.client: DEBUG: Making attempt 2
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="expired", ts="1435583394", nonce="jZUc22", ext="e30=", mac="vzhSgXwM1mGvZ6+ZQ1FiHdFBYs6P5shTrekYwvlQh30="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.90 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'X9--9z',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583395}
taskcluster.client: DEBUG: Making attempt 3
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="expired", ts="1435583395", nonce="X9--9z", ext="e30=", mac="9RSqN4AarYXVW0suWiC/D6IMo8ZVTiF/W46h0T55eRI="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 1.60 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'EjU79t',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583396}
taskcluster.client: DEBUG: Making attempt 4
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="expired", ts="1435583396", nonce="EjU79t", ext="e30=", mac="FZXNN0b/9pOM9gWDyic5S9hCiRhjs0HeBdR4J3uUtMM="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 2.50 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'ibPY8T',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583399}
taskcluster.client: DEBUG: Making attempt 5
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="expired", ts="1435583399", nonce="ibPY8T", ext="e30=", mac="sp/c2XUtHNgobNi2BZTpaRv37JRJ1SYrXhBEj5eUjO4="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_auth_invalid (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 508, in test_mock_auth_invalid
    client.getCredentials('admin')
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 455, in apiCall
    return self._makeApiCall(e, *args, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 232, in _makeApiCall
    return self._makeHttpRequest(entry['method'], route, payload)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 382, in _makeHttpRequest
    superExc=rerr
TaskclusterConnectionError: ('Failed to establish connection', ConnectionError(ProtocolError('Connection aborted.', error(61, 'Connection refused')),))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: Route is: client/admin/credentials
taskcluster.client: DEBUG: Full URL used is: http://localhost:5555/v1/client/admin/credentials
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'nWnsWX',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583399}
taskcluster.client: DEBUG: Making attempt 0
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="unknown", ts="1435583399", nonce="nWnsWX", ext="e30=", mac="KPJxB+vYE8RVLRbsVDwV3s9T3NtwQKh1UPMlTx3YcTI="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.10 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'CBYC8D',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583399}
taskcluster.client: DEBUG: Making attempt 1
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="unknown", ts="1435583399", nonce="CBYC8D", ext="e30=", mac="Wn7a8vV0NY8JaaFkAQXyB5YRJ53xQRo2+9NIWiojjS0="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.40 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'bq9_id',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583399}
taskcluster.client: DEBUG: Making attempt 2
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="unknown", ts="1435583399", nonce="bq9_id", ext="e30=", mac="gEWwweUGenDRnqKpBiGEUz4XQvv/yct1pND0/7fFhpc="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.90 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'tDePF9',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583400}
taskcluster.client: DEBUG: Making attempt 3
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="unknown", ts="1435583400", nonce="tDePF9", ext="e30=", mac="O4ulF6cEhTJ4oIRx/doChNuZIXcRsfHo6PgruHozA2A="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 1.60 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'dbpFy9',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583402}
taskcluster.client: DEBUG: Making attempt 4
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="unknown", ts="1435583402", nonce="dbpFy9", ext="e30=", mac="LEvUSsyIX+2DQn32XRtjO2DR4vVYQSxfD5be5poxdH0="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 2.50 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'Oz5IIA',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583404}
taskcluster.client: DEBUG: Making attempt 5
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="unknown", ts="1435583404", nonce="Oz5IIA", ext="e30=", mac="unzmGSOA0K7Z8dvi2q4HWUkpldzahraaO2+X7lLBPu0="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_auth_signed_url (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 580, in test_mock_auth_signed_url
    response = requests.get(signedUrl)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/api.py", line 69, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/adapters.py", line 415, in send
    raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(61, 'Connection refused'))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_auth_signed_url_bad_credentials (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 594, in test_mock_auth_signed_url_bad_credentials
    r = requests.get(signedUrl)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/api.py", line 69, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/env-python/lib/python2.7/site-packages/requests/adapters.py", line 415, in send
    raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(61, 'Connection refused'))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_auth_works (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 485, in test_mock_auth_works
    result = client.getCredentials('admin')
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 455, in apiCall
    return self._makeApiCall(e, *args, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 232, in _makeApiCall
    return self._makeHttpRequest(entry['method'], route, payload)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 382, in _makeHttpRequest
    superExc=rerr
TaskclusterConnectionError: ('Failed to establish connection', ConnectionError(ProtocolError('Connection aborted.', error(61, 'Connection refused')),))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: Route is: client/admin/credentials
taskcluster.client: DEBUG: Full URL used is: http://localhost:5555/v1/client/admin/credentials
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 't3f-B3',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583404}
taskcluster.client: DEBUG: Making attempt 0
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583404", nonce="t3f-B3", ext="e30=", mac="9UzOmlpVKW7LtByDc+MDncj61XFFPnqv7/CNhbqn52I="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.10 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'V_e2xM',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583405}
taskcluster.client: DEBUG: Making attempt 1
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583405", nonce="V_e2xM", ext="e30=", mac="3R2GnYrunGQGmTlVHz6sO7rziK9jYDN0eaSaOuPDdV8="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.40 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'JhRqPi',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583405}
taskcluster.client: DEBUG: Making attempt 2
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583405", nonce="JhRqPi", ext="e30=", mac="5hgBN+qh9IrtBgqGz+RIMZyPKdKkxV3ufAvT6zkkCGk="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.90 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'a9Uown',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583406}
taskcluster.client: DEBUG: Making attempt 3
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583406", nonce="a9Uown", ext="e30=", mac="4uGgikZgVIxQHBM0j807mNtYHhC2vRhOvwjWw52He9k="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 1.60 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': '2jA_Ck',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583408}
taskcluster.client: DEBUG: Making attempt 4
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583408", nonce="2jA_Ck", ext="e30=", mac="Ad/OLhf6nUu50JzXq6KaCNvpDm9JRmLT4mmoHY9abkU="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 2.50 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'YsptC5',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583410}
taskcluster.client: DEBUG: Making attempt 5
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="admin", ts="1435583410", nonce="YsptC5", ext="e30=", mac="EogYSBpK4jaHQFsy1dLighyTIHde49qRcUeoq5kdQk0="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_auth_works_with_small_scope (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 496, in test_mock_auth_works_with_small_scope
    result = client.getCredentials('admin')
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 455, in apiCall
    return self._makeApiCall(e, *args, **kwargs)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 232, in _makeApiCall
    return self._makeHttpRequest(entry['method'], route, payload)
  File "/Users/pmoore/git/taskcluster-client.py/taskcluster/client.py", line 382, in _makeHttpRequest
    superExc=rerr
TaskclusterConnectionError: ('Failed to establish connection', ConnectionError(ProtocolError('Connection aborted.', error(61, 'Connection refused')),))
-------------------- >> begin captured logging << --------------------
taskcluster.client: DEBUG: credentials key scrubbed from logging output
taskcluster.client: DEBUG: {'baseUrl': 'http://localhost:5555/v1', 'maxRetries': 5, 'exchangePrefix': 'test/v1', 'signedUrlExpiration': 900}
taskcluster.client: DEBUG: Found a positional argument: admin
taskcluster.client: DEBUG: After processing positional arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: After keyword arguments, we have: {'clientId': 'admin'}
taskcluster.client: DEBUG: Route is: client/admin/credentials
taskcluster.client: DEBUG: Full URL used is: http://localhost:5555/v1/client/admin/credentials
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'g8hbFh',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583410}
taskcluster.client: DEBUG: Making attempt 0
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="goodScope", ts="1435583410", nonce="g8hbFh", ext="e30=", mac="hmvTbdZuCLy2XxWMVh6ujetNecz27eTjyuBE3FX/4Ec="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.10 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': '5gOSvJ',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583410}
taskcluster.client: DEBUG: Making attempt 1
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="goodScope", ts="1435583410", nonce="5gOSvJ", ext="e30=", mac="WXnzuQpSl6JMEr8kPjGSIBHqc5bkHlqqXDQftk2HUA0="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.40 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 't9AZRK',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583411}
taskcluster.client: DEBUG: Making attempt 2
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="goodScope", ts="1435583411", nonce="t9AZRK", ext="e30=", mac="bb6ijkG8pyjKbFi3khwc+n5IfN0Z6d+EuufJnd0ZtHM="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 0.90 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': 'A0I1Bm',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583411}
taskcluster.client: DEBUG: Making attempt 3
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="goodScope", ts="1435583411", nonce="A0I1Bm", ext="e30=", mac="QrKKsO32hEbZw2u1AR5YJkT1UZF/aZU2k8Ckhcb/L58="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 1.60 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': '2t82ZT',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583413}
taskcluster.client: DEBUG: Making attempt 4
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="goodScope", ts="1435583413", nonce="2t82ZT", ext="e30=", mac="jKrKMVmk3IARD35tAemD4zYCvpfDhBgTDZ/Yabtmd+c="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
taskcluster.client: WARNING: Retrying because of: ('Connection aborted.', error(61, 'Connection refused'))
taskcluster.client: INFO: Sleeping 2.50 seconds for exponential backoff
hawk.client: DEBUG: parsed URL parts: {'hostname': 'localhost',
 'path': '/v1/client/admin/credentials',
 'port': 5555,
 'query': '',
 'resource': '/v1/client/admin/credentials',
 'scheme': 'http'}
hawk.client: DEBUG: artifacts={'app': None,
 'dlg': None,
 'ext': 'e30=',
 'hash': None,
 'host': 'localhost',
 'method': 'get',
 'nonce': '_Mu25m',
 'port': 5555,
 'resource': '/v1/client/admin/credentials',
 'ts': 1435583416}
taskcluster.client: DEBUG: Making attempt 5
taskcluster.utils: DEBUG: Making a GET request to http://localhost:5555/v1/client/admin/credentials
taskcluster.utils: DEBUG: HTTP Headers: {'Authorization': 'Hawk id="goodScope", ts="1435583416", nonce="_Mu25m", ext="e30=", mac="3fa0LftclayB+gPa1l6xTnxMLAFCtYLgkVZ6zA/Thhs="'}
taskcluster.utils: DEBUG: HTTP Payload: None (limit 100 char)
requests.packages.urllib3.connectionpool: INFO: Starting new HTTP connection (1): localhost
--------------------- >> end captured logging << ---------------------

======================================================================
ERROR: test_mock_is_up (test.test_client.TestAuthenticationMockServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/pmoore/git/taskcluster-client.py/test/test_client.py", line 473, in test_mock_is_up
    s.connect(('127.0.0.1', self.port))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 61] Connection refused

----------------------------------------------------------------------
Ran 73 tests in -1435583381.809s

FAILED (errors=9)
setup.py test does not run properly
./test.sh: line 19: kill: (4534) - No such process
Failed to kill server
make: *** [test] Error 1
Flags: needinfo?(jhford)
the short answer is that python packaging is awful.  Without using specific versions, we just use the latest and that might not work right.  Too bad python doesn't understand how to have two versions of a module as a top level concept.

I've updated to requests 2.7.0.  That's newer but still pinned down.  I can't remember if there's a way to whitelist versions of the libraries in setup.py.
Flags: needinfo?(jhford)
Thanks Julien for helping me find the right syntax for specifying a range of known-good versions of the package.

I've released 0.0.19 which will work with your version of requests, since it's between 2.4.3 and 2.7.0, which are the two known-good versions.
Status: NEW → RESOLVED
Last Resolved: 2 years ago
Resolution: --- → FIXED
status-firefox42: affected → ---
Component: TaskCluster → General
Product: Testing → Taskcluster
Target Milestone: --- → mozilla41
Resetting Version and Target Milestone that accidentally got changed...
Target Milestone: mozilla41 → ---
Version: Trunk → unspecified
Assignee: nobody → jhford
Summary: python-client: taskcluster requires an exacte version for requests library (2.4.3) → python-client: taskcluster requires an exact version for requests library (2.4.3)
You need to log in before you can comment on or make changes to this bug.