internetdata 2.3.0__tar.gz → 2.4.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 (96) hide show
  1. {internetdata-2.3.0 → internetdata-2.4.0}/PKG-INFO +23 -2
  2. {internetdata-2.3.0 → internetdata-2.4.0}/README.md +22 -1
  3. {internetdata-2.3.0 → internetdata-2.4.0}/scripts/v2_subset.py +18 -9
  4. internetdata-2.4.0/spec/openapi.yaml +1667 -0
  5. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/__init__.py +21 -4
  6. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_core.py +95 -1
  7. internetdata-2.4.0/src/internetdata/_generated/api/account/account_identity.py +195 -0
  8. internetdata-2.4.0/src/internetdata/_generated/api/api_keys/__init__.py +1 -0
  9. internetdata-2.4.0/src/internetdata/_generated/api/api_keys/account_create_apikey.py +196 -0
  10. internetdata-2.4.0/src/internetdata/_generated/api/api_keys/account_list_apikeys.py +175 -0
  11. internetdata-2.4.0/src/internetdata/_generated/api/api_keys/account_reveal_apikey.py +212 -0
  12. internetdata-2.4.0/src/internetdata/_generated/api/api_keys/account_revoke_apikey.py +187 -0
  13. internetdata-2.4.0/src/internetdata/_generated/api/api_keys/account_rotate_apikey.py +184 -0
  14. internetdata-2.4.0/src/internetdata/_generated/api/authorization/__init__.py +1 -0
  15. internetdata-2.4.0/src/internetdata/_generated/api/authorization/oauth_authorize.py +198 -0
  16. internetdata-2.4.0/src/internetdata/_generated/api/authorization/oauth_device_authorization.py +194 -0
  17. internetdata-2.4.0/src/internetdata/_generated/api/authorization/oauth_metadata.py +156 -0
  18. internetdata-2.4.0/src/internetdata/_generated/api/authorization/oauth_revoke.py +187 -0
  19. internetdata-2.4.0/src/internetdata/_generated/api/authorization/oauth_token.py +222 -0
  20. internetdata-2.4.0/src/internetdata/_generated/api/database_v_2/__init__.py +1 -0
  21. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/api/database_v_2/list_databases.py +4 -4
  22. internetdata-2.4.0/src/internetdata/_generated/api/organization/__init__.py +1 -0
  23. internetdata-2.4.0/src/internetdata/_generated/api/organization/account_org.py +163 -0
  24. internetdata-2.4.0/src/internetdata/_generated/api/organization/account_org_members.py +154 -0
  25. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/__init__.py +42 -0
  26. internetdata-2.4.0/src/internetdata/_generated/models/account_create_apikey_request.py +75 -0
  27. internetdata-2.4.0/src/internetdata/_generated/models/account_created_apikey.py +120 -0
  28. internetdata-2.4.0/src/internetdata/_generated/models/account_org.py +104 -0
  29. internetdata-2.4.0/src/internetdata/_generated/models/account_org_ref.py +62 -0
  30. internetdata-2.4.0/src/internetdata/_generated/models/account_org_wrap.py +75 -0
  31. internetdata-2.4.0/src/internetdata/_generated/models/account_rc.py +61 -0
  32. internetdata-2.4.0/src/internetdata/_generated/models/account_revealed_apikey.py +69 -0
  33. internetdata-2.4.0/src/internetdata/_generated/models/account_user.py +82 -0
  34. internetdata-2.4.0/src/internetdata/_generated/models/apikey_detail.py +212 -0
  35. internetdata-2.4.0/src/internetdata/_generated/models/apikey_list.py +83 -0
  36. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database.py +10 -10
  37. internetdata-2.4.0/src/internetdata/_generated/models/device_authorization.py +104 -0
  38. internetdata-2.4.0/src/internetdata/_generated/models/device_authorization_request.py +81 -0
  39. internetdata-2.4.0/src/internetdata/_generated/models/identity.py +93 -0
  40. internetdata-2.4.0/src/internetdata/_generated/models/oauth_authorize_code_challenge_method.py +8 -0
  41. internetdata-2.4.0/src/internetdata/_generated/models/oauth_authorize_response_type.py +8 -0
  42. internetdata-2.4.0/src/internetdata/_generated/models/oauth_error.py +72 -0
  43. internetdata-2.4.0/src/internetdata/_generated/models/oauth_metadata.py +184 -0
  44. internetdata-2.4.0/src/internetdata/_generated/models/oauth_revoke_response_200.py +45 -0
  45. internetdata-2.4.0/src/internetdata/_generated/models/revoke_request.py +72 -0
  46. internetdata-2.4.0/src/internetdata/_generated/models/token_request.py +116 -0
  47. internetdata-2.4.0/src/internetdata/_generated/models/token_response.py +123 -0
  48. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/aio.py +131 -4
  49. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/client.py +162 -9
  50. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/errors.py +64 -2
  51. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/models.py +143 -0
  52. internetdata-2.4.0/testdata/testdata.json +1298 -0
  53. {internetdata-2.3.0 → internetdata-2.4.0}/tests/helpers.py +146 -20
  54. {internetdata-2.3.0 → internetdata-2.4.0}/tests/test_client.py +61 -9
  55. internetdata-2.4.0/tests/test_oauth.py +395 -0
  56. internetdata-2.3.0/spec/openapi.yaml +0 -784
  57. internetdata-2.3.0/testdata/testdata.json +0 -160
  58. {internetdata-2.3.0 → internetdata-2.4.0}/.gitignore +0 -0
  59. {internetdata-2.3.0 → internetdata-2.4.0}/LICENSE +0 -0
  60. {internetdata-2.3.0 → internetdata-2.4.0}/pyproject.toml +0 -0
  61. {internetdata-2.3.0 → internetdata-2.4.0}/scripts/download-spec.sh +0 -0
  62. {internetdata-2.3.0 → internetdata-2.4.0}/scripts/generate.sh +0 -0
  63. {internetdata-2.3.0 → internetdata-2.4.0}/scripts/publish.sh +0 -0
  64. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/__init__.py +0 -0
  65. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/api/__init__.py +0 -0
  66. {internetdata-2.3.0/src/internetdata/_generated/api/database_v_2 → internetdata-2.4.0/src/internetdata/_generated/api/account}/__init__.py +0 -0
  67. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/api/database_v_2/database_checksum_v2.py +0 -0
  68. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/api/database_v_2/database_metadata_v2.py +0 -0
  69. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/api/database_v_2/download_database_v2.py +0 -0
  70. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/api/database_v_2/list_downloads.py +0 -0
  71. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/client.py +0 -0
  72. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/errors.py +0 -0
  73. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_checksum_v2_response_200.py +0 -0
  74. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_format.py +0 -0
  75. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_license_type_type_1.py +0 -0
  76. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_license_type_type_2_type_1.py +0 -0
  77. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_license_type_type_3_type_1.py +0 -0
  78. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_metadata.py +0 -0
  79. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_metadata_column.py +0 -0
  80. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_metadata_sample.py +0 -0
  81. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_metadata_sample_additional_property_item.py +0 -0
  82. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_metadata_schema.py +0 -0
  83. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_metadata_size.py +0 -0
  84. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/database_version.py +0 -0
  85. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/db_checksums.py +0 -0
  86. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/download.py +0 -0
  87. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/download_outcome.py +0 -0
  88. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/error.py +0 -0
  89. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/list_databases_response_200.py +0 -0
  90. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/list_downloads_response_200.py +0 -0
  91. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/models/standing.py +0 -0
  92. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/_generated/types.py +0 -0
  93. {internetdata-2.3.0 → internetdata-2.4.0}/src/internetdata/py.typed +0 -0
  94. {internetdata-2.3.0 → internetdata-2.4.0}/tests/conftest.py +0 -0
  95. {internetdata-2.3.0 → internetdata-2.4.0}/tests/test_conformance.py +0 -0
  96. {internetdata-2.3.0 → internetdata-2.4.0}/tests/test_download.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: internetdata
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: Official Python client library for the InternetData API. Download and verify licensed IP datasets.
5
5
  Project-URL: Homepage, https://internetdata.io
