15
15
16
16
from contentctl .objects .config import build
17
17
18
+
18
19
@dataclass (frozen = True )
19
20
class BuildInputDto :
20
21
director_output_dto : DirectorOutputDto
21
- config :build
22
+ config : build
22
23
23
24
24
25
class Build :
25
-
26
-
27
-
28
26
def execute (self , input_dto : BuildInputDto ) -> DirectorOutputDto :
29
27
if input_dto .config .build_app :
30
-
31
- updated_conf_files :set [pathlib .Path ] = set ()
28
+ updated_conf_files : set [pathlib .Path ] = set ()
32
29
conf_output = ConfOutput (input_dto .config )
33
30
34
-
35
31
# Construct a path to a YML that does not actually exist.
36
32
# We mock this "fake" path since the YML does not exist.
37
33
# This ensures the checking for the existence of the CSV is correct
38
- data_sources_fake_yml_path = input_dto .config .getPackageDirectoryPath () / "lookups" / "data_sources.yml"
34
+ data_sources_fake_yml_path = (
35
+ input_dto .config .getPackageDirectoryPath ()
36
+ / "lookups"
37
+ / "data_sources.yml"
38
+ )
39
39
40
40
# Construct a special lookup whose CSV is created at runtime and
41
- # written directly into the lookups folder. We will delete this after a build,
41
+ # written directly into the lookups folder. We will delete this after a build,
42
42
# assuming that it is successful.
43
- data_sources_lookup_csv_path = input_dto .config .getPackageDirectoryPath () / "lookups" / "data_sources.csv"
44
-
45
-
46
-
47
- DataSourceWriter .writeDataSourceCsv (input_dto .director_output_dto .data_sources , data_sources_lookup_csv_path )
48
- input_dto .director_output_dto .addContentToDictMappings (CSVLookup .model_construct (name = "data_sources" ,
49
- id = uuid .UUID ("b45c1403-6e09-47b0-824f-cf6e44f15ac8" ),
50
- version = 1 ,
51
- author = input_dto .config .app .author_name ,
52
- date = datetime .date .today (),
53
- description = "A lookup file that will contain the data source objects for detections." ,
54
- lookup_type = Lookup_Type .csv ,
55
- file_path = data_sources_fake_yml_path ))
43
+ data_sources_lookup_csv_path = (
44
+ input_dto .config .getPackageDirectoryPath ()
45
+ / "lookups"
46
+ / "data_sources.csv"
47
+ )
48
+
49
+ DataSourceWriter .writeDataSourceCsv (
50
+ input_dto .director_output_dto .data_sources , data_sources_lookup_csv_path
51
+ )
52
+ input_dto .director_output_dto .addContentToDictMappings (
53
+ CSVLookup .model_construct (
54
+ name = "data_sources" ,
55
+ id = uuid .UUID ("b45c1403-6e09-47b0-824f-cf6e44f15ac8" ),
56
+ version = 1 ,
57
+ author = input_dto .config .app .author_name ,
58
+ date = datetime .date .today (),
59
+ description = "A lookup file that will contain the data source objects for detections." ,
60
+ lookup_type = Lookup_Type .csv ,
61
+ file_path = data_sources_fake_yml_path ,
62
+ )
63
+ )
56
64
updated_conf_files .update (conf_output .writeHeaders ())
57
- updated_conf_files .update (conf_output .writeLookups (input_dto .director_output_dto .lookups ))
58
- updated_conf_files .update (conf_output .writeDetections (input_dto .director_output_dto .detections ))
59
- updated_conf_files .update (conf_output .writeStories (input_dto .director_output_dto .stories ))
60
- updated_conf_files .update (conf_output .writeBaselines (input_dto .director_output_dto .baselines ))
61
- updated_conf_files .update (conf_output .writeInvestigations (input_dto .director_output_dto .investigations ))
62
- updated_conf_files .update (conf_output .writeMacros (input_dto .director_output_dto .macros ))
63
- updated_conf_files .update (conf_output .writeDashboards (input_dto .director_output_dto .dashboards ))
65
+ updated_conf_files .update (
66
+ conf_output .writeLookups (input_dto .director_output_dto .lookups )
67
+ )
68
+ updated_conf_files .update (
69
+ conf_output .writeDetections (input_dto .director_output_dto .detections )
70
+ )
71
+ updated_conf_files .update (
72
+ conf_output .writeStories (input_dto .director_output_dto .stories )
73
+ )
74
+ updated_conf_files .update (
75
+ conf_output .writeBaselines (input_dto .director_output_dto .baselines )
76
+ )
77
+ updated_conf_files .update (
78
+ conf_output .writeInvestigations (
79
+ input_dto .director_output_dto .investigations
80
+ )
81
+ )
82
+ updated_conf_files .update (
83
+ conf_output .writeMacros (input_dto .director_output_dto .macros )
84
+ )
85
+ updated_conf_files .update (
86
+ conf_output .writeDashboards (input_dto .director_output_dto .dashboards )
87
+ )
64
88
updated_conf_files .update (conf_output .writeMiscellaneousAppFiles ())
65
-
66
89
67
-
68
-
69
- #Ensure that the conf file we just generated/update is syntactically valid
90
+ # Ensure that the conf file we just generated/update is syntactically valid
70
91
for conf_file in updated_conf_files :
71
- ConfWriter .validateConfFile (conf_file )
72
-
92
+ ConfWriter .validateConfFile (conf_file )
93
+
73
94
conf_output .packageApp ()
74
95
75
- print (f"Build of '{ input_dto .config .app .title } ' APP successful to { input_dto .config .getPackageFilePath ()} " )
76
-
96
+ print (
97
+ f"Build of '{ input_dto .config .app .title } ' APP successful to { input_dto .config .getPackageFilePath ()} "
98
+ )
77
99
78
- if input_dto .config .build_api :
100
+ if input_dto .config .build_api :
79
101
shutil .rmtree (input_dto .config .getAPIPath (), ignore_errors = True )
80
102
input_dto .config .getAPIPath ().mkdir (parents = True )
81
- api_json_output = ApiJsonOutput (input_dto .config .getAPIPath (), input_dto .config .app .label )
103
+ api_json_output = ApiJsonOutput (
104
+ input_dto .config .getAPIPath (), input_dto .config .app .label
105
+ )
82
106
api_json_output .writeDetections (input_dto .director_output_dto .detections )
83
107
api_json_output .writeStories (input_dto .director_output_dto .stories )
84
108
api_json_output .writeBaselines (input_dto .director_output_dto .baselines )
85
- api_json_output .writeInvestigations (input_dto .director_output_dto .investigations )
109
+ api_json_output .writeInvestigations (
110
+ input_dto .director_output_dto .investigations
111
+ )
86
112
api_json_output .writeLookups (input_dto .director_output_dto .lookups )
87
113
api_json_output .writeMacros (input_dto .director_output_dto .macros )
88
114
api_json_output .writeDeployments (input_dto .director_output_dto .deployments )
89
115
90
-
91
- #create version file for sse api
92
- version_file = input_dto .config .getAPIPath ()/ "version.json"
93
- utc_time = datetime .datetime .now (datetime .timezone .utc ).replace (microsecond = 0 ,tzinfo = None ).isoformat ()
94
- version_dict = {"version" :{"name" :f"v{ input_dto .config .app .version } " ,"published_at" : f"{ utc_time } Z" }}
95
- with open (version_file ,"w" ) as version_f :
96
- json .dump (version_dict ,version_f )
97
-
98
- print (f"Build of '{ input_dto .config .app .title } ' API successful to { input_dto .config .getAPIPath ()} " )
99
-
100
- return input_dto .director_output_dto
116
+ # create version file for sse api
117
+ version_file = input_dto .config .getAPIPath () / "version.json"
118
+ utc_time = (
119
+ datetime .datetime .now (datetime .timezone .utc )
120
+ .replace (microsecond = 0 , tzinfo = None )
121
+ .isoformat ()
122
+ )
123
+ version_dict = {
124
+ "version" : {
125
+ "name" : f"v{ input_dto .config .app .version } " ,
126
+ "published_at" : f"{ utc_time } Z" ,
127
+ }
128
+ }
129
+ with open (version_file , "w" ) as version_f :
130
+ json .dump (version_dict , version_f )
131
+
132
+ print (
133
+ f"Build of '{ input_dto .config .app .title } ' API successful to { input_dto .config .getAPIPath ()} "
134
+ )
135
+
136
+ return input_dto .director_output_dto
0 commit comments