Skip to content

Commit f0ca094

Browse files
author
Steve Canny
committed
add CT_Override element type
1 parent 592f3c0 commit f0ca094

3 files changed

Lines changed: 56 additions & 1 deletion

File tree

opc/oxml.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,28 @@ def extension(self):
8888
return self.get('Extension')
8989

9090

91+
class CT_Override(OxmlBaseElement):
92+
"""
93+
``<Override>`` element, specifying the content type to be applied for a
94+
part with the specified partname.
95+
"""
96+
@property
97+
def content_type(self):
98+
"""
99+
String held in the ``ContentType`` attribute of this ``<Override>``
100+
element.
101+
"""
102+
return self.get('ContentType')
103+
104+
@property
105+
def partname(self):
106+
"""
107+
String held in the ``PartName`` attribute of this ``<Override>``
108+
element.
109+
"""
110+
return self.get('PartName')
111+
112+
91113
class CT_Relationship(OxmlBaseElement):
92114
"""
93115
``<Relationship>`` element, representing a single relationship from a
@@ -129,5 +151,7 @@ def target_mode(self):
129151

130152
ct_namespace = element_class_lookup.get_namespace(nsmap['ct'])
131153
ct_namespace['Default'] = CT_Default
154+
ct_namespace['Override'] = CT_Override
155+
132156
pr_namespace = element_class_lookup.get_namespace(nsmap['pr'])
133157
pr_namespace['Relationship'] = CT_Relationship

tests/test_oxml.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from opc.constants import RELATIONSHIP_TARGET_MODE as RTM
1313

14-
from .unitdata import a_Default, a_Relationship
14+
from .unitdata import a_Default, an_Override, a_Relationship
1515

1616

1717
class DescribeCT_Default(object):
@@ -22,6 +22,14 @@ def it_provides_read_access_to_xml_values(self):
2222
assert default.content_type == 'application/xml'
2323

2424

25+
class DescribeCT_Override(object):
26+
27+
def it_provides_read_access_to_xml_values(self):
28+
override = an_Override().element
29+
assert override.partname == '/part/name.xml'
30+
assert override.content_type == 'app/vnd.type'
31+
32+
2533
class DescribeCT_Relationship(object):
2634

2735
def it_provides_read_access_to_xml_values(self):

tests/unitdata.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,24 @@ def xml(self):
4141
return tmpl % (self._namespace, self._extension, self._content_type)
4242

4343

44+
class CT_OverrideBuilder(BaseBuilder):
45+
"""
46+
Test data builder for CT_Override (Override) XML element that appears in
47+
`[Content_Types].xml`.
48+
"""
49+
def __init__(self):
50+
"""Establish instance variables with default values"""
51+
self._content_type = 'app/vnd.type'
52+
self._namespace = ' xmlns="%s"' % NS.OPC_CONTENT_TYPES
53+
self._partname = '/part/name.xml'
54+
55+
@property
56+
def xml(self):
57+
"""Return Override element"""
58+
tmpl = '<Override%s PartName="%s" ContentType="%s"/>\n'
59+
return tmpl % (self._namespace, self._partname, self._content_type)
60+
61+
4462
class CT_RelationshipBuilder(BaseBuilder):
4563
"""
4664
Test data builder for CT_Relationship (Relationship) XML element that
@@ -73,6 +91,11 @@ def a_Default():
7391
return CT_DefaultBuilder()
7492

7593

94+
def an_Override():
95+
"""Return a CT_OverrideBuilder instance"""
96+
return CT_OverrideBuilder()
97+
98+
7699
def a_Relationship():
77100
"""Return a CT_RelationshipBuilder instance"""
78101
return CT_RelationshipBuilder()

0 commit comments

Comments
 (0)