22
33import argparse
44import os
5- from typing import Dict , List
5+ from typing import Dict , List , Optional
66
77import pandas as pd
88import requests
1616SUB_CHARACTERS = ["\\ " , "/" ]
1717
1818
19- def get_stix_data (domain : str , version : str = None , remote : str = None , stix_file : str = None ) -> MemoryStore :
19+ def get_stix_data (domain : str , version : Optional [ str ] = None , remote : Optional [ str ] = None , stix_file : Optional [ str ] = None ) -> MemoryStore :
2020 """Download the ATT&CK STIX data for the given domain and version from MITRE/CTI (or just domain if a remote workbench is specified).
2121
2222 Parameters
@@ -110,7 +110,7 @@ def build_dataframes(src: MemoryStore, domain: str) -> Dict:
110110 return df
111111
112112
113- def write_excel (dataframes : Dict , domain : str , version : str = None , output_dir : str = "." ) -> List :
113+ def write_excel (dataframes : Dict , domain : str , version : Optional [ str ] = None , output_dir : str = "." ) -> List :
114114 """Given a set of dataframes from build_dataframes, write the ATT&CK dataset to output directory.
115115
116116 Parameters
@@ -262,11 +262,11 @@ def write_excel(dataframes: Dict, domain: str, version: str = None, output_dir:
262262
263263def export (
264264 domain : str = "enterprise-attack" ,
265- version : str = None ,
265+ version : Optional [ str ] = None ,
266266 output_dir : str = "." ,
267- remote : str = None ,
268- stix_file : str = None ,
269- mem_store : MemoryStore = None ,
267+ remote : Optional [ str ] = None ,
268+ stix_file : Optional [ str ] = None ,
269+ mem_store : Optional [ MemoryStore ] = None ,
270270):
271271 """Download ATT&CK data from MITRE/CTI and convert it to Excel spreadsheets.
272272
@@ -298,6 +298,8 @@ def export(
298298 ------
299299 TypeError
300300 Raised when missing exactly one of `remote`, `stix_file`, or `mem_store`.
301+ ValueError
302+ Raised when `mem_store` fails to load.
301303 """
302304 if (
303305 (remote and stix_file and mem_store )
@@ -312,6 +314,9 @@ def export(
312314 if get_stix_from_github or remote or stix_file :
313315 mem_store = get_stix_data (domain = domain , version = version , remote = remote , stix_file = stix_file )
314316
317+ if mem_store is None :
318+ raise ValueError ("`mem_store` is empty - this should not be possible!" )
319+
315320 logger .info (f"************ Exporting { domain } to Excel ************" )
316321
317322 # build dataframes
0 commit comments