Skip to content

Commit 41c239d

Browse files
various clean ups - tests passing
1 parent 9e9ad38 commit 41c239d

File tree

11 files changed

+75
-55
lines changed

11 files changed

+75
-55
lines changed

queue_job/controllers/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ def _create_graph_test_jobs(
280280
priority=priority,
281281
max_retries=max_retries,
282282
channel=channel,
283-
description="%s #%d" % (description, current_count),
283+
description=f"{description} #{current_count}",
284284
)._test_job(failure_rate=failure_rate)
285285
)
286286

queue_job/job.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ def perform(self):
505505
# traceback and message:
506506
# http://blog.ianbicking.org/2007/09/12/re-raising-exceptions/
507507
new_exc = FailedJobError(
508-
"Max. retries (%d) reached: %s" % (self.max_retries, value or type_)
508+
f"Max. retries ({self.max_retries}) reached: {value or type_}"
509509
)
510510
raise new_exc from err
511511
raise
@@ -813,7 +813,7 @@ def set_failed(self, **kw):
813813
setattr(self, k, v)
814814

815815
def __repr__(self):
816-
return "<Job %s, priority:%d>" % (self.uuid, self.priority)
816+
return f"<Job {self.uuid}, priority:{self.priority}>"
817817

818818
def _get_retry_seconds(self, seconds=None):
819819
retry_pattern = self.job_config.retry_pattern
@@ -856,8 +856,7 @@ def related_action(self):
856856
funcname = record._default_related_action
857857
if not isinstance(funcname, str):
858858
raise ValueError(
859-
"related_action must be the name of the "
860-
"method on queue.job as string"
859+
"related_action must be the name of the method on queue.job as string"
861860
)
862861
action = getattr(record, funcname)
863862
action_kwargs = self.job_config.related_action_kwargs

queue_job/jobrunner/channels.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -455,12 +455,9 @@ def get_subchannel_by_name(self, subchannel_name):
455455

456456
def __str__(self):
457457
capacity = "∞" if self.capacity is None else str(self.capacity)
458-
return "%s(C:%s,Q:%d,R:%d,F:%d)" % (
459-
self.fullname,
460-
capacity,
461-
len(self._queue),
462-
len(self._running),
463-
len(self._failed),
458+
return (
459+
f"{self.fullname}(C:{capacity},"
460+
f"Q:{self._queue},R:{self._running},F:{self._failed})"
464461
)
465462

466463
def remove(self, job):
@@ -894,8 +891,7 @@ def parse_simple_config(cls, config_string):
894891
)
895892
if k in config:
896893
raise ValueError(
897-
f"Invalid channel config {config_string}: "
898-
f"duplicate key {k}"
894+
f"Invalid channel config {config_string}: duplicate key {k}"
899895
)
900896
config[k] = v
901897
else:

queue_job/models/base.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,15 @@ def _job_prepare_context_before_enqueue(self):
260260
if key in self._job_prepare_context_before_enqueue_keys()
261261
}
262262

263+
# Odoo have deprecated _patch_method and api.propagate in v16
263264
@classmethod
264265
def _patch_method(cls, name, method):
265266
origin = getattr(cls, name)
266267
method.origin = origin
267-
# propagate decorators from origin to method, and apply api decorator
268-
wrapped = api.propagate(origin, method)
269-
wrapped.origin = origin
270-
setattr(cls, name, wrapped)
268+
269+
# propagate appeared to only deal with the returns decorator
270+
# which is now, also, deprecated
271+
# wrapped = api.propagate(origin, method)
272+
# wrapped.origin = origin
273+
# setattr(cls, name, wrapped)
274+
setattr(cls, name, method)

queue_job/models/queue_job.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,20 +140,18 @@ def init(self):
140140

141141
@api.depends("dependencies")
142142
def _compute_dependency_graph(self):
143-
jobs_groups = self.env["queue.job"].read_group(
143+
jobs_groups = self.env["queue.job"]._read_group(
144144
[
145145
(
146146
"graph_uuid",
147147
"in",
148148
[uuid for uuid in self.mapped("graph_uuid") if uuid],
149149
)
150150
],
151-
["graph_uuid", "ids:array_agg(id)"],
152151
["graph_uuid"],
152+
["id:array_agg"],
153153
)
154-
ids_per_graph_uuid = {
155-
group["graph_uuid"]: group["ids"] for group in jobs_groups
156-
}
154+
ids_per_graph_uuid = {group[0]: group[1] for group in jobs_groups}
157155
for record in self:
158156
if not record.graph_uuid:
159157
record.dependency_graph = {}
@@ -211,7 +209,7 @@ def _dependency_graph_vis_node(self):
211209
}
212210

