summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2018-05-20 23:56:29 +0100
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2018-05-20 23:56:29 +0100
commite8a831dda2decd26f57bb227948da8af9237fb89 (patch)
tree1395c3acd39c74989c0a891e57f01862e8cb698d /lib
parentbe3b1ba1eb84244e97a9d85ba05ef2ca6b5a213b (diff)
parenta0f7027ad578c6c2707430e9a208cc3f7510cad4 (diff)
downloadpsycopg2-e8a831dda2decd26f57bb227948da8af9237fb89.tar.gz
Merge branch 'master' into drop-2to3
Diffstat (limited to 'lib')
-rw-r--r--lib/extensions.py2
-rw-r--r--lib/extras.py15
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):