| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | | | |
| | | |
| | | |
| | | | |
Fixes #184
|
| |\ \ \ \
| | | | |
| | | | | |
The worst PR that fixes all the things
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
the socket
setting the socket to blocking in the case of 'real' socket
forcing the close command on the fd to close the socket
replacing the fd at the start of each sendall
|
| | | | | | |
|
| | | | | | |
|
| |/ / / / |
|
| | | | | |
|
| |/ / / |
|
| |\ \ \
| |/ /
|/| | |
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
|
| | |
|
| | |
|
| |
|
|
|
|
| |
test_httpretty_should_allow_registering_regexes_with_streaming_responses()
This was cause by the use of text strings instead of bytes.
|
| |
|
|
|
|
| |
In Python 3, the parse_request() method uses iso-8859-1 to decode the path, but
not in Python 2. This causes test failures in Python 3. Fix that by encoding
the path back to iso-8859-1.
|
| |
|
|
|
|
|
|
| |
* 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
|
| |
|
|
|
| |
The parse_requestline() function needs a text string as an input. In Python 3,
it had bytes.
|
| |
|
|
| |
This ensures Python 3 compatibility.
|
| |
|
|
| |
Thanks to Victor Stinner for this patch.
|
| |
|
|
| |
Return a decoded string rather than bytes.
|
| |
|
|
|
|
|
|
| |
HTTPretty.reset removes all the HTTP mocks that are put in places. There
is therefore no reason to keep around potential http ports that are not
in the current list of mocks.
Therefore we should reset that set as well when we reset the mocks.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It is useless to write foo.split(b'bar') rather than foo.split(bar). In Python
2, this is exactly the same thing:
>>> 'fooXbar'.split('X')
['foo', 'bar']
>>> 'fooXbar'.split(b'X')
['foo', 'bar']
In Python 3, using bytes in split() is an error:
>>> 'fooXbar'.split('X')
['foo', 'bar']
>>> 'fooXbar'.split(b'X')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'bytes' object to str implicitly
|
| | |
|
| |\
| |
| | |
core: fix for working with python 3.3
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The unfixed parse_querystring() raises the following exception
in Python 3.3:
TypeError: Type str doesn't support the buffer API
Also removed iteritems() as it is deprecated and no longer
supported in Python 3.x
|
| |/ |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\
| |
| | |
Adding parsed_body parameter to simplify checks
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| | |
parsed_body attempts to parse the post body if it matches a compatible content type
* content is returned unaltered if it's not a compatible type
* content parses json if content-type type is application/json
* content parse querystring params if content-type is application/x-www-form-urlencoded
* if the value cannot be parsed for any reason, it is unaltered
|
| |\ \
| | |
| | | |
Don't duplicate http ports number
|
| | |/
| |
| |
| |
| | |
Use a set instead of a list to store ports in the POTENTIAL_HTTP_PORTS.
Restore it to its initial value every tests that modify it.
|
| |\ \
| | |
| | | |
Expose httpretty.reset() to public API
|