У меня есть несколько лямбда-выражений AWS, написанных на python, где я возвращаю классы данных python, которые маршалируются в словари, а затем возвращаются для перевода в graphql с помощью appsync. Схема graphql, определенная (не мной), немного полиморфна. Например, в одном случае объект, который я намереваюсь вернуть, представляет собой UserProfile
, а схема graphql определяет следующее:
union ProfileContext = UserProfile | PublicUserProfile
(Есть также вложенные экземпляры этого). Чтобы вернуть это, appsync требует, чтобы словарь, который я передаю ему, описывающий ProfileContext
, имел атрибут __typename
. Моим первым побуждением было следующее:
@dataclass
class UserProfile:
...
@property
def __typename(self):
return 'UserProfiles'
Но, конечно же, я столкнулся с магией дандера Python, и свойство на самом деле получило имя _UserProfile__typename
. Есть ли способ дать объекту python свойство, которое на самом деле называется __typename
? (В основном обход магии dunder, чтобы сделать appsync счастливым)
Если нет, мне придется вручную перемещаться по деревьям объектов после десортировки или создавать какой-то пользовательский демаршаллер, используя что-то вроде зефира.