annotate bin/subcomposer @ 2335:54cf7034bee0

EE don't abort compile on partial data
author drewp@bigasterisk.com
date Fri, 02 Jun 2023 14:54:11 -0700
parents 5bcb950024af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
729
b5efddd80dad update more shbang lines
Drew Perttula <drewp@bigasterisk.com>
parents: 577
diff changeset
1 #!bin/python
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
2 """
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
3 subcomposer
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
4 session
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
5 observable(currentSub), a Submaster which tracks the graph
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
6
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
7 EditChoice widget
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
8 can change currentSub to another sub
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
9
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
10 Levelbox widget
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
11 watch observable(currentSub) for a new sub, and also watch currentSub for edits to push to the OneLevel widgets
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
12
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
13 OneLevel widget
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
14 UI edits are caught here and go all the way back to currentSub
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
15
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
16
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
17 """
1859
f066d6e874db 2to3 with these fixers: all idioms set_literal
drewp@bigasterisk.com
parents: 1858
diff changeset
18
1697
5c04a54df635 fix startup (this might be breaking mypy)
Drew Perttula <drewp@bigasterisk.com>
parents: 1692
diff changeset
19 from run_local import log
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
20 import time, logging
1697
5c04a54df635 fix startup (this might be breaking mypy)
Drew Perttula <drewp@bigasterisk.com>
parents: 1692
diff changeset
21
5c04a54df635 fix startup (this might be breaking mypy)
Drew Perttula <drewp@bigasterisk.com>
parents: 1692
diff changeset
22 log.setLevel(logging.DEBUG)
5c04a54df635 fix startup (this might be breaking mypy)
Drew Perttula <drewp@bigasterisk.com>
parents: 1692
diff changeset
23
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
24 from optparse import OptionParser
1859
f066d6e874db 2to3 with these fixers: all idioms set_literal
drewp@bigasterisk.com
parents: 1858
diff changeset
25 import logging, urllib.request, urllib.parse, urllib.error
f066d6e874db 2to3 with these fixers: all idioms set_literal
drewp@bigasterisk.com
parents: 1858
diff changeset
26 import tkinter as tk
802
5442f5d8979a reformat
drewp@bigasterisk.com
parents: 729
diff changeset
27 import louie as dispatcher
803
ce4fffe8e413 update SC to read rdf graph
drewp@bigasterisk.com
parents: 802
diff changeset
28 from twisted.internet import reactor, tksupport, task
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
29 from rdflib import URIRef, RDF, RDFS, Literal
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
30
209
1a84c5e83d3e dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents: 201
diff changeset
31 from light9.dmxchanedit import Levelbox
1133
0923efae4588 fix import on subcomposer
drewp@bigasterisk.com
parents: 1114
diff changeset
32 from light9 import dmxclient, Submaster, prof, showconfig, networking
874
167a61d3cfbf subcomposer put local subs into the graph with a type edge.
Drew Perttula <drewp@bigasterisk.com>
parents: 867
diff changeset
33 from light9.Patch import get_channel_name
455
9dd2baa41cca subcomposer remembers window position
drewp@bigasterisk.com
parents: 450
diff changeset
34 from light9.uihelpers import toplevelat
1692
6fa4288da8a6 rdfdb is its own package now
drewp@bigasterisk.com
parents: 1267
diff changeset
35 from rdfdb.syncedgraph import SyncedGraph
1698
f140153c087c bring back clientsession which doesn't belong in rdfdb
Drew Perttula <drewp@bigasterisk.com>
parents: 1697
diff changeset
36 from light9 import clientsession
850
f987eb9c3672 subcomposer code merge
drewp@bigasterisk.com
parents: 838
diff changeset
37 from light9.tkdnd import initTkdnd
f987eb9c3672 subcomposer code merge
drewp@bigasterisk.com
parents: 838
diff changeset
38 from light9.namespaces import L9
1692
6fa4288da8a6 rdfdb is its own package now
drewp@bigasterisk.com
parents: 1267
diff changeset
39 from rdfdb.patch import Patch
850
f987eb9c3672 subcomposer code merge
drewp@bigasterisk.com
parents: 838
diff changeset
40 from light9.observable import Observable
f987eb9c3672 subcomposer code merge
drewp@bigasterisk.com
parents: 838
diff changeset
41 from light9.editchoice import EditChoice, Local
1164
65f0179a9254 subcomposer has a web ui with buttons for toggling lights
drewp@bigasterisk.com
parents: 1133
diff changeset
42 from light9.subcomposer import subcomposerweb
818
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
43
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
44
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 class Subcomposer(tk.Frame):
817
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
46 """
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
47 <session> l9:currentSub ?sub is the URI of the sub we're tied to for displaying and
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
48 editing. If we don't have a currentSub, then we're actually
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
49 editing a session-local sub called <session> l9:currentSub <sessionLocalSub>
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
50
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
51 I'm not sure that Locals should even be PersistentSubmaster with
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
52 uri and graph storage, but I think that way is making fewer
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
53 special cases.
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
54
818
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
55 Contains an EditChoice widget
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
56
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
57 Dependencies:
817
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
58
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
59 graph (?session :currentSub ?s) -> self.currentSub
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
60 self.currentSub -> graph
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
61 self.currentSub -> self._currentChoice (which might be Local)
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
62 self._currentChoice (which might be Local) -> self.currentSub
818
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
63
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
64 inside the current sub:
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
65 graph -> Submaster levels (handled in Submaster)
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
66 Submaster levels -> OneLevel widget
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
67 OneLevel widget -> Submaster.editLevel
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
68 Submaster.editLevel -> graph (handled in Submaster)
817
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
69
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
70 """
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
71
810
f29788d1c8c9 kc/sc session control
drewp@bigasterisk.com
parents: 804
diff changeset
72 def __init__(self, master, graph, session):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 tk.Frame.__init__(self, master, bg='black')
803
ce4fffe8e413 update SC to read rdf graph
drewp@bigasterisk.com
parents: 802
diff changeset
74 self.graph = graph
810
f29788d1c8c9 kc/sc session control
drewp@bigasterisk.com
parents: 804
diff changeset
75 self.session = session
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
76 self.launchTime = time.time()
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
77 self.localSerial = 0
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
78
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
79 # this is a URIRef or Local. Strangely, the Local case still
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
80 # has a uri, which you can get from
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
81 # self.currentSub.uri. Probably that should be on the Local
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
82 # object too, or maybe Local should be a subclass of URIRef
867
4b3d7e8ba24a subcomposer is nicer if we always have some Submaster object. and if you call all the init code
Drew Perttula <drewp@bigasterisk.com>
parents: 850
diff changeset
83 self._currentChoice = Observable(Local)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
84
867
4b3d7e8ba24a subcomposer is nicer if we always have some Submaster object. and if you call all the init code
Drew Perttula <drewp@bigasterisk.com>
parents: 850
diff changeset
85 # this is a PersistentSubmaster (even for local)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
86 self.currentSub = Observable(
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
87 Submaster.PersistentSubmaster(graph, self.switchToLocal()))
818
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
88
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
89 def pc(val):
850
f987eb9c3672 subcomposer code merge
drewp@bigasterisk.com
parents: 838
diff changeset
90 log.info("change viewed sub to %s", val)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
91
850
f987eb9c3672 subcomposer code merge
drewp@bigasterisk.com
parents: 838
diff changeset
92 self._currentChoice.subscribe(pc)
818
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
93
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
94 ec = self.editChoice = EditChoice(self, self.graph, self._currentChoice)
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
95 ec.frame.pack(side='top')
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
96
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
97 ec.subIcon.bind("<ButtonPress-1>", self.clickSubIcon)
867
4b3d7e8ba24a subcomposer is nicer if we always have some Submaster object. and if you call all the init code
Drew Perttula <drewp@bigasterisk.com>
parents: 850
diff changeset
98 self.setupSubChoiceLinks()
874
167a61d3cfbf subcomposer put local subs into the graph with a type edge.
Drew Perttula <drewp@bigasterisk.com>
parents: 867
diff changeset
99 self.setupLevelboxUi()
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
100
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
101 def clickSubIcon(self, *args):
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
102 box = tk.Toplevel(self.editChoice.frame)
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
103 box.wm_transient(self.editChoice.frame)
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
104 tk.Label(box, text="Name this sub:").pack()
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
105 e = tk.Entry(box)
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
106 e.pack()
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
107 b = tk.Button(box, text="Make global")
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
108 b.pack()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
109
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
110 def clicked(*args):
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
111 self.makeGlobal(newName=e.get())
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
112 box.destroy()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
113
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
114 b.bind("<Button-1>", clicked)
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
115 e.focus()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
116
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
117 def makeGlobal(self, newName):
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
118 """promote our local submaster into a non-local, named one"""
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
119 uri = self.currentSub().uri
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
120 newUri = showconfig.showUri() + ("/sub/%s" %
1859
f066d6e874db 2to3 with these fixers: all idioms set_literal
drewp@bigasterisk.com
parents: 1858
diff changeset
121 urllib.parse.quote(newName, safe=''))
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
122 with self.graph.currentState(tripleFilter=(uri, None, None)) as current:
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
123 if (uri, RDF.type, L9['LocalSubmaster']) not in current:
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
124 raise ValueError("%s is not a local submaster" % uri)
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
125 if (newUri, None, None) in current:
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
126 raise ValueError("new uri %s is in use" % newUri)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
127
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
128 # the local submaster was storing in ctx=self.session, but now
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
129 # we want it to be in ctx=uri
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
130
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
131 self.relocateSub(newUri, newName)
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
132
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
133 # these are in separate patches for clarity as i'm debugging this
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
134 self.graph.patch(
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
135 Patch(addQuads=[
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
136 (newUri, RDFS.label, Literal(newName), newUri),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
137 ],
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
138 delQuads=[
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
139 (newUri, RDF.type, L9['LocalSubmaster'], newUri),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
140 ]))
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
141 self.graph.patchObject(self.session, self.session, L9['currentSub'],
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
142 newUri)
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
143
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
144 def relocateSub(self, newUri, newName):
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
145 # maybe this goes in Submaster
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
146 uri = self.currentSub().uri
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
147
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
148 def repl(u):
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
149 if u == uri:
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
150 return newUri
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
151 return u
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
152
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
153 delQuads = self.currentSub().allQuads()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
154 addQuads = [(repl(s), p, repl(o), newUri) for s, p, o, c in delQuads]
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
155 # patch can't span contexts yet
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
156 self.graph.patch(Patch(addQuads=addQuads, delQuads=[]))
929
c20c2eea6fce another hack to stop graphfile from thinking its own new empty file means it should delete all the statements in that context
Drew Perttula <drewp@bigasterisk.com>
parents: 924
diff changeset
157 self.graph.patch(Patch(addQuads=[], delQuads=delQuads))
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
158
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
159 def setupSubChoiceLinks(self):
874
167a61d3cfbf subcomposer put local subs into the graph with a type edge.
Drew Perttula <drewp@bigasterisk.com>
parents: 867
diff changeset
160 graph = self.graph
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
161
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
162 def ann():
1860
5bcb950024af reformat python
drewp@bigasterisk.com
parents: 1859
diff changeset
163 print("currently: session=%s currentSub=%r _currentChoice=%r" %
5bcb950024af reformat python
drewp@bigasterisk.com
parents: 1859
diff changeset
164 (self.session, self.currentSub(), self._currentChoice()))
818
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
165
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
166 @graph.addHandler
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
167 def graphChanged():
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
168 # some bug where SC is making tons of graph edits and many
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
169 # are failing. this calms things down.
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
170 log.warn('skip graphChanged')
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
171 return
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
172
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
173 s = graph.value(self.session, L9['currentSub'])
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
174 log.debug('HANDLER getting session currentSub from graph: %s', s)
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
175 if s is None:
932
92c6e4b6cabb change base uri used on local subs
drewp@bigasterisk.com
parents: 929
diff changeset
176 s = self.switchToLocal()
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
177 self.currentSub(Submaster.PersistentSubmaster(graph, s))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
178
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
179 @self.currentSub.subscribe
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
180 def subChanged(newSub):
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
181 log.debug('HANDLER currentSub changed to %s', newSub)
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
182 if newSub is None:
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
183 graph.patchObject(self.session, self.session, L9['currentSub'],
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
184 None)
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
185 return
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
186 self.sendupdate()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
187 graph.patchObject(self.session, self.session, L9['currentSub'],
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
188 newSub.uri)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
189
911
4b9997ab0e4f push some logs down to debug. -v flag on SC. another tripleFilter optimization
Drew Perttula <drewp@bigasterisk.com>
parents: 880
diff changeset
190 localStmt = (newSub.uri, RDF.type, L9['LocalSubmaster'])
4b9997ab0e4f push some logs down to debug. -v flag on SC. another tripleFilter optimization
Drew Perttula <drewp@bigasterisk.com>
parents: 880
diff changeset
191 with graph.currentState(tripleFilter=localStmt) as current:
4b9997ab0e4f push some logs down to debug. -v flag on SC. another tripleFilter optimization
Drew Perttula <drewp@bigasterisk.com>
parents: 880
diff changeset
192 if newSub and localStmt in current:
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
193 log.debug(' HANDLER set _currentChoice to Local')
880
e09e3d1d83d5 slightly better behavior when the graph is out of sync. add LocalSubmaster type
drewp@bigasterisk.com
parents: 874
diff changeset
194 self._currentChoice(Local)
e09e3d1d83d5 slightly better behavior when the graph is out of sync. add LocalSubmaster type
drewp@bigasterisk.com
parents: 874
diff changeset
195 else:
e09e3d1d83d5 slightly better behavior when the graph is out of sync. add LocalSubmaster type
drewp@bigasterisk.com
parents: 874
diff changeset
196 # i think right here is the point that the last local
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
197 # becomes garbage, and we could clean it up.
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
198 log.debug(' HANDLER set _currentChoice to newSub.uri')
880
e09e3d1d83d5 slightly better behavior when the graph is out of sync. add LocalSubmaster type
drewp@bigasterisk.com
parents: 874
diff changeset
199 self._currentChoice(newSub.uri)
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
200
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
201 dispatcher.connect(self.levelsChanged, "sub levels changed")
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
202
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
203 @self._currentChoice.subscribe
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
204 def choiceChanged(newChoice):
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
205 log.debug('HANDLER choiceChanged to %s', newChoice)
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
206 if newChoice is Local:
932
92c6e4b6cabb change base uri used on local subs
drewp@bigasterisk.com
parents: 929
diff changeset
207 newChoice = self.switchToLocal()
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
208 if newChoice is not None:
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
209 newSub = Submaster.PersistentSubmaster(graph, newChoice)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
210 log.debug('write new choice to currentSub, from %r to %r',
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
211 self.currentSub(), newSub)
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
212 self.currentSub(newSub)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
213
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
214 def levelsChanged(self, sub):
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
215 if sub == self.currentSub():
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
216 self.sendupdate()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
217
932
92c6e4b6cabb change base uri used on local subs
drewp@bigasterisk.com
parents: 929
diff changeset
218 def switchToLocal(self):
924
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
219 """
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
220 change our display to a local submaster
dcab422615ca working on local->global sub action. creation of new file in rdfdb is still a problem
drewp@bigasterisk.com
parents: 914
diff changeset
221 """
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
222 # todo: where will these get stored, or are they local to this
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
223 # subcomposer process and don't use PersistentSubmaster at all?
1267
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
224 localId = "%s-%s" % (self.launchTime, self.localSerial)
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
225 self.localSerial += 1
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
226 new = URIRef("http://light9.bigasterisk.com/sub/local/%s" % localId)
ce8a71fab284 trying to fix SC bad graph reload behavior, but this barely works. other tools have trouble too
drewp@bigasterisk.com
parents: 1164
diff changeset
227 log.debug('making up a local sub %s', new)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
228 self.graph.patch(
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
229 Patch(addQuads=[
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
230 (new, RDF.type, L9['Submaster'], self.session),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
231 (new, RDF.type, L9['LocalSubmaster'], self.session),
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
232 ]))
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
233
874
167a61d3cfbf subcomposer put local subs into the graph with a type edge.
Drew Perttula <drewp@bigasterisk.com>
parents: 867
diff changeset
234 return new
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
235
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
236 def setupLevelboxUi(self):
874
167a61d3cfbf subcomposer put local subs into the graph with a type edge.
Drew Perttula <drewp@bigasterisk.com>
parents: 867
diff changeset
237 self.levelbox = Levelbox(self, self.graph, self.currentSub)
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
238 self.levelbox.pack(side='top')
817
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
239
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
240 tk.Button(
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
241 self,
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
242 text="All to zero",
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
243 command=lambda *args: self.currentSub().clear()).pack(side='top')
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
244
351
a6662d61ebcd SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents: 342
diff changeset
245 def savenewsub(self, subname):
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
246 leveldict = {}
1859
f066d6e874db 2to3 with these fixers: all idioms set_literal
drewp@bigasterisk.com
parents: 1858
diff changeset
247 for i, lev in zip(list(range(len(self.levels))), self.levels):
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
248 if lev != 0:
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
249 leveldict[get_channel_name(i + 1)] = lev
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
250
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
251 s = Submaster.Submaster(subname, levels=leveldict)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
252 s.save()
802
5442f5d8979a reformat
drewp@bigasterisk.com
parents: 729
diff changeset
253
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
254 def sendupdate(self):
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
255 d = self.currentSub().get_dmx_list()
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
256 dmxclient.outputlevels(d, twisted=True)
802
5442f5d8979a reformat
drewp@bigasterisk.com
parents: 729
diff changeset
257
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
258
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
259 def launch(opts, args, root, graph, session):
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
260 if not opts.no_geometry:
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
261 toplevelat("subcomposer - %s" % opts.session, root, graph, session)
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
262
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
263 sc = Subcomposer(root, graph, session)
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
264 sc.pack()
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
265
1164
65f0179a9254 subcomposer has a web ui with buttons for toggling lights
drewp@bigasterisk.com
parents: 1133
diff changeset
266 subcomposerweb.init(graph, session, sc.currentSub)
818
bf728997bfde start the observable between editchoice and the editor
drewp@bigasterisk.com
parents: 817
diff changeset
267
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
268 tk.Label(root,
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
269 text="Bindings: B1 adjust level; B2 set full; B3 instant bump",
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
270 font="Helvetica -12 italic",
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
271 anchor='w').pack(side='top', fill='x')
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
272
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
273 if len(args) == 1:
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
274 # it might be a little too weird that cmdline arg to this
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
275 # process changes anything else in the same session. But also
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
276 # I'm not sure who would ever make 2 subcomposers of the same
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
277 # session (except when quitting and restarting, to get the
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
278 # same window pos), so maybe it doesn't matter. But still,
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
279 # this tool should probably default to making new sessions
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
280 # usually instead of loading the same one
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
281 graph.patchObject(session, session, L9['currentSub'], URIRef(args[0]))
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
282
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
283 task.LoopingCall(sc.sendupdate).start(10)
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
284
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
285
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
286 #############################
45b12307c695 Initial revision
drewp
parents:
diff changeset
287
45b12307c695 Initial revision
drewp
parents:
diff changeset
288 if __name__ == "__main__":
838
321fc6150ee3 subcomposer's nice currently-editing DnD box
drewp@bigasterisk.com
parents: 834
diff changeset
289 parser = OptionParser(usage="%prog [suburi]")
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
290 parser.add_option('--no-geometry',
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
291 action='store_true',
458
8b307310cc1b when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents: 455
diff changeset
292 help="don't save/restore window geometry")
911
4b9997ab0e4f push some logs down to debug. -v flag on SC. another tripleFilter optimization
Drew Perttula <drewp@bigasterisk.com>
parents: 880
diff changeset
293 parser.add_option('-v', action='store_true', help="log debug level")
4b9997ab0e4f push some logs down to debug. -v flag on SC. another tripleFilter optimization
Drew Perttula <drewp@bigasterisk.com>
parents: 880
diff changeset
294
810
f29788d1c8c9 kc/sc session control
drewp@bigasterisk.com
parents: 804
diff changeset
295 clientsession.add_option(parser)
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
296 opts, args = parser.parse_args()
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
297
911
4b9997ab0e4f push some logs down to debug. -v flag on SC. another tripleFilter optimization
Drew Perttula <drewp@bigasterisk.com>
parents: 880
diff changeset
298 log.setLevel(logging.DEBUG if opts.v else logging.INFO)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
299
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
300 root = tk.Tk()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
301 root.config(bg='black')
147
6a1f4becb1db merged some late color change edits from the theater
drewp
parents: 144
diff changeset
302 root.tk_setPalette("#004633")
817
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
303
6885c2fa9369 subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents: 810
diff changeset
304 initTkdnd(root.tk, 'tkdnd/trunk/')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
305
1114
a38955ba6f40 rdfdb port is now in the config
Drew Perttula <drewp@bigasterisk.com>
parents: 932
diff changeset
306 graph = SyncedGraph(networking.rdfdb.url, "subcomposer")
810
f29788d1c8c9 kc/sc session control
drewp@bigasterisk.com
parents: 804
diff changeset
307 session = clientsession.getUri('subcomposer', opts)
803
ce4fffe8e413 update SC to read rdf graph
drewp@bigasterisk.com
parents: 802
diff changeset
308
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
309 graph.initiallySynced.addCallback(lambda _: launch(opts, args, root, graph,
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
310 session))
557
4e558643c952 subcomposer: squelch the exception we got every time we exited
David McClosky <dmcc@bigasterisk.com>
parents: 458
diff changeset
311
810
f29788d1c8c9 kc/sc session control
drewp@bigasterisk.com
parents: 804
diff changeset
312 root.protocol('WM_DELETE_WINDOW', reactor.stop)
1858
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1698
diff changeset
313 tksupport.install(root, ms=10)
803
ce4fffe8e413 update SC to read rdf graph
drewp@bigasterisk.com
parents: 802
diff changeset
314 prof.run(reactor.run, profile=False)