Coverage for functions \ flipdare \ search \ core \ filter \ friend_filter.py: 97%

32 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 TYPE_CHECKING, override 

15from flipdare.generated.schema.search.friend_document_schema import FriendDocumentKey 

16from flipdare.search.core.filter._complex_filter import ComplexFilter, Relationship 

17from flipdare.search.core.filter._simple_filter import FilterType, SimpleFilter 

18 

19if TYPE_CHECKING: 

20 

21 from flipdare.search.db.app_friend_search import AppFriendSearch 

22 

23__all__ = ["SimpleFriendFilter", "ComplexFriendFilter", "FriendFilterDict"] 

24 

25 

26type FriendFilterDict = dict[FriendDocumentKey, FilterType] 

27 

28 

29class SimpleFriendFilter(SimpleFilter[FriendDocumentKey]): 

30 def __init__( 

31 self, 

32 uid: str, 

33 filters: FriendFilterDict | None = None, 

34 ) -> None: 

35 all_filters: FriendFilterDict = {FriendDocumentKey.UID: uid} 

36 if filters: 

37 for key, value in filters.items(): 

38 all_filters[key] = value 

39 

40 super().__init__(filters=all_filters) 

41 self._uid = uid 

42 

43 @property 

44 def uid(self) -> str: 

45 return self._uid 

46 

47 

48class ComplexFriendFilter(ComplexFilter[FriendDocumentKey]): 

49 def __init__( 

50 self, 

51 uid: str, 

52 relationship: Relationship | None = None, 

53 filters: FriendFilterDict | None = None, 

54 exclude_uid: bool = False, 

55 ) -> None: 

56 all_filters: FriendFilterDict = {} if exclude_uid else {FriendDocumentKey.UID: uid} 

57 if filters: 

58 for key, value in filters.items(): 

59 all_filters[key] = value 

60 

61 super().__init__(relationship=relationship, filters=all_filters) 

62 self._uid = uid 

63 

64 @property 

65 @override 

66 def uid(self) -> str: 

67 return self._uid 

68 

69 @override 

70 def _prepare(self, friend_search: "AppFriendSearch") -> None: 

71 return None