mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-15 05:26:37 +03:00
Merge remote-tracking branch 'fix-211' into maint_2_7
This commit is contained in:
commit
11122159c6
2
NEWS
2
NEWS
|
@ -4,6 +4,8 @@ Current release
|
|||
What's new in psycopg 2.7.5
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Allow non-ascii chars in namedtuple fields (regression introduced fixing
|
||||
:ticket':`#211`).
|
||||
- Fixed building on Solaris 11 and derivatives such as SmartOS and illumos
|
||||
(:ticket:`#677`).
|
||||
- Maybe fixed building on MSYS2 (as reported in :ticket:`#658`).
|
||||
|
|
|
@ -368,12 +368,15 @@ class NamedTupleCursor(_cursor):
|
|||
raise self._exc
|
||||
else:
|
||||
def _make_nt(self, namedtuple=namedtuple):
|
||||
# ascii except alnum and underscore
|
||||
nochars = ' !"#$%&\'()*+,-./:;<=>?@[\\]^`{|}~'
|
||||
re_clean = _re.compile('[' + _re.escape(nochars) + ']')
|
||||
|
||||
def f(s):
|
||||
# NOTE: Python 3 actually allows unicode chars in fields
|
||||
s = _re.sub('[^a-zA-Z0-9_]', '_', s)
|
||||
s = re_clean.sub('_', s)
|
||||
# Python identifier cannot start with numbers, namedtuple fields
|
||||
# cannot start with underscore. So...
|
||||
if _re.match('^[0-9_]', s):
|
||||
if s[0] == '_' or '0' <= s[0] <= '9':
|
||||
s = 'f' + s
|
||||
|
||||
return s
|
||||
|
|
|
@ -56,15 +56,15 @@ fi
|
|||
# Unsupported postgres versions that we still support
|
||||
# Images built by https://github.com/psycopg/psycopg2-wheels/tree/build-dinosaurs
|
||||
if [[ -n "$TEST_PAST" ]]; then
|
||||
run_test 7.4
|
||||
run_test 8.0
|
||||
run_test 8.1
|
||||
run_test 8.2
|
||||
run_test 8.3
|
||||
run_test 8.4
|
||||
run_test 9.0
|
||||
run_test 9.1
|
||||
run_test 9.2
|
||||
run_test 9.1
|
||||
run_test 9.0
|
||||
run_test 8.4
|
||||
run_test 8.3
|
||||
run_test 8.2
|
||||
run_test 8.1
|
||||
run_test 8.0
|
||||
run_test 7.4
|
||||
fi
|
||||
|
||||
# Postgres built from master
|
||||
|
|
|
@ -19,7 +19,7 @@ from datetime import timedelta
|
|||
import psycopg2
|
||||
import psycopg2.extras
|
||||
from testutils import unittest, ConnectingTestCase, skip_before_postgres
|
||||
from testutils import skip_if_no_namedtuple
|
||||
from testutils import skip_before_python, skip_if_no_namedtuple
|
||||
|
||||
|
||||
class ExtrasDictCursorTests(ConnectingTestCase):
|
||||
|
@ -391,6 +391,15 @@ class NamedTupleCursorTest(ConnectingTestCase):
|
|||
self.assertEqual(rv.f_column_, 2)
|
||||
self.assertEqual(rv.f3, 3)
|
||||
|
||||
@skip_before_python(3)
|
||||
@skip_before_postgres(8)
|
||||
@skip_if_no_namedtuple
|
||||
def test_nonascii_name(self):
|
||||
curs = self.conn.cursor()
|
||||
curs.execute('select 1 as \xe5h\xe9')
|
||||
rv = curs.fetchone()
|
||||
self.assertEqual(getattr(rv, '\xe5h\xe9'), 1)
|
||||
|
||||
@skip_if_no_namedtuple
|
||||
def test_minimal_generation(self):
|
||||
# Instrument the class to verify it gets called the minimum number of times.
|
||||
|
|
Loading…
Reference in New Issue
Block a user