Changeset - cc94b5fc9205
[Not reviewed]
default
0 3 0
Drew Perttula - 10 years ago 2015-06-13 04:34:43
drewp@bigasterisk.com
effects can mention sub uris, and this becomes currentSubValue(uri)
Ignore-this: 13a8162d01d4bd686c0955132ce290ef
3 files changed with 27 insertions and 5 deletions:
0 comments (0 inline, 0 general)
light9/effecteval/effect.py
Show inline comments
 
@@ -35,17 +35,20 @@ class CodeLine(object):
 
        self.uriCounter = 0
 
        resources = {}
 

	
 
        def alreadyInCurveFunc(s, i):
 
            prefix = 'curve('
 
        def alreadyInFunc(prefix, s, i):
 
            return i >= len(prefix) and s[i-len(prefix):i] == prefix
 

	
 
        def repl(m):
 
            v = '_res%s' % self.uriCounter
 
            self.uriCounter += 1
 
            r = resources[v] = URIRef(m.group(1))
 
            if self._uriIsCurve(r):
 
                if not alreadyInCurveFunc(m.string, m.start()):
 
                    return 'curve(%s, t)' % v
 
            for uriTypeMatches, wrapFuncName, addlArgs in [
 
                    (self._uriIsCurve(r), 'curve', ', t'),
 
                    (self._uriIsSub(r), 'currentSubLevel', ''),
 
            ]:
 
                if uriTypeMatches:
 
                    if not alreadyInFunc(wrapFuncName + '(', m.string, m.start()):
 
                        return '%s(%s%s)' % (wrapFuncName, v, addlArgs)
 
            return v
 
        outExpr = re.sub(r'<(http\S*?)>', repl, expr)
 
        return lname, expr, outExpr, resources
 
@@ -60,6 +63,9 @@ class CodeLine(object):
 
    def _uriIsCurve(self, uri):
 
        # this result could vary with graph changes (rare)
 
        return self.graph.contains((uri, RDF.type, L9['Curve']))
 

	
 
    def _uriIsSub(self, uri):
 
        return self.graph.contains((uri, RDF.type, L9['Submaster']))
 
        
 
    @prof.logTime
 
    def _resourcesAsPython(self, resources):
light9/effecteval/effectloop.py
Show inline comments
 
@@ -52,6 +52,12 @@ class EffectLoop(object):
 
        
 
        for effectUri in self.graph.objects(self.currentSong, L9['effect']):
 
            self.currentEffects.append(EffectNode(self.graph, effectUri))
 

	
 

	
 
        for sub in self.graph.subjects(RDF.type, L9['Submaster']):
 
            for effectUri in self.graph.objects(sub, L9['drivesEffect']):
 
                self.currentEffects.append(EffectNode(self.graph, effectUri))
 
                
 
        log.info('now we have %s effects', len(self.currentEffects))
 
        
 
    @inlineCallbacks
light9/effecteval/test_effect.py
Show inline comments
 
@@ -8,8 +8,11 @@ from rdflib import URIRef
 

	
 
def isCurve(self, uri):
 
    return 'curve' in uri
 
def isSub(self, uri):
 
    return 'sub' in uri
 

	
 
@mock.patch('light9.effecteval.effect.CodeLine._uriIsCurve', new=isCurve)
 
@mock.patch('light9.effecteval.effect.CodeLine._uriIsSub', new=isSub)
 
@mock.patch('light9.effecteval.effect.CodeLine._resourcesAsPython',
 
            new=lambda self, r: self.expr)
 
class TestAsPython(unittest.TestCase):
 
@@ -53,6 +56,13 @@ class TestAsPython(unittest.TestCase):
 
        self.assertEqual('curve(_res0, t+.01)', expr)
 
        self.assertEqual({'_res0': URIRef('http://example/curve1')}, uris)
 

	
 
    def test_sub_uri_expands_to_sub_lookup_func(self):
 
        ec = CodeLine(graph=None, code='x = <http://example/sub1>')
 
        _, inExpr, expr, uris = ec._asPython()
 
        self.assertEqual('currentSubLevel(_res0)', expr)
 
        self.assertEqual({'_res0': URIRef('http://example/sub1')}, uris)
 
        
 
        
 
@mock.patch('light9.effecteval.effect.CodeLine._uriIsCurve', new=isCurve)
 
@mock.patch('light9.effecteval.effect.CodeLine._resourcesAsPython',
 
            new=lambda self, r: self.expr)
0 comments (0 inline, 0 general)