X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=apt_dht%2Fapt_dht_conf.py;h=aaf20133aec6794c35d43f045047c4ec9cc7dccc;hb=f47aeeba7f705a40bbfe947f5eb374018f57ab37;hp=931d46cdd5a1a7fb48308c2dbac0ea22dc00e9c0;hpb=1fb0d1714e1b0af6dc6abb8adc75a9e31f77fa29;p=quix0rs-apt-p2p.git diff --git a/apt_dht/apt_dht_conf.py b/apt_dht/apt_dht_conf.py index 931d46c..aaf2013 100644 --- a/apt_dht/apt_dht_conf.py +++ b/apt_dht/apt_dht_conf.py @@ -1,23 +1,38 @@ +"""Loading of configuration files and parameters. + +@type version: L{twisted.python.versions.Version} +@var version: the version of this program +@type DEFAULT_CONFIG_FILES: C{list} of C{string} +@var DEFAULT_CONFIG_FILES: the default config files to load (in order) +@var DEFAULTS: the default config parameter values for the main program +@var DHT_DEFAULTS: the default config parameter values for the default DHT + +""" + import os, sys from ConfigParser import SafeConfigParser from twisted.python import log, versions class ConfigError(Exception): + """Errors that occur in the loading of configuration variables.""" def __init__(self, message): self.message = message def __str__(self): return repr(self.message) -version = versions.Version('apt-dht', 0, 0, 0) +version = versions.Version('apt-p2p', 0, 0, 0) + +# Set the home parameter home = os.path.expandvars('${HOME}') if home == '${HOME}' or not os.path.isdir(home): home = os.path.expanduser('~') if not os.path.isdir(home): home = os.path.abspath(os.path.dirname(sys.argv[0])) -DEFAULT_CONFIG_FILES=['/etc/apt-dht/apt-dht.conf', - home + '/.apt-dht/apt-dht.conf'] + +DEFAULT_CONFIG_FILES=['/etc/apt-p2p/apt-p2p.conf', + home + '/.apt-p2p/apt-p2p.conf'] DEFAULTS = { @@ -25,7 +40,7 @@ DEFAULTS = { 'PORT': '9977', # Directory to store the downloaded files in - 'CACHE_DIR': home + '/.apt-dht/cache', + 'CACHE_DIR': home + '/.apt-p2p/cache', # Other directories containing packages to share with others # WARNING: all files in these directories will be hashed and available @@ -43,10 +58,14 @@ DEFAULTS = { # to reload when a new request arrives. 'UNLOAD_PACKAGES_CACHE': '5m', + # Refresh the DHT keys after this much time has passed. + # This should be a time slightly less than the DHT's KEY_EXPIRE value. + 'KEY_REFRESH': '57m', + # Which DHT implementation to use. # It must be possile to do "from .DHT import DHT" to get a class that # implements the IDHT interface. - 'DHT': 'apt_dht_Khashmir', + 'DHT': 'apt_p2p_Khashmir', # Whether to only run the DHT (for providing only a bootstrap node) 'DHT-ONLY': 'no', @@ -76,6 +95,14 @@ DHT_DEFAULTS = { # how many hosts to post to 'STORE_REDUNDANCY': '3', + # How many values to attempt to retrieve from the DHT. + # Setting this to 0 will try and get all values (which could take a while if + # a lot of nodes have values). Setting it negative will try to get that + # number of results from only the closest STORE_REDUNDANCY nodes to the hash. + # The default is a large negative number so all values from the closest + # STORE_REDUNDANCY nodes will be retrieved. + 'RETRIEVE_VALUES': '-10000', + ### ROUTING TABLE STUFF # how many times in a row a node can fail to respond before it's booted from the routing table 'MAX_FAILURES': '3', @@ -93,10 +120,13 @@ DHT_DEFAULTS = { 'SPEW': 'yes', } -class AptDHTConfigParser(SafeConfigParser): - """ - Adds 'gettime' to ConfigParser to interpret the suffixes. +class AptP2PConfigParser(SafeConfigParser): + """Adds 'gettime' and 'getstringlist' to ConfigParser objects. + + @ivar time_multipliers: the 'gettime' suffixes and the multipliers needed + to convert them to seconds """ + time_multipliers={ 's': 1, #seconds 'm': 60, #minutes @@ -105,6 +135,7 @@ class AptDHTConfigParser(SafeConfigParser): } def gettime(self, section, option): + """Read the config parameter as a time value.""" mult = 1 value = self.get(section, option) if len(value) == 0: @@ -114,14 +145,21 @@ class AptDHTConfigParser(SafeConfigParser): mult = self.time_multipliers[suffix] value = value[:-1] return int(value)*mult + def getstring(self, section, option): + """Read the config parameter as a string.""" return self.get(section,option) + def getstringlist(self, section, option): + """Read the multi-line config parameter as a list of strings.""" return self.get(section,option).split() + def optionxform(self, option): + """Use all uppercase in the config parameters names.""" return option.upper() -config = AptDHTConfigParser(DEFAULTS) +# Initialize the default config parameters +config = AptP2PConfigParser(DEFAULTS) config.add_section(config.get('DEFAULT', 'DHT')) for k in DHT_DEFAULTS: config.set(config.get('DEFAULT', 'DHT'), k, DHT_DEFAULTS[k])