Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/SQLAlchemy-1.3.25.dev0-py3.11-linux-x86_64.egg/sqlalchemy/engine/util.py: 14%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

35 statements  

1# engine/util.py 

2# Copyright (C) 2005-2021 the SQLAlchemy authors and contributors 

3# <see AUTHORS file> 

4# 

5# This module is part of SQLAlchemy and is released under 

6# the MIT License: http://www.opensource.org/licenses/mit-license.php 

7 

8from .. import util 

9 

10 

11def connection_memoize(key): 

12 """Decorator, memoize a function in a connection.info stash. 

13 

14 Only applicable to functions which take no arguments other than a 

15 connection. The memo will be stored in ``connection.info[key]``. 

16 """ 

17 

18 @util.decorator 

19 def decorated(fn, self, connection): 

20 connection = connection.connect() 

21 try: 

22 return connection.info[key] 

23 except KeyError: 

24 connection.info[key] = val = fn(self, connection) 

25 return val 

26 

27 return decorated 

28 

29 

30def py_fallback(): 

31 def _distill_params(multiparams, params): # noqa 

32 r"""Given arguments from the calling form \*multiparams, \**params, 

33 return a list of bind parameter structures, usually a list of 

34 dictionaries. 

35 

36 In the case of 'raw' execution which accepts positional parameters, 

37 it may be a list of tuples or lists. 

38 

39 """ 

40 

41 if not multiparams: 

42 if params: 

43 return [params] 

44 else: 

45 return [] 

46 elif len(multiparams) == 1: 

47 zero = multiparams[0] 

48 if isinstance(zero, (list, tuple)): 

49 if ( 

50 not zero 

51 or hasattr(zero[0], "__iter__") 

52 and not hasattr(zero[0], "strip") 

53 ): 

54 # execute(stmt, [{}, {}, {}, ...]) 

55 # execute(stmt, [(), (), (), ...]) 

56 return zero 

57 else: 

58 # execute(stmt, ("value", "value")) 

59 return [zero] 

60 elif hasattr(zero, "keys"): 

61 # execute(stmt, {"key":"value"}) 

62 return [zero] 

63 else: 

64 # execute(stmt, "value") 

65 return [[zero]] 

66 else: 

67 if hasattr(multiparams[0], "__iter__") and not hasattr( 

68 multiparams[0], "strip" 

69 ): 

70 return multiparams 

71 else: 

72 return [multiparams] 

73 

74 return locals() 

75 

76 

77try: 

78 from sqlalchemy.cutils import _distill_params # noqa 

79except ImportError: 

80 globals().update(py_fallback())