| 
									
										
										
										
											2023-11-16 12:13:46 -08:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | import click | 
					
						
							|  |  |  | from azure.storage.blob import ContainerClient | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @click.group(name="azure-ingest") | 
					
						
							|  |  |  | def cli(): | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @cli.command() | 
					
						
							|  |  |  | @click.option("--connection-string", type=str, required=True) | 
					
						
							|  |  |  | @click.option("--container", type=str, required=True) | 
					
						
							|  |  |  | @click.option("--blob-path", type=str, required=True) | 
					
						
							|  |  |  | def down(connection_string: str, container: str, blob_path: str): | 
					
						
							|  |  |  |     container_client = ContainerClient.from_connection_string( | 
					
						
							|  |  |  |         conn_str=connection_string, container_name=container | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     blob_list = [b.name for b in list(container_client.list_blobs(name_starts_with=blob_path))] | 
					
						
							|  |  |  |     print(f"deleting all content from {container}/{blob_path}") | 
					
						
							|  |  |  |     # Delete all content in folder first | 
					
						
							|  |  |  |     container_client.delete_blobs(*[b for b in blob_list if b != blob_path]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Delete folder itself | 
					
						
							|  |  |  |     container_client.delete_blob(blob_path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @cli.command() | 
					
						
							|  |  |  | @click.option("--connection-string", type=str, required=True) | 
					
						
							|  |  |  | @click.option("--container", type=str, required=True) | 
					
						
							|  |  |  | @click.option("--blob-path", type=str, required=True) | 
					
						
							|  |  |  | @click.option("--expected-files", type=int, required=True) | 
					
						
							|  |  |  | def check(connection_string: str, container: str, blob_path: str, expected_files: int): | 
					
						
							|  |  |  |     container_client = ContainerClient.from_connection_string( | 
					
						
							|  |  |  |         conn_str=connection_string, container_name=container | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     blob_json_list = [ | 
					
						
							|  |  |  |         b.name | 
					
						
							| 
									
										
										
										
											2023-12-05 11:42:23 -05:00
										 |  |  |         for b in list(container_client.list_blobs(name_starts_with=blob_path)) | 
					
						
							| 
									
										
										
										
											2023-11-16 12:13:46 -08:00
										 |  |  |         if b.name.endswith("json") | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     found = len(blob_json_list) | 
					
						
							|  |  |  |     print( | 
					
						
							|  |  |  |         f"Checking that the number of files found ({found}) " | 
					
						
							|  |  |  |         f"matches what's expected: {expected_files}" | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     assert ( | 
					
						
							|  |  |  |         found == expected_files | 
					
						
							|  |  |  |     ), f"number of files found ({found}) doesn't match what's expected: {expected_files}" | 
					
						
							|  |  |  |     print("successfully checked the number of files!") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     cli() |