| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
|
|
| |
* Ignore IDE metadata
* Python 2.6 is EOL and was dropped in 2015
* Use automatic formatters
|
| |\
| |
| | |
Fixed an error when "Content-Length" is not int like
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
commit 352339b3ee12e120d044340c075a32ddb6656e89
Author: Andrew Gross <andrew.w.gross@gmail.com>
Date: Tue Oct 11 19:00:22 2016 -0400
Remove unused imports
commit 226d294d9bdcb396a06c0df534ad94d56ccc8e86
Author: Andrew Gross <andrew.w.gross@gmail.com>
Date: Tue Oct 11 18:54:20 2016 -0400
Patch out urllib monkeypatching when installed, adds tests for behavior
|
| | | |
|
| |\ \
| | |
| | | |
Decorate unittest.TestCase setUp/tearDown methods
|
| | |/
| |
| |
| |
| |
| |
| | |
When the class being decorated by httprettified inherits from
unittest.TestCase, enable HTTPretty in setUp rather than decorating each
test separately. This lets users register their HTTP mock entries in
setUp if they want.
|
| |\ \
| | |
| | | |
Use a tempfile instead of a StringIO object
|
| | | |
| | |
| | |
| | |
| | |
| | | |
This provides a socket.fileno(), so
libraries that call select.poll() work properly.
Also supports mocking huge responses larger than memory, if needed.
|
| |\ \ \
| | | |
| | | | |
Encode callable body length as str and not bytes
|
| | |/ /
| | |
| | |
| | |
| | |
| | |
| | | |
The bytes() constructor, when given an integer, creates a
bytes object of that length, instead of casting the number to a
string representation. This change uses str() to cast the integer,
and then relies on the later utf8() call to convert it to bytes.
|
| |/ / |
|
| | |
| |
| |
| |
| |
| | |
bytes registers bytes
also adjusted bogus shebang to not be real
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| |\ \
| | |
| | | |
Add priority argument to register_uri.
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Matchers are stored in a dictionary and are checked in an unpredictable
order. This can be a problem when multiple matchers match the same
URI--for example, when using multiple regex matchers. This patch adds an
optional an optional priority argument to register_uri to resolve this
ambiguity. When matching a URI, matchers are sorted descending by
priority, and the first match is used.
|
| | | | |
|
| |/ / |
|
| | |
| |
| |
| |
| |
| |
| | |
Resolve incompatibility between HTTPretty and MongoDB / pymongo (before
patch, pymongo times out trying to read from socket, since truesock#recv
was called in fakesocket#real_sendall). Make minor change to PR #208 for
clarity, and fix breaking unit tests.
|
| | | |
|
| | | |
|
| |\ \
| | |
| | | |
Allow_net_connect, prevent real connections
|
| | |/
| |
| |
| |
| |
| |
| | |
Users can prevent all real connections by assigning
HTTPretty.allow_net_connect = False.
When a connection is blocked, UnmockedError is raised instead.
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Reopens https://github.com/gabrielfalcao/HTTPretty/pull/145. Reopened as a new PR because Travis didn't seem to be running the correct tests. Removed the irrelevant changes, such as PEP8 and the `self.truesock.settimeout(0)` change.
HTTPretty does not behave correctly when using regex matching, HTTPS and custom ports. When this scenario is triggered, a timeout/max retries exceeded error occurs.
To duplicate run:
```python
@httpretty.activate
def exceed_max_retries_with_custom_port_and_https():
HTTPretty.register_uri(
HTTPretty.GET,
re.compile('https://api.yipit.com:1234/v1/deal;brand=(?P<brand_name>\w+)'),
body='meow'
)
uri = 'https://api.yipit.com:1234/v1/deal;brand=gap?first_name=chuck&last_name=norris'
response = requests.get(uri)
return response.content
```
Cause
--
The combination of a regex URI, custom port, and HTTPS causes HTTPretty to get stuck at https://github.com/gabrielfalcao/HTTPretty/blob/2e814635fff916d3a8c246ca010245362266c89f/httpretty/core.py#L323 and eventually raise this error:
```
ConnectionError: HTTPSConnectionPool(host='api.yipit.com', port=1234): Max retries exceeded with url: /v1/deal;brand=gap?first_name=chuck&last_name=norris (Caused by <class 'socket.error'>: [Errno 36] Operation now in progress).
```
This error happens because URI schema's are reconstructed incorrectly during the URI matching.
This should fail (http != https), but it does not!
```python
@httpretty.activate
def broken_reconstruction_of_uri_schema():
uri = 'api.yipit.com:1234/v1/deal'
HTTPretty.register_uri(HTTPretty.GET,
'https://' + uri,
body=lambda method, uri, headers: [200, headers, uri]
)
response = requests.get(uri)
expect(response.text).to.equal('http://' + uri) # incorrect!
```
Solution
--
To correct the internal confusion between HTTP and HTTPS ports, we need to separate the two in our DEFAULT/POTENTIAL PORTS lists. When URIMatcher encounters a non-regex URI it uses URIInfo.from_uri to add
the URIs port to the known ports. This behavior is now added for regex URIs.
We now use the DEFAULT_PORTS lists in HTTPretty.reset() to reset the POTENTIAL_PORTS lists. Also, to avoid using the global keyword, we do an in-place reset with intersection_update.
Added the following tests:
- test_httpretty_should_work_with_non_standard_ports
- test_httpretty_reset_by_switching_protocols_for_same_port
- test_httpretty_should_allow_registering_regexes_with_port_and_give_a_proper_match_to_the_callback
|
| | |
|
| |
|
|
| |
Bytes were needed in some place, instead of text strings.
|
| |
|
|
|
|
| |
test_httpretty_should_allow_registering_regexes_with_streaming_responses()
This was cause by the use of text strings instead of bytes.
|
| |
|
|
|
|
|
| |
In Python 2, dict(request.headers) will have all keys in lower case, while In
Python 3, the capital letters will still be there. This is because of internal
changes in the requests library. Let's use lower-case headers, so that this is
not an issue.
|
| |
|
|
|
|
|
|
| |
* in record_request, do not try to call json.dumps() on a dict() containing
bytes;
* in test_recording_calls(), do not hardcode the expected version of Tornado.
There was a json.dumps(some_dict) and soe_dict had bytes values
|
| |
|
|
|
| |
StringIO might be either 'StringIO.StringIO' or 'io.BytesIO' depending on the
version of Python used. Do not hardcode the type in the test.
|
| |
|
|
| |
Thanks to Victor Stinner for this patch.
|
| | |
|
| |
|
|
|
| |
CPython does not guarantee that the id() of integers will be the same
and they should therefore be tested with standard equality.
|
| |
|
|
|
|
|
| |
Tests should be run against the latest versions of libraries. Initially
there was going to be a lower bound on requirements but it is unlikely
that a situation will arise where a version is too out of date and can
be added back then rather than having arbitrary minimums.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|