def test_add_doc_data_csv_base(conn, ex, uri): conn.addDocumentData('a,b,c\ndd,ee,ff', DocFormat.CSV, base=uri) statements = get_statements(conn) assert 3 == len(statements) subject = statements[0][0] assert statements == [[subject, ex.a, Literal('dd'), None], [subject, ex.b, Literal('ee'), None], [subject, ex.c, Literal('ff'), None]]
def test_add_doc_data_context(conn, ex, uri): conn.addDocumentData({'a': 'aa', 'b': 'bb'}, context=uri) statements = get_statements(conn) assert 2 == len(statements) subject = statements[0][0] ns = conn.namespace(statements[0][1].getNamespace()) assert statements == [[subject, ns.a, Literal('aa'), ex.g], [subject, ns.b, Literal('bb'), ex.g]]
def test_add_doc_data_subject(conn, ex, uri): conn.addDocumentData('a,b,c\ndd,ee,ff', DocFormat.CSV, subject=uri) statements = get_statements(conn) assert 3 == len(statements) ns = conn.namespace(statements[0][1].getNamespace()) assert statements == [[ex.s, ns.a, Literal('dd'), None], [ex.s, ns.b, Literal('ee'), None], [ex.s, ns.c, Literal('ff'), None]]
def test_add_doc_data_csv_escape(conn): conn.addDocumentData('a,b,c\nxx,"y?"y",zz', DocFormat.CSV, csv_escape='?') statements = get_statements(conn) assert 3 == len(statements) subject = statements[0][0] ns = conn.namespace(statements[0][1].getNamespace()) assert statements == [[subject, ns.a, Literal('xx'), None], [subject, ns.b, Literal('y"y'), None], [subject, ns.c, Literal('zz'), None]]
def test_add_doc_data_csv_separator(conn): conn.addDocumentData('a:b:c\nxx:yy:zz', DocFormat.CSV, csv_separator=':') statements = get_statements(conn) assert 3 == len(statements) subject = statements[0][0] ns = conn.namespace(statements[0][1].getNamespace()) assert statements == [[subject, ns.a, Literal('xx'), None], [subject, ns.b, Literal('yy'), None], [subject, ns.c, Literal('zz'), None]]
def test_add_doc_data_csv(conn): conn.addDocumentData('a,b,c\ndd,ee,ff', DocFormat.CSV) statements = get_statements(conn) assert 3 == len(statements) subject = statements[0][0] ns = conn.namespace(statements[0][1].getNamespace()) assert statements == [[subject, ns.a, Literal('dd'), None], [subject, ns.b, Literal('ee'), None], [subject, ns.c, Literal('ff'), None]]
def test_add_json_ld_integer_literal_value(conn, example): conn.addData({ '@context': { '@vocab': 'http://franz.com/example/', '@base': 'http://franz.com/example/' }, '@id': 's', example.p: Literal(42) }) assert [[example.s, example.p, Literal(42), None]] == get_statements(conn)
def test_add_doc_data_csv_base_and_subject(conn, ex): conn.addDocumentData('a,b,c\ndd,ee,ff', DocFormat.CSV, base='ex://', subject='ex://$a') assert get_statements(conn) == [[ex.dd, ex.a, Literal('dd'), None], [ex.dd, ex.b, Literal('ee'), None], [ex.dd, ex.c, Literal('ff'), None]]
def test_add_doc_data_csv_dialect(conn, excel_tab): conn.addDocumentData('a\tb\tc\r\n"x""x"\t yy\tzz', DocFormat.CSV, csv_dialect=excel_tab) statements = get_statements(conn) assert 3 == len(statements) subject = statements[0][0] ns = conn.namespace(statements[0][1].getNamespace()) assert statements == [[subject, ns.a, Literal('x"x'), None], [subject, ns.b, Literal(' yy'), None], [subject, ns.c, Literal('zz'), None]]
def test_add_doc_data_csv_override_dialect(conn, doc, arg, value, dialect): conn.addDocumentData(doc, DocFormat.CSV, csv_dialect=dialect, **{arg: value}) statements = get_statements(conn) assert 3 == len(statements) subject = statements[0][0] ns = conn.namespace(statements[0][1].getNamespace()) assert statements == [[subject, ns.a, Literal('x"x'), None], [subject, ns.b, Literal(' yy'), None], [subject, ns.c, Literal('zz'), None]]
def test_add_json_ld_typed_literal_value(conn, example): conn.addData({ '@context': { '@vocab': 'http://franz.com/example/', '@base': 'http://franz.com/example/' }, '@id': 's', example.p: Literal('oooo', XMLSchema.BASE64BINARY) }) assert [[ example.s, example.p, Literal('oooo', XMLSchema.BASE64BINARY), None ]] == get_statements(conn)
def test_add_json_ld_lang_literal_value(conn, example): conn.addData({ '@context': { '@vocab': 'http://franz.com/example/', '@base': 'http://franz.com/example/' }, '@id': 's', # A bathtub in Sindarin example.p: Literal('🛀', language='sjn') }) assert [[example.s, example.p, Literal('🛀', language='sjn'), None]] == get_statements(conn)
def test_add_doc_data_prefix_in_keys(conn, pref1, pref2): p1 = conn.namespace('p1://') p2 = conn.namespace('p2://') conn.addDocumentData({ 'a': 'aa', 'b': 'bb' }, keys={ 'a': DocumentKey(prefix=pref1), 'b': DocumentKey(prefix=pref2) }) statements = get_statements(conn) assert len(statements) == 2 assert statements == [[statements[0][0], p1.a, Literal('aa'), None], [statements[1][0], p2.b, Literal('bb'), None]]
def test_add_doc_data_attributes(conn, ex, attr): conn.addDocumentData({'p': 'oo'}, base=ex(''), subject=ex.s, attributes={'test': 'c'}) assert [{ 'test': 'c' }] == get_triple_attributes(conn, ex.s, ex.p, Literal('oo'))
def test_add_doc_data_store_source(conn): # Empty dict will not be stored at all, so we need at least one key src = '{"a":"bb"}' conn.addDocumentData(src, json_store_source=True) for _s, _p, o, _g in get_statements(conn): if o == Literal(src): break else: pytest.fail('Source document not found.')
def test_add_doc_data_prefix_override(conn, pref1, pref2): p2 = conn.namespace('p2://') conn.addDocumentData({'a': 'aa'}, keys={ 'a': DocumentKey(prefix=pref1), }, prefix={'a': pref2}) statements = get_statements(conn) assert len(statements) == 1 assert statements == [[statements[0][0], p2.a, Literal('aa'), None]]
def test_add_doc_data_rules(conn, ex): conn.addData(''' @prefix ldm: <http://franz.com/ns/allegrograph/6.4/load-meta#> . ldm:myrules ldm:id "ex://test${x}" ; ldm:prefix "ex://" .''') conn.addDocumentData({'x': "abc"}, rules='myrules') statements = [ stmt for stmt in get_statements(conn) if 'load-meta' not in str(stmt[0]) ] assert statements == [[ex.testabc, ex.x, Literal('abc'), None]]
def test_long_literal(): # This behavior of using LONG as the datatype might be convenient in demos, # (you can do ``Literal(42L)``), but has a few drawbacks: # - is incorrect: will map arbitrarily huge values to LONG, which is # supposed to be 64 bit, while SMALLER values will become INTEGERS # (which have no size limit). # - In fact longs start at sys.maxint + 1 == 2 ** 63, i.e. as soon as # it is no longer valid to hold them in xsd:longs. # - Python 3 has no 'long' type. literal = Literal(84104105115032109097107101115032110111032115101110115101046) assert literal.datatype is XMLSchema.LONG
def test_add_doc_content_encoding(conn, after): f = tempfile.NamedTemporaryFile(suffix='.json.gz', delete=False) filename = f.name after.append(lambda: os.remove(filename)) with gzip.GzipFile('data.json', 'wb', fileobj=f) as gz: gz.write('{"p":"oo"}'.encode('utf-8')) f.close() conn.addDocumentFile(filename, DocFormat.JSON, content_encoding='gzip') statements = get_statements(conn) assert 1 == len(statements) assert statements[0][2] == Literal("oo")
def test_add_doc_encoding(conn, after): f = tempfile.NamedTemporaryFile(suffix='.csv', delete=False) filename = f.name after.append(lambda: os.remove(filename)) f.write(u'p\nрджреБрдкЁЯЫБ'.encode('utf-16le')) f.close() # This is completely broken... it expects an external format name here conn.addDocumentFile(filename, DocFormat.CSV, encoding='unicode') statements = get_statements(conn) assert 1 == len(statements) assert statements[0][2] == Literal(u"рджреБрдкЁЯЫБ")
def test_add_doc_data_transform_template(conn): conn.addDocumentData({'a': 'XY'}, transform={'a': 'test-$a'}) statements = get_statements(conn) assert len(statements) == 1 assert statements[0][2] == Literal('test-XY')
def test_literals_from_python_values(value, expected_text, expected_type): literal = Literal(value) assert literal.label == expected_text # Well-known types are normalized, so it is safe to use the ``is`` operator here. assert literal.datatype is expected_type
def test_true_literal(): assert Literal(True).booleanValue()
def test_false_literal(): assert not Literal(False).booleanValue()
def test_time_value_tz(): lit = Literal('1984-08-26T10:00:05+02:00', XMLSchema.DATETIME) t = lit.datetimeValue() assert t.utcoffset() == timedelta(0, 7200)
def test_add_doc_data_transform_built_in(conn): conn.addDocumentData({'a': 'aa'}, transform={'a': 'string-capitalize'}) statements = get_statements(conn) assert len(statements) == 1 assert statements[0][2] == Literal('Aa')