Comments (4)
In your example, MResult
is a Union of Missing
and Result
which means you have to return an instance of Missing
, not the type itself. But then refining the type on the caller side will be hard.
The scenario you showed is called a "sentinel value", and there is an open issue for supporting it in python typing: python/typing#689 . The current approach is to use an enum with one value:
class Missing(Enum):
MISSING = 0
def foo(value: bool) -> int | Literal[Missing.MISSING]:
if value:
return Missing.MISSING
return 5
from dramatiq.
Oh sorry, I think in that case
MResult = typing.Union[type(Missing), Result]
should work.
from dramatiq.
type[Missing]
kinda would but then you can't use it with Literal
, and literal types allow better type refining, especially for override. FOr instance, your example can be rewritten as:
@override
def foo(value: Literal[True] -> Literal[Missing.MISSING]: ...
def foo(value: Literal[False] -> int: ...
def foo(value: bool) -> int | Literal[Missing.MISSING]:
if value:
return Missing.MISSING
return 5
In that case, if I call foo(False)
, mypy will know that I won't get missing result, only int. Maybe this example doesn't give enough justice to that scenario, though, it plays a bit better with argument types rather than return types. You can find more examples in the issue I linked above.
from dramatiq.
I just wanted to suggest a minor adjustment to the existing code, and tried to be as compatible with the existing approach as possible.
Unfortunately I donβt have the bandwidth at the moment to refactor more of the code to add proper typing, and there are other issues which discuss that, e.g.
from dramatiq.
Related Issues (20)
- Missing OpenTelemetry instrumentation HOT 3
- Having bizarre issues with custom pytest fixture
- Inconsistent `/tmp` path setup for Prometheus middleware. HOT 1
- Dramatiq workers hangs very often, no logs were seen in logs even if it is verbose mode. HOT 4
- Add an actor decorator argument to compute backoff time using a function HOT 3
- New release HOT 2
- why not aio-pika? HOT 2
- CurrentMessage don't work with AsyncIO
- Python 3.12 build support HOT 1
- Misleading docs for integration with apscheduler
- Result middleware should read message options first HOT 2
- CLI: Allow watching custom include / exclude patterns [feature-request] HOT 2
- Document asyncio support HOT 4
- Unhandled error during post_process_message HOT 1
- Is using lazy_loader a good idea - integrating dramatiq into django, flask, cement and others HOT 3
- When running in --watch mode there are memory leak warnings
- Using gevent.monkey.patch_all() will cause socket warnings and breaks --watch HOT 1
- Modify default middleware options for a newly created broker instance HOT 1
- Dramatiq retry sends more retries instead of max 3 that are configured
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 dramatiq.