A simple connector pool for python-ldap and related LDAP libraries.
Go to file
Nathan Kinder acc14fca3a Allow pool status to be printed as a table
This patch adds a __str__() method to the ConnectionManager class,
which allows for a nice readible table to be obtained that shows
the current state of the connection pool.  This can be very useful
for troubleshooting or monitoring issues related to connection
pooling.  The table will contain a row for each connection within
the pool, with columns showing the connection slot, connectivity
status, activity status, URI, connection lifetime, and bind DN.
The header row will also indicate the pool size and maximum
connection lifetime setting.

Note that this adds a dependency on the prettytable module.  This
new dependency seems worth it for the nice readible table format
it produces.

Change-Id: If0abfef405d05ecd499bdf6201ff465bd845957b
2018-11-02 06:43:16 -07:00
doc Add plumbing to support reno release notes 2018-10-31 14:10:27 -07:00
ldappool Allow pool status to be printed as a table 2018-11-02 06:43:16 -07:00
releasenotes/source Add plumbing to support reno release notes 2018-10-31 14:10:27 -07:00
.gitignore Switch to stestr 2018-07-17 08:17:25 +07:00
.gitreview add .gitreview and fix ldappool gate 2016-05-12 13:50:05 -07:00
.stestr.conf Switch to stestr 2018-07-17 08:17:25 +07:00
.zuul.yaml add python 3.6 unit test job 2018-08-29 16:04:56 -04:00
CHANGES.rst starting 1.1 2012-02-27 23:08:32 +01:00
CONTRIBUTORS preparing 1.0 2012-02-27 23:05:12 +01:00
lower-constraints.txt Allow pool status to be printed as a table 2018-11-02 06:43:16 -07:00
MANIFEST.in preparing 1.0 2012-02-27 23:05:12 +01:00
README.rst Allow pool status to be printed as a table 2018-11-02 06:43:16 -07:00
requirements.txt Allow pool status to be printed as a table 2018-11-02 06:43:16 -07:00
setup.cfg Removed older version of python added 3.5 2018-09-29 16:30:04 +08:00
setup.py Updated from global requirements 2017-03-10 03:31:33 +00:00
test-requirements.txt Bump to hacking 1.1.x 2018-07-17 10:52:49 +02:00
tox.ini Add plumbing to support reno release notes 2018-10-31 14:10:27 -07:00

ldappool

A simple connector pool for python-ldap.

The pool keeps LDAP connectors alive and let you reuse them, drastically reducing the time spent to initiate a ldap connection.

The pool has useful features like:

  • transparent reconnection on failures or server restarts
  • configurable pool size and connectors timeouts
  • configurable max lifetime for connectors
  • a context manager to simplify acquiring and releasing a connector

You need python-ldap in order to use this library

Quickstart

To work with the pool, you just need to create it, then use it as a context manager with the connection method:

from ldappool import ConnectionManager

cm = ConnectionManager('ldap://localhost')

with cm.connection('uid=adminuser,ou=logins,dc=mozilla', 'password') as conn:
    .. do something with conn ..

The connector returned by connection is a LDAPObject, that's binded to the server. See https://pypi.org/project/python-ldap/ for details on how to use a connector.

It is possible to check the state of the pool by representing the pool as a string:

from ldappool import ConnectionManager

cm = ConnectionManager('ldap://localhost', size=2)

.. do something with cm ..

print(cm)

This will result in output similar to this table:

+--------------+-----------+----------+------------------+--------------------+------------------------------+
| Slot (2 max) | Connected |  Active  |       URI        | Lifetime (600 max) |           Bind DN            |
+--------------+-----------+----------+------------------+--------------------+------------------------------+
|      1       | connected | inactive | ldap://localhost |  0.00496101379395  | uid=tuser,dc=example,dc=test |
|      2       | connected | inactive | ldap://localhost |  0.00532603263855  | uid=tuser,dc=example,dc=test |
+--------------+-----------+----------+------------------+--------------------+------------------------------+

ConnectionManager options

Here are the options you can use when instanciating the pool:

  • uri: ldap server uri [mandatory]
  • bind: default bind that will be used to bind a connector. default: None
  • passwd: default password that will be used to bind a connector. default: None
  • size: pool size. default: 10
  • retry_max: number of attempts when a server is down. default: 3
  • retry_delay: delay in seconds before a retry. default: .1
  • use_tls: activate TLS when connecting. default: False
  • timeout: connector timeout. default: -1
  • use_pool: activates the pool. If False, will recreate a connector each time. default: True

The uri option will accept a comma or whitespace separated list of LDAP server URIs to allow for failover behavior when connection errors are encountered. Connections will be attempted against the servers in order, with retry_max attempts per URI before failing over to the next server.

The connection method takes two options:

  • bind: bind used to connect. If None, uses the pool default's. default: None
  • passwd: password used to connect. If None, uses the pool default's. default: None