Coverage for benefits/enrollment/api.py: 100%

16 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-08 19:50 +0000

1import logging 

2from inspect import signature 

3 

4logger = logging.getLogger(__name__) 

5 

6 

7class BaseDataClass: 

8 

9 @classmethod 

10 def from_kwargs(cls, **kwargs): 

11 """ 

12 @classmethod for instantiating a dataclass that allows unexpected fields 

13 

14 See https://stackoverflow.com/a/55101438 

15 """ 

16 # fetch the constructor's signature 

17 class_fields = {field for field in signature(cls).parameters} 

18 

19 # split the kwargs into native ones and new ones 

20 native_args, new_args = {}, {} 

21 for name, val in kwargs.items(): 

22 if name in class_fields: 

23 native_args[name] = val 

24 else: 

25 new_args[name] = val 

26 

27 # use the native ones to create the class ... 

28 instance = cls(**native_args) 

29 

30 # ... and log any unexpected args 

31 for new_name, new_val in new_args.items(): 

32 logger.info(f"Unexpected arg parsing response for {cls}: {new_name} = {new_val}") 

33 

34 return instance