From 8717905e35585a0e629b4f639e0b1c2ea2bfb64a Mon Sep 17 00:00:00 2001
From: Zooko O'Whielacronx <zooko@zooko.com>
Date: Wed, 22 Aug 2007 10:29:57 -0700
Subject: [PATCH] refactor reading of configuration files in client.py This
 makes it so that an optional file which is unreadable or is rm'ed at the
 wrong moment will be ignored instead of raising an exception. It also bums
 out a couple of unnecessary lines of code (the explicit ".close()" call).

---
 src/allmydata/client.py | 52 ++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 27 deletions(-)

diff --git a/src/allmydata/client.py b/src/allmydata/client.py
index e15cae28..5976a7b1 100644
--- a/src/allmydata/client.py
+++ b/src/allmydata/client.py
@@ -44,23 +44,20 @@ class Client(node.Node, Referenceable):
         self.add_service(Uploader())
         self.add_service(Downloader())
         self.add_service(VirtualDrive())
-        WEBPORTFILE = os.path.join(self.basedir, self.WEBPORTFILE)
-        if os.path.exists(WEBPORTFILE):
-            f = open(WEBPORTFILE, "r")
-            webport = f.read().strip() # strports string
-            f.close()
+        try:
+            webport = open(os.path.join(self.basedir, self.WEBPORTFILE),
+                           "r").read().strip() # strports string
+        except EnvironmentError:
+            pass # absent or unreadable webport file
+        else:
             ws = WebishServer(webport)
-            local_access_file = os.path.join(self.basedir,
-                                             self.WEB_ALLOW_LOCAL_ACCESS_FILE)
-            if os.path.exists(local_access_file):
-                ws.allow_local_access(True)
+            ws.allow_local_access(os.path.exists(os.path.join(self.basedir,
+                                  self.WEB_ALLOW_LOCAL_ACCESS_FILE)))
             self.add_service(ws)
 
         INTRODUCER_FURL_FILE = os.path.join(self.basedir,
                                             self.INTRODUCER_FURL_FILE)
-        f = open(INTRODUCER_FURL_FILE, "r")
-        self.introducer_furl = f.read().strip()
-        f.close()
+        self.introducer_furl = open(INTRODUCER_FURL_FILE, "r").read().strip()
 
         hotline_file = os.path.join(self.basedir,
                                     self.SUICIDE_PREVENTION_HOTLINE_FILE)
@@ -72,12 +69,13 @@ class Client(node.Node, Referenceable):
     def init_storage(self):
         storedir = os.path.join(self.basedir, self.STOREDIR)
         sizelimit = None
-        SIZELIMIT_FILE = os.path.join(self.basedir,
-                                      self.SIZELIMIT_FILE)
-        if os.path.exists(SIZELIMIT_FILE):
-            f = open(SIZELIMIT_FILE, "r")
-            data = f.read().strip()
-            f.close()
+
+        try:
+            data = open(os.path.join(self.basedir, self.SIZELIMIT_FILE),
+                        "r").read().strip()
+        except EnvironmentError:
+            pass # absent or unreadable sizelimit file
+        else:
             m = re.match(r"^(\d+)([kKmMgG]?[bB]?)$", data)
             if not m:
                 log.msg("SIZELIMIT_FILE contains unparseable value %s" % data)
@@ -114,16 +112,18 @@ class Client(node.Node, Referenceable):
         self.log("tub_ready")
 
         my_old_name = None
-        MYSELF_FURL_PATH = os.path.join(self.basedir, self.MY_FURL_FILE)
-        if os.path.exists(MYSELF_FURL_PATH):
-            my_old_furl = open(MYSELF_FURL_PATH, "r").read().strip()
+        try:
+            my_old_furl = open(os.path.join(self.basedir, self.MY_FURL_FILE),
+                               "r").read().strip()
+        except EnvironmentError:
+            pass # absent or unreadable myfurl file
+        else:
             sturdy = SturdyRef(my_old_furl)
             my_old_name = sturdy.name
 
         self.my_furl = self.tub.registerReference(self, my_old_name)
-        f = open(MYSELF_FURL_PATH, "w")
-        f.write(self.my_furl + "\n")
-        f.close()
+        open(os.path.join(self.basedir, self.MY_FURL_FILE),
+             "w").write(self.my_furl + "\n")
 
         ic = IntroducerClient(self.tub, self.introducer_furl, self.my_furl)
         self.introducer_client = ic
@@ -136,9 +136,7 @@ class Client(node.Node, Referenceable):
         c.setServiceParent(self)
         control_url = self.tub.registerReference(c)
         control_furl_file = os.path.join(self.basedir, "control.furl")
-        f = open(control_furl_file, "w")
-        f.write(control_url + "\n")
-        f.close()
+        open(control_furl_file, "w").write(control_url + "\n")
         os.chmod(control_furl_file, 0600)
 
 
-- 
2.45.2