Skip to content

Commit 47e6374

Browse files
committed
fix: handle empty lists of analytics/detection strategies
1 parent a75ae8e commit 47e6374

1 file changed

Lines changed: 40 additions & 30 deletions

File tree

mitreattack/attackToExcel/stixToDf.py

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -342,16 +342,21 @@ def analyticsToDf(src):
342342
analytics = src.query([Filter("type", "=", "x-mitre-analytic")])
343343
analytics = remove_revoked_deprecated(analytics)
344344

345-
analytic_rows = []
346-
for analytic in tqdm(analytics, desc="parsing analytics"):
347-
analytic_rows.append(parseBaseStix(analytic))
345+
dataframes = {}
346+
if analytics:
347+
analytic_rows = []
348+
for analytic in tqdm(analytics, desc="parsing analytics"):
349+
analytic_rows.append(parseBaseStix(analytic))
348350

349-
citations = get_citations(analytics)
350-
dataframes = {
351-
"analytics": pd.DataFrame(analytic_rows).sort_values("name"),
352-
}
353-
if not citations.empty:
354-
dataframes["citations"] = citations.sort_values("reference")
351+
citations = get_citations(analytics)
352+
dataframes = {
353+
"analytics": pd.DataFrame(analytic_rows).sort_values("name"),
354+
}
355+
if not citations.empty:
356+
dataframes["citations"] = citations.sort_values("reference")
357+
358+
else:
359+
logger.warning("No analytics found - nothing to parse")
355360

356361
return dataframes
357362

@@ -365,30 +370,35 @@ def detectionstrategiesToDf(src):
365370
detection_strategies = src.query([Filter("type", "=", "x-mitre-detection-strategy")])
366371
detection_strategies = remove_revoked_deprecated(detection_strategies)
367372

368-
detection_strategy_rows = []
369-
for detection_strategy in tqdm(detection_strategies, desc="parsing detection strategies"):
370-
detection_strategy_rows.append(parseBaseStix(detection_strategy))
373+
dataframes = {}
374+
if detection_strategies:
375+
detection_strategy_rows = []
376+
for detection_strategy in tqdm(detection_strategies, desc="parsing detection strategies"):
377+
detection_strategy_rows.append(parseBaseStix(detection_strategy))
371378

372-
citations = get_citations(detection_strategies)
373-
dataframes = {
374-
"detectionstrategies": pd.DataFrame(detection_strategy_rows).sort_values("name"),
375-
}
379+
citations = get_citations(detection_strategies)
380+
dataframes = {
381+
"detectionstrategies": pd.DataFrame(detection_strategy_rows).sort_values("name"),
382+
}
376383

377-
# add relationships
378-
codex = relationshipsToDf(src, relatedType="detectionstrategy")
379-
dataframes.update(codex)
380-
# add relationship references
381-
dataframes["detectionstrategies"]["relationship citations"] = _get_relationship_citations(
382-
dataframes["detectionstrategies"], codex
383-
)
384-
# add/merge citations
385-
if not citations.empty:
386-
if "citations" in dataframes: # append to existing citations from references
387-
dataframes["citations"] = pd.concat([dataframes["citations"], citations])
388-
else: # add citations
389-
dataframes["citations"] = citations
384+
# add relationships
385+
codex = relationshipsToDf(src, relatedType="detectionstrategy")
386+
dataframes.update(codex)
387+
# add relationship references
388+
dataframes["detectionstrategies"]["relationship citations"] = _get_relationship_citations(
389+
dataframes["detectionstrategies"], codex
390+
)
391+
# add/merge citations
392+
if not citations.empty:
393+
if "citations" in dataframes: # append to existing citations from references
394+
dataframes["citations"] = pd.concat([dataframes["citations"], citations])
395+
else: # add citations
396+
dataframes["citations"] = citations
390397

391-
dataframes["citations"].sort_values("reference")
398+
dataframes["citations"].sort_values("reference")
399+
400+
else:
401+
logger.warning("No detection strategies found - nothing to parse")
392402

393403
return dataframes
394404

0 commit comments

Comments
 (0)