У меня есть функция, которая получает несколько различных json строковых объектов с различной структурой и / или именами полей, например:
event = '{"userId": "TDQIQb2fQaORKvCyepDYoZgsoEE3", "profileIsCreated": true}'
или
event = '{"userId": "TDQIQb2fQaORKvCyepDYoZgsoEE3", "signUpFinished": true}'
И у меня есть классы данных примерно так:
from dataclasses import dataclass, field
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(frozen=True)
class UserId:
userId: str
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(frozen=True)
class SignUpFinished(UserId):
signUpFinished: bool
@dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass(frozen=True)
class UserProfileCreated(UserId):
profileIsCreated: bool
В настоящее время способ написания моей функции выглядит следующим образом:
def cast_event(event):
user_details = None
try:
user_details = SignUpFinished.from_json(event)
except KeyError:
pass
try:
user_details = UserProfileCreated.from_json(event)
except KeyError:
pass
if user_details:
return "OK"
else:
return "UNHANDLED"
Проблема в том, что мне нужно обрабатывать все больше и больше событий, мой функция будет становиться все дольше и дольше, однако она будет делать только одно и то же.
Есть ли лучший способ достичь того, чего я хочу достичь?
Я проверил некоторые вопросов SO:
но они, похоже, не лучший способ добиться того, чего я хочу.