Post and get now return a tuple with a full requests response object and the response data
Fixed broken max_size validation
This commit is contained in:
parent
a71ac1d046
commit
f3a96fc30c
12
CHANGELOG.md
12
CHANGELOG.md
@ -2,4 +2,14 @@
|
||||
|
||||
This project uses Semantic Versioning
|
||||
|
||||
## 0.0.0
|
||||
## 1.0.0
|
||||
|
||||
Post and get now return a tuple with a full requests response object and the response data
|
||||
|
||||
## 0.0.1
|
||||
|
||||
Fixed broken max_size validator, added tests for max_size validation
|
||||
|
||||
## 0.0.0
|
||||
|
||||
Initial release
|
2
setup.py
2
setup.py
@ -1,7 +1,7 @@
|
||||
from distutils.core import setup
|
||||
|
||||
setup(name='streamedrequests',
|
||||
version='0.0.0',
|
||||
version='1.0.0',
|
||||
description='Library for streaming http get or post request\'s responses',
|
||||
author='Kevin Froman',
|
||||
author_email='beardog@mailbox.org',
|
||||
|
@ -16,6 +16,7 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
'''
|
||||
import threading
|
||||
from . import responsesize
|
||||
|
||||
def __run_callback(data, sync, callback=None):
|
||||
if callback is None: # Do nothing if there is no callback
|
||||
@ -26,6 +27,7 @@ def __run_callback(data, sync, callback=None):
|
||||
threading.Thread(target=callback, args=(data,)).start()
|
||||
|
||||
def __do_download(req, max_size, chunk_size, callback, sync):
|
||||
chunk_count = responsesize.SizeValidator(max_size) # Class to verify if the stream is staying within the max_size
|
||||
ret_data = b''
|
||||
if chunk_size == 0:
|
||||
raise ValueError("Chunk size cannot be zero")
|
||||
@ -35,4 +37,6 @@ def __do_download(req, max_size, chunk_size, callback, sync):
|
||||
if not callback is None:
|
||||
__run_callback(chunk, sync, callback)
|
||||
ret_data += chunk
|
||||
return ret_data
|
||||
if 'text' in req.headers['content-type']:
|
||||
ret_data = ret_data.decode('utf-8')
|
||||
return (req, ret_data)
|
@ -16,13 +16,11 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
'''
|
||||
import requests
|
||||
from . import exceptions, responsesize, dodownload, setuptimeout
|
||||
from . import exceptions, dodownload, setuptimeout
|
||||
def get(url, query_parameters=None, request_headers=None, sync=True,
|
||||
max_size=0, chunk_size=1000, connect_timeout=60, stream_timeout=0,
|
||||
proxy={}, callback=None, allow_redirects=True):
|
||||
|
||||
chunk_count = responsesize.SizeValidator(max_size) # Class to verify if the stream is staying within the max_size
|
||||
|
||||
timeouts = setuptimeout.__setup_timeout(connect_timeout, stream_timeout) # Get a timeout int or tuple
|
||||
# Requests uses separate value for connect vs stream timeout
|
||||
|
||||
|
@ -16,11 +16,10 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
'''
|
||||
import requests
|
||||
from . import exceptions, responsesize, dodownload, setuptimeout
|
||||
from . import exceptions, dodownload, setuptimeout
|
||||
def post(url, post_data=None, request_headers=None, sync=True,
|
||||
max_size=0, chunk_size=1000, connect_timeout=60, stream_timeout=0,
|
||||
proxy={}, callback=None, allow_redirects=True):
|
||||
chunk_count = responsesize.SizeValidator(max_size) # Class to verify if the stream is staying within the max_size
|
||||
|
||||
timeouts = setuptimeout.__setup_timeout(connect_timeout, stream_timeout)
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
from . import exceptions
|
||||
class SizeValidator:
|
||||
def __init__(self, max_size):
|
||||
self.max_size = 0
|
||||
self.max_size = max_size
|
||||
self.size = 0
|
||||
|
||||
def add(self, amount):
|
||||
|
@ -70,7 +70,18 @@ class TestInit(unittest.TestCase):
|
||||
raise ValueError("test not found in post test data")
|
||||
|
||||
def test_basic(self):
|
||||
streamedrequests.get('http://127.0.0.1:8000/')
|
||||
if "test" not in streamedrequests.get('http://127.0.0.1:8000/')[1]:
|
||||
raise ValueError("test not found in response text")
|
||||
|
||||
def test_max_size_fail(self):
|
||||
with self.assertRaises(streamedrequests.exceptions.ResponseLimitReached):
|
||||
streamedrequests.get('http://127.0.0.1:8000/', max_size=10)
|
||||
with self.assertRaises(streamedrequests.exceptions.ResponseLimitReached):
|
||||
streamedrequests.post('http://127.0.0.1:%s/' % (POST_PORT,), post_data='test', max_size=1)
|
||||
|
||||
def test_max_size_pass(self):
|
||||
streamedrequests.get('http://127.0.0.1:8000/', max_size=100000)
|
||||
streamedrequests.post('http://127.0.0.1:%s/' % (POST_PORT,), post_data='test', max_size=100000)
|
||||
|
||||
def test_fail(self):
|
||||
with self.assertRaises(requests.exceptions.ConnectionError):
|
||||
|
Loading…
Reference in New Issue
Block a user