cartography 0.101.0rc2__py3-none-any.whl → 0.101.1rc1__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 cartography might be problematic. Click here for more details.

cartography/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.101.0rc2'
21
- __version_tuple__ = version_tuple = (0, 101, 0)
20
+ __version__ = version = '0.101.1rc1'
21
+ __version_tuple__ = version_tuple = (0, 101, 1)
@@ -2,6 +2,7 @@ import logging
2
2
  from typing import Any
3
3
 
4
4
  import boto3
5
+ import botocore
5
6
  import neo4j
6
7
 
7
8
  from .util import get_botocore_config
@@ -56,8 +57,15 @@ def get_launch_template_versions_by_template(
56
57
  client = boto3_session.client('ec2', region_name=region, config=get_botocore_config())
57
58
  v_paginator = client.get_paginator('describe_launch_template_versions')
58
59
  template_versions = []
59
- for versions in v_paginator.paginate(LaunchTemplateId=launch_template_id):
60
- template_versions.extend(versions['LaunchTemplateVersions'])
60
+ try:
61
+ for versions in v_paginator.paginate(LaunchTemplateId=launch_template_id):
62
+ template_versions.extend(versions['LaunchTemplateVersions'])
63
+ except botocore.exceptions.ClientError as e:
64
+ error_code = e.response['Error']['Code']
65
+ if error_code == 'InvalidLaunchTemplateId.NotFound':
66
+ logger.warning("Launch template %s no longer exists in region %s", launch_template_id, region)
67
+ else:
68
+ raise
61
69
  return template_versions
62
70
 
63
71
 
@@ -34,8 +34,8 @@ def load_host_data(
34
34
  UNWIND $Hosts AS host
35
35
  MERGE (h:CrowdstrikeHost{id: host.device_id})
36
36
  ON CREATE SET h.cid = host.cid,
37
- h.cid = host.cid,
38
37
  h.instance_id = host.instance_id,
38
+ h.serial_number = host.serial_number,
39
39
  h.firstseen = timestamp()
40
40
  SET h.status = host.status,
41
41
  h.hostname = host.hostname,
@@ -3,6 +3,7 @@ import logging
3
3
  from collections import namedtuple
4
4
  from typing import Dict
5
5
  from typing import List
6
+ from typing import Optional
6
7
  from typing import Set
7
8
 
8
9
  import googleapiclient.discovery
@@ -328,7 +329,7 @@ def _sync_multiple_projects(
328
329
 
329
330
 
330
331
  @timeit
331
- def get_gcp_credentials() -> GoogleCredentials:
332
+ def get_gcp_credentials() -> Optional[GoogleCredentials]:
332
333
  """
333
334
  Gets access tokens for GCP API access.
334
335
  :param: None
@@ -338,6 +339,7 @@ def get_gcp_credentials() -> GoogleCredentials:
338
339
  # Explicitly use Application Default Credentials.
339
340
  # See https://google-auth.readthedocs.io/en/master/user-guide.html#application-default-credentials
340
341
  credentials, project_id = default()
342
+ return credentials
341
343
  except DefaultCredentialsError as e:
342
344
  logger.debug("Error occurred calling GoogleCredentials.get_application_default().", exc_info=True)
343
345
  logger.error(
@@ -349,7 +351,7 @@ def get_gcp_credentials() -> GoogleCredentials:
349
351
  ),
350
352
  e,
351
353
  )
352
- return credentials
354
+ return None
353
355
 
354
356
 
355
357
  @timeit
@@ -367,6 +369,9 @@ def start_gcp_ingestion(neo4j_session: neo4j.Session, config: Config) -> None:
367
369
  }
368
370
 
369
371
  credentials = get_gcp_credentials()
372
+ if credentials is None:
373
+ logger.warning("Unable to initialize GCP credentials. Skipping module.")
374
+ return
370
375
 
371
376
  resources = _initialize_resources(credentials)
372
377
 
@@ -67,6 +67,14 @@ def start_gsuite_ingestion(neo4j_session: neo4j.Session, config: Config) -> None
67
67
 
68
68
  creds: OAuth2Credentials | ServiceAccountCredentials
69
69
  if config.gsuite_auth_method == 'delegated': # Legacy delegated method
70
+ if config.gsuite_config is None or not os.path.isfile(config.gsuite_config):
71
+ logger.warning(
72
+ (
73
+ "The GSuite config file is not set or is not a valid file."
74
+ "Skipping GSuite ingestion."
75
+ ),
76
+ )
77
+ return
70
78
  logger.info('Attempting to authenticate to GSuite using legacy delegated method')
71
79
  try:
72
80
  creds = service_account.Credentials.from_service_account_file(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cartography
3
- Version: 0.101.0rc2
3
+ Version: 0.101.1rc1
4
4
  Summary: Explore assets and their relationships across your technical infrastructure.
5
5
  Maintainer: Cartography Contributors
6
6
  License: apache2
@@ -59,10 +59,10 @@ Requires-Dist: moto; extra == "dev"
59
59
  Requires-Dist: pre-commit; extra == "dev"
60
60
  Requires-Dist: pytest>=6.2.4; extra == "dev"
61
61
  Requires-Dist: pytest-mock; extra == "dev"
62
- Requires-Dist: pytest-cov==6.0.0; extra == "dev"
62
+ Requires-Dist: pytest-cov==6.1.1; extra == "dev"
63
63
  Requires-Dist: pytest-rerunfailures; extra == "dev"
64
64
  Requires-Dist: types-PyYAML; extra == "dev"
65
- Requires-Dist: types-requests<2.32.0.20250307; extra == "dev"
65
+ Requires-Dist: types-requests<2.32.0.20250329; extra == "dev"
66
66
  Dynamic: license-file
67
67
 
68
68
  ![Cartography](docs/root/images/logo-horizontal.png)
@@ -182,6 +182,7 @@ Get started with our [developer documentation](https://cartography-cncf.github.i
182
182
  1. [MessageBird](https://messagebird.com)
183
183
  1. [Cloudanix](https://www.cloudanix.com/)
184
184
  1. [Corelight](https://www.corelight.com/)
185
+ 1. [SubImage](https://subimage.io)
185
186
  1. {Your company here} :-)
186
187
 
187
188
  If your organization uses Cartography, please file a PR and update this list. Say hi on Slack too!
@@ -1,6 +1,6 @@
1
1
  cartography/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  cartography/__main__.py,sha256=JftXT_nUPkqcEh8uxCCT4n-OyHYqbldEgrDS-4ygy0U,101
3
- cartography/_version.py,sha256=IBK6fMF_VPqJpOaJyK9R7AWPwDA7KRC-K8f8sNJSVFk,518
3
+ cartography/_version.py,sha256=8kfUZC7PNnC8p044X5JGd8fihSWqOPBbU8RxewCFS2g,518
4
4
  cartography/cli.py,sha256=-77DOKUQn3N-TDIi55V4RHLb3k36ZGZ64o1XgiT0qmE,33370
5
5
  cartography/config.py,sha256=ZcadsKmooAkti9Kv0eDl8Ec1PcZDu3lWobtNaCnwY3k,11872
6
6
  cartography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -174,7 +174,7 @@ cartography/intel/aws/ec2/images.py,sha256=SLoxcy_PQgNomVMDMdutm0zXJCOLosiHJlN63
174
174
  cartography/intel/aws/ec2/instances.py,sha256=uI8eVJmeEybS8y_T8CVKAkwxJyVDCH7sbuEJYeWGSWY,12468
175
175
  cartography/intel/aws/ec2/internet_gateways.py,sha256=dI-4-85_3DGGZZBcY_DN6XqESx9P26S6jKok314lcnQ,2883
176
176
  cartography/intel/aws/ec2/key_pairs.py,sha256=g4imIo_5jk8upq9J4--erg-OZXG2i3cJMe6SnNCYj9s,2635
177
- cartography/intel/aws/ec2/launch_templates.py,sha256=uw0_knQW0DGFgD4BUyaxYW0RpWyA_oXcDe-oT6MEaps,5902
177
+ cartography/intel/aws/ec2/launch_templates.py,sha256=nHpX-JobVzIHngJ-BBeKwp8wryBjPcJnUX_VJhIU5hE,6233
178
178
  cartography/intel/aws/ec2/load_balancer_v2s.py,sha256=95FfQQn740gexINIHDJizOM4OKzRtQT_y2XQMipQ5Dg,8661
179
179
  cartography/intel/aws/ec2/load_balancers.py,sha256=1GwErzGqi3BKCARqfGJcD_r_D84rFKVy5kNMas9jAok,6756
180
180
  cartography/intel/aws/ec2/network_acls.py,sha256=_UiOx79OxcqH0ecRjcVMglAzz5XJ4aVYLlv6dl_ism4,6809
@@ -203,7 +203,7 @@ cartography/intel/azure/util/credentials.py,sha256=99PjTs0vZ2iu0tHD7TohN1VJYjuXY
203
203
  cartography/intel/bigfix/__init__.py,sha256=3LoDCm01VNNaDRGsRiykJm1GJgUQ8zI1HO6NodLFVIA,1058
204
204
  cartography/intel/bigfix/computers.py,sha256=HAwA-muDBLu2xkFFL2Ae-xjCH1gxKKwxGMZM4BE_Qdo,5909
205
205
  cartography/intel/crowdstrike/__init__.py,sha256=dAtgI-0vZAQZ3cTFQhMEzzt7aqiNSNuiIYiw0qbut-I,1896
206
- cartography/intel/crowdstrike/endpoints.py,sha256=tdqokMDW3p4fK3dHKKb2T1DTogvOJBCpwyrxdQlbUhw,3815
206
+ cartography/intel/crowdstrike/endpoints.py,sha256=1Sn8jC5YARKbec-idUZniqCTLldde5ymwpBzSeGZVoM,3835
207
207
  cartography/intel/crowdstrike/spotlight.py,sha256=yNhj44-RYF6ubck-hHMKhKiNU0fCfhQf4Oagopc31EM,4754
208
208
  cartography/intel/crowdstrike/util.py,sha256=gfJ6Ptr6YdbBS9Qj9a_-Jc-IJroADDRcXqjh5TW0qXE,277
209
209
  cartography/intel/cve/__init__.py,sha256=u9mv5O_qkSLmdhLhLm1qbwmhoeLQ3A3fQTjNyLQpEyI,3656
@@ -220,7 +220,7 @@ cartography/intel/duo/phones.py,sha256=ueJheqSLD2xYcMus5eOiixPYS3_xVjgQzeomjV2a6
220
220
  cartography/intel/duo/tokens.py,sha256=bEEnjfc4waQnkRHVSnZLAeGE8wHOOZL7FA9m80GGQdQ,2396
221
221
  cartography/intel/duo/users.py,sha256=lc7ly_XKeUjJ50szw31WT_GiCrZfGKJv1zVUpmTchh4,4097
222
222
  cartography/intel/duo/web_authn_credentials.py,sha256=IbDf3CWqfEyI7f9zJugUvoDd6vZOECfb_7ANZaRYzuk,2636
223
- cartography/intel/gcp/__init__.py,sha256=iJPcmkXjMITBf2h9CFJ5-vpLMNRzReoKIazNihRPrNA,17472
223
+ cartography/intel/gcp/__init__.py,sha256=sZHPfDCPZFCE5d6aj20Ow4AC0vrFxV7RCn_cMinCDmI,17650
224
224
  cartography/intel/gcp/compute.py,sha256=CH2cBdOwbLZCAbkfRJkkI-sFybXVKRWEUGDJANQmvyA,48333
225
225
  cartography/intel/gcp/crm.py,sha256=Uw5PILhVFhpM8gq7uu2v7F_YikDW3gsTZ3d7-e8Z1_k,12324
226
226
  cartography/intel/gcp/dns.py,sha256=y2pvbmV04cnrMyuu_nbW3oc7uwHX6yEzn1n7veCsjmk,7748
@@ -232,7 +232,7 @@ cartography/intel/github/repos.py,sha256=MmpxZASDJFQxDeSMxX3pZcpxCHFPos4_uYC_cX9
232
232
  cartography/intel/github/teams.py,sha256=AltQSmBHHmyzBtnRkez9Bo5yChEKBSt3wwzhGcfqmX4,14180
233
233
  cartography/intel/github/users.py,sha256=MCLE0V0UCzQm3k3KmrNe6PYkI6usRQZYy2rCN3mT8o0,8948
234
234
  cartography/intel/github/util.py,sha256=K0cXOPuhnGvN-aqcSUBO3vTuKQLjufVal9kn2HwOpbo,8110
235
- cartography/intel/gsuite/__init__.py,sha256=R3hMZkaRQKHIPcvNpupwJuj7w1RuBrT4skGQASqxyOk,5412
235
+ cartography/intel/gsuite/__init__.py,sha256=S8LxQxQ6CP7g2U5x-XnJFz17OmAgvGdzyhA-CZqg-_g,5724
236
236
  cartography/intel/gsuite/api.py,sha256=bx0mPn6x6fgssxgm343NHdwjbtFkO6SZTucOsoW0Hgk,11143
237
237
  cartography/intel/jamf/__init__.py,sha256=Nof-LrUeevoieo6oP2GyfTwx8k5TUIgreW6hSj53YjQ,419
238
238
  cartography/intel/jamf/computers.py,sha256=EfjlupQ-9HYTjOrmuwrGuJDy9ApAnJvk8WrYcp6_Jkk,1673
@@ -360,9 +360,9 @@ cartography/models/snipeit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
360
360
  cartography/models/snipeit/asset.py,sha256=FyRAaeXuZjMy0eUQcSDFcgEAF5lbLMlvqp1Tv9d3Lv4,3238
361
361
  cartography/models/snipeit/tenant.py,sha256=p4rFnpNNuF1W5ilGBbexDaETWTwavfb38RcQGoImkQI,679
362
362
  cartography/models/snipeit/user.py,sha256=MsB4MiCVNTH6JpESime7cOkB89autZOXQpL6Z0l7L6o,2113
363
- cartography-0.101.0rc2.dist-info/licenses/LICENSE,sha256=kvLEBRYaQ1RvUni6y7Ti9uHeooqnjPoo6n_-0JO1ETc,11351
364
- cartography-0.101.0rc2.dist-info/METADATA,sha256=Hw5knSxZNezo5gXVd5_2dMrhDDP0Vki78Nb48XgQHW0,11874
365
- cartography-0.101.0rc2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
366
- cartography-0.101.0rc2.dist-info/entry_points.txt,sha256=GVIAWD0o0_K077qMA_k1oZU4v-M0a8GLKGJR8tZ-qH8,112
367
- cartography-0.101.0rc2.dist-info/top_level.txt,sha256=BHqsNJQiI6Q72DeypC1IINQJE59SLhU4nllbQjgJi9g,12
368
- cartography-0.101.0rc2.dist-info/RECORD,,
363
+ cartography-0.101.1rc1.dist-info/licenses/LICENSE,sha256=kvLEBRYaQ1RvUni6y7Ti9uHeooqnjPoo6n_-0JO1ETc,11351
364
+ cartography-0.101.1rc1.dist-info/METADATA,sha256=UxWV1DHIXB3ZSFQDE9bmM_21i4gh-3wkYnXgNJlBiG0,11909
365
+ cartography-0.101.1rc1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
366
+ cartography-0.101.1rc1.dist-info/entry_points.txt,sha256=GVIAWD0o0_K077qMA_k1oZU4v-M0a8GLKGJR8tZ-qH8,112
367
+ cartography-0.101.1rc1.dist-info/top_level.txt,sha256=BHqsNJQiI6Q72DeypC1IINQJE59SLhU4nllbQjgJi9g,12
368
+ cartography-0.101.1rc1.dist-info/RECORD,,