Skip to content

Commit 6b10888

Browse files
committed
init
1 parent f6d4190 commit 6b10888

4 files changed

Lines changed: 72 additions & 5 deletions

File tree

src/rdf_sql_bulkloader/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""rdf-sql-bulkloader package."""
22
from importlib import metadata
33

4-
__version__ = metadata.version(__name__)
4+
__version__ = metadata.version(__name__)
5+
6+
from rdf_sql_bulkloader.loaders.sqlite3_bulkloader import SqliteBulkloader
Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,44 @@
1-
class BulkLoader:
2-
pass
1+
from abc import ABC
2+
from dataclasses import dataclass
3+
from pathlib import Path
4+
from typing import Union, Tuple, Iterator
5+
6+
import lightrdf
7+
8+
DDL = """
9+
CREATE TABLE statement (
10+
id TEXT,
11+
subject TEXT,
12+
predicate TEXT,
13+
object TEXT,
14+
value TEXT,
15+
datatype TEXT,
16+
language TEXT,
17+
graph TEXT
18+
);
19+
"""
20+
21+
URI = str
22+
SUBJECT = URI
23+
PREDICATE = URI
24+
OBJECT_URI = URI
25+
OBJECT_VALUE = str
26+
OBJECT_DATATYPE = str
27+
OBJECT_LANG = str
28+
29+
STATEMENT = Tuple[SUBJECT, PREDICATE, OBJECT_URI, OBJECT_VALUE, OBJECT_DATATYPE, OBJECT_LANG]
30+
31+
@dataclass
32+
class BulkLoader(ABC):
33+
path: str
34+
35+
def bulkload(self, path: str):
36+
raise NotImplemented
37+
38+
def statements(self, path: Union[Path, str]) -> Iterator[STATEMENT]:
39+
doc = lightrdf.RDFDocument(str(path))
40+
for t in doc.search_triples(None, None, None):
41+
yield t
42+
43+
def ddl(self) -> str:
44+
return DDL
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import sqlite3
22

3-
from rdf_sql_bulkloader.main import BulkLoader
3+
from rdf_sql_bulkloader.loaders.bulkloader import BulkLoader
44

55

6-
class SqliteBulkloader(BulkLoader):
6+
class SqliteBulkloader(BulkLoader):
7+
8+
def bulkload(self, path: str):
9+
con = sqlite3.connect(self.path)
10+
con.execute(self.ddl())
11+
tuples = []
12+
for t in self.statements(path):
13+
tuples.append(t)
14+
print(len(tuples))
15+
con.executemany("insert into statement(subject, predicate, object) values (?,?,?)", tuples)

tests/test_sqlite3_bulkloader.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"""Demo version test."""
2+
3+
import unittest
4+
5+
from rdf_sql_bulkloader import SqliteBulkloader
6+
from tests import TEST_INPUT_OWL
7+
8+
9+
class TestSqlit3BulkLoader(unittest.TestCase):
10+
"""Test sqlite3."""
11+
12+
def test_bulkload(self):
13+
loader = SqliteBulkloader(":memory:")
14+
loader.bulkload(TEST_INPUT_OWL)

0 commit comments

Comments
 (0)