Skip to content

Commit 5b64c0b

Browse files
committed
update env variables
1 parent be9d4df commit 5b64c0b

File tree

1 file changed

+36
-41
lines changed

1 file changed

+36
-41
lines changed

app/db/crud.py

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1+
import os
2+
import json
3+
import gspread
14
from typing import Optional
25
from app.schemas.submission import SubmissionOut
3-
from sqlalchemy.orm import Session,joinedload
6+
from sqlalchemy.orm import Session
47
from app.db import models
58
from datetime import datetime, date, timedelta
69
from sqlalchemy import func
710
from app.db.db import SessionLocal
8-
import gspread
9-
from oauth2client.service_account import ServiceAccountCredentials
10-
import os
1111

12-
SCOPE = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
13-
CREDS_FILE = "credentials.json"
12+
def _get_gspread_client():
13+
creds_json_str = os.getenv("GOOGLE_CREDENTIALS_JSON")
14+
if not creds_json_str:
15+
raise ValueError("GOOGLE_CREDENTIALS_JSON environment variable is not set.")
16+
17+
creds_info = json.loads(creds_json_str)
18+
client = gspread.service_account_from_dict(creds_info)
19+
return client
1420

1521
def get_user_by_email(db: Session, email: str):
1622
return db.query(models.User).filter(models.User.email == email).first()
@@ -21,20 +27,17 @@ def get_task(db: Session, track_id: int, task_no: int):
2127
def submit_task(db: Session, mentee_id: int, task_id: int, reference_link: str, start_date: date, commit_hash: str):
2228
existing = db.query(models.Submission).filter_by(mentee_id=mentee_id, task_id=task_id).first()
2329
if existing:
24-
return None # Already submitted
30+
return None
2531

2632
mentee = db.query(models.User).filter(models.User.id == mentee_id).first()
27-
2833
task = db.query(models.Task).filter(models.Task.id == task_id).first()
2934
if not task:
3035
raise Exception("Task not found")
3136

32-
# convert start_date into a datetime object
3337
start_date = datetime.combine(start_date, datetime.min.time())
3438
deadline = start_date + timedelta(days=task.deadline_days)
3539
submitted_at = datetime.now()
3640

37-
# Check if the submission is late
3841
if deadline >= submitted_at:
3942
submitted_late = False
4043
elif deadline + timedelta(hours=12) >= submitted_at:
@@ -52,35 +55,29 @@ def submit_task(db: Session, mentee_id: int, task_id: int, reference_link: str,
5255
status="submitted",
5356
start_date=start_date,
5457
submitted_late=submitted_late,
55-
commit_hash = commit_hash
58+
commit_hash=commit_hash
5659
)
5760

58-
credentials = ServiceAccountCredentials.from_json_keyfile_name(CREDS_FILE, SCOPE)
59-
client = gspread.authorize(credentials)
60-
if(task.track_id == 1):
61-
sheet = client.open("Copy of Praveshan 2025 Master DB").worksheet("S1 Submissions")
62-
cell = sheet.find(mentee.name)
63-
if not cell:
64-
name_column = sheet.col_values(1)
65-
row = len(name_column) + 1
66-
sheet.update_cell(row, 1, mentee.name)
67-
sheet.update_cell(row, task.task_no+2, commit_hash)
68-
else:
69-
row = cell.row
70-
sheet.update_cell(row, task.task_no+2, commit_hash)
71-
elif(task.track_id == 2):
72-
sheet = client.open("Copy of Praveshan 2025 Master DB").worksheet("S2 Submissions")
61+
client = _get_gspread_client()
62+
sheet_name = "Copy of Praveshan 2025 Master DB"
63+
64+
if task.track_id == 1:
65+
worksheet_name = "S1 Submissions"
66+
elif task.track_id == 2:
67+
worksheet_name = "S2 Submissions"
68+
else:
69+
worksheet_name = None
70+
71+
if worksheet_name:
72+
sheet = client.open(sheet_name).worksheet(worksheet_name)
7373
cell = sheet.find(mentee.name)
7474
if not cell:
75-
name_column = sheet.col_values(1)
76-
row = len(name_column) + 1
75+
row = len(sheet.col_values(1)) + 1
7776
sheet.update_cell(row, 1, mentee.name)
78-
sheet.update_cell(row, task.task_no+2, commit_hash)
77+
sheet.update_cell(row, task.task_no + 2, commit_hash)
7978
else:
8079
row = cell.row
81-
sheet.update_cell(row, task.task_no+2, commit_hash)
82-
83-
80+
sheet.update_cell(row, task.task_no + 2, commit_hash)
8481

8582
db.add(submission)
8683
db.commit()
@@ -106,7 +103,6 @@ def is_mentor_of(db: Session, mentor_id: int, mentee_id: int):
106103
return db.query(models.MentorMenteeMap).filter_by(mentor_id=mentor_id, mentee_id=mentee_id).first() is not None
107104

108105
def get_leaderboard_data(db: Session, track_id: int):
109-
110106
return (
111107
db.query(
112108
models.User.name,
@@ -121,6 +117,7 @@ def get_leaderboard_data(db: Session, track_id: int):
121117
.order_by(func.sum(models.Task.points).desc())
122118
.all()
123119
)
120+
124121
def get_otp_by_email(db, email):
125122
return db.query(models.OTP).filter(models.OTP.email == email).first()
126123

@@ -134,7 +131,6 @@ def create_or_update_otp(db, email, otp, expires_at):
134131
db.add(entry)
135132
db.commit()
136133

137-
138134
def get_submissions_for_user(db: Session, email: str, track_id: Optional[int] = None) -> list[SubmissionOut]:
139135
user = db.query(models.User).filter(models.User.email == email).first()
140136
if not user:
@@ -167,9 +163,12 @@ def get_submissions_for_user(db: Session, email: str, track_id: Optional[int] =
167163
]
168164

169165
def get_sheet_data():
170-
creds = ServiceAccountCredentials.from_json_keyfile_name(CREDS_FILE, SCOPE)
171-
client = gspread.authorize(creds)
172-
worksheet = client.open_by_key(os.getenv("GOOGLE_SHEET_ID")).worksheet("Praveshan Phase 3") # Change sheet name
166+
client = _get_gspread_client()
167+
sheet_id = os.getenv("GOOGLE_SHEET_ID")
168+
if not sheet_id:
169+
raise ValueError("GOOGLE_SHEET_ID environment variable not set.")
170+
171+
worksheet = client.open_by_key(sheet_id).worksheet("Form Responses 1")
173172
expected_headers = ["Name", "Email Address"]
174173
data = worksheet.get_all_records(expected_headers=expected_headers)
175174
return data
@@ -178,7 +177,6 @@ def sync_users_from_sheet():
178177
db: Session = SessionLocal()
179178
try:
180179
rows = get_sheet_data()
181-
print(f"Loaded {len(rows)} rows from sheet.")
182180
inserted_count = 0
183181
for row in rows:
184182
email = row.get("Email Address", "").strip()
@@ -192,8 +190,5 @@ def sync_users_from_sheet():
192190
inserted_count += 1
193191

194192
db.commit()
195-
print(f"Inserted {inserted_count} new users.")
196-
except Exception as e:
197-
print(f"Error syncing users: {e}")
198193
finally:
199194
db.close()

0 commit comments

Comments
 (0)