onestep 0.3.81__py3-none-any.whl → 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of onestep might be problematic. Click here for more details.

onestep/__init__.py CHANGED
@@ -23,8 +23,6 @@ __all__ = [
23
23
  # broker
24
24
  'BaseBroker',
25
25
  'BaseConsumer',
26
- 'BaseLocalBroker',
27
- 'BaseLocalConsumer',
28
26
  'MemoryBroker',
29
27
  'RabbitMQBroker',
30
28
  'WebHookBroker',
@@ -61,4 +59,4 @@ __all__ = [
61
59
  '__version__'
62
60
  ]
63
61
 
64
- __version__ = '0.3.81'
62
+ __version__ = '0.4.0'
onestep/onestep.py CHANGED
@@ -241,6 +241,7 @@ class step:
241
241
  }
242
242
 
243
243
  def __call__(self, func, *_args, **_kwargs):
244
+ func.__step_params__ = self.params
244
245
  if iscoroutinefunction(func) or isasyncgenfunction(func):
245
246
  os = AsyncOneStep(fn=func, **self.params)
246
247
  else:
onestep/retry.py CHANGED
@@ -31,6 +31,30 @@ class AlwaysRetry(BaseRetry):
31
31
  return RetryStatus.CONTINUE
32
32
 
33
33
 
34
+ class AllRetry(BaseRetry):
35
+ def __init__(self, *retries):
36
+ self.retries = retries
37
+
38
+ def __call__(self, message) -> Optional[RetryStatus]:
39
+ for retry in self.retries:
40
+ status = retry(message)
41
+ if status != RetryStatus.CONTINUE:
42
+ return status
43
+ return RetryStatus.CONTINUE
44
+
45
+
46
+ class AnyRetry(BaseRetry):
47
+ def __init__(self, *retries):
48
+ self.retries = retries
49
+
50
+ def __call__(self, message) -> Optional[RetryStatus]:
51
+ for retry in self.retries:
52
+ status = retry(message)
53
+ if status == RetryStatus.CONTINUE:
54
+ return RetryStatus.CONTINUE
55
+ return RetryStatus.END_WITH_CALLBACK
56
+
57
+
34
58
  class TimesRetry(BaseRetry):
35
59
 
36
60
  def __init__(self, times: int = 3):
onestep/worker.py CHANGED
@@ -74,42 +74,58 @@ class BaseWorker:
74
74
  message.broker = message.broker or self.broker
75
75
  logger.debug(f"{self.instance.name} receive message<{message}> from {self.broker!r}")
76
76
  message_received.send(self, message=message)
77
+
77
78
  try:
78
79
  self.instance.before_emit("consume", message=message)
79
-
80
80
  self._run_real_instance(message)
81
- message_consumed.send(self, message=message)
82
- message.confirm()
83
-
81
+ self.handle_success(message)
84
82
  self.instance.after_emit("consume", message=message)
85
83
  except (exception.DropMessage, exception.RejectMessage) as e:
86
- message_drop.send(self, message=message, reason=e)
87
- logger.warning(f"{self.instance.name} dropped <{type(e).__name__}: {str(e)}>")
88
- message.reject()
84
+ self.handle_drop(message, e)
89
85
  except exception.RequeueMessage as e:
90
- message_requeue.send(self, message=message, reason=e)
91
- logger.warning(f"{self.instance.name} requeue <{type(e).__name__}: {str(e)}>")
92
- message.requeue(is_source=True)
86
+ self.handle_requeue(message, e)
93
87
  except Exception as e:
94
88
  message_error.send(self, message=message, error=e)
95
- if self.instance.state.debug:
96
- logger.exception(f"{self.instance.name} run error <{type(e).__name__}: {str(e)}>")
97
- else:
98
- logger.error(f"{self.instance.name} run error <{type(e).__name__}: {str(e)}>")
99
- message.set_exception()
100
-
101
- retry_status = self.retry(message)
102
- if retry_status is RetryStatus.END_WITH_CALLBACK:
103
- if self.error_callback:
104
- self.error_callback(message)
105
- message.reject()
106
- elif retry_status is RetryStatus.END_IGNORE_CALLBACK:
107
- # 由于是队列内重试,不会触发错误回调
108
- message.requeue()
89
+ self.handle_error(message, e)
90
+ self.handle_retry(message)
109
91
  finally:
110
- # When message is triggered by cancel_consume, it will be shutdown
111
- if self.broker.cancel_consume and self.broker.cancel_consume(message):
112
- self.shutdown()
92
+ self.handle_cancel_consume(message)
93
+
94
+ def handle_success(self, message):
95
+ message_consumed.send(self, message=message)
96
+ message.confirm()
97
+
98
+ def handle_drop(self, message, reason):
99
+ message_drop.send(self, message=message, reason=reason)
100
+ logger.warning(f"{self.instance.name} dropped <{type(reason).__name__}: {str(reason)}>")
101
+ message.reject()
102
+
103
+ def handle_requeue(self, message, reason):
104
+ message_requeue.send(self, message=message, reason=reason)
105
+ logger.warning(f"{self.instance.name} requeue <{type(reason).__name__}: {str(reason)}>")
106
+ message.requeue(is_source=True)
107
+
108
+ def handle_error(self, message, error):
109
+ if self.instance.state.debug:
110
+ logger.exception(f"{self.instance.name} run error <{type(error).__name__}: {str(error)}>")
111
+ else:
112
+ logger.error(f"{self.instance.name} run error <{type(error).__name__}: {str(error)}>")
113
+ message.set_exception()
114
+
115
+ def handle_cancel_consume(self, message):
116
+ if self.broker.cancel_consume and self.broker.cancel_consume(message):
117
+ self.shutdown()
118
+
119
+ def handle_retry(self, message):
120
+ retry_status = self.retry(message)
121
+ if retry_status is RetryStatus.END_WITH_CALLBACK:
122
+ if self.error_callback:
123
+ self.error_callback(message)
124
+ message.reject()
125
+ elif retry_status is RetryStatus.END_IGNORE_CALLBACK:
126
+ message.requeue()
127
+ elif retry_status is RetryStatus.CONTINUE:
128
+ message.requeue()
113
129
 
114
130
  def __repr__(self):
115
131
  return f"<{self.__class__.__name__} {self.instance.name}>"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: onestep
3
- Version: 0.3.81
3
+ Version: 0.4.0
4
4
  Summary:
5
5
  Author: miclon
6
6
  Author-email: jcnd@163.com
@@ -1,4 +1,4 @@
1
- onestep/__init__.py,sha256=GnX4nALDbR8LcbwMEaeZKUQl9f7cnYAVEVWLUQXfgcY,1466
1
+ onestep/__init__.py,sha256=F38-j9JgPMyUe0zBf-ao-f2ailidPI_DJQE4ddGCOX0,1417
2
2
  onestep/_utils.py,sha256=ySYmy-o2o3BurvLfuLWKGXR8TLwug6aTDNMvA3_QjKM,414
3
3
  onestep/broker/__init__.py,sha256=L-roNwPZVKsjytOlKCOlyAyvfejI28FyOj9uzfyXcrk,257
4
4
  onestep/broker/base.py,sha256=Ryo-0YekdZfpfSSqdmh7jsmNONc_GmlYFYadt_n5bds,4141
@@ -16,12 +16,12 @@ onestep/middleware/__init__.py,sha256=MP_45lqr4pecmbzQBnn2-AODQ0N_Fss8nl2SA7Zzlj
16
16
  onestep/middleware/base.py,sha256=adWQ_Lx2Nkaw4ySojIaa3lwUIUu97pHR_l5YMr0lrbw,975
17
17
  onestep/middleware/config.py,sha256=WZIvGXhpdSQRAFTbEWXcZdnhFcbvhGkLdkFIj-_QuZM,2438
18
18
  onestep/middleware/unique.py,sha256=e3nWHW2yxHFWT9PqiA96sOA1CZZVTbC3bOwUgxN9iaQ,1351
19
- onestep/onestep.py,sha256=cUuBSHJPucXFu86wxDFkXeetBJS7Fxu9r1c3OFfsgS4,9329
20
- onestep/retry.py,sha256=_bl_-0FEMai9KLZ0DkamYwUoUVPf6BjUDpn8SrfqQV4,3009
19
+ onestep/onestep.py,sha256=IQGOfhfbneXCaINqMzO-5wjWpmE5dISEZQtmG3bZ3EU,9372
20
+ onestep/retry.py,sha256=fPO139hQrcMjXZuQ4QfFaQR57VEqv_EKS2WSz92Ayvc,3706
21
21
  onestep/signal.py,sha256=tz9bGzTFZeBviG_iaGLfy4OyFKlWat6szEI6kWEGfTA,337
22
22
  onestep/state.py,sha256=UVG91CXCabU64X6qgcO0S7RzbBP8ut0ID7aTMww94us,618
23
- onestep/worker.py,sha256=A-XKvWz7ceRodMItjHKSN9DVTk3OoA0jsfmmBZ9z19U,6449
24
- onestep-0.3.81.dist-info/METADATA,sha256=khDghCE0BG8tvoUWBlVn8xtArfzkE-h65orC1eNyq_4,2523
25
- onestep-0.3.81.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
26
- onestep-0.3.81.dist-info/entry_points.txt,sha256=ZfWnNQqiGujz2PPLjSlKPocOFRryL7Ot0vQ41TU1xw0,44
27
- onestep-0.3.81.dist-info/RECORD,,
23
+ onestep/worker.py,sha256=8Bmbie-KrZxnHbne1RvNL3v8j1PObfd12Yp9jmzAFYg,6855
24
+ onestep-0.4.0.dist-info/METADATA,sha256=KMQt0aJiyk2J0K-sz0Vbo_2jAE6gyppvVq-P4Y14zp4,2522
25
+ onestep-0.4.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
26
+ onestep-0.4.0.dist-info/entry_points.txt,sha256=ZfWnNQqiGujz2PPLjSlKPocOFRryL7Ot0vQ41TU1xw0,44
27
+ onestep-0.4.0.dist-info/RECORD,,