6
6
  Project-URL: Documentation, https://docs.internetdata.io
@@ -51,7 +51,7 @@ Requires Python 3.11 or newer. Type hints are included, and the package ships `p
51
51
 
52
52
  ## Usage
53
53
 
54
- Every call needs an API key carrying the `db.download` scope. Create one in the console, then:
54
+ Every database call needs an API key carrying the `db.download` scope. Create one in the console, then:
55
55
 
56
56
  ```python
57
57
  import os
@@ -182,6 +182,27 @@ From 2.3.0, `list`, `metadata`, `checksums`, `downloads` and `download_url` each
182
182
 
183
183
  Note that `rate_limited` and `quota_exceeded` both arrive as HTTP 429 and are not the same thing. A rate limit is the API facing a traffic burst, and retrying later works; a spent quota needs your allowance raised or the window to roll over. The library retries rate limits for you, and server and network failures, but never a spent quota or anything else you sent.
184
184
 
185
+ ### Sign in with OAuth (device flow)
186
+
187
+ A program running on someone's own machine can let them sign in with a browser and pick one of their API keys, instead of asking them to paste it:
188
+
189
+ ```python
190
+ from internetdata import InternetData
191
+
192
+ with InternetData() as signin:
193
+ device = signin.oauth.device_authorization(
194
+ "your-client-id", scope="account.read apikeys.read apikeys.reveal"
195
+ )
196
+ print(f"Open {device.verification_uri} and enter {device.user_code}")
197
+ tokens = signin.oauth.poll_device_token("your-client-id", device)
198
+
199
+ if tokens.apikey is None:
200
+ raise SystemExit("No API key was picked")
201
+ client = InternetData(tokens.apikey)
202
+ ```
203
+
204
+ A refusal raises `OauthAccessDeniedError` and a code that ran out raises `OauthExpiredTokenError`, and client IDs are issued on request from support@internetdata.io. `client.oauth.revoke("your-client-id", tokens.refresh_token)` signs the machine out.
205
+
185
206
  ## Other Libraries
