Skip to content

Commit b748339

Browse files
authored
Merge pull request #344 from Aniket-Pradhan/master
This PR was a really big help, thanks a lot!
2 parents 3ebada5 + 48e55a2 commit b748339

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

odml/tools/odmlparser.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
9298
class 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

Comments
 (0)