<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[14907] CalendarServer/branches/users/cdaboo/cfod</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/14907">14907</a></dd>
<dt>Author</dt> <dd>cdaboo@apple.com</dd>
<dt>Date</dt> <dd>2015-06-23 09:22:03 -0700 (Tue, 23 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>PyPy fixes: mostly ensuring files are closed, or use &quot;==&quot;/&quot;!=&quot; instead of &quot;is&quot;/&quot;is not&quot;.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarserverpushutilpy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/push/util.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarservertapcaldavpy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/caldav.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarservertapprofilingpy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/profiling.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarservertoolscalverify_diffpy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/calverify_diff.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarservertoolsdkimtoolpy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/dkimtool.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarservertoolsmanagetimezonespy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/managetimezones.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarservertoolsmigrate_verifypy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/migrate_verify.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcalendarservertoolsobliteratepy">CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/obliterate.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcontribodtesttest_livepy">CalendarServer/branches/users/cdaboo/cfod/contrib/od/test/test_live.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcontribperformanceloadtesticalpy">CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/ical.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcontribperformanceloadtestpopulationpy">CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/population.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcontribperformanceloadtestprofilespy">CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/profiles.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcontribperformanceloadtesttest_icalpy">CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/test_ical.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcontribperformancesqlusagerequestshttpTestspy">CalendarServer/branches/users/cdaboo/cfod/contrib/performance/sqlusage/requests/httpTests.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodcontribtoolsharpoonpy">CalendarServer/branches/users/cdaboo/cfod/contrib/tools/harpoon.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavdirectorytesttest_proxyprincipaldbpy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/directory/test/test_proxyprincipaldb.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavlocalizationpy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/localization.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavstdconfigpy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/stdconfig.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_caldavxmlpy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_caldavxml.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_calendarquerypy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_calendarquery.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_configpy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_config.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_xmlutilpy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_xmlutil.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavtimezonespy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezones.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavtimezonestdservicepy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezonestdservice.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtwistedcaldavupgradepy">CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/upgrade.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingimiptesttest_outboundpy">CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingischeduledkimpy">CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/dkim.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingischeduletesttest_dkimpy">CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingischeduletesttest_remoteserverspy">CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_remoteservers.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoretesttest_attachmentspy">CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_attachments.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoretesttest_index_filepy">CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_index_file.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavcarddavdatastoretesttest_index_filepy">CalendarServer/branches/users/cdaboo/cfod/txdav/carddav/datastore/test/test_index_file.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavwhodirectorypy">CalendarServer/branches/users/cdaboo/cfod/txdav/who/directory.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavxmlbasepy">CalendarServer/branches/users/cdaboo/cfod/txdav/xml/base.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavxmlparser_saxpy">CalendarServer/branches/users/cdaboo/cfod/txdav/xml/parser_sax.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxdavxmlrfc2518py">CalendarServer/branches/users/cdaboo/cfod/txdav/xml/rfc2518.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxweb2davfileoppy">CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/fileop.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxweb2davmethodpropfindpy">CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/method/propfind.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxweb2davtesttest_xattrpropspy">CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/test/test_xattrprops.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxweb2davutilpy">CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/util.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxweb2davxattrpropspy">CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/xattrprops.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboocfodtxweb2staticpy">CalendarServer/branches/users/cdaboo/cfod/txweb2/static.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServerbranchesuserscdaboocfodcalendarserverpushutilpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/push/util.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/push/util.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/push/util.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -40,7 +40,8 @@
</span><span class="cx"> 
</span><span class="cx">     @return: C{str} topic, or empty string if value is not found
</span><span class="cx">     &quot;&quot;&quot;
</span><del>-    certData = open(certPath).read()
</del><ins>+    with open(certPath) as f:
+        certData = f.read()
</ins><span class="cx">     x509 = crypto.load_certificate(crypto.FILETYPE_PEM, certData)
</span><span class="cx">     subject = x509.get_subject()
</span><span class="cx">     components = subject.get_components()
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcalendarservertapcaldavpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/caldav.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/caldav.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/caldav.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -759,7 +759,7 @@
</span><span class="cx">             else:
</span><span class="cx">                 logID = &quot;&quot;
</span><span class="cx"> 
</span><del>-            if config.ProcessType is not &quot;Utility&quot;:
</del><ins>+            if config.ProcessType != &quot;Utility&quot;:
</ins><span class="cx">                 execName = &quot;&quot;
</span><span class="cx"> 
</span><span class="cx">             setproctitle(
</span><span class="lines">@@ -1242,7 +1242,7 @@
</span><span class="cx">                         &quot;-p&quot;, str(pool.Port),
</span><span class="cx">                         &quot;-l&quot;, pool.BindAddress,
</span><span class="cx">                     ])
</span><del>-                if config.Memcached.MaxMemory is not 0:
</del><ins>+                if config.Memcached.MaxMemory != 0:
</ins><span class="cx">                     memcachedArgv.extend(
</span><span class="cx">                         [&quot;-m&quot;, str(config.Memcached.MaxMemory)]
</span><span class="cx">                     )
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcalendarservertapprofilingpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/profiling.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/profiling.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/tap/profiling.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -39,12 +39,11 @@
</span><span class="cx">         if self.saveStats:
</span><span class="cx">             p.dump_stats(self.profileOutput)
</span><span class="cx">         else:
</span><del>-            stream = open(self.profileOutput, 'w')
-            s = pstats.Stats(p, stream=stream)
-            s.strip_dirs()
-            s.sort_stats(-1)
-            s.print_stats()
-            stream.close()
</del><ins>+            with open(self.profileOutput, 'w') as stream:
+                s = pstats.Stats(p, stream=stream)
+                s.strip_dirs()
+                s.sort_stats(-1)
+                s.print_stats()
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> AppProfiler.profilers[&quot;cprofile-cpu&quot;] = CProfileCPURunner
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcalendarservertoolscalverify_diffpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/calverify_diff.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/calverify_diff.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/calverify_diff.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -24,7 +24,8 @@
</span><span class="cx"> 
</span><span class="cx"> def analyze(fname):
</span><span class="cx"> 
</span><del>-    lines = open(os.path.expanduser(fname)).read().splitlines()
</del><ins>+    with open(os.path.expanduser(fname)) as f:
+        lines = f.read().splitlines()
</ins><span class="cx">     total = len(lines)
</span><span class="cx">     ctr = 0
</span><span class="cx">     results = {
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcalendarservertoolsdkimtoolpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/dkimtool.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/dkimtool.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/dkimtool.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -40,14 +40,16 @@
</span><span class="cx">     output = key.exportKey()
</span><span class="cx">     lineBreak = False
</span><span class="cx">     if options[&quot;key&quot;]:
</span><del>-        open(options[&quot;key&quot;], &quot;w&quot;).write(output)
</del><ins>+        with open(options[&quot;key&quot;], &quot;w&quot;) as f:
+            f.write(output)
</ins><span class="cx">     else:
</span><span class="cx">         print(output)
</span><span class="cx">         lineBreak = True
</span><span class="cx"> 
</span><span class="cx">     output = key.publickey().exportKey()
</span><span class="cx">     if options[&quot;pub-key&quot;]:
</span><del>-        open(options[&quot;pub-key&quot;], &quot;w&quot;).write(output)
</del><ins>+        with open(options[&quot;pub-key&quot;], &quot;w&quot;) as f:
+            f.write(output)
</ins><span class="cx">     else:
</span><span class="cx">         if lineBreak:
</span><span class="cx">             print
</span><span class="lines">@@ -70,7 +72,8 @@
</span><span class="cx">         log.publisher.levels.setLogLevelForNamespace(&quot;txdav.caldav.datastore.scheduling.ischedule.dkim&quot;, LogLevel.debug)
</span><span class="cx"> 
</span><span class="cx">     # Parse the HTTP file
</span><del>-    request = open(options[&quot;request&quot;]).read()
</del><ins>+    with open(options[&quot;request&quot;]) as f:
+        request = f.read()
</ins><span class="cx">     method, uri, headers, stream = _parseRequest(request)
</span><span class="cx"> 
</span><span class="cx">     # Setup signing headers
</span><span class="lines">@@ -113,7 +116,8 @@
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def _doVerify(options):
</span><span class="cx">     # Parse the HTTP file
</span><del>-    verify = open(os.path.expanduser(options[&quot;verify&quot;])).read()
</del><ins>+    with open(os.path.expanduser(options[&quot;verify&quot;])) as f:
+        verify = f.read()
</ins><span class="cx">     _method, _uri, headers, body = _parseRequest(verify)
</span><span class="cx"> 
</span><span class="cx">     # Check for local public key
</span><span class="lines">@@ -185,7 +189,9 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Do the key lookup using the actual lookup method.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        return RSA.importKey(open(self.pubkeyfile).read())
</del><ins>+        with open(self.pubkeyfile) as f:
+            data = f.read()
+        return RSA.importKey(data)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcalendarservertoolsmanagetimezonespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/managetimezones.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/managetimezones.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/managetimezones.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -85,7 +85,8 @@
</span><span class="cx"> 
</span><span class="cx">     # Get the version from the Makefile
</span><span class="cx">     try:
</span><del>-        makefile = open(os.path.join(zonedir, &quot;Makefile&quot;)).read()
</del><ins>+        with open(os.path.join(zonedir, &quot;Makefile&quot;)) as f:
+            makefile = f.read()
</ins><span class="cx">         lines = makefile.splitlines()
</span><span class="cx">         for line in lines:
</span><span class="cx">             if line.startswith(&quot;VERSION=&quot;):
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcalendarservertoolsmigrate_verifypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/migrate_verify.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/migrate_verify.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/migrate_verify.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -192,6 +192,8 @@
</span><span class="cx">                     invalidGUIDs.add(segments[3])
</span><span class="cx">                 self.badPaths.append(line)
</span><span class="cx"> 
</span><ins>+        datafile.close()
+
</ins><span class="cx">         # Remove any invalid GUIDs that actuall were valid
</span><span class="cx">         invalidGUIDs = [pguid for pguid in invalidGUIDs if pguid not in self.pathsByGUID]
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcalendarservertoolsobliteratepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/obliterate.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/obliterate.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/calendarserver/tools/obliterate.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -271,7 +271,8 @@
</span><span class="cx">                 self.output.write(&quot;%s is not a valid file\n&quot; % (self.options[&quot;data&quot;],))
</span><span class="cx">                 raise ConfigError
</span><span class="cx"> 
</span><del>-            uuids = open(self.options[&quot;data&quot;]).read().split()
</del><ins>+            with open(self.options[&quot;data&quot;]) as f:
+                uuids = f.read().split()
</ins><span class="cx">         else:
</span><span class="cx">             self.output.write(&quot;One of --data or --uuid must be specified\n&quot;)
</span><span class="cx">             raise ConfigError
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcontribodtesttest_livepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/contrib/od/test/test_live.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/contrib/od/test/test_live.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/contrib/od/test/test_live.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -73,10 +73,6 @@
</span><span class="cx">         def setUp(self):
</span><span class="cx">             self.service = DirectoryService()
</span><span class="cx"> 
</span><del>-        def tearDown(self):
-            self.service._deletePool()
-
-
</del><span class="cx">         def verifyResults(self, records, expected, unexpected):
</span><span class="cx">             shortNames = []
</span><span class="cx">             for record in records:
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcontribperformanceloadtesticalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/ical.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/ical.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/ical.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -1329,7 +1329,8 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         # Write JSON data
</span><del>-        json.dump(data, open(os.path.join(path, &quot;index.json&quot;), &quot;w&quot;), indent=2)
</del><ins>+        with open(os.path.join(path, &quot;index.json&quot;), &quot;w&quot;) as f:
+            json.dump(data, f, indent=2)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def deserialize(self):
</span><span class="lines">@@ -1346,7 +1347,8 @@
</span><span class="cx"> 
</span><span class="cx">         # Parse JSON data for calendars
</span><span class="cx">         try:
</span><del>-            data = json.load(open(os.path.join(path, &quot;index.json&quot;)))
</del><ins>+            with open(os.path.join(path, &quot;index.json&quot;)) as f:
+                data = json.load(f)
</ins><span class="cx">         except IOError:
</span><span class="cx">             return
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcontribperformanceloadtestpopulationpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/population.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/population.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/population.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -407,7 +407,8 @@
</span><span class="cx"> 
</span><span class="cx">         # Load parameters from config
</span><span class="cx">         if &quot;thresholdsPath&quot; in params:
</span><del>-            jsondata = json.load(open(params[&quot;thresholdsPath&quot;]))
</del><ins>+            with open(params[&quot;thresholdsPath&quot;]) as f:
+                jsondata = json.load(f)
</ins><span class="cx">         elif &quot;thresholds&quot; in params:
</span><span class="cx">             jsondata = params[&quot;thresholds&quot;]
</span><span class="cx">         else:
</span><span class="lines">@@ -423,7 +424,8 @@
</span><span class="cx">         self._fields.extend(self._fields_extend)
</span><span class="cx"> 
</span><span class="cx">         if &quot;benchmarksPath&quot; in params:
</span><del>-            self.benchmarks = json.load(open(params[&quot;benchmarksPath&quot;]))
</del><ins>+            with open(params[&quot;benchmarksPath&quot;]) as f:
+                self.benchmarks = json.load(f)
</ins><span class="cx">         else:
</span><span class="cx">             self.benchmarks = {}
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcontribperformanceloadtestprofilespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/profiles.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/profiles.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/profiles.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -915,7 +915,8 @@
</span><span class="cx"> 
</span><span class="cx">         # Load parameters from config
</span><span class="cx">         if &quot;thresholdsPath&quot; in params:
</span><del>-            jsondata = json.load(open(params[&quot;thresholdsPath&quot;]))
</del><ins>+            with open(params[&quot;thresholdsPath&quot;]) as f:
+                jsondata = json.load(f)
</ins><span class="cx">         elif &quot;thresholds&quot; in params:
</span><span class="cx">             jsondata = params[&quot;thresholds&quot;]
</span><span class="cx">         else:
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcontribperformanceloadtesttest_icalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/test_ical.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/test_ical.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/contrib/performance/loadtest/test_ical.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -1540,7 +1540,9 @@
</span><span class="cx">         self.assertTrue(os.path.exists(indexPath))
</span><span class="cx">         def _normDict(d):
</span><span class="cx">             return dict([(k, sorted(v, key=lambda x: x[&quot;changeToken&quot; if k == &quot;calendars&quot; else &quot;url&quot;]) if v else None,) for k, v in d.items()])
</span><del>-        self.assertEqual(_normDict(json.loads(open(indexPath).read())), _normDict(json.loads(&quot;&quot;&quot;{
</del><ins>+        with open(indexPath) as f:
+            jdata = f.read()
+        self.assertEqual(_normDict(json.loads(jdata)), _normDict(json.loads(&quot;&quot;&quot;{
</ins><span class="cx">   &quot;calendars&quot;: [
</span><span class="cx">     {
</span><span class="cx">       &quot;changeToken&quot;: &quot;123&quot;,
</span><span class="lines">@@ -1597,11 +1599,15 @@
</span><span class="cx"> 
</span><span class="cx">         event1Path = os.path.join(clientPath, &quot;calendar&quot;, &quot;1.ics&quot;)
</span><span class="cx">         self.assertTrue(os.path.exists(event1Path))
</span><del>-        self.assertEqual(open(event1Path).read(), cal1)
</del><ins>+        with open(event1Path) as f:
+            data = f.read()
+        self.assertEqual(data, cal1)
</ins><span class="cx"> 
</span><span class="cx">         event2Path = os.path.join(clientPath, &quot;inbox&quot;, &quot;i1.ics&quot;)
</span><span class="cx">         self.assertTrue(os.path.exists(event2Path))
</span><del>-        self.assertEqual(open(event2Path).read(), cal2)
</del><ins>+        with open(event2Path) as f:
+            data = f.read()
+        self.assertEqual(data, cal2)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def test_deserialization(self):
</span><span class="lines">@@ -1642,7 +1648,8 @@
</span><span class="cx">         clientPath = os.path.join(self.client.serializePath, &quot;user91-OS_X_10.6&quot;)
</span><span class="cx">         os.mkdir(clientPath)
</span><span class="cx">         indexPath = os.path.join(clientPath, &quot;index.json&quot;)
</span><del>-        open(indexPath, &quot;w&quot;).write(&quot;&quot;&quot;{
</del><ins>+        with open(indexPath, &quot;w&quot;) as f:
+            f.write(&quot;&quot;&quot;{
</ins><span class="cx">   &quot;calendars&quot;: [
</span><span class="cx">     {
</span><span class="cx">       &quot;changeToken&quot;: &quot;321&quot;,
</span><span class="lines">@@ -1699,10 +1706,12 @@
</span><span class="cx"> 
</span><span class="cx">         os.mkdir(os.path.join(clientPath, &quot;calendar&quot;))
</span><span class="cx">         event1Path = os.path.join(clientPath, &quot;calendar&quot;, &quot;2.ics&quot;)
</span><del>-        open(event1Path, &quot;w&quot;).write(cal1)
</del><ins>+        with open(event1Path, &quot;w&quot;) as f:
+            f.write(cal1)
</ins><span class="cx">         os.mkdir(os.path.join(clientPath, &quot;inbox&quot;))
</span><span class="cx">         event1Path = os.path.join(clientPath, &quot;inbox&quot;, &quot;i2.ics&quot;)
</span><del>-        open(event1Path, &quot;w&quot;).write(cal2)
</del><ins>+        with open(event1Path, &quot;w&quot;) as f:
+            f.write(cal2)
</ins><span class="cx"> 
</span><span class="cx">         self.client.deserialize()
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcontribperformancesqlusagerequestshttpTestspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/contrib/performance/sqlusage/requests/httpTests.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/contrib/performance/sqlusage/requests/httpTests.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/contrib/performance/sqlusage/requests/httpTests.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -67,7 +67,8 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Clear the server's SQL log file.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        open(self.logFilePath, &quot;w&quot;).write(&quot;&quot;)
</del><ins>+        with open(self.logFilePath, &quot;w&quot;) as f:
+            f.write(&quot;&quot;)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def doRequest(self):
</span><span class="lines">@@ -91,7 +92,8 @@
</span><span class="cx">             return float(line[pos + 2:])
</span><span class="cx"> 
</span><span class="cx">         # Need to skip over stats that are unlabeled
</span><del>-        data = open(self.logFilePath).read()
</del><ins>+        with open(self.logFilePath) as f:
+            data = f.read()
</ins><span class="cx">         lines = data.splitlines()
</span><span class="cx">         offset = 0
</span><span class="cx">         while True:
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodcontribtoolsharpoonpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/contrib/tools/harpoon.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/contrib/tools/harpoon.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/contrib/tools/harpoon.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -41,12 +41,14 @@
</span><span class="cx"> 
</span><span class="cx">     pidDir = os.path.join(PROCDIR, pidString)
</span><span class="cx">     statsFile = os.path.join(pidDir, &quot;stat&quot;)
</span><del>-    statLine = open(statsFile).read()
</del><ins>+    with open(statsFile) as f:
+        statLine = f.read()
</ins><span class="cx">     stats = statLine.split()
</span><span class="cx">     vsize = int(stats[22])
</span><span class="cx">     cmdFile = os.path.join(pidDir, &quot;cmdline&quot;)
</span><span class="cx">     if os.path.exists(cmdFile):
</span><del>-        cmdLine = open(cmdFile).read().split('\x00')
</del><ins>+        with open(cmdFile) as f:
+            cmdLine = f.read().split('\x00')
</ins><span class="cx">         if cmdLine[0].startswith(PYTHON):
</span><span class="cx">             for arg in cmdLine[1:]:
</span><span class="cx">                 if arg.startswith(CMDARG):
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavdirectorytesttest_proxyprincipaldbpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/directory/test/test_proxyprincipaldb.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/directory/test/test_proxyprincipaldb.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/directory/test/test_proxyprincipaldb.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -89,7 +89,9 @@
</span><span class="cx">         self.assertEqual(membersA, set((&quot;B&quot;, &quot;C&quot;, &quot;D&quot;,)))
</span><span class="cx">         self.assertEqual(membershipsB, set((&quot;A&quot;,)))
</span><span class="cx"> 
</span><ins>+        db.close()
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_normalDBNonAscii(self):
</span><span class="cx"> 
</span><span class="lines">@@ -105,7 +107,9 @@
</span><span class="cx">         self.assertEqual(membersA, set((&quot;B&quot;, &quot;C&quot;, &quot;D&quot;,)))
</span><span class="cx">         self.assertEqual(membershipsB, set((principalID,)))
</span><span class="cx"> 
</span><ins>+        db.close()
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_DBIndexed(self):
</span><span class="cx"> 
</span><span class="lines">@@ -114,7 +118,9 @@
</span><span class="cx">         db = ProxySqliteDB(db_path)
</span><span class="cx">         self.assertEqual(set([row[1] for row in (yield db.query(&quot;PRAGMA index_list(GROUPS)&quot;))]), set((&quot;GROUPNAMES&quot;, &quot;MEMBERS&quot;)))
</span><span class="cx"> 
</span><ins>+        db.close()
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_OldDB(self):
</span><span class="cx"> 
</span><span class="lines">@@ -123,7 +129,9 @@
</span><span class="cx">         db = self.old_ProxyDB(db_path)
</span><span class="cx">         self.assertEqual(set([row[1] for row in (yield db.query(&quot;PRAGMA index_list(GROUPS)&quot;))]), set())
</span><span class="cx"> 
</span><ins>+        db.close()
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_DBUpgrade(self):
</span><span class="cx"> 
</span><span class="lines">@@ -150,7 +158,6 @@
</span><span class="cx">         self.assertEqual(membershipsB, set((&quot;A&quot;,)))
</span><span class="cx">         self.assertEqual(set([row[1] for row in (yield db.query(&quot;PRAGMA index_list(GROUPS)&quot;))]), set((&quot;GROUPNAMES&quot;, &quot;MEMBERS&quot;)))
</span><span class="cx">         db.close()
</span><del>-        db = None
</del><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -253,7 +260,9 @@
</span><span class="cx"> 
</span><span class="cx">             yield db.clean()
</span><span class="cx"> 
</span><ins>+            db.close()
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_cachingDBRemove(self):
</span><span class="cx"> 
</span><span class="lines">@@ -297,7 +306,9 @@
</span><span class="cx"> 
</span><span class="cx">             yield db.clean()
</span><span class="cx"> 
</span><ins>+            db.close()
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_cachingDBRemoveSpecial(self):
</span><span class="cx"> 
</span><span class="lines">@@ -333,7 +344,9 @@
</span><span class="cx"> 
</span><span class="cx">             yield db.clean()
</span><span class="cx"> 
</span><ins>+            db.close()
</ins><span class="cx"> 
</span><ins>+
</ins><span class="cx">     @inlineCallbacks
</span><span class="cx">     def test_cachingDBInsertUncached(self):
</span><span class="cx"> 
</span><span class="lines">@@ -365,8 +378,10 @@
</span><span class="cx"> 
</span><span class="cx">             yield db.clean()
</span><span class="cx"> 
</span><ins>+            db.close()
</ins><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class ProxyPrincipalDBPostgreSQL (twistedcaldav.test.util.TestCase):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     Directory service provisioned principals.
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavlocalizationpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/localization.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/localization.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/localization.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -443,8 +443,10 @@
</span><span class="cx">             # can't create directory to hold .po file
</span><span class="cx">             return
</span><span class="cx"> 
</span><del>-    # Parse the binary plist .strings file:
-    data = CFDataRef.fromString(open(src).read())
</del><ins>+    # Parse the binary plist .strings file
+    with open(src) as f:
+        data = f.read()
+    data = CFDataRef.fromString(data)
</ins><span class="cx">     try:
</span><span class="cx">         parsed = CFPropertyListRef.createFromData(data)
</span><span class="cx">         strings = parsed.toDict()
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavstdconfigpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/stdconfig.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/stdconfig.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/stdconfig.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -1185,7 +1185,8 @@
</span><span class="cx">         parser = NoUnicodePlistParser()
</span><span class="cx">         configDict = None
</span><span class="cx">         try:
</span><del>-            configDict = parser.parse(open(filename))
</del><ins>+            with open(filename) as f:
+                configDict = parser.parse(f)
</ins><span class="cx">         except (IOError, OSError):
</span><span class="cx">             log.error(&quot;Configuration file does not exist or is inaccessible: %s&quot; % (filename,))
</span><span class="cx">             raise ConfigurationError(&quot;Configuration file does not exist or is inaccessible: %s&quot; % (filename,))
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_caldavxmlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_caldavxml.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_caldavxml.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_caldavxml.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> EXDATE:20080602T120000Z
</span><span class="cx"> EXDATE:20080603T120000Z
</span><span class="cx"> ORGANIZER;CN=User 01:mailto:user1@example.com
</span><del>-RRULE:FREQ=DAILY;COUNT=400
</del><ins>+RRULE:FREQ=DAILY
</ins><span class="cx"> SUMMARY:Test
</span><span class="cx"> END:VEVENT
</span><span class="cx"> END:VCALENDAR
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx">         [&quot;exdate&quot;, {}, &quot;date-time&quot;, &quot;2008-06-02T12:00:00Z&quot;],
</span><span class="cx">         [&quot;exdate&quot;, {}, &quot;date-time&quot;, &quot;2008-06-03T12:00:00Z&quot;],
</span><span class="cx">         [&quot;organizer&quot;, {&quot;cn&quot;: &quot;User 01&quot;}, &quot;cal-address&quot;, &quot;mailto:user1@example.com&quot;],
</span><del>-        [&quot;rrule&quot;, {}, &quot;recur&quot;, {&quot;count&quot;: 400, &quot;freq&quot;: &quot;DAILY&quot;}],
</del><ins>+        [&quot;rrule&quot;, {}, &quot;recur&quot;, {&quot;freq&quot;: &quot;DAILY&quot;}],
</ins><span class="cx">         [&quot;summary&quot;, {}, &quot;text&quot;, &quot;Test&quot;]
</span><span class="cx">       ],
</span><span class="cx">       [
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_calendarquerypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_calendarquery.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_calendarquery.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_calendarquery.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -85,7 +85,8 @@
</span><span class="cx">         calendar = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=record.uid)
</span><span class="cx">         for f in os.listdir(self.holidays_dir):
</span><span class="cx">             if f.endswith(&quot;.ics&quot;):
</span><del>-                component = Component.fromString(open(os.path.join(self.holidays_dir, f)).read())
</del><ins>+                with open(os.path.join(self.holidays_dir, f)) as fin:
+                    component = Component.fromString(fin.read())
</ins><span class="cx">                 yield calendar._createCalendarObjectWithNameInternal(f, component, internal_state=ComponentUpdateState.RAW)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_configpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_config.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_config.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_config.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -136,7 +136,8 @@
</span><span class="cx">         TestCase.setUp(self)
</span><span class="cx">         config.setProvider(PListConfigProvider(DEFAULT_CONFIG))
</span><span class="cx">         self.testConfig = self.mktemp()
</span><del>-        open(self.testConfig, &quot;w&quot;).write(testConfig)
</del><ins>+        with open(self.testConfig, &quot;w&quot;) as f:
+            f.write(testConfig)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def tearDown(self):
</span><span class="lines">@@ -551,10 +552,12 @@
</span><span class="cx">         config.setProvider(PListConfigProvider(DEFAULT_CONFIG))
</span><span class="cx"> 
</span><span class="cx">         self.testInclude = self.mktemp()
</span><del>-        open(self.testInclude, &quot;w&quot;).write(testConfigInclude)
</del><ins>+        with open(self.testInclude, &quot;w&quot;) as f:
+            f.write(testConfigInclude)
</ins><span class="cx"> 
</span><span class="cx">         self.testMaster = self.mktemp()
</span><del>-        open(self.testMaster, &quot;w&quot;).write(testConfigMaster % (self.testInclude,))
</del><ins>+        with open(self.testMaster, &quot;w&quot;) as f:
+            f.write(testConfigMaster % (self.testInclude,))
</ins><span class="cx"> 
</span><span class="cx">         config.load(self.testMaster)
</span><span class="cx">         self.assertEquals(config.HTTPPort, 9008)
</span><span class="lines">@@ -616,10 +619,12 @@
</span><span class="cx"> 
</span><span class="cx">         self.testIncludeRoot = self.mktemp()
</span><span class="cx">         self.testInclude = self.testIncludeRoot + &quot;.&quot; + socket.getfqdn()
</span><del>-        open(self.testInclude, &quot;w&quot;).write(testConfigInclude)
</del><ins>+        with open(self.testInclude, &quot;w&quot;) as f:
+            f.write(testConfigInclude)
</ins><span class="cx"> 
</span><span class="cx">         self.testMaster = self.mktemp()
</span><del>-        open(self.testMaster, &quot;w&quot;).write(testConfigMaster % (self.testIncludeRoot,))
</del><ins>+        with open(self.testMaster, &quot;w&quot;) as f:
+            f.write(testConfigMaster % (self.testIncludeRoot,))
</ins><span class="cx"> 
</span><span class="cx">         config.load(self.testMaster)
</span><span class="cx">         self.assertEquals(config.HTTPPort, 9008)
</span><span class="lines">@@ -681,10 +686,12 @@
</span><span class="cx"> 
</span><span class="cx">         self.testIncludeRoot = self.mktemp()
</span><span class="cx">         self.testInclude = self.testIncludeRoot + &quot;.&quot; + socket.gethostbyname(socket.getfqdn())
</span><del>-        open(self.testInclude, &quot;w&quot;).write(testConfigInclude)
</del><ins>+        with open(self.testInclude, &quot;w&quot;) as f:
+            f.write(testConfigInclude)
</ins><span class="cx"> 
</span><span class="cx">         self.testMaster = self.mktemp()
</span><del>-        open(self.testMaster, &quot;w&quot;).write(testConfigMaster % (self.testIncludeRoot,))
</del><ins>+        with open(self.testMaster, &quot;w&quot;) as f:
+            f.write(testConfigMaster % (self.testIncludeRoot,))
</ins><span class="cx"> 
</span><span class="cx">         config.load(self.testMaster)
</span><span class="cx">         self.assertEquals(config.HTTPPort, 9008)
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavtesttest_xmlutilpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_xmlutil.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_xmlutil.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/test/test_xmlutil.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -85,7 +85,8 @@
</span><span class="cx">     def _checkXML(self, node, data):
</span><span class="cx">         xmlfile = self.mktemp()
</span><span class="cx">         writeXML(xmlfile, node)
</span><del>-        newdata = open(xmlfile).read()
</del><ins>+        with open(xmlfile) as f:
+            newdata = f.read()
</ins><span class="cx">         self.assertEqual(newdata, data)
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavtimezonespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezones.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezones.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezones.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -102,7 +102,8 @@
</span><span class="cx">     @staticmethod
</span><span class="cx">     def getTZVersion(dbpath):
</span><span class="cx">         try:
</span><del>-            return open(os.path.join(dbpath, &quot;version.txt&quot;)).read().strip()
</del><ins>+            with open(os.path.join(dbpath, &quot;version.txt&quot;)) as f:
+                return f.read().strip()
</ins><span class="cx">         except IOError:
</span><span class="cx">             return &quot;&quot;
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavtimezonestdservicepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezonestdservice.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezonestdservice.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/timezonestdservice.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -696,7 +696,9 @@
</span><span class="cx">                 # Build TimezoneInfo object
</span><span class="cx">                 tzid = os.path.join(path, item[:-4])
</span><span class="cx">                 try:
</span><del>-                    md5 = hashlib.md5(open(fullPath).read()).hexdigest()
</del><ins>+                    with open(fullPath) as f:
+                        tzdata = f.read()
+                    md5 = hashlib.md5(tzdata).hexdigest()
</ins><span class="cx">                 except IOError:
</span><span class="cx">                     log.error(&quot;Unable to read timezone file: %s&quot; % (fullPath,))
</span><span class="cx">                     continue
</span><span class="lines">@@ -711,7 +713,8 @@
</span><span class="cx"> 
</span><span class="cx">         # Try links (aliases) file
</span><span class="cx">         try:
</span><del>-            aliases = open(os.path.join(self.basepath, &quot;links.txt&quot;)).read()
</del><ins>+            with open(os.path.join(self.basepath, &quot;links.txt&quot;)) as f:
+                aliases = f.read()
</ins><span class="cx">         except IOError, e:
</span><span class="cx">             log.error(&quot;Unable to read links.txt file: %s&quot; % (str(e),))
</span><span class="cx">             aliases = &quot;&quot;
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtwistedcaldavupgradepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/upgrade.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/upgrade.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/twistedcaldav/upgrade.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -342,7 +342,8 @@
</span><span class="cx">     def createMailTokensDatabase(config, uid, gid):
</span><span class="cx">         # Cause the tokens db to be created on disk so we can set the
</span><span class="cx">         # permissions on it now
</span><del>-        MailGatewayTokensDatabase(config.DataRoot).lookupByToken(&quot;&quot;)
</del><ins>+        db = MailGatewayTokensDatabase(config.DataRoot)
+        db.lookupByToken(&quot;&quot;)
</ins><span class="cx"> 
</span><span class="cx">         dbPath = os.path.join(config.DataRoot, MailGatewayTokensDatabase.dbFilename)
</span><span class="cx">         if os.path.exists(dbPath):
</span><span class="lines">@@ -352,6 +353,8 @@
</span><span class="cx">         if os.path.exists(journalPath):
</span><span class="cx">             os.chown(journalPath, uid, gid)
</span><span class="cx"> 
</span><ins>+        db._db_close()
+
</ins><span class="cx">     cuaCache = {}
</span><span class="cx"> 
</span><span class="cx">     docRoot = config.DocumentRoot
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingimiptesttest_outboundpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -585,6 +585,7 @@
</span><span class="cx">             txn, inputOriginator, inputRecipient,
</span><span class="cx">             Component.fromString(inputCalendar.replace(&quot;\n&quot;, &quot;\r\n&quot;)),
</span><span class="cx">             onlyAfter=DateTime(2010, 1, 1, 0, 0, 0))
</span><ins>+        yield txn.commit()
</ins><span class="cx"> 
</span><span class="cx">         # Verify we didn't create a new token...
</span><span class="cx">         txn = self.store.newTransaction()
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingischeduledkimpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/dkim.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/dkim.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/dkim.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -494,7 +494,9 @@
</span><span class="cx">     def generateSignature(self, headers):
</span><span class="cx">         # Sign the hash
</span><span class="cx">         if self.key_file not in self.keys:
</span><del>-            self.keys[self.key_file] = RSA.importKey(open(self.key_file).read())
</del><ins>+            with open(self.key_file) as f:
+                key = f.read()
+            self.keys[self.key_file] = RSA.importKey(key)
</ins><span class="cx">         return DKIMUtils.sign(headers, self.keys[self.key_file], self.hash_func)
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingischeduletesttest_dkimpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_dkim.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -155,7 +155,9 @@
</span><span class="cx"> 
</span><span class="cx">             result = request.generateSignature(sign_this)
</span><span class="cx"> 
</span><del>-            key = RSA.importKey(open(self.private_keyfile).read())
</del><ins>+            with open(self.private_keyfile) as f:
+                key = f.read()
+            key = RSA.importKey(key)
</ins><span class="cx">             signature = DKIMUtils.sign(sign_this, key, DKIMUtils.hash_func(algorithm))
</span><span class="cx"> 
</span><span class="cx">             self.assertEqual(result, signature)
</span><span class="lines">@@ -214,7 +216,9 @@
</span><span class="cx"> ischedule-version:1.0
</span><span class="cx"> ischedule-message-id:%s
</span><span class="cx"> dkim-signature:v=1; d=example.com; s=dkim; t=%s; x=%s; a=%s; q=private-exchange:http/well-known:dns/txt; c=ischedule-relaxed/simple; h=Originator:Recipient:Content-Type:iSchedule-Version:iSchedule-Message-ID; bh=%s; b=&quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;) % (headers.getRawHeaders(&quot;Content-Type&quot;)[0], request.message_id, request.time, request.expire, algorithm, bodyhash)
</span><del>-            key = RSA.importKey(open(self.private_keyfile).read())
</del><ins>+            with open(self.private_keyfile) as f:
+                key = f.read()
+            key = RSA.importKey(key)
</ins><span class="cx">             signature = DKIMUtils.sign(sign_this, key, DKIMUtils.hash_func(algorithm))
</span><span class="cx"> 
</span><span class="cx">             self.assertEqual(result, signature)
</span><span class="lines">@@ -224,7 +228,9 @@
</span><span class="cx">             self.assertEqual(request.headers.getRawHeaders(&quot;DKIM-Signature&quot;)[0], updated_header)
</span><span class="cx"> 
</span><span class="cx">             # Try to verify result using public key
</span><del>-            pubkey = RSA.importKey(open(self.public_keyfile).read())
</del><ins>+            with open(self.public_keyfile) as f:
+                pubkey = f.read()
+            pubkey = RSA.importKey(pubkey)
</ins><span class="cx">             self.assertEqual(DKIMUtils.verify(sign_this, result, pubkey, DKIMUtils.hash_func(algorithm)), None)
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoreschedulingischeduletesttest_remoteserverspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_remoteservers.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_remoteservers.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/scheduling/ischedule/test/test_remoteservers.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -27,7 +27,8 @@
</span><span class="cx">     def test_readXML(self):
</span><span class="cx"> 
</span><span class="cx">         fp = FilePath(self.mktemp())
</span><del>-        fp.open(&quot;w&quot;).write(&quot;&quot;&quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
</del><ins>+        with fp.open(&quot;w&quot;) as f:
+            f.write(&quot;&quot;&quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
</ins><span class="cx"> &lt;!DOCTYPE servers SYSTEM &quot;servertoserver.dtd&quot;&gt;
</span><span class="cx"> &lt;servers&gt;
</span><span class="cx">   &lt;server&gt;
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoretesttest_attachmentspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_attachments.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_attachments.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_attachments.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -1771,12 +1771,14 @@
</span><span class="cx">         txn = self._sqlCalendarStore.newTransaction()
</span><span class="cx">         dattachment2 = (yield DropBoxAttachment.load(txn, &quot;1.2&quot;, &quot;attach_1_2.txt&quot;))
</span><span class="cx">         self.assertEqual(dattachment2, None)
</span><ins>+        yield txn.commit()
</ins><span class="cx"> 
</span><span class="cx">         # Managed attachment present
</span><span class="cx">         txn = self._sqlCalendarStore.newTransaction()
</span><span class="cx">         mattachment2 = (yield ManagedAttachment.load(txn, None, None, attachmentID=dattachment._attachmentID))
</span><span class="cx">         self.assertNotEqual(mattachment2, None)
</span><span class="cx">         self.assertTrue(mattachment2.isManaged())
</span><ins>+        yield txn.commit()
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavcaldavdatastoretesttest_index_filepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_index_file.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_index_file.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/caldav/datastore/test/test_index_file.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -98,6 +98,10 @@
</span><span class="cx">         self.db = Index(MinimalResourceReplacement(self.indexDirPath))
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def tearDown(self):
+        self.db._db_close()
+
+
</ins><span class="cx">     def test_reserve_uid_ok(self):
</span><span class="cx">         uid = &quot;test-test-test&quot;
</span><span class="cx">         d = self.db.isReservedUID(uid)
</span><span class="lines">@@ -296,7 +300,7 @@
</span><span class="cx">             if ok:
</span><span class="cx">                 f = open(os.path.join(self.indexDirPath.path, name), &quot;w&quot;)
</span><span class="cx">                 f.write(calendar_txt)
</span><del>-                del f
</del><ins>+                f.close()
</ins><span class="cx"> 
</span><span class="cx">                 self.db.addResource(name, calendar, reCreate=reCreate)
</span><span class="cx">                 self.assertTrue(self.db.resourceExists(name), msg=description)
</span><span class="lines">@@ -462,7 +466,7 @@
</span><span class="cx"> 
</span><span class="cx">             f = open(os.path.join(self.indexDirPath.path, name), &quot;w&quot;)
</span><span class="cx">             f.write(calendar_txt)
</span><del>-            del f
</del><ins>+            f.close()
</ins><span class="cx"> 
</span><span class="cx">             self.db.addResource(name, calendar)
</span><span class="cx">             self.assertTrue(self.db.resourceExists(name), msg=description)
</span><span class="lines">@@ -648,7 +652,7 @@
</span><span class="cx"> 
</span><span class="cx">             f = open(os.path.join(self.indexDirPath.path, name), &quot;w&quot;)
</span><span class="cx">             f.write(calendar_txt)
</span><del>-            del f
</del><ins>+            f.close()
</ins><span class="cx"> 
</span><span class="cx">             self.db.addResource(name, calendar)
</span><span class="cx">             self.assertTrue(self.db.resourceExists(name), msg=description)
</span><span class="lines">@@ -1055,7 +1059,7 @@
</span><span class="cx"> 
</span><span class="cx">             f = open(os.path.join(self.indexDirPath.path, name), &quot;w&quot;)
</span><span class="cx">             f.write(calendar_txt)
</span><del>-            del f
</del><ins>+            f.close()
</ins><span class="cx"> 
</span><span class="cx">             self.db.addResource(name, calendar)
</span><span class="cx">             self.assertTrue(self.db.resourceExists(name), msg=description)
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavcarddavdatastoretesttest_index_filepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/carddav/datastore/test/test_index_file.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/carddav/datastore/test/test_index_file.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/carddav/datastore/test/test_index_file.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -65,6 +65,10 @@
</span><span class="cx">         self.db = AddressBookIndex(MinimalResourceReplacement(self.indexDirPath))
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+    def tearDown(self):
+        self.db._db_close()
+
+
</ins><span class="cx">     def test_reserve_uid_ok(self):
</span><span class="cx">         uid = &quot;test-test-test&quot;
</span><span class="cx">         d = self.db.isReservedUID(uid)
</span><span class="lines">@@ -141,7 +145,7 @@
</span><span class="cx">             calendar = Component.fromString(vcard_txt)
</span><span class="cx">             f = open(os.path.join(self.site.resource.fp.path, name), &quot;w&quot;)
</span><span class="cx">             f.write(vcard_txt)
</span><del>-            del f
</del><ins>+            f.close()
</ins><span class="cx"> 
</span><span class="cx">             self.db.addResource(name, calendar)
</span><span class="cx">             self.assertTrue(self.db.resourceExists(name), msg=description)
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavwhodirectorypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/who/directory.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/who/directory.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/who/directory.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -713,7 +713,7 @@
</span><span class="cx">         params = params.copy() if params else params
</span><span class="cx">         if &quot;PARTSTAT&quot; not in params:
</span><span class="cx">             params[&quot;PARTSTAT&quot;] = &quot;NEEDS-ACTION&quot;
</span><del>-        if &quot;CN&quot;not in params:
</del><ins>+        if &quot;CN&quot; not in params:
</ins><span class="cx">             if self.displayName:
</span><span class="cx">                 params[&quot;CN&quot;] = self.displayName.encode(&quot;utf-8&quot;)
</span><span class="cx">         if &quot;EMAIL&quot; not in params:
</span><span class="lines">@@ -721,7 +721,7 @@
</span><span class="cx">                 params[&quot;EMAIL&quot;] = list(self.emailAddresses)[0].encode(&quot;utf-8&quot;)
</span><span class="cx">         if &quot;CUTYPE&quot; not in params:
</span><span class="cx">             cuType = self.getCUType()
</span><del>-            if cuType is not &quot;INDIVIDUAL&quot;:
</del><ins>+            if cuType != &quot;INDIVIDUAL&quot;:
</ins><span class="cx">                 params[&quot;CUTYPE&quot;] = cuType
</span><span class="cx"> 
</span><span class="cx">         return Property(&quot;ATTENDEE&quot;, self.canonicalCalendarUserAddress().encode(&quot;utf-8&quot;), params=params)
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavxmlbasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/xml/base.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/xml/base.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/xml/base.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx">     if not name:
</span><span class="cx">         invalid()
</span><span class="cx"> 
</span><del>-    if name[0] is &quot;{&quot;:
</del><ins>+    if name[0] == &quot;{&quot;:
</ins><span class="cx">         index = name.find(&quot;}&quot;)
</span><span class="cx">         if (index is -1 or not len(name) &gt; index):
</span><span class="cx">             invalid()
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavxmlparser_saxpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/xml/parser_sax.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/xml/parser_sax.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/xml/parser_sax.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx"> 
</span><span class="cx">         attributes_dict = {}
</span><span class="cx"> 
</span><del>-        if attributes.getLength() is not 0:
</del><ins>+        if attributes.getLength() != 0:
</ins><span class="cx">             for attr_name in attributes.getQNames():
</span><span class="cx">                 attributes_dict[attr_name.encode(&quot;utf-8&quot;)] = attributes.getValueByQName(attr_name)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxdavxmlrfc2518py"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txdav/xml/rfc2518.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txdav/xml/rfc2518.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txdav/xml/rfc2518.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -313,8 +313,8 @@
</span><span class="cx">                 )
</span><span class="cx">             )
</span><span class="cx"> 
</span><del>-        if status_count is 0:
-            if propstat_count is 0:
</del><ins>+        if status_count == 0:
+            if propstat_count == 0:
</ins><span class="cx">                 raise ValueError(
</span><span class="cx">                     &quot;{0} element must have one of {1} or {2}&quot;.format(
</span><span class="cx">                         cls.sname(), Status.sname(), PropertyStatus.sname()
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxweb2davfileoppy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/fileop.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/fileop.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/fileop.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -468,6 +468,7 @@
</span><span class="cx">         ))
</span><span class="cx"> 
</span><span class="cx">     # Remove stat info from filepath since we modified the backing file
</span><ins>+    resource_file.close()
</ins><span class="cx">     filepath.changed()
</span><span class="cx">     yield success_code
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxweb2davmethodpropfindpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/method/propfind.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/method/propfind.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/method/propfind.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -145,7 +145,7 @@
</span><span class="cx"> 
</span><span class="cx">     for resource, uri in resources:
</span><span class="cx"> 
</span><del>-        if search_properties is &quot;names&quot;:
</del><ins>+        if search_properties == &quot;names&quot;:
</ins><span class="cx">             try:
</span><span class="cx">                 resource_properties = waitForDeferred(resource.listProperties(request))
</span><span class="cx">                 yield resource_properties
</span><span class="lines">@@ -163,7 +163,7 @@
</span><span class="cx">                 responsecode.NOT_FOUND : [],
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            if search_properties is &quot;all&quot;:
</del><ins>+            if search_properties == &quot;all&quot;:
</ins><span class="cx">                 properties_to_enumerate = waitForDeferred(resource.listAllprop(request))
</span><span class="cx">                 yield properties_to_enumerate
</span><span class="cx">                 properties_to_enumerate = properties_to_enumerate.getResult()
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxweb2davtesttest_xattrpropspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/test/test_xattrprops.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/test/test_xattrprops.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/test/test_xattrprops.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -238,7 +238,7 @@
</span><span class="cx">         error = self.assertRaises(HTTPError, self.propertyStore.get, property)
</span><span class="cx">         self.assertEquals(error.response.code, INTERNAL_SERVER_ERROR)
</span><span class="cx">         self.assertEquals(
</span><del>-            len(self.flushLoggedErrors(UnpicklingError)), 1)
</del><ins>+            len(self.flushLoggedErrors(UnpicklingError, IndexError)), 1)
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def test_set(self):
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxweb2davutilpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/util.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/util.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/util.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -168,7 +168,7 @@
</span><span class="cx">     (scheme, host, path, _ignore_query, _ignore_fragment) = urlsplit(normalizeURL(url))
</span><span class="cx"> 
</span><span class="cx">     index = path.rfind(&quot;/&quot;)
</span><del>-    if index is 0:
</del><ins>+    if index == 0:
</ins><span class="cx">         if path == &quot;/&quot;:
</span><span class="cx">             return None
</span><span class="cx">         else:
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxweb2davxattrpropspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/xattrprops.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/xattrprops.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txweb2/dav/xattrprops.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -188,6 +188,12 @@
</span><span class="cx">                 err(None, msg)
</span><span class="cx">                 raise HTTPError(
</span><span class="cx">                     StatusResponse(responsecode.INTERNAL_SERVER_ERROR, msg))
</span><ins>+            except Exception:
+                format = &quot;Invalid property value stored on server: %s %s&quot;
+                msg = format % (encodeXMLName(*qname), data)
+                err(None, msg)
+                raise HTTPError(
+                    StatusResponse(responsecode.INTERNAL_SERVER_ERROR, msg))
</ins><span class="cx">             else:
</span><span class="cx">                 legacy = True
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboocfodtxweb2staticpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/cfod/txweb2/static.py (14906 => 14907)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/cfod/txweb2/static.py        2015-06-23 01:09:10 UTC (rev 14906)
+++ CalendarServer/branches/users/cdaboo/cfod/txweb2/static.py        2015-06-23 16:22:03 UTC (rev 14907)
</span><span class="lines">@@ -551,6 +551,7 @@
</span><span class="cx">             fileobject = os.fdopen(os.open(outname, flags, self.permissions), 'wb', 0)
</span><span class="cx"> 
</span><span class="cx">             stream.readIntoFile(filestream, fileobject)
</span><ins>+            fileobject.close()
</ins><span class="cx"> 
</span><span class="cx">         return outname
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>