Handle null pointers in rpy2py
Resolves #46
Change-Id: Iae4ad6d272d39d0caebd8173794b3b203c1075c0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e87038..add51c0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
# Version history
+- Fixed NULL warning in fetch functions
+
## 1.0.0
- Simplified authorization process for accessing restricted data via the new `auth()` function
diff --git a/KorAPClient/__init__.py b/KorAPClient/__init__.py
index 784bbc0..b264f97 100644
--- a/KorAPClient/__init__.py
+++ b/KorAPClient/__init__.py
@@ -35,8 +35,13 @@
robjects.conversion.set_conversion(robjects.default_converter + pandas2ri.converter + korapclient_converter)
-fix_lists_in_dataframes = robjects.default_converter
+fix_null_types = robjects.default_converter
+@fix_null_types.rpy2py.register(NULLType)
+def to_str(obj):
+ return ""
+
+fix_lists_in_dataframes = robjects.default_converter
@fix_lists_in_dataframes.rpy2py.register(StrSexpVector)
def to_str(obj):
diff --git a/KorAPClient/tests/test_korapclient.py b/KorAPClient/tests/test_korapclient.py
index 5cb2989..b2caa08 100644
--- a/KorAPClient/tests/test_korapclient.py
+++ b/KorAPClient/tests/test_korapclient.py
@@ -160,5 +160,17 @@
self.assertEqual(len(q.slots['collectedMatches']), 220)
self.assertIsInstance(q.slots['collectedMatches']['tokens.match'].iloc[0], str)
+ def test_null_strings_are_handled(self):
+ q = self.kcon.corpusQuery("Der", vc="corpusSigle=WPD17", metadataOnly=False).fetchNext()
+ matches = q.slots['collectedMatches']
+ self.assertFalse(
+ matches['tokens.left'].str.contains("rpy2.rinterface_lib.sexp.NULLType", na=False).any(),
+ "The string 'rpy2.rinterface_lib.sexp.NULLType' was found in tokens.left!"
+ )
+ self.assertFalse(
+ matches['tokens.right'].str.contains("rpy2.rinterface_lib.sexp.NULLType", na=False).any(),
+ "The string 'rpy2.rinterface_lib.sexp.NULLType' was found in tokens.right!"
+ )
+
if __name__ == '__main__':
unittest.main()