Skip to content

Commit

Permalink
first version of rdf import script
Browse files Browse the repository at this point in the history
  • Loading branch information
cahytinne committed Jul 30, 2015
1 parent 2e75284 commit 4306947
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 13 deletions.
110 changes: 110 additions & 0 deletions atramhasis/scripts/import_rdf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# -*- coding: utf-8 -*-
import sys
import os
import argparse

from skosprovider_sqlalchemy.utils import import_provider

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.engine import url

from skosprovider_sqlalchemy.models import (
ConceptScheme,
Label
)

from skosprovider_rdf.providers import RDFProvider
from rdflib import Graph
from rdflib.util import guess_format


def main(argv=sys.argv):
'''
Documentation: import_rdf -h
Run: import_rdf --from <path_rdf_file> --to <conn_string>
example path_rdf_file:
atramhasis/scripts/my_rdf.rdf
structure conn_string:
postgresql://username:password@host:port/db_name
sqlite:///path/db_name.sqlite
default conn_string:
sqlite:///atramhasis.sqlite
'''

cmd = os.path.basename(argv[0])

###
# Parse parameters and validate
###
parser = argparse.ArgumentParser(
description='Import RDF file to a database',
usage='%s [--from path_rdf_file] [--to conn_string]\n '
'(example: "%s --from atramhasis/scripts/my_rdf.rdf --to sqlite:///atramhasis.sqlite")' % (cmd, cmd)
)
parser.add_argument('--from',
dest='rdf_file',
type=str,
help='local path to the input RDF file',
required=True
)
parser.add_argument('--to',
dest='to',
type=str,
help='Connection string of the output database',
required=False,
default='sqlite:///atramhasis.sqlite'
)
args = parser.parse_args()
if not os.path.exists(args.rdf_file) or not validate_connection_string(args.to):
sys.exit(1)

# make session to output database
connect_uri = args.to
engine = create_engine(connect_uri, echo=True)
session = sessionmaker(
bind=engine,
)()

# create RDF provider from the input file
rdf_name, rdf_ext = os.path.splitext(os.path.basename(args.rdf_file))
graph = Graph()
graph.parse(args.rdf_file, format=guess_format(rdf_ext))

rdf_provider = RDFProvider(
{'id': rdf_name.upper()},
graph
)

# configure output conceptscheme
rdf_cs = ConceptScheme()
l = Label(rdf_name.capitalize(), 'prefLabel', 'nl')
rdf_cs.labels.append(l)

# import RDF skos data into the database
session.add(rdf_cs)
import_provider(rdf_provider, rdf_cs, session)
session.commit()


def validate_connection_string(connection_string):
'''
Validate the connection string
:param connection_string
:return: Boolean True if correct connection string
'''
u = url.make_url(connection_string)
if u.drivername == 'postgresql':
if u.username and u.password and u.host and u.port and u.database:
return True
elif u.drivername == 'sqlite':
if u.database:
return True
elif u.drivername:
print('The database driver ' + u.drivername + ' is not supported.')
print('Wrong structure of connection string "' + connection_string + '"')
print('Structure: postgresql://username:password@host:port/db_name OR sqlite:///path/db_name.sqlite')
return False
24 changes: 12 additions & 12 deletions atramhasis/skos/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,15 @@ def includeme(config): # pragma: no cover

skosregis = config.get_skos_registry()
skosregis.register_provider(TREES)
skosregis.register_provider(GEO)
skosregis.register_provider(STYLES)
skosregis.register_provider(MATERIALS)
skosregis.register_provider(EVENTTYPES)
skosregis.register_provider(HERITAGETYPES)
skosregis.register_provider(PERIODS)
skosregis.register_provider(SPECIES)
skosregis.register_provider(AAT)
skosregis.register_provider(TGN)
skosregis.register_provider(EH_PERIOD)
skosregis.register_provider(EH_MONUMENT_TYPE)
skosregis.register_provider(EH_MATERIALS)
# skosregis.register_provider(GEO)
# skosregis.register_provider(STYLES)
# skosregis.register_provider(MATERIALS)
# skosregis.register_provider(EVENTTYPES)
# skosregis.register_provider(HERITAGETYPES)
# skosregis.register_provider(PERIODS)
# skosregis.register_provider(SPECIES)
# skosregis.register_provider(AAT)
# skosregis.register_provider(TGN)
# skosregis.register_provider(EH_PERIOD)
# skosregis.register_provider(EH_MONUMENT_TYPE)
# skosregis.register_provider(EH_MATERIALS)
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ skosprovider==0.5.2
skosprovider_sqlalchemy==0.4.2
#pyramid_skosprovider==0.7.0
-e git+https://github.com/koenedaele/pyramid_skosprovider.git#egg=pyramid_skosprovider
skosprovider_rdf==0.4.0
skosprovider_rdf==0.4.1
skosprovider_getty==0.2.1
skosprovider_heritagedata==0.2.1

Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ def run(self):
main = atramhasis:main
[console_scripts]
initialize_atramhasis_db = atramhasis.scripts.initializedb:main
import_rdf = atramhasis.scripts.import_rdf:main
[pyramid.scaffold]
atramhasis_scaffold=atramhasis.scaffolds:AtramhasisTemplate
atramhasis_demo=atramhasis.scaffolds:AtramhasisDemoTemplate
Expand Down

0 comments on commit 4306947

Please sign in to comment.