Changeset - f345d3d3ea00
[Not reviewed]
default
0 1 0
Drew Perttula - 9 years ago 2016-06-09 05:00:46
drewp@bigasterisk.com
patchN3SerializerToUseLessWhitespace
Ignore-this: 573998c640109f48c1f07dbf5356a7b5
1 file changed with 51 insertions and 1 deletions:
0 comments (0 inline, 0 general)
light9/rdfdb/graphfile.py
Show inline comments
 
import logging, traceback, os, time
 
from twisted.python.filepath import FilePath
 
from twisted.internet import reactor
 
from twisted.internet.inotify import humanReadableMask
 
from rdflib import Graph
 
from rdflib import Graph, RDF
 
from light9.rdfdb.patch import Patch
 
from light9.rdfdb.rdflibpatch import inContext
 

	
 
log = logging.getLogger('graphfile')
 
iolog = logging.getLogger('io')
 

	
 
def patchN3SerializerToUseLessWhitespace():
 
    # todo: make a n3serializer subclass with whitespace settings
 
    from rdflib.plugins.serializers.turtle import TurtleSerializer, OBJECT
 
    originalWrite = TurtleSerializer.write
 
    def write(self, s):
 
        lines = s.split('\n')
 
        if len(lines) > 1:
 
            self._column = len(lines[-1])
 
        else:
 
            self._column += len(lines[0])
 
        return originalWrite(self, s)
 
    TurtleSerializer.write = write
 
    def predicateList(self, subject, newline=False):
 
        properties = self.buildPredicateHash(subject)
 
        propList = self.sortProperties(properties)
 
        if len(propList) == 0:
 
            return
 
        self.verb(propList[0], newline=newline)
 
        self.objectList(properties[propList[0]])
 
        for predicate in propList[1:]:
 
            self.write(';')
 
            # can't do proper wrapping since we don't know how much is coming
 
            if self._column > 50:
 
                self.write('\n' + self.indent(1))
 
            self.verb(predicate, newline=False)
 
            self.objectList(properties[predicate])
 
    def objectList(self, objects):
 
        count = len(objects)
 
        if count == 0:
 
            return
 
        depthmod = (count == 1) and 0 or 1
 
        self.depth += depthmod
 
        self.path(objects[0], OBJECT)
 
        for obj in objects[1:]:
 
            self.write(', ')
 
            self.path(obj, OBJECT, newline=True)
 
        self.depth -= depthmod
 

	
 
    originalStatement = TurtleSerializer.statement
 
    def statement(self, subject):
 
        if list(self.store.triples((subject, RDF.type, None))):
 
            self.write('\n')
 
        originalStatement(self, subject)
 
        return False         #  suppress blank line for 'minor' statements
 
    TurtleSerializer.statement = statement
 
    TurtleSerializer.predicateList = predicateList
 
    TurtleSerializer.objectList = objectList
 

	
 
patchN3SerializerToUseLessWhitespace()
 

	
 
class GraphFile(object):
 
    """
 
    one rdf file that we read from, write to, and notice external changes to
 
    """
 
    def __init__(self, notifier, path, uri, patch, getSubgraph):
 
        """
0 comments (0 inline, 0 general)