Skip to content

Commit ad5779b

Browse files
authored
adodbapi: Remove redundant str and repr calls, preferring !r formatting marker (#2276)
1 parent aa59486 commit ad5779b

8 files changed

+77
-89
lines changed

adodbapi/ado_consts.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def ado_direction_name(ado_dir):
4747
try:
4848
return "adParam" + directions[ado_dir]
4949
except:
50-
return "unknown direction (" + str(ado_dir) + ")"
50+
return f"unknown direction ({ado_dir})"
5151

5252

5353
# ObjectStateEnum
@@ -166,7 +166,7 @@ def ado_direction_name(ado_dir):
166166

167167

168168
def ado_type_name(ado_type):
169-
return adTypeNames.get(ado_type, "unknown type (" + str(ado_type) + ")")
169+
return adTypeNames.get(ado_type, f"unknown type ({ado_type})")
170170

171171

172172
# here in decimal, sorted by value

adodbapi/adodbapi.py

+33-37
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def __init__(self): # now define the instance attributes
243243

244244
def connect(self, kwargs, connection_maker=make_COM_connecter):
245245
if verbose > 9:
246-
print("kwargs=", repr(kwargs))
246+
print(f"kwargs={kwargs!r}")
247247
try:
248248
self.connection_string = (
249249
kwargs["connection_string"] % kwargs
@@ -415,8 +415,7 @@ def __setattr__(self, name, value):
415415
if value not in api.accepted_paramstyles:
416416
self._raiseConnectionError(
417417
api.NotSupportedError,
418-
'paramstyle="%s" not in:%s'
419-
% (value, repr(api.accepted_paramstyles)),
418+
f"paramstyle={value!r} not in:{api.accepted_paramstyles!r}",
420419
)
421420
elif name == "variantConversions":
422421
value = copy.copy(
@@ -731,8 +730,7 @@ def _new_command(self, command_type=adc.adCmdText):
731730
except:
732731
self._raiseCursorError(
733732
api.DatabaseError,
734-
'Error creating new ADODB.Command object for "%s"'
735-
% repr(self.commandText),
733+
f"Error creating new ADODB.Command object for {self.commandText!r}",
736734
)
737735

738736
def _execute_command(self):
@@ -856,7 +854,7 @@ def _buildADOparameterList(self, parameters, sproc=False):
856854
"ADO detected Params=",
857855
format_parameters(self.cmd.Parameters, True),
858856
)
859-
print("Program Parameters=", repr(parameters))
857+
print(f"Program Parameters={parameters!r}")
860858
parameters_known = True
861859
except api.Error:
862860
if verbose:
@@ -879,17 +877,14 @@ def _buildADOparameterList(self, parameters, sproc=False):
879877
p, parameters[pm_name], p.Type, parameters_known
880878
)
881879
except Exception as e:
882-
_message = (
883-
"Error Converting Parameter %s: %s, %s <- %s\n"
884-
% (
885-
p.Name,
886-
adc.ado_type_name(p.Type),
887-
p.Value,
888-
repr(parameters[pm_name]),
889-
)
880+
_message = "Error Converting Parameter {}: {}, {} <- {!r}\n".format(
881+
p.Name,
882+
adc.ado_type_name(p.Type),
883+
p.Value,
884+
parameters[pm_name],
890885
)
891886
self._raiseCursorError(
892-
api.DataError, _message + "->" + repr(e.args)
887+
api.DataError, f"{_message}->{e.args!r}"
893888
)
894889
else: # regular sequence of parameters
895890
for value in parameters:
@@ -902,17 +897,14 @@ def _buildADOparameterList(self, parameters, sproc=False):
902897
try:
903898
_configure_parameter(p, value, p.Type, parameters_known)
904899
except Exception as e:
905-
_message = (
906-
"Error Converting Parameter %s: %s, %s <- %s\n"
907-
% (
908-
p.Name,
909-
adc.ado_type_name(p.Type),
910-
p.Value,
911-
repr(value),
912-
)
900+
_message = "Error Converting Parameter {}: {}, {} <- {!r}\n".format(
901+
p.Name,
902+
adc.ado_type_name(p.Type),
903+
p.Value,
904+
value,
913905
)
914906
self._raiseCursorError(
915-
api.DataError, _message + "->" + repr(e.args)
907+
api.DataError, f"{_message}->{e.args!r}"
916908
)
917909
i += 1
918910
else: # -- build own parameter list
@@ -929,14 +921,16 @@ def _buildADOparameterList(self, parameters, sproc=False):
929921
try:
930922
self.cmd.Parameters.Append(p)
931923
except Exception as e:
932-
_message = "Error Building Parameter %s: %s, %s <- %s\n" % (
933-
p.Name,
934-
adc.ado_type_name(p.Type),
935-
p.Value,
936-
repr(elem),
924+
_message = (
925+
"Error Building Parameter {}: {}, {} <- {!r}\n".format(
926+
p.Name,
927+
adc.ado_type_name(p.Type),
928+
p.Value,
929+
elem,
930+
)
937931
)
938932
self._raiseCursorError(
939-
api.DataError, _message + "->" + repr(e.args)
933+
api.DataError, f"{_message}->{e.args!r}"
940934
)
941935
else: # expecting the usual sequence of parameters
942936
if sproc:
@@ -955,14 +949,16 @@ def _buildADOparameterList(self, parameters, sproc=False):
955949
try:
956950
self.cmd.Parameters.Append(p)
957951
except Exception as e:
958-
_message = "Error Building Parameter %s: %s, %s <- %s\n" % (
959-
p.Name,
960-
adc.ado_type_name(p.Type),
961-
p.Value,
962-
repr(elem),
952+
_message = (
953+
"Error Building Parameter {}: {}, {} <- {!r}\n".format(
954+
p.Name,
955+
adc.ado_type_name(p.Type),
956+
p.Value,
957+
elem,
958+
)
963959
)
964960
self._raiseCursorError(
965-
api.DataError, _message + "->" + repr(e.args)
961+
api.DataError, f"{_message}->{e.args!r}"
966962
)
967963
i += 1
968964
if self._ado_prepared == "setup":
@@ -1150,7 +1146,7 @@ def _last_query(self): # let the programmer see what query we actually used
11501146
if self.parameters is None:
11511147
ret = self.commandText
11521148
else:
1153-
ret = "%s,parameters=%s" % (self.commandText, repr(self.parameters))
1149+
ret = f"{self.commandText},parameters={self.parameters!r}"
11541150
except:
11551151
ret = None
11561152
return ret

adodbapi/apibase.py

+7-9
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def COMDate(self, obj):
170170
try:
171171
return self.ComDateFromTuple(obj)
172172
except:
173-
raise ValueError('Cannot convert "%s" to COMdate.' % repr(obj))
173+
raise ValueError(f'Cannot convert "{obj!r}" to COMdate.')
174174

175175
def ComDateFromTuple(self, t, microseconds=0):
176176
d = datetime.date(t[0], t[1], t[2])
@@ -207,7 +207,7 @@ def DateObjectToIsoFormatString(self, obj):
207207
try: # but may be time.struct_time
208208
s = time.strftime("%Y-%m-%d %H:%M:%S", obj)
209209
except:
210-
raise ValueError('Cannot convert "%s" to isoformat' % repr(obj))
210+
raise ValueError(f'Cannot convert "{obj!r}" to isoformat')
211211
return s
212212

213213

@@ -389,7 +389,7 @@ def pyTypeToADOType(d):
389389
return adc.adBigInt
390390
if isinstance(d, numbers.Real):
391391
return adc.adDouble
392-
raise DataError('cannot convert "%s" (type=%s) to ADO' % (repr(d), tp))
392+
raise DataError(f'cannot convert "{d!r}" (type={tp}) to ADO')
393393

394394

395395
# # # # # # # # # # # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -451,7 +451,7 @@ def identity(x):
451451

452452
def cvtUnusual(variant):
453453
if verbose > 1:
454-
sys.stderr.write("Conversion called for Unusual data=%s\n" % repr(variant))
454+
sys.stderr.write(f"Conversion called for Unusual data={variant!r}\n")
455455
return variant # cannot find conversion function -- just give the data to the user
456456

457457

@@ -545,9 +545,7 @@ def __getitem__(self, key): # used for row[key] type of value access
545545
) # extension row[columnName] designation
546546
except (KeyError, TypeError):
547547
er, st, tr = sys.exc_info()
548-
raise er(
549-
'No such key as "%s" in %s' % (repr(key), self.__repr__())
550-
).with_traceback(tr)
548+
raise er(f'No such key as "{key!r}" in {self!r}').with_traceback(tr)
551549

552550
def __iter__(self):
553551
return iter(self.__next__())
@@ -560,7 +558,7 @@ def __repr__(self): # create a human readable representation
560558
taglist = sorted(list(self.rows.columnNames.items()), key=lambda x: x[1])
561559
s = "<SQLrow={"
562560
for name, i in taglist:
563-
s += name + ":" + repr(self._getValue(i)) + ", "
561+
s += f"{name}:{self._getValue(i)!r}, "
564562
return s[:-2] + "}>"
565563

566564
def __str__(self): # create a pretty human readable representation
@@ -609,7 +607,7 @@ def __getitem__(self, item): # used for row or row,column access
609607
try:
610608
j = self.columnNames[j.lower()] # convert named column to numeric
611609
except KeyError:
612-
raise KeyError('adodbapi: no such column name as "%s"' % repr(j))
610+
raise KeyError(f"adodbapi: no such column name as {j!r}")
613611
if self.recordset_format == RS_ARRAY: # retrieve from two-dimensional array
614612
v = self.ado_results[j, i]
615613
elif self.recordset_format == RS_REMOTE:

adodbapi/process_connect_string.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ def macro_call(macro_name, args, kwargs):
6868
tempfile.gettempdir(), "adodbapi_test", args[1]
6969
)
7070

71-
raise ValueError("Unknown connect string macro=%s" % macro_name)
71+
raise ValueError(f"Unknown connect string macro={macro_name}")
7272
except:
73-
raise ValueError("Error in macro processing %s %s" % (macro_name, repr(args)))
73+
raise ValueError(f"Error in macro processing {macro_name} {args!r}")
7474

7575

7676
def process(

adodbapi/test/adodbapitest.py

+28-34
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def helpTestDataType(
352352
ok = False
353353
self.assertTrue(
354354
rs[0] in allowedReturnValues,
355-
'Value "%s" not in %s' % (repr(rs[0]), allowedReturnValues),
355+
f'Value "{rs[0]!r}" not in {allowedReturnValues}',
356356
)
357357
else:
358358
self.assertEqual(
@@ -697,17 +697,15 @@ def testRowIterator(self):
697697
rec[j] == inParam[j]
698698
), 'returned value:"%s" != test value:"%s"' % (rec[j], inParam[j])
699699
# check that we can get a complete tuple from a row
700-
assert tuple(rec) == inParam, 'returned value:"%s" != test value:"%s"' % (
701-
repr(rec),
702-
repr(inParam),
703-
)
700+
assert (
701+
tuple(rec) == inParam
702+
), f'returned value:"{rec!r}" != test value:"{inParam!r}"'
704703
# test that slices of rows work
705704
slice1 = tuple(rec[:-1])
706705
slice2 = tuple(inParam[0:2])
707-
assert slice1 == slice2, 'returned value:"%s" != test value:"%s"' % (
708-
repr(slice1),
709-
repr(slice2),
710-
)
706+
assert (
707+
slice1 == slice2
708+
), f'returned value:"{slice1!r}" != test value:"{slice2!r}"'
711709
# now test named column retrieval
712710
assert rec["fldTwo"] == inParam[0]
713711
assert rec.fldThree == inParam[1]
@@ -1027,10 +1025,9 @@ def testAutoRollback(self):
10271025
row = crsr.fetchone()
10281026
except api.DatabaseError:
10291027
row = None # if the entire table disappeared the rollback was perfect and the test passed
1030-
assert row is None, (
1031-
"cursor.fetchone should return None if a query retrieves no rows. Got %s"
1032-
% repr(row)
1033-
)
1028+
assert (
1029+
row is None
1030+
), f"cursor.fetchone should return None if a query retrieves no rows. Got {row!r}"
10341031
self.helpRollbackTblTemp()
10351032

10361033
def testAutoCommit(self):
@@ -1164,11 +1161,11 @@ def testVariableReturningStoredProcedure(self):
11641161
retvalues = crsr.callproc(
11651162
"sp_DeleteMeOnlyForTesting", ("Dodsworth", "Anne", " ")
11661163
)
1167-
assert retvalues[0] == "Dodsworth", '%s is not "Dodsworth"' % repr(retvalues[0])
1168-
assert retvalues[1] == "Anne", '%s is not "Anne"' % repr(retvalues[1])
1169-
assert retvalues[2] == "DodsworthAnne", '%s is not "DodsworthAnne"' % repr(
1170-
retvalues[2]
1171-
)
1164+
assert retvalues[0] == "Dodsworth", f'{retvalues[0]!r} is not "Dodsworth"'
1165+
assert retvalues[1] == "Anne", f'{retvalues[1]!r} is not "Anne"'
1166+
assert (
1167+
retvalues[2] == "DodsworthAnne"
1168+
), f'{retvalues[2]!r} is not "DodsworthAnne"'
11721169
self.conn.rollback()
11731170

11741171
def testMultipleSetReturn(self):
@@ -1344,19 +1341,16 @@ def testOkConnect(self):
13441341
# /* (SELECT 'a small string' as result; */
13451342
# END $$
13461343
# """
1347-
#
13481344
# crsr.execute(spdef)
1349-
#
13501345
# retvalues = crsr.callproc(
13511346
# "DeleteMeOnlyForTesting", ("Dodsworth", "Anne", " ")
13521347
# )
1353-
# print("return value (mysql)=", repr(crsr.returnValue))
1354-
# assert retvalues[0] == "Dodsworth", '%s is not "Dodsworth"' % repr(retvalues[0])
1355-
# assert retvalues[1] == "Anne", '%s is not "Anne"' % repr(retvalues[1])
1356-
# assert retvalues[2] == "DodsworthAnne", '%s is not "DodsworthAnne"' % repr(
1357-
# retvalues[2]
1358-
# )
1359-
#
1348+
# # print(f"return value (mysql)={crsr.returnValue!r}")
1349+
# assert retvalues[0] == "Dodsworth", f'{retvalues[0]!r} is not "Dodsworth"'
1350+
# assert retvalues[1] == "Anne", f'{retvalues[1]!r} is not "Anne"'
1351+
# assert (
1352+
# retvalues[2] == "DodsworthAnne"
1353+
# ), f'{retvalues[2]!r} is not "DodsworthAnne"'
13601354
# try:
13611355
# crsr.execute("DROP PROCEDURE, DeleteMeOnlyForTesting")
13621356
# self.conn.commit()
@@ -1413,12 +1407,12 @@ def testOkConnect(self):
14131407
# retvalues = crsr.callproc(
14141408
# "DeleteMeOnlyForTesting", ("Dodsworth", "Anne", " ")
14151409
# )
1416-
# # print("return value (pg)=", repr(crsr.returnValue))
1417-
# assert retvalues[0] == "Dodsworth", '%s is not "Dodsworth"' % repr(retvalues[0])
1418-
# assert retvalues[1] == "Anne", '%s is not "Anne"' % repr(retvalues[1])
1419-
# assert retvalues[2] == "Dodsworth Anne", '%s is not "Dodsworth Anne"' % repr(
1420-
# retvalues[2]
1421-
# )
1410+
# # print(f"return value (pg)={crsr.returnValue!r}")
1411+
# assert retvalues[0] == "Dodsworth", f'{retvalues[0]!r} is not "Dodsworth"'
1412+
# assert retvalues[1] == "Anne", f'{retvalues[1]!r} is not "Anne"'
1413+
# assert (
1414+
# retvalues[2] == "DodsworthAnne"
1415+
# ), f'{retvalues[2]!r} is not "DodsworthAnne"'
14221416
# self.conn.rollback()
14231417
# try:
14241418
# crsr.execute("DROP PROCEDURE, DeleteMeOnlyForTesting")
@@ -1490,7 +1484,7 @@ def testDateObjectFromCOMDate(self):
14901484
t2 = time.gmtime(
14911485
time.mktime((2002, 6, 29, 12, 14, 2, 4, 31 + 28 + 31 + 30 + 31 + 28, -1))
14921486
)
1493-
assert t1 < cmd < t2, '"%s" should be about 2002-6-28 12:15:01' % repr(cmd)
1487+
assert t1 < cmd < t2, f'"{cmd}" should be about 2002-6-28 12:15:01'
14941488

14951489
def testDate(self):
14961490
t1 = time.mktime((2002, 6, 28, 18, 15, 1, 4, 31 + 28 + 31 + 30 + 31 + 30, 0))

adodbapi/test/dbapi20.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -465,13 +465,13 @@ def _paraminsert(self, cur):
465465
res[0][1],
466466
trouble,
467467
"cursor.fetchall retrieved incorrect data, or data inserted "
468-
"incorrectly. Got=%s, Expected=%s" % (repr(res[0][1]), repr(trouble)),
468+
f"incorrectly. Got={res[0][1]!r}, Expected={trouble!r}",
469469
)
470470
self.assertEqual(
471471
res[1][1],
472472
trouble,
473473
"cursor.fetchall retrieved incorrect data, or data inserted "
474-
"incorrectly. Got=%s, Expected=%s" % (repr(res[1][1]), repr(trouble)),
474+
f"incorrectly. Got={res[1][1]!r}, Expected={trouble!r}",
475475
)
476476

477477
def test_executemany(self):

adodbapi/test/test_adodbapi_dbapi20.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@
8181
testmdb = setuptestframework.makemdb(testfolder)
8282
connStr = r"Provider=%s;Data Source=%s" % (driver, testmdb)
8383

84-
print("Using Connection String like=%s" % connStr)
85-
print("Keywords=%s" % repr(conn_kws))
84+
print(f"Using Connection String like={connStr}")
85+
print(f"Keywords={conn_kws!r}")
8686

8787

8888
class test_adodbapi(dbapi20.DatabaseAPI20Test):

adodbapi/test/tryconnection.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def try_connection(verbose, *args, **kwargs):
1010
s.close() # thanks, it worked, goodbye
1111
except adodbapi.DatabaseError as inst:
1212
print(inst.args[0]) # should be the error message
13-
print("***Failed getting connection using=", repr(args), repr(kwargs))
13+
print(f"***Failed getting connection using= {args!r} {kwargs!r}")
1414
return False, (args, kwargs), None
1515

1616
print(" (successful)")

0 commit comments

Comments
 (0)