insightconnect-plugin-runtime 6.2.2__tar.gz → 6.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. {insightconnect_plugin_runtime-6.2.2/insightconnect_plugin_runtime.egg-info → insightconnect_plugin_runtime-6.2.4}/PKG-INFO +25 -15
  2. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/README.md +7 -5
  3. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/api/endpoints.py +14 -15
  4. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/helper.py +17 -0
  5. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/schema.py +6 -9
  6. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4/insightconnect_plugin_runtime.egg-info}/PKG-INFO +25 -15
  7. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/requires.txt +8 -8
  8. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/setup.py +9 -9
  9. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_helpers.py +25 -1
  10. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/utils.py +1 -0
  11. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/MANIFEST.in +0 -0
  12. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect-plugin-swagger.json +0 -0
  13. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/__init__.py +0 -0
  14. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/action.py +0 -0
  15. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/api/__init__.py +0 -0
  16. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/api/schemas.py +0 -0
  17. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/cli.py +0 -0
  18. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/clients/__init__.py +0 -0
  19. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/clients/aws_client.py +0 -0
  20. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/clients/oauth.py +0 -0
  21. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/connection.py +0 -0
  22. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/data/input_message_schema.json +0 -0
  23. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/data/output_message_schema.json +0 -0
  24. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/dispatcher.py +0 -0
  25. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/exceptions.py +0 -0
  26. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/metrics.py +0 -0
  27. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/plugin.py +0 -0
  28. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/server.py +0 -0
  29. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/step.py +0 -0
  30. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/task.py +0 -0
  31. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/trigger.py +0 -0
  32. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/util.py +0 -0
  33. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/variables.py +0 -0
  34. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/SOURCES.txt +0 -0
  35. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/dependency_links.txt +0 -0
  36. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/top_level.txt +0 -0
  37. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/setup.cfg +0 -0
  38. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/__init__.py +0 -0
  39. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/__init__.py +0 -0
  40. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/__init__.py +0 -0
  41. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/__init__.py +0 -0
  42. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/__init__.py +0 -0
  43. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/__init__.py +0 -0
  44. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/__init__.py +0 -0
  45. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/action.py +0 -0
  46. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/schema.py +0 -0
  47. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/__init__.py +0 -0
  48. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/action.py +0 -0
  49. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/schema.py +0 -0
  50. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/__init__.py +0 -0
  51. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/action.py +0 -0
  52. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/schema.py +0 -0
  53. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/__init__.py +0 -0
  54. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/connection.py +0 -0
  55. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/schema.py +0 -0
  56. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/__init__.py +0 -0
  57. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/__init__.py +0 -0
  58. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/schema.py +0 -0
  59. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/task.py +0 -0
  60. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/__init__.py +0 -0
  61. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/__init__.py +0 -0
  62. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/schema.py +0 -0
  63. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/trigger.py +0 -0
  64. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/__init__.py +0 -0
  65. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/schema.py +0 -0
  66. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/trigger.py +0 -0
  67. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/__init__.py +0 -0
  68. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/schema.py +0 -0
  69. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/trigger.py +0 -0
  70. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/util/__init__.py +0 -0
  71. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/setup.py +0 -0
  72. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/__init__.py +0 -0
  73. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/conftest.py +0 -0
  74. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/test_cli.py +0 -0
  75. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/test_hello_world.py +0 -0
  76. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/test_server.py +0 -0
  77. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/__init__.py +0 -0
  78. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_action.py +0 -0
  79. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_api.py +0 -0
  80. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_aws_action.py +0 -0
  81. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_custom_encoder.py +0 -0
  82. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_endpoints.py +0 -0
  83. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_exceptions.py +0 -0
  84. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_metrics.py +0 -0
  85. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_oauth.py +0 -0
  86. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_plugin.py +0 -0
  87. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_schema.py +0 -0
  88. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_server_cloud_plugins.py +0 -0
  89. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_server_spec.py +0 -0
  90. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_trigger.py +0 -0
  91. {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_variables.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: insightconnect-plugin-runtime
3
- Version: 6.2.2
3
+ Version: 6.2.4
4
4
  Summary: InsightConnect Plugin Runtime
5
5
  Home-page: https://github.com/rapid7/komand-plugin-sdk-python
6
6
  Author: Rapid7 Integrations Alliance
@@ -12,20 +12,28 @@ Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Topic :: Software Development :: Build Tools
14
14
  Description-Content-Type: text/markdown
15
- Requires-Dist: requests==2.32.2
15
+ Requires-Dist: requests==2.32.3
16
16
  Requires-Dist: python_jsonschema_objects==0.5.2
17
- Requires-Dist: jsonschema==4.21.1
18
- Requires-Dist: certifi==2024.07.04
19
- Requires-Dist: Flask==3.0.2
20
- Requires-Dist: gunicorn==22.0.0
17
+ Requires-Dist: jsonschema==4.22.0
18
+ Requires-Dist: certifi==2024.12.14
19
+ Requires-Dist: Flask==3.1.0
20
+ Requires-Dist: gunicorn==23.0.0
21
21
  Requires-Dist: greenlet==3.1.1
22
- Requires-Dist: gevent==24.10.1
22
+ Requires-Dist: gevent==24.11.1
23
23
  Requires-Dist: marshmallow==3.21.0
24
24
  Requires-Dist: apispec==6.5.0
25
25
  Requires-Dist: apispec-webframeworks==1.0.0
26
- Requires-Dist: blinker==1.7.0
27
- Requires-Dist: structlog==24.1.0
26
+ Requires-Dist: blinker==1.9.0
27
+ Requires-Dist: structlog==24.4.0
28
28
  Requires-Dist: python-json-logger==2.0.7
29
+ Dynamic: author
30
+ Dynamic: author-email
31
+ Dynamic: classifier
32
+ Dynamic: description
33
+ Dynamic: description-content-type
34
+ Dynamic: home-page
35
+ Dynamic: requires-dist
36
+ Dynamic: summary
29
37
 
30
38
 
31
39
  # InsightConnect Python Plugin Runtime ![Build Status](https://github.com/rapid7/komand-plugin-sdk-python/workflows/Continuous%20Integration/badge.svg)
@@ -48,10 +56,10 @@ to get started.
48
56
 
49
57
  ## Development of the InsightConnect Plugin Runtime
50
58
 
51
- The Python Runtime codebase is built to support Python 3.11.10 as of version 6.2.0. The following dependencies will need
59
+ The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
52
60
  to be installed when developing or testing the Plugin Runtime:
53
61
 
54
- - Python 3.11.10
62
+ - Python 3.11.11
55
63
  - Docker
56
64
  - make
57
65
  - tox
@@ -67,7 +75,7 @@ version and activate it. Then build, install, and confirm the package has been i
67
75
  > source venv/bin/activate
68
76
  > pip install -e ./
69
77
  > pip list | grep insightconnect-plugin-runtime
70
- insightconnect-plugin-runtime 5.2.2
78
+ insightconnect-plugin-runtime 6.2.3
71
79
  ```
72
80
 
73
81
  #### Building the InsightConnect Plugin Runtime Docker Images
@@ -123,7 +131,7 @@ name as a parameter:
123
131
 
124
132
  The plugin will be started in `http` mode and listening at `http:0.0.0.0:10001`:
125
133
  ```
126
- [2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 19.7.1
134
+ [2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 23.0.0
127
135
  [2020-02-13 23:21:13 -0500] [56567] [INFO] Listening at: http://0.0.0.0:10001 (56567)
128
136
  [2020-02-13 23:21:13 -0500] [56567] [INFO] Using worker: threads
129
137
  [2020-02-13 23:21:13 -0500] [56571] [INFO] Booting worker with pid: 56571
@@ -184,7 +192,7 @@ Running a specific test file:
184
192
 
185
193
  | | Plugin | Slim Plugin |
186
194
  |:------------------|:-------:|:-----------:|
187
- | Python Version | 3.11.10 | 3.11.10 |
195
+ | Python Version | 3.11.11 | 3.11.11 |
188
196
  | OS | Alpine | Bullseye |
189
197
  | Package installer | apk | apt |
190
198
  | Shell | /bin/sh | /bin/bash |
@@ -211,6 +219,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
211
219
  after cloning this repository.
212
220
 
213
221
  ## Changelog
222
+ * 6.2.4 - Update `make_request` helper to support extra parameter of `max_response_size` to cap the response
223
+ * 6.2.3 - Updated dockerfiles for both `slim` and `full` SDK types to use Python 3.11.11 | Updated dependencies | Removed `pkg_resources` usage due to deprecation
214
224
  * 6.2.2 - Fix instances where logging errors would lead to duplicate entries being output | Add option to hash only on provided keys for `hash_sha1` function
215
225
  * 6.2.1 - Fix instances where logging would lead to duplicate entries being output
216
226
  * 6.2.0 - Update base images to pull Python 3.11.10 | changed the pep-8 check in tox to `pycodestyle`
@@ -19,10 +19,10 @@ to get started.
19
19
 
20
20
  ## Development of the InsightConnect Plugin Runtime
21
21
 
22
- The Python Runtime codebase is built to support Python 3.11.10 as of version 6.2.0. The following dependencies will need
22
+ The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
23
23
  to be installed when developing or testing the Plugin Runtime:
24
24
 
25
- - Python 3.11.10
25
+ - Python 3.11.11
26
26
  - Docker
27
27
  - make
28
28
  - tox
@@ -38,7 +38,7 @@ version and activate it. Then build, install, and confirm the package has been i
38
38
  > source venv/bin/activate
39
39
  > pip install -e ./
40
40
  > pip list | grep insightconnect-plugin-runtime
41
- insightconnect-plugin-runtime 5.2.2
41
+ insightconnect-plugin-runtime 6.2.3
42
42
  ```
43
43
 
44
44
  #### Building the InsightConnect Plugin Runtime Docker Images
@@ -94,7 +94,7 @@ name as a parameter:
94
94
 
95
95
  The plugin will be started in `http` mode and listening at `http:0.0.0.0:10001`:
96
96
  ```
97
- [2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 19.7.1
97
+ [2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 23.0.0
98
98
  [2020-02-13 23:21:13 -0500] [56567] [INFO] Listening at: http://0.0.0.0:10001 (56567)
99
99
  [2020-02-13 23:21:13 -0500] [56567] [INFO] Using worker: threads
100
100
  [2020-02-13 23:21:13 -0500] [56571] [INFO] Booting worker with pid: 56571
@@ -155,7 +155,7 @@ Running a specific test file:
155
155
 
156
156
  | | Plugin | Slim Plugin |
157
157
  |:------------------|:-------:|:-----------:|
158
- | Python Version | 3.11.10 | 3.11.10 |
158
+ | Python Version | 3.11.11 | 3.11.11 |
159
159
  | OS | Alpine | Bullseye |
160
160
  | Package installer | apk | apt |
161
161
  | Shell | /bin/sh | /bin/bash |
@@ -182,6 +182,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
182
182
  after cloning this repository.
183
183
 
184
184
  ## Changelog
185
+ * 6.2.4 - Update `make_request` helper to support extra parameter of `max_response_size` to cap the response
186
+ * 6.2.3 - Updated dockerfiles for both `slim` and `full` SDK types to use Python 3.11.11 | Updated dependencies | Removed `pkg_resources` usage due to deprecation
185
187
  * 6.2.2 - Fix instances where logging errors would lead to duplicate entries being output | Add option to hash only on provided keys for `hash_sha1` function
186
188
  * 6.2.1 - Fix instances where logging would lead to duplicate entries being output
187
189
  * 6.2.0 - Update base images to pull Python 3.11.10 | changed the pep-8 check in tox to `pycodestyle`
@@ -1,27 +1,27 @@
1
+ import importlib.metadata as importlib_metadata
1
2
  import json
2
- import subprocess
3
- import yaml
4
3
  import os
5
- import pkg_resources
6
4
  import signal
7
- from flask import jsonify, request, abort, make_response, Blueprint
8
- from werkzeug.exceptions import InternalServerError, HTTPException
5
+ import subprocess
9
6
  from typing import Any, Dict
10
7
 
11
8
  import structlog
9
+ import yaml
10
+ from flask import Blueprint, abort, jsonify, make_response, request
11
+ from werkzeug.exceptions import HTTPException, InternalServerError
12
12
 
13
+ from insightconnect_plugin_runtime.api.schemas import (
14
+ ActionTriggerDetailsSchema,
15
+ ConnectionDetailsSchema,
16
+ PluginInfoSchema,
17
+ TaskDetailsSchema,
18
+ )
13
19
  from insightconnect_plugin_runtime.exceptions import (
14
20
  ClientException,
15
- ServerException,
16
- LoggedException,
17
21
  ConnectionTestException,
22
+ LoggedException,
18
23
  PluginException,
19
- )
20
- from insightconnect_plugin_runtime.api.schemas import (
21
- PluginInfoSchema,
22
- ActionTriggerDetailsSchema,
23
- TaskDetailsSchema,
24
- ConnectionDetailsSchema,
24
+ ServerException,
25
25
  )
26
26
  from insightconnect_plugin_runtime.util import OutputMasker
27
27
 
@@ -780,11 +780,10 @@ class Endpoints:
780
780
 
781
781
  def get_plugin_sdk_version(self):
782
782
  try:
783
- version = pkg_resources.require("insightconnect-plugin-runtime")[0].version
783
+ version = importlib_metadata.version("insightconnect-plugin-runtime")
784
784
  except Exception:
785
785
  self.logger.warn("Unable to get SDK version")
786
786
  version = "0.0.0"
787
-
788
787
  return version
789
788
 
790
789
  def add_plugin_custom_config(
@@ -21,6 +21,7 @@ from insightconnect_plugin_runtime.exceptions import (
21
21
  PluginException,
22
22
  HTTPStatusCodes,
23
23
  ResponseExceptionData,
24
+ APIException
24
25
  )
25
26
 
26
27
  CAMEL_CASE_REGEX = r"\b[a-z0-9]+([A-Z][a-z]+[0-9]*)*\b"
@@ -111,6 +112,7 @@ def make_request(
111
112
  exception_custom_configs: Dict[int, Exception] = {},
112
113
  exception_data_location: str = None,
113
114
  allowed_status_codes: List[str] = [],
115
+ max_response_size: int = None,
114
116
  ) -> Tuple[requests.Response, Dict]:
115
117
  """
116
118
  Makes a HTTP request while checking for RequestErrors and JSONDecodeErrors
@@ -133,6 +135,8 @@ def make_request(
133
135
  :type str:
134
136
  :param allowed_status_codes: Status codes that will not raise an exception.
135
137
  :type List[str]:
138
+ :param max_response_size: Raise an error if the stream content is bigger than this specified size
139
+ :type int:
136
140
 
137
141
  :return: The request response and the response JSON.
138
142
  :rtype: Tuple[Response, Dict]
@@ -148,6 +152,19 @@ def make_request(
148
152
  cert=cert,
149
153
  stream=stream,
150
154
  )
155
+
156
+ # Before we close this session check and download all content, check if the returned content is too large.
157
+ # This may not be supported on all APIs as they need to support streaming and return the content-length
158
+ # header but adding this extra check will be beneficial for memory usage to those that do support it.
159
+ if stream and max_response_size:
160
+ resp_size = response.headers.get("content-length", "0")
161
+ if int(resp_size) > max_response_size:
162
+ raise APIException(
163
+ status_code=400,
164
+ cause=f"API response is exceeding allowed limit of {max_response_size} bytes.",
165
+ assistance="Please update the parameters to reduce the size of the data being returned.",
166
+ data=f"Content length returned was {resp_size} and max allowed is {max_response_size}",
167
+ )
151
168
  except requests.exceptions.Timeout as exception:
152
169
  raise PluginException(
153
170
  preset=PluginException.Preset.TIMEOUT, data=str(exception)
@@ -1,21 +1,18 @@
1
1
  import json
2
+ from pathlib import Path
2
3
 
3
- import pkg_resources
4
4
 
5
-
6
- def load_schema(file_name):
5
+ def load_schema(file_name: str) -> dict:
7
6
  """
8
7
  Loads a json schema from the packages data folder.
9
8
  :param file_name: name of the file
10
9
  :return: JSON object as a dictionary
11
10
  """
12
11
 
13
- schema = pkg_resources.resource_stream(__name__, "/".join(("data", file_name)))
14
- schema = schema.read()
15
- if isinstance(schema, bytes):
16
- schema = schema.decode("utf-8")
17
- schema = json.loads(schema)
18
- return schema
12
+ with open(
13
+ Path(__file__).parent / "data" / file_name, "r", encoding="utf-8"
14
+ ) as schema_file:
15
+ return json.loads(schema_file.read())
19
16
 
20
17
 
21
18
  input_message_schema = load_schema("input_message_schema.json")
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: insightconnect-plugin-runtime
3
- Version: 6.2.2
3
+ Version: 6.2.4
4
4
  Summary: InsightConnect Plugin Runtime
5
5
  Home-page: https://github.com/rapid7/komand-plugin-sdk-python
6
6
  Author: Rapid7 Integrations Alliance
@@ -12,20 +12,28 @@ Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Topic :: Software Development :: Build Tools
14
14
  Description-Content-Type: text/markdown
15
- Requires-Dist: requests==2.32.2
15
+ Requires-Dist: requests==2.32.3
16
16
  Requires-Dist: python_jsonschema_objects==0.5.2
17
- Requires-Dist: jsonschema==4.21.1
18
- Requires-Dist: certifi==2024.07.04
19
- Requires-Dist: Flask==3.0.2
20
- Requires-Dist: gunicorn==22.0.0
17
+ Requires-Dist: jsonschema==4.22.0
18
+ Requires-Dist: certifi==2024.12.14
19
+ Requires-Dist: Flask==3.1.0
20
+ Requires-Dist: gunicorn==23.0.0
21
21
  Requires-Dist: greenlet==3.1.1
22
- Requires-Dist: gevent==24.10.1
22
+ Requires-Dist: gevent==24.11.1
23
23
  Requires-Dist: marshmallow==3.21.0
24
24
  Requires-Dist: apispec==6.5.0
25
25
  Requires-Dist: apispec-webframeworks==1.0.0
26
- Requires-Dist: blinker==1.7.0
27
- Requires-Dist: structlog==24.1.0
26
+ Requires-Dist: blinker==1.9.0
27
+ Requires-Dist: structlog==24.4.0
28
28
  Requires-Dist: python-json-logger==2.0.7
29
+ Dynamic: author
30
+ Dynamic: author-email
31
+ Dynamic: classifier
32
+ Dynamic: description
33
+ Dynamic: description-content-type
34
+ Dynamic: home-page
35
+ Dynamic: requires-dist
36
+ Dynamic: summary
29
37
 
30
38
 
31
39
  # InsightConnect Python Plugin Runtime ![Build Status](https://github.com/rapid7/komand-plugin-sdk-python/workflows/Continuous%20Integration/badge.svg)
@@ -48,10 +56,10 @@ to get started.
48
56
 
49
57
  ## Development of the InsightConnect Plugin Runtime
50
58
 
51
- The Python Runtime codebase is built to support Python 3.11.10 as of version 6.2.0. The following dependencies will need
59
+ The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
52
60
  to be installed when developing or testing the Plugin Runtime:
53
61
 
54
- - Python 3.11.10
62
+ - Python 3.11.11
55
63
  - Docker
56
64
  - make
57
65
  - tox
@@ -67,7 +75,7 @@ version and activate it. Then build, install, and confirm the package has been i
67
75
  > source venv/bin/activate
68
76
  > pip install -e ./
69
77
  > pip list | grep insightconnect-plugin-runtime
70
- insightconnect-plugin-runtime 5.2.2
78
+ insightconnect-plugin-runtime 6.2.3
71
79
  ```
72
80
 
73
81
  #### Building the InsightConnect Plugin Runtime Docker Images
@@ -123,7 +131,7 @@ name as a parameter:
123
131
 
124
132
  The plugin will be started in `http` mode and listening at `http:0.0.0.0:10001`:
125
133
  ```
126
- [2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 19.7.1
134
+ [2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 23.0.0
127
135
  [2020-02-13 23:21:13 -0500] [56567] [INFO] Listening at: http://0.0.0.0:10001 (56567)
128
136
  [2020-02-13 23:21:13 -0500] [56567] [INFO] Using worker: threads
129
137
  [2020-02-13 23:21:13 -0500] [56571] [INFO] Booting worker with pid: 56571
@@ -184,7 +192,7 @@ Running a specific test file:
184
192
 
185
193
  | | Plugin | Slim Plugin |
186
194
  |:------------------|:-------:|:-----------:|
187
- | Python Version | 3.11.10 | 3.11.10 |
195
+ | Python Version | 3.11.11 | 3.11.11 |
188
196
  | OS | Alpine | Bullseye |
189
197
  | Package installer | apk | apt |
190
198
  | Shell | /bin/sh | /bin/bash |
@@ -211,6 +219,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
211
219
  after cloning this repository.
212
220
 
213
221
  ## Changelog
222
+ * 6.2.4 - Update `make_request` helper to support extra parameter of `max_response_size` to cap the response
223
+ * 6.2.3 - Updated dockerfiles for both `slim` and `full` SDK types to use Python 3.11.11 | Updated dependencies | Removed `pkg_resources` usage due to deprecation
214
224
  * 6.2.2 - Fix instances where logging errors would lead to duplicate entries being output | Add option to hash only on provided keys for `hash_sha1` function
215
225
  * 6.2.1 - Fix instances where logging would lead to duplicate entries being output
216
226
  * 6.2.0 - Update base images to pull Python 3.11.10 | changed the pep-8 check in tox to `pycodestyle`
@@ -1,14 +1,14 @@
1
- requests==2.32.2
1
+ requests==2.32.3
2
2
  python_jsonschema_objects==0.5.2
3
- jsonschema==4.21.1
4
- certifi==2024.07.04
5
- Flask==3.0.2
6
- gunicorn==22.0.0
3
+ jsonschema==4.22.0
4
+ certifi==2024.12.14
5
+ Flask==3.1.0
6
+ gunicorn==23.0.0
7
7
  greenlet==3.1.1
8
- gevent==24.10.1
8
+ gevent==24.11.1
9
9
  marshmallow==3.21.0
10
10
  apispec==6.5.0
11
11
  apispec-webframeworks==1.0.0
12
- blinker==1.7.0
13
- structlog==24.1.0
12
+ blinker==1.9.0
13
+ structlog==24.4.0
14
14
  python-json-logger==2.0.7
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setup(
7
7
  name="insightconnect-plugin-runtime",
8
- version="6.2.2",
8
+ version="6.2.4",
9
9
  description="InsightConnect Plugin Runtime",
10
10
  long_description=long_description,
11
11
  long_description_content_type="text/markdown",
@@ -14,19 +14,19 @@ setup(
14
14
  url="https://github.com/rapid7/komand-plugin-sdk-python",
15
15
  packages=find_packages(),
16
16
  install_requires=[
17
- "requests==2.32.2",
17
+ "requests==2.32.3",
18
18
  "python_jsonschema_objects==0.5.2",
19
- "jsonschema==4.21.1",
20
- "certifi==2024.07.04",
21
- "Flask==3.0.2",
22
- "gunicorn==22.0.0",
19
+ "jsonschema==4.22.0",
20
+ "certifi==2024.12.14",
21
+ "Flask==3.1.0",
22
+ "gunicorn==23.0.0",
23
23
  "greenlet==3.1.1",
24
- "gevent==24.10.1",
24
+ "gevent==24.11.1",
25
25
  "marshmallow==3.21.0",
26
26
  "apispec==6.5.0",
27
27
  "apispec-webframeworks==1.0.0",
28
- "blinker==1.7.0",
29
- "structlog==24.1.0",
28
+ "blinker==1.9.0",
29
+ "structlog==24.4.0",
30
30
  "python-json-logger==2.0.7"
31
31
  ],
32
32
  tests_require=[
@@ -4,6 +4,7 @@ from insightconnect_plugin_runtime.exceptions import (
4
4
  HTTPStatusCodes,
5
5
  ResponseExceptionData,
6
6
  PluginException,
7
+ APIException
7
8
  )
8
9
  import requests
9
10
  import os
@@ -378,16 +379,39 @@ class TestRequestsHelpers(TestCase):
378
379
  json={"sample": "value"},
379
380
  headers={"Content-Type": "application/json"},
380
381
  )
381
- response = helper.make_request(_request=request)
382
+ response = helper.make_request(_request=request, stream=True, max_response_size=100)
382
383
  expected = {
383
384
  "json": {"example": "sample"},
384
385
  "status_code": 200,
385
386
  "content": b"example",
386
387
  "url": "https://example.com/success",
388
+ "content-length": "1",
387
389
  }
388
390
  self.assertEqual(response.content, expected.get("content"))
389
391
  self.assertEqual(response.status_code, expected.get("status_code"))
390
392
  self.assertEqual(response.url, expected.get("url"))
393
+ self.assertEqual(response.headers.get("content-length"), expected.get("content-length"))
394
+
395
+ @patch("requests.Session.send")
396
+ def test_make_request_enforces_max_response_size(self, mocked_request):
397
+ returned_max_size, test_max_size = "5000", 1527
398
+
399
+ response = requests.Response()
400
+ response.headers = {"content-length": returned_max_size, "content-type": "application/json"}
401
+ mocked_request.return_value = response
402
+
403
+ test_request = requests.Request(method="GET", url="https://event_source.com/api/v1/logs")
404
+
405
+ with self.assertRaises(APIException) as api_err:
406
+ helper.make_request(_request=test_request, stream=True, max_response_size=test_max_size)
407
+
408
+ self.assertEqual(400, api_err.exception.status_code)
409
+ exp_err_cause = f"API response is exceeding allowed limit of {test_max_size} bytes."
410
+ exp_err_data = f"Content length returned was {returned_max_size} and max allowed is {test_max_size}"
411
+ self.assertEqual(400, api_err.exception.status_code)
412
+ self.assertEqual(exp_err_cause, api_err.exception.cause)
413
+ self.assertEqual(exp_err_data, api_err.exception.data)
414
+
391
415
 
392
416
  @parameterized.expand(
393
417
  [
@@ -34,6 +34,7 @@ def get_mock_response(
34
34
  response._content = bytes_string
35
35
  response.url = url
36
36
  response.reason = reason
37
+ response.headers = {"content-length": "1", "content-type": "application/json"}
37
38
 
38
39
  def return_json():
39
40
  return data