Skip to content

Commit 6055cf3

Browse files
committed
feat: Allow non-string iData values
1 parent 1de49e0 commit 6055cf3

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

src/itoolkit/itoolkit.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ def make(self):
208208
xmli += '<' + self.opt['k']
209209
for k, v in self.opt.items():
210210
if len(k) > 1:
211-
xmli += " " + k + "='" + v + "'"
211+
xmli += " " + k + "='" + str(v) + "'"
212212
xmli += " var='" + self.opt['i'] + "'>"
213213
if len(self.opt['v']) > 0:
214214
xmli += '<![CDATA[' + self.opt['v'] + ']]>'
@@ -620,13 +620,16 @@ class iData (iBase): # noqa N801
620620
621621
For more info on data types you can use, refer to
622622
http://yips.idevcloud.com/wiki/index.php/XMLService/DataTypes
623+
624+
.. versionchanged:: 1.6.3
625+
`ival` now supports non-string parameters.
623626
"""
624627

625628
def __init__(self, ikey, itype, ival, iopt={}):
626629
opts = {
627630
'i': ikey,
628631
'k': 'data',
629-
'v': ival,
632+
'v': str(ival) if ival is not None else "",
630633
'type': itype
631634
}
632635
super(iData, self).__init__(iopt, opts)

tests/test_unit_data.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import xml.etree.ElementTree as ET
2+
3+
from itoolkit import iData
4+
5+
6+
def test_data():
7+
key = 'lljqezl'
8+
datatype = '10a'
9+
value = 'foo'
10+
11+
element = ET.fromstring(iData(key, datatype, value).xml_in())
12+
13+
assert(element.tag == 'data')
14+
assert(element.attrib['var'] == key)
15+
assert(element.attrib['type'] == datatype)
16+
assert(element.text == value)
17+
18+
19+
def test_data_non_str():
20+
key = 'madsn'
21+
datatype = '10i0'
22+
value = 0
23+
24+
element = ET.fromstring(iData(key, datatype, value).xml_in())
25+
26+
assert(element.tag == 'data')
27+
assert(element.attrib['var'] == key)
28+
assert(element.attrib['type'] == datatype)
29+
assert(element.text == str(value))
30+
31+
32+
def test_data_and_options():
33+
key = 'oiujgoihs'
34+
datatype = '10a'
35+
value = 'bar'
36+
opts = {
37+
'dim': 10,
38+
'varying': 'on',
39+
}
40+
41+
element = ET.fromstring(iData(key, datatype, value, opts).xml_in())
42+
assert(element.tag == 'data')
43+
assert(element.attrib['var'] == key)
44+
assert(element.attrib['type'] == datatype)
45+
for k, v in opts.items():
46+
assert(element.attrib[k] == str(v))
47+
assert(element.text == value)

0 commit comments

Comments
 (0)