cloudcheck 6.0.0.686__py3-none-any.whl → 7.0.7__py3-none-any.whl

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.

Potentially problematic release.


This version of cloudcheck might be problematic. Click here for more details.

cloudcheck/cloudcheck.py CHANGED
@@ -8,9 +8,7 @@ from cloudcheck.providers import cloud_providers
8
8
  async def _main():
9
9
  ips = sys.argv[1:]
10
10
  if not ips:
11
- print(
12
- "usage: cloudcheck 1.2.3.4 [update | forceupdate | [ips...] | [domains...]]"
13
- )
11
+ print("usage: cloudcheck 1.2.3.4 [update | forceupdate | [ips...] | [domains...]]")
14
12
  elif len(ips) == 1 and ips[0].lower() == "update":
15
13
  await cloud_providers.update()
16
14
  return
cloudcheck/helpers.py CHANGED
@@ -9,7 +9,7 @@ def is_ip_type(i):
9
9
 
10
10
  def make_ip_type(host):
11
11
  if not host:
12
- raise ValueError(f"Invalid host")
12
+ raise ValueError("Invalid host")
13
13
  try:
14
14
  host = ipaddress.ip_network(host, strict=False)
15
15
  except Exception:
@@ -23,11 +23,7 @@ for file in Path(__file__).parent.glob("*.py"):
23
23
  module_variables = importlib.import_module(import_path, "cloudcheck")
24
24
  for variable in module_variables.__dict__.keys():
25
25
  value = getattr(module_variables, variable)
26
- if (
27
- hasattr(value, "__mro__")
28
- and not value == BaseCloudProvider
29
- and BaseCloudProvider in value.__mro__
30
- ):
26
+ if hasattr(value, "__mro__") and not value == BaseCloudProvider and BaseCloudProvider in value.__mro__:
31
27
  provider_name = value.__name__.lower()
32
28
  providers[provider_name] = value
33
29
 
@@ -103,9 +99,7 @@ class CloudProviders:
103
99
  if self.last_updated > oldest_allowed and not force:
104
100
  return
105
101
  try:
106
- async with httpx.AsyncClient(
107
- transport=httpx.AsyncHTTPTransport(verify=False)
108
- ) as client:
102
+ async with httpx.AsyncClient(transport=httpx.AsyncHTTPTransport(verify=False)) as client:
109
103
  response = await client.get(self.json_url)
110
104
  except Exception as e:
111
105
  error = e
@@ -113,10 +107,10 @@ class CloudProviders:
113
107
  with open(self.json_path, "wb") as f:
114
108
  f.write(response.content)
115
109
  self.load_from_json(force=True)
110
+ for provider in self:
111
+ provider.radix.defrag()
116
112
  else:
117
- log.warning(
118
- f"Failed to retrieve update from {self.json_url} (response: {response}, error: {error})"
119
- )
113
+ log.warning(f"Failed to retrieve update from {self.json_url} (response: {response}, error: {error})")
120
114
 
121
115
  async def update_from_sources(self):
122
116
  tasks = [asyncio.create_task(p.update()) for p in self]
@@ -124,9 +118,7 @@ class CloudProviders:
124
118
  j = self.to_json()
125
119
  if j:
126
120
  with open(self.json_path, "w") as f:
127
- json.dump(
128
- self.to_json(), f, sort_keys=True, indent=4, cls=CustomJSONEncoder
129
- )
121
+ json.dump(self.to_json(), f, sort_keys=True, cls=CustomJSONEncoder)
130
122
  self.load_from_json(force=True)
131
123
 
132
124
  def to_json(self):
@@ -47,11 +47,7 @@ class Amazon(BaseCloudProvider):
47
47
  "thinkboxsoftware.com",
48
48
  ]
49
49
  bucket_name_regex = r"[a-z0-9_][a-z0-9-\.]{1,61}[a-z0-9]"
50
- regexes = {
51
- "STORAGE_BUCKET": [
52
- r"(" + bucket_name_regex + r")\.(s3-?(?:[a-z0-9-]*\.){1,2}amazonaws\.com)"
53
- ]
54
- }
50
+ regexes = {"STORAGE_BUCKET": [r"(" + bucket_name_regex + r")\.(s3-?(?:[a-z0-9-]*\.){1,2}amazonaws\.com)"]}
55
51
 
56
52
  ips_url = "https://ip-ranges.amazonaws.com/ip-ranges.json"
57
53
 
@@ -144,11 +144,11 @@ class Azure(BaseCloudProvider):
144
144
  "windowsazurestatus.cn",
145
145
  ]
146
146
  bucket_name_regex = r"[a-z0-9][a-z0-9-_\.]{1,61}[a-z0-9]"
147
- regexes = {
148
- "STORAGE_BUCKET": [r"(" + bucket_name_regex + r")\.(blob\.core\.windows\.net)"]
149
- }
147
+ regexes = {"STORAGE_BUCKET": [r"(" + bucket_name_regex + r")\.(blob\.core\.windows\.net)"]}
150
148
 
