| 
									
										
										
										
											2025-02-17 11:05:21 -05:00
										 |  |  | #! /usr/bin/env python3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import argparse | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-22 13:53:54 -05:00
										 |  |  | from xmet.db    import Database | 
					
						
							|  |  |  | from xmet.storm import StormEvent | 
					
						
							| 
									
										
										
										
											2025-02-17 11:05:21 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | parser = argparse.ArgumentParser( | 
					
						
							|  |  |  |     description = 'Ingest events from StormEvent_details_*.csv.gz files' | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | parser.add_argument('--quiet',   action='store_true', help='Suppress output') | 
					
						
							|  |  |  | parser.add_argument('--dry-run', action='store_true', help='Do not actually ingest events') | 
					
						
							| 
									
										
										
										
											2025-02-22 13:53:54 -05:00
										 |  |  | parser.add_argument('db',                             help='XMET SQLite3 database') | 
					
						
							| 
									
										
										
										
											2025-02-17 11:05:21 -05:00
										 |  |  | parser.add_argument('csv-event-details', nargs='+',   help='Compressed storm event details CSV file') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | args = parser.parse_args() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | db = Database.connect(args.db) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if not args.dry_run: | 
					
						
							|  |  |  |     db.execute('begin transaction') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for path in getattr(args, 'csv-event-details'): | 
					
						
							|  |  |  |     for event in StormEvent.each_from_csv_file(path): | 
					
						
							|  |  |  |         if not args.dry_run: | 
					
						
							|  |  |  |             db.add(event) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not args.quiet: | 
					
						
							|  |  |  |         print(f"Finished ingesting file {path}") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if not args.dry_run: | 
					
						
							|  |  |  |     db.commit() |