00001
00002
00003 '''
00004 This module provides basic utilities for the modules server_classes.py and start_server.py.
00005
00006 Reading University
00007 MSc in Network Centered Computing
00008 a.weise - a.weise@reading.ac.uk - December 2005
00009 '''
00010
00011 import ConfigParser, string
00012 import time, os
00013
00014 def LoadConfig(file_name, config={}):
00015 """
00016 returns a dictionary with key's of the form
00017 <section>.<option> and the values
00018
00019 source: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65334
00020 """
00021 config = config.copy()
00022 cp = ConfigParser.ConfigParser()
00023 cp.read(file_name)
00024 for sec in cp.sections():
00025 name = string.lower(sec)
00026 for opt in cp.options(sec):
00027 config[name + "." + string.lower(opt)] = string.strip(cp.get(sec, opt))
00028 return config
00029
00030 def check_ip(ip):
00031 '''
00032 This function checks if a given IP is valid.
00033 '''
00034 try:
00035 ip = ip.split(".")
00036 except AttributeError:
00037 return -1
00038
00039 for i in range(len(ip)):
00040 check = ip[i].find("0", 0, 1)
00041 if -1 != check and 1 < len(ip[i]):
00042 return -1
00043 try:
00044 ip[i] = int(ip[i])
00045 except ValueError:
00046 return -1
00047 if ip[i] >= 0 and ip[i] <= 255:
00048 pass
00049 else:
00050 return -1
00051
00052 return 0
00053
00054 def get_keywords(filus):
00055 '''
00056 This function extracts keywords from a give file!
00057 '''
00058 keys = []
00059
00060 try:
00061 file_fd = file(filus, 'r')
00062 except IOError, e:
00063 print "Problem with keyword file -> ", e
00064 return -1
00065
00066 content = file_fd.readlines()
00067
00068 file_fd.close()
00069
00070 content = remove_item(content, "#")
00071 content = remove_item(content, "\n")
00072
00073 for i in range(len(content)):
00074 content[i] = content[i].strip()
00075 content[i] = content[i].rstrip(",")
00076 content[i] = content[i].split(",")
00077 for a in range(len(content[i])):
00078 keys.append(content[i][a])
00079
00080 for i in range(len(keys)):
00081 keys[i] = keys[i].strip()
00082 keys[i] = keys[i].split(":")
00083
00084 return keys
00085
00086 def remove_item(listus, item):
00087 '''
00088 This function removes an item for a list (2 dimentional) as a rekursive function.
00089 '''
00090
00091 while(1):
00092
00093 for i in range(len(listus)):
00094 if -1 != listus[i].find(item, 0, 1):
00095 del listus[i]
00096 remove_item(listus, item)
00097 break
00098 else:
00099 break
00100
00101 return listus
00102
00103 def list_to_string(listus):
00104 '''
00105 This function converts the keyword list (2 dimensional array) to a keyword string (keywords comma separated), so the string is writable into the keyword file.
00106 '''
00107 str_listus = ''
00108
00109 for i in range(len(listus)):
00110 if 1 == len(listus[i]):
00111 str_listus += listus[i][0]+", "
00112 elif 2 == len(listus[i]):
00113 str_listus += listus[i][0]+":"+listus[i][1]+", "
00114
00115 str_listus = str_listus.strip()
00116 str_listus = str_listus.strip(",")
00117
00118 return str_listus
00119
00120 def delete_file(file_name, verbose):
00121 '''
00122 This function deletes a file.
00123 '''
00124 try:
00125 os.remove(file_name)
00126 return 0
00127 except:
00128 if verbose == 1:
00129 print "%s -> could not delete -> \"%s\"" % (time.ctime(), file_name)
00130 return -1
00131
00132 def usage_exit(progname, msg=None):
00133 '''
00134 This function diplays the usage of this program and terminates the program!
00135 '''
00136 if msg:
00137 print msg
00138 print
00139 print "usage: python %s [ -h|--help -c|--config -v|--verbose -d|--daemon] \n\n" % progname
00140 os._exit(-1)
00141
00142 def find(search, listus):
00143 '''
00144 This function finds an item within a list (1 dimensional).
00145 '''
00146 for i in range(len(listus)):
00147 if listus[i] == search:
00148 return listus[i]
00149 return None