Skip to content

Commit 8c58d05

Browse files
committed
Add Job.__repr__()
This is gonna be useful for monitoring and debugging when jobs appear in log messages and tracebacks, Sentry issues, etc.
1 parent 92499da commit 8c58d05

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

h/models/job.py

+17
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,20 @@ class Job(Base):
6565
server_default=text("'{}'::jsonb"),
6666
nullable=False,
6767
)
68+
69+
def __repr__(self):
70+
class_name = type(self).__name__
71+
attrs = {
72+
attrname: repr(getattr(self, attrname))
73+
for attrname in [
74+
"id",
75+
"name",
76+
"enqueued_at",
77+
"scheduled_at",
78+
"expires_at",
79+
"priority",
80+
"tag",
81+
"kwargs",
82+
]
83+
}
84+
return f"{class_name}({', '.join(f'{name}={value}' for name, value in attrs.items())})"

tests/unit/h/models/job_test.py

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from datetime import datetime
2+
3+
from h.models.job import Job
4+
5+
6+
class TestJob:
7+
def test___repr__(self):
8+
job = Job(
9+
id=42,
10+
name="job_name",
11+
enqueued_at=datetime(
12+
year=2024,
13+
month=5,
14+
day=8,
15+
hour=11,
16+
minute=51,
17+
second=23,
18+
),
19+
scheduled_at=datetime(
20+
year=2024,
21+
month=6,
22+
day=1,
23+
hour=0,
24+
minute=0,
25+
second=0,
26+
),
27+
expires_at=datetime(
28+
year=2025,
29+
month=1,
30+
day=1,
31+
hour=0,
32+
minute=0,
33+
second=0,
34+
),
35+
priority=3,
36+
tag="job_tag",
37+
kwargs={"foo": "FOO", "bar": "BAR"},
38+
)
39+
40+
assert (
41+
repr(job)
42+
== "Job(id=42, name='job_name', enqueued_at=datetime.datetime(2024, 5, 8, 11, 51, 23), scheduled_at=datetime.datetime(2024, 6, 1, 0, 0), expires_at=datetime.datetime(2025, 1, 1, 0, 0), priority=3, tag='job_tag', kwargs={'foo': 'FOO', 'bar': 'BAR'})"
43+
)

0 commit comments

Comments
 (0)