Comments (2)
Hi @GuyKh
ResponseWithDescriptor[T].from_dict
is equal to ResponseWithDescriptor.from_dict
at runtime due to type erasure (this is how generic types work in Python). In your example, you just call from_dict
, which belongs to ResponseWithDescriptor[Any]
, so to speak.
if you look at how does it work, you will see that method from_dict
is compiled and set as attribute to your class. You have only one class here — ResponseWithDescriptor
. It’s not possible to set an attribute to ResponseWithDescriptor[T]
because at runtime it’s the same type.
I can see different options for you:
- Create a subclass of
ResponseWithDescriptor
withT
replaced by something specific (see example) - Use
ResponseWithDescriptor[T]
as a field type in another generic dataclass with parameterT
that will be parametrized later (as above) - Use codecs instead of mixins
from mashumaro.codecs import BasicDecoder
data_type_1_decoder = BasicDecoder(ResponseWithDescriptor[DataType1])
# create and reuse this decoder, because it’s expensive to create it from scratch each time you need it
data_type_1_decoder.decode({…})
from mashumaro.
@Fatal1ty works like a charm.
I took the 3rd option, creating for every DataType a member of the class (decoder):
// Contract.py
decoder = BasicDecoder(ResponseWithDescriptor[Contracts])
And then using it as follows:
from contract import Contract, Contracts
from contract import decoder as contract_decoder
...
def get_default_contract(token: JWT, bp_number: str) -> Contract:
return _get_response_with_descriptor(token, url, contract_decoder)
...
def _get_response_with_descriptor(jwt_token: JWT, request_url: str,
decoder: BasicDecoder[ResponseWithDescriptor[T]]) -> T:
...
return decoder.decode(response.json())
Thank you for this quick response - especially with the broad option range. Truly appreciated
from mashumaro.
Related Issues (20)
- Can immutable dataclasses be hashed as dictionary keys? HOT 4
- Add an option to omit values equal to defaults on serialization
- Add an option to avoid collection data types copying
- Add support for LiteralString
- Generic dataclasses with Hashable typevar bound do not work HOT 3
- Query string support HOT 5
- Benchmark is not working in master branch HOT 2
- omit_default=True evaluates default_factory value at declaration time which can cause a circular reference HOT 3
- Multiple aliases for field HOT 6
- "`dict[str, T]` as a field type is not supported" HOT 2
- InitVar with no default value HOT 6
- The types defined inside the function result in syntactically invalid generated code
- Allow for more complex logic for subclass Discrimnator field matching HOT 3
- TypedDicts not working with `from __future__ import annotations` HOT 2
- omit_default breaks IntFlag serialization HOT 1
- Using Union with int/float casts to whichever appears first HOT 3
- Unserializable field in 3.12 if defined as a Generic TypeVar with mixin bounds HOT 6
- Allow propagation of class based discriminator settings to subclasses HOT 3
- Reject extra keys on deserialization HOT 7
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 mashumaro.