changeset 1619:e24058ae4806

support CB.apply(returnBoundStatementsOnly)
author drewp@bigasterisk.com
date Wed, 08 Sep 2021 18:39:12 -0700
parents e105032b0e3d
children 92f8deb59735
files service/mqtt_to_rdf/candidate_binding.py
diffstat 1 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/service/mqtt_to_rdf/candidate_binding.py	Mon Sep 06 23:26:07 2021 -0700
+++ b/service/mqtt_to_rdf/candidate_binding.py	Wed Sep 08 18:39:12 2021 -0700
@@ -16,20 +16,24 @@
         b = " ".join("%s=%s" % (k, v) for k, v in sorted(self.binding.items()))
         return f'CandidateBinding({b})'
 
-    def apply(self, g: Union[Graph, Iterable[Triple]]) -> Iterator[Triple]:
+    def apply(self, g: Union[Graph, Iterable[Triple]], returnBoundStatementsOnly=True) -> Iterator[Triple]:
         for stmt in g:
             try:
-                bound = (self._applyTerm(stmt[0]), self._applyTerm(stmt[1]), self._applyTerm(stmt[2]))
+                bound = (
+                    self._applyTerm(stmt[0], returnBoundStatementsOnly), 
+                    self._applyTerm(stmt[1], returnBoundStatementsOnly), 
+                    self._applyTerm(stmt[2], returnBoundStatementsOnly))
             except BindingUnknown:
                 continue
             yield bound
 
-    def _applyTerm(self, term: Node):
+    def _applyTerm(self, term: Node, failUnbound=True):
         if isinstance(term, (Variable, BNode)):
             if term in self.binding:
                 return self.binding[term]
             else:
-                raise BindingUnknown()
+                if failUnbound:
+                    raise BindingUnknown()
         return term
 
     def addNewBindings(self, newBindings: 'CandidateBinding'):