diff env/lib/python3.7/site-packages/rdflib/collection.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/rdflib/collection.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-from rdflib.namespace import RDF
-from rdflib.term import BNode
-from rdflib.term import Literal
-from rdflib.py3compat import format_doctest_out
-
-__all__ = ['Collection']
-
-
-class Collection(object):
-    __doc__ = format_doctest_out("""
-    See "Emulating container types":
-    https://docs.python.org/reference/datamodel.html#emulating-container-types
-
-    >>> from rdflib.graph import Graph
-    >>> from pprint import pprint
-    >>> listName = BNode()
-    >>> g = Graph('IOMemory')
-    >>> listItem1 = BNode()
-    >>> listItem2 = BNode()
-    >>> g.add((listName, RDF.first, Literal(1)))
-    >>> g.add((listName, RDF.rest, listItem1))
-    >>> g.add((listItem1, RDF.first, Literal(2)))
-    >>> g.add((listItem1, RDF.rest, listItem2))
-    >>> g.add((listItem2, RDF.rest, RDF.nil))
-    >>> g.add((listItem2, RDF.first, Literal(3)))
-    >>> c = Collection(g,listName)
-    >>> pprint([term.n3() for term in c])
-    [%(u)s'"1"^^<http://www.w3.org/2001/XMLSchema#integer>',
-     %(u)s'"2"^^<http://www.w3.org/2001/XMLSchema#integer>',
-     %(u)s'"3"^^<http://www.w3.org/2001/XMLSchema#integer>']
-
-    >>> Literal(1) in c
-    True
-    >>> len(c)
-    3
-    >>> c._get_container(1) == listItem1
-    True
-    >>> c.index(Literal(2)) == 1
-    True
-    """)
-
-    def __init__(self, graph, uri, seq=[]):
-        self.graph = graph
-        self.uri = uri or BNode()
-        self += seq
-
-    def n3(self):
-        """
-        >>> from rdflib.graph import Graph
-        >>> listName = BNode()
-        >>> g = Graph('IOMemory')
-        >>> listItem1 = BNode()
-        >>> listItem2 = BNode()
-        >>> g.add((listName, RDF.first, Literal(1)))
-        >>> g.add((listName, RDF.rest, listItem1))
-        >>> g.add((listItem1, RDF.first, Literal(2)))
-        >>> g.add((listItem1, RDF.rest, listItem2))
-        >>> g.add((listItem2, RDF.rest, RDF.nil))
-        >>> g.add((listItem2, RDF.first, Literal(3)))
-        >>> c = Collection(g, listName)
-        >>> print(c.n3()) #doctest: +NORMALIZE_WHITESPACE
-        ( "1"^^<http://www.w3.org/2001/XMLSchema#integer>
-          "2"^^<http://www.w3.org/2001/XMLSchema#integer>
-          "3"^^<http://www.w3.org/2001/XMLSchema#integer> )
-        """
-        return "( %s )" % (' '.join([i.n3() for i in self]))
-
-    def _get_container(self, index):
-        """Gets the first, rest holding node at index."""
-        assert isinstance(index, int)
-        graph = self.graph
-        container = self.uri
-        i = 0
-        while i < index:
-            i += 1
-            container = graph.value(container, RDF.rest)
-            if container is None:
-                break
-        return container
-
-    def __len__(self):
-        """length of items in collection."""
-        return len(list(self.graph.items(self.uri)))
-
-    def index(self, item):
-        """
-        Returns the 0-based numerical index of the item in the list
-        """
-        listName = self.uri
-        index = 0
-        while True:
-            if (listName, RDF.first, item) in self.graph:
-                return index
-            else:
-                newLink = list(self.graph.objects(listName, RDF.rest))
-                index += 1
-                if newLink == [RDF.nil]:
-                    raise ValueError("%s is not in %s" % (item, self.uri))
-                elif not newLink:
-                    raise Exception("Malformed RDF Collection: %s" % self.uri)
-                else:
-                    assert len(newLink) == 1, \
-                        "Malformed RDF Collection: %s" % self.uri
-                    listName = newLink[0]
-
-    def __getitem__(self, key):
-        """TODO"""
-        c = self._get_container(key)
-        if c:
-            v = self.graph.value(c, RDF.first)
-            if v:
-                return v
-            else:
-                raise KeyError(key)
-        else:
-            raise IndexError(key)
-
-    def __setitem__(self, key, value):
-        """TODO"""
-        c = self._get_container(key)
-        if c:
-            self.graph.set((c, RDF.first, value))
-        else:
-            raise IndexError(key)
-
-    def __delitem__(self, key):
-        """
-        >>> from rdflib.namespace import RDF, RDFS
-        >>> from rdflib import Graph
-        >>> from pprint import pformat
-        >>> g = Graph()
-        >>> a = BNode('foo')
-        >>> b = BNode('bar')
-        >>> c = BNode('baz')
-        >>> g.add((a, RDF.first, RDF.type))
-        >>> g.add((a, RDF.rest, b))
-        >>> g.add((b, RDF.first, RDFS.label))
-        >>> g.add((b, RDF.rest, c))
-        >>> g.add((c, RDF.first, RDFS.comment))
-        >>> g.add((c, RDF.rest, RDF.nil))
-        >>> len(g)
-        6
-        >>> def listAncestry(node, graph):
-        ...   for i in graph.subjects(RDF.rest, node):
-        ...     yield i
-        >>> [str(node.n3())
-        ...   for node in g.transitiveClosure(listAncestry, RDF.nil)]
-        ['_:baz', '_:bar', '_:foo']
-        >>> lst = Collection(g, a)
-        >>> len(lst)
-        3
-        >>> b == lst._get_container(1)
-        True
-        >>> c == lst._get_container(2)
-        True
-        >>> del lst[1]
-        >>> len(lst)
-        2
-        >>> len(g)
-        4
-
-        """
-        self[key]  # to raise any potential key exceptions
-        graph = self.graph
-        current = self._get_container(key)
-        assert current
-        if len(self) == 1 and key > 0:
-            pass
-        elif key == len(self) - 1:
-            # the tail
-            priorLink = self._get_container(key - 1)
-            self.graph.set((priorLink, RDF.rest, RDF.nil))
-            graph.remove((current, None, None))
-        else:
-            next = self._get_container(key + 1)
-            prior = self._get_container(key - 1)
-            assert next and prior
-            graph.remove((current, None, None))
-            graph.set((prior, RDF.rest, next))
-
-    def __iter__(self):
-        """Iterator over items in Collections"""
-        return self.graph.items(self.uri)
-
-    def _end(self):
-        # find end of list
-        container = self.uri
-        while True:
-            rest = self.graph.value(container, RDF.rest)
-            if rest == None or rest == RDF.nil:
-                return container
-            else:
-                container = rest
-
-    def append(self, item):
-        """
-        >>> from rdflib.graph import Graph
-        >>> listName = BNode()
-        >>> g = Graph()
-        >>> c = Collection(g,listName,[Literal(1),Literal(2)])
-        >>> links = [
-        ...     list(g.subjects(object=i, predicate=RDF.first))[0] for i in c]
-        >>> len([i for i in links if (i, RDF.rest, RDF.nil) in g])
-        1
-
-        """
-
-        end = self._end()
-        if (end, RDF.first, None) in self.graph:
-            # append new node to the end of the linked list
-            node = BNode()
-            self.graph.set((end, RDF.rest, node))
-            end = node
-
-        self.graph.add((end, RDF.first, item))
-        self.graph.add((end, RDF.rest, RDF.nil))
-
-    def __iadd__(self, other):
-
-        end = self._end()
-        self.graph.remove((end, RDF.rest, None))
-
-        for item in other:
-            if (end, RDF.first, None) in self.graph:
-                nxt = BNode()
-                self.graph.add((end, RDF.rest, nxt))
-                end = nxt
-
-            self.graph.add((end, RDF.first, item))
-
-
-        self.graph.add((end, RDF.rest, RDF.nil))
-
-    def clear(self):
-        container = self.uri
-        graph = self.graph
-        while container:
-            rest = graph.value(container, RDF.rest)
-            graph.remove((container, RDF.first, None))
-            graph.remove((container, RDF.rest, None))
-            container = rest
-
-
-def test():
-    import doctest
-    doctest.testmod()
-
-if __name__ == "__main__":
-    test()
-
-    from rdflib import Graph
-    g = Graph()
-
-    c = Collection(g, BNode())
-
-    assert len(c) == 0
-
-    c = Collection(
-        g, BNode(), [Literal("1"), Literal("2"), Literal("3"), Literal("4")])
-
-    assert len(c) == 4
-
-    assert c[1] == Literal("2"), c[1]
-
-    del c[1]
-
-    assert list(c) == [Literal("1"), Literal("3"), Literal("4")], list(c)
-
-    try:
-        del c[500]
-    except IndexError as i:
-        pass
-
-    c.append(Literal("5"))
-
-    print((list(c)))
-
-    for i in c:
-        print(i)
-
-    del c[3]
-
-    c.clear()
-
-    assert len(c) == 0