From 65f144e0677bd21bac7c8819c72e4318179b8021 Mon Sep 17 00:00:00 2001 From: kiran94 Date: Sun, 22 May 2022 12:21:23 +0100 Subject: [PATCH 1/4] feat(core): add request override support --- postpy2/core.py | 13 ++++++++-- tests/__init__.py | 0 tests/test_core.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 tests/__init__.py create mode 100644 tests/test_core.py diff --git a/postpy2/core.py b/postpy2/core.py index f44c107..8bf1f4e 100644 --- a/postpy2/core.py +++ b/postpy2/core.py @@ -4,6 +4,7 @@ from copy import copy import requests +from mergedeep import merge from postpy2.extractors import extract_dict_from_raw_headers, extract_dict_from_headers, extract_dict_from_raw_mode_data, format_object, extract_dict_from_formdata_mode_data, exctact_dict_from_files @@ -24,12 +25,13 @@ def load(self, postman_enviroment_file_path): class PostPython: - def __init__(self, postman_collection_file_path): + def __init__(self, postman_collection_file_path, request_overrides=None): with open(postman_collection_file_path, encoding='utf8') as postman_collection_file: self.__postman_collection = json.load(postman_collection_file) self.__folders = {} self.environments = CaseSensitiveDict() + self.request_overrides = request_overrides self.__load() def __load(self): @@ -108,9 +110,16 @@ def __init__(self, post_python, data): self.request_kwargs['method'] = data['method'] def __call__(self, *args, **kwargs): + + current_request_kwargs = copy(self.request_kwargs) + + if self.post_python.request_overrides: + current_request_kwargs = merge(current_request_kwargs, self.post_python.request_overrides) + new_env = copy(self.post_python.environments) new_env.update(kwargs) - formatted_kwargs = format_object(self.request_kwargs, new_env) + + formatted_kwargs = format_object(current_request_kwargs, new_env) return requests.request(**formatted_kwargs) def set_files(self, data): diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_core.py b/tests/test_core.py new file mode 100644 index 0000000..60fe27f --- /dev/null +++ b/tests/test_core.py @@ -0,0 +1,61 @@ +from unittest.mock import Mock, call, patch + +from parameterized import parameterized + +from postpy2.core import PostRequest + + +@parameterized.expand([ + ( + 'with_request_override', + {'headers': {'RUNTIMEHEADER': 'RUNTIMEVALUE'}}, + [ + call( + headers={'myCollectionHeader': 'MyCollectionHeaderValue', + 'RUNTIMEHEADER': 'RUNTIMEVALUE'}, + method='POST', + url='raw_url') + ] + ), + ( + 'no_request_override', + None, + [ + call( + headers={'myCollectionHeader': 'MyCollectionHeaderValue'}, + method='POST', + url='raw_url') + ] + ), + ( + 'with_existing_keys', + {'headers': {'myCollectionHeader': 'RUNTIMEVALUE'}}, + [ + call( + headers={'myCollectionHeader': 'RUNTIMEVALUE' }, + method='POST', + url='raw_url') + ] + ), +]) +@patch('postpy2.core.requests.request') +def test_request_overrides( + name: str, + request_overrides, + expected_request, + mock_requests: Mock): + + mock_post_python = Mock() + mock_post_python.request_overrides = request_overrides + mock_post_python.environments = {} + + data = { + 'name': 'name', + 'url': {'raw': 'raw_url'}, + 'method': 'POST', + 'header': [{'key': 'myCollectionHeader', 'value': 'MyCollectionHeaderValue'}] + } + post_request = PostRequest(mock_post_python, data) + post_request() + + assert mock_requests.call_args_list == expected_request From f28a08e046b2b6dbdd396e0549cda5e3ba5ef5c7 Mon Sep 17 00:00:00 2001 From: kiran94 Date: Sun, 22 May 2022 12:21:49 +0100 Subject: [PATCH 2/4] chore(version): bump --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7449374..f71a2a6 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setuptools.setup( name='postpy2', packages=['postpy2'], - version='0.0.6', + version='0.0.7', author='Martin Kapinos', author_email='matkapi19@gmail.com', description='A library to use postman collection V2 in python.', From 2f45a5c25fa244b2b49db61267cc7a1e2d0938ef Mon Sep 17 00:00:00 2001 From: kiran94 Date: Sun, 22 May 2022 12:22:29 +0100 Subject: [PATCH 3/4] chore(deps): updated setup and add dev dependencies --- requirements-dev.txt | 2 ++ setup.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 requirements-dev.txt diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..eb891c6 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,2 @@ +pytest +parameterized diff --git a/setup.py b/setup.py index f71a2a6..6ea6735 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,8 @@ keywords=['postman', 'rest', 'api'], # arbitrary keywords install_requires=[ 'requests', - 'python-magic' + 'python-magic', + 'mergedeep' ], classifiers=[ "Programming Language :: Python :: 3", From ed4acf84a9bc901f5dfdfbcf96fc45fe230bbfb1 Mon Sep 17 00:00:00 2001 From: kiran94 Date: Sun, 22 May 2022 12:39:46 +0100 Subject: [PATCH 4/4] docs(readme): added request override note --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 2d3cff8..c23d336 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,17 @@ runner.environments.update({'BASE_URL': 'http://127.0.0.1:5000'}) runner.environments.update({'PASSWORD': 'test', 'EMAIL': 'you@email.com'}) ``` +### Override Request Parameters + +It may be useful to override request parameters at runtime. You can do this using the `request_overrides` option: + +```python +headers = { "MyHeader": "Value" } +pp = PostPython('collections/tests.postman_collection.json', request_overrides={ + 'headers': headers +}) +``` + ### AttributeError Since `RequestMethods` and `get_request` does not really exists your intelligent IDE cannot help you.