151
- ips_url = "https://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_20200824.xml"
149
+ ips_url = (
150
+ "https://download.microsoft.com/download/0/1/8/018E208D-54F8-44CD-AA26-CD7BC9524A8C/PublicIPs_20200824.xml"
151
+ )
152
152
 
153
153
  def parse_response(self, response):
154
154
  ranges = set()
@@ -66,9 +66,7 @@ class BaseCloudProvider:
66
66
  self.radix = Target()
67
67
  if j is not None:
68
68
  p = CloudProviderJSON(**j)
69
- self.update_domains(
70
- [d.lower() for d in set(list(self.domains) + list(p.domains))]
71
- )
69
+ self.update_domains([d.lower() for d in set(list(self.domains) + list(p.domains))])
72
70
  self.update_ranges(p.cidrs)
73
71
  self.last_updated = p.last_updated
74
72
 
@@ -95,9 +93,7 @@ class BaseCloudProvider:
95
93
  try:
96
94
  self.ranges = self.get_subnets()
97
95
  if self.ips_url:
98
- async with httpx.AsyncClient(
99
- transport=httpx.AsyncHTTPTransport(verify=False)
100
- ) as client:
96
+ async with httpx.AsyncClient(transport=httpx.AsyncHTTPTransport(verify=False)) as client:
101
97
  response = await client.get(
102
98
  self.ips_url,
103
99
  follow_redirects=True,
@@ -12,11 +12,7 @@ class DigitalOcean(BaseCloudProvider):
12
12
  ]
13
13
 
14
14
  bucket_name_regex = r"[a-z0-9][a-z0-9-]{2,62}"
15
- regexes = {
16
- "STORAGE_BUCKET": [
17
- r"(" + bucket_name_regex + r")\.([a-z]{3}[\d]{1}\.digitaloceanspaces\.com)"
18
- ]
19
- }
15
+ regexes = {"STORAGE_BUCKET": [r"(" + bucket_name_regex + r")\.([a-z]{3}[\d]{1}\.digitaloceanspaces\.com)"]}
20
16
 
21
17
  ips_url = "https://digitalocean.com/geo/google.csv"
22
18
 
@@ -31,7 +31,7 @@ async def test_cloudcheck():
31
31
 
32
32
  google = cloud_providers.providers["google"]
33
33
  assert google.check("test.asdf.google") == "google"
34
- assert google.check("test.asdf.google.asdf") == None
34
+ assert google.check("test.asdf.google.asdf") is None
35
35
 
36
36
  assert cloud_providers.check("asdf.google") == [("Google", "cloud", "google")]
37
37
  assert cloud_providers.check("asdf.googles") == []
@@ -72,7 +72,6 @@ async def test_cloudcheck():
72
72
 
73
73
  @pytest.mark.asyncio
74
74
  async def test_cloudcheck_cli(monkeypatch, capsys):
75
-
76
75
  from cloudcheck.cloudcheck import _main
77
76
 
