Source code for surf.plugin.writer

# Copyright (c) 2009, Digital Enterprise Research Institute (DERI),
# NUI Galway
# All rights reserved.

# author: Cosmin Basca
# email: cosmin.basca@gmail.com

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#    * Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright
#      notice, this list of conditions and the following disclaimer
#      in the documentation and/or other materials provided with
#      the distribution.
#    * Neither the name of DERI nor the
#      names of its contributors may be used to endorse or promote
#      products derived from this software without specific prior
#      written permission.

# THIS SOFTWARE IS PROVIDED BY DERI ''AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DERI BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.

# -*- coding: utf-8 -*-
__author__ = 'Cosmin Basca'

from surf.plugin import Plugin
from surf.plugin.reader import RDFReader
from surf.rdf import BNode, ConjunctiveGraph, Literal, RDF, URIRef

class InvalidResourceException(Exception):
    def __init__(self,*args,**kwargs):
        super(InvalidResourceException,self).__init__(self,*args,**kwargs)

[docs]class RDFWriter(Plugin): """ Super class for all surf Writer plugins. """ def __init__(self,reader, *args, **kwargs): Plugin.__init__(self, *args, **kwargs) if isinstance(reader,RDFReader): self.__reader = reader else: raise ValueError("The reader plugin must be of type RDFReader " + "not %s" % type(reader)) reader = property(fget = lambda self: self.__reader) #protected interface def _clear(self,context = None): pass def _save(self, *resources): pass def _update(self, *resources): pass def _remove(self, *resources, **kwargs): pass def _size(self): return -1 def _add_triple(self, s = None, p = None, o = None, context = None): pass def _set_triple(self, s = None, p = None, o = None, context = None): pass def _remove_triple(self, s = None, p = None, o = None, context = None): pass #public interface
[docs] def clear(self, context = None): """ Remove all triples from the `store`. If ``context`` is specified, only the specified context will be cleared. """ self._clear(context = context)
[docs] def save(self, *resources): """ Replace the ``*resources`` in store with their current state. """ for resource in resources: if not hasattr(resource, "subject"): raise InvalidResourceException("Arguments must be of type surf.resource.Resource") self._save(*resources)
[docs] def update(self, *resources): """ Update the ``*resources`` to the `store` - persist. """ for resource in resources: if not hasattr(resource, "subject"): raise InvalidResourceException("Arguments must be of type surf.resource.Resource") self._update(resource)
[docs] def remove(self, *resources, **kwargs): """ Completely remove the ``*resources`` from the `store`. """ #TODO: decide whether triples that are indirect (belong to other # resource should be removed as well) for resource in resources: if not hasattr(resource, "subject"): raise InvalidResourceException("Arguments must be of type surf.resource.Resource") self._remove(*resources, **kwargs)
[docs] def size(self): """ Return the number of `triples` in the current `store`. """ return self._size() # triple level access methods
[docs] def add_triple(self, s = None, p = None, o = None, context = None): """ Add a triple to the `store`, in the specified ``context``. `None` can be used as a wildcard. """ self._add_triple(s, p, o, context)
[docs] def set_triple(self, s = None, p = None, o = None, context = None): """ Replace a triple in the `store` and specified ``context``. `None` can be used as a wildcard. """ self._set_triple(s,p,o,context)
[docs] def remove_triple(self,s=None,p=None,o=None, context=None): """ Remove a triple from the `store`, from the specified ``context``. `None` can be used as a wildcard. """ self._remove_triple(s,p,o,context) # management
[docs] def close(self): """ Close the `plugin`. """ pass
[docs] def index_triples(self,**kwargs): """ Perform `index` of the `triples` if such functionality is present. Return `True` if operation successful. """ return False
[docs] def load_triples(self,**kwargs): """ Load `triples` from supported `sources` if such functionality is present. Return `True` if operation successful. """ return False