Index: third_party/twisted_8_1/twisted/scripts/tkunzip.py
|
diff --git a/third_party/twisted_8_1/twisted/scripts/tkunzip.py b/third_party/twisted_8_1/twisted/scripts/tkunzip.py
|
deleted file mode 100644
|
index 6332c1224726f8ef56ec26dd5b41aaea19d4e30c..0000000000000000000000000000000000000000
|
--- a/third_party/twisted_8_1/twisted/scripts/tkunzip.py
|
+++ /dev/null
|
@@ -1,286 +0,0 @@
|
-"""Post-install GUI to compile to pyc and unpack twisted doco"""
|
-
|
-from __future__ import generators
|
-
|
-import sys
|
-import zipfile
|
-import py_compile
|
-
|
-# we're going to ignore failures to import tkinter and fall back
|
-# to using the console if the required dll is not found
|
-
|
-# Scary kludge to work around tk84.dll bug:
|
-# https://sourceforge.net/tracker/index.php?func=detail&aid=814654&group_id=5470&atid=105470
|
-# Without which(): you get a windows missing-dll popup message
|
-from twisted.python.procutils import which
|
-tkdll='tk84.dll'
|
-if which(tkdll) or which('DLLs/%s' % tkdll):
|
- try:
|
- import Tkinter
|
- from Tkinter import *
|
- from twisted.internet import tksupport
|
- except ImportError:
|
- pass
|
-
|
-# twisted
|
-from twisted.internet import reactor, defer
|
-from twisted.python import failure, log, zipstream, util, usage, log
|
-# local
|
-import os.path
|
-
|
-class ProgressBar:
|
- def __init__(self, master=None, orientation="horizontal",
|
- min=0, max=100, width=100, height=18,
|
- doLabel=1, appearance="sunken",
|
- fillColor="blue", background="gray",
|
- labelColor="yellow", labelFont="Arial",
|
- labelText="", labelFormat="%d%%",
|
- value=0, bd=2):
|
- # preserve various values
|
- self.master=master
|
- self.orientation=orientation
|
- self.min=min
|
- self.max=max
|
- self.width=width
|
- self.height=height
|
- self.doLabel=doLabel
|
- self.fillColor=fillColor
|
- self.labelFont= labelFont
|
- self.labelColor=labelColor
|
- self.background=background
|
- self.labelText=labelText
|
- self.labelFormat=labelFormat
|
- self.value=value
|
- self.frame=Frame(master, relief=appearance, bd=bd)
|
- self.canvas=Canvas(self.frame, height=height, width=width, bd=0,
|
- highlightthickness=0, background=background)
|
- self.scale=self.canvas.create_rectangle(0, 0, width, height,
|
- fill=fillColor)
|
- self.label=self.canvas.create_text(self.canvas.winfo_reqwidth() / 2,
|
- height / 2, text=labelText,
|
- anchor="c", fill=labelColor,
|
- font=self.labelFont)
|
- self.update()
|
- self.canvas.pack(side='top', fill='x', expand='no')
|
-
|
- def pack(self, *args, **kwargs):
|
- self.frame.pack(*args, **kwargs)
|
-
|
- def updateProgress(self, newValue, newMax=None):
|
- if newMax:
|
- self.max = newMax
|
- self.value = newValue
|
- self.update()
|
-
|
- def update(self):
|
- # Trim the values to be between min and max
|
- value=self.value
|
- if value > self.max:
|
- value = self.max
|
- if value < self.min:
|
- value = self.min
|
- # Adjust the rectangle
|
- if self.orientation == "horizontal":
|
- self.canvas.coords(self.scale, 0, 0,
|
- float(value) / self.max * self.width, self.height)
|
- else:
|
- self.canvas.coords(self.scale, 0,
|
- self.height - (float(value) /
|
- self.max*self.height),
|
- self.width, self.height)
|
- # Now update the colors
|
- self.canvas.itemconfig(self.scale, fill=self.fillColor)
|
- self.canvas.itemconfig(self.label, fill=self.labelColor)
|
- # And update the label
|
- if self.doLabel:
|
- if value:
|
- if value >= 0:
|
- pvalue = int((float(value) / float(self.max)) *
|
- 100.0)
|
- else:
|
- pvalue = 0
|
- self.canvas.itemconfig(self.label, text=self.labelFormat
|
- % pvalue)
|
- else:
|
- self.canvas.itemconfig(self.label, text='')
|
- else:
|
- self.canvas.itemconfig(self.label, text=self.labelFormat %
|
- self.labelText)
|
- self.canvas.update_idletasks()
|
-
|
-
|
-class Progressor:
|
- """A base class to make it simple to hook a progress bar up to a process.
|
- """
|
- def __init__(self, title, *args, **kwargs):
|
- self.title=title
|
- self.stopping=0
|
- self.bar=None
|
- self.iterator=None
|
- self.remaining=1000
|
-
|
- def setBar(self, bar, max):
|
- self.bar=bar
|
- bar.updateProgress(0, max)
|
- return self
|
-
|
- def setIterator(self, iterator):
|
- self.iterator=iterator
|
- return self
|
-
|
- def updateBar(self, deferred):
|
- b=self.bar
|
- try:
|
- b.updateProgress(b.max - self.remaining)
|
- except TclError:
|
- self.stopping=1
|
- except:
|
- deferred.errback(failure.Failure())
|
-
|
- def processAll(self, root):
|
- assert self.bar and self.iterator, "must setBar and setIterator"
|
- self.root=root
|
- root.title(self.title)
|
- d=defer.Deferred()
|
- d.addErrback(log.err)
|
- reactor.callLater(0.1, self.processOne, d)
|
- return d
|
-
|
- def processOne(self, deferred):
|
- if self.stopping:
|
- deferred.callback(self.root)
|
- return
|
-
|
- try:
|
- self.remaining=self.iterator.next()
|
- except StopIteration:
|
- self.stopping=1
|
- except:
|
- deferred.errback(failure.Failure())
|
-
|
- if self.remaining%10==0:
|
- reactor.callLater(0, self.updateBar, deferred)
|
- if self.remaining%100==0:
|
- log.msg(self.remaining)
|
- reactor.callLater(0, self.processOne, deferred)
|
-
|
-def compiler(path):
|
- """A generator for compiling files to .pyc"""
|
- def justlist(arg, directory, names):
|
- pynames=[os.path.join(directory, n) for n in names
|
- if n.endswith('.py')]
|
- arg.extend(pynames)
|
- all=[]
|
- os.path.walk(path, justlist, all)
|
-
|
- remaining=len(all)
|
- i=zip(all, range(remaining-1, -1, -1))
|
- for f, remaining in i:
|
- py_compile.compile(f)
|
- yield remaining
|
-
|
-class TkunzipOptions(usage.Options):
|
- optParameters=[["zipfile", "z", "", "a zipfile"],
|
- ["ziptargetdir", "t", ".", "where to extract zipfile"],
|
- ["compiledir", "c", "", "a directory to compile"],
|
- ]
|
- optFlags=[["use-console", "C", "show in the console, not graphically"],
|
- ["shell-exec", "x", """\
|
-spawn a new console to show output (implies -C)"""],
|
- ]
|
-
|
-def countPys(countl, directory, names):
|
- sofar=countl[0]
|
- sofar=sofar+len([f for f in names if f.endswith('.py')])
|
- countl[0]=sofar
|
- return sofar
|
-
|
-def countPysRecursive(path):
|
- countl=[0]
|
- os.path.walk(path, countPys, countl)
|
- return countl[0]
|
-
|
-def run(argv=sys.argv):
|
- log.startLogging(file('tkunzip.log', 'w'))
|
- opt=TkunzipOptions()
|
- try:
|
- opt.parseOptions(argv[1:])
|
- except usage.UsageError, e:
|
- print str(opt)
|
- print str(e)
|
- sys.exit(1)
|
-
|
- if opt['use-console']:
|
- # this should come before shell-exec to prevent infinite loop
|
- return doItConsolicious(opt)
|
- if opt['shell-exec'] or not 'Tkinter' in sys.modules:
|
- from distutils import sysconfig
|
- from twisted.scripts import tkunzip
|
- myfile=tkunzip.__file__
|
- exe=os.path.join(sysconfig.get_config_var('prefix'), 'python.exe')
|
- return os.system('%s %s --use-console %s' % (exe, myfile,
|
- ' '.join(argv[1:])))
|
- return doItTkinterly(opt)
|
-
|
-def doItConsolicious(opt):
|
- # reclaim stdout/stderr from log
|
- sys.stdout = sys.__stdout__
|
- sys.stderr = sys.__stderr__
|
- if opt['zipfile']:
|
- print 'Unpacking documentation...'
|
- for n in zipstream.unzipIter(opt['zipfile'], opt['ziptargetdir']):
|
- if n % 100 == 0:
|
- print n,
|
- if n % 1000 == 0:
|
- print
|
- print 'Done unpacking.'
|
-
|
- if opt['compiledir']:
|
- print 'Compiling to pyc...'
|
- import compileall
|
- compileall.compile_dir(opt["compiledir"])
|
- print 'Done compiling.'
|
-
|
-def doItTkinterly(opt):
|
- root=Tkinter.Tk()
|
- root.withdraw()
|
- root.title('One Moment.')
|
- root.protocol('WM_DELETE_WINDOW', reactor.stop)
|
- tksupport.install(root)
|
-
|
- prog=ProgressBar(root, value=0, labelColor="black", width=200)
|
- prog.pack()
|
-
|
- # callback immediately
|
- d=defer.succeed(root).addErrback(log.err)
|
-
|
- def deiconify(root):
|
- root.deiconify()
|
- return root
|
-
|
- d.addCallback(deiconify)
|
-
|
- if opt['zipfile']:
|
- uz=Progressor('Unpacking documentation...')
|
- max=zipstream.countZipFileChunks(opt['zipfile'], 4096)
|
- uz.setBar(prog, max)
|
- uz.setIterator(zipstream.unzipIterChunky(opt['zipfile'],
|
- opt['ziptargetdir']))
|
- d.addCallback(uz.processAll)
|
-
|
- if opt['compiledir']:
|
- comp=Progressor('Compiling to pyc...')
|
- comp.setBar(prog, countPysRecursive(opt['compiledir']))
|
- comp.setIterator(compiler(opt['compiledir']))
|
- d.addCallback(comp.processAll)
|
-
|
- def stop(ignore):
|
- reactor.stop()
|
- root.destroy()
|
- d.addCallback(stop)
|
-
|
- reactor.run()
|
-
|
-
|
-if __name__=='__main__':
|
- run()
|
|