From 58054ac813a81eb30b7e2bf6f41ce1bf2510e45b Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 8 Oct 2025 18:08:22 -0500 Subject: [PATCH] added logging to jobs route --- .../__pycache__/routes_jobs.cpython-313.pyc | Bin 43895 -> 45136 bytes backend/app/api/v1/routes_jobs.py | 87 +++++++++++------- 2 files changed, 52 insertions(+), 35 deletions(-) diff --git a/backend/app/api/v1/__pycache__/routes_jobs.cpython-313.pyc b/backend/app/api/v1/__pycache__/routes_jobs.cpython-313.pyc index 2f1b8fe05aa74cf04fe01c0a761691fae9aae3df..96a52d1239f120cf7c875e92067448acfbf89ec7 100644 GIT binary patch delta 3795 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 DFsR@V delta 2609 zcmai#4Nz3q6@c&Eef!wmw{O>F7uPJZtOza-by;toz{d-qJU0PJDs-oERr%Y z9pCJJ@7#0FJ@?#u&%JMSQuW1kmGO=!>Ir*}UOBz@O7H8&w_O?SYC@J1C+R01(!%>m zI@;M&UqpyZ{UjgdJVN{gzL9I?QkW8|(i7p?P763KTKGY_NmBW>9_r_1wTn4daZlct z{B%Cp9tR7+RdYbUX@OIQB={^{CkQwUK7J1Vyxj_g2ebwjgu@_yO|=n*ofc|_W#6;H zRw>D>S@@PQpJyey~%zX0YGYldGf zYrV9b$Yd{@@P68_uGAPviy@P=h<<~Glm%H>qhG8}!W?UoV~H`;{Vz+StYc%796D$7 z8)ZGV*;{@8E#SLu*_@p%pVfm_18O(WTt$A}EXu}ABAeW*9MzoboWUe7S`eGp zz{M0BTVfq&l+E)EZMhup)y=y($(9~M1h#v1xM;D*FZy+U6`QWb%cYWl%E|sMag9Vv zHquI?mQ;@9sT--3Pzk}+D^oER01y(^wuKj~icTJtN-=dwR^7ewrZe{dI!n2+bZly}S}1t&Rm7A%k>ng&dNO%9Ig*qW z)C8XjYdh`JJh3DUxcXdU@lrTm8cB=9d&Uf&t`cSt&AnOOWrJK;SlYEADw+=0bk`i- z-o1S=Eh0L{#I&%OHq?BkI3nhaiN3JtJGU(&7LSQ#VX^F8YecN{7%MFVy7#GzhbdG74hP6wN)=ik=d-Dc!`W}mzQljyX47$ScDN&1k zaBbL)CNjf7eqa9JfisU@ObJUR5ld;*nmAC=S23iESTmwF z$Kau`ZPl19H*Cv|*w#LvnCZ0W9s19SUMI|`iFL_cJ250iMSIj}iHc_So6%_u{4~*M z_()a+jnc7i(NzL`%Kg zWpnWg)_BKD8QXQ49pBlvYe&fRpBF}0AY}>S6qwgVG?$nd7n)kvtfg?6-eMb7&m2w^c(JRX_wLe3gRl_UBqu0wkhwS_&&l1zba0FP30NFHEbpz zK7h{hTo(7&<(2#&nc@J2(b{F9m78w!^eiN9tymR{oW)F%S}|akcMzKq4-6H0VXH`4 zw4v&9dJX6+#09v}@Dm}{8PBjX3pI^{8p5_EHFUS}V{PhJM?uhf!2L3fd=K@Xi1=^#sdlpKH4ve2tD_hSzFic$_Vmp-w(V~mtg}babBf`gV&?Ap*0v_r-@U)BP5Bh0 zc6af0K2;5Z+li-fq1xCXwCjXX|AnS}0+T8)wAeuKTC-D*U3`Cw!Tv@*c}_35*tNK-ZJ@f3keMN3yHfXo?!KVC^w12S4oD z#fsh6v4nmUQa$IU!gA(jWZ%%h9*(W-!O$Det91_)A6)H!hMtG@N95#(Y(2boy@4JNhmxaRmSqlz&;ZQJA=gIJw+5RVjUt@{F5jhW(e>M&e)@TACVmzeobsFKfVbPYwz}kr@{*d8Y6b5$1ur56FA4=uv4V$6!Eznf zwAQ!n-mBo&E4a!EE{n1godysSaN|^xzJe*)j|3hIsa`osH+v`_HCTJ)?k&@5CQs^( y(;D_>pESWZ9fy(@B^^q7VzEsNC>e+@>8{A6J8GixOsi1WNJF!))^gk?7XH83CbQrG diff --git a/backend/app/api/v1/routes_jobs.py b/backend/app/api/v1/routes_jobs.py index 63ab65c..14b0766 100644 --- a/backend/app/api/v1/routes_jobs.py +++ b/backend/app/api/v1/routes_jobs.py @@ -217,47 +217,64 @@ async def list_jobs( current_user: User = Depends(get_current_user), db: AsyncIOMotorDatabase = Depends(get_database), ): - query = {} + print(f"🔍 DEBUG: list_jobs called by user {current_user.id}, status={status}, mine={mine}") + try: + query = {} - if status: - if ',' in status: - # Handle comma-separated status values - status_list = [s.strip() for s in status.split(',')] - query["status"] = {"$in": status_list} - else: - query["status"] = status + if status: + if ',' in status: + # Handle comma-separated status values + status_list = [s.strip() for s in status.split(',')] + query["status"] = {"$in": status_list} + else: + query["status"] = status - if mine or current_user.role == UserRole.CLIENT: - query["client_id"] = str(current_user.id) + if mine or current_user.role == UserRole.CLIENT: + query["client_id"] = str(current_user.id) - # Get total count - total = await db.jobs.count_documents(query) + # Get total count + total = await db.jobs.count_documents(query) - # Get paginated results - skip = (page - 1) * size - cursor = db.jobs.find(query).sort("created_at", -1).skip(skip).limit(size) - jobs = await cursor.to_list(length=size) + # Get paginated results + skip = (page - 1) * size + cursor = db.jobs.find(query).sort("created_at", -1).skip(skip).limit(size) + jobs = await cursor.to_list(length=size) - job_responses = [] - for job_doc in jobs: - job_responses.append(JobResponse( - id=str(job_doc["_id"]), - title=job_doc["title"], - status=job_doc["status"], - source=job_doc["source"], - requested_outputs=RequestedOutputs(**job_doc["requested_outputs"]), - review=job_doc.get("review", {"notes": "", "history": []}), - outputs=job_doc.get("outputs"), - created_at=job_doc["created_at"].isoformat(), - updated_at=job_doc["updated_at"].isoformat() - )) + job_responses = [] + print(f"🔍 DEBUG: Found {len(jobs)} jobs, building responses...") + for i, job_doc in enumerate(jobs): + try: + print(f"🔍 DEBUG: Processing job {i}: {job_doc.get('_id')}") + job_responses.append(JobResponse( + id=str(job_doc["_id"]), + title=job_doc["title"], + status=job_doc["status"], + source=job_doc["source"], + requested_outputs=RequestedOutputs(**job_doc["requested_outputs"]), + review=job_doc.get("review", {"notes": "", "history": []}), + outputs=job_doc.get("outputs"), + created_at=job_doc["created_at"].isoformat(), + updated_at=job_doc["updated_at"].isoformat() + )) + print(f"🔍 DEBUG: Job {i} processed successfully") + except Exception as e: + print(f"🚨 ERROR processing job {i}: {e}") + import traceback + print(traceback.format_exc()) + raise - return JobListResponse( - jobs=job_responses, - total=total, - page=page, - size=size - ) + print(f"🔍 DEBUG: All jobs processed, returning response") + return JobListResponse( + jobs=job_responses, + total=total, + page=page, + size=size + ) + except Exception as e: + print(f"🚨 EXCEPTION in list_jobs: {e}") + import traceback + print(traceback.format_exc()) + raise @router.get("/{job_id}", response_model=JobResponse)