[tor-commits] [bridgedb/master] Refactor bridgedb.Main.run() and bridgedb.Main._reloadFn().

isis at torproject.org isis at torproject.org
Sun Jan 12 06:06:30 UTC 2014


commit afa265eb06a97831200389b18225f410b0927e55
Author: Isis Lovecruft <isis at torproject.org>
Date:   Fri Oct 18 22:35:29 2013 +0000

    Refactor bridgedb.Main.run() and bridgedb.Main._reloadFn().
    
    The main entry point and server reload function are refactored to recieve the
    parsed options from the commandline script, scripts/bridgedb.
    
    It is necessary to pass *args to `_reloadFn()` (as well as its original
    stubbed lambda function), because the arguments are technically unknown to the
    scope of the `reload()` function embedded in `bridgedb.Main.startup()` when it
    is evaluated at compile time (they are not known until later when
    `bridgedb.Main.run()` is called via scripts/bridgedb).
---
 lib/bridgedb/Main.py |   60 ++++++++++++++++++++++++++------------------------
 1 file changed, 31 insertions(+), 29 deletions(-)

diff --git a/lib/bridgedb/Main.py b/lib/bridgedb/Main.py
index fd9fbda..76f0832 100644
--- a/lib/bridgedb/Main.py
+++ b/lib/bridgedb/Main.py
@@ -16,14 +16,16 @@ import gettext
 
 from twisted.internet import reactor
 
+from bridgedb import options
+
 import bridgedb.Bridges as Bridges
 import bridgedb.Dist as Dist
 import bridgedb.Time as Time
 import bridgedb.Storage
-import bridgedb.Opt as Opt
 import bridgedb.Bucket as Bucket
 import bridgedb.Util as Util
 
+
 class Conf:
     """A configuration object.  Holds unvalidated attributes.
     """
@@ -278,10 +280,11 @@ def loadProxyList(cfg):
         f.close()
     return ipset
 
-_reloadFn = lambda: True
+_reloadFn = lambda x: True
 def _handleSIGHUP(*args):
     """Called when we receive a SIGHUP; invokes _reloadFn."""
-    reactor.callLater(0, _reloadFn)
+    reactor.callLater(0, _reloadFn, *args)
+
 
 class ProxyCategory:
     def __init__(self):
@@ -291,7 +294,8 @@ class ProxyCategory:
     def replaceProxyList(self, ipset):
         self.ipset = ipset
 
-def startup(cfg):
+
+def startup(cfg, options):
     """Parse bridges,
     """
     # Expand any ~ characters in paths in the configuration.
@@ -388,14 +392,13 @@ def startup(cfg):
         splitter.addPseudoRing(p)
 
     # Make the parse-bridges function get re-called on SIGHUP.
-    def reload():
+    def reload(*args):
         logging.info("Caught SIGHUP")
 
-        # re open config file
-        options, arguments = Opt.parseOpts()
+        # reparse the config file
         configuration = {}
-        if options.configfile:
-            execfile(options.configfile, configuration)
+        if options['config']:
+            execfile(options['config'], configuration)
             cfg = Conf(**configuration)
             # update loglevel on (re)load
             level = getattr(cfg, 'LOGLEVEL', 'WARNING')
@@ -438,7 +441,7 @@ def startup(cfg):
     signal.signal(signal.SIGHUP, _handleSIGHUP)
 
     # And actually load it to start.
-    reload()
+    reload(options)
 
     # Configure HTTP and/or HTTPS servers.
     if cfg.HTTPS_DIST and cfg.HTTPS_SHARE:
@@ -457,34 +460,33 @@ def startup(cfg):
         if cfg.PIDFILE:
             os.unlink(cfg.PIDFILE)
 
-def run():
-    """Parse the command line to determine where the configuration is.
-       Parse the configuration, and start the servers.
+def run(options):
+    """This is the main entry point into BridgeDB.
+
+    Given the parsed commandline options, this function handles locating the
+    configuration file, loading and parsing it, and then either
+    starting/reloading the servers or dumping bridge assignments to files.
+
+    :type options: :class:`bridgedb.opt.MainOptions`
+    :param options: A pre-parsed options class.
     """
-    options, arguments = Opt.parseOpts()
     configuration = {}
 
-    if options.testing:
-        configuration = CONFIG
-    elif not options.configfile:
-        print "Syntax: %s -c CONFIGFILE" % sys.argv[0]
+    if not options['config']:
+        options.getUsage()
         sys.exit(1)
-    else:
-        configFile = options.configfile
-        execfile(configFile, configuration)
-        C = Conf(**configuration)
-        configuration = C
+
+    configFile = options['config']
+    execfile(configFile, configuration)
+    C = Conf(**configuration)
+    configuration = C
 
     # Change to the directory where we're supposed to run.
     if configuration.RUN_IN_DIR:
         os.chdir(os.path.expanduser(configuration.RUN_IN_DIR))
-
-    if options.dumpbridges:
+    if options['dump-bridges']:
         bucketManager = Bucket.BucketManager(configuration)
         bucketManager.assignBridgesToBuckets()
         bucketManager.dumpBridges()
     else:
-        startup(configuration)
-
-if __name__ == '__main__':
-    run()
+        startup(configuration, options)





More information about the tor-commits mailing list