7
7
from uuid import UUID
8
8
9
9
import attrs
10
- from django .core .exceptions import ImproperlyConfigured
11
10
from django .utils .html import escape
12
11
from rq .job import Job as RQJob
13
12
14
- from cvat .apps .redis_handler .apps import ACTION_TO_QUEUE , QUEUE_TO_PARSED_JOB_ID_CLS
13
+ from cvat .apps .redis_handler .apps import (
14
+ ACTION_TO_QUEUE ,
15
+ QUEUE_TO_PARSED_JOB_ID_CLS ,
16
+ REQUEST_ID_SUBCLASSES ,
17
+ )
15
18
16
19
17
20
class IncorrectRequestIdError (ValueError ):
@@ -58,7 +61,7 @@ class RequestId:
58
61
default = _default_from_class_attr ("ACTION_DEFAULT_VALUE" ),
59
62
)
60
63
ACTION_ALLOWED_VALUES : ClassVar [tuple [str ]]
61
- QUEUE_SELECTORS : ClassVar [tuple ]
64
+ QUEUE_SELECTORS : ClassVar [tuple ] = ()
62
65
63
66
@action .validator
64
67
def validate_action (self , attribute : attrs .Attribute , value : Any ):
@@ -128,16 +131,10 @@ def parse(
128
131
) -> tuple [RequestId , str ]:
129
132
130
133
actual_cls = cls
131
- subclasses = set ()
132
134
queue : str | None = None
133
135
dict_repr = {}
134
136
fragments = {}
135
137
136
- def init_subclasses (cur_cls : type [RequestId ] = RequestId ):
137
- for subclass in cur_cls .__subclasses__ ():
138
- subclasses .add (subclass )
139
- init_subclasses (subclass )
140
-
141
138
try :
142
139
# try to parse ID as key=value pairs (newly introduced format)
143
140
fragments = dict (urllib .parse .parse_qsl (request_id ))
@@ -151,12 +148,7 @@ def init_subclasses(cur_cls: type[RequestId] = RequestId):
151
148
152
149
match : re .Match | None = None
153
150
154
- if cls is RequestId :
155
- init_subclasses ()
156
- else :
157
- subclasses = (cls ,)
158
-
159
- for subclass in subclasses :
151
+ for subclass in REQUEST_ID_SUBCLASSES if cls is RequestId else (cls ,):
160
152
for pattern in subclass .LEGACY_FORMAT_PATTERNS :
161
153
match = re .match (pattern , request_id )
162
154
if match :
@@ -169,14 +161,9 @@ def init_subclasses(cur_cls: type[RequestId] = RequestId):
169
161
f"Unable to parse request ID: { escape (request_id )!r} "
170
162
)
171
163
172
- queue = ACTION_TO_QUEUE . get (
164
+ queue = ACTION_TO_QUEUE [
173
165
actual_cls .QUEUE_SELECTORS [0 ]
174
- ) # each selector match the same queue
175
- if not queue :
176
- raise ImproperlyConfigured (
177
- "Job ID class must be set in the related queue config"
178
- )
179
-
166
+ ] # each selector match the same queue
180
167
fragments = match .groupdict ()
181
168
# "." was replaced with "@" in previous format
182
169
if "format" in fragments :
@@ -201,9 +188,6 @@ def init_subclasses(cur_cls: type[RequestId] = RequestId):
201
188
result = actual_cls (** dict_repr )
202
189
203
190
return (result , queue )
204
-
205
- except ImproperlyConfigured :
206
- raise
207
191
except Exception as ex :
208
192
raise IncorrectRequestIdError from ex
209
193
0 commit comments