def read(source, format=None): """ Convenience function returning a ProvDocument instance. It does a lazy format detection by simply using try/except for all known formats. The deserializers should fail fairly early when data of the wrong type is passed to them thus the try/except is likely cheap. One could of course also do some more advanced format auto-detection but I am not sure that is necessary. The downside is that no proper error messages will be produced, use the format parameter to get the actual traceback. """ # Lazy imports to not globber the namespace. from prov.model import ProvDocument from prov.serializers import Registry Registry.load_serializers() serializers = Registry.serializers.keys() if format: return ProvDocument.deserialize(source=source, format=format.lower()) for format in serializers: try: return ProvDocument.deserialize(source=source, format=format) except: pass else: raise TypeError("Could not read from the source. To get a proper " "error message, specify the format with the 'format' " "parameter.")
def test_reading_and_writing_to_file_like_objects(self): """ Tests reading and writing to and from file like objects. """ # Create some random document. document = ProvDocument() document.entity(EX2_NS["test"]) objects = [io.BytesIO, io.StringIO] Registry.load_serializers() formats = Registry.serializers.keys() for obj in objects: for format in formats: try: buf = obj() document.serialize(destination=buf, format=format) buf.seek(0, 0) new_document = ProvDocument.deserialize(source=buf, format=format) self.assertEqual(document, new_document) except NotImplementedError: # Some serializers might not implement serialize or deserialize method pass # and this is fine in the context of this test finally: buf.close()
def provRead(source, format=None): from prov.model import ProvDocument from prov.serializers import Registry Registry.load_serializers() serializers = Registry.serializers.keys() if format: try: ret = ProvDocument.deserialize(source=source, format=format.lower()) return ret except Exception as e: log.error(e) raise TypeError(e) for format in serializers: source.seek(0) try: return ProvDocument.deserialize(source=source, format=format) except: pass else: raise TypeError("Could not read from the source. To get a proper " "error message, specify the format with the 'format' " "parameter.")
def test_reading_and_writing_to_file_like_objects(self): """ Tests reading and writing to and from file like objects. """ # Create some random document. document = ProvDocument() document.entity(EX2_NS["test"]) objects = [io.BytesIO, io.StringIO] Registry.load_serializers() formats = Registry.serializers.keys() for obj in objects: for format in formats: try: buf = obj() document.serialize(destination=buf, format=format) buf.seek(0, 0) new_document = ProvDocument.deserialize(source=buf, format=format) self.assertEqual(document, new_document) except NotImplementedError: # Some serializers might not implement serialize or # deserialize method pass # and this is fine in the context of this test finally: buf.close()