186
207
 
187
208
  There are official InternetData client libraries available for many languages including PHP, Python, Go, Java, Ruby, and many popular frameworks such as Django, Rails, and Laravel. See our GitHub at https://github.com/internetdata for more.
@@ -17,7 +17,7 @@ Requires Python 3.11 or newer. Type hints are included, and the package ships `p
17
17
 
18
18
  ## Usage
19
19
 
20
- Every call needs an API key carrying the `db.download` scope. Create one in the console, then:
20
+ Every database call needs an API key carrying the `db.download` scope. Create one in the console, then:
21
21
 
22
22
  ```python
23
23
  import os
@@ -148,6 +148,27 @@ From 2.3.0, `list`, `metadata`, `checksums`, `downloads` and `download_url` each
148
148
 
149
149
  Note that `rate_limited` and `quota_exceeded` both arrive as HTTP 429 and are not the same thing. A rate limit is the API facing a traffic burst, and retrying later works; a spent quota needs your allowance raised or the window to roll over. The library retries rate limits for you, and server and network failures, but never a spent quota or anything else you sent.
150
150
 
151
+ ### Sign in with OAuth (device flow)
152
+
153
+ A program running on someone's own machine can let them sign in with a browser and pick one of their API keys, instead of asking them to paste it:
154
+
155
+ ```python
156
+ from internetdata import InternetData
157
+
158
+ with InternetData() as signin:
159
+ device = signin.oauth.device_authorization(
160
+ "your-client-id", scope="account.read apikeys.read apikeys.reveal"
161
+ )
162
+ print(f"Open {device.verification_uri} and enter {device.user_code}")
163
+ tokens = signin.oauth.poll_device_token("your-client-id", device)
164
+
165
+ if tokens.apikey is None:
166
+ raise SystemExit("No API key was picked")
167
+ client = InternetData(tokens.apikey)
168
+ ```
169
+
170
+ A refusal raises `OauthAccessDeniedError` and a code that ran out raises `OauthExpiredTokenError`, and client IDs are issued on request from support@internetdata.io. `client.oauth.revoke("your-client-id", tokens.refresh_token)` signs the machine out.
171
+
151
172
  ## Other Libraries
