Skip to content

Commit 3515144

Browse files
Merge branch 'main' into 2318
2 parents 464258f + fa4e356 commit 3515144

2 files changed

Lines changed: 31 additions & 9 deletions

File tree

‎core.py‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,6 @@ def parse_llm_json(raw_text: str) -> Dict[str, Any]:
407407
clean_json = raw_text.replace("```json", "").replace("```", "").strip()
408408
return json.loads(clean_json)
409409
except (json.JSONDecodeError, ValueError):
410-
except:
411410
return {
412411
"summary": raw_text,
413412
"confidence_score": 0.3,
@@ -708,7 +707,6 @@ def parse_date(date_str):
708707
for fmt in ("%Y-%m-%d", "%d %b %Y", "%d %B %Y", "%Y/%m/%d"):
709708
try: return datetime.strptime(date_str, fmt)
710709
except ValueError: continue
711-
except: continue
712710
return datetime(9999, 12, 31)
713711
except Exception:
714712
return datetime(9999, 12, 31)

‎database.py‎

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,13 @@ def delete_case(db: Session, case_id: int) -> bool:
585585
db.rollback()
586586
raise
587587

588+
Args:
589+
db: Active SQLAlchemy database session.
590+
otp_id: Primary-key ID of the OTPVerification record to update.
591+
lockout_duration_minutes: Duration to lock out the email after max
592+
failed attempts are reached (default: 15 minutes).
593+
max_failed_attempts: Number of consecutive failures that trigger a
594+
lockout (default: 5).
588595

589596
def create_case_document(
590597
db: Session,
@@ -610,6 +617,10 @@ def create_case_document(
610617
db.refresh(doc)
611618
return doc
612619

620+
db.commit()
621+
db.refresh(otp)
622+
return True
623+
return False
613624

614625
def create_case_record(
615626
db: Session,
@@ -780,11 +791,13 @@ def submit_user_feedback(
780791
satisfaction_rating=satisfaction_rating,
781792
feedback_text=feedback_text,
782793
)
783-
db.add(feedback)
784-
db.commit()
785-
db.refresh(feedback)
786-
return feedback
787794

795+
def reset_otp_failed_attempts(db: Session, otp_id: int) -> bool:
796+
"""Reset the failed-attempt counter and any lockout on successful verification.
797+
798+
Args:
799+
db: Active SQLAlchemy database session.
800+
otp_id: Primary-key ID of the OTPVerification record to reset.
788801
789802
def get_user_feedback(db: Session, user_id: int) -> List[UserFeedback]:
790803
"""Get feedback history for a user"""
@@ -814,8 +827,11 @@ def update_user_last_login(db: Session, user_id: int) -> User:
814827
if user:
815828
user.last_login = dt.datetime.now(dt.timezone.utc)
816829
db.commit()
817-
db.refresh(user)
818-
return user
830+
total_deleted += deleted
831+
if deleted < batch_size:
832+
break
833+
834+
return total_deleted
819835
820836
821837
# Thread lock for OTP rate-limit enforcement (single source of truth).
@@ -872,8 +888,16 @@ def mark_otp_as_used(db: Session, otp_id: int) -> bool:
872888
if otp:
873889
otp.is_used = True
874890
db.commit()
891+
try:
892+
from core.embedding_engine import get_vector_store
893+
vs = get_vector_store()
894+
vs.delete(case_id)
895+
except Exception as ev:
896+
logger.warning(f"Failed to auto-invalidate vector store on case deletion: {ev}")
875897
return True
876-
return False
898+
except Exception:
899+
db.rollback()
900+
raise
877901
878902
879903

0 commit comments

Comments
 (0)