Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/prompt_toolkit/clipboard/base.py: 67%

39 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-20 06:09 +0000

1""" 

2Clipboard for command line interface. 

3""" 

4from __future__ import annotations 

5 

6from abc import ABCMeta, abstractmethod 

7from typing import Callable 

8 

9from prompt_toolkit.selection import SelectionType 

10 

11__all__ = [ 

12 "Clipboard", 

13 "ClipboardData", 

14 "DummyClipboard", 

15 "DynamicClipboard", 

16] 

17 

18 

19class ClipboardData: 

20 """ 

21 Text on the clipboard. 

22 

23 :param text: string 

24 :param type: :class:`~prompt_toolkit.selection.SelectionType` 

25 """ 

26 

27 def __init__( 

28 self, text: str = "", type: SelectionType = SelectionType.CHARACTERS 

29 ) -> None: 

30 self.text = text 

31 self.type = type 

32 

33 

34class Clipboard(metaclass=ABCMeta): 

35 """ 

36 Abstract baseclass for clipboards. 

37 (An implementation can be in memory, it can share the X11 or Windows 

38 keyboard, or can be persistent.) 

39 """ 

40 

41 @abstractmethod 

42 def set_data(self, data: ClipboardData) -> None: 

43 """ 

44 Set data to the clipboard. 

45 

46 :param data: :class:`~.ClipboardData` instance. 

47 """ 

48 

49 def set_text(self, text: str) -> None: # Not abstract. 

50 """ 

51 Shortcut for setting plain text on clipboard. 

52 """ 

53 self.set_data(ClipboardData(text)) 

54 

55 def rotate(self) -> None: 

56 """ 

57 For Emacs mode, rotate the kill ring. 

58 """ 

59 

60 @abstractmethod 

61 def get_data(self) -> ClipboardData: 

62 """ 

63 Return clipboard data. 

64 """ 

65 

66 

67class DummyClipboard(Clipboard): 

68 """ 

69 Clipboard implementation that doesn't remember anything. 

70 """ 

71 

72 def set_data(self, data: ClipboardData) -> None: 

73 pass 

74 

75 def set_text(self, text: str) -> None: 

76 pass 

77 

78 def rotate(self) -> None: 

79 pass 

80 

81 def get_data(self) -> ClipboardData: 

82 return ClipboardData() 

83 

84 

85class DynamicClipboard(Clipboard): 

86 """ 

87 Clipboard class that can dynamically returns any Clipboard. 

88 

89 :param get_clipboard: Callable that returns a :class:`.Clipboard` instance. 

90 """ 

91 

92 def __init__(self, get_clipboard: Callable[[], Clipboard | None]) -> None: 

93 self.get_clipboard = get_clipboard 

94 

95 def _clipboard(self) -> Clipboard: 

96 return self.get_clipboard() or DummyClipboard() 

97 

98 def set_data(self, data: ClipboardData) -> None: 

99 self._clipboard().set_data(data) 

100 

101 def set_text(self, text: str) -> None: 

102 self._clipboard().set_text(text) 

103 

104 def rotate(self) -> None: 

105 self._clipboard().rotate() 

106 

107 def get_data(self) -> ClipboardData: 

108 return self._clipboard().get_data()