MCPcopy Create free account
hub / github.com/pgadmin-org/pgadmin4 / ConnectionLocker

Class ConnectionLocker

web/pgadmin/utils/locker.py:22–59  ·  view source on GitHub ↗

Implementing lock while setting/unsetting the Kerberos environ variables.

Source from the content-addressed store, hash-verified

20
21
22class ConnectionLocker:
23 """Implementing lock while setting/unsetting
24 the Kerberos environ variables."""
25 lock = Lock()
26
27 def __init__(self, _is_kerberos_conn=False):
28 self.is_kerberos_conn = _is_kerberos_conn
29
30 def __enter__(self):
31 if config.SERVER_MODE:
32 current_app.logger.info("Waiting for a lock.")
33 self.lock.acquire()
34 current_app.logger.info("Acquired a lock.")
35
36 try:
37 # session access requires a request context. Test code that
38 # calls start() under app_context (no request) would raise
39 # RuntimeError here, leaking the lock since __exit__ is not
40 # called when __enter__ raises.
41 source = session.get('auth_source_manager', {}).get(
42 'current_source')
43 if source == KERBEROS and 'KRB5CCNAME' in session and \
44 self.is_kerberos_conn:
45 environ['KRB5CCNAME'] = session['KRB5CCNAME']
46 else:
47 environ.pop('KRB5CCNAME', None)
48 except RuntimeError:
49 # No request context — nothing Kerberos-related to set up.
50 environ.pop('KRB5CCNAME', None)
51
52 return self
53
54 def __exit__(self, type, value, traceback):
55 if config.SERVER_MODE:
56 environ.pop('KRB5CCNAME', None)
57 if self.lock.locked():
58 current_app.logger.info("Released a lock.")
59 self.lock.release()

Callers 4

connectMethod · 0.90
resetMethod · 0.90
cancel_transactionMethod · 0.90
startMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected