diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-05-20 23:56:29 +0100 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-05-20 23:56:29 +0100 |
commit | e8a831dda2decd26f57bb227948da8af9237fb89 (patch) | |
tree | 1395c3acd39c74989c0a891e57f01862e8cb698d /lib | |
parent | be3b1ba1eb84244e97a9d85ba05ef2ca6b5a213b (diff) | |
parent | a0f7027ad578c6c2707430e9a208cc3f7510cad4 (diff) | |
download | psycopg2-e8a831dda2decd26f57bb227948da8af9237fb89.tar.gz |
Merge branch 'master' into drop-2to3
Diffstat (limited to 'lib')
-rw-r--r-- | lib/extensions.py | 2 | ||||
-rw-r--r-- | lib/extras.py | 15 |
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/extensions.py b/lib/extensions.py index 8644e41..3661e6c 100644 --- a/lib/extensions.py +++ b/lib/extensions.py @@ -63,7 +63,7 @@ from psycopg2._psycopg import ( # noqa string_types, binary_types, new_type, new_array_type, register_type, ISQLQuote, Notify, Diagnostics, Column, QueryCanceledError, TransactionRollbackError, - set_wait_callback, get_wait_callback, ) + set_wait_callback, get_wait_callback, encrypt_password, ) """Isolation level values.""" diff --git a/lib/extras.py b/lib/extras.py index 1b0b2b6..3ef223e 100644 --- a/lib/extras.py +++ b/lib/extras.py @@ -344,7 +344,20 @@ class NamedTupleCursor(_cursor): return def _make_nt(self): - return namedtuple("Record", [d[0] for d in self.description or ()]) + # ascii except alnum and underscore + nochars = ' !"#$%&\'()*+,-./:;<=>?@[\\]^`{|}~' + re_clean = _re.compile('[' + _re.escape(nochars) + ']') + + def f(s): + s = re_clean.sub('_', s) + # Python identifier cannot start with numbers, namedtuple fields + # cannot start with underscore. So... + if s[0] == '_' or '0' <= s[0] <= '9': + s = 'f' + s + + return s + + return namedtuple("Record", [f(d[0]) for d in self.description or ()]) class LoggingConnection(_connection): |