# This file is a portion of the Red Hat Network Panel Applet
#
# Copyright (C) 1999-2002 Red Hat, Inc. All Rights Reserved.
# Distributed under GPL version 2.
#
# $Id: rhn_utils.py,v 1.32 2003/10/14 23:06:51 veillard Exp $

import pwd
import os
import string
import sys
import shelve
import exceptions

import gettext

from rhn_applet_rpm import rhnAppletRPM

GETTEXT_DOMAIN = "rhn-applet"
gettext.bindtextdomain (GETTEXT_DOMAIN, "/usr/share/locale")
gettext.textdomain (GETTEXT_DOMAIN)
try:
    gettext.install(GETTEXT_DOMAIN, "/usr/share/locale", 1)
except IOError:
    import __builtin__
    __builtin__.__dict__['_'] = unicode
except AttributeError: # older gettext modules don't have an install() method
    from gettext import _

# up2date_client/config.py
from config import ConfigFile

config_obj = None
user_config_obj = None

AppletDefaults = {
    "use_ca_cert"       :  (_("The location of the SSL CA certificate."),
                            "/usr/share/rhn/RHNS-CA-CERT"),
    }

UserDefaults = {
    "IgnoredPackages"   : (_("Package names to ignore when counting updates"),
                           ""),
    "Consent"           : (_("User consents to connection to RHN for updates"),
                           ""),
    "httpProxy"         : (_("HTTP proxy in host:port format, "\
                             "e.g. squid.redhat.com:3128"),
                           ""),
    "proxyUser"         : (_("The username for an authenticated proxy"),
                           ""),
    "proxyPassword"     : (_("The password to use for an authenticated proxy"),
                           ""),
    }

def dump_memory():
    pid = os.getpid()
    f = open("/proc/%s/statm" % pid)
    print "memory: %s" % f.read()

class rhnAppletConfig(ConfigFile):
    "derived from the ConfigFile class, with prepopulated default values"
    def __init__(self):
        ConfigFile.__init__(self)
        self.update(AppletDefaults)
        self.fileName = "/etc/sysconfig/rhn/rhn-applet"

class rhnAppletUserConfig(ConfigFile):
    "derived from the ConfigFile class, with prepopulated default values"
    def __init__(self):
        ConfigFile.__init__(self)
        self.update(UserDefaults)        
        file = pwd.getpwuid(os.getuid())[5]
        file = file + "/.rhn-applet.conf"
        self.fileName = file
    # make sure this exists on disk
    def init(self):
        if not os.access(self.fileName, os.F_OK):
            self.save()            
        self.load()
        
def get_config(name):
    global config_obj
    
    if not config_obj:
        config_obj = rhnAppletConfig()
        config_obj.load()

    return config_obj[name]

def get_user_config(name):
    global user_config_obj
    
    if not user_config_obj:
        user_config_obj = rhnAppletUserConfig()
        user_config_obj.init()
        
    return user_config_obj[name]

def set_user_config(name, val):
    global user_config_obj
    
    if not user_config_obj:
        user_config_obj = rhnAppletUserConfig()
        user_config_obj.init()
    user_config_obj[name] = val
    user_config_obj.save()

DEBUG_LEVEL = 0
def set_log_level(new_level):
    global DEBUG_LEVEL
    DEBUG_LEVEL = new_level

def log_debug(text, level = 1):
    global DEBUG_LEVEL
    if DEBUG_LEVEL >= level:
        sys.stderr.write(text + "\n")
        if DEBUG_LEVEL >= 2:
            dump_memory()

class rhnAppletException(exceptions.Exception):
    def __init__(self, args = None):
        self.args = args
    def __str__(self):
        return "Error: %s" % self.args

class rhnAppletNetworkException(rhnAppletException):
    def __init__(self, errno, errmsg):
        self.errno = errno
        self.errmsg = errmsg

    def __str__(self):
        return "Network Error %d: %s" % (self.errno, self.errmsg)

class rhnAppletRPCFault(rhnAppletException):
    def __init__(self, fault_number, fault_string):
        self.fault_number = fault_number
        self.fault_string = fault_string

    def __str__(self):
        return "Server Communication Error %d: %s" % (
            self.fault_number, self.fault_string)
    
