~ubuntu-branches/ubuntu/oneiric/command-not-found/oneiric

« back to all changes in this revision

Viewing changes to CommandNotFound/util.py

  • Committer: Bazaar Package Importer
  • Author(s): Michael Vogt, Zygmunt Krynicki
  • Date: 2011-08-25 15:15:50 UTC
  • Revision ID: james.westby@ubuntu.com-20110825151550-m6gycva2g7fnn91m
Tags: 0.2.43ubuntu1
[ Zygmunt Krynicki ]
* lp:~zkrynicki/command-not-found/rework-locale-support:
  - improved gettext handling

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# (c) Zygmunt Krynicki 2008
2
2
# Licensed under GPL, see COPYING for the whole text
3
3
 
 
4
import gettext
 
5
import locale
4
6
import sys
5
7
import gettext
6
8
 
7
 
def no_gettext_for_you(message):
8
 
    """This function is used instead of gettext when there are some locale problems"""
9
 
    return message
10
 
 
11
 
def gettext_not_crashy(s):
12
 
    """ The getext handling is confusing:
13
 
        - gettext.gettext caused LP: #161159
14
 
        - getext.lgettext causes LP: #282446
15
 
        Here we just try both :(
16
 
    """
17
 
    try:
18
 
        return gettext.lgettext(s)
19
 
    except UnicodeEncodeError, e:
20
 
        return gettext.gettext(s)
21
 
 
22
 
def setup_locale():
23
 
    import locale
24
 
    try:
25
 
        locale.getpreferredencoding()
26
 
        gettext.bindtextdomain("command-not-found", "/usr/share/locale")
27
 
        gettext.textdomain("command-not-found")
28
 
        gettext.install("command-not-found", unicode=True)
29
 
        return gettext_not_crashy
30
 
    except locale.Error:
31
 
        #print "Warning: python was unable to setup locale!"
32
 
        #print "Internationalizatio features will not be enabled."
33
 
        return no_gettext_for_you
34
 
 
35
 
_ = gettext_wrapper = setup_locale()
 
9
_ = gettext.translation("command-not-found", fallback=True).ugettext
 
10
 
36
11
 
37
12
def crash_guard(callback, bug_report_url, version):
38
13
    """ Calls callback and catches all exceptions.
42
17
        try:
43
18
            callback()
44
19
        except Exception, ex:
45
 
            print >>sys.stderr, _("Sorry, command-not-found has crashed! Please file a bug report at:")
46
 
            print >>sys.stderr, bug_report_url
47
 
            print >>sys.stderr, _("Please include the following information with the report:")
48
 
            print >>sys.stderr
49
 
            print >>sys.stderr, _("command-not-found version: %s") % version
50
 
            print >>sys.stderr, _("Python version: %d.%d.%d %s %d") % sys.version_info
 
20
            print >> sys.stderr, _("Sorry, command-not-found has crashed! Please file a bug report at:")
 
21
            print >> sys.stderr, bug_report_url
 
22
            print >> sys.stderr, _("Please include the following information with the report:")
 
23
            print >> sys.stderr
 
24
            print >> sys.stderr, _("command-not-found version: %s") % version
 
25
            print >> sys.stderr, _("Python version: %d.%d.%d %s %d") % sys.version_info
51
26
            try:
52
27
                import subprocess
53
28
                subprocess.call(["lsb_release", "-i", "-d", "-r", "-c"], stdout=sys.stderr)
54
29
            except (ImportError, OSError):
55
30
                pass
56
 
            print >>sys.stderr, _("Exception information:")
57
 
            print >>sys.stderr
58
 
            print >>sys.stderr, ex
 
31
            print >> sys.stderr, _("Exception information:")
 
32
            print >> sys.stderr
 
33
            print >> sys.stderr, ex
59
34
            try:
60
35
                import traceback
61
36
                traceback.print_exc()
64
39
    finally:
65
40
        sys.exit(127)
66
41
 
 
42
 
67
43
__all__ = ["gettext_wrapper", "crash_guard"]