Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/openpyxl/styles/borders.py: 82%

66 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1# Copyright (c) 2010-2022 openpyxl 

2 

3from openpyxl.compat import safe_string 

4from openpyxl.descriptors import ( 

5 NoneSet, 

6 Typed, 

7 Bool, 

8 Alias, 

9 Sequence, 

10 Integer, 

11) 

12from openpyxl.descriptors.serialisable import Serialisable 

13 

14from .colors import ColorDescriptor 

15 

16 

17BORDER_NONE = None 

18BORDER_DASHDOT = 'dashDot' 

19BORDER_DASHDOTDOT = 'dashDotDot' 

20BORDER_DASHED = 'dashed' 

21BORDER_DOTTED = 'dotted' 

22BORDER_DOUBLE = 'double' 

23BORDER_HAIR = 'hair' 

24BORDER_MEDIUM = 'medium' 

25BORDER_MEDIUMDASHDOT = 'mediumDashDot' 

26BORDER_MEDIUMDASHDOTDOT = 'mediumDashDotDot' 

27BORDER_MEDIUMDASHED = 'mediumDashed' 

28BORDER_SLANTDASHDOT = 'slantDashDot' 

29BORDER_THICK = 'thick' 

30BORDER_THIN = 'thin' 

31 

32 

33class Side(Serialisable): 

34 

35 """Border options for use in styles. 

36 Caution: if you do not specify a border_style, other attributes will 

37 have no effect !""" 

38 

39 __fields__ = ('style', 

40 'color') 

41 

42 color = ColorDescriptor(allow_none=True) 

43 style = NoneSet(values=('dashDot','dashDotDot', 'dashed','dotted', 

44 'double','hair', 'medium', 'mediumDashDot', 'mediumDashDotDot', 

45 'mediumDashed', 'slantDashDot', 'thick', 'thin') 

46 ) 

47 border_style = Alias('style') 

48 

49 def __init__(self, style=None, color=None, border_style=None): 

50 if border_style is not None: 50 ↛ 51line 50 didn't jump to line 51, because the condition on line 50 was never true

51 style = border_style 

52 self.style = style 

53 self.color = color 

54 

55 

56class Border(Serialisable): 

57 """Border positioning for use in styles.""" 

58 

59 tagname = "border" 

60 

61 __fields__ = ('left', 

62 'right', 

63 'top', 

64 'bottom', 

65 'diagonal', 

66 'diagonal_direction', 

67 'vertical', 

68 'horizontal') 

69 __elements__ = ('start', 'end', 'left', 'right', 'top', 'bottom', 

70 'diagonal', 'vertical', 'horizontal') 

71 

72 # child elements 

73 start = Typed(expected_type=Side, allow_none=True) 

74 end = Typed(expected_type=Side, allow_none=True) 

75 left = Typed(expected_type=Side, allow_none=True) 

76 right = Typed(expected_type=Side, allow_none=True) 

77 top = Typed(expected_type=Side, allow_none=True) 

78 bottom = Typed(expected_type=Side, allow_none=True) 

79 diagonal = Typed(expected_type=Side, allow_none=True) 

80 vertical = Typed(expected_type=Side, allow_none=True) 

81 horizontal = Typed(expected_type=Side, allow_none=True) 

82 # attributes 

83 outline = Bool() 

84 diagonalUp = Bool() 

85 diagonalDown = Bool() 

86 

87 def __init__(self, left=None, right=None, top=None, 

88 bottom=None, diagonal=None, diagonal_direction=None, 

89 vertical=None, horizontal=None, diagonalUp=False, diagonalDown=False, 

90 outline=True, start=None, end=None): 

91 self.left = left 

92 self.right = right 

93 self.top = top 

94 self.bottom = bottom 

95 self.diagonal = diagonal 

96 self.vertical = vertical 

97 self.horizontal = horizontal 

98 self.diagonal_direction = diagonal_direction 

99 self.diagonalUp = diagonalUp 

100 self.diagonalDown = diagonalDown 

101 self.outline = outline 

102 self.start = start 

103 self.end = end 

104 

105 def __iter__(self): 

106 for attr in self.__attrs__: 

107 value = getattr(self, attr) 

108 if value and attr != "outline": 

109 yield attr, safe_string(value) 

110 elif attr == "outline" and not value: 

111 yield attr, safe_string(value) 

112 

113DEFAULT_BORDER = Border(left=Side(), right=Side(), top=Side(), bottom=Side(), diagonal=Side())