onestep 0.3.81__tar.gz → 0.4.0__tar.gz

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.

Files changed (26) hide show
  1. {onestep-0.3.81 → onestep-0.4.0}/PKG-INFO +1 -1
  2. {onestep-0.3.81 → onestep-0.4.0}/pyproject.toml +1 -1
  3. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/__init__.py +1 -3
  4. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/onestep.py +1 -0
  5. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/retry.py +24 -0
  6. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/worker.py +43 -27
  7. {onestep-0.3.81 → onestep-0.4.0}/README.md +0 -0
  8. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/_utils.py +0 -0
  9. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/__init__.py +0 -0
  10. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/base.py +0 -0
  11. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/cron.py +0 -0
  12. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/memory.py +0 -0
  13. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/rabbitmq.py +0 -0
  14. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/redis/__init__.py +0 -0
  15. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/redis/pubsub.py +0 -0
  16. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/redis/stream.py +0 -0
  17. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/broker/webhook.py +0 -0
  18. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/cli.py +0 -0
  19. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/exception.py +0 -0
  20. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/message.py +0 -0
  21. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/middleware/__init__.py +0 -0
  22. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/middleware/base.py +0 -0
  23. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/middleware/config.py +0 -0
  24. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/middleware/unique.py +0 -0
  25. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/signal.py +0 -0
  26. {onestep-0.3.81 → onestep-0.4.0}/src/onestep/state.py +0 -0
@@ -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,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "onestep"
3
- version = "0.3.81"
3
+ version = "0.4.0"
4
4
  description = ""
5
5
  authors = ["miclon <jcnd@163.com>"]
6
6
  readme = "README.md"
@@ -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'
@@ -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:
@@ -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):
@@ -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}>"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes