[tor-commits] [sbws/master] Refactor V3BwFile ...

pastly at torproject.org pastly at torproject.org
Tue Jun 26 15:36:49 UTC 2018


commit 873530454b07d99674f805b8652888b866cb9683
Author: Matt Traudt <sirmatt at ksu.edu>
Date:   Thu Jun 14 18:34:37 2018 -0400

    Refactor V3BwFile ...
    
    It doesn't need to know how to write to a file. It store and organizes
    data.
---
 sbws/core/generate.py | 29 +++++++++++++++++++++++++++++
 sbws/lib/v3bwfile.py  | 31 ++-----------------------------
 2 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/sbws/core/generate.py b/sbws/core/generate.py
index 61f807d..3f0df18 100644
--- a/sbws/core/generate.py
+++ b/sbws/core/generate.py
@@ -4,6 +4,8 @@ from sbws.lib.resultdump import load_recent_results_in_datadir
 from argparse import ArgumentDefaultsHelpFormatter
 import os
 import logging
+from sbws.util.filelock import DirectoryLock
+from sbws.util.timestamp import now_fname
 
 log = logging.getLogger(__name__)
 
@@ -31,6 +33,31 @@ def gen_parser(sub):
                    'out, and we do so proportionally')
 
 
+def _write_v3bw_file(v3bwfile, output):
+    log.info('Writing v3bw file to %s', output)
+    out_dir = os.path.dirname(output)
+    out_link = os.path.join(out_dir, 'latest.v3bw')
+    if os.path.exists(out_link):
+        log.debug('Deleting existing symlink before creating a new one.')
+        os.remove(out_link)
+    # to keep test_generate.py working
+    if output != '/dev/stdout':
+        with DirectoryLock(out_dir):
+            with open(output, 'wt') as fd:
+                fd.write(str(v3bwfile.header))
+                for line in v3bwfile.bw_lines:
+                    fd.write(str(line))
+            output_basename = os.path.basename(output)
+            log.debug('Creating symlink from {} to {}.'
+                      .format(output_basename, out_link))
+            os.symlink(output_basename, out_link)
+    else:
+        with open(output, 'wt') as fd:
+            fd.write(str(v3bwfile.header))
+            for line in v3bwfile.bw_lines:
+                fd.write(str(line))
+
+
 def main(args, conf):
     if not is_initted(args.directory):
         fail_hard('Sbws isn\'t initialized.  Try sbws init')
@@ -51,4 +78,6 @@ def main(args, conf):
                     'ran sbws scanner recently?)')
         return
     bw_file = V3BwFile.from_arg_results(args, conf, results)
+    output = args.output or conf['paths']['v3bw_fname'].format(now_fname())
+    _write_v3bw_file(bw_file, output)
     log.info('Mean bandwidth per line: %f "KiB"', bw_file.avg_bw)
diff --git a/sbws/lib/v3bwfile.py b/sbws/lib/v3bwfile.py
index 9b8e2e8..3cff29d 100644
--- a/sbws/lib/v3bwfile.py
+++ b/sbws/lib/v3bwfile.py
@@ -3,14 +3,13 @@
 (v3bw) used by bandwidth authorities."""
 
 import logging
-import os
 from statistics import median
 
 from sbws import __version__
 from sbws.globals import SPEC_VERSION, BW_LINE_SIZE
 from sbws.lib.resultdump import ResultSuccess, _ResultType
-from sbws.util.filelock import FileLock, DirectoryLock
-from sbws.util.timestamp import now_isodt_str, unixts_to_isodt_str, now_fname
+from sbws.util.filelock import FileLock
+from sbws.util.timestamp import now_isodt_str, unixts_to_isodt_str
 
 log = logging.getLogger(__name__)
 
@@ -396,30 +395,4 @@ class V3BwFile(object):
             bw_lines = scale_lines(bw_lines, args.scale_constant)
         header = V3BwHeader.from_results(conf, results)
         f = cls(header, bw_lines)
-        output = args.output or conf['paths']['v3bw_fname'].format(now_fname())
-        f.write(output)
         return f
-
-    def write(self, output):
-        log.info('Writing v3bw file to %s', output)
-        out_dir = os.path.dirname(output)
-        out_link = os.path.join(out_dir, 'latest.v3bw')
-        if os.path.exists(out_link):
-            log.debug('Deleting existing symlink before creating a new one.')
-            os.remove(out_link)
-        # to keep test_generate.py working
-        if output != '/dev/stdout':
-            with DirectoryLock(out_dir):
-                with open(output, 'wt') as fd:
-                    fd.write(str(self.header))
-                    for line in self.bw_lines:
-                        fd.write(str(line))
-                output_basename = os.path.basename(output)
-                log.debug('Creating symlink from {} to {}.'
-                          .format(output_basename, out_link))
-                os.symlink(output_basename, out_link)
-        else:
-            with open(output, 'wt') as fd:
-                fd.write(str(self.header))
-                for line in self.bw_lines:
-                    fd.write(str(line))





More information about the tor-commits mailing list