# standard imports import logging import unittest # bsie imports from bsie.extractor import ExtractorBuilder from bsie.reader import ReaderBuilder from bsie.utils import bsfs # objects to test from bsie.lib import PipelineBuilder ## code ## class TestPipelineBuilder(unittest.TestCase): def test_build(self): c_schema = ''' bse:author rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsn:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''' c_tuples = [('https://schema.bsfs.io/ie/Node/Entity#author', 'Me, myself, and I')] # prepare builders rbuild = ReaderBuilder({}) ebuild = ExtractorBuilder([ {'bsie.extractor.generic.path.Path': {}}, {'bsie.extractor.generic.stat.Stat': {}}, {'bsie.extractor.generic.constant.Constant': dict( schema=c_schema, tuples=c_tuples, )}, ]) # build pipeline builder = PipelineBuilder(rbuild, ebuild) pipeline = builder.build() # delayed import import bsie.reader.path import bsie.reader.stat import bsie.extractor.generic.path import bsie.extractor.generic.stat import bsie.extractor.generic.constant # check pipeline self.assertDictEqual(pipeline._ext2rdr, { bsie.extractor.generic.path.Path(): bsie.reader.path.Path(), bsie.extractor.generic.stat.Stat(): bsie.reader.stat.Stat(), bsie.extractor.generic.constant.Constant(c_schema, c_tuples): None, }) # fail to load extractor ebuild_err = ExtractorBuilder([ {'bsie.extractor.generic.foo.Foo': {}}, {'bsie.extractor.generic.path.Path': {}}, ]) with self.assertLogs(logging.getLogger('bsie.lib.builder'), logging.ERROR): pipeline = PipelineBuilder(rbuild, ebuild_err).build() self.assertDictEqual(pipeline._ext2rdr, { bsie.extractor.generic.path.Path(): bsie.reader.path.Path()}) # fail to build extractor ebuild_err = ExtractorBuilder([ {'bsie.extractor.generic.path.Path': {'foo': 123}}, {'bsie.extractor.generic.path.Path': {}}, ]) with self.assertLogs(logging.getLogger('bsie.lib.builder'), logging.ERROR): pipeline = PipelineBuilder(rbuild, ebuild_err).build() self.assertDictEqual(pipeline._ext2rdr, { bsie.extractor.generic.path.Path(): bsie.reader.path.Path()}) # fail to load reader with self.assertLogs(logging.getLogger('bsie.lib.builder'), logging.ERROR): # switch reader of an extractor old_reader = bsie.extractor.generic.path.Path.CONTENT_READER bsie.extractor.generic.path.Path.CONTENT_READER = 'bsie.reader.foo.Foo' # build pipeline with invalid reader reference pipeline = PipelineBuilder(rbuild, ebuild).build() self.assertDictEqual(pipeline._ext2rdr, { bsie.extractor.generic.stat.Stat(): bsie.reader.stat.Stat(), bsie.extractor.generic.constant.Constant(c_schema, c_tuples): None, }) # switch back bsie.extractor.generic.path.Path.CONTENT_READER = old_reader # fail to build reader rbuild_err = ReaderBuilder({'bsie.reader.stat.Stat': dict(foo=123)}) with self.assertLogs(logging.getLogger('bsie.lib.builder'), logging.ERROR): pipeline = PipelineBuilder(rbuild_err, ebuild).build() self.assertDictEqual(pipeline._ext2rdr, { bsie.extractor.generic.path.Path(): bsie.reader.path.Path(), bsie.extractor.generic.constant.Constant(c_schema, c_tuples): None, }) ## main ## if __name__ == '__main__': unittest.main() ## EOF ##