aboutsummaryrefslogtreecommitdiffstats
path: root/bsie
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-03-01 17:07:06 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-03-01 17:07:06 +0100
commit464cc6cb54f55f6255bf0a485533c181d6018303 (patch)
tree0a2447aac75d91230b4fdbaddf129d408e5d5b7e /bsie
parent02cd75f31120a766a35fc0ae00f8d0711c1c0ae9 (diff)
downloadbsie-464cc6cb54f55f6255bf0a485533c181d6018303.tar.gz
bsie-464cc6cb54f55f6255bf0a485533c181d6018303.tar.bz2
bsie-464cc6cb54f55f6255bf0a485533c181d6018303.zip
load config from file
Diffstat (limited to 'bsie')
-rw-r--r--bsie/apps/_loader.py52
-rw-r--r--bsie/apps/default_config.yaml17
-rw-r--r--bsie/apps/index.py44
-rw-r--r--bsie/apps/info.py43
4 files changed, 85 insertions, 71 deletions
diff --git a/bsie/apps/_loader.py b/bsie/apps/_loader.py
new file mode 100644
index 0000000..e02bed5
--- /dev/null
+++ b/bsie/apps/_loader.py
@@ -0,0 +1,52 @@
+"""
+
+Part of the bsie module.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# standard imports
+import typing
+
+# external imports
+import yaml
+
+# bsie imports
+from bsie.extractor import ExtractorBuilder
+from bsie.lib import PipelineBuilder
+from bsie.lib.pipeline import Pipeline
+from bsie.reader import ReaderBuilder
+
+# constants
+DEFAULT_CONFIG_FILE = 'default_config.yaml'
+
+# exports
+__all__: typing.Sequence[str] = (
+ 'load',
+ 'DEFAULT_CONFIG_FILE',
+ )
+
+
+## code ##
+
+def load_pipeline(path: str) -> Pipeline:
+ """Load a pipeline according to a config at *path*."""
+ # load config file
+ with open(path, 'rt') as ifile:
+ cfg = yaml.safe_load(ifile)
+
+ # reader builder
+ rbuild = ReaderBuilder(cfg['ReaderBuilder'])
+ # extractor builder
+ ebuild = ExtractorBuilder(cfg['ExtractorBuilder'])
+ # pipeline builder
+ pbuild = PipelineBuilder(
+ rbuild,
+ ebuild,
+ )
+ # build pipeline
+ pipeline = pbuild.build()
+
+ # return pipeline
+ return pipeline
+
+## EOF ##
diff --git a/bsie/apps/default_config.yaml b/bsie/apps/default_config.yaml
new file mode 100644
index 0000000..4d99e22
--- /dev/null
+++ b/bsie/apps/default_config.yaml
@@ -0,0 +1,17 @@
+
+ReaderBuilder: {}
+
+ExtractorBuilder:
+
+ - bsie.extractor.preview.Preview:
+ max_sides: [50, 100, 200,400]
+
+ - bsie.extractor.generic.path.Path: {}
+
+ - bsie.extractor.generic.stat.Stat: {}
+
+ - bsie.extractor.image.colors_spatial.ColorsSpatial:
+ width: 2
+ height: 2
+ exp: 2
+
diff --git a/bsie/apps/index.py b/bsie/apps/index.py
index 8798c49..2d147c9 100644
--- a/bsie/apps/index.py
+++ b/bsie/apps/index.py
@@ -10,11 +10,12 @@ import os
import typing
# bsie imports
-from bsie.extractor import ExtractorBuilder
-from bsie.lib import BSIE, PipelineBuilder, DefaultNamingPolicy
-from bsie.reader import ReaderBuilder
+from bsie.lib import BSIE, DefaultNamingPolicy
from bsie.utils import bsfs, errors, node as node_
+# inner-module imports
+from . import _loader
+
# exports
__all__: typing.Sequence[str] = (
'main',
@@ -26,6 +27,9 @@ __all__: typing.Sequence[str] = (
def main(argv):
"""Index files or directories into BSFS."""
parser = argparse.ArgumentParser(description=main.__doc__, prog='index')
+ parser.add_argument('--config', type=str,
+ default=os.path.join(os.path.dirname(__file__), _loader.DEFAULT_CONFIG_FILE),
+ help='Path to the config file.')
parser.add_argument('--host', type=bsfs.URI, default=bsfs.URI('http://example.com'),
help='')
parser.add_argument('--user', type=str, default='me',
@@ -44,39 +48,8 @@ def main(argv):
help='')
args = parser.parse_args(argv)
- # FIXME: Read reader/extractor configs from a config file
- # reader builder
- rbuild = ReaderBuilder()
- # extractor builder
- ebuild = ExtractorBuilder([
- {'bsie.extractor.preview.Preview': {
- 'max_sides': [50],
- }},
- {'bsie.extractor.generic.path.Path': {}},
- {'bsie.extractor.generic.stat.Stat': {}},
- {'bsie.extractor.generic.constant.Constant': dict(
- tuples=[('http://bsfs.ai/schema/Entity#author', 'Me, myself, and I')],
- schema='''
- bse:author rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:Entity ;
- rdfs:range xsd:string ;
- bsfs:unique "true"^^xsd:boolean .
- ''',
- )},
- {'bsie.extractor.image.colors_spatial.ColorsSpatial': {
- 'width': 2,
- 'height': 2,
- 'exp': 2,
- }},
- ])
- # pipeline builder
- pbuild = PipelineBuilder(
- rbuild,
- ebuild,
- )
-
# build pipeline
- pipeline = pbuild.build()
+ pipeline = _loader.load_pipeline(args.config)
# build the naming policy
naming_policy = DefaultNamingPolicy(
host=args.host,
@@ -127,7 +100,6 @@ def main(argv):
return store
-
## main ##
if __name__ == '__main__':
diff --git a/bsie/apps/info.py b/bsie/apps/info.py
index 750aedc..363ab30 100644
--- a/bsie/apps/info.py
+++ b/bsie/apps/info.py
@@ -6,15 +6,16 @@ Author: Matthias Baumgartner, 2022
"""
# standard imports
import argparse
+import os
import sys
import typing
# bsie imports
-from bsie.extractor import ExtractorBuilder
-from bsie.lib import PipelineBuilder
-from bsie.reader import ReaderBuilder
from bsie.utils import bsfs, errors
+# inner-module imports
+from . import _loader
+
# exports
__all__: typing.Sequence[str] = (
'main',
@@ -26,43 +27,15 @@ __all__: typing.Sequence[str] = (
def main(argv):
"""Show information from BSIE."""
parser = argparse.ArgumentParser(description=main.__doc__, prog='info')
+ parser.add_argument('--config', type=str,
+ default=os.path.join(os.path.dirname(__file__), _loader.DEFAULT_CONFIG_FILE),
+ help='Path to the config file.')
parser.add_argument('what', choices=('predicates', 'schema'),
help='Select what information to show.')
args = parser.parse_args(argv)
- # FIXME: Read reader/extractor configs from a config file
- # reader builder
- rbuild = ReaderBuilder()
- # extractor builder
- ebuild = ExtractorBuilder([
- {'bsie.extractor.preview.Preview': {
- 'max_sides': [50, 200],
- }},
- {'bsie.extractor.generic.path.Path': {}},
- {'bsie.extractor.generic.stat.Stat': {}},
- {'bsie.extractor.generic.constant.Constant': dict(
- tuples=[('http://bsfs.ai/schema/Entity#author', 'Me, myself, and I')],
- schema='''
- bse:author rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:Entity ;
- rdfs:range xsd:string ;
- bsfs:unique "true"^^xsd:boolean .
- ''',
- )},
- {'bsie.extractor.image.colors_spatial.ColorsSpatial': {
- 'width': 2,
- 'height': 2,
- 'exp': 2,
- }},
- ])
- # pipeline builder
- pbuild = PipelineBuilder(
- rbuild,
- ebuild,
- )
-
# build pipeline
- pipeline = pbuild.build()
+ pipeline = _loader.load_pipeline(args.config)
# show info
if args.what == 'predicates':