Source code for atomrdf.stores

from rdflib.store import NO_STORE, VALID_STORE
from rdflib import plugin
from rdflib import Graph
from atomrdf.namespace import Literal

import os
import shutil

[docs] def create_store(kg, store, identifier, store_file=None, structure_store=None): """ Create a store based on the given parameters. Parameters: ----------- kg : KnowledgeGraph The knowledge graph object. store : str or Project The type of store to create. It can be either "Memory", "SQLAlchemy", or a pyiron Project object. identifier : str The identifier for the store. store_file : str, optional The file path to store the data (only applicable for certain store types). structure_store : str, optional The structure store to use (only applicable for certain store types). Raises: ------- ValueError If an unknown store type is provided. """ kg.store_file = store_file if store in ["Memory", "memory"]: store_memory( kg, store, identifier, store_file=store_file, structure_store=structure_store, ) elif store in ["SQLAlchemy", "db", "database", "sqlalchemy"]: store_alchemy( kg, store, identifier, store_file=store_file, structure_store=structure_store, ) else: raise ValueError("Unknown store found!")
[docs] def store_memory(kg, store, identifier, store_file=None, structure_store=None): """ Store the knowledge graph in memory. Parameters ---------- kg : KnowledgeGraph The knowledge graph to be stored. store : str The type of store to use for storing the graph. identifier : str The identifier for the graph. store_file : str, optional The file to store the graph in. Defaults to None. structure_store : str, optional The structure store to use. Defaults to None. Returns ------- None """ graph = Graph(store="Memory", identifier=identifier) kg.graph = graph kg.structure_store = _setup_structure_store(structure_store=structure_store)
[docs] def store_alchemy(kg, store, identifier, store_file=None, structure_store=None): """ Store the knowledge graph using SQLAlchemy. Parameters ---------- kg : KnowledgeGraph The knowledge graph to be stored. store : str The type of store to be used. identifier : str The identifier for the graph. store_file : str, optional The file path for the store. Required if store is not 'memory'. structure_store : str, optional The structure store to be used. Raises ------ ValueError If store_file is None and store is not 'memory'. Returns ------- None """ _check_if_sqlalchemy_is_available() if store_file is None: raise ValueError("store file is needed if store is not memory") kg.graph = Graph(store="SQLAlchemy", identifier=identifier) uri = Literal(f"sqlite:///{store_file}") kg.graph.open(uri, create=True) kg.structure_store = _setup_structure_store(structure_store=structure_store)
def _check_if_sqlalchemy_is_available(): try: import sqlalchemy as sa except ImportError: raise RuntimeError("Please install the sqlalchemy package") try: import rdflib_sqlalchemy as rsa except ImportError: raise RuntimeError( "Please install the rdllib-sqlalchemy package. The development version is needed, please do pip install git+https://github.com/RDFLib/rdflib-sqlalchemy.git@develop" ) def _setup_structure_store(structure_store=None): if structure_store is None: structure_store = os.path.join(os.getcwd(), "rdf_structure_store") if not os.path.exists(structure_store): os.mkdir(structure_store) return structure_store def purge(store, identifier, store_file): if store in ["Memory", "memory"]: return _purge_memory(identifier, store_file) elif store in ["SQLAlchemy", "db", "database", "sqlalchemy"]: return _purge_alchemy(identifier, store_file) else: raise ValueError("Unknown store found!") def _purge_memory(identifier, store_file): graph = Graph(store="Memory", identifier=identifier) return graph def _purge_alchemy(identifier, store_file): os.remove(store_file) graph = Graph(store="SQLAlchemy", identifier=identifier) uri = Literal(f"sqlite:///{store_file}") graph.open(uri, create=True) return graph