On Tue, Nov 11, 2008 at 11:38:50AM -0500, Chris Lumens wrote: > Here's the latest in our continuing war against UnicodeDecodeError. I > don't want to claim victory yet, but I think this patch gets us closer. > > The real problem is in assembling the string in AnacondaCallback, as > usual. All the rest of the patch is just me converting our typical > unicode() call into a function so we can be more lazy in the future. > > - Chris > > > diff --git a/yuminstall.py b/yuminstall.py > index a962639..53f6327 100644 > --- a/yuminstall.py > +++ b/yuminstall.py > @@ -67,21 +67,31 @@ urlgrabber.grabber.default_grabber.opts.user_agent = "%s (anaconda)/%s" %(produc > import iutil > import isys > > +def toUTF8(str): > + if type(str) != unicode: > + return unicode(str, encoding='utf-8') > + else: > + return str > + toUTF8() doesn't strike me as the best way. Can we not go with try/except and catch UnicodeDecodeError rather than looking at the type of the str? End result is the same, I guess, but when I see code looking at types of variables like this, it reminds me of various FailCode from Java at GT. > def size_string (size): > def number_format(s): > return locale.format("%s", s, 1) > > + retval = None > + > if size > 1024 * 1024: > size = size / (1024*1024) > - return _("%s MB") %(number_format(size),) > + retval = _("%s MB") %(number_format(size),) > elif size > 1024: > size = size / 1024 > - return _("%s KB") %(number_format(size),) > + retval = _("%s KB") %(number_format(size),) > else: > if size == 1: > - return _("%s Byte") %(number_format(size),) > + retval = _("%s Byte") %(number_format(size),) > else: > - return _("%s Bytes") %(number_format(size),) > + retval = _("%s Bytes") %(number_format(size),) > + > + return toUTF8(retval) > > class AnacondaCallback: > > @@ -155,14 +165,12 @@ class AnacondaCallback: > repo = self.repos.getRepo(po.repoid) > > pkgStr = "%s-%s-%s.%s" % (po.name, po.version, po.release, po.arch) > - s = _("<b>Installing %s</b> (%s)\n") %(pkgStr, size_string(hdr['size'])) > - summary = gettext.ldgettext("redhat-dist", hdr['summary'] or "") > - if type(summary) != unicode: > - summary = unicode(summary, encoding='utf-8') > + s = toUTF8(_("<b>Installing %s</b> (%s)\n")) %(pkgStr, size_string(hdr['size'])) > + summary = toUTF8(gettext.ldgettext("redhat-dist", hdr['summary'] or "")) > s += summary.strip() > self.progress.set_label(s) > > - self.instLog.write(self.modeText % pkgStr) > + self.instLog.write(self.modeText % str(pkgStr)) > > self.instLog.flush() > self.openfile = None > @@ -645,9 +653,7 @@ class AnacondaYum(YumSorter): > else: > buttons = [_("Re_boot"), _("_Retry")] > > - pkgFile = os.path.basename(package.returnSimple('relativepath')) > - if type(pkgFile) != unicode: > - pkgFile = unicode(pkgFile, encoding='utf-8') > + pkgFile = toUTF8(os.path.basename(package.returnSimple('relativepath'))) > > rc = self.anaconda.intf.messageWindow(_("Error"), > _("The file %s cannot be opened. This is due to a missing " > @@ -839,11 +845,8 @@ class AnacondaYum(YumSorter): > msg = _("There was an error running your transaction for " > "the following reason(s): %s.\n") % ', '.join(uniqueProbs.values()) > > - if type(spaceprob) != unicode: > - spaceprob = unicode(spaceprob, encoding='utf-8') > - > - if type(fileprob) != unicode: > - fileprob = unicode(fileprob, encoding='utf-8') > + spaceprob = toUTF8(spaceprob) > + fileprob = toUTF8(fileprob) > > if len(self.anaconda.backend.getRequiredMedia()) > 1: > intf.detailedMessageWindow(_("Error Running Transaction"), > > _______________________________________________ > Anaconda-devel-list mailing list > Anaconda-devel-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/anaconda-devel-list -- David Cantrell <dcantrell@xxxxxxxxxx> Red Hat / Honolulu, HI
Attachment:
pgp3NHwogaNmh.pgp
Description: PGP signature
_______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list