nimble_python 0.16.0__tar.gz → 0.18.0__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 (164) hide show
  1. nimble_python-0.18.0/.release-please-manifest.json +3 -0
  2. {nimble_python-0.16.0 → nimble_python-0.18.0}/CHANGELOG.md +49 -0
  3. {nimble_python-0.16.0 → nimble_python-0.18.0}/PKG-INFO +1 -1
  4. {nimble_python-0.16.0 → nimble_python-0.18.0}/api.md +39 -0
  5. {nimble_python-0.16.0 → nimble_python-0.18.0}/pyproject.toml +2 -2
  6. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_base_client.py +4 -0
  7. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_client.py +187 -11
  8. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_files.py +54 -4
  9. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_qs.py +2 -6
  10. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_types.py +3 -0
  11. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/__init__.py +0 -1
  12. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_utils.py +37 -25
  13. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_version.py +1 -1
  14. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/resources/__init__.py +42 -0
  15. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/resources/agent.py +35 -24
  16. nimble_python-0.18.0/src/nimble_python/resources/domain_knowledge.py +195 -0
  17. nimble_python-0.18.0/src/nimble_python/resources/media.py +336 -0
  18. nimble_python-0.18.0/src/nimble_python/resources/serp.py +624 -0
  19. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/__init__.py +12 -0
  20. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_generate_params.py +19 -4
  21. nimble_python-0.18.0/src/nimble_python/types/agent_generate_response.py +68 -0
  22. nimble_python-0.18.0/src/nimble_python/types/agent_get_generation_response.py +68 -0
  23. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_get_response.py +5 -3
  24. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_run_async_params.py +1 -1
  25. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_run_batch_params.py +2 -2
  26. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_run_params.py +1 -1
  27. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_run_response.py +3 -0
  28. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/client_extract_async_params.py +9 -2
  29. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/client_extract_batch_params.py +18 -4
  30. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/client_extract_params.py +9 -2
  31. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/crawl_run_params.py +9 -2
  32. nimble_python-0.18.0/src/nimble_python/types/domain_knowledge_get_driver_params.py +15 -0
  33. nimble_python-0.18.0/src/nimble_python/types/domain_knowledge_get_driver_response.py +27 -0
  34. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/extract_response.py +3 -0
  35. nimble_python-0.18.0/src/nimble_python/types/media_run_async_params.py +44 -0
  36. nimble_python-0.18.0/src/nimble_python/types/media_run_async_response.py +67 -0
  37. nimble_python-0.18.0/src/nimble_python/types/media_run_params.py +29 -0
  38. nimble_python-0.18.0/src/nimble_python/types/media_run_response.py +339 -0
  39. nimble_python-0.18.0/src/nimble_python/types/serp_run_async_params.py +73 -0
  40. nimble_python-0.18.0/src/nimble_python/types/serp_run_async_response.py +67 -0
  41. nimble_python-0.18.0/src/nimble_python/types/serp_run_batch_params.py +155 -0
  42. nimble_python-0.18.0/src/nimble_python/types/serp_run_batch_response.py +68 -0
  43. nimble_python-0.18.0/src/nimble_python/types/serp_run_params.py +58 -0
  44. nimble_python-0.18.0/src/nimble_python/types/serp_run_response.py +339 -0
  45. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/api_resources/test_agent.py +66 -52
  46. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/api_resources/test_client.py +24 -152
  47. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/api_resources/test_crawl.py +6 -38
  48. nimble_python-0.18.0/tests/api_resources/test_domain_knowledge.py +98 -0
  49. nimble_python-0.18.0/tests/api_resources/test_media.py +234 -0
  50. nimble_python-0.18.0/tests/api_resources/test_serp.py +404 -0
  51. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_client.py +48 -0
  52. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_extract_files.py +28 -1
  53. nimble_python-0.18.0/tests/test_files.py +148 -0
  54. nimble_python-0.16.0/.release-please-manifest.json +0 -3
  55. nimble_python-0.16.0/src/nimble_python/types/agent_generate_response.py +0 -32
  56. nimble_python-0.16.0/src/nimble_python/types/agent_get_generation_response.py +0 -32
  57. nimble_python-0.16.0/tests/test_deepcopy.py +0 -58
  58. nimble_python-0.16.0/tests/test_files.py +0 -51
  59. {nimble_python-0.16.0 → nimble_python-0.18.0}/.gitignore +0 -0
  60. {nimble_python-0.16.0 → nimble_python-0.18.0}/CONTRIBUTING.md +0 -0
  61. {nimble_python-0.16.0 → nimble_python-0.18.0}/LICENSE +0 -0
  62. {nimble_python-0.16.0 → nimble_python-0.18.0}/README.md +0 -0
  63. {nimble_python-0.16.0 → nimble_python-0.18.0}/SECURITY.md +0 -0
  64. {nimble_python-0.16.0 → nimble_python-0.18.0}/bin/check-release-environment +0 -0
  65. {nimble_python-0.16.0 → nimble_python-0.18.0}/bin/publish-pypi +0 -0
  66. {nimble_python-0.16.0 → nimble_python-0.18.0}/examples/.keep +0 -0
  67. {nimble_python-0.16.0 → nimble_python-0.18.0}/release-please-config.json +0 -0
  68. {nimble_python-0.16.0 → nimble_python-0.18.0}/requirements-dev.lock +0 -0
  69. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/__init__.py +0 -0
  70. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_compat.py +0 -0
  71. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_constants.py +0 -0
  72. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_exceptions.py +0 -0
  73. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_models.py +0 -0
  74. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_resource.py +0 -0
  75. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_response.py +0 -0
  76. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_streaming.py +0 -0
  77. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_compat.py +0 -0
  78. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_datetime_parse.py +0 -0
  79. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_json.py +0 -0
  80. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_logs.py +0 -0
  81. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_path.py +0 -0
  82. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_proxy.py +0 -0
  83. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_reflection.py +0 -0
  84. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_resources_proxy.py +0 -0
  85. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_streams.py +0 -0
  86. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_sync.py +0 -0
  87. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_transform.py +0 -0
  88. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/_utils/_typing.py +0 -0
  89. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/lib/.keep +0 -0
  90. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/py.typed +0 -0
  91. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/resources/batches.py +0 -0
  92. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/resources/crawl.py +0 -0
  93. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/resources/tasks.py +0 -0
  94. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_list_params.py +0 -0
  95. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_list_response.py +0 -0
  96. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_publish_params.py +0 -0
  97. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_publish_response.py +0 -0
  98. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_run_async_response.py +0 -0
  99. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/agent_run_batch_response.py +0 -0
  100. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/batch_get_response.py +0 -0
  101. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/batch_progress_response.py +0 -0
  102. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/client_map_params.py +0 -0
  103. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/client_search_params.py +0 -0
  104. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/crawl_list_params.py +0 -0
  105. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/crawl_list_response.py +0 -0
  106. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/crawl_run_response.py +0 -0
  107. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/crawl_status_response.py +0 -0
  108. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/crawl_terminate_response.py +0 -0
  109. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/extract_async_response.py +0 -0
  110. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/extract_batch_response.py +0 -0
  111. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/map_response.py +0 -0
  112. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/search_response.py +0 -0
  113. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/__init__.py +0 -0
  114. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/auto_scroll_action.py +0 -0
  115. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/click_action.py +0 -0
  116. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/eval_action.py +0 -0
  117. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/fetch_action.py +0 -0
  118. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/fill_action.py +0 -0
  119. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/get_cookies_action.py +0 -0
  120. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/goto_action.py +0 -0
  121. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/press_action.py +0 -0
  122. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/screenshot_action.py +0 -0
  123. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/scroll_action.py +0 -0
  124. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/wait_action.py +0 -0
  125. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/wait_for_element_action.py +0 -0
  126. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared/wait_for_navigation_action.py +0 -0
  127. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/__init__.py +0 -0
  128. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/auto_scroll_action.py +0 -0
  129. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/click_action.py +0 -0
  130. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/eval_action.py +0 -0
  131. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/fetch_action.py +0 -0
  132. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/fill_action.py +0 -0
  133. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/get_cookies_action.py +0 -0
  134. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/goto_action.py +0 -0
  135. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/press_action.py +0 -0
  136. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/screenshot_action.py +0 -0
  137. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/scroll_action.py +0 -0
  138. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/wait_action.py +0 -0
  139. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/wait_for_element_action.py +0 -0
  140. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/shared_params/wait_for_navigation_action.py +0 -0
  141. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/task_get_response.py +0 -0
  142. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/task_list_params.py +0 -0
  143. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/task_list_response.py +0 -0
  144. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimble_python/types/task_results_response.py +0 -0
  145. {nimble_python-0.16.0 → nimble_python-0.18.0}/src/nimbleway/lib/.keep +0 -0
  146. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/__init__.py +0 -0
  147. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/api_resources/__init__.py +0 -0
  148. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/api_resources/test_batches.py +0 -0
  149. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/api_resources/test_tasks.py +0 -0
  150. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/conftest.py +0 -0
  151. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/sample_file.txt +0 -0
  152. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_models.py +0 -0
  153. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_qs.py +0 -0
  154. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_required_args.py +0 -0
  155. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_response.py +0 -0
  156. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_streaming.py +0 -0
  157. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_transform.py +0 -0
  158. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_utils/test_datetime_parse.py +0 -0
  159. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_utils/test_json.py +0 -0
  160. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_utils/test_path.py +0 -0
  161. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_utils/test_proxy.py +0 -0
  162. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/test_utils/test_typing.py +0 -0
  163. {nimble_python-0.16.0 → nimble_python-0.18.0}/tests/utils.py +0 -0
  164. {nimble_python-0.16.0 → nimble_python-0.18.0}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.18.0"
