From e6300b0ee11c8007fec49a900e5e67ce64537c00 Mon Sep 17 00:00:00 2001 From: Aniket Pradhan Date: Sat, 4 Jan 2020 16:54:04 +0530 Subject: [PATCH 1/3] Selected yaml.Loader while reading odml documents --- odml/tools/odmlparser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odml/tools/odmlparser.py b/odml/tools/odmlparser.py index 369b9977..8ee1934a 100644 --- a/odml/tools/odmlparser.py +++ b/odml/tools/odmlparser.py @@ -133,7 +133,7 @@ def from_file(self, file, doc_format=None): elif self.parser == 'YAML': with open(file) as yaml_data: try: - self.parsed_doc = yaml.load(yaml_data) + self.parsed_doc = yaml.load(yaml_data, Loader=yaml.Loader) except yaml.parser.ParserError as err: print(err) return From cf22795f3cf748490cef4ae61b9888f8c29f25ab Mon Sep 17 00:00:00 2001 From: Aniket Pradhan Date: Thu, 16 Jan 2020 12:02:45 +0530 Subject: [PATCH 2/3] Use SafeLoader instead of Loader to load yaml files --- odml/tools/odmlparser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odml/tools/odmlparser.py b/odml/tools/odmlparser.py index 8ee1934a..b57f57b3 100644 --- a/odml/tools/odmlparser.py +++ b/odml/tools/odmlparser.py @@ -133,7 +133,7 @@ def from_file(self, file, doc_format=None): elif self.parser == 'YAML': with open(file) as yaml_data: try: - self.parsed_doc = yaml.load(yaml_data, Loader=yaml.Loader) + self.parsed_doc = yaml.load(yaml_data, Loader=yaml.SafeLoader) except yaml.parser.ParserError as err: print(err) return From 48e55a264e38829d90f3b8def37e4d2d7b39337f Mon Sep 17 00:00:00 2001 From: Aniket Pradhan Date: Thu, 16 Jan 2020 12:04:09 +0530 Subject: [PATCH 3/3] Added a method to serialize datetime.time objects as string objects Added a constructor for Python 2 to load unicode objects and fixed PEP8 styling. --- odml/tools/odmlparser.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/odml/tools/odmlparser.py b/odml/tools/odmlparser.py index b57f57b3..186a8eb1 100644 --- a/odml/tools/odmlparser.py +++ b/odml/tools/odmlparser.py @@ -77,6 +77,7 @@ def to_string(self, odml_document): 'odml-version': FORMAT_VERSION} if self.parser == 'YAML': + yaml.add_representer(datetime.time, YAMLTimeSerializer) string_doc = yaml.dump(odml_output, default_flow_style=False) elif self.parser == 'JSON': string_doc = json.dumps(odml_output, indent=4, @@ -88,6 +89,11 @@ def to_string(self, odml_document): return string_doc +# Required to serialize datetime.time as string objects +def YAMLTimeSerializer(dumper, data): + return dumper.represent_scalar('tag:yaml.org,2002:str', str(data)) + + # Required to serialize datetime values with JSON. class JSONDateTimeSerializer(json.JSONEncoder): def default(self, o): @@ -133,7 +139,10 @@ def from_file(self, file, doc_format=None): elif self.parser == 'YAML': with open(file) as yaml_data: try: - self.parsed_doc = yaml.load(yaml_data, Loader=yaml.SafeLoader) + yaml.SafeLoader.add_constructor( + "tag:yaml.org,2002:python/unicode", + UnicodeLoaderConstructor) + self.parsed_doc = yaml.safe_load(yaml_data) except yaml.parser.ParserError as err: print(err) return @@ -173,7 +182,7 @@ def from_string(self, string, doc_format=None): elif self.parser == 'YAML': try: - self.parsed_doc = yaml.load(string) + self.parsed_doc = yaml.safe_load(string) except yaml.parser.ParserError as err: print(err) return @@ -197,3 +206,9 @@ def from_string(self, string, doc_format=None): self.doc = RDFReader().from_string(string, doc_format) return self.doc + + +# Constructor for PyYAML to load unicode characters +# Needed only for < Python 3 +def UnicodeLoaderConstructor(loader, node): + return node.value