Skip to content

Instantly share code, notes, and snippets.

@zopyx
Created October 19, 2022 13:26
Show Gist options
  • Save zopyx/be12744a42f6bf376460fad1c0309412 to your computer and use it in GitHub Desktop.
Save zopyx/be12744a42f6bf376460fad1c0309412 to your computer and use it in GitHub Desktop.
from pydantic import BaseModel
from typeguard import typechecked
from class_registry import ClassRegistry
import abc
AccountDataConverter= ClassRegistry()
class AccountData(BaseModel):
first_name: str
last_name: str
class Config:
validate_assignment = True
allow_mutation = False
validate_all = True
extra = "forbid"
class AbstractAccountDataConverter(abc.ABC):
""" Abstract data converter for account data """
@abc.abstractmethod
def adapt(self, sf_data: dict) -> AccountData:
""" abstract method """
@AccountDataConverter.register('Salesforce::Account')
class SalesForceAccountDataConverter(AbstractAccountDataConverter):
@typechecked
def adapt(self, sf_data: dict) -> AccountData:
return AccountData(
first_name = sf_data["first"],
last_name = sf_data["last"],
)
@AccountDataConverter.register('Excel::Trash')
class ExcelAccountDataConverter(AbstractAccountDataConverter):
@typechecked
def adapt(self, sf_data: dict) -> AccountData:
return AccountData(
first_name = sf_data["fname"],
last_name = sf_data["lname"],
)
sf_data = {
"first": "Heinz",
"last": "Becker",
}
excel_data = {
"fname": "Hilde",
"lname": "Jung",
}
converter = AccountDataConverter["Salesforce::Account"]
adapted = converter.adapt(sf_data)
print(adapted)
converter = AccountDataConverter["Excel::Trash"]
adapted = converter.adapt(excel_data)
print(adapted)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment