@@ -77,6 +77,7 @@ def to_string(self, odml_document):
77
77
'odml-version' : FORMAT_VERSION }
78
78
79
79
if self .parser == 'YAML' :
80
+ yaml .add_representer (datetime .time , YAMLTimeSerializer )
80
81
string_doc = yaml .dump (odml_output , default_flow_style = False )
81
82
elif self .parser == 'JSON' :
82
83
string_doc = json .dumps (odml_output , indent = 4 ,
@@ -88,6 +89,11 @@ def to_string(self, odml_document):
88
89
return string_doc
89
90
90
91
92
+ # Required to serialize datetime.time as string objects
93
+ def YAMLTimeSerializer (dumper , data ):
94
+ return dumper .represent_scalar ('tag:yaml.org,2002:str' , str (data ))
95
+
96
+
91
97
# Required to serialize datetime values with JSON.
92
98
class JSONDateTimeSerializer (json .JSONEncoder ):
93
99
def default (self , o ):
@@ -133,7 +139,10 @@ def from_file(self, file, doc_format=None):
133
139
elif self .parser == 'YAML' :
134
140
with open (file ) as yaml_data :
135
141
try :
136
- self .parsed_doc = yaml .load (yaml_data )
142
+ yaml .SafeLoader .add_constructor (
143
+ "tag:yaml.org,2002:python/unicode" ,
144
+ UnicodeLoaderConstructor )
145
+ self .parsed_doc = yaml .safe_load (yaml_data )
137
146
except yaml .parser .ParserError as err :
138
147
print (err )
139
148
return
@@ -173,7 +182,7 @@ def from_string(self, string, doc_format=None):
173
182
174
183
elif self .parser == 'YAML' :
175
184
try :
176
- self .parsed_doc = yaml .load (string )
185
+ self .parsed_doc = yaml .safe_load (string )
177
186
except yaml .parser .ParserError as err :
178
187
print (err )
179
188
return
@@ -197,3 +206,9 @@ def from_string(self, string, doc_format=None):
197
206
198
207
self .doc = RDFReader ().from_string (string , doc_format )
199
208
return self .doc
209
+
210
+
211
+ # Constructor for PyYAML to load unicode characters
212
+ # Needed only for < Python 3
213
+ def UnicodeLoaderConstructor (loader , node ):
214
+ return node .value
0 commit comments