diff options
author | Matthias Baumgartner <dev@igsor.net> | 2022-11-25 14:59:17 +0100 |
---|---|---|
committer | Matthias Baumgartner <dev@igsor.net> | 2022-11-25 14:59:17 +0100 |
commit | a294bbe0622911bcd6df37c38865a4c0eb290593 (patch) | |
tree | f038ed8d4f04c63991939e13e61ae170de4e2c57 /bsie/extractor/generic/constant.py | |
parent | 9389c741bdbbca9adbff6099d440706cd63deac4 (diff) | |
parent | 3e6a69ce7f109f0fd4352507ad60d58d4cbd24a7 (diff) | |
download | bsie-a294bbe0622911bcd6df37c38865a4c0eb290593.tar.gz bsie-a294bbe0622911bcd6df37c38865a4c0eb290593.tar.bz2 bsie-a294bbe0622911bcd6df37c38865a4c0eb290593.zip |
Merge branch 'mb/tools' into develop
Diffstat (limited to 'bsie/extractor/generic/constant.py')
-rw-r--r-- | bsie/extractor/generic/constant.py | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/bsie/extractor/generic/constant.py b/bsie/extractor/generic/constant.py index e243131..7da792a 100644 --- a/bsie/extractor/generic/constant.py +++ b/bsie/extractor/generic/constant.py @@ -7,9 +7,9 @@ Author: Matthias Baumgartner, 2022 # imports import typing -# inner-module imports +# bsie imports from bsie.base import extractor -from bsie.utils.bsfs import URI +from bsie.utils.bsfs import URI, schema as _schema from bsie.utils.node import Node # exports @@ -25,26 +25,32 @@ class Constant(extractor.Extractor): CONTENT_READER = None + # predicate/value pairs to be produced. + _tuples: typing.Tuple[typing.Tuple[_schema.Predicate, typing.Any], ...] + def __init__( self, schema: str, tuples: typing.Iterable[typing.Tuple[URI, typing.Any]], ): - self._schema = schema - self._tuples = tuples - # FIXME: use schema instance for predicate checking - #self._tuples = [(pred, value) for pred, value in tuples if pred in schema] + super().__init__(_schema.Schema.from_string(extractor.SCHEMA_PREAMBLE + schema)) + # NOTE: Raises a KeyError if the predicate is not part of the schema + self._tuples = tuple((self.schema.predicate(p_uri), value) for p_uri, value in tuples) # FIXME: use schema instance for value checking - def schema(self) -> str: - return self._schema + def __eq__(self, other: typing.Any) -> bool: + return super().__eq__(other) \ + and self._tuples == other._tuples + + def __hash__(self) -> int: + return hash((super().__hash__(), self._tuples)) def extract( self, subject: Node, content: None, - predicates: typing.Iterable[URI], - ) -> typing.Iterator[typing.Tuple[Node, URI, typing.Any]]: + predicates: typing.Iterable[_schema.Predicate], + ) -> typing.Iterator[typing.Tuple[Node, _schema.Predicate, typing.Any]]: for pred, value in self._tuples: if pred in predicates: yield subject, pred, value |