Created
July 14, 2021 16:52
-
-
Save Object905/3a206d524dd061f3540a70c564d2fe43 to your computer and use it in GitHub Desktop.
This file contains 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 strawberry | |
def filter_unset_input(input): | |
result = {} | |
for key in input.__annotations__.keys(): | |
value = getattr(input, key) | |
if value != strawberry.arguments.UNSET: | |
result[key] = value | |
return result | |
def make_ordering_enum(name, fields: Sequence[str]): | |
# then you order_by(enum._value_) | |
ordering_variants = [] | |
for field_name in fields: | |
ordering_variants.append((field_name.upper() + "_ASC", field_name)) | |
ordering_variants.append((field_name.upper() + "_DESC", "-" + field_name)) | |
return strawberry.enum(Enum(name, ordering_variants)) | |
def _parse_money_scalar(raw: Union[dict, str]): | |
if isinstance(raw, dict): | |
return DjMoney(raw["amount"], raw["currency"]) | |
if isinstance(raw, str): | |
spl = raw.split(" ") | |
return DjMoney(Decimal(spl[0]), spl[1]) | |
return NotImplemented | |
MoneyScalar = strawberry.scalar( | |
DjMoney, | |
serialize=lambda money: {"amount": money.amount, "currency": money.currency.code}, | |
parse_value=_parse_money_scalar, | |
description="Money type for Django-money package. " | |
"When used as query input can be in two forms: " | |
'either `{"amount": 1.5, "currency": "USD"}`' | |
'or as a string with space separated amount and currency `"1.5 USD"`.' | |
"For responses first variant is used.", | |
) | |
from strawberry_django.types import field_type_map | |
def fix_strawberry_django(): | |
field_type_map[ImageField] = str | |
field_type_map[MoneyField] = MoneyScalar | |
field_type_map[CurrencyField] = Currency |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment