@@ -22,6 +22,11 @@ def element(self):
2222 """Return element based on XML generated by builder"""
2323 return oxml_fromstring (self .xml )
2424
25+ def with_indent (self , indent ):
26+ """Add integer *indent* spaces at beginning of element XML"""
27+ self ._indent = indent
28+ return self
29+
2530
2631class CT_DefaultBuilder (BaseBuilder ):
2732 """
@@ -49,14 +54,27 @@ class CT_OverrideBuilder(BaseBuilder):
4954 def __init__ (self ):
5055 """Establish instance variables with default values"""
5156 self ._content_type = 'app/vnd.type'
57+ self ._indent = 0
5258 self ._namespace = ' xmlns="%s"' % NS .OPC_CONTENT_TYPES
5359 self ._partname = '/part/name.xml'
5460
61+ def with_content_type (self , content_type ):
62+ """Set ContentType attribute to *content_type*"""
63+ self ._content_type = content_type
64+ return self
65+
66+ def with_partname (self , partname ):
67+ """Set PartName attribute to *partname*"""
68+ self ._partname = partname
69+ return self
70+
5571 @property
5672 def xml (self ):
5773 """Return Override element"""
58- tmpl = '<Override%s PartName="%s" ContentType="%s"/>\n '
59- return tmpl % (self ._namespace , self ._partname , self ._content_type )
74+ tmpl = '%s<Override%s PartName="%s" ContentType="%s"/>\n '
75+ indent = ' ' * self ._indent
76+ return tmpl % (indent , self ._namespace , self ._partname ,
77+ self ._content_type )
6078
6179
6280class CT_RelationshipBuilder (BaseBuilder ):
@@ -86,6 +104,34 @@ def xml(self):
86104 self ._target , self .target_mode )
87105
88106
107+ class CT_TypesBuilder (BaseBuilder ):
108+ """
109+ Test data builder for CT_Types (<Types>) XML element, the root element in
110+ [Content_Types].xml files
111+ """
112+ def __init__ (self ):
113+ """Establish instance variables with default values"""
114+ self ._overrides = (
115+ ('/docProps/core.xml' , 'app/vnd.type1' ),
116+ ('/ppt/presentation.xml' , 'app/vnd.type2' ),
117+ ('/docProps/thumbnail.jpeg' , 'image/jpeg' ),
118+ )
119+
120+ @property
121+ def xml (self ):
122+ """
123+ Return XML string based on settings accumulated via method calls
124+ """
125+ xml = '<Types xmlns="%s">\n ' % NS .OPC_CONTENT_TYPES
126+ for partname , content_type in self ._overrides :
127+ xml += (an_Override ().with_partname (partname )
128+ .with_content_type (content_type )
129+ .with_indent (2 )
130+ .xml )
131+ xml += '</Types>\n '
132+ return xml
133+
134+
89135def a_Default ():
90136 """Return a CT_DefaultBuilder instance"""
91137 return CT_DefaultBuilder ()
@@ -99,3 +145,8 @@ def an_Override():
99145def a_Relationship ():
100146 """Return a CT_RelationshipBuilder instance"""
101147 return CT_RelationshipBuilder ()
148+
149+
150+ def a_Types ():
151+ """Return a CT_TypesBuilder instance"""
152+ return CT_TypesBuilder ()
0 commit comments