diff --git a/README.rst b/README.rst index cb12fc2..a805283 100644 --- a/README.rst +++ b/README.rst @@ -40,7 +40,7 @@ Endpoint Description `/stream/:n`_ Streams *n* – 100 lines. `/delay/:n`_ Delays responding for *n* – 10 seconds. `/drip`_ Drips data over a duration after an optional initial delay, then (optionally) returns with the given status code. -`/range-request/:n`_ Streams *n* bytes, and allows specifying a *Range* header to select a subset of the data. Accepts a *chunk\_size* and request *duration* parameter. +`/range/:n`_ Streams *n* bytes, and allows specifying a *Range* header to select a subset of the data. Accepts a *chunk\_size* and request *duration* parameter. `/html`_ Renders an HTML Page. `/robots.txt`_ Returns some robots.txt rules. `/deny`_ Denied by robots.txt file. @@ -75,7 +75,7 @@ Endpoint Description .. _/stream/:n: http://httpbin.org/stream/20 .. _/delay/:n: http://httpbin.org/delay/3 .. _/drip: http://httpbin.org/drip?numbytes=5&duration=5&code=200 -.. _/range-request/:n: http://httpbin.org/range-request/1024 +.. _/range/:n: http://httpbin.org/range/1024 .. _/html: http://httpbin.org/html .. _/robots.txt: http://httpbin.org/robots.txt .. _/deny: http://httpbin.org/deny diff --git a/httpbin/core.py b/httpbin/core.py index 79086b9..a37a38d 100644 --- a/httpbin/core.py +++ b/httpbin/core.py @@ -541,13 +541,13 @@ def stream_random_bytes(n): return Response(generate_bytes(), headers=headers) -@app.route('/range-request/') +@app.route('/range/') def range_request(numbytes): """Streams n random bytes generated with given seed, at given chunk size per packet.""" if numbytes <= 0 or numbytes > (100 * 1024): response = Response(headers={ - 'ETag' : 'range-request%d' % numbytes, + 'ETag' : 'range%d' % numbytes, 'Accept-Ranges' : 'bytes' }) response.status_code = 404 @@ -582,7 +582,7 @@ def range_request(numbytes): if first_byte_pos > last_byte_pos or first_byte_pos not in xrange(0, numbytes) or last_byte_pos not in xrange(0, numbytes): response = Response(headers={ - 'ETag' : 'range-request%d' % numbytes, + 'ETag' : 'range%d' % numbytes, 'Accept-Ranges' : 'bytes', 'Content-Range' : 'bytes */%d' % numbytes }) @@ -610,7 +610,7 @@ def range_request(numbytes): response_headers = { 'Transfer-Encoding': 'chunked', 'Content-Type': 'application/octet-stream', - 'ETag' : 'range-request%d' % numbytes, + 'ETag' : 'range%d' % numbytes, 'Accept-Ranges' : 'bytes', 'Content-Range' : content_range } diff --git a/httpbin/templates/httpbin.1.html b/httpbin/templates/httpbin.1.html index 32eb6ea..35895b8 100644 --- a/httpbin/templates/httpbin.1.html +++ b/httpbin/templates/httpbin.1.html @@ -34,7 +34,7 @@
  • /stream/:n Streams n–100 lines.
  • /delay/:n Delays responding for n–10 seconds.
  • /drip?numbytes=n&duration=s&delay=s&code=code Drips data over a duration after an optional initial delay, then (optionally) returns with the given status code.
  • -
  • /range-request/1024?duration=s&chunk_size=code Streams n bytes, and allows specifying a Range header to select a subset of the data. Accepts a chunk_size and request duration parameter.
  • +
  • /range/1024?duration=s&chunk_size=code Streams n bytes, and allows specifying a Range header to select a subset of the data. Accepts a chunk_size and request duration parameter.
  • /html Renders an HTML Page.
  • /robots.txt Returns some robots.txt rules.
  • /deny Denied by robots.txt file.
  • diff --git a/test_httpbin.py b/test_httpbin.py index ca12b23..149707e 100755 --- a/test_httpbin.py +++ b/test_httpbin.py @@ -336,84 +336,84 @@ class HttpbinTestCase(unittest.TestCase): ) def test_request_range(self): - response1 = self.app.get('/range-request/1234') + response1 = self.app.get('/range/1234') self.assertEqual(response1.status_code, 200) - self.assertEqual(response1.headers.get('ETag'), 'range-request1234') + self.assertEqual(response1.headers.get('ETag'), 'range1234') self.assertEqual(response1.headers.get('Content-range'), 'bytes 0-1233/1234') self.assertEqual(response1.headers.get('Accept-ranges'), 'bytes') self.assertEqual(len(response1.get_data()), 1234) - response2 = self.app.get('/range-request/1234') + response2 = self.app.get('/range/1234') self.assertEqual(response2.status_code, 200) - self.assertEqual(response2.headers.get('ETag'), 'range-request1234') + self.assertEqual(response2.headers.get('ETag'), 'range1234') self.assertEqual(response1.get_data(), response2.get_data()) def test_request_range_with_parameters(self): response = self.app.get( - '/range-request/100?duration=1.5&chunk_size=5', + '/range/100?duration=1.5&chunk_size=5', headers={ 'Range': 'bytes=10-24' } ) self.assertEqual(response.status_code, 206) - self.assertEqual(response.headers.get('ETag'), 'range-request100') + self.assertEqual(response.headers.get('ETag'), 'range100') self.assertEqual(response.headers.get('Content-range'), 'bytes 10-24/100') self.assertEqual(response.headers.get('Accept-ranges'), 'bytes') self.assertEqual(response.get_data(), 'klmnopqrstuvwxy') def test_request_range_first_15_bytes(self): response = self.app.get( - '/range-request/1000', + '/range/1000', headers={ 'Range': 'bytes=0-15' } ) self.assertEqual(response.status_code, 206) - self.assertEqual(response.headers.get('ETag'), 'range-request1000') + self.assertEqual(response.headers.get('ETag'), 'range1000') self.assertEqual(response.get_data(), 'abcdefghijklmnop') self.assertEqual(response.headers.get('Content-range'), 'bytes 0-15/1000') def test_request_range_open_ended_last_6_bytes(self): response = self.app.get( - '/range-request/26', + '/range/26', headers={ 'Range': 'bytes=20-' } ) self.assertEqual(response.status_code, 206) - self.assertEqual(response.headers.get('ETag'), 'range-request26') + self.assertEqual(response.headers.get('ETag'), 'range26') self.assertEqual(response.get_data(), 'uvwxyz') self.assertEqual(response.headers.get('Content-range'), 'bytes 20-25/26') def test_request_range_suffix(self): response = self.app.get( - '/range-request/26', + '/range/26', headers={ 'Range': 'bytes=-5' } ) self.assertEqual(response.status_code, 206) - self.assertEqual(response.headers.get('ETag'), 'range-request26') + self.assertEqual(response.headers.get('ETag'), 'range26') self.assertEqual(response.get_data(), 'vwxyz') self.assertEqual(response.headers.get('Content-range'), 'bytes 21-25/26') def test_request_out_of_bounds(self): response = self.app.get( - '/range-request/26', + '/range/26', headers={ 'Range': 'bytes=10-5', } ) self.assertEqual(response.status_code, 416) - self.assertEqual(response.headers.get('ETag'), 'range-request26') + self.assertEqual(response.headers.get('ETag'), 'range26') self.assertEqual(len(response.get_data()), 0) self.assertEqual(response.headers.get('Content-range'), 'bytes */26') response = self.app.get( - '/range-request/26', + '/range/26', headers={ 'Range': 'bytes=32-40', } ) self.assertEqual(response.status_code, 416) response = self.app.get( - '/range-request/26', + '/range/26', headers={ 'Range': 'bytes=0-40', } )