Coverage for functions \ flipdare \ generated \ util \ model_util.py: 93%

30 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-05-08 12:22 +1000

1#!/usr/bin/env python 

2# Copyright (c) 2026 Flipdare Pty Ltd. All rights reserved. 

3# 

4# This file is part of Flipdare's proprietary software and contains 

5# confidential and copyrighted material. Unauthorised copying, 

6# modification, distribution, or use of this file is strictly 

7# prohibited without prior written permission from Flipdare Pty Ltd. 

8# 

9# This software includes third-party components licensed under MIT, 

10# BSD, and Apache 2.0 licences. See THIRD_PARTY_NOTICES for details. 

11# 

12 

13 

14from typing import Any 

15from flipdare.app_log import LOG 

16from flipdare.generated.shared.model.model_obj_type import ModelObjType 

17from flipdare.wrapper._persisted_wrapper import PersistedWrapper 

18from flipdare.wrapper.persisted_guard import PersistedGuard 

19 

20 

21class ModelUtil[T: PersistedWrapper[Any]]: 

22 

23 def __init__(self, wrapper: T) -> None: 

24 self.wrapper = wrapper 

25 

26 @property 

27 def model_name(self) -> str: 

28 """Get the model name for logging purposes.""" 

29 wrapper = self.wrapper 

30 

31 model_class = wrapper.MODEL_CLASS 

32 return model_class.__name__ if model_class else type(wrapper).__name__ 

33 

34 def get_uid_if_exists(self) -> str | None: 

35 wrapper = self.wrapper 

36 

37 if PersistedGuard.is_user(wrapper): 

38 # for user wrappers doc_id is uid 

39 return wrapper.doc_id 

40 

41 # for most wrappers, uid is the field we want 

42 uid = getattr(wrapper, "uid", None) 

43 if uid is not None: 

44 return str(uid) 

45 

46 # for dares/payment issues 

47 # NOTE: this needs to be before "obj_id"/"obj_type" check because 

48 # NOTE: dares/issues also have those fields but they don't represent users. 

49 from_uid = getattr(wrapper, "from_uid", None) 

50 if from_uid is not None: 

51 return str(from_uid) 

52 

53 obj_id = getattr(wrapper, "obj_id", None) 

54 obj_type = getattr(wrapper, "obj_type", None) 

55 if (obj_id is not None and obj_type is not None) and (obj_type == ModelObjType.USER): 

56 # for objects with obj_id/obj_type, 

57 # if obj_id is a uid, obj_type will be ModelObjType.USER 

58 return str(obj_id) 

59 

60 # this wrapper doesn't have a uid! 

61 msg = f"Wrapper {self.model_name} does not have a uid field. Returning None for uid." 

62 LOG().warning(msg) 

63 return None