Mercurial > code > home > repos > light9
changeset 1249:cc94b5fc9205
effects can mention sub uris, and this becomes currentSubValue(uri)
Ignore-this: 13a8162d01d4bd686c0955132ce290ef
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Sat, 13 Jun 2015 04:34:43 +0000 |
parents | e1a407e928a7 |
children | b5b841cee380 |
files | light9/effecteval/effect.py light9/effecteval/effectloop.py light9/effecteval/test_effect.py |
diffstat | 3 files changed, 27 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/light9/effecteval/effect.py Sat Jun 13 04:31:08 2015 +0000 +++ b/light9/effecteval/effect.py Sat Jun 13 04:34:43 2015 +0000 @@ -35,17 +35,20 @@ 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 @@ 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):
--- a/light9/effecteval/effectloop.py Sat Jun 13 04:31:08 2015 +0000 +++ b/light9/effecteval/effectloop.py Sat Jun 13 04:34:43 2015 +0000 @@ -52,6 +52,12 @@ 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
--- a/light9/effecteval/test_effect.py Sat Jun 13 04:31:08 2015 +0000 +++ b/light9/effecteval/test_effect.py Sat Jun 13 04:34:43 2015 +0000 @@ -8,8 +8,11 @@ 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 @@ 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)