|
5 | 5 | from copy import deepcopy
|
6 | 6 | from datetime import datetime, timezone
|
7 | 7 | import traceback
|
| 8 | +import rq |
8 | 9 |
|
9 | 10 | from rest_framework.renderers import JSONRenderer
|
10 | 11 | from rest_framework.views import exception_handler
|
@@ -64,26 +65,45 @@ def job_id(instance):
|
64 | 65 | except Exception:
|
65 | 66 | return None
|
66 | 67 |
|
67 |
| -def _get_current_user(instance): |
| 68 | +def _get_current_user(instance=None): |
| 69 | + # Try to get current user from request |
| 70 | + user = get_current_user() |
| 71 | + if user is not None: |
| 72 | + return user |
| 73 | + |
| 74 | + # Try to get user from rq_job |
| 75 | + if isinstance(instance, rq.job.Job): |
| 76 | + return instance.meta.get("user", None) |
| 77 | + else: |
| 78 | + rq_job = rq.get_current_job() |
| 79 | + if rq_job: |
| 80 | + return rq_job.meta.get("user", None) |
| 81 | + |
68 | 82 | if isinstance(instance, User):
|
69 | 83 | return instance
|
70 | 84 |
|
71 |
| - if isinstance(instance, Job): |
72 |
| - return instance.segment.task.owner |
73 |
| - |
74 |
| - return get_current_user() |
| 85 | + return None |
75 | 86 |
|
76 |
| -def user_id(instance): |
| 87 | +def user_id(instance=None): |
77 | 88 | current_user = _get_current_user(instance)
|
78 |
| - return getattr(current_user, "id", None) |
| 89 | + if current_user is not None: |
| 90 | + return getattr(current_user, "id", None) |
| 91 | + |
| 92 | + return None |
79 | 93 |
|
80 |
| -def user_name(instance): |
| 94 | +def user_name(instance=None): |
81 | 95 | current_user = _get_current_user(instance)
|
82 |
| - return getattr(current_user, "username", None) |
| 96 | + if current_user is not None: |
| 97 | + return getattr(current_user, "username", None) |
| 98 | + |
| 99 | + return None |
83 | 100 |
|
84 |
| -def user_email(instance): |
| 101 | +def user_email(instance=None): |
85 | 102 | current_user = _get_current_user(instance)
|
86 |
| - return getattr(current_user, "email", None) |
| 103 | + if current_user is not None: |
| 104 | + return getattr(current_user, "email", None) |
| 105 | + |
| 106 | + return None |
87 | 107 |
|
88 | 108 | def organization_slug(instance):
|
89 | 109 | if isinstance(instance, Organization):
|
@@ -404,12 +424,9 @@ def handle_rq_exception(rq_job, exc_type, exc_value, tb):
|
404 | 424 | pid = rq_job.meta.get("project_id", None)
|
405 | 425 | tid = rq_job.meta.get("task_id", None)
|
406 | 426 | jid = rq_job.meta.get("job_id", None)
|
407 |
| - user_info = rq_job.meta.get("user", None) |
408 |
| - if user_info: |
409 |
| - uid = user_info.get("id", None) |
410 |
| - uname = user_info.get("name", None) |
411 |
| - uemail = user_info.get("email", None) |
412 |
| - |
| 427 | + uid = user_id(rq_job) |
| 428 | + uname = user_name(rq_job) |
| 429 | + uemail = user_email(rq_job) |
413 | 430 | tb_strings = traceback.format_exception(exc_type, exc_value, tb)
|
414 | 431 |
|
415 | 432 | payload = {
|
|
0 commit comments