Coverage for /pythoncovmergedfiles/medio/medio/src/pdfminer.six/pdfminer/casting.py: 100%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

54 statements  

1import itertools 

2from typing import Any, Optional, Tuple 

3 

4from pdfminer.utils import Matrix, Rect 

5 

6_FloatTriple = Tuple[float, float, float] 

7_FloatQuadruple = Tuple[float, float, float, float] 

8 

9 

10def safe_int(o: Any) -> Optional[int]: 

11 try: 

12 return int(o) 

13 except (TypeError, ValueError): 

14 return None 

15 

16 

17def safe_float(o: Any) -> Optional[float]: 

18 try: 

19 return float(o) 

20 except (TypeError, ValueError, OverflowError): 

21 return None 

22 

23 

24def safe_matrix(a: Any, b: Any, c: Any, d: Any, e: Any, f: Any) -> Optional[Matrix]: 

25 a_f = safe_float(a) 

26 b_f = safe_float(b) 

27 c_f = safe_float(c) 

28 d_f = safe_float(d) 

29 e_f = safe_float(e) 

30 f_f = safe_float(f) 

31 

32 if ( 

33 a_f is None 

34 or b_f is None 

35 or c_f is None 

36 or d_f is None 

37 or e_f is None 

38 or f_f is None 

39 ): 

40 return None 

41 

42 return a_f, b_f, c_f, d_f, e_f, f_f 

43 

44 

45def safe_rgb(r: Any, g: Any, b: Any) -> Optional[Tuple[float, float, float]]: 

46 return _safe_float_triple(r, g, b) 

47 

48 

49def safe_cmyk( 

50 c: Any, m: Any, y: Any, k: Any 

51) -> Optional[Tuple[float, float, float, float]]: 

52 return _safe_float_quadruple(c, m, y, k) 

53 

54 

55def safe_rect_list(value: Any) -> Optional[Rect]: 

56 try: 

57 values = list(itertools.islice(value, 4)) 

58 except TypeError: 

59 return None 

60 

61 if len(values) != 4: 

62 return None 

63 

64 return safe_rect(*values) 

65 

66 

67def safe_rect(a: Any, b: Any, c: Any, d: Any) -> Optional[Rect]: 

68 return _safe_float_quadruple(a, b, c, d) 

69 

70 

71def _safe_float_triple(a: Any, b: Any, c: Any) -> Optional[_FloatTriple]: 

72 a_f = safe_float(a) 

73 b_f = safe_float(b) 

74 c_f = safe_float(c) 

75 

76 if a_f is None or b_f is None or c_f is None: 

77 return None 

78 

79 return a_f, b_f, c_f 

80 

81 

82def _safe_float_quadruple(a: Any, b: Any, c: Any, d: Any) -> Optional[_FloatQuadruple]: 

83 a_f = safe_float(a) 

84 b_f = safe_float(b) 

85 c_f = safe_float(c) 

86 d_f = safe_float(d) 

87 

88 if a_f is None or b_f is None or c_f is None or d_f is None: 

89 return None 

90 

91 return a_f, b_f, c_f, d_f