Colin Watson has proposed merging ~cjwatson/launchpad:print-flush into launchpad:master.
Commit message: Use print(flush=True) where appropriate Requested reviews: Launchpad code reviewers (launchpad-reviewers) For more details, see: https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/431818 This was added in Python 3.3, and lets us make a few things a bit more concise and (IMO) clearer. -- Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad:print-flush into launchpad:master.
diff --git a/database/replication/helpers.py b/database/replication/helpers.py index f1f8349..5ab5b50 100644 --- a/database/replication/helpers.py +++ b/database/replication/helpers.py @@ -227,8 +227,7 @@ def execute_slonik(script, sync=None, exit_on_fail=True, auto_preamble=True): # to slonik via stdin. This way it can be examined if slonik appears # to hang. script_on_disk = NamedTemporaryFile(prefix="slonik", suffix=".sk") - print(script, file=script_on_disk) - script_on_disk.flush() + print(script, file=script_on_disk, flush=True) # Run slonik log.debug("Executing slonik script %s" % script_on_disk.name) diff --git a/lib/lp/app/doc/menus.rst b/lib/lp/app/doc/menus.rst index 916f4ab..10f0bba 100644 --- a/lib/lp/app/doc/menus.rst +++ b/lib/lp/app/doc/menus.rst @@ -1173,8 +1173,7 @@ NavigationMenus used in the previous TALES section. ... </ul> ... </div>""" >>> template_file = tempfile.NamedTemporaryFile(mode="w") - >>> _ = template_file.write(menu_fragment) - >>> template_file.flush() + >>> print(menu_fragment, file=template_file, flush=True) >>> class FacetMenuView(LaunchpadView): ... template = ViewPageTemplateFile(template_file.name) diff --git a/lib/lp/archivepublisher/tests/test_publish_ftpmaster.py b/lib/lp/archivepublisher/tests/test_publish_ftpmaster.py index 9c00c43..a5a1d0f 100644 --- a/lib/lp/archivepublisher/tests/test_publish_ftpmaster.py +++ b/lib/lp/archivepublisher/tests/test_publish_ftpmaster.py @@ -88,8 +88,7 @@ def write_marker_file(path, contents, mode=None): :param mode: If given, explicitly set the file to this permission mode. """ with open(os.path.join(*path), "w") as marker: - marker.write(contents) - marker.flush() + print(contents, end="", file=marker, flush=True) if mode is not None: os.fchmod(marker.fileno(), mode) diff --git a/lib/lp/codehosting/tests/test_rewrite.py b/lib/lp/codehosting/tests/test_rewrite.py index ff82882..0424f32 100644 --- a/lib/lp/codehosting/tests/test_rewrite.py +++ b/lib/lp/codehosting/tests/test_rewrite.py @@ -321,8 +321,7 @@ class TestBranchRewriterScript(TestCaseWithFactory): # For each complete line of input, the script should, without # buffering, write a complete line of output. for input_line in input_lines: - proc.stdin.write(input_line + "\n") - proc.stdin.flush() + print(input_line, file=proc.stdin, flush=True) output_lines.append( nonblocking_readline(proc.stdout, 60).rstrip("\n") ) @@ -339,8 +338,7 @@ class TestBranchRewriterScript(TestCaseWithFactory): "file:///var/tmp/bazaar.launchpad.test/mirrors/%s/.bzr/README" % branch_id_to_path(new_branch.id) ) - proc.stdin.write(new_branch_input + "\n") - proc.stdin.flush() + print(new_branch_input, file=proc.stdin, flush=True) output_lines.append(nonblocking_readline(proc.stdout, 60).rstrip("\n")) edited_branch_input = "/%s/.bzr/README" % edited_branch.unique_name @@ -348,8 +346,7 @@ class TestBranchRewriterScript(TestCaseWithFactory): "file:///var/tmp/bazaar.launchpad.test/mirrors/%s/.bzr/README" % branch_id_to_path(edited_branch.id) ) - proc.stdin.write(edited_branch_input + "\n") - proc.stdin.flush() + print(edited_branch_input, file=proc.stdin, flush=True) output_lines.append(nonblocking_readline(proc.stdout, 60).rstrip("\n")) os.kill(proc.pid, signal.SIGINT) @@ -379,8 +376,7 @@ class TestBranchRewriterScriptHandlesDisconnects(TestCase): self.addCleanup(self.rewriter_proc.terminate) def request(self, query): - self.rewriter_proc.stdin.write(query + "\n") - self.rewriter_proc.stdin.flush() + print(query, file=self.rewriter_proc.stdin, flush=True) # 60 second timeout as we might need to wait for the script to # finish starting up. diff --git a/lib/lp/services/pidfile.py b/lib/lp/services/pidfile.py index 3c9cdd2..6981f90 100644 --- a/lib/lp/services/pidfile.py +++ b/lib/lp/services/pidfile.py @@ -45,8 +45,7 @@ def make_pidfile(service_name): fd, tempname = tempfile.mkstemp(dir=os.path.dirname(pidfile)) outf = os.fdopen(fd, "w") - outf.write(str(os.getpid()) + "\n") - outf.flush() + print(os.getpid(), file=outf, flush=True) outf.close() os.rename(tempname, pidfile) diff --git a/lib/lp/services/profile/mem.py b/lib/lp/services/profile/mem.py index 4bbbb75..128f9b8 100644 --- a/lib/lp/services/profile/mem.py +++ b/lib/lp/services/profile/mem.py @@ -214,8 +214,7 @@ def logInThread(n=30): def _logRefsEverySecond(log, n): while True: printCounts(mostRefs(n=n), file=log) - log.write("\n") - log.flush() + print(file=log, flush=True) time.sleep(1) diff --git a/lib/lp/services/scripts/tests/test_cronscript_enabled.py b/lib/lp/services/scripts/tests/test_cronscript_enabled.py index 9eb5f36..e958e92 100644 --- a/lib/lp/services/scripts/tests/test_cronscript_enabled.py +++ b/lib/lp/services/scripts/tests/test_cronscript_enabled.py @@ -20,9 +20,8 @@ class TestCronscriptEnabled(TestCase): self.log = BufferLogger() def makeConfig(self, body): - tempfile = NamedTemporaryFile(suffix=".ini") - tempfile.write(body.encode("UTF-8")) - tempfile.flush() + tempfile = NamedTemporaryFile(mode="w+", suffix=".ini") + print(body, end="", file=tempfile, flush=True) # Ensure a reference is kept until the test is over. # tempfile will then clean itself up. self.addCleanup(lambda x: None, tempfile) diff --git a/lib/lp/services/tests/test_command_spawner.py b/lib/lp/services/tests/test_command_spawner.py index be79b57..87d2904 100644 --- a/lib/lp/services/tests/test_command_spawner.py +++ b/lib/lp/services/tests/test_command_spawner.py @@ -25,12 +25,6 @@ def make_pipe(): return fdopen(r, "r"), fdopen(w, "w") -def write_and_flush(pipe, text): - """Write `text` into `pipe`, and flush.""" - pipe.write(text) - pipe.flush() - - class FakeProcess: """Fake `subprocess.Popen` result.""" @@ -124,7 +118,7 @@ class TestCommandSpawner(TestCase): spawner, process = self._makeSpawnerAndProcess() stdout_handler = FakeMethod() spawner.start("ls", stdout_handler=stdout_handler) - write_and_flush(process.stdout_sink, "readme.txt\n") + print("readme.txt", file=process.stdout_sink, flush=True) spawner.communicate() self.assertEqual([("readme.txt\n",)], stdout_handler.extract_args()) @@ -132,7 +126,7 @@ class TestCommandSpawner(TestCase): spawner, process = self._makeSpawnerAndProcess() stderr_handler = FakeMethod() spawner.start("ls", stderr_handler=stderr_handler) - write_and_flush(process.stderr_sink, "File not found.\n") + print("File not found.", file=process.stderr_sink, flush=True) spawner.communicate() self.assertEqual( [("File not found.\n",)], stderr_handler.extract_args() @@ -180,7 +174,7 @@ class TestCommandSpawner(TestCase): spawner.start( "hello", stdout_handler=handler, completion_handler=handler ) - write_and_flush(process.stdout_sink, "Hello\n") + print("Hello", file=process.stdout_sink, flush=True) spawner.complete() self.assertEqual([("Hello\n",), (0,)], handler.extract_args()) diff --git a/scripts/branch-rewrite.py b/scripts/branch-rewrite.py index c752744..51753c9 100755 --- a/scripts/branch-rewrite.py +++ b/scripts/branch-rewrite.py @@ -54,8 +54,7 @@ class BranchRewriteScript(LaunchpadScript): transaction.abort() # Mod-rewrite always gives us a newline terminated string. if line: - print(rewriter.rewriteLine(line.strip())) - sys.stdout.flush() + print(rewriter.rewriteLine(line.strip()), flush=True) else: # Standard input has been closed, so die. return @@ -63,8 +62,7 @@ class BranchRewriteScript(LaunchpadScript): sys.exit() except Exception: self.logger.exception("Exception occurred:") - print("NULL") - sys.stdout.flush() + print("NULL", flush=True) # The exception might have been a DisconnectionError or # similar. Cleanup such as database reconnection will # not happen until the transaction is rolled back.
_______________________________________________ Mailing list: https://launchpad.net/~launchpad-reviewers Post to : launchpad-reviewers@lists.launchpad.net Unsubscribe : https://launchpad.net/~launchpad-reviewers More help : https://help.launchpad.net/ListHelp