greynoise 3.0.0__tar.gz → 3.0.2__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.
- {greynoise-3.0.0 → greynoise-3.0.2}/.bumpversion.cfg +2 -2
- {greynoise-3.0.0 → greynoise-3.0.2}/.circleci/config.yml +0 -5
- {greynoise-3.0.0 → greynoise-3.0.2}/.readthedocs.yml +6 -1
- {greynoise-3.0.0 → greynoise-3.0.2}/CHANGELOG.rst +17 -1
- {greynoise-3.0.0 → greynoise-3.0.2}/PKG-INFO +1 -1
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/source/conf.py +1 -1
- {greynoise-3.0.0 → greynoise-3.0.2}/pyproject.toml +1 -1
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/__version__.py +1 -1
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/api/__init__.py +12 -9
- {greynoise-3.0.0 → greynoise-3.0.2}/.dockerignore +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/.editorconfig +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/.github/CODEOWNERS +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/.github/dependabot.yml +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/.github/workflows/slack_release_notice.yml +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/.gitignore +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/.pre-commit-config.yaml +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/.yamllint +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/Dockerfile +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/LICENSE +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/MANIFEST.in +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/Makefile +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/README.rst +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/Makefile +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/source/changelog.rst +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/source/index.rst +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/source/introduction.rst +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/source/reference.rst +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/source/sample.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/docs/source/tutorial.rst +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/pytest.ini +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/release.md +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/requirements/common.txt +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/requirements/dev.txt +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/requirements/docs.txt +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/requirements/test.txt +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/reset_changelog.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/setup.cfg +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/sonar-project.properties +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/__init__.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/api/filter.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/__init__.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/decorator.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/formatter.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/helper.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/parameter.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/subcommand.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/analyze.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/cvedetails.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/gnql_query.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/gnql_stats.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/ip_community.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/ip_context.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/ip_context_result.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/ip_multi_context.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/ip_quick_check.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/macros.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/personadetails.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/riot.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/sensoractivity.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/sensorlist.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/similarity.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/stats.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/timeline.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/cli/templates/timelinehourly.txt.j2 +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/exceptions.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/src/greynoise/util.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/tests/cli/test_formatter.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/tests/cli/test_init.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/tests/cli/test_subcommand.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/tests/test_api.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/tests/test_util.py +0 -0
- {greynoise-3.0.0 → greynoise-3.0.2}/tox.ini +0 -0
|
@@ -24,11 +24,6 @@ workflows:
|
|
|
24
24
|
- py312:
|
|
25
25
|
filters:
|
|
26
26
|
<<: *TAGS_FILTER
|
|
27
|
-
- sonarcloud:
|
|
28
|
-
requires:
|
|
29
|
-
# generate static analysis and coverage reports in py37 job
|
|
30
|
-
# and upload them to sonarcloud.io in sonarcloud job
|
|
31
|
-
- py39
|
|
32
27
|
- pypi:
|
|
33
28
|
requires:
|
|
34
29
|
# release to pypi only when test cases pass in all python versions
|
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
Changelog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
Version `3.0.2`_
|
|
6
|
+
================
|
|
7
|
+
**Date**: March 10, 2026
|
|
8
|
+
|
|
9
|
+
* API client:
|
|
10
|
+
* Update `proxy` parameter to be used for all API requests
|
|
11
|
+
|
|
12
|
+
Version `3.0.1`_
|
|
13
|
+
================
|
|
14
|
+
**Date**: June 18, 2025
|
|
15
|
+
|
|
16
|
+
* API client:
|
|
17
|
+
* Updated `query` command to use GNQL Metadata endpoint when `exclude_raw` is True
|
|
18
|
+
|
|
5
19
|
Version `3.0.0`_
|
|
6
20
|
================
|
|
7
21
|
**Date**: June 02, 2025
|
|
@@ -467,4 +481,6 @@ Version `0.2.0`_
|
|
|
467
481
|
.. _`2.1.0`: https://github.com/GreyNoise-Intelligence/pygreynoise/compare/v2.0.1...2.1.0
|
|
468
482
|
.. _`2.2.0`: https://github.com/GreyNoise-Intelligence/pygreynoise/compare/v2.1.0...2.2.0
|
|
469
483
|
.. _`2.3.0`: https://github.com/GreyNoise-Intelligence/pygreynoise/compare/v2.2.0...2.3.0
|
|
470
|
-
.. _`3.0.0`: https://github.com/GreyNoise-Intelligence/pygreynoise/compare/v2.3.0...
|
|
484
|
+
.. _`3.0.0`: https://github.com/GreyNoise-Intelligence/pygreynoise/compare/v2.3.0...v3.0.0
|
|
485
|
+
.. _`3.0.1`: https://github.com/GreyNoise-Intelligence/pygreynoise/compare/v3.0.0...v3.0.1
|
|
486
|
+
.. _`3.0.2`: https://github.com/GreyNoise-Intelligence/pygreynoise/compare/v3.0.1...HEAD
|
|
@@ -25,7 +25,7 @@ copyright = "2018-2025, GreyNoise Intelligence"
|
|
|
25
25
|
author = "GreyNoise Intelligence"
|
|
26
26
|
|
|
27
27
|
# The full version, including alpha/beta/rc tags
|
|
28
|
-
release = "3.0.
|
|
28
|
+
release = "3.0.2"
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
# -- General configuration ---------------------------------------------------
|
|
@@ -98,6 +98,9 @@ class BaseAPIClient:
|
|
|
98
98
|
if params is None:
|
|
99
99
|
params = {}
|
|
100
100
|
|
|
101
|
+
# Use config proxy when no proxy is explicitly passed
|
|
102
|
+
proxy = proxy or self.config.proxy
|
|
103
|
+
|
|
101
104
|
user_agent_parts = ["GreyNoise/{}".format(__version__)]
|
|
102
105
|
if self.config.integration_name:
|
|
103
106
|
user_agent_parts.append("({})".format(self.config.integration_name))
|
|
@@ -153,7 +156,7 @@ class BaseAPIClient:
|
|
|
153
156
|
else:
|
|
154
157
|
body = response.text
|
|
155
158
|
|
|
156
|
-
LOGGER.debug("API response received %s
|
|
159
|
+
LOGGER.debug("API response received %s", response.status_code)
|
|
157
160
|
|
|
158
161
|
if response.status_code == 429:
|
|
159
162
|
raise RateLimitError()
|
|
@@ -201,7 +204,6 @@ class BaseAPIClient:
|
|
|
201
204
|
for future in as_completed(future_to_chunk):
|
|
202
205
|
try:
|
|
203
206
|
chunk_results = future.result()
|
|
204
|
-
LOGGER.debug(f"Chunked Results: {chunk_results}")
|
|
205
207
|
|
|
206
208
|
if first_result_type is None:
|
|
207
209
|
first_result_type = type(chunk_results)
|
|
@@ -218,7 +220,6 @@ class BaseAPIClient:
|
|
|
218
220
|
dict_results[key].extend(value)
|
|
219
221
|
else:
|
|
220
222
|
dict_results[key].append(value)
|
|
221
|
-
LOGGER.debug(f"dict results: {dict_results}")
|
|
222
223
|
|
|
223
224
|
except Exception as e:
|
|
224
225
|
LOGGER.error("Error processing batch: %s", str(e))
|
|
@@ -247,6 +248,7 @@ class GreyNoise(BaseAPIClient):
|
|
|
247
248
|
|
|
248
249
|
NAME = "GreyNoise"
|
|
249
250
|
EP_GNQL = "v3/gnql"
|
|
251
|
+
EP_GNQL_METADATA = "v3/gnql/metadata"
|
|
250
252
|
EP_GNQL_STATS = "v2/experimental/gnql/stats"
|
|
251
253
|
EP_IP = "v3/ip/{ip_address}"
|
|
252
254
|
EP_NOISE_MULTI = "v3/ip?quick=true"
|
|
@@ -447,12 +449,13 @@ class GreyNoise(BaseAPIClient):
|
|
|
447
449
|
params["size"] = size
|
|
448
450
|
if scroll is not None:
|
|
449
451
|
params["scroll"] = scroll
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
452
|
+
if exclude_raw:
|
|
453
|
+
LOGGER.debug("Using GNQL Metadata endpoint")
|
|
454
|
+
endpoint = self.EP_GNQL_METADATA
|
|
455
|
+
else:
|
|
456
|
+
LOGGER.debug("Using GNQL Full endpoint")
|
|
457
|
+
endpoint = self.EP_GNQL
|
|
458
|
+
response = self._request(endpoint, params=params)
|
|
456
459
|
|
|
457
460
|
return response
|
|
458
461
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|