78
77
  monkeypatch.setattr(sys, "exit", lambda *args, **kwargs: True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudcheck
3
- Version: 6.0.0.686
3
+ Version: 7.0.7
4
4
  Summary: Check whether an IP address belongs to a cloud provider
5
5
  Home-page: https://github.com/blacklanternsecurity/cloudcheck
6
6
  License: GPL-3.0
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Requires-Dist: httpx (>=0.26,<0.29)
17
17
  Requires-Dist: pydantic (>=2.4.2,<3.0.0)
18
- Requires-Dist: radixtarget (>=2.0.0.32,<3.0.0.0)
18
+ Requires-Dist: radixtarget (>=3.0.13,<4.0.0)
19
19
  Requires-Dist: regex (>=2024.4.16,<2025.0.0)
20
20
  Project-URL: Discord, https://discord.com/invite/PZqkgxu5SA
21
21
  Project-URL: PyPi, https://pypi.org/project/cloudcheck/
@@ -1,16 +1,16 @@
1
- cloud_providers.json,sha256=9ol6YxmNWYRIqy6AT9ABz0RjsosIg8QZtrHfNMCKoRQ,952463
1
+ cloud_providers.json,sha256=OGW2klguxufiKJe4GrY-EOOsfH9LFNFP71KJL6H65e8,586419
2
2
  cloudcheck/__init__.py,sha256=FuxQNWSWrhThXVwhuaevh57mUQNtVS-KQ_HCIkfnE0M,416
3
- cloudcheck/cloudcheck.py,sha256=qgXzRXv6z62V2hfhVSnXf8ariaOMleakoxKdeAeGIPQ,924
4
- cloudcheck/helpers.py,sha256=Qn7vNh_Uw4Wpg1RWWVIkI5OILNFHQI1gYwIQYrHz9l8,605
5
- cloudcheck/providers/__init__.py,sha256=7kRphvQAu-lU9I_dsVY_DMgDNg202Zhmh487x5QsU88,5365
3
+ cloudcheck/cloudcheck.py,sha256=U9kiSiRYS6SXPDQMrFJcZDyMPvmkmgvAPLNOViVYDXw,902
4
+ cloudcheck/helpers.py,sha256=Qw_dyJQ_HF71-1j6-9X1hZu1beA8UvnVj7i4Alrgumw,604
5
+ cloudcheck/providers/__init__.py,sha256=XHPNfvK7uL-8ziGAoaL6fz-is3IY2TDuy5RYlJr-3fQ,5267
6
6
  cloudcheck/providers/akamai.py,sha256=UzuuAq_V9GwlIWMkOJ56Jfv2vdjQN0umiafAyRAW5aw,3591
7
- cloudcheck/providers/amazon.py,sha256=U-EF5LqQuownlEzAdqLZQCDxU2VsFEer54yC8zVcbl4,1703
7
+ cloudcheck/providers/amazon.py,sha256=fkDOOQLhlasXQcLywlh-VfQbcjHeNCUXBKFYFhfNfwc,1667
8
8
  cloudcheck/providers/arvancloud.py,sha256=ModvIi15JVLYiqEqIJtq89oXQ0l03MZrkLaW0Sf_1I4,479
9
- cloudcheck/providers/azure.py,sha256=TpyGhd22iAS0aCt-jH90ZdsnwDzIJ10Dog4DcCeltno,4702
10
- cloudcheck/providers/base.py,sha256=S0APy6rYr4ur1ox9x3-rB6jzFauOtlVQFWMiD_3Ag1Y,5446
9
+ cloudcheck/providers/azure.py,sha256=Sk3ZhfdFJ2PciXVKRCRUiH8ht_yNdwzXNSMIO72dw-U,4704
10
+ cloudcheck/providers/base.py,sha256=9ay5NmOi4K1OoxS1q9rqPVIMpIHRYXxzHC6CXwh9cvg,5378
11
11
  cloudcheck/providers/cloudflare.py,sha256=lsinVyEVLXcKRBCuNnhTv3I99dq5lp3sol6RJcNp63Q,1725
12
12
  cloudcheck/providers/cloudfront.py,sha256=Lk894kwiFwqi2C1tU-0pRHDMx3N7r_VVHqCJEW-Bvdg,680
13
- cloudcheck/providers/digitalocean.py,sha256=yqunC2QNlkRP6ol6pG3XJQl8fwW9baCDmNVfETj1yuM,762
13
+ cloudcheck/providers/digitalocean.py,sha256=m_uurDwkdZMSXR2pUSNwNJaJYTHmXjUGuSYSPyExhZw,726
14
14
  cloudcheck/providers/fastly.py,sha256=c3Y5cm5R0PMRXGSWDxAiij50X9Mh9ga2xrbHO6RTfKU,575
15
15
  cloudcheck/providers/github.py,sha256=iUqdoVQkQbp6lYMzajHCNKgRAIlPrvYEBbWlK6Oj5gM,600
16
16
  cloudcheck/providers/google.py,sha256=Digp6ONhLQHT3HDkTEyhHoljoygFQmUm6SW2EPMTv6s,929
@@ -19,8 +19,8 @@ cloudcheck/providers/imperva.py,sha256=3RxumRb5Ye5V_3STMWSI2JcAVtb_gijkb-y3wSe_3
19
19
  cloudcheck/providers/oracle.py,sha256=Xbi9M0dJf6jlGZuZe6vKCyGFQJNBKopQkyBnwEdjb0I,667
20
20
  cloudcheck/providers/zoho.py,sha256=4fo0unvG-oVgsKPz5Xa3viq5P5sf69VNu-v0kt1aQK4,477
21
21
  cloudcheck/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- cloudcheck/test/test_cloudcheck.py,sha256=lXIQl-uvZt2GBi-cxaIsL8CU0KVONmbaOyrnKvpY1Yk,2280
23
- cloudcheck-6.0.0.686.dist-info/METADATA,sha256=lzyRrhyNpa9lJI83BqnKMaDr3gP61Bf2h0V5mmo3NWI,2880
24
- cloudcheck-6.0.0.686.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
25
- cloudcheck-6.0.0.686.dist-info/entry_points.txt,sha256=SzYzxS8FPIBJdwNT4pQhhSostZyrQMxLqzpyuKkJxDU,57
26
- cloudcheck-6.0.0.686.dist-info/RECORD,,
22
+ cloudcheck/test/test_cloudcheck.py,sha256=BaTwFFcr4vO9U7yhCTaXJXbWE_DUpCtN_x59j_CEHwU,2279
23
+ cloudcheck-7.0.7.dist-info/METADATA,sha256=kd6PyDdBufA8eN91HDOt359J4vuYJrDxPa_xxQdsf5I,2872
24
+ cloudcheck-7.0.7.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
25
+ cloudcheck-7.0.7.dist-info/entry_points.txt,sha256=SzYzxS8FPIBJdwNT4pQhhSostZyrQMxLqzpyuKkJxDU,57
26
+ cloudcheck-7.0.7.dist-info/RECORD,,