@@ -41,6 +41,7 @@ class UserInfo:
41
41
def to_dict (self ) -> dict [str , Any ]:
42
42
return asdict (self )
43
43
44
+
44
45
@attrs .frozen
45
46
class RequestInfo :
46
47
uuid : str = attrs .field (validator = [str_validator ])
@@ -50,6 +51,7 @@ class RequestInfo:
50
51
def to_dict (self ) -> dict [str , Any ]:
51
52
return asdict (self )
52
53
54
+
53
55
@attrs .frozen
54
56
class ExportResultInfo :
55
57
url : str | None = attrs .field (validator = [optional_str_validator ])
@@ -59,7 +61,6 @@ def to_dict(self) -> dict[str, Any]:
59
61
return asdict (self )
60
62
61
63
62
-
63
64
@attrs .define
64
65
class AbstractRQMeta (metaclass = ABCMeta ):
65
66
_job : RQJob | None = attrs .field (init = False , default = None )
@@ -81,16 +82,13 @@ def save(self) -> None:
81
82
82
83
@staticmethod
83
84
@abstractmethod
84
- def get_resettable_fields () -> list [RQJobMetaField ]:
85
+ def _get_resettable_fields () -> list [RQJobMetaField ]:
85
86
"""Return a list of fields that must be reset on retry"""
86
87
87
-
88
88
def reset_meta_on_retry (self ) -> dict [RQJobMetaField , Any ]:
89
- resettable_fields = self .get_resettable_fields ()
89
+ resettable_fields = self ._get_resettable_fields ()
90
90
91
- return {
92
- k : v for k , v in self ._job .meta .items () if k not in resettable_fields
93
- }
91
+ return {k : v for k , v in self ._job .meta .items () if k not in resettable_fields }
94
92
95
93
96
94
@attrs .define (kw_only = True )
@@ -101,21 +99,20 @@ class RQMetaWithFailureInfo(AbstractRQMeta):
101
99
exc_args : Iterable | None = attrs .field (default = None )
102
100
103
101
@staticmethod
104
- def get_resettable_fields () -> list [RQJobMetaField ]:
102
+ def _get_resettable_fields () -> list [RQJobMetaField ]:
105
103
"""Return a list of fields that must be reset on retry"""
106
104
return [
107
105
RQJobMetaField .FORMATTED_EXCEPTION ,
108
106
RQJobMetaField .EXCEPTION_TYPE ,
109
107
RQJobMetaField .EXCEPTION_ARGS ,
110
108
]
111
109
110
+
112
111
@attrs .define (kw_only = True )
113
112
class BaseRQMeta (RQMetaWithFailureInfo ):
114
113
# immutable and required fields
115
114
user : UserInfo = attrs .field (
116
- validator = [
117
- attrs .validators .instance_of (UserInfo )
118
- ],
115
+ validator = [attrs .validators .instance_of (UserInfo )],
119
116
converter = lambda d : UserInfo (** d ),
120
117
on_setattr = attrs .setters .frozen ,
121
118
)
@@ -126,19 +123,29 @@ class BaseRQMeta(RQMetaWithFailureInfo):
126
123
)
127
124
128
125
# immutable and optional fields
129
- org_id : int | None = attrs .field (validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen )
130
- org_slug : str | None = attrs .field (validator = [optional_str_validator ], default = None , on_setattr = attrs .setters .frozen )
131
- project_id : int | None = attrs .field (validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen )
132
- task_id : int | None = attrs .field (validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen )
133
- job_id : int | None = attrs .field (validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen )
126
+ org_id : int | None = attrs .field (
127
+ validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen
128
+ )
129
+ org_slug : str | None = attrs .field (
130
+ validator = [optional_str_validator ], default = None , on_setattr = attrs .setters .frozen
131
+ )
132
+ project_id : int | None = attrs .field (
133
+ validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen
134
+ )
135
+ task_id : int | None = attrs .field (
136
+ validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen
137
+ )
138
+ job_id : int | None = attrs .field (
139
+ validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen
140
+ )
134
141
135
142
# import && lambda
136
143
progress : float | None = attrs .field (validator = [optional_float_validator ], default = None )
137
144
138
145
@staticmethod
139
- def get_resettable_fields () -> list [RQJobMetaField ]:
146
+ def _get_resettable_fields () -> list [RQJobMetaField ]:
140
147
"""Return a list of fields that must be reset on retry"""
141
- return RQMetaWithFailureInfo .get_resettable_fields () + [RQJobMetaField .PROGRESS ]
148
+ return RQMetaWithFailureInfo ._get_resettable_fields () + [RQJobMetaField .PROGRESS ]
142
149
143
150
@classmethod
144
151
def build (
@@ -176,14 +183,15 @@ def build(
176
183
job_id = jid ,
177
184
).to_dict ()
178
185
186
+
179
187
@attrs .define (kw_only = True )
180
188
class ExportRQMeta (BaseRQMeta ):
181
- result : ExportResultInfo = attrs .field (converter = lambda d : ExportResultInfo (** d ))
189
+ result : ExportResultInfo = attrs .field (converter = lambda d : ExportResultInfo (** d ))
182
190
183
191
@staticmethod
184
- def get_resettable_fields () -> list [RQJobMetaField ]:
192
+ def _get_resettable_fields () -> list [RQJobMetaField ]:
185
193
"""Return a list of fields that must be reset on retry"""
186
- base_fields = BaseRQMeta .get_resettable_fields ()
194
+ base_fields = BaseRQMeta ._get_resettable_fields ()
187
195
return base_fields + [RQJobMetaField .RESULT ]
188
196
189
197
@classmethod
@@ -205,25 +213,30 @@ def build(
205
213
).to_dict (),
206
214
).to_dict ()
207
215
216
+
208
217
@attrs .define (kw_only = True )
209
218
class ImportRQMeta (BaseRQMeta ):
210
219
# immutable && optional fields
211
- tmp_file : str | None = attrs .field (validator = [optional_str_validator ], default = None , on_setattr = attrs .setters .frozen )
220
+ tmp_file : str | None = attrs .field (
221
+ validator = [optional_str_validator ], default = None , on_setattr = attrs .setters .frozen
222
+ )
212
223
213
224
# mutable fields
214
225
# TODO: move into base?
215
- status : str = attrs .field (validator = [optional_str_validator ], default = "" , on_setattr = _update_value )
216
- task_progress : float | None = attrs .field (validator = [optional_float_validator ],default = None )
226
+ status : str = attrs .field (
227
+ validator = [optional_str_validator ], default = "" , on_setattr = _update_value
228
+ )
229
+ task_progress : float | None = attrs .field (validator = [optional_float_validator ], default = None )
217
230
218
231
@staticmethod
219
- def get_resettable_fields () -> list [RQJobMetaField ]:
232
+ def _get_resettable_fields () -> list [RQJobMetaField ]:
220
233
"""Return a list of fields that must be reset on retry"""
221
- base_fields = BaseRQMeta .get_resettable_fields ()
234
+ base_fields = BaseRQMeta ._get_resettable_fields ()
222
235
223
236
return base_fields + [
224
237
RQJobMetaField .PROGRESS ,
225
238
RQJobMetaField .TASK_PROGRESS ,
226
- RQJobMetaField .STATUS
239
+ RQJobMetaField .STATUS ,
227
240
]
228
241
229
242
@classmethod
@@ -239,14 +252,21 @@ def build(
239
252
return cls (
240
253
** base_meta ,
241
254
tmp_file = tmp_file ,
242
-
243
255
).to_dict ()
244
256
257
+
245
258
@attrs .define (kw_only = True )
246
259
class LambdaRQMeta (BaseRQMeta ):
247
260
# immutable fields
248
- function_id : int | None = attrs .field (validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen )
249
- lambda_ : bool | None = attrs .field (validator = [optional_bool_validator ], init = False , default = True , on_setattr = attrs .setters .frozen )
261
+ function_id : int | None = attrs .field (
262
+ validator = [optional_int_validator ], default = None , on_setattr = attrs .setters .frozen
263
+ )
264
+ lambda_ : bool | None = attrs .field (
265
+ validator = [optional_bool_validator ],
266
+ init = False ,
267
+ default = True ,
268
+ on_setattr = attrs .setters .frozen ,
269
+ )
250
270
251
271
def to_dict (self ) -> dict :
252
272
d = asdict (self )
@@ -270,55 +290,51 @@ def build(
270
290
).to_dict ()
271
291
272
292
273
- # TODO: check that RQJobMetaField is used only in this module
274
293
class RQJobMetaField :
275
294
# common fields
276
295
FORMATTED_EXCEPTION = "formatted_exception"
277
- REQUEST = ' request'
278
- USER = ' user'
279
- PROJECT_ID = ' project_id'
280
- TASK_ID = ' task_id'
281
- JOB_ID = ' job_id'
282
- LAMBDA = ' lambda'
283
- ORG_ID = ' org_id'
284
- ORG_SLUG = ' org_slug'
285
- STATUS = ' status'
286
- PROGRESS = ' progress'
287
- TASK_PROGRESS = ' task_progress'
296
+ REQUEST = " request"
297
+ USER = " user"
298
+ PROJECT_ID = " project_id"
299
+ TASK_ID = " task_id"
300
+ JOB_ID = " job_id"
301
+ LAMBDA = " lambda"
302
+ ORG_ID = " org_id"
303
+ ORG_SLUG = " org_slug"
304
+ STATUS = " status"
305
+ PROGRESS = " progress"
306
+ TASK_PROGRESS = " task_progress"
288
307
# export specific fields
289
- RESULT_URL = 'result_url'
290
- RESULT = 'result'
291
- FUNCTION_ID = 'function_id'
292
- EXCEPTION_TYPE = 'exc_type'
293
- EXCEPTION_ARGS = 'exc_args'
308
+ RESULT_URL = "result_url"
309
+ RESULT = "result"
310
+ FUNCTION_ID = "function_id"
311
+ EXCEPTION_TYPE = "exc_type"
312
+ EXCEPTION_ARGS = "exc_args"
313
+
294
314
295
315
def is_rq_job_owner (rq_job : RQJob , user_id : int ) -> bool :
296
- return rq_job .meta .get (RQJobMetaField .USER , {}).get ('id' ) == user_id
316
+ return rq_job .meta .get (RQJobMetaField .USER , {}).get ("id" ) == user_id
317
+
297
318
298
319
@attrs .frozen ()
299
320
class RQId :
300
- action : RequestAction = attrs .field (
301
- validator = attrs .validators .instance_of (RequestAction )
302
- )
303
- target : RequestTarget = attrs .field (
304
- validator = attrs .validators .instance_of (RequestTarget )
305
- )
306
- identifier : Union [int , UUID ] = attrs .field (
307
- validator = attrs .validators .instance_of ((int , UUID ))
308
- )
321
+ action : RequestAction = attrs .field (validator = attrs .validators .instance_of (RequestAction ))
322
+ target : RequestTarget = attrs .field (validator = attrs .validators .instance_of (RequestTarget ))
323
+ identifier : Union [int , UUID ] = attrs .field (validator = attrs .validators .instance_of ((int , UUID )))
309
324
subresource : Optional [RequestSubresource ] = attrs .field (
310
- validator = attrs .validators .optional (
311
- attrs .validators .instance_of (RequestSubresource )
312
- ),
313
- kw_only = True , default = None ,
325
+ validator = attrs .validators .optional (attrs .validators .instance_of (RequestSubresource )),
326
+ kw_only = True ,
327
+ default = None ,
314
328
)
315
329
user_id : Optional [int ] = attrs .field (
316
330
validator = attrs .validators .optional (attrs .validators .instance_of (int )),
317
- kw_only = True , default = None ,
331
+ kw_only = True ,
332
+ default = None ,
318
333
)
319
334
format : Optional [str ] = attrs .field (
320
335
validator = attrs .validators .optional (attrs .validators .instance_of (str )),
321
- kw_only = True , default = None ,
336
+ kw_only = True ,
337
+ default = None ,
322
338
)
323
339
324
340
_OPTIONAL_FIELD_REQUIREMENTS = {
@@ -353,9 +369,7 @@ def render(
353
369
return f"{ common_prefix } -{ self .subresource } "
354
370
elif RequestAction .EXPORT == self .action :
355
371
if self .format is None :
356
- return (
357
- f"{ common_prefix } -{ self .subresource } -by-{ self .user_id } "
358
- )
372
+ return f"{ common_prefix } -{ self .subresource } -by-{ self .user_id } "
359
373
360
374
format_to_be_used_in_urls = self .format .replace (" " , "_" ).replace ("." , "@" )
361
375
return f"{ common_prefix } -{ self .subresource } -in-{ format_to_be_used_in_urls } -format-by-{ self .user_id } "
@@ -382,7 +396,7 @@ def parse(rq_id: str) -> RQId:
382
396
elif RequestAction .IMPORT == action :
383
397
identifier , subresource_str = unparsed .rsplit ("-" , maxsplit = 1 )
384
398
subresource = RequestSubresource (subresource_str )
385
- else : # action == export
399
+ else : # action == export
386
400
identifier , subresource_str , unparsed = unparsed .split ("-" , maxsplit = 2 )
387
401
subresource = RequestSubresource (subresource_str )
388
402
0 commit comments