]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix(async-to-sync): fold long strings as multiline
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 8 Aug 2023 22:18:23 +0000 (23:18 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 11 Oct 2023 21:45:38 +0000 (23:45 +0200)
tests/test_connection.py
tests/test_connection_async.py
tests/test_cursor.py
tests/test_cursor_async.py
tools/async_to_sync.py

index 9516281b8934c819d410826010172d16e3acfcc0..73ec2fba847001c9f3d614e8c2187e7fddda8737 100644 (file)
@@ -236,14 +236,14 @@ def test_commit(conn):
 
 @pytest.mark.crdb_skip("deferrable")
 def test_commit_error(conn):
-    sql = [
-        "drop table if exists selfref;",
-        "create table selfref (",
-        "x serial primary key,",
-        "y int references selfref (x) deferrable initially deferred)",
-    ]
-
-    conn.execute("".join(sql))
+    conn.execute(
+        """
+        drop table if exists selfref;
+        create table selfref (
+            x serial primary key,
+            y int references selfref (x) deferrable initially deferred)
+        """
+    )
     conn.commit()
 
     conn.execute("insert into selfref (y) values (-1)")
index 98edb2d21acd6399ee0af4910c20aa1eec3f2522..d336c19de0c4285b5773f41c7abd3ccdf48a0a0c 100644 (file)
@@ -234,14 +234,14 @@ async def test_commit(aconn):
 
 @pytest.mark.crdb_skip("deferrable")
 async def test_commit_error(aconn):
-    sql = [
-        "drop table if exists selfref;",
-        "create table selfref (",
-        "x serial primary key,",
-        "y int references selfref (x) deferrable initially deferred)",
-    ]
-
-    await aconn.execute("".join(sql))
+    await aconn.execute(
+        """
+        drop table if exists selfref;
+        create table selfref (
+            x serial primary key,
+            y int references selfref (x) deferrable initially deferred)
+        """
+    )
     await aconn.commit()
 
     await aconn.execute("insert into selfref (y) values (-1)")
index 622d9d1f965eb7e492909334532186148169656a..5377d0d1e4fa2630dda37a8d876a88f18141c281 100644 (file)
@@ -495,12 +495,13 @@ def test_rownumber_none(conn, query):
 
 def test_rownumber_mixed(conn):
     cur = conn.cursor()
-    queries = [
-        "select x from generate_series(1, 3) x",
-        "set timezone to utc",
-        "select x from generate_series(4, 6) x",
-    ]
-    cur.execute(";\n".join(queries))
+    cur.execute(
+        """
+select x from generate_series(1, 3) x;
+set timezone to utc;
+select x from generate_series(4, 6) x;
+"""
+    )
     assert cur.rownumber == 0
     assert cur.fetchone() == (1,)
     assert cur.rownumber == 1
index c0c49e68a046c114a11e1bfa30dacbe127932513..ad3673f45a44c24d776233ba867f07930c9b8a06 100644 (file)
@@ -500,12 +500,13 @@ async def test_rownumber_none(aconn, query):
 
 async def test_rownumber_mixed(aconn):
     cur = aconn.cursor()
-    queries = [
-        "select x from generate_series(1, 3) x",
-        "set timezone to utc",
-        "select x from generate_series(4, 6) x",
-    ]
-    await cur.execute(";\n".join(queries))
+    await cur.execute(
+        """
+select x from generate_series(1, 3) x;
+set timezone to utc;
+select x from generate_series(4, 6) x;
+"""
+    )
     assert cur.rownumber == 0
     assert await cur.fetchone() == (1,)
     assert cur.rownumber == 1
index e34c7ae4389e4a7e6c5e42768349cca7b3637e52..02bc04539850f87faf6a9eab08a1ef8e874f5612 100755 (executable)
@@ -6,6 +6,7 @@ from __future__ import annotations
 
 import os
 import sys
+from typing import Any
 from argparse import ArgumentParser, Namespace
 
 import ast_comments as ast
@@ -43,7 +44,7 @@ def tree_to_str(tree: ast.AST, filename: str) -> str:
 # from the original file '{os.path.basename(filename)}'
 # DO NOT CHANGE! Change the original file instead.
 """
-    rv += ast.unparse(tree)
+    rv += unparse(tree)
     return rv
 
 
@@ -208,6 +209,27 @@ class BlanksInserter(ast.NodeTransformer):
         return new_body
 
 
+def unparse(tree: ast.AST) -> str:
+    rv: str = Unparser().visit(tree)
+    return rv
+
+
+class Unparser(ast._Unparser):
+    """
+    Try to emit long strings as multiline.
+
+    The normal class only tries to emit docstrings as multiline,
+    but the resulting source doesn't pass flake8.
+    """
+
+    # Beware: private method. Tested with in Python 3.10.
+    def _write_constant(self, value: Any) -> None:
+        if isinstance(value, str) and len(value) > 50:
+            self._write_str_avoiding_backslashes(value)
+        else:
+            super()._write_constant(value)
+
+
 def parse_cmdline() -> Namespace:
     parser = ArgumentParser(description=__doc__)
     parser.add_argument("filename", metavar="FILE", help="the file to process")