www.pudn.com > 10040637740.zip > Config.py


 
#----------------------------------------------------------------------------- 
# Name:        Config.py 
# Product:     ClamWin Free Antivirus 
# 
# Author:      alch [alch at users dot sourceforge dot net] 
# 
# Created:     2004/19/03 
# Copyright:   Copyright alch (c) 2004 
# Licence:      
#   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 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., 675 Mass Ave, Cambridge, MA 02139, USA. 
 
#----------------------------------------------------------------------------- 
import ConfigParser 
import Utils 
import version 
import binascii 
import sys 
if sys.platform.startswith("win"): 
    import win32api 
     
REGEX_SEPARATOR="|CLAMWIN_SEP|" 
 
class Settings:     
    def __init__(self, filename):         
        self._filename = filename	 
        self._settings = { 
        'ClamAV': 
        [0, {'ClamScan': '', 'FreshClam': '', 'Database': '', 
             'RemoveInfected': '0', 'ScanRecursive': '1', 'InfectedOnly': '0', 
             'Priority': 'Low', 'EnableMbox': '0', 'ScanOle2': '1', 
             'ScanArchives': '1', 'MaxSize': '10', 'MaxFiles': '500', 
             'MaxRecursion': '5', 'LogFile': '', 'MaxLogSize': '1', 
             'MoveInfected': '0', 'QuarantineDir': '',  'Debug': '0', 
             'DetectBroken': '0', 'ClamScanParams':'', 
             'IncludePatterns': '',  
             'ExcludePatterns': REGEX_SEPARATOR.join(('*.dbx','*.tbb','*.pst', '*.dat', '*.log', '*.evt', '*.nsf', '*.ntf', '*.chm')),}], 
        'Proxy': 
        [0, {'Host': '', 'Port': '3128', 'User':'', 
             'Password': ''}],               
        'Updates': 
        [0, {'Enable': '1', 'Frequency': 'Daily', 'Time': '10:00:00',  
            'WeekDay': '2', 'DBMirror': 'database.clamav.net',  
            'DBUpdateLogFile': '', 'UpdateOnLogon': '0', 
            'CheckVersion': '1', 'CheckVersionURL': 'http://clamwin.sourceforge.net/clamwin.ver'}],   
        'EmailAlerts': 
        [0, {'Enable': '0', 
             'SMTPHost': '', 'SMTPPort': '25', 'SMTPUser':'', 
             'SMTPPassword': '',  
             'From': 'clamwin@yourdomain', 'To': 'admin@yourdomain',  
             'Subject': 'ClamWin Virus Alert'}],  
        'UI': 
        [0, {'TrayNotify': '1', 'ReportInfected': '1', 'Standalone': '0', 'Version': ''}],                 
        'Schedule': 
        [0, {'Path': '', }],                             
        }         
 
    def Read(self):                 
        try: 
            conf = ConfigParser.ConfigParser() 
            conf.read(self._filename) 
        except ConfigParser.Error: 
            return False         
        for sect in self._settings: 
            for name in self._settings[sect][1]: 
                try:                     
                    val = conf.get(section = sect, option = name) 
                    if self._settings[sect][0]: # is binary? 
                        val = binascii.a2b_hex(val) 
                    self._settings[sect][1][name] = val 
                except ConfigParser.Error: 
                    pass 
        # for older version set display infected only to 1 
        if self._settings['UI'][1]['Version'] == '': 
            self._settings['ClamAV'][1]['InfectedOnly'] = '1' 
            self._settings['UI'][1]['Version'] = version.clamwin_version 
        return True 
 
    def Write(self):         
        try: 
            conf = ConfigParser.ConfigParser() 
            for sect in self._settings: 
                if not conf.has_section(sect): 
                    conf.add_section(sect) 
                    for name in self._settings[sect][1]:	                         
                        val = self._settings[sect][1][name] 
                        if self._settings[sect][0]: # is binary? 
                            val = binascii.b2a_hex(val) 
                        conf.set(sect, option = name, value = val) 
            conf.write(file(self._filename, 'w'))            
        except (ConfigParser.Error, IOError): 
            return False 
        return True 
 
     
    def Get(self, sect, name): 
        value = self._settings[sect][1][name] 
        if(value is None): 
            return "" 
        return Utils.SafeExpandEnvironmentStrings(value)    
         
     
    def Set(self, sect, name, val): 
        if val is None: 
            val = '' 
        if not self._settings.has_key(sect) or \ 
            not self._settings[sect][1].has_key(name): 
            raise AttributeError('Internal Error. No such attribute: '+ sect + ': ' + name) 
        else: 
            self._settings[sect][1][name] = val 
             
    def GetFilename(self): 
        return self._filename