[yum-git] progress_meter.py translate.py
James Bowes
jbowes at linux.duke.edu
Sun Jan 27 23:00:34 UTC 2008
progress_meter.py | 175 ---------------------------------
translate.py | 282 ------------------------------------------------------
2 files changed, 457 deletions(-)
New commits:
commit 6282862600b06b7eb6fce37d9203cfba746c0517
Author: James Bowes <jbowes at redhat.com>
Date: Sun Jan 27 16:53:44 2008 -0500
Remove old and unused progress_meter and translate modules
diff --git a/progress_meter.py b/progress_meter.py
deleted file mode 100644
index e05b52d..0000000
--- a/progress_meter.py
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/python -t
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Library General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import sys
-import time
-
-class text_progress_meter:
- def __init__(self, fo=sys.stderr):
- self.fo = fo
- self.update_period = 0.3 # seconds
-
- def start(self, filename, url, basename, length):
- self.filename = filename
- self.url = url
- self.basename = basename
- self.length = length
- if not length == None:
- self.flength = self.format_number(length) + 'B'
- self.start_time = time.time()
- self.last_update = 0
- self._do_start()
-
- def _do_start(self):
- pass
-
- def end(self):
- self.now = time.time()
- self._do_end()
-
- def _do_end(self):
- total_time = self.format_time(self.now - self.start_time)
- total_size = self.format_number(self.read)
- if self.length is None:
- out = '\r%-60.60s %5sB %s ' % \
- (self.basename, total_size, total_time)
- else:
- bar = '='*25
- out = '\r%-25.25s %3i%% |%-25.25s| %5sB %8s ' % \
- (self.basename, 100, bar, total_size, total_time)
- self.fo.write(out)
- self.fo.write('\n')
- self.fo.flush()
-
- def update(self, read):
- # for a real gui, you probably want to override and put a call
- # to your mainloop iteration function here
- self.read = read # put this here so it's caught for self.end
- now = time.time()
- if (now >= self.last_update + self.update_period) or \
- not self.last_update:
- self.now = now
- self._do_update(read)
- self.last_update = now
-
- def _do_update(self, read):
- # elapsed time since last update
- etime = self.now - self.start_time
- fetime = self.format_time(etime)
- fread = self.format_number(read)
-
- #self.length = None
- if self.length is None:
- out = '\r%-60.60s %5sB %s ' % \
- (self.basename, fread, fetime)
- else:
- rtime = self.format_time(self.project(etime, read))
- try: frac = float(read)/self.length
- except ZeroDivisionError: frac = 1.0
- if frac > 1.0: frac = 1.0
- bar = '='*int(25 * frac)
- out = '\r%-25.25s %3i%% |%-25.25s| %5sB %8s ETA ' % \
- (self.basename, frac*100, bar, fread, rtime)
- self.fo.write(out)
- self.fo.flush()
-
- def project(self, etime, read):
- # get projected time for total download
- if read == 0:
- # if we just started this file, all bets are off
- self.last_etime = etime
- self.last_read = 0
- self.ave_rate = None
- return None
-
- time_diff = etime - self.last_etime
- read_diff = read - self.last_read
- self.last_etime = etime
- self.last_read = read
- try: rate = time_diff / read_diff ## this is actually an inverse-rate
- except ZeroDivisionError: return 0 ## should only happen at end of file
-
- self._get_new_ave_rate(rate)
- remaining_time = self.ave_rate * (self.length - read)
- if remaining_time < 0: remaining_time = 0
- return self._round_remaining_time(remaining_time)
-
- def _get_new_ave_rate(self, rate, epsilon=0.98):
- if self.ave_rate == None:
- self.ave_rate = rate
- else:
- # calculate a "rolling average" - this balances long-term behavior
- # with short-term fluctuations
- # epsilon = 0.0 --> only consider most recent block
- # epsilon = 1.0 --> only consider first block
- self.ave_rate = (self.ave_rate * epsilon) + (rate * (1-epsilon))
-
- def _round_remaining_time(self, remaining_time):
- # round to further stabilize it
- i = 1
- while remaining_time > 30:
- i = i * 2
- remaining_time = remaining_time / 2
- remaining_time = int(remaining_time)
- return float(remaining_time * i)
-
- def format_time(self, seconds):
- if seconds is None or seconds < 0:
- return '--:--'
- else:
- seconds = int(seconds)
- minutes = seconds / 60
- seconds = seconds % 60
- return '%02i:%02i' % (minutes, seconds)
-
- def format_number(self, number, SI=0, space=' '):
- """Turn numbers into human-readable metric-like numbers"""
- symbols = ['', # (none)
- 'k', # kilo
- 'M', # mega
- 'G', # giga
- 'T', # tera
- 'P', # peta
- 'E', # exa
- 'Z', # zetta
- 'Y'] # yotta
-
- if SI: step = 1000.0
- else: step = 1024.0
-
- thresh = 999
- depth = 0
-
- # we want numbers between
- while number > thresh:
- depth = depth + 1
- number = number / step
-
- # just in case someone needs more than 1000 yottabytes!
- diff = depth - len(symbols) + 1
- if diff > 0:
- depth = depth - diff
- number = number * thresh**depth
-
- if type(number) == type(1) or type(number) == type(1L):
- format = '%i%s%s'
- elif number < 9.95:
- # must use 9.95 for proper sizing. For example, 9.99 will be
- # rounded to 10.0 with the .1f format string (which is too long)
- format = '%.1f%s%s'
- else:
- format = '%.0f%s%s'
-
- return(format % (number, space, symbols[depth]))
diff --git a/translate.py b/translate.py
deleted file mode 100644
index a4ab4ea..0000000
--- a/translate.py
+++ /dev/null
@@ -1,282 +0,0 @@
-# Python module to handle translations
-#
-# Shamlessly copied from the anaconda tree.
-# $Id$
-
-import os, string
-
-prefix = '/usr'
-localedir = prefix + '/share/locale'
-_cat = None
-_cats = {}
-
-# What languages do we support?
-lang = []
-
-def _expandLang(str):
- langs = [str]
- # remove charset ...
- if '.' in str:
- langs.append(string.split(str, '.')[0])
- # also add 2 character language code ...
- if len(str) > 2:
- langs.append(str[:2])
- return langs
-
-def _readEnvironment():
- global lang
- for env in 'LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG':
- if os.environ.has_key(env):
- lang = string.split(os.environ[env], ':')
- lang = map(_expandLang, lang)
- lang = reduce(lambda a, b: a + b, lang)
- break
- # remove duplicates
- newlang = []
- for l in lang:
- if not l in newlang:
- newlang.append(l)
- lang = newlang
- del newlang
-
-if 'C' not in lang:
- lang.append('C')
-
-error = 'gettext.error'
-
-def _lsbStrToInt(str):
- return ord(str[0]) + \
- (ord(str[1]) << 8) + \
- (ord(str[2]) << 16) + \
- (ord(str[3]) << 24)
-def _intToLsbStr(int):
- return chr(int & 0xff) + \
- chr((int >> 8) & 0xff) + \
- chr((int >> 16) & 0xff) + \
- chr((int >> 24) & 0xff)
-def _msbStrToInt(str):
- return ord(str[3]) + \
- (ord(str[2]) << 8) + \
- (ord(str[1]) << 16) + \
- (ord(str[0]) << 24)
-def _intToMsbStr(int):
- return chr((int >> 24) & 0xff) + \
- chr((int >> 16) & 0xff) + \
- chr((int >> 8) & 0xff) + \
- chr(int & 0xff)
-def _StrToInt(str):
- if _gettext_byteorder == 'msb':
- return _msbStrToInt(str)
- else:
- return _lsbStrToInt(str)
-def _intToStr(int):
- if _gettext_byteorder == 'msb':
- return _intToMsbStr(str)
- else:
- return _intToLsbStr(str)
-
-def _getpos(levels = 0):
- """Returns the position in the code where the function was called.
- The function uses some knowledge about python stack frames."""
- import sys
- # get access to the stack frame by generating an exception.
- try:
- raise RuntimeError
- except RuntimeError:
- frame = sys.exc_traceback.tb_frame
- frame = frame.f_back # caller's frame
- while levels > 0:
- frame = frame.f_back
- levels = levels - 1
- return (frame.f_globals['__name__'],
- frame.f_code.co_name,
- frame.f_lineno)
-
-class Catalog:
- def __init__(self, domain=None, localedir=localedir):
- self.domain = domain
- self.localedir = localedir
- self.cat = {}
- if not domain: return
- for self.lang in lang:
- if self.lang == 'C':
- return
- catalog = "%s/%s/LC_MESSAGES/%s.mo" % (
- localedir, self.lang, domain)
- try:
- f = open(catalog, "r")
- buffer = f.read()
- f.close()
- del f
- break
- except IOError:
- pass
- else:
- return # assume C locale
-
- if _StrToInt(buffer[:4]) != 0x950412de:
- # magic number doesn't match
- raise error, 'Bad magic number in %s' % (catalog,)
-
- self.revision = _StrToInt(buffer[4:8])
- nstrings = _StrToInt(buffer[8:12])
- origTabOffset = _StrToInt(buffer[12:16])
- transTabOffset = _StrToInt(buffer[16:20])
- for i in range(nstrings):
- origLength = _StrToInt(buffer[origTabOffset:
- origTabOffset+4])
- origOffset = _StrToInt(buffer[origTabOffset+4:
- origTabOffset+8])
- origTabOffset = origTabOffset + 8
- origStr = buffer[origOffset:origOffset+origLength]
-
- transLength = _StrToInt(buffer[transTabOffset:
- transTabOffset+4])
- transOffset = _StrToInt(buffer[transTabOffset+4:
- transTabOffset+8])
- transTabOffset = transTabOffset + 8
- transStr = buffer[transOffset:transOffset+transLength]
-
- self.cat[origStr] = transStr
-
- def gettext(self, string):
- """Get the translation of a given string"""
- if self.cat.has_key(string):
- return self.cat[string]
- else:
- return string
- # allow catalog access as cat(str) and cat[str] and cat.gettext(str)
- __getitem__ = gettext
- __call__ = gettext
-
- # this is experimental code for producing mo files from Catalog objects
- def __setitem__(self, string, trans):
- """Set the translation of a given string"""
- self.cat[string] = trans
- def save(self, file):
- """Create a .mo file from a Catalog object"""
- try:
- f = open(file, "wb")
- except IOError:
- raise error, "can't open " + file + " for writing"
- f.write(_intToStr(0x950412de)) # magic number
- f.write(_intToStr(0)) # revision
- f.write(_intToStr(len(self.cat))) # nstrings
-
- oIndex = []; oData = ''
- tIndex = []; tData = ''
- for orig, trans in self.cat.items():
- oIndex.append((len(orig), len(oData)))
- oData = oData + orig + '\0'
- tIndex.append((len(trans), len(tData)))
- tData = tData + trans + '\0'
- oIndexOfs = 20
- tIndexOfs = oIndexOfs + 8 * len(oIndex)
- oDataOfs = tIndexOfs + 8 * len(tIndex)
- tDataOfs = oDataOfs + len(oData)
- f.write(_intToStr(oIndexOfs))
- f.write(_intToStr(tIndexOfs))
- for length, offset in oIndex:
- f.write(_intToStr(length))
- f.write(_intToStr(offset + oDataOfs))
- for length, offset in tIndex:
- f.write(_intToStr(length))
- f.write(_intToStr(offset + tDataOfs))
- f.write(oData)
- f.write(tData)
-
-def bindtextdomain(domain, localedir=localedir):
- global _cat
- if not _cats.has_key(domain):
- _cats[domain] = Catalog(domain, localedir)
- if not _cat: _cat = _cats[domain]
-
-def textdomain(domain):
- global _cat
- if not _cats.has_key(domain):
- _cats[domain] = Catalog(domain)
- _cat = _cats[domain]
-
-def gettext(string):
- if _cat == None: raise error, "No catalog loaded"
- return _cat.gettext(string)
-
-def dgettext(domain, string):
- if domain is None:
- return gettext(string)
- if not _cats.has_key(domain):
- raise error, "Domain '" + domain + "' not loaded"
- return _cats[domain].gettext(string)
-
-def test():
- import sys
- global localedir
- if len(sys.argv) not in (2, 3):
- print "Usage: %s DOMAIN [LOCALEDIR]" % (sys.argv[0],)
- sys.exit(1)
- domain = sys.argv[1]
- if len(sys.argv) == 3:
- bindtextdomain(domain, sys.argv[2])
- textdomain(domain)
- info = gettext('') # this is where special info is often stored
- if info:
- print "Info for domain %s, lang %s." % (domain, _cat.lang)
- print info
- else:
- print "No info given in mo file."
-
-def getlangs():
- global lang
- return lang
-
-def setlangs(newlang):
- global lang
- lang = newlang
- if type(newlang) == type(""):
- lang = [ newlang ]
- for l in lang:
- langs = _expandLang(l)
- for nl in langs:
- if not nl in lang:
- lang.append(nl)
- return lang
-
-def getArch ():
- arch = os.uname ()[4]
- if (len (arch) == 4 and arch[0] == 'i' and arch[2:4] == "86"):
- arch = "i386"
-
- if arch == "sparc64":
- arch = "sparc"
-
- return arch
-
-###################################################################
-# Now the real module code
-
-if getArch() == 'sparc':
- _gettext_byteorder = 'msb'
-else:
- _gettext_byteorder = 'lsb'
-
-class i18n:
- def __init__(self):
- self.langs = lang
- self.cat = Catalog("yum")
-
- def getlangs(self):
- return self.langs
-
- def setlangs(self, langs):
- self.langs = setlangs(langs)
- self.cat = Catalog("yum")
-
- def gettext(self, string):
- return self.cat.gettext(string)
-
-def N_(str):
- return str
-
-_readEnvironment()
-cat = i18n()
-_ = cat.gettext
More information about the Yum-cvs-commits
mailing list