213211
def _compute_graph_jobs_count(self):
214-
jobs_groups = self.env["queue.job"].read_group(
212+
jobs_groups = self.env["queue.job"]._read_group(
215213
[
216214
(
217215
"graph_uuid",
@@ -351,7 +349,7 @@ def _subscribe_users_domain(self):
351349
if not group:
352350
return None
353351
companies = self.mapped("company_id")
354-
domain = [("groups_id", "=", group.id)]
352+
domain = [("group_ids", "=", group.id)]
355353
if companies:
356354
domain.append(("company_id", "in", companies.ids))
357355
return domain

queue_job/tests/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def assert_enqueued_job(self, method, args=None, kwargs=None, properties=None):
211211

212212
if expected_call not in actual_calls:
213213
raise AssertionError(
214-
"Job {} was not enqueued.\n" "Actual enqueued jobs:\n{}".format(
214+
"Job {} was not enqueued.\nActual enqueued jobs:\n{}".format(
215215
self._format_job_call(expected_call),
216216
"\n".join(
217217
f" * {self._format_job_call(call)}" for call in actual_calls

queue_job/tests/test_json_field.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from lxml import etree
88

9+
from odoo import Command
910
from odoo.tests import common
1011

1112
# pylint: disable=odoo-addons-relative-import
@@ -14,8 +15,23 @@
1415

1516

1617
class TestJson(common.TransactionCase):
18+
@classmethod
19+
def setUpClass(cls):
20+
res = super().setUpClass()
21+
company = cls.env.ref("base.main_company")
22+
cls.demo_user = cls.env["res.users"].create(
23+
{
24+
"name": "Demo User",
25+
"login": "demo_demo_demo",
26+
"company_id": company.id,
27+
"company_ids": [Command.set(company.ids)],
28+
"group_ids": [Command.set(cls.env.ref("base.group_user").ids)],
29+
}
30+
)
31+
return res
32+
1733
def test_encoder_recordset(self):
18-
demo_user = self.env.ref("base.user_demo")
34+
demo_user = self.demo_user
1935
context = demo_user.context_get()
2036
partner = self.env(user=demo_user, context=context).ref("base.main_partner")
2137
value = partner
@@ -33,7 +49,7 @@ def test_encoder_recordset(self):
3349
self.assertEqual(json.loads(value_json), expected)
3450

3551
def test_encoder_recordset_list(self):
36-
demo_user = self.env.ref("base.user_demo")
52+
demo_user = self.demo_user
3753
context = demo_user.context_get()
3854
partner = self.env(user=demo_user, context=context).ref("base.main_partner")
3955
value = ["a", 1, partner]
@@ -55,7 +71,7 @@ def test_encoder_recordset_list(self):
5571
self.assertEqual(json.loads(value_json), expected)
5672

5773
def test_decoder_recordset(self):
58-
demo_user = self.env.ref("base.user_demo")
74+
demo_user = self.demo_user
5975
context = demo_user.context_get()
6076
partner = self.env(user=demo_user).ref("base.main_partner")
6177

@@ -76,7 +92,7 @@ def test_decoder_recordset(self):
7692
self.assertEqual(demo_user, expected.env.user)
7793

7894
def test_decoder_recordset_list(self):
79-
demo_user = self.env.ref("base.user_demo")
95+
demo_user = self.demo_user
8096
context = demo_user.context_get()
8197
partner = self.env(user=demo_user).ref("base.main_partner")
8298
value_json = json.dumps(
@@ -100,7 +116,7 @@ def test_decoder_recordset_list(self):
100116

101117
def test_decoder_recordset_list_without_user(self):
102118
value_json = (
103-
'["a", 1, {"_type": "odoo_recordset",' '"model": "res.users", "ids": [1]}]'
119+
'["a", 1, {"_type": "odoo_recordset","model": "res.users", "ids": [1]}]'
104120
)
105121
expected = ["a", 1, self.env.ref("base.user_root")]
106122
value = json.loads(value_json, cls=JobDecoder, env=self.env)
@@ -132,7 +148,7 @@ def test_encoder_date(self):
132148
self.assertEqual(json.loads(value_json), expected)
133149

134150
def test_decoder_date(self):
135-
value_json = '["a", 1, {"_type": "date_isoformat",' '"value": "2017-04-19"}]'
151+
value_json = '["a", 1, {"_type": "date_isoformat","value": "2017-04-19"}]'
136152
expected = ["a", 1, date(2017, 4, 19)]
137153
value = json.loads(value_json, cls=JobDecoder, env=self.env)
138154
self.assertEqual(value, expected)

queue_job/tests/test_queue_job_protected_write.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ def test_create_error(self):
2222
"uuid": "test",
2323
},
2424
},
25-
headers={
26-
"Cookie": f"session_id={self.session.sid};",
27-
},
2825
)
2926
self.assertEqual("odoo.exceptions.AccessError", str(cm.exception))
3027

test_queue_job/tests/common.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright 2016-2019 Camptocamp SA
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
33

4+
from odoo import Command
45
from odoo.tests import common
56

67
from odoo.addons.queue_job.job import Job
@@ -13,6 +14,16 @@ def setUpClass(cls):
1314
cls.queue_job = cls.env["queue.job"]
1415
cls.user = cls.env["res.users"]
1516
cls.method = cls.env["test.queue.job"].testing_method
17+
company = cls.env.ref("base.main_company")
18+
cls.demo_user = cls.user.create(
19+
{
20+
"name": "Demo User",
21+
"login": "demo_demo_demo",
22+
"company_id": company.id,
23+
"company_ids": [Command.set(company.ids)],
24+
"group_ids": [Command.set(cls.env.ref("base.group_user").ids)],
25+
}
26+
)
1627

1728
def _create_job(self):
1829
test_job = Job(self.method)

test_queue_job/tests/test_autovacuum.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ def test_old_jobs_are_deleted_by_cron_job(self):
1919
)
2020
stored = self._create_job()
2121
stored.write({"date_done": date_done})
22-
self.cron_job.method_direct_trigger()
22+
with self.enter_registry_test_mode():
23+
self.cron_job.method_direct_trigger()
2324
self.assertFalse(stored.exists())
2425

2526
def test_autovacuum(self):

0 commit comments

Comments
 (0)