Comments (1)
After trying an implementation for this, we come to realize that it doesn't make a lot of sense.
It is actually weird to call receive()
and get an exception that is triggered from the other end and it is not really a problem with receive()
itself. When we thought about this feature, we were thinking about the PowerDistributor
Response
s:
But the problem with that response is that many response types are condensed into one class. What users should (probably) do instead is having a response class hierarchy or using type unions and have different response types as different Python types. For example:
Response = Union[Success, Ignored, Failure, ...]
Or
classDiagram
Response <|-- Success
Response <|-- Error
Error <|-- OutOfBounds
Response <|-- Ignored
Response <|-- Failure
The channel then can have type Response
, and when receiving responses, for older Python versions isinstance()
can be used. For Python 3.10+ the match
statement is the perfect fit for this:
match await receiver.receive():
case Success:
# all good
case (Failure as failure):
# Use failure
case Error(error_message=msg):
print(f"Error received: {msg}")
...
case _:
# Unknown response!
from frequenz-channels-python.
Related Issues (20)
- Improve composability of receivers HOT 4
- `FileWatcher` should expose more `awatch` configuration options
- Write introductory documentation
- Many class attributes should be private or read-only
- Consolidate and make channels `name`s (`client_id` / `service_id`) optional
- Remove `Peekable`
- Remove `Bidirectional`
- Remove `MergeNamed`
- Expose `Merge` as a `merge()` function
- `Receiver.map()` doesn't preserve the original receiver's type HOT 8
- Backport timer `reset()` fix to v0.16 HOT 2
- `Timer`: Remove `periodic()` and `timeout()`
- Filewatcher is not reporting events in CIFS mounts HOT 3
- Documentation and code cleanup for 1.0 HOT 1
- Remove uses of `BaseException`
- Find a way to make using select less likely to starve a receiver HOT 1
- Channel that doesn't remove the oldest messages when receiver buffer is full HOT 2
- Implement `SyncSender` and `AsyncSender` HOT 5
- Add a periodic timer
- Refactor event type and initialization in FileWatcher
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from frequenz-channels-python.