diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-10-10 22:03:36 +0100 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2018-10-10 22:03:36 +0100 |
commit | cd9d74c4628f790f00b29818e5d514f8789f0528 (patch) | |
tree | c9c4aa52439d5dbbc697795f94289fb917814dc5 | |
parent | f5f6b420b292dd8c6b72d42d52f201ad02508646 (diff) | |
parent | 382eeccab8cd7a13abd71f6ee5dcc3583af2d8ca (diff) | |
download | psycopg2-cd9d74c4628f790f00b29818e5d514f8789f0528.tar.gz |
Merge branch 'conn-get-host'
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | doc/src/connection.rst | 18 | ||||
-rw-r--r-- | psycopg/connection_type.c | 22 | ||||
-rwxr-xr-x | tests/test_connection.py | 15 |
4 files changed, 55 insertions, 1 deletions
@@ -7,6 +7,7 @@ What's new in psycopg 2.8 New features: - Added `~psycopg2.extensions.encrypt_password()` function (:ticket:`#576`). +- Added `connection.host` property (:ticket:`#726`). - `~psycopg2.sql.Identifier` can represent qualified names in SQL composition (:ticket:`#732`). - `!str()` on `~psycopg2.extras.Range` produces a human-readable representation diff --git a/doc/src/connection.rst b/doc/src/connection.rst index 2910f30..f6e3f4a 100644 --- a/doc/src/connection.rst +++ b/doc/src/connection.rst @@ -600,6 +600,24 @@ The ``connection`` class .. index:: + pair: Backend; Host + + .. attribute:: host + + The server host name of the active connection. + + This can be a host name, an IP address, or a directory path if the + connection is via Unix socket. (The path case can be distinguished + because it will always be an absolute path, beginning with ``/``.) + + .. seealso:: libpq docs for `PQhost()`__ for details. + + .. __: http://www.postgresql.org/docs/current/static/libpq-status.html#LIBPQ-PQHOST + + .. versionadded:: 2.8.0 + + + .. index:: pair: Backend; PID .. method:: get_backend_pid() diff --git a/psycopg/connection_type.c b/psycopg/connection_type.c index 6a66d48..da421c0 100644 --- a/psycopg/connection_type.c +++ b/psycopg/connection_type.c @@ -992,6 +992,25 @@ psyco_conn_get_backend_pid(connectionObject *self) return PyInt_FromLong((long)PQbackendPID(self->pgconn)); } +/* get the current host */ + +#define psyco_conn_host_get_doc \ +"host -- Get the host name." + +static PyObject * +psyco_conn_host_get(connectionObject *self) +{ + const char *val = NULL; + + EXC_IF_CONN_CLOSED(self); + + val = PQhost(self->pgconn); + if (!val) { + Py_RETURN_NONE; + } + return conn_text_from_chars(self, val); +} + /* reset the currect connection */ #define psyco_conn_reset_doc \ @@ -1243,6 +1262,9 @@ static struct PyGetSetDef connectionObject_getsets[] = { (getter)psyco_conn_deferrable_get, (setter)psyco_conn_deferrable_set, psyco_conn_deferrable_doc }, + { "host", + (getter)psyco_conn_host_get, NULL, + psyco_conn_host_get_doc }, {NULL} }; #undef EXCEPTION_GETTER diff --git a/tests/test_connection.py b/tests/test_connection.py index 1342f9f..498f351 100755 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -39,7 +39,7 @@ from .testutils import ( skip_after_postgres, skip_before_libpq, skip_after_libpq, ConnectingTestCase, skip_if_tpc_disabled, skip_if_windows, slow) -from .testconfig import dsn, dbname +from .testconfig import dbhost, dsn, dbname class ConnectionTests(ConnectingTestCase): @@ -1682,6 +1682,19 @@ while True: self.assert_(not err, err) +class TestConnectionProps(ConnectingTestCase): + def test_host(self): + self.assertFalse(self.conn.closed) + expected = dbhost if dbhost else "/" + self.assertIn(expected, self.conn.host) + + def test_host_readonly(self): + self.assertFalse(self.conn.closed) + with self.assertRaises(AttributeError): + self.conn.host = 'override' + + + def test_suite(): return unittest.TestLoader().loadTestsFromName(__name__) |