3
+ }
@@ -1,5 +1,54 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.18.0 (2026-05-10)
4
+
5
+ Full Changelog: [v0.17.0...v0.18.0](https://github.com/Nimbleway/nimble-python/compare/v0.17.0...v0.18.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** Add media, serp and domain_knowledge ([d1e33f1](https://github.com/Nimbleway/nimble-python/commit/d1e33f1e44507ba4a817532d58e25f109c58e776))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **client:** add missing f-string prefix in file type error message ([972cbcd](https://github.com/Nimbleway/nimble-python/commit/972cbcd40b4e4091a7364288d3d0b6033983826c))
15
+
16
+ ## 0.17.0 (2026-05-06)
17
+
18
+ Full Changelog: [v0.16.0...v0.17.0](https://github.com/Nimbleway/nimble-python/compare/v0.16.0...v0.17.0)
19
+
20
+ ### Features
21
+
22
+ * **api:** api update ([d859e62](https://github.com/Nimbleway/nimble-python/commit/d859e62068214303e9430d093a78028b25b854a2))
23
+ * **api:** api update ([da41c63](https://github.com/Nimbleway/nimble-python/commit/da41c63037e82fde7af3a3e0da8cb3782a175bb8))
24
+ * **api:** api update ([3460f38](https://github.com/Nimbleway/nimble-python/commit/3460f38ecdf277bbebf2fdc7104015d4a7fee810))
25
+ * **api:** api update ([0809fc4](https://github.com/Nimbleway/nimble-python/commit/0809fc473463e746e5b1af30cfcadbfc87db7a5e))
26
+ * **client:** add client_source parameter, update press_action types ([346cfe7](https://github.com/Nimbleway/nimble-python/commit/346cfe70ff7a237c9f0bd52ae699d2012cf5cec7))
27
+ * support setting headers via env ([74b98e0](https://github.com/Nimbleway/nimble-python/commit/74b98e0af4a71cedc34d53f4b33efd6126b91439))
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * **client:** preserve hardcoded query params when merging with user params ([c07dd33](https://github.com/Nimbleway/nimble-python/commit/c07dd33a98b0dc7a365153ebe13aa8e4f41035fc))
33
+ * ensure file data are only sent as 1 parameter ([58d7d07](https://github.com/Nimbleway/nimble-python/commit/58d7d07475836f0d4ce1c4f68bba7e3631e68d34))
34
+ * use correct field name format for multipart file arrays ([d33d6b7](https://github.com/Nimbleway/nimble-python/commit/d33d6b7599d29d0508fa14ba03a8e0eb7c756aad))
35
+
36
+
37
+ ### Performance Improvements
38
+
39
+ * **client:** optimize file structure copying in multipart requests ([77a1d14](https://github.com/Nimbleway/nimble-python/commit/77a1d14ebc143548bcca089d281babc094e01a7e))
40
+
41
+
42
+ ### Chores
43
+
44
+ * **internal:** more robust bootstrap script ([ea52394](https://github.com/Nimbleway/nimble-python/commit/ea52394a5adbf1ef83a2d0a5b378d7feb0e0a5f8))
45
+ * **internal:** reformat pyproject.toml ([7d5cec6](https://github.com/Nimbleway/nimble-python/commit/7d5cec6274e237ab69a2b32e79f72a9baad78fff))
46
+
47
+
48
+ ### Documentation
49
+
50
+ * improve examples ([a86f0ef](https://github.com/Nimbleway/nimble-python/commit/a86f0ef01987c3063ab465d4ab61bd04229a4911))
51
+
3
52
  ## 0.16.0 (2026-03-30)
4
53
 
5
54
  Full Changelog: [v0.15.0...v0.16.0](https://github.com/Nimbleway/nimble-python/compare/v0.15.0...v0.16.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nimble_python
3
- Version: 0.16.0
3
+ Version: 0.18.0
4
4
  Summary: The official Python library for the nimble API
5
5
  Project-URL: Homepage, https://github.com/Nimbleway/nimble-python
6
6
  Project-URL: Repository, https://github.com/Nimbleway/nimble-python
@@ -115,3 +115,42 @@ Methods:
115
115
  - <code title="get /v1/batches">client.batches.<a href="./src/nimble_python/resources/batches.py">list</a>() -> None</code>
116
116
  - <code title="get /v1/batches/{batch_id}">client.batches.<a href="./src/nimble_python/resources/batches.py">get</a>(batch_id) -> <a href="./src/nimble_python/types/batch_get_response.py">BatchGetResponse</a></code>
117
117
  - <code title="get /v1/batches/{batch_id}/progress">client.batches.<a href="./src/nimble_python/resources/batches.py">progress</a>(batch_id) -> <a href="./src/nimble_python/types/batch_progress_response.py">BatchProgressResponse</a></code>
118
+
119
+ # DomainKnowledge
120
+
121
+ Types:
122
+
123
+ ```python
124
+ from nimble_python.types import DomainKnowledgeGetDriverResponse
125
+ ```
126
+
127
+ Methods:
128
+
129
+ - <code title="get /v1/domain-knowledge/driver">client.domain_knowledge.<a href="./src/nimble_python/resources/domain_knowledge.py">get_driver</a>(\*\*<a href="src/nimble_python/types/domain_knowledge_get_driver_params.py">params</a>) -> <a href="./src/nimble_python/types/domain_knowledge_get_driver_response.py">DomainKnowledgeGetDriverResponse</a></code>
130
+
131
+ # Media
132
+
133
+ Types:
134
+
135
+ ```python
136
+ from nimble_python.types import MediaRunResponse, MediaRunAsyncResponse
137
+ ```
138
+
139
+ Methods:
140
+
141
+ - <code title="post /v1/media">client.media.<a href="./src/nimble_python/resources/media.py">run</a>(\*\*<a href="src/nimble_python/types/media_run_params.py">params</a>) -> <a href="./src/nimble_python/types/media_run_response.py">MediaRunResponse</a></code>
142
+ - <code title="post /v1/media/async">client.media.<a href="./src/nimble_python/resources/media.py">run_async</a>(\*\*<a href="src/nimble_python/types/media_run_async_params.py">params</a>) -> <a href="./src/nimble_python/types/media_run_async_response.py">MediaRunAsyncResponse</a></code>
143
+
144
+ # Serp
145
+
146
+ Types:
147
+
148
+ ```python
149
+ from nimble_python.types import SerpRunResponse, SerpRunAsyncResponse, SerpRunBatchResponse
150
+ ```
151
+
152
+ Methods:
153
+
154
+ - <code title="post /v1/serp">client.serp.<a href="./src/nimble_python/resources/serp.py">run</a>(\*\*<a href="src/nimble_python/types/serp_run_params.py">params</a>) -> <a href="./src/nimble_python/types/serp_run_response.py">SerpRunResponse</a></code>
155
+ - <code title="post /v1/serp/async">client.serp.<a href="./src/nimble_python/resources/serp.py">run_async</a>(\*\*<a href="src/nimble_python/types/serp_run_async_params.py">params</a>) -> <a href="./src/nimble_python/types/serp_run_async_response.py">SerpRunAsyncResponse</a></code>
156
+ - <code title="post /v1/serp/batch">client.serp.<a href="./src/nimble_python/resources/serp.py">run_batch</a>(\*\*<a href="src/nimble_python/types/serp_run_batch_params.py">params</a>) -> <a href="./src/nimble_python/types/serp_run_batch_response.py">SerpRunBatchResponse</a></code>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nimble_python"
3
- version = "0.16.0"
3
+ version = "0.18.0"
4
4
  description = "The official Python library for the nimble API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -154,7 +154,7 @@ show_error_codes = true
154
154
  #
155
155
  # We also exclude our `tests` as mypy doesn't always infer
156
156
  # types correctly and Pyright will still catch any type errors.
157
- exclude = ['src/nimble_python/_files.py', '_dev/.*.py', 'tests/.*']
157
+ exclude = ["src/nimble_python/_files.py", "_dev/.*.py", "tests/.*"]
158
158
 
159
159
  strict_equality = true
160
160
  implicit_reexport = true
@@ -540,6 +540,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
540
540
  files = cast(HttpxRequestFiles, ForceMultipartDict())
541
541
 
542
542
  prepared_url = self._prepare_url(options.url)
543
+ # preserve hard-coded query params from the url
544
+ if params and prepared_url.query:
545
+ params = {**dict(prepared_url.params.items()), **params}
546
+ prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0])
543
547
  if "_" in prepared_url.host:
544
548
  # work around https://github.com/encode/httpx/discussions/2880
545
549
  kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
@@ -33,6 +33,7 @@ from ._types import (
33
33
  )
34
34
  from ._utils import (
35
35
  is_given,
36
+ is_mapping_t,
36
37
  maybe_transform,
37
38
  get_async_library,
38
39
  async_maybe_transform,
@@ -60,11 +61,14 @@ from .types.extract_async_response import ExtractAsyncResponse
60
61
  from .types.extract_batch_response import ExtractBatchResponse
61
62
 
62
63
  if TYPE_CHECKING:
63
- from .resources import agent, crawl, tasks, batches
64
+ from .resources import serp, agent, crawl, media, tasks, batches, domain_knowledge
65
+ from .resources.serp import SerpResource, AsyncSerpResource
64
66
  from .resources.agent import AgentResource, AsyncAgentResource
65
67
  from .resources.crawl import CrawlResource, AsyncCrawlResource
68
+ from .resources.media import MediaResource, AsyncMediaResource
66
69
  from .resources.tasks import TasksResource, AsyncTasksResource
67
70
  from .resources.batches import BatchesResource, AsyncBatchesResource
71
+ from .resources.domain_knowledge import DomainKnowledgeResource, AsyncDomainKnowledgeResource
68
72
 
69
73
  __all__ = ["Timeout", "Transport", "ProxiesTypes", "RequestOptions", "Nimble", "AsyncNimble", "Client", "AsyncClient"]
70
74
 
@@ -72,11 +76,13 @@ __all__ = ["Timeout", "Transport", "ProxiesTypes", "RequestOptions", "Nimble", "
72
76
  class Nimble(SyncAPIClient):
73
77
  # client options
74
78
  api_key: str | None
79
+ client_source: str | None
75
80
 
76
81
  def __init__(
77
82
  self,
78
83
  *,
79
84
  api_key: str | None = None,
85
+ client_source: str | None = None,
80
86
  base_url: str | httpx.URL | None = None,
81
87
  timeout: float | Timeout | None | NotGiven = not_given,
82
88
  max_retries: int = DEFAULT_MAX_RETRIES,
@@ -98,17 +104,32 @@ class Nimble(SyncAPIClient):
98
104
  ) -> None:
99
105
  """Construct a new synchronous Nimble client instance.
100
106
 
101
- This automatically infers the `api_key` argument from the `NIMBLE_API_KEY` environment variable if it is not provided.
107
+ This automatically infers the following arguments from their corresponding environment variables if they are not provided:
108
+ - `api_key` from `NIMBLE_API_KEY`
109
+ - `client_source` from `CLIENT_SOURCE`
102
110
  """
103
111
  if api_key is None:
104
112
  api_key = os.environ.get("NIMBLE_API_KEY")
105
113
  self.api_key = api_key
106
114
 
115
+ if client_source is None:
116
+ client_source = os.environ.get("CLIENT_SOURCE") or "sdk"
117
+ self.client_source = client_source
118
+
107
119
  if base_url is None:
108
120
  base_url = os.environ.get("NIMBLE_BASE_URL")
109
121
  if base_url is None:
110
122
  base_url = f"https://sdk.nimbleway.com"
111
123
 
124
+ custom_headers_env = os.environ.get("NIMBLE_CUSTOM_HEADERS")
125
+ if custom_headers_env is not None:
126
+ parsed: dict[str, str] = {}
127
+ for line in custom_headers_env.split("\n"):
128
+ colon = line.find(":")
129
+ if colon >= 0:
130
+ parsed[line[:colon].strip()] = line[colon + 1 :].strip()
131
+ default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
132
+
112
133
  super().__init__(
113
134
  version=__version__,
114
135
  base_url=base_url,
@@ -144,6 +165,24 @@ class Nimble(SyncAPIClient):
144
165
 
145
166
  return BatchesResource(self)
146
167
 
168
+ @cached_property
169
+ def domain_knowledge(self) -> DomainKnowledgeResource:
170
+ from .resources.domain_knowledge import DomainKnowledgeResource
171
+
172
+ return DomainKnowledgeResource(self)
173
+
174
+ @cached_property
175
+ def media(self) -> MediaResource:
176
+ from .resources.media import MediaResource
177
+
178
+ return MediaResource(self)
179
+
180
+ @cached_property
181
+ def serp(self) -> SerpResource:
182
+ from .resources.serp import SerpResource
183
+
184
+ return SerpResource(self)
185
+
147
186
  @cached_property
148
187
  def with_raw_response(self) -> NimbleWithRawResponse:
149
188
  return NimbleWithRawResponse(self)
@@ -171,6 +210,7 @@ class Nimble(SyncAPIClient):
171
210
  return {
172
211
  **super().default_headers,
173
212
  "X-Stainless-Async": "false",
213
+ "X-Client-Source": self.client_source if self.client_source is not None else Omit(),
174
214
  **self._custom_headers,
175
215
  }
176
216
 
@@ -187,6 +227,7 @@ class Nimble(SyncAPIClient):
187
227
  self,
188
228
  *,
189
229
  api_key: str | None = None,
230
+ client_source: str | None = None,
190
231
  base_url: str | httpx.URL | None = None,
191
232
  timeout: float | Timeout | None | NotGiven = not_given,
192
233
  http_client: httpx.Client | None = None,
@@ -221,6 +262,7 @@ class Nimble(SyncAPIClient):
221
262
  http_client = http_client or self._client
222
263
  return self.__class__(
223
264
  api_key=api_key or self.api_key,
265
+ client_source=client_source or self.client_source,
224
266
  base_url=base_url or self.base_url,
225
267
  timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
226
268
  http_client=http_client,
@@ -498,9 +540,9 @@ class Nimble(SyncAPIClient):
498
540
  ]
499
541
  | Omit = omit,
500
542
  device: Literal["desktop", "mobile", "tablet"] | Omit = omit,
501
- driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro"] | Omit = omit,
543
+ driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro", "media-vx6"] | Omit = omit,
502
544
  expected_status_codes: Iterable[int] | Omit = omit,
503
- formats: List[Literal["html", "markdown", "screenshot", "headers"]] | Omit = omit,
545
+ formats: List[Literal["html", "markdown", "screenshot", "headers", "links"]] | Omit = omit,
504
546
  headers: Dict[str, Union[str, SequenceNotStr[str], None]] | Omit = omit,
505
547
  http2: bool | Omit = omit,
506
548
  is_xhr: bool | Omit = omit,
@@ -1040,6 +1082,7 @@ class Nimble(SyncAPIClient):
1040
1082
  "auto",
1041
1083
  ]
1042
1084
  | Omit = omit,
1085
+ markdown_backend: Literal["full_page", "main_content"] | Omit = omit,
1043
1086
  method: Literal["GET", "POST", "PUT", "PATCH", "DELETE"] | Omit = omit,
1044
1087
  network_capture: Iterable[client_extract_params.NetworkCapture] | Omit = omit,
1045
1088
  os: Literal["windows", "mac os", "linux", "android", "ios"] | Omit = omit,
@@ -1154,6 +1197,10 @@ class Nimble(SyncAPIClient):
1154
1197
 
1155
1198
  locale: Locale for browser language and region settings
1156
1199
 
1200
+ markdown_backend: Selects which markdown conversion strategy to use. "full_page" converts the
1201
+ entire HTML page. "main_content" uses Mozilla Readability to extract the main
1202
+ article content before converting.
1203
+
1157
1204
  method: HTTP method for the request
1158
1205
 
1159
1206
  network_capture: Filters for capturing network traffic
@@ -1203,6 +1250,7 @@ class Nimble(SyncAPIClient):
1203
1250
  "http2": http2,
1204
1251
  "is_xhr": is_xhr,
1205
1252
  "locale": locale,
1253
+ "markdown_backend": markdown_backend,
1206
1254
  "method": method,
1207
1255
  "network_capture": network_capture,
1208
1256
  "os": os,
@@ -1489,9 +1537,9 @@ class Nimble(SyncAPIClient):
1489
1537
  ]
1490
1538
  | Omit = omit,
1491
1539
  device: Literal["desktop", "mobile", "tablet"] | Omit = omit,
1492
- driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro"] | Omit = omit,
1540
+ driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro", "media-vx6"] | Omit = omit,
1493
1541
  expected_status_codes: Iterable[int] | Omit = omit,
1494
- formats: List[Literal["html", "markdown", "screenshot", "headers"]] | Omit = omit,
1542
+ formats: List[Literal["html", "markdown", "screenshot", "headers", "links"]] | Omit = omit,
1495
1543
  headers: Dict[str, Union[str, SequenceNotStr[str], None]] | Omit = omit,
1496
1544
  http2: bool | Omit = omit,
1497
1545
  is_xhr: bool | Omit = omit,
@@ -2031,6 +2079,7 @@ class Nimble(SyncAPIClient):
2031
2079
  "auto",
2032
2080
  ]
2033
2081
  | Omit = omit,
2082
+ markdown_backend: Literal["full_page", "main_content"] | Omit = omit,
2034
2083
  method: Literal["GET", "POST", "PUT", "PATCH", "DELETE"] | Omit = omit,
2035
2084
  network_capture: Iterable[client_extract_async_params.NetworkCapture] | Omit = omit,
2036
2085
  os: Literal["windows", "mac os", "linux", "android", "ios"] | Omit = omit,
@@ -2151,6 +2200,10 @@ class Nimble(SyncAPIClient):
2151
2200
 
2152
2201
  locale: Locale for browser language and region settings
2153
2202
 
2203
+ markdown_backend: Selects which markdown conversion strategy to use. "full_page" converts the
2204
+ entire HTML page. "main_content" uses Mozilla Readability to extract the main
2205
+ article content before converting.
2206
+
2154
2207
  method: HTTP method for the request
2155
2208
 
2156
2209
  network_capture: Filters for capturing network traffic
@@ -2209,6 +2262,7 @@ class Nimble(SyncAPIClient):
2209
2262
  "http2": http2,
2210
2263
  "is_xhr": is_xhr,
2211
2264
  "locale": locale,
2265
+ "markdown_backend": markdown_backend,
2212
2266
  "method": method,
2213
2267
  "network_capture": network_capture,
2214
2268
  "os": os,
@@ -3272,11 +3326,13 @@ class Nimble(SyncAPIClient):
3272
3326
  class AsyncNimble(AsyncAPIClient):
3273
3327
  # client options
3274
3328
  api_key: str | None
3329
+ client_source: str | None
3275
3330
 
3276
3331
  def __init__(
3277
3332
  self,
3278
3333
  *,
3279
3334
  api_key: str | None = None,
3335
+ client_source: str | None = None,
3280
3336
  base_url: str | httpx.URL | None = None,
3281
3337
  timeout: float | Timeout | None | NotGiven = not_given,
3282
3338
  max_retries: int = DEFAULT_MAX_RETRIES,
@@ -3298,17 +3354,32 @@ class AsyncNimble(AsyncAPIClient):
3298
3354
  ) -> None:
3299
3355
  """Construct a new async AsyncNimble client instance.
3300
3356
 
3301
- This automatically infers the `api_key` argument from the `NIMBLE_API_KEY` environment variable if it is not provided.
3357
+ This automatically infers the following arguments from their corresponding environment variables if they are not provided:
3358
+ - `api_key` from `NIMBLE_API_KEY`
3359
+ - `client_source` from `CLIENT_SOURCE`
3302
3360
  """
3303
3361
  if api_key is None:
3304
3362
  api_key = os.environ.get("NIMBLE_API_KEY")
3305
3363
  self.api_key = api_key
3306
3364
 
3365
+ if client_source is None:
3366
+ client_source = os.environ.get("CLIENT_SOURCE") or "sdk"
3367
+ self.client_source = client_source
3368
+
3307
3369
  if base_url is None:
3308
3370
  base_url = os.environ.get("NIMBLE_BASE_URL")
3309
3371
  if base_url is None:
3310
3372
  base_url = f"https://sdk.nimbleway.com"
3311
3373
 
3374
+ custom_headers_env = os.environ.get("NIMBLE_CUSTOM_HEADERS")
3375
+ if custom_headers_env is not None:
3376
+ parsed: dict[str, str] = {}
3377
+ for line in custom_headers_env.split("\n"):
3378
+ colon = line.find(":")
3379
+ if colon >= 0:
3380
+ parsed[line[:colon].strip()] = line[colon + 1 :].strip()
3381
+ default_headers = {**parsed, **(default_headers if is_mapping_t(default_headers) else {})}
3382
+
3312
3383
  super().__init__(
3313
3384
  version=__version__,
3314
3385
  base_url=base_url,
@@ -3344,6 +3415,24 @@ class AsyncNimble(AsyncAPIClient):
3344
3415
 
3345
3416
  return AsyncBatchesResource(self)
3346
3417
 
3418
+ @cached_property
3419
+ def domain_knowledge(self) -> AsyncDomainKnowledgeResource:
3420
+ from .resources.domain_knowledge import AsyncDomainKnowledgeResource
3421
+
3422
+ return AsyncDomainKnowledgeResource(self)
3423
+
3424
+ @cached_property
3425
+ def media(self) -> AsyncMediaResource:
3426
+ from .resources.media import AsyncMediaResource
3427
+
3428
+ return AsyncMediaResource(self)
3429
+
3430
+ @cached_property
3431
+ def serp(self) -> AsyncSerpResource:
3432
+ from .resources.serp import AsyncSerpResource
3433
+
3434
+ return AsyncSerpResource(self)
3435
+
3347
3436
  @cached_property
3348
3437
  def with_raw_response(self) -> AsyncNimbleWithRawResponse:
3349
3438
  return AsyncNimbleWithRawResponse(self)
@@ -3371,6 +3460,7 @@ class AsyncNimble(AsyncAPIClient):
3371
3460
  return {
3372
3461
  **super().default_headers,
3373
3462
  "X-Stainless-Async": f"async:{get_async_library()}",
3463
+ "X-Client-Source": self.client_source if self.client_source is not None else Omit(),
3374
3464
  **self._custom_headers,
3375
3465
  }
3376
3466
 
@@ -3387,6 +3477,7 @@ class AsyncNimble(AsyncAPIClient):
3387
3477
  self,
3388
3478
  *,
3389
3479
  api_key: str | None = None,
3480
+ client_source: str | None = None,
3390
3481
  base_url: str | httpx.URL | None = None,
3391
3482
  timeout: float | Timeout | None | NotGiven = not_given,
3392
3483
  http_client: httpx.AsyncClient | None = None,
@@ -3421,6 +3512,7 @@ class AsyncNimble(AsyncAPIClient):
3421
3512
  http_client = http_client or self._client
3422
3513
  return self.__class__(
3423
3514
  api_key=api_key or self.api_key,
3515
+ client_source=client_source or self.client_source,
3424
3516
  base_url=base_url or self.base_url,
3425
3517
  timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
3426
3518
  http_client=http_client,
@@ -3698,9 +3790,9 @@ class AsyncNimble(AsyncAPIClient):
3698
3790
  ]
3699
3791
  | Omit = omit,
3700
3792
  device: Literal["desktop", "mobile", "tablet"] | Omit = omit,
3701
- driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro"] | Omit = omit,
3793
+ driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro", "media-vx6"] | Omit = omit,
3702
3794
  expected_status_codes: Iterable[int] | Omit = omit,
3703
- formats: List[Literal["html", "markdown", "screenshot", "headers"]] | Omit = omit,
3795
+ formats: List[Literal["html", "markdown", "screenshot", "headers", "links"]] | Omit = omit,
3704
3796
  headers: Dict[str, Union[str, SequenceNotStr[str], None]] | Omit = omit,
3705
3797
  http2: bool | Omit = omit,
3706
3798
  is_xhr: bool | Omit = omit,
@@ -4240,6 +4332,7 @@ class AsyncNimble(AsyncAPIClient):
4240
4332
  "auto",
4241
4333
  ]
4242
4334
  | Omit = omit,
4335
+ markdown_backend: Literal["full_page", "main_content"] | Omit = omit,
4243
4336
  method: Literal["GET", "POST", "PUT", "PATCH", "DELETE"] | Omit = omit,
4244
4337
  network_capture: Iterable[client_extract_params.NetworkCapture] | Omit = omit,
4245
4338
  os: Literal["windows", "mac os", "linux", "android", "ios"] | Omit = omit,
@@ -4354,6 +4447,10 @@ class AsyncNimble(AsyncAPIClient):
4354
4447
 
4355
4448
  locale: Locale for browser language and region settings
4356
4449
 
4450
+ markdown_backend: Selects which markdown conversion strategy to use. "full_page" converts the
4451
+ entire HTML page. "main_content" uses Mozilla Readability to extract the main
4452
+ article content before converting.
4453
+
4357
4454
  method: HTTP method for the request
4358
4455
 
4359
4456
  network_capture: Filters for capturing network traffic
@@ -4403,6 +4500,7 @@ class AsyncNimble(AsyncAPIClient):
4403
4500
  "http2": http2,
4404
4501
  "is_xhr": is_xhr,
4405
4502
  "locale": locale,
4503
+ "markdown_backend": markdown_backend,
4406
4504
  "method": method,
4407
4505
  "network_capture": network_capture,
4408
4506
  "os": os,
@@ -4689,9 +4787,9 @@ class AsyncNimble(AsyncAPIClient):
4689
4787
  ]
4690
4788
  | Omit = omit,
4691
4789
  device: Literal["desktop", "mobile", "tablet"] | Omit = omit,
4692
- driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro"] | Omit = omit,
4790
+ driver: Literal["vx6", "vx8", "vx8-pro", "vx10", "vx10-pro", "vx12", "vx12-pro", "media-vx6"] | Omit = omit,
4693
4791
  expected_status_codes: Iterable[int] | Omit = omit,
4694
- formats: List[Literal["html", "markdown", "screenshot", "headers"]] | Omit = omit,
4792
+ formats: List[Literal["html", "markdown", "screenshot", "headers", "links"]] | Omit = omit,
4695
4793
  headers: Dict[str, Union[str, SequenceNotStr[str], None]] | Omit = omit,
4696
4794
  http2: bool | Omit = omit,
4697
4795
  is_xhr: bool | Omit = omit,
@@ -5231,6 +5329,7 @@ class AsyncNimble(AsyncAPIClient):
5231
5329
  "auto",
5232
5330
  ]
5233
5331
  | Omit = omit,
5332
+ markdown_backend: Literal["full_page", "main_content"] | Omit = omit,
5234
5333
  method: Literal["GET", "POST", "PUT", "PATCH", "DELETE"] | Omit = omit,
5235
5334
  network_capture: Iterable[client_extract_async_params.NetworkCapture] | Omit = omit,
5236
5335
  os: Literal["windows", "mac os", "linux", "android", "ios"] | Omit = omit,
@@ -5351,6 +5450,10 @@ class AsyncNimble(AsyncAPIClient):
5351
5450
 
5352
5451
  locale: Locale for browser language and region settings
5353
5452
 
5453
+ markdown_backend: Selects which markdown conversion strategy to use. "full_page" converts the
5454
+ entire HTML page. "main_content" uses Mozilla Readability to extract the main
5455
+ article content before converting.
5456
+
5354
5457
  method: HTTP method for the request
5355
5458
 
5356
5459
  network_capture: Filters for capturing network traffic
@@ -5409,6 +5512,7 @@ class AsyncNimble(AsyncAPIClient):
5409
5512
  "http2": http2,
5410
5513
  "is_xhr": is_xhr,
5411
5514
  "locale": locale,
5515
+ "markdown_backend": markdown_backend,
5412
5516
  "method": method,
5413
5517
  "network_capture": network_capture,
5414
5518
  "os": os,
@@ -6515,6 +6619,24 @@ class NimbleWithRawResponse:
6515
6619
 
6516
6620
  return BatchesResourceWithRawResponse(self._client.batches)
6517
6621
 
6622
+ @cached_property
6623
+ def domain_knowledge(self) -> domain_knowledge.DomainKnowledgeResourceWithRawResponse:
6624
+ from .resources.domain_knowledge import DomainKnowledgeResourceWithRawResponse
6625
+
6626
+ return DomainKnowledgeResourceWithRawResponse(self._client.domain_knowledge)
6627
+
6628
+ @cached_property
6629
+ def media(self) -> media.MediaResourceWithRawResponse:
6630
+ from .resources.media import MediaResourceWithRawResponse
6631
+
6632
+ return MediaResourceWithRawResponse(self._client.media)
6633
+
6634
+ @cached_property
6635
+ def serp(self) -> serp.SerpResourceWithRawResponse:
6636
+ from .resources.serp import SerpResourceWithRawResponse
6637
+
6638
+ return SerpResourceWithRawResponse(self._client.serp)
6639
+
6518
6640
 
6519
6641
  class AsyncNimbleWithRawResponse:
6520
6642
  _client: AsyncNimble
@@ -6562,6 +6684,24 @@ class AsyncNimbleWithRawResponse:
6562
6684
 
6563
6685
  return AsyncBatchesResourceWithRawResponse(self._client.batches)
6564
6686
 
6687
+ @cached_property
6688
+ def domain_knowledge(self) -> domain_knowledge.AsyncDomainKnowledgeResourceWithRawResponse:
6689
+ from .resources.domain_knowledge import AsyncDomainKnowledgeResourceWithRawResponse
6690
+
6691
+ return AsyncDomainKnowledgeResourceWithRawResponse(self._client.domain_knowledge)
6692
+
6693
+ @cached_property
6694
+ def media(self) -> media.AsyncMediaResourceWithRawResponse:
6695
+ from .resources.media import AsyncMediaResourceWithRawResponse
6696
+
6697
+ return AsyncMediaResourceWithRawResponse(self._client.media)
6698
+
6699
+ @cached_property
6700
+ def serp(self) -> serp.AsyncSerpResourceWithRawResponse:
6701
+ from .resources.serp import AsyncSerpResourceWithRawResponse
6702
+
6703
+ return AsyncSerpResourceWithRawResponse(self._client.serp)
6704
+
6565
6705
 
6566
6706
  class NimbleWithStreamedResponse:
6567
6707
  _client: Nimble
@@ -6609,6 +6749,24 @@ class NimbleWithStreamedResponse:
6609
6749
 
6610
6750
  return BatchesResourceWithStreamingResponse(self._client.batches)
6611
6751
 
6752
+ @cached_property
6753
+ def domain_knowledge(self) -> domain_knowledge.DomainKnowledgeResourceWithStreamingResponse:
6754
+ from .resources.domain_knowledge import DomainKnowledgeResourceWithStreamingResponse
6755
+
6756
+ return DomainKnowledgeResourceWithStreamingResponse(self._client.domain_knowledge)
6757
+
6758
+ @cached_property
6759
+ def media(self) -> media.MediaResourceWithStreamingResponse:
6760
+ from .resources.media import MediaResourceWithStreamingResponse
6761
+
6762
+ return MediaResourceWithStreamingResponse(self._client.media)
6763
+
6764
+ @cached_property
6765
+ def serp(self) -> serp.SerpResourceWithStreamingResponse:
6766
+ from .resources.serp import SerpResourceWithStreamingResponse
6767
+
6768
+ return SerpResourceWithStreamingResponse(self._client.serp)
6769
+
6612
6770
 
6613
6771
  class AsyncNimbleWithStreamedResponse:
6614
6772
  _client: AsyncNimble
@@ -6656,6 +6814,24 @@ class AsyncNimbleWithStreamedResponse:
6656
6814
 
6657
6815
  return AsyncBatchesResourceWithStreamingResponse(self._client.batches)
6658
6816
 
6817
+ @cached_property
6818
+ def domain_knowledge(self) -> domain_knowledge.AsyncDomainKnowledgeResourceWithStreamingResponse:
6819
+ from .resources.domain_knowledge import AsyncDomainKnowledgeResourceWithStreamingResponse
6820
+
6821
+ return AsyncDomainKnowledgeResourceWithStreamingResponse(self._client.domain_knowledge)
6822
+
6823
+ @cached_property
6824
+ def media(self) -> media.AsyncMediaResourceWithStreamingResponse:
6825
+ from .resources.media import AsyncMediaResourceWithStreamingResponse
6826
+
6827
+ return AsyncMediaResourceWithStreamingResponse(self._client.media)
6828
+
6829
+ @cached_property
6830
+ def serp(self) -> serp.AsyncSerpResourceWithStreamingResponse:
6831
+ from .resources.serp import AsyncSerpResourceWithStreamingResponse
6832
+
6833
+ return AsyncSerpResourceWithStreamingResponse(self._client.serp)
6834
+
6659
6835
 
6660
6836
  Client = Nimble
6661
6837