152
173
 
153
174
  There are official InternetData client libraries available for many languages including PHP, Python, Go, Java, Ruby, and many popular frameworks such as Django, Rails, and Laravel. See our GitHub at https://github.com/internetdata for more.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- """Narrows the pinned spec to the v2 API, for codegen only.
3
+ """Narrows the pinned spec to what this client generates from, for codegen only.
4
4
 
5
5
  python3 scripts/v2_subset.py spec/openapi.yaml /tmp/v2.yaml
6
6
 
@@ -11,6 +11,10 @@ rather than a bearer token), a different error vocabulary, and no `list`. Genera
11
11
  would ship dead modules and, worse, a second credential spelling that looks usable from
12
12
  this client and is not.
13
13
 
14
+ Everything else is kept: the v2 database, IAM and OAuth, as the VPNDetection SDK generates
15
+ them. IAM is generated and left unwrapped; the `oauth` accessor sends its own requests
16
+ and never calls the generated authorization endpoints.
17
+
14
18
  So the narrowing happens here rather than in the pinned copy. Unreferenced components go
15
19
  with the paths, or the generator emits models for v1 envelopes nothing can reach.
16
20
 
@@ -25,7 +29,12 @@ from typing import Any
25
29
 
26
30
  from ruamel.yaml import YAML
27
31
 
28
- KEEP_PATH_PREFIX = "/api/v2/"
32
+ KEEP_PATH_PREFIXES = (
33
+ "/api/v2/",
34
+ "/api/v1/iam/",
35
+ "/oauth/",
36
+ "/.well-known/oauth-authorization-server",
37
+ )
29
38
  # v1's `?apikey=` credential. Dropped with v1 itself: leaving it in the spec would put a
30
39
  # second, unusable auth spelling in the generated client.
31
40
  DROP_SECURITY_SCHEMES = ("ApiKeyAuth",)
@@ -40,18 +49,18 @@ def main(source: str, destination: str) -> int:
40
49
  spec: dict[str, Any] = yaml.load(handle)
41
50
 
42
51
  paths = spec.get("paths", {})
43
- dropped = [path for path in paths if not path.startswith(KEEP_PATH_PREFIX)]
52
+ dropped = [path for path in paths if not path.startswith(KEEP_PATH_PREFIXES)]
44
53
  for path in dropped:
45
54
  del paths[path]
46
- if not paths:
47
- raise SystemExit(f"no {KEEP_PATH_PREFIX} paths survived, so the spec moved under us")
55
+ if not any(path.startswith(KEEP_PATH_PREFIXES[0]) for path in paths):
56
+ raise SystemExit(f"no {KEEP_PATH_PREFIXES[0]} paths survived, so the spec moved under us")
48
57
 
49
58
  components = spec.get("components", {})
50
59
  for scheme in DROP_SECURITY_SCHEMES:
51
60
  components.get("securitySchemes", {}).pop(scheme, None)
52
- # The document-level default is v1's; every v2 operation names BearerAuth itself, and
53
- # leaving a scheme here that no longer exists is an invalid spec.
54
- spec["security"] = [{"BearerAuth": []}]
61
+ # Every kept operation names its own security, so a document-level default could only
62
+ # name the dropped v1 scheme, which would leave the spec invalid.
63
+ spec.pop("security", None)
55
64
 
56
65
  reachable = resolve_refs(spec, components)
57
66
  for section in REF_SECTIONS:
@@ -65,7 +74,7 @@ def main(source: str, destination: str) -> int:
65
74
 
66
75
  with open(destination, "w") as handle:
67
76
  yaml.dump(spec, handle)
68
- print(f"{destination} <- {source} ({len(paths)} v2 paths, dropped {len(dropped)})")
77
+ print(f"{destination} <- {source} ({len(paths)} paths kept, dropped {len(dropped)})")
69
78
  return 0
70
79
 
71
80