akhilhsingh commited on
Commit
221451e
·
verified ·
1 Parent(s): 142c7d3

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -0
app.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import boto3
3
+ from botocore.exceptions import NoCredentialsError, ClientError, EndpointConnectionError
4
+ from collections import defaultdict
5
+ from datetime import datetime
6
+
7
+ # AWS S3 setup
8
+ os.environ['AWS_ACCESS_KEY']
9
+ os.environ['AWS_SECRET_KEY']
10
+ os.environ['BUCKET_NAME']
11
+
12
+ # Initialize a session using DigitalOcean Spaces
13
+ session = boto3.session.Session()
14
+ s3 = session.client('s3',
15
+ region_name='us-west-2', # Update to the correct region
16
+ aws_access_key_id=AWS_ACCESS_KEY,
17
+ aws_secret_access_key=AWS_SECRET_KEY)
18
+
19
+ def list_folders(bucket_name):
20
+ try:
21
+ folders = []
22
+ result = s3.list_objects_v2(Bucket=bucket_name, Delimiter='/')
23
+ for o in result.get('CommonPrefixes', []):
24
+ folders.append(o.get('Prefix'))
25
+ return folders
26
+ except NoCredentialsError:
27
+ st.error("Credentials not available")
28
+ return []
29
+ except ClientError as e:
30
+ st.error(f"Client error: {e}")
31
+ return []
32
+ except EndpointConnectionError as e:
33
+ st.error(f"Endpoint connection error: {e}")
34
+ return []
35
+
36
+ def count_files_in_folder(bucket_name, prefix):
37
+ try:
38
+ folder_counts = defaultdict(lambda: defaultdict(int))
39
+ paginator = s3.get_paginator('list_objects_v2')
40
+ pages = paginator.paginate(Bucket=bucket_name, Prefix=prefix)
41
+ for page in pages:
42
+ for obj in page.get('Contents', []):
43
+ folder = '/'.join(obj['Key'].split('/')[:-1])
44
+ last_modified = obj['LastModified'].strftime('%Y-%m-%d')
45
+ folder_counts[folder][last_modified] += 1
46
+ return folder_counts
47
+ except NoCredentialsError:
48
+ st.error("Credentials not available")
49
+ return {}
50
+ except ClientError as e:
51
+ st.error(f"Client error: {e}")
52
+ return {}
53
+ except EndpointConnectionError as e:
54
+ st.error(f"Endpoint connection error: {e}")
55
+ return {}
56
+
57
+ # Streamlit UI
58
+ st.title('NeuroSinQ IAT Completions Dashboard')
59
+
60
+ # Dropdown to select folder
61
+ folders = list_folders(BUCKET_NAME)
62
+ #selected_folder = st.selectbox('Select a folder', folders)
63
+ selected_folder = st.selectbox('Select a folder', folders, disabled=True, index=folders.index('JUNIPER/') if 'JUNIPER/' in folders else 0)
64
+ # Display file counts
65
+ if selected_folder:
66
+ folder_counts = count_files_in_folder(BUCKET_NAME, selected_folder)
67
+
68
+ if folder_counts:
69
+ # Collect all dates
70
+ all_dates = sorted(set(date for counts in folder_counts.values() for date in counts))
71
+
72
+ # Prepare data for display
73
+ data = []
74
+ for folder, counts in folder_counts.items():
75
+ row = {'Folder': folder}
76
+ for date in all_dates:
77
+ row[date] = counts.get(date, 0)
78
+ data.append(row)
79
+
80
+ st.write("File counts by folder and last modified date:")
81
+ st.table(data)