@@ -77,6 +77,7 @@ def to_string(self, odml_document):
7777 'odml-version' : FORMAT_VERSION }
7878
7979 if self .parser == 'YAML' :
80+ yaml .add_representer (datetime .time , YAMLTimeSerializer )
8081 string_doc = yaml .dump (odml_output , default_flow_style = False )
8182 elif self .parser == 'JSON' :
8283 string_doc = json .dumps (odml_output , indent = 4 ,
@@ -88,6 +89,11 @@ def to_string(self, odml_document):
8889 return string_doc
8990
9091
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+
9197# Required to serialize datetime values with JSON.
9298class JSONDateTimeSerializer (json .JSONEncoder ):
9399 def default (self , o ):
@@ -133,7 +139,10 @@ def from_file(self, file, doc_format=None):
133139 elif self .parser == 'YAML' :
134140 with open (file ) as yaml_data :
135141 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 )
137146 except yaml .parser .ParserError as err :
138147 print (err )
139148 return
@@ -173,7 +182,7 @@ def from_string(self, string, doc_format=None):
173182
174183 elif self .parser == 'YAML' :
175184 try :
176- self .parsed_doc = yaml .load (string )
185+ self .parsed_doc = yaml .safe_load (string )
177186 except yaml .parser .ParserError as err :
178187 print (err )
179188 return
@@ -197,3 +206,9 @@ def from_string(self, string, doc_format=None):
197206
198207 self .doc = RDFReader ().from_string (string , doc_format )
199208 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