diff --git a/bin/ascoltami2 b/bin/ascoltami2 --- a/bin/ascoltami2 +++ b/bin/ascoltami2 @@ -1,7 +1,7 @@ #!bin/python from run_local import log from twisted.internet import reactor -import web, thread, sys, optparse, logging +import web, _thread, sys, optparse, logging from rdflib import URIRef sys.path.append(".") sys.path.append('/usr/lib/python2.7/dist-packages') # For gi diff --git a/bin/bumppad b/bin/bumppad --- a/bin/bumppad +++ b/bin/bumppad @@ -1,7 +1,7 @@ #!bin/python -from __future__ import division, nested_scopes + import sys, time, math -import Tkinter as tk +import tkinter as tk import run_local import light9.dmxclient as dmxclient @@ -55,7 +55,7 @@ class pad(tk.Frame): self.master.after_idle(self.output) def output(self): - dmx = sub_maxes(*[s * l for s, l in self.levs.items()]).get_dmx_list() + dmx = sub_maxes(*[s * l for s, l in list(self.levs.items())]).get_dmx_list() dmxclient.outputlevels(dmx, clientid="bumppad") diff --git a/bin/captureDevice b/bin/captureDevice --- a/bin/captureDevice +++ b/bin/captureDevice @@ -1,5 +1,5 @@ #!bin/python -from __future__ import division + from rdflib import URIRef from twisted.internet import reactor from twisted.internet.defer import inlineCallbacks, Deferred diff --git a/bin/clientdemo b/bin/clientdemo --- a/bin/clientdemo +++ b/bin/clientdemo @@ -25,7 +25,7 @@ if __name__ == "__main__": def updateDemoValue(): v = list(g.objects(L9['demo'], L9['is'])) - print "demo value is %r" % v + print("demo value is %r" % v) g.addHandler(updateDemoValue) diff --git a/bin/collector b/bin/collector --- a/bin/collector +++ b/bin/collector @@ -7,7 +7,7 @@ custom code for some attributes. Input can be over http or zmq. """ -from __future__ import division + from run_local import log from rdflib import URIRef, Literal @@ -34,7 +34,7 @@ def parseJsonMessage(msg): body = json.loads(msg) settings = [] for device, attr, value in body['settings']: - if isinstance(value, basestring) and value.startswith('http'): + if isinstance(value, str) and value.startswith('http'): value = URIRef(value) else: value = Literal(value) @@ -114,7 +114,7 @@ class WebListeners(object): def makeMsg(self, dev, attrs, outputMap): attrRows = [] - for attr, val in attrs.items(): + for attr, val in list(attrs.items()): output, index = outputMap[(dev, attr)] attrRows.append({ 'attr': attr.rsplit('/')[-1], diff --git a/bin/collector_loadtest.py b/bin/collector_loadtest.py --- a/bin/collector_loadtest.py +++ b/bin/collector_loadtest.py @@ -10,7 +10,7 @@ log.setLevel(logging.DEBUG) def loadTest(): - print "scheduling loadtest" + print("scheduling loadtest") n = 2500 times = [None] * n session = "loadtest%s" % time.time() @@ -41,7 +41,7 @@ def loadTest(): offset += .002 def done(): - print "loadtest done" + print("loadtest done") with open('/tmp/times', 'w') as f: f.write(''.join('%s\n' % t for t in times)) reactor.stop() diff --git a/bin/curvecalc b/bin/curvecalc --- a/bin/curvecalc +++ b/bin/curvecalc @@ -8,9 +8,10 @@ now launches like this: todo: curveview should preserve more objects, for speed maybe """ -from __future__ import division + import sys +import imp sys.path.append('/usr/lib/python2.7/dist-packages') # For gtk from twisted.internet import gtk3reactor gtk3reactor.install() @@ -22,7 +23,7 @@ from gi.repository import Gtk from gi.repository import GObject from gi.repository import Gdk -from urlparse import parse_qsl +from urllib.parse import parse_qsl import louie as dispatcher from rdflib import URIRef, Literal, RDF, RDFS import logging @@ -171,7 +172,7 @@ class Main(object): def recv(widget, context, x, y, selection, targetType, time): subUri = URIRef(selection.data.strip()) - print "into curves", subUri + print("into curves", subUri) with self.graph.currentState(tripleFilter=(subUri, RDFS.label, None)) as current: subName = current.label(subUri) @@ -190,7 +191,7 @@ class Main(object): pass curveView = self.curvesetView.row(subName).curveView t = self.lastSeenInputTime # curveView.current_time() # new curve hasn't heard the time yet. this has gotten too messy- everyone just needs to be able to reach the time source - print "time", t + print("time", t) curveView.add_points([(t - .5, 0), (t, 1)]) w.connect("drag-data-received", recv) @@ -412,7 +413,7 @@ class Main(object): ('input time', lambda t: "%.2fs" % t), ('output levels', lambda levels: textwrap.fill( "; ".join([ - "%s:%.2f" % (n, v) for n, v in levels.items()[:2] if v > 0 + "%s:%.2f" % (n, v) for n, v in list(levels.items())[:2] if v > 0 ]), 70)), ('update period', lambda t: "%.1fms" % (t * 1000)), ('update status', lambda x: str(x)), @@ -445,14 +446,14 @@ class Main(object): if (not hasattr(self, 'curvesetView') or self.curvesetView._mtimes != mtimes): - print "reload curveview.py" + print("reload curveview.py") curvesVBox = wtree.get_object("curves") zoomControlBox = wtree.get_object("zoomControlBox") [curvesVBox.remove(c) for c in curvesVBox.get_children()] [zoomControlBox.remove(c) for c in zoomControlBox.get_children()] try: linecache.clearcache() - reload(curveview) + imp.reload(curveview) # old ones are not getting deleted right if hasattr(self, 'curvesetView'): @@ -469,7 +470,7 @@ class Main(object): # ok. You'll just get some wasted redraws. self.curvesetView.goLive() except Exception: - print "reload failed:" + print("reload failed:") traceback.print_exc() if self.opts.reload: reactor.callLater(1, self.refreshCurveView) diff --git a/bin/dmxserver b/bin/dmxserver --- a/bin/dmxserver +++ b/bin/dmxserver @@ -24,7 +24,7 @@ todo: if parport fails, run in dummy mode (and make an option for that too) """ -from __future__ import division + from twisted.internet import reactor from twisted.web import xmlrpc, server import sys, time, os @@ -68,7 +68,7 @@ class ReceiverApplication(object): self.port, txosc. async .DatagramServerProtocol(self.receiver), interface='0.0.0.0') - print "Listening OSC on udp port %s" % (self.port) + print("Listening OSC on udp port %s" % (self.port)) def pixel_handler(self, message, address): # this is already 1-based though I don't know why @@ -97,7 +97,7 @@ class XMLRPCServe(xmlrpc.XMLRPC): # desired seconds between sendlevels() calls self.calldelay = 1 / options.updates_per_sec - print "starting parport connection" + print("starting parport connection") self.parportdmx = UsbDMX(dimmers=90, port=options.dmx_device) if os.environ.get('DMXDUMMY', 0): self.parportdmx.godummy() @@ -122,12 +122,12 @@ class XMLRPCServe(xmlrpc.XMLRPC): reactor.callLater(1, self.purgeclients) now = time.time() - cids = self.lastseen.keys() + cids = list(self.lastseen.keys()) for cid in cids: lastseen = self.lastseen[cid] if lastseen < now - purge_age: - print("forgetting client %s (no activity for %s sec)" % - (cid, purge_age)) + print(("forgetting client %s (no activity for %s sec)" % + (cid, purge_age))) try: del self.clientlevels[cid] except KeyError: @@ -175,7 +175,7 @@ class XMLRPCServe(xmlrpc.XMLRPC): self.combinedlevels = [] for chan in range(0, self.parportdmx.dimmers): x = 0 - for clientlist in self.clientlevels.values(): + for clientlist in list(self.clientlevels.values()): if len(clientlist) > chan: # clamp client levels to 0..1 cl = max(0, min(1, clientlist[chan])) @@ -184,8 +184,8 @@ class XMLRPCServe(xmlrpc.XMLRPC): def printlevels(self): """write all the levels to stdout""" - print "Levels:", "".join( - ["% 2d " % (x * 100) for x in self.combinedlevels]) + print("Levels:", "".join( + ["% 2d " % (x * 100) for x in self.combinedlevels])) def printstats(self): """print the clock, freq, etc, with a \r at the end""" @@ -194,7 +194,7 @@ class XMLRPCServe(xmlrpc.XMLRPC): time.strftime("%H:%M:%S"), str(self.updatefreq), )) - for cid, freq in self.clientfreq.items(): + for cid, freq in list(self.clientfreq.items()): sys.stdout.write("[%s %s] " % (cid, str(freq))) sys.stdout.write("\r") sys.stdout.flush() @@ -237,7 +237,7 @@ class XMLRPCServe(xmlrpc.XMLRPC): def trackClientFreq(self, cid): if cid not in self.lastseen: - print "hello new client %s" % cid + print("hello new client %s" % cid) self.clientfreq[cid] = Updatefreq() self.lastseen[cid] = time.time() self.clientfreq[cid].update() @@ -264,13 +264,13 @@ parser.add_option("-n", help="dummy mode, same as DMXDUMMY=1 env variable") (options, songfiles) = parser.parse_args() -print options +print(options) if options.dummy: os.environ['DMXDUMMY'] = "1" port = networking.dmxServer.port -print "starting xmlrpc server on port %s" % port +print("starting xmlrpc server on port %s" % port) xmlrpcServe = XMLRPCServe(options) reactor.listenTCP(port, server.Site(xmlrpcServe)) diff --git a/bin/effecteval b/bin/effecteval --- a/bin/effecteval +++ b/bin/effecteval @@ -1,6 +1,6 @@ #!bin/python -from __future__ import division + from run_local import log from twisted.internet import reactor from twisted.internet.defer import inlineCallbacks, returnValue @@ -173,7 +173,7 @@ class Code(PrettyErrorHandler, cyclone.w return with self.settings.graph.currentState(tripleFilter=(None, L9['effect'], effect)) as g: - song = g.subjects(L9['effect'], effect).next() + song = next(g.subjects(L9['effect'], effect)) replaceObjects(self.settings.graph, song, effect, L9['code'], codeLines) diff --git a/bin/effectsequencer b/bin/effectsequencer --- a/bin/effectsequencer +++ b/bin/effectsequencer @@ -2,7 +2,7 @@ """ plays back effect notes from the timeline """ -from __future__ import division + from run_local import log from twisted.internet import reactor from light9.greplin_cyclone import StatsForCyclone diff --git a/bin/homepageConfig b/bin/homepageConfig --- a/bin/homepageConfig +++ b/bin/homepageConfig @@ -3,8 +3,8 @@ from run_local import log from rdflib import RDF, URIRef from light9 import networking, showconfig from light9.namespaces import L9 -from urlparse import urlparse -from urllib import splitport +from urllib.parse import urlparse +from urllib.parse import splitport from rdfdb.syncedgraph import SyncedGraph from twisted.internet import reactor @@ -15,11 +15,11 @@ netHome = graph.value(showconfig.showUri webServer = graph.value(netHome, L9['webServer']) if not webServer: raise ValueError('no %r :webServer' % netHome) -print "listen %s;" % splitport(urlparse(webServer).netloc)[1] +print("listen %s;" % splitport(urlparse(webServer).netloc)[1]) def location(path, server): - print """ + print(""" location /%(path)s/ { # for websocket @@ -31,7 +31,7 @@ def location(path, server): proxy_pass %(server)s; proxy_buffering off; rewrite /[^/]+/(.*) /$1 break; - }""" % vars() + }""" % vars()) for role, server in sorted(graph.predicate_objects(netHome)): @@ -44,10 +44,10 @@ for role, server in sorted(graph.predica location(path, server) showPath = showconfig.showUri().split('/', 3)[-1] -print """ +print(""" location /%(path)s { root %(root)s; }""" % { 'path': showPath, 'root': showconfig.root()[:-len(showPath)] -} +}) diff --git a/bin/inputdemo b/bin/inputdemo --- a/bin/inputdemo +++ b/bin/inputdemo @@ -5,7 +5,7 @@ from twisted.internet import gtk3reactor gtk3reactor.install() from twisted.internet import reactor from rdflib import URIRef -import optparse, logging, urllib, time +import optparse, logging, urllib.request, urllib.parse, urllib.error, time from gi.repository import Gtk from run_local import log from light9 import showconfig, networking @@ -34,7 +34,7 @@ class App(object): self.curve = args[0] if args else URIRef( 'http://light9.bigasterisk.com/show/dance2014/song1/curve/c-1401259747.675542' ) - print "sending points on curve %s" % self.curve + print("sending points on curve %s" % self.curve) reactor.run() @@ -60,7 +60,7 @@ class App(object): @d.addCallback def done(result): - print "posted in %.1f ms" % (1000 * (time.time() - t1)) + print("posted in %.1f ms" % (1000 * (time.time() - t1))) App() diff --git a/bin/inputquneo b/bin/inputquneo --- a/bin/inputquneo +++ b/bin/inputquneo @@ -2,9 +2,9 @@ """ read Quneo midi events, write to curvecalc and maybe to effects """ -from __future__ import division + from run_local import log -import logging, urllib +import logging, urllib.request, urllib.parse, urllib.error import cyclone.web, cyclone.httpclient from rdflib import URIRef from twisted.internet import reactor, task @@ -63,7 +63,7 @@ class WatchMidi(object): for ev in self.inp.read(999): (status, d1, d2, _), _ = ev if status in [NOTEON, NOTEOFF]: - print status, d1, d2 + print(status, d1, d2) if status == NOTEON: if not self.noteIsOn.get(d1): @@ -77,7 +77,7 @@ class WatchMidi(object): 'Content-Type': ['application/x-www-form-urlencoded'] }, - postdata=urllib.urlencode([('drop', e)]), + postdata=urllib.parse.urlencode([('drop', e)]), ) except KeyError: pass @@ -90,7 +90,7 @@ class WatchMidi(object): for group in [(23, 24, 25), (6, 18)]: if d1 in group: if not self.noteIsOn.get(group): - print "start zero" + print("start zero") for d in group: sendLiveInputPoint(curves[d], 0) diff --git a/bin/keyboardcomposer b/bin/keyboardcomposer --- a/bin/keyboardcomposer +++ b/bin/keyboardcomposer @@ -1,6 +1,6 @@ #!bin/python -from __future__ import division, nested_scopes + from run_local import log import cgi, time, logging from optparse import OptionParser @@ -9,7 +9,7 @@ from louie import dispatcher from twisted.internet import reactor, tksupport from twisted.web import resource from rdflib import URIRef, Literal -import Tix as tk +import tkinter.tix as tk from light9.Fadable import Fadable from light9.subclient import SubClient @@ -26,6 +26,7 @@ from rdfdb.patch import Patch from light9.effect.simple_outputs import SimpleOutputs from bcf2000 import BCF2000 +import imp nudge_keys = {'up': list('qwertyui'), 'down': list('asdfghjk')} @@ -250,7 +251,7 @@ class KeyboardComposer(tk.Frame, SubClie for r in self.rows: r.destroy() self.rows = [] - for b in self.subbox.values(): + for b in list(self.subbox.values()): b.cleanup() self.subbox.clear() self.slider_table.clear() @@ -271,7 +272,7 @@ class KeyboardComposer(tk.Frame, SubClie log.info("withgroups %s", withgroups) self.effectEval = {} - reload(light9.effect.effecteval) + imp.reload(light9.effect.effecteval) simpleOutputs = SimpleOutputs(self.graph) for group, order, sortLabel, effect in withgroups: if col == 0 or group != last_group: @@ -338,7 +339,7 @@ class KeyboardComposer(tk.Frame, SubClie self.keyhints = keyhintrow def setup_key_nudgers(self, tkobject): - for d, keys in nudge_keys.items(): + for d, keys in list(nudge_keys.items()): for key in keys: # lowercase makes full=0 keysym = "" % key @@ -501,7 +502,7 @@ class KeyboardComposer(tk.Frame, SubClie def get_levels(self): return dict([ - (uri, box.slider_var.get()) for uri, box in self.subbox.items() + (uri, box.slider_var.get()) for uri, box in list(self.subbox.items()) ]) def get_output_settings(self, _graph=None): @@ -540,7 +541,7 @@ class KeyboardComposer(tk.Frame, SubClie self.sub_name.delete(0, tk.END) def alltozero(self): - for uri, subbox in self.subbox.items(): + for uri, subbox in list(self.subbox.items()): if subbox.scale.scale_var.get() != 0: subbox.scale.fade(value=0.0, length=0) diff --git a/bin/lightsim b/bin/lightsim --- a/bin/lightsim +++ b/bin/lightsim @@ -1,6 +1,6 @@ #!bin/python -from __future__ import division + import run_local import sys, logging diff --git a/bin/listsongs b/bin/listsongs --- a/bin/listsongs +++ b/bin/listsongs @@ -21,7 +21,7 @@ graph = SyncedGraph(networking.rdfdb.url def printSongs(result): with graph.currentState() as current: for song in current.subjects(RDF.type, L9['Song']): - print song + print(song) reactor.stop() diff --git a/bin/mpd_timing_test b/bin/mpd_timing_test --- a/bin/mpd_timing_test +++ b/bin/mpd_timing_test @@ -11,10 +11,10 @@ for example: """ -import xmlrpclib, time +import xmlrpc.client, time -s = xmlrpclib.ServerProxy("http://localhost:8040") +s = xmlrpc.client.ServerProxy("http://localhost:8040") start = time.time() -while 1: - print time.time() - start, s.gettime() +while True: + print(time.time() - start, s.gettime()) time.sleep(.01) diff --git a/bin/musictime b/bin/musictime --- a/bin/musictime +++ b/bin/musictime @@ -2,7 +2,7 @@ import run_local import light9.networking -import Tkinter as tk +import tkinter as tk import time import restkit, jsonlib @@ -18,8 +18,8 @@ class MusicTime: try: playtime = jsonlib.read(self.player.get("time").body_string(), use_float=True)['t'] - except restkit.RequestError, e: - print "Server error %s, waiting" % e + except restkit.RequestError as e: + print("Server error %s, waiting" % e) time.sleep(2) return playtime @@ -42,7 +42,7 @@ class MusicTimeTk(tk.Frame, MusicTime): def print_time(evt, *args): self.timevar.set(self.get_music_time()) - print self.timevar.get(), evt.keysym + print(self.timevar.get(), evt.keysym) self.timelabel.bind('', print_time) self.timelabel.bind('<1>', print_time) diff --git a/bin/paintserver b/bin/paintserver --- a/bin/paintserver +++ b/bin/paintserver @@ -1,6 +1,6 @@ #!bin/python -from __future__ import division + from run_local import log import json from twisted.internet import reactor @@ -15,6 +15,7 @@ from light9 import clientsession import light9.paint.solve from lib.cycloneerr import PrettyErrorHandler from light9.namespaces import RDF, L9, DEV +import imp class Solve(PrettyErrorHandler, cyclone.web.RequestHandler): @@ -42,7 +43,7 @@ class Solve(PrettyErrorHandler, cyclone. })) def reloadSolver(self): - reload(light9.paint.solve) + imp.reload(light9.paint.solve) self.settings.solver = light9.paint.solve.Solver(self.settings.graph) self.settings.solver.loadSamples() diff --git a/bin/picamserve b/bin/picamserve --- a/bin/picamserve +++ b/bin/picamserve @@ -1,5 +1,5 @@ #!env_pi/bin/python -from __future__ import division + from run_local import log import sys sys.path.append('/usr/lib/python2.7/dist-packages/') diff --git a/bin/run_local.py b/bin/run_local.py --- a/bin/run_local.py +++ b/bin/run_local.py @@ -59,7 +59,7 @@ fixSysPath() from twisted.python.failure import Failure try: - import Tkinter + import tkinter except ImportError: pass else: @@ -71,7 +71,7 @@ else: else: Failure(val, exc, tb).printDetailedTraceback() - Tkinter.Tk.report_callback_exception = rce + tkinter.Tk.report_callback_exception = rce import coloredlogs, logging, time try: @@ -103,7 +103,7 @@ logging.getLogger().handlers[0].addFilte def setTerminalTitle(s): if os.environ.get('TERM', '') in ['xterm', 'rxvt', 'rxvt-unicode-256color']: - print "\033]0;%s\007" % s # not escaped/protected correctly + print("\033]0;%s\007" % s) # not escaped/protected correctly if 'listsongs' not in sys.argv[0] and 'homepageConfig' not in sys.argv[0]: diff --git a/bin/staticclient b/bin/staticclient --- a/bin/staticclient +++ b/bin/staticclient @@ -2,10 +2,10 @@ """ push a dmx level forever """ -from __future__ import division, nested_scopes + import time, logging from optparse import OptionParser -import logging, urllib +import logging, urllib.request, urllib.parse, urllib.error from twisted.internet import reactor, tksupport, task from rdflib import URIRef, RDF, RDFS, Literal diff --git a/bin/subcomposer b/bin/subcomposer --- a/bin/subcomposer +++ b/bin/subcomposer @@ -15,7 +15,7 @@ subcomposer """ -from __future__ import division, nested_scopes + from run_local import log import time, logging @@ -23,8 +23,8 @@ import time, logging log.setLevel(logging.DEBUG) from optparse import OptionParser -import logging, urllib -import Tkinter as tk +import logging, urllib.request, urllib.parse, urllib.error +import tkinter as tk import louie as dispatcher from twisted.internet import reactor, tksupport, task from rdflib import URIRef, RDF, RDFS, Literal @@ -119,7 +119,7 @@ class Subcomposer(tk.Frame): """promote our local submaster into a non-local, named one""" uri = self.currentSub().uri newUri = showconfig.showUri() + ("/sub/%s" % - urllib.quote(newName, safe='')) + urllib.parse.quote(newName, safe='')) with self.graph.currentState(tripleFilter=(uri, None, None)) as current: if (uri, RDF.type, L9['LocalSubmaster']) not in current: raise ValueError("%s is not a local submaster" % uri) @@ -161,8 +161,8 @@ class Subcomposer(tk.Frame): graph = self.graph def ann(): - print "currently: session=%s currentSub=%r _currentChoice=%r" % ( - self.session, self.currentSub(), self._currentChoice()) + print("currently: session=%s currentSub=%r _currentChoice=%r" % ( + self.session, self.currentSub(), self._currentChoice())) @graph.addHandler def graphChanged(): @@ -245,7 +245,7 @@ class Subcomposer(tk.Frame): def savenewsub(self, subname): leveldict = {} - for i, lev in zip(range(len(self.levels)), self.levels): + for i, lev in zip(list(range(len(self.levels))), self.levels): if lev != 0: leveldict[get_channel_name(i + 1)] = lev diff --git a/bin/tkdnd_minimal_drop.py b/bin/tkdnd_minimal_drop.py --- a/bin/tkdnd_minimal_drop.py +++ b/bin/tkdnd_minimal_drop.py @@ -1,6 +1,6 @@ #!bin/python from run_local import log -import Tkinter as tk +import tkinter as tk from light9.tkdnd import initTkdnd, dropTargetRegister from twisted.internet import reactor, tksupport @@ -20,15 +20,15 @@ tk.Label(frame1, text="not a target").pa def onDrop(ev): - print "onDrop", ev + print("onDrop", ev) def enter(ev): - print 'enter', ev + print('enter', ev) def leave(ev): - print 'leave', ev + print('leave', ev) dropTargetRegister(label, @@ -45,7 +45,7 @@ dropTargetRegister(labelInner, def prn(): - print "cont", root.winfo_containing(201, 151) + print("cont", root.winfo_containing(201, 151)) b = tk.Button(root, text="coord", command=prn) diff --git a/bin/tracker b/bin/tracker --- a/bin/tracker +++ b/bin/tracker @@ -1,5 +1,5 @@ #!/usr/bin/python -from __future__ import division, nested_scopes + import sys sys.path.append("../../editor/pour") @@ -14,7 +14,7 @@ from dispatch import dispatcher import dmxclient -import Tkinter as tk +import tkinter as tk defaultfont = "arial 8" @@ -80,10 +80,10 @@ class Fieldset(collectiveelement): name = f.name() intens = f.calc(x, y) if intens > 0: - print name, intens, + print(name, intens, end=' ') active += 1 if active > 0: - print + print() self.dmxsend(x, y) def dmxsend(self, x, y): @@ -135,7 +135,7 @@ class FieldDisplay: w2c = self.canvas.world2canvas # rings - for intens, ring in self.rings.items(): + for intens, ring in list(self.rings.items()): rad = f.getdistforintensity(intens) p1 = w2c(*(f.center() - Pair(rad, rad))) p2 = w2c(*(f.center() + Pair(rad, rad))) @@ -251,7 +251,7 @@ class Tracker(tk.Frame): ev.x, ev.y))) def save(ev): - print "saving" + print("saving") self.fieldsetfile.save() master.bind("", save) @@ -296,7 +296,7 @@ class Tracker(tk.Frame): fill='white', anchor=anc1 + anc2, tags='cornercoords') - [d.setcoords() for d in self.displays.values()] + [d.setcoords() for d in list(self.displays.values())] ######################################################################## diff --git a/bin/wavecurve b/bin/wavecurve --- a/bin/wavecurve +++ b/bin/wavecurve @@ -5,12 +5,12 @@ from light9.wavepoints import simp def createCurve(inpath, outpath, t): - print "reading %s, writing %s" % (inpath, outpath) + print("reading %s, writing %s" % (inpath, outpath)) points = simp(inpath.replace('.ogg', '.wav'), seconds_per_average=t) f = file(outpath, 'w') for time_val in points: - print >> f, "%s %s" % time_val + print("%s %s" % time_val, file=f) parser = optparse.OptionParser(usage="""%prog inputSong.wav outputCurve diff --git a/bin/webcontrol b/bin/webcontrol --- a/bin/webcontrol +++ b/bin/webcontrol @@ -6,7 +6,7 @@ computers and phones todo: disable buttons that don't make sense """ -import sys, xmlrpclib, traceback +import sys, xmlrpc.client, traceback from twisted.internet import reactor from twisted.python import log from twisted.python.util import sibpath @@ -19,7 +19,7 @@ from louie.robustapply import robust_app sys.path.append(".") from light9 import showconfig, networking from light9.namespaces import L9 -from urllib import urlencode +from urllib.parse import urlencode # move to web lib @@ -31,7 +31,7 @@ class Commands(object): @staticmethod def playSong(graph, songUri): - s = xmlrpclib.ServerProxy(networking.musicPlayer.url) + s = xmlrpc.client.ServerProxy(networking.musicPlayer.url) songPath = graph.value(URIRef(songUri), L9.showPath) if songPath is None: raise ValueError("unknown song %s" % songUri) @@ -39,7 +39,7 @@ class Commands(object): @staticmethod def stopMusic(graph): - s = xmlrpclib.ServerProxy(networking.musicPlayer.url) + s = xmlrpc.client.ServerProxy(networking.musicPlayer.url) return s.stop() @staticmethod @@ -90,14 +90,14 @@ class Main(rend.Page): try: func = getattr(Commands, segments[0]) req = inevow.IRequest(ctx) - simpleArgDict = dict((k, v[0]) for k, v in req.args.items()) + simpleArgDict = dict((k, v[0]) for k, v in list(req.args.items())) try: ret = yield robust_apply(func, func, self.graph, **simpleArgDict) except KeyboardInterrupt: raise - except Exception, e: - print "Error on command %s" % segments[0] + except Exception as e: + print("Error on command %s" % segments[0]) traceback.print_exc() returnValue((url.here.up().add('status', str(e)).add('error', diff --git a/light9/Effects.py b/light9/Effects.py --- a/light9/Effects.py +++ b/light9/Effects.py @@ -1,10 +1,10 @@ -from __future__ import division + import random as random_mod import math import logging, colorsys import light9.Submaster as Submaster -from chase import chase as chase_logic -import showconfig +from .chase import chase as chase_logic +from . import showconfig from rdflib import RDF from light9 import Patch from light9.namespaces import L9 @@ -77,7 +77,7 @@ def chase(t, chase_vals = chase_logic(t, ontime, offset, onval, offval, names, combiner) lev = {} - for uri, value in chase_vals.items(): + for uri, value in list(chase_vals.items()): try: dmx = Patch.dmx_from_uri(uri) except KeyError: @@ -142,7 +142,7 @@ def configExprGlobals(): shortName = chaseUri.rsplit('/')[-1] chans = graph.value(chaseUri, L9['channels']) ret[shortName] = list(graph.items(chans)) - print "%r is a chase" % shortName + print("%r is a chase" % shortName) for f in registered: ret[f.__name__] = f diff --git a/light9/Fadable.py b/light9/Fadable.py --- a/light9/Fadable.py +++ b/light9/Fadable.py @@ -1,5 +1,5 @@ # taken from SnackMix -- now that's reusable code -from Tix import * +from tkinter.tix import * import time diff --git a/light9/FlyingFader.py b/light9/FlyingFader.py --- a/light9/FlyingFader.py +++ b/light9/FlyingFader.py @@ -1,6 +1,6 @@ -from Tix import * +from tkinter.tix import * from time import time, sleep -from __future__ import division + class Mass: diff --git a/light9/Patch.py b/light9/Patch.py --- a/light9/Patch.py +++ b/light9/Patch.py @@ -11,8 +11,7 @@ def resolve_name(channelname): def get_all_channels(): """returns primary names for all channels (sorted)""" - prinames = reverse_patch.values()[:] - prinames.sort() + prinames = sorted(list(reverse_patch.values())[:]) return prinames diff --git a/light9/Submaster.py b/light9/Submaster.py --- a/light9/Submaster.py +++ b/light9/Submaster.py @@ -1,4 +1,4 @@ -from __future__ import division + import os, logging, time from rdflib import Graph, RDF from rdflib import RDFS, Literal, BNode @@ -7,7 +7,7 @@ from light9.TLUtility import dict_scale, from light9 import showconfig from light9.Patch import resolve_name, get_dmx_channel, get_channel_uri, reload_data from louie import dispatcher -from rdfdb.patch import Patch +from .rdfdb.patch import Patch log = logging.getLogger('submaster') class Submaster(object): @@ -38,7 +38,7 @@ class Submaster(object): def set_all_levels(self, leveldict): self.levels.clear() - for k, v in leveldict.items(): + for k, v in list(leveldict.items()): # this may call _editedLevels too many times self.set_level(k, v, save=0) @@ -46,7 +46,7 @@ class Submaster(object): return self.levels def no_nonzero(self): - return all(v == 0 for v in self.levels.itervalues()) + return all(v == 0 for v in self.levels.values()) def __mul__(self, scalar): return Submaster("%s*%s" % (self.name, scalar), @@ -62,8 +62,7 @@ class Submaster(object): return (self.name, tuple(sorted(self.levels.items()))) def __repr__(self): - items = getattr(self, 'levels', {}).items() - items.sort() + items = sorted(list(getattr(self, 'levels', {}).items())) levels = ' '.join(["%s:%.2f" % item for item in items]) return "<'%s': [%s]>" % (getattr(self, 'name', 'no name yet'), levels) @@ -80,7 +79,7 @@ class Submaster(object): leveldict = self.get_levels() # gets levels of sub contents levels = [] - for k, v in leveldict.items(): + for k, v in list(leveldict.items()): if v == 0: continue try: @@ -114,9 +113,9 @@ class Submaster(object): NOTE: You should only crossfade between normalized submasters.""" otherlevels = othersub.get_levels() keys_set = {} - for k in self.levels.keys() + otherlevels.keys(): + for k in list(self.levels.keys()) + list(otherlevels.keys()): keys_set[k] = 1 - all_keys = keys_set.keys() + all_keys = list(keys_set.keys()) xfaded_sub = Submaster("xfade", {}) for k in all_keys: @@ -241,7 +240,7 @@ class PersistentSubmaster(Submaster): graph = Graph() subUri = L9['sub/%s' % self.name] graph.add((subUri, RDFS.label, Literal(self.name))) - for chan in self.levels.keys(): + for chan in list(self.levels.keys()): try: chanUri = get_channel_uri(chan) except KeyError: @@ -279,7 +278,7 @@ def combine_subdict(subdict, name=None, object. You can give it a better name than the computed one that it will get or make it permanent if you'd like it to be saved to disk. Serves 8.""" - scaledsubs = [sub * level for sub, level in subdict.items()] + scaledsubs = [sub * level for sub, level in list(subdict.items())] maxes = sub_maxes(*scaledsubs) if name: maxes.name = name @@ -314,8 +313,7 @@ class Submasters(object): def get_all_subs(self): "All Submaster objects" - l = self.submasters.items() - l.sort() + l = sorted(list(self.submasters.items())) l = [x[1] for x in l] songs = [] notsongs = [] diff --git a/light9/TLUtility.py b/light9/TLUtility.py --- a/light9/TLUtility.py +++ b/light9/TLUtility.py @@ -1,7 +1,7 @@ """Collected utility functions, many are taken from Drew's utils.py in Cuisine CVS and Hiss's Utility.py.""" -from __future__ import generators + import sys __author__ = "David McClosky , " + \ @@ -32,7 +32,7 @@ def make_attributes_from_args(*argnames) try: setattr(callerself,a,callerlocals[a]) except KeyError: - raise KeyError, "Function has no argument '%s'" % a + raise KeyError("Function has no argument '%s'" % a) def enumerate(*collections): """Generates an indexed series: (0,coll[0]), (1,coll[1]) ... @@ -42,19 +42,19 @@ def enumerate(*collections): """ i = 0 iters = [iter(collection) for collection in collections] - while 1: - yield [i,] + [iterator.next() for iterator in iters] + while True: + yield [i,] + [next(iterator) for iterator in iters] i += 1 def dumpobj(o): """Prints all the object's non-callable attributes""" - print repr(o) + print(repr(o)) for a in [x for x in dir(o) if not callable(getattr(o, x))]: try: - print " %20s: %s " % (a, getattr(o, a)) + print(" %20s: %s " % (a, getattr(o, a))) except: pass - print "" + print("") def dict_filter_update(d, **newitems): """Adds a set of new keys and values to dictionary 'd' if the values are @@ -65,7 +65,7 @@ def dict_filter_update(d, **newitems): >>> some_dict {'c': 1, 's': 'hello'} """ - for k, v in newitems.items(): + for k, v in list(newitems.items()): if v: d[k] = v def try_get_logger(channel): @@ -109,7 +109,7 @@ class DummyClass: import warnings warnings.warn(msg) if self.raise_exceptions: - raise AttributeError, msg + raise AttributeError(msg) return lambda *args, **kw: self.bogus_function() def bogus_function(self): pass @@ -144,16 +144,16 @@ def trace(func): TODO: print out default keywords (maybe) indent for recursive call like the lisp version (possible use of generators?)""" - name = func.func_name + name = func.__name__ def tracer(*args, **kw): s = '|>> %s called' % name if args: s += ' args: %r' % list(args) if kw: s += ' kw: %r' % kw - print s + print(s) ret = func(*args, **kw) - print '<<| %s returned %s' % (name, ret) + print('<<| %s returned %s' % (name, ret)) return ret return tracer @@ -165,13 +165,13 @@ def dict_max(*dicts): """ newdict = {} for d in dicts: - for k,v in d.items(): + for k,v in list(d.items()): newdict[k] = max(v, newdict.get(k, 0)) return newdict def dict_scale(d,scl): """scales all values in dict and returns a new dict""" - return dict([(k,v*scl) for k,v in d.items()]) + return dict([(k,v*scl) for k,v in list(d.items())]) def dict_subset(d, dkeys, default=0): """Subset of dictionary d: only the keys in dkeys. If you plan on omitting diff --git a/light9/ascoltami/player.py b/light9/ascoltami/player.py --- a/light9/ascoltami/player.py +++ b/light9/ascoltami/player.py @@ -2,7 +2,7 @@ """ alternate to the mpd music player, for ascoltami """ -from __future__ import division + import time, logging, traceback from gi.repository import GObject, Gst from twisted.internet import reactor, task @@ -55,14 +55,14 @@ class Player(object): bus.add_signal_watch() def onEos(*args): - print "onEos", args + print("onEos", args) if self.onEOS is not None: self.onEOS(self.getSong()) bus.connect('message::eos', onEos) def onStreamStatus(bus, message): - print "streamstatus", bus, message + print("streamstatus", bus, message) (statusType, _elem) = message.parse_stream_status() if statusType == Gst.StreamStatusType.ENTER: self.setupAutostop() diff --git a/light9/chase.py b/light9/chase.py --- a/light9/chase.py +++ b/light9/chase.py @@ -1,4 +1,4 @@ -from __future__ import division + def chase(t, @@ -43,6 +43,5 @@ if __name__ == "__main__": ontime=0.1, offset=0.2, names=('a', 'b', 'c', 'd')) - output = output.items() - output.sort() - print "%.2f\t%s" % (x, ' '.join([str(x) for x in output])) + output = sorted(list(output.items())) + print("%.2f\t%s" % (x, ' '.join([str(x) for x in output]))) diff --git a/light9/clientsession.py b/light9/clientsession.py --- a/light9/clientsession.py +++ b/light9/clientsession.py @@ -3,7 +3,7 @@ some clients will support the concept of multiple instances of that client separate """ from rdflib import URIRef -from urllib import quote +from urllib.parse import quote from light9 import showconfig diff --git a/light9/collector/collector.py b/light9/collector/collector.py --- a/light9/collector/collector.py +++ b/light9/collector/collector.py @@ -1,4 +1,4 @@ -from __future__ import division + import time import logging from rdflib import Literal @@ -88,7 +88,7 @@ class Collector(Generic[ClientType, Clie def _forgetStaleClients(self, now): # type: (float) -> None staleClientSessions = [] - for c, (t, _) in self.lastRequest.iteritems(): + for c, (t, _) in self.lastRequest.items(): if t < now - self.clientTimeoutSec: staleClientSessions.append(c) for c in staleClientSessions: @@ -118,7 +118,7 @@ class Collector(Generic[ClientType, Clie def _merge(self, lastRequests): deviceAttrs = {} # device: {deviceAttr: value} for _, lastSettings in lastRequests: - for (device, deviceAttr), value in lastSettings.iteritems(): + for (device, deviceAttr), value in lastSettings.items(): if (device, deviceAttr) in self.remapOut: start, end = self.remapOut[(device, deviceAttr)] value = Literal(start + float(value) * (end - start)) @@ -135,7 +135,7 @@ class Collector(Generic[ClientType, Clie self.stickyAttrs[(device, deviceAttr)] = value # e.g. don't let an unspecified rotation go to 0 - for (d, da), v in self.stickyAttrs.iteritems(): + for (d, da), v in self.stickyAttrs.items(): daDict = deviceAttrs.setdefault(d, {}) if da not in daDict: daDict[da] = v @@ -163,7 +163,7 @@ class Collector(Generic[ClientType, Clie uniqueSettings = self.resolvedSettingsDict(settings) self.lastRequest[(client, clientSession)] = (now, uniqueSettings) - deviceAttrs = self._merge(self.lastRequest.itervalues()) + deviceAttrs = self._merge(iter(self.lastRequest.values())) outputAttrs = {} # device: {outputAttr: value} for d in self.allDevices: @@ -184,8 +184,8 @@ class Collector(Generic[ClientType, Clie for out in self.outputs: pendingOut[out] = [0] * out.numChannels - for device, attrs in outputAttrs.iteritems(): - for outputAttr, value in attrs.iteritems(): + for device, attrs in outputAttrs.items(): + for outputAttr, value in attrs.items(): self.setAttr(device, outputAttr, value, pendingOut) dt1 = 1000 * (time.time() - now) @@ -204,6 +204,6 @@ class Collector(Generic[ClientType, Clie def flush(self, pendingOut): """write any changed outputs""" - for out, vals in pendingOut.iteritems(): + for out, vals in pendingOut.items(): out.update(vals) out.flush() diff --git a/light9/collector/collector_client.py b/light9/collector/collector_client.py --- a/light9/collector/collector_client.py +++ b/light9/collector/collector_client.py @@ -1,4 +1,4 @@ -from __future__ import division + from light9 import networking from light9.effect.settings import DeviceSettings from twisted.internet import defer diff --git a/light9/collector/device.py b/light9/collector/device.py --- a/light9/collector/device.py +++ b/light9/collector/device.py @@ -1,4 +1,4 @@ -from __future__ import division + import logging import math from light9.namespaces import L9, RDF, DEV diff --git a/light9/collector/output.py b/light9/collector/output.py --- a/light9/collector/output.py +++ b/light9/collector/output.py @@ -1,4 +1,4 @@ -from __future__ import division + from rdflib import URIRef import sys import time @@ -169,7 +169,7 @@ class Udmx(DmxOutput): with Udmx.stats.write.time(): try: if not buf: - print "skip empty msg" + print("skip empty msg") return True self.dev.SendDMX(buf) return True @@ -178,7 +178,7 @@ class Udmx(DmxOutput): if e.errno != 75: msg = 'usb: sending %s bytes to %r; error %r' % ( len(buf), self.uri, e) - print msg + print(msg) return False def countError(self): diff --git a/light9/curvecalc/client.py b/light9/curvecalc/client.py --- a/light9/curvecalc/client.py +++ b/light9/curvecalc/client.py @@ -3,7 +3,7 @@ client code for talking to curvecalc """ import cyclone.httpclient from light9 import networking -import urllib +import urllib.request, urllib.parse, urllib.error from run_local import log @@ -11,7 +11,7 @@ def sendLiveInputPoint(curve, value): f = cyclone.httpclient.fetch(networking.curveCalc.path('liveInputPoint'), method='POST', timeout=1, - postdata=urllib.urlencode({ + postdata=urllib.parse.urlencode({ 'curve': curve, 'value': str(value), })) diff --git a/light9/curvecalc/curve.py b/light9/curvecalc/curve.py --- a/light9/curvecalc/curve.py +++ b/light9/curvecalc/curve.py @@ -1,4 +1,4 @@ -from __future__ import division + import glob, time, logging, ast, os from bisect import bisect_left, bisect import louie as dispatcher @@ -55,7 +55,7 @@ class Curve(object): def set_from_string(self, pts): self.points[:] = [] vals = pts.split() - pairs = zip(vals[0::2], vals[1::2]) + pairs = list(zip(vals[0::2], vals[1::2])) for x, y in pairs: self.points.append((float(x), ast.literal_eval(y))) self.points.sort() @@ -64,7 +64,7 @@ class Curve(object): def points_as_string(self): def outVal(x): - if isinstance(x, basestring): # markers + if isinstance(x, str): # markers return x return "%.4g" % x @@ -74,7 +74,7 @@ class Curve(object): def save(self, filename): # this is just around for markers, now if filename.endswith('-music') or filename.endswith('_music'): - print "not saving music track" + print("not saving music track") return f = file(filename, 'w') for p in self.points: @@ -148,7 +148,7 @@ class Curve(object): leftidx = max(0, bisect(self.points, (x1, None)) - beyond) rightidx = min(len(self.points), bisect(self.points, (x2, None)) + beyond) - return range(leftidx, rightidx) + return list(range(leftidx, rightidx)) def points_between(self, x1, x2): """returns (x,y) points""" @@ -329,7 +329,7 @@ class Curveset(object): try: self.markers.load("%s.markers" % basename) except IOError: - print "no marker file found" + print("no marker file found") def save(self): """writes a file for each curve with a name @@ -339,7 +339,7 @@ class Curveset(object): showconfig.songFilenameFromURI(self.currentSong)) patches = [] - for cr in self.curveResources.values(): + for cr in list(self.curveResources.values()): patches.extend(cr.getSavePatches()) self.markers.save("%s.markers" % basename) diff --git a/light9/curvecalc/curveview.py b/light9/curvecalc/curveview.py --- a/light9/curvecalc/curveview.py +++ b/light9/curvecalc/curveview.py @@ -1,4 +1,4 @@ -from __future__ import division + import math, logging, traceback from gi.repository import Gtk from gi.repository import Gdk @@ -10,9 +10,10 @@ from light9.curvecalc.zoomcontrol import from light9.curvecalc import cursors from light9.curvecalc.curve import introPad, postPad from lib.goocanvas_compat import Points, polyline_new_line +import imp log = logging.getLogger() -print "curveview.py toplevel" +print("curveview.py toplevel") def vlen(v): @@ -48,8 +49,7 @@ class Sketch: self.curveview.add_point(p) def release(self, ev): - pts = self.pts - pts.sort() + pts = sorted(self.pts) finalPoints = pts[:] dx = .01 @@ -168,7 +168,7 @@ class SelectManip(object): def onMotion(self, item, target_item, event, param): if hasattr(self, 'dragStartTime'): - origPts = zip(self.getSelectedIndices(), self.origPoints) + origPts = list(zip(self.getSelectedIndices(), self.origPoints)) left = origPts[0][1][0] right = origPts[-1][1][0] width = right - left @@ -461,7 +461,7 @@ class Curveview(object): return canvas def onAny(self, w, event): - print " %s on %s" % (event, w) + print(" %s on %s" % (event, w)) def onFocusIn(self, *args): dispatcher.send('curve row focus change') @@ -555,8 +555,8 @@ class Curveview(object): def print_state(self, msg=""): if 0: - print "%s: dragging_dots=%s selecting=%s" % ( - msg, self.dragging_dots, self.selecting) + print("%s: dragging_dots=%s selecting=%s" % ( + msg, self.dragging_dots, self.selecting)) def select_points(self, pts): """set selection to the given point values (tuples, not indices)""" @@ -749,7 +749,7 @@ class Curveview(object): if not self.alive(): return if not self.redrawsEnabled: - print "no redrawsEnabled, skipping", self + print("no redrawsEnabled, skipping", self) return visible_x = (self.world_from_screen(0, 0)[0], @@ -993,7 +993,7 @@ class Curveview(object): if not self.redrawsEnabled: return - for i, d in self.dots.items(): + for i, d in list(self.dots.items()): if i in self.selected_points: d.set_property('fill_color', 'red') else: @@ -1161,7 +1161,7 @@ class CurveRow(object): controls.add(box) curve_name_label = Gtk.LinkButton() - print "need to truncate this name length somehow" + print("need to truncate this name length somehow") def update_label(): # todo: abort if we don't still exist... @@ -1237,11 +1237,11 @@ class Curvesetview(object): self.watchCurveAreaHeight() def __del__(self): - print "del curvesetview", id(self) + print("del curvesetview", id(self)) def initZoomControl(self, zoomControlBox): import light9.curvecalc.zoomcontrol - reload(light9.curvecalc.zoomcontrol) + imp.reload(light9.curvecalc.zoomcontrol) zoomControl = light9.curvecalc.zoomcontrol.ZoomControl() zoomControlBox.add(zoomControl.widget) zoomControl.widget.show_all() diff --git a/light9/curvecalc/output.py b/light9/curvecalc/output.py --- a/light9/curvecalc/output.py +++ b/light9/curvecalc/output.py @@ -29,7 +29,7 @@ class Output(object): def updateerr(self, e): - print e.getTraceback() + print(e.getTraceback()) dispatcher.send("update status", val=e.getErrorMessage()) if self.later and not self.later.cancelled and not self.later.called: self.later.cancel() diff --git a/light9/curvecalc/subterm.py b/light9/curvecalc/subterm.py --- a/light9/curvecalc/subterm.py +++ b/light9/curvecalc/subterm.py @@ -91,7 +91,7 @@ class Subterm(object): subUri = current.value(self.uri, L9['sub']) sub = self.submasters.get_sub_by_uri(subUri) return sub * subexpr_eval - except Exception, e: + except Exception as e: dispatcher.send("expr_error", sender=self.uri, exc=repr(e)) return Submaster.Submaster(name='Error: %s' % str(e), levels={}) @@ -133,7 +133,7 @@ class Subterm(object): try: self.lasteval = eval(expr, glo) - except Exception, e: + except Exception as e: dispatcher.send("expr_error", sender=self.uri, exc=e) return Submaster.Submaster("zero", {}) else: diff --git a/light9/curvecalc/subtermview.py b/light9/curvecalc/subtermview.py --- a/light9/curvecalc/subtermview.py +++ b/light9/curvecalc/subtermview.py @@ -42,8 +42,7 @@ class Subexprview(object): curveNames = self.curveset.curveNamesInOrder() currentExpr = self.entryBuffer.get_text() - usedCurves = [n for n in curveNames if n in currentExpr] - usedCurves.sort() + usedCurves = sorted([n for n in curveNames if n in currentExpr]) dispatcher.send("set_featured_curves", curveNames=usedCurves) @@ -52,7 +51,7 @@ class Subexprview(object): def set_expression_from_graph(self): e = str(self.graph.value(self.ownerSubterm, L9['expression'])) - print "from graph, set to %r" % e + print("from graph, set to %r" % e) if e != self.entryBuffer.get_text(): self.entryBuffer.set_text(e, len(e)) diff --git a/light9/curvecalc/zoomcontrol.py b/light9/curvecalc/zoomcontrol.py --- a/light9/curvecalc/zoomcontrol.py +++ b/light9/curvecalc/zoomcontrol.py @@ -1,4 +1,4 @@ -from __future__ import division + from gi.repository import Gtk from gi.repository import GObject from gi.repository import GooCanvas diff --git a/light9/dmxchanedit.py b/light9/dmxchanedit.py --- a/light9/dmxchanedit.py +++ b/light9/dmxchanedit.py @@ -16,8 +16,8 @@ proposal for new attribute system: - we have to stop packing these into the names. Names should be like 'b33' or 'blue3' or just '44'. maybe 'blacklight'. """ -from __future__ import nested_scopes, division -import Tkinter as tk + +import tkinter as tk from rdflib import RDF, Literal import math, logging from decimal import Decimal @@ -227,7 +227,7 @@ class Levelbox(tk.Frame): continue if isinstance(lev, Decimal): lev = float(lev) - assert isinstance(lev, (int, long, float)), repr(lev) + assert isinstance(lev, (int, float)), repr(lev) try: self.levelFromUri[chan].setTo(lev) remaining.remove(chan) diff --git a/light9/dmxclient.py b/light9/dmxclient.py --- a/light9/dmxclient.py +++ b/light9/dmxclient.py @@ -4,7 +4,7 @@ dmxclient.outputlevels(..) client id is formed from sys.argv[0] and the PID. """ -import xmlrpclib, os, sys, socket, time, logging +import xmlrpc.client, os, sys, socket, time, logging from twisted.internet import defer from txzmq import ZmqEndpoint, ZmqFactory, ZmqPushConnection import json @@ -50,17 +50,17 @@ def outputlevels(levellist, twisted=0, c if _dmx is None: url = networking.dmxServer.url if not twisted: - _dmx = xmlrpclib.Server(url) + _dmx = xmlrpc.client.Server(url) else: _dmx = TwistedZmqClient(networking.dmxServerZmq) if not twisted: try: _dmx.outputlevels(clientid, levellist) - except socket.error, e: + except socket.error as e: log.error("dmx server error %s, waiting" % e) time.sleep(1) - except xmlrpclib.Fault, e: + except xmlrpc.client.Fault as e: log.error("outputlevels had xml fault: %s" % e) time.sleep(1) else: @@ -70,7 +70,7 @@ def outputlevels(levellist, twisted=0, c dummy = os.getenv('DMXDUMMY') if dummy: - print "dmxclient: DMX is in dummy mode." + print("dmxclient: DMX is in dummy mode.") def outputlevels(*args, **kw): pass diff --git a/light9/editchoice.py b/light9/editchoice.py --- a/light9/editchoice.py +++ b/light9/editchoice.py @@ -1,4 +1,4 @@ -import Tkinter as tk +import tkinter as tk from rdflib import URIRef from light9.tkdnd import dragSourceRegister, dropTargetRegister @@ -110,7 +110,7 @@ class EditChoice(object): def updateLabel(self): uri = self.resourceObservable() - print "get label", repr(uri) + print("get label", repr(uri)) label = self.graph.label(uri) self.subIcon.config(text=label or uri) diff --git a/light9/effect/edit.py b/light9/effect/edit.py --- a/light9/effect/edit.py +++ b/light9/effect/edit.py @@ -65,9 +65,9 @@ def songEffectPatch(graph, dropped, song _maybeAddMusicLine(quads, effect, song, ctx) - print "adding" + print("adding") for qq in quads: - print qq + print(qq) returnValue(Patch(addQuads=quads)) @@ -163,7 +163,7 @@ def _newEffect(graph, song, ctx): (song, L9['effect'], effect, ctx), (effect, RDF.type, L9['Effect'], ctx), ] - print "_newEffect", effect, quads + print("_newEffect", effect, quads) return effect, quads diff --git a/light9/effect/effecteval.py b/light9/effect/effecteval.py --- a/light9/effect/effecteval.py +++ b/light9/effect/effecteval.py @@ -1,4 +1,4 @@ -from __future__ import division + from rdflib import URIRef, Literal from light9.namespaces import L9, RDF, DEV from webcolors import rgb_to_hex, hex_to_rgb @@ -13,7 +13,7 @@ from light9.effect.settings import Devic from light9.effect.scale import scale import random random.seed(0) -print "reload effecteval" +print("reload effecteval") log = logging.getLogger('effecteval') @@ -96,7 +96,7 @@ class EffectEval(object): else: out.update(func(effectSettings, strength, songTime, noteTime)) - outList = [(d, a, v) for (d, a), v in out.iteritems()] + outList = [(d, a, v) for (d, a), v in out.items()] return DeviceSettings(self.graph, outList), report @@ -137,7 +137,7 @@ def effect_auraSparkles(effectSettings, out = {} tint = effectSettings.get(L9['tint'], '#ffffff') tintStrength = float(effectSettings.get(L9['tintStrength'], 0)) - print effectSettings + print(effectSettings) tr, tg, tb = hex_to_rgb(tint) for n in range(1, 5 + 1): scl = strength * ((int(songTime * 10) % n) < 1) @@ -209,7 +209,7 @@ def effect_aurawash(effectSettings, stre col = literalColorHsv(noise(noisePos), 1, scl) col = scale(col, effectSettings.get(L9['colorScale']) or '#ffffff') - print songTime, quantTime, col + print(songTime, quantTime, col) for n in range(1, 5 + 1): dev = L9['device/aura%s' % n] diff --git a/light9/effect/scale.py b/light9/effect/scale.py --- a/light9/effect/scale.py +++ b/light9/effect/scale.py @@ -1,4 +1,4 @@ -from __future__ import division + from rdflib import Literal from decimal import Decimal from webcolors import rgb_to_hex, hex_to_rgb @@ -11,14 +11,14 @@ def scale(value, strength): if isinstance(value, Decimal): value = float(value) - if isinstance(value, basestring): + if isinstance(value, str): if value[0] == '#': if strength == '#ffffff': return value r, g, b = hex_to_rgb(value) if isinstance(strength, Literal): strength = strength.toPython() - if isinstance(strength, basestring): + if isinstance(strength, str): sr, sg, sb = [v / 255 for v in hex_to_rgb(strength)] else: sr = sg = sb = strength diff --git a/light9/effect/sequencer.py b/light9/effect/sequencer.py --- a/light9/effect/sequencer.py +++ b/light9/effect/sequencer.py @@ -2,7 +2,7 @@ copies from effectloop.py, which this should replace ''' -from __future__ import division + from louie import dispatcher from rdflib import URIRef from twisted.internet import reactor @@ -20,6 +20,7 @@ from light9.effect.settings import Devic from light9.effect.simple_outputs import SimpleOutputs from greplin import scales +import imp log = logging.getLogger('sequencer') stats = scales.collection( @@ -95,7 +96,7 @@ class Note(object): (str(k), str(v)) for k, v in sorted(effectSettings.items())) report['nonZero'] = effectSettings[L9['strength']] > 0 out, evalReport = self.effectEval.outputFromEffect( - effectSettings.items(), + list(effectSettings.items()), songTime=t, # note: not using origin here since it's going away noteTime=t - self.points[0][0]) @@ -118,7 +119,7 @@ class CodeWatcher(object): def go(): log.info("reload effecteval") - reload(effecteval) + imp.reload(effecteval) self.onChange() # in case we got an event at the start of the write diff --git a/light9/effect/settings.py b/light9/effect/settings.py --- a/light9/effect/settings.py +++ b/light9/effect/settings.py @@ -1,4 +1,4 @@ -from __future__ import division + """ Data structure and convertors for a table of (device,attr,value) rows. These might be effect attrs ('strength'), device attrs ('rx'), @@ -16,7 +16,7 @@ from light9.collector.device import reso def parseHex(h): if h[0] != '#': raise ValueError(h) - return [int(h[i:i + 2], 16) for i in 1, 3, 5] + return [int(h[i:i + 2], 16) for i in (1, 3, 5)] def parseHexNorm(h): @@ -112,7 +112,7 @@ class _Settings(object): raise TypeError('bad row %r' % (row,)) dd = out._compiled.setdefault(row[0], {}) - if isinstance(row[2], basestring): + if isinstance(row[2], str): prev = parseHexNorm(dd.get(row[1], '#000000')) newVal = toHex(prev + weight * numpy.array(parseHexNorm(row[2]))) @@ -128,8 +128,8 @@ class _Settings(object): return 0.0 def _delZeros(self): - for dev, av in self._compiled.items(): - for attr, val in av.items(): + for dev, av in list(self._compiled.items()): + for attr, val in list(av.items()): if val == self._zeroForAttr(attr): del av[attr] if not av: @@ -150,15 +150,15 @@ class _Settings(object): def __ne__(self, other): return not self == other - def __nonzero__(self): + def __bool__(self): return bool(self._compiled) def __repr__(self): words = [] def accum(): - for dev, av in self._compiled.iteritems(): - for attr, val in sorted(av.iteritems()): + for dev, av in self._compiled.items(): + for attr, val in sorted(av.items()): words.append( '%s.%s=%s' % (dev.rsplit('/')[-1], attr.rsplit('/')[-1], val)) @@ -179,13 +179,13 @@ class _Settings(object): def asList(self): """old style list of (dev, attr, val) tuples""" out = [] - for dev, av in self._compiled.iteritems(): - for attr, val in av.iteritems(): + for dev, av in self._compiled.items(): + for attr, val in av.items(): out.append((dev, attr, val)) return out def devices(self): - return self._compiled.keys() + return list(self._compiled.keys()) def toVector(self, deviceAttrFilter=None): out = [] @@ -198,7 +198,7 @@ class _Settings(object): return out def byDevice(self): - for dev, av in self._compiled.iteritems(): + for dev, av in self._compiled.items(): yield dev, self.__class__._fromCompiled(self.graph, {dev: av}) def ofDevice(self, dev): diff --git a/light9/effect/simple_outputs.py b/light9/effect/simple_outputs.py --- a/light9/effect/simple_outputs.py +++ b/light9/effect/simple_outputs.py @@ -1,4 +1,4 @@ -from __future__ import division + import traceback from light9.namespaces import L9, RDF from light9.effect.scale import scale diff --git a/light9/effecteval/effect.py b/light9/effecteval/effect.py --- a/light9/effecteval/effect.py +++ b/light9/effecteval/effect.py @@ -81,7 +81,7 @@ class CodeLine(object): """ out = {} subs = prof.logTime(Submaster.get_global_submasters)(self.graph) - for localVar, uri in resources.items(): + for localVar, uri in list(resources.items()): for rdfClass in self.graph.objects(uri, RDF.type): if rdfClass == L9['Curve']: @@ -131,7 +131,7 @@ class EffectNode(object): deps = {} for c in self.codes: outName = c.outName - inNames = c.possibleVars.intersection(codeFromOutput.keys()) + inNames = c.possibleVars.intersection(list(codeFromOutput.keys())) inNames.discard(outName) deps[outName] = inNames self.codes = [ diff --git a/light9/effecteval/effectloop.py b/light9/effecteval/effectloop.py --- a/light9/effecteval/effectloop.py +++ b/light9/effecteval/effectloop.py @@ -1,4 +1,4 @@ -from __future__ import division + import time, json, logging, traceback import numpy import serial @@ -183,7 +183,7 @@ class EffectLoop(object): def logMessage(self, out): return ("send dmx: {%s}" % ", ".join( - "%r: %.3g" % (str(k), v) for k, v in out.get_levels().items())) + "%r: %.3g" % (str(k), v) for k, v in list(out.get_levels().items()))) Z = numpy.zeros((50, 3), dtype=numpy.float16) @@ -306,7 +306,7 @@ class LedLoop(EffectLoop): def logMessage(self, out): return str([(w, p.tolist() if isinstance(p, numpy.ndarray) else p) - for w, p in out.items()]) + for w, p in list(out.items())]) def makeEffectLoop(graph, stats, outputWhere): diff --git a/light9/effecteval/test_effect.py b/light9/effecteval/test_effect.py --- a/light9/effecteval/test_effect.py +++ b/light9/effecteval/test_effect.py @@ -3,7 +3,7 @@ import mock import sys sys.path.insert(0, 'bin') # for run_local -from effect import CodeLine +from .effect import CodeLine from rdflib import URIRef @@ -76,8 +76,8 @@ class TestPossibleVars(unittest.TestCase self.assertEqual(set([]), CodeLine(None, 'a1 = 1').possibleVars) def test2(self): - self.assertEqual(set(['a2']), CodeLine(None, 'a1 = a2').possibleVars) + self.assertEqual({'a2'}, CodeLine(None, 'a1 = a2').possibleVars) def test3(self): - self.assertEqual(set(['a2', 'a3']), + self.assertEqual({'a2', 'a3'}, CodeLine(None, 'a1 = a2 + a3').possibleVars) diff --git a/light9/io/__init__.py b/light9/io/__init__.py --- a/light9/io/__init__.py +++ b/light9/io/__init__.py @@ -1,4 +1,4 @@ -from __future__ import division + import sys @@ -11,14 +11,14 @@ class BaseIO(object): def golive(self): """call this if you want to promote the dummy object becomes a live object""" - print "IO: %s is going live" % self.__name__ + print("IO: %s is going live" % self.__name__) self.dummy = 0 # you'd override with additional startup stuff here, # perhaps even loading a module and saving it to a class # attr so the subclass-specific functions can use it def godummy(self): - print "IO: %s is going dummy" % self.__name__ + print("IO: %s is going dummy" % self.__name__) self.dummy = 1 # you might override this to close ports, etc @@ -44,7 +44,7 @@ class ParportDMX(BaseIO): def golive(self): BaseIO.golive(self) - import parport + from . import parport self.parport = parport self.parport.getparport() @@ -71,7 +71,7 @@ class UsbDMX(BaseIO): def _dmx(self): if self.out is None: if self.port == 'udmx': - from udmx import Udmx + from .udmx import Udmx self.out = Udmx() self.out.write = self.out.SendDMX else: diff --git a/light9/io/udmx.py b/light9/io/udmx.py --- a/light9/io/udmx.py +++ b/light9/io/udmx.py @@ -1,4 +1,4 @@ -from __future__ import division + import logging import usb.core from usb.util import CTRL_TYPE_VENDOR, CTRL_RECIPIENT_DEVICE, CTRL_OUT @@ -30,7 +30,7 @@ class Udmx(object): for dev in usb.core.find(idVendor=0x16c0, idProduct=0x05dc, find_all=True): - print "udmx device at %r" % dev.bus + print("udmx device at %r" % dev.bus) if bus is None or bus == dev.bus: self.dev = dev if not self.dev: @@ -59,5 +59,5 @@ def demo(chan, fps=44): u.SendDMX('\x00' * (chan - 1) + chr(210) + chr(nsin8) + chr(nsin8) + chr(nsin8)) except usb.core.USBError as e: - print "err", time.time(), repr(e) + print("err", time.time(), repr(e)) time.sleep(1 / fps) diff --git a/light9/networking.py b/light9/networking.py --- a/light9/networking.py +++ b/light9/networking.py @@ -1,7 +1,7 @@ -from urlparse import urlparse -from urllib import splitport -from showconfig import getGraph, showUri -from namespaces import L9 +from urllib.parse import urlparse +from urllib.parse import splitport +from .showconfig import getGraph, showUri +from .namespaces import L9 class ServiceAddress(object): diff --git a/light9/paint/solve.py b/light9/paint/solve.py --- a/light9/paint/solve.py +++ b/light9/paint/solve.py @@ -1,4 +1,4 @@ -from __future__ import division + from light9.namespaces import RDF, L9, DEV from PIL import Image import numpy @@ -152,7 +152,7 @@ class Solver(object): results = [] dist = ImageDist(img) if device is None: - items = self.samples.items() + items = list(self.samples.items()) else: items = self.samplesForDevice[device] for uri, img2 in sorted(items): @@ -162,9 +162,9 @@ class Solver(object): results.append((dist.distanceTo(img2), uri, img2)) results.sort() topDist, topUri, topImg = results[0] - print 'tops2' + print('tops2') for row in results[:4]: - print '%.5f' % row[0], row[1][-20:], self.sampleSettings[row[1]] + print('%.5f' % row[0], row[1][-20:], self.sampleSettings[row[1]]) #saveNumpy('/tmp/best_in.png', img) #saveNumpy('/tmp/best_out.png', topImg) @@ -221,8 +221,7 @@ class Solver(object): #saveNumpy('/tmp/sample_%s.png' % sample.split('/')[-1], # f(picSample)) sampleDist[sample] = dist.distanceTo(picSample) - results = [(d, uri) for uri, d in sampleDist.items()] - results.sort() + results = sorted([(d, uri) for uri, d in list(sampleDist.items())]) sample = results[0][1] @@ -284,7 +283,7 @@ class Solver(object): def combineImages(self, layers): """make a result image from our self.samples images""" - out = (self.fromPath.itervalues().next() * 0).astype(numpy.uint16) + out = (next(iter(self.fromPath.values())) * 0).astype(numpy.uint16) for layer in layers: colorScaled = self.fromPath[layer['path']] * layer['color'] out += colorScaled.astype(numpy.uint16) @@ -302,7 +301,7 @@ class Solver(object): for dev, devSettings in settings.byDevice(): requestedColor = devSettings.getValue(dev, L9['color']) candidatePics = [] # (distance, path, picColor) - for sample, s in self.sampleSettings.items(): + for sample, s in list(self.sampleSettings.items()): path = self.path[sample] otherDevSettings = s.ofDevice(dev) if not otherDevSettings: diff --git a/light9/paint/solve_test.py b/light9/paint/solve_test.py --- a/light9/paint/solve_test.py +++ b/light9/paint/solve_test.py @@ -1,6 +1,6 @@ import unittest import numpy.testing -import solve +from . import solve from rdflib import Namespace from light9.namespaces import RDF, L9, DEV from rdfdb.localsyncedgraph import LocalSyncedGraph @@ -33,7 +33,7 @@ class TestSolve(unittest.TestCase): }) self.assertEqual( DeviceSettings(self.graph, [ - (DEV['aura1'], L9['color'], u"#ffffff"), + (DEV['aura1'], L9['color'], "#ffffff"), (DEV['aura1'], L9['rx'], 0.5), (DEV['aura1'], L9['ry'], 0.573), ]), devAttrs) @@ -68,7 +68,7 @@ class TestSimulationLayers(unittest.Test layers = self.solver.simulationLayers( settings=DeviceSettings(self.graph, [( DEV['aura1'], L9['color'], - u"#ffffff"), (DEV['aura1'], L9['rx'], + "#ffffff"), (DEV['aura1'], L9['rx'], 0.5), (DEV['aura1'], L9['ry'], 0.573)])) self.assertEqual([{ 'path': CAM_TEST['bg2-d.jpg'], @@ -79,7 +79,7 @@ class TestSimulationLayers(unittest.Test layers = self.solver.simulationLayers( settings=DeviceSettings(self.graph, [( DEV['aura1'], L9['color'], - u"#304050"), (DEV['aura1'], L9['rx'], + "#304050"), (DEV['aura1'], L9['rx'], 0.5), (DEV['aura1'], L9['ry'], 0.573)])) self.assertEqual([{ 'path': CAM_TEST['bg2-d.jpg'], @@ -89,10 +89,10 @@ class TestSimulationLayers(unittest.Test def testPerfect2Matches(self): layers = self.solver.simulationLayers( settings=DeviceSettings(self.graph, [ - (DEV['aura1'], L9['color'], u"#ffffff"), + (DEV['aura1'], L9['color'], "#ffffff"), (DEV['aura1'], L9['rx'], 0.5), (DEV['aura1'], L9['ry'], 0.573), - (DEV['aura2'], L9['color'], u"#ffffff"), + (DEV['aura2'], L9['color'], "#ffffff"), (DEV['aura2'], L9['rx'], 0.7), (DEV['aura2'], L9['ry'], 0.573), ])) diff --git a/light9/prof.py b/light9/prof.py --- a/light9/prof.py +++ b/light9/prof.py @@ -37,8 +37,8 @@ def watchPoint(filename, lineno, event=" if (frame.f_code.co_filename, frame.f_lineno) == (filename, lineno): stack = ''.join(traceback.format_stack(frame)) if stack not in seenTraces: - print "watchPoint hit" - print stack + print("watchPoint hit") + print(stack) seenTraces[stack] = 1 else: seenTraces[stack] += 1 diff --git a/light9/showconfig.py b/light9/showconfig.py --- a/light9/showconfig.py +++ b/light9/showconfig.py @@ -3,7 +3,7 @@ from twisted.python.filepath import File from os import path, getenv from rdflib import Graph from rdflib import URIRef -from namespaces import MUS, L9 +from .namespaces import MUS, L9 log = logging.getLogger('showconfig') _config = None # graph diff --git a/light9/tkdnd.py b/light9/tkdnd.py --- a/light9/tkdnd.py +++ b/light9/tkdnd.py @@ -45,7 +45,7 @@ class Hover(object): self.oldStyle = {} def set(self, ev): - for k, v in self.style.items(): + for k, v in list(self.style.items()): self.oldStyle[k] = self.widget.cget(k) self.widget.configure(**self.style) return ev.action diff --git a/light9/uihelpers.py b/light9/uihelpers.py --- a/light9/uihelpers.py +++ b/light9/uihelpers.py @@ -1,11 +1,11 @@ """all the tiny tk helper functions""" -from __future__ import nested_scopes + #from Tkinter import Button import logging, time from rdflib import Literal -from Tix import Button, Toplevel, Tk, IntVar, Entry, DoubleVar -import Tkinter +from tkinter.tix import Button, Toplevel, Tk, IntVar, Entry, DoubleVar +import tkinter from light9.namespaces import L9 log = logging.getLogger("toplevel") @@ -33,7 +33,7 @@ def toplevel_savegeometry(tl,name): f=open(".light9-window-geometry-%s" % name.replace(' ','_'),'w') f.write(tl.geometry()) # else the window never got mapped - except Exception, e: + except Exception as e: # it's ok if there's no saved geometry pass @@ -62,7 +62,7 @@ def toplevelat(name, existingtoplevel=No def savePos(ev): geo = tl.geometry() - if not isinstance(ev.widget, (Tk, Tkinter.Tk)): + if not isinstance(ev.widget, (Tk, tkinter.Tk)): # I think these are due to internal widget size changes, # not the toplevel changing return @@ -103,12 +103,12 @@ def toggle_slider(s): # for lambda callbacks def printout(t): - print 'printout', t + print('printout', t) def printevent(ev): for k in dir(ev): if not k.startswith('__'): - print 'ev', k, getattr(ev,k) + print('ev', k, getattr(ev,k)) def eventtoparent(ev,sequence): "passes an event to the parent, screws up TixComboBoxes" @@ -131,7 +131,7 @@ def colorlabel(label): txt=label['text'] or "0" lev=float(txt)/100 low=(80,80,180) - high=(255,55,050) + high=(255,55,0o50) out = [int(l+lev*(h-l)) for h,l in zip(high,low)] col="#%02X%02X%02X" % tuple(out) label.config(bg=col) @@ -218,19 +218,19 @@ class FancyDoubleVar(DoubleVar): return cbname trace=trace_variable def disable_traces(self): - for cb,mode in self.callbacklist.items(): + for cb,mode in list(self.callbacklist.items()): # DoubleVar.trace_vdelete(self,v[0],k) self._tk.call("trace", "vdelete", self._name, mode,cb) # but no master delete! def recreate_traces(self): - for cb,mode in self.callbacklist.items(): + for cb,mode in list(self.callbacklist.items()): # self.trace_variable(v[0],v[1]) self._tk.call("trace", "variable", self._name, mode,cb) def trace_named(self, name, callback): if name in self.namedtraces: - print "FancyDoubleVar: already had a trace named %s - replacing it" % name + print("FancyDoubleVar: already had a trace named %s - replacing it" % name) self.delete_named(name) cbname = self.trace_variable('w',callback) # this will register in self.callbacklist too @@ -245,9 +245,9 @@ class FancyDoubleVar(DoubleVar): self.trace_vdelete('w',cbname) #self._tk.call("trace","vdelete",self._name,'w',cbname) - print "FancyDoubleVar: successfully deleted trace named %s" % name + print("FancyDoubleVar: successfully deleted trace named %s" % name) else: - print "FancyDoubleVar: attempted to delete named %s which wasn't set to any function" % name + print("FancyDoubleVar: attempted to delete named %s which wasn't set to any function" % name) def get_selection(listbox): 'Given a listbox, returns first selection as integer' @@ -259,7 +259,7 @@ if __name__=='__main__': root.tk_focusFollowsMouse() iv=IntVar() def cb(): - print "cb!" + print("cb!") t = Togglebutton(root,text="testbutton",command=cb,variable=iv) t.pack() Entry(root,textvariable=iv).pack() diff --git a/light9/updatefreq.py b/light9/updatefreq.py --- a/light9/updatefreq.py +++ b/light9/updatefreq.py @@ -1,6 +1,6 @@ """calculates your updates-per-second""" -from __future__ import division + import time class Updatefreq: diff --git a/light9/vidref/main.py b/light9/vidref/main.py --- a/light9/vidref/main.py +++ b/light9/vidref/main.py @@ -90,7 +90,7 @@ class Gui(object): self.pipeline.setLiveVideo(widget.get_active()) def on_liveFrameRate_value_changed(self, widget): - print widget.get_value() + print(widget.get_value()) def onMusicTimeChange(self, position): self.ignoreScaleChanges = True diff --git a/light9/vidref/qt_test.py b/light9/vidref/qt_test.py --- a/light9/vidref/qt_test.py +++ b/light9/vidref/qt_test.py @@ -37,33 +37,33 @@ class Vid(object): bus.connect("sync-message::element", self.on_sync_message) def on_message(self, bus, message): - print "msg", bus, message + print("msg", bus, message) t = message.type if t == gst.MESSAGE_EOS: self.player.set_state(gst.STATE_NULL) elif t == gst.MESSAGE_ERROR: err, debug = message.parse_error() - print "Error: %s" % err, debug + print("Error: %s" % err, debug) self.player.set_state(gst.STATE_NULL) def on_sync_message(self, bus, message): - print "syncmsg", bus, message + print("syncmsg", bus, message) if message.structure is None: return message_name = message.structure.get_name() if message_name == "prepare-xwindow-id": - print "pxi" + print("pxi") win_id = self.windowId assert win_id imagesink = message.src imagesink.set_property("force-aspect-ratio", True) - print "set_xwindow_id" + print("set_xwindow_id") imagesink.set_xwindow_id(win_id) - print "dnoe msg" + print("dnoe msg") def startPrev(self): self.player.set_state(gst.STATE_PLAYING) - print "should be playing" + print("should be playing") class MainWin(QtGui.QMainWindow): @@ -77,4 +77,4 @@ class MainWin(QtGui.QMainWindow): @QtCore.pyqtSlot() def startLiveView(self): - print "slv" + print("slv") diff --git a/light9/vidref/remotepivideo.py b/light9/vidref/remotepivideo.py --- a/light9/vidref/remotepivideo.py +++ b/light9/vidref/remotepivideo.py @@ -10,7 +10,7 @@ from light9.vidref.replay import framera from light9 import prof, showconfig from light9.namespaces import L9 from PIL import Image -from StringIO import StringIO +from io import StringIO log = logging.getLogger('remotepi') @@ -80,7 +80,7 @@ class Pipeline(object): pass def setLiveVideo(self, on): - print "setLiveVideo", on + print("setLiveVideo", on) def onFrame(self, jpg, frameTime): # We could pass frameTime here to try to compensate for lag, diff --git a/light9/vidref/replay.py b/light9/vidref/replay.py --- a/light9/vidref/replay.py +++ b/light9/vidref/replay.py @@ -1,4 +1,4 @@ -from __future__ import division + import os, gtk, shutil, logging, time from bisect import bisect_left from decimal import Decimal diff --git a/light9/vidref/videorecorder.py b/light9/vidref/videorecorder.py --- a/light9/vidref/videorecorder.py +++ b/light9/vidref/videorecorder.py @@ -5,7 +5,7 @@ import gtk from PIL import Image from threading import Thread from twisted.internet import defer -from Queue import Queue, Empty +from queue import Queue, Empty from light9.vidref.replay import framerate, songDir, takeDir, snapshotDir log = logging.getLogger() @@ -56,7 +56,7 @@ class Pipeline(object): "videocrop left=160 top=180 right=120 bottom=80 ! " "queue name=vid" % framerate) - print cam + print(cam) self.pipeline = gst.parse_launch(cam) def makeElem(t, n=None): diff --git a/light9/wavelength.py b/light9/wavelength.py --- a/light9/wavelength.py +++ b/light9/wavelength.py @@ -1,6 +1,6 @@ #!/usr/bin/python -from __future__ import division, nested_scopes + import sys, wave def wavelength(filename): @@ -15,4 +15,4 @@ def wavelength(filename): if __name__ == "__main__": for songfile in sys.argv[1:]: - print songfile, wavelength(songfile) + print(songfile, wavelength(songfile)) diff --git a/light9/wavepoints.py b/light9/wavepoints.py --- a/light9/wavepoints.py +++ b/light9/wavepoints.py @@ -1,21 +1,21 @@ -from __future__ import division + import wave, audioop def simp(filename, seconds_per_average=0.001): """smaller seconds_per_average means fewer data points""" wavefile = wave.open(filename, 'rb') - print "# gnuplot data for %s, seconds_per_average=%s" % \ - (filename, seconds_per_average) - print "# %d channels, samplewidth: %d, framerate: %s, frames: %d\n# Compression type: %s (%s)" % wavefile.getparams() + print("# gnuplot data for %s, seconds_per_average=%s" % \ + (filename, seconds_per_average)) + print("# %d channels, samplewidth: %d, framerate: %s, frames: %d\n# Compression type: %s (%s)" % wavefile.getparams()) framerate = wavefile.getframerate() # frames / second frames_to_read = int(framerate * seconds_per_average) - print "# frames_to_read=%s" % frames_to_read + print("# frames_to_read=%s" % frames_to_read) time_and_max = [] values = [] count = 0 - while 1: + while True: fragment = wavefile.readframes(frames_to_read) if not fragment: break