Created
August 13, 2023 14:46
-
-
Save alexanderankin/a4c4a711d8247c8d05dd1521a1011084 to your computer and use it in GitHub Desktop.
using vanilla python to parse azure rest api stuff to dataclasses
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import dataclasses | |
| import json | |
| def default_dataclass_init_method(self, kwargs): | |
| for fi in dataclasses.fields(self): | |
| value = kwargs.get(fi.name, fi.default) | |
| if value == dataclasses.MISSING: | |
| if fi.default_factory == dataclasses.MISSING: | |
| raise ValueError('missing field ' + fi.name + ' and no default/factory') | |
| value = fi.default_factory() | |
| setattr(self, fi.name, value) | |
| ODATA_ = '@odata.' | |
| def default_dataclass_odata_azure_stuff(self, kwargs): | |
| fixed = {k[len(ODATA_):]: kwargs.pop(k) for k in list(kwargs.keys()) if k.startswith(ODATA_)} | |
| kwargs.update(fixed) | |
| default_dataclass_init_method(self, kwargs) | |
| @dataclasses.dataclass | |
| class Example: | |
| my_field: str # = dataclasses.field(default=None) | |
| nextLink: str = None | |
| def __init__(self, **kwargs): | |
| default_dataclass_odata_azure_stuff(self, kwargs) | |
| def __post_init__(self): | |
| print(self) | |
| def main(): | |
| dc_input = '{"@odata.nextLink":"abc","my_field":null}' | |
| e_input = json.loads(dc_input) | |
| e = Example(**e_input) | |
| print(e) | |
| if __name__ == '__main__': | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment