summaryrefslogtreecommitdiff
path: root/test/test_batch_add.py
diff options
context:
space:
mode:
authorNicholas Car <nicholas.car@surroundaustralia.com>2020-05-05 22:02:22 +1000
committerNicholas Car <nicholas.car@surroundaustralia.com>2020-05-05 22:02:22 +1000
commit802678ce0aba5ac15c27be4dab7519e79c34d2b9 (patch)
treef08b5cdede584912fc23f4e65d10bff38241b1bf /test/test_batch_add.py
parent88338195dc18de91c7122c025cc619951c876043 (diff)
parentf6fde7ed2bbd75793083631c04ae69bdc2496383 (diff)
downloadrdflib-namespaces_all.tar.gz
Merge branch 'master' into namespaces_allnamespaces_all
Diffstat (limited to 'test/test_batch_add.py')
-rw-r--r--test/test_batch_add.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/test/test_batch_add.py b/test/test_batch_add.py
new file mode 100644
index 00000000..1747100c
--- /dev/null
+++ b/test/test_batch_add.py
@@ -0,0 +1,89 @@
+import unittest
+from rdflib.graph import Graph, BatchAddGraph
+from rdflib.term import URIRef
+
+
+class TestBatchAddGraph(unittest.TestCase):
+ def test_batch_size_zero_denied(self):
+ with self.assertRaises(ValueError):
+ BatchAddGraph(Graph(), batch_size=0)
+
+ def test_batch_size_none_denied(self):
+ with self.assertRaises(ValueError):
+ BatchAddGraph(Graph(), batch_size=None)
+
+ def test_batch_size_one_denied(self):
+ with self.assertRaises(ValueError):
+ BatchAddGraph(Graph(), batch_size=1)
+
+ def test_batch_size_negative_denied(self):
+ with self.assertRaises(ValueError):
+ BatchAddGraph(Graph(), batch_size=-12)
+
+ def test_exit_submits_partial_batch(self):
+ trip = (URIRef('a'), URIRef('b'), URIRef('c'))
+ g = Graph()
+ with BatchAddGraph(g, batch_size=10) as cut:
+ cut.add(trip)
+ self.assertIn(trip, g)
+
+ def test_add_more_than_batch_size(self):
+ trips = [(URIRef('a'), URIRef('b%d' % i), URIRef('c%d' % i))
+ for i in range(12)]
+ g = Graph()
+ with BatchAddGraph(g, batch_size=10) as cut:
+ for trip in trips:
+ cut.add(trip)
+ self.assertEqual(12, len(g))
+
+ def test_add_quad_for_non_conjunctive_empty(self):
+ '''
+ Graph drops quads that don't match our graph. Make sure we do the same
+ '''
+ g = Graph(identifier='http://example.org/g')
+ badg = Graph(identifier='http://example.org/badness')
+ with BatchAddGraph(g) as cut:
+ cut.add((URIRef('a'), URIRef('b'), URIRef('c'), badg))
+ self.assertEqual(0, len(g))
+
+ def test_add_quad_for_non_conjunctive_pass_on_context_matches(self):
+ g = Graph()
+ with BatchAddGraph(g) as cut:
+ cut.add((URIRef('a'), URIRef('b'), URIRef('c'), g))
+ self.assertEqual(1, len(g))
+
+ def test_no_addN_on_exception(self):
+ '''
+ Even if we've added triples so far, it may be that attempting to add the last
+ batch is the cause of our exception, so we don't want to attempt again
+ '''
+ g = Graph()
+ trips = [(URIRef('a'), URIRef('b%d' % i), URIRef('c%d' % i))
+ for i in range(12)]
+
+ try:
+ with BatchAddGraph(g, batch_size=10) as cut:
+ for i, trip in enumerate(trips):
+ cut.add(trip)
+ if i == 11:
+ raise Exception('myexc')
+ except Exception as e:
+ if str(e) != 'myexc':
+ pass
+ self.assertEqual(10, len(g))
+
+ def test_addN_batching_addN(self):
+ class MockGraph(object):
+ def __init__(self):
+ self.counts = []
+
+ def addN(self, quads):
+ self.counts.append(sum(1 for _ in quads))
+
+ g = MockGraph()
+ quads = [(URIRef('a'), URIRef('b%d' % i), URIRef('c%d' % i), g)
+ for i in range(12)]
+
+ with BatchAddGraph(g, batch_size=10, batch_addn=True) as cut:
+ cut.addN(quads)
+ self.assertEqual(g.counts, [10, 2])