{ "info": { "author": "A. Karl Kornel", "author_email": "karl@kornel.us", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: No Input/Output (Daemon)", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP" ], "description": ".. |status| image:: https://img.shields.io/pypi/status/syncrepl_client.svg\n :target: https://pypi.python.org/pypi/syncrepl-client\n :alt: Software Status\n\n.. |version| image:: https://img.shields.io/pypi/v/syncrepl_client.svg\n :target: https://pypi.python.org/pypi/syncrepl-client\n :alt: Current Version\n\n.. |python| image:: https://img.shields.io/pypi/pyversions/syncrepl_client.svg\n :target: https://pypi.python.org/pypi/syncrepl-client\n :alt: Supported Python Versions\n\n.. |license| image:: https://img.shields.io/pypi/l/syncrepl_client.svg\n :target: https://github.com/akkornel/syncrepl/blob/master/AUTHORS\n :alt: BSD 3-Clause License\n\n.. |docs| image:: http://readthedocs.org/projects/syncrepl-client/badge/?version=latest\n :target: http://syncrepl-client.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. |coverity| image:: https://img.shields.io/coverity/scan/12870.svg\n :target: https://scan.coverity.com/projects/akkornel-syncrepl\n :alt: Coverity Scan Status\n\n+--------------------+--------------------+-------------------+\n| |status| |version| | |python| |license| | |docs| |coverity| |\n+--------------------+--------------------+-------------------+\n\nWhat is This?\n=============\n\n**syncrepl_client** is a Python module that makes LDAP Syncrepl easy to use.\n\n`LDAP Syncrepl`_ allows you to keep up-to-date with an LDAP server, effectively\nin real time, even without LDAP administrator credentials.\n\n.. _LDAP Syncrepl: https://www.openldap.org/doc/admin24/replication.html#LDAP%20Sync%20Replication\n\nIf your LDAP directory is used as the source of truth (or a delegate for the\nsoource of truth), this keeps you informed when something changes.\nCallbacks\u2014which you write\u2014are triggered by this code when something happens.\nYou can then take appropriate action, such as by inserting into a queue or\nsending a message over a bus.\n\nWhat is Syncrepl?\n=================\n\nSyncrepl (as described in `RFC 4533`_) is a standard which allows an LDAP\nserver to keep clients in sync with itself. The clients keep track of a\n\"cookie\", an opaque string that the server uses to know how far behind the\nclient is. The LDAP server then \"refreshes\" the client by sending details of\nnew & changed entries, as well as information on which entries have been\ndeleted. After the refresh is complete, the client is able to keep a\nlong-running connection open to the server, and receive notice as soon as a\nchange happens on the server.\n\n.. _RFC 4533: https://datatracker.ietf.org/doc/rfc4533/\n\nSyncrepl is what OpenLDAP uses to implement replication, but the client does\nnot have to be an OpenLDAP server. In fact, because Syncrepl is layered on top\nof an ordinary LDAP search, regular LDAP clients\u2014even those with limited\naccess\u2014are able to use Syncrepl to be efficiently notified as soon as the\nresults of their search has changed. This includes notification on:\n\n* New entries that match your search filter.\n\n* Entries being deleted.\n\n* Entries, which used to match, no longer matching. This is essentially the\n same as deletion (at least, it is when you are using a search filter).\n\n* Existing entries having their attributes or DN changed.\n\nThe entries you see, and the changes made to them, are based on the\nintersection of four things.\n\n1. The entries currently in the directory.\n\n2. Your access rights, as determined by your bind DN.\n\n3. Your search filter.\n\n4. Your list of requested attributes.\n\nThanks to the Syncrepl protocol, you don't have to worry about all of the\nabove. The LDAP server handles the work of figuring out what you can see.\n\nRequirements\n============\n\n`syncrepl_client` has four major requirements:\n\n* Python 2.7, or Python 3.3+.\n\n If you use Python 2.7 or 3.3, you will also need\n `enum34`_.\n\n If you plan on doing \"refresh and persist\" operations (which run for a long\n time), your Python should support threads.\n\n* An appropriate Python LDAP library:\n\n * For Python 2.7, `python-ldap`_ 99 or later is needed.\n\n * For Python 3, `pyldap`_ 2.4.37 or later is needed.\n\n Older versions may be supported. Read more in `patches`_.\n\n* The `pyasn1`_ module, at least version 0.2.2, and less than version 0.3.1.\n\n* A fast data store, large enough to store a copy of all the LDAP data\n received, and a corresponding amount of RAM.\n\n* An LDAP server which supports RFC 4533, and which is keeping track of changes.\n\n In the case of OpenLDAP, this means following the instructions in\n `Section 18.3.1`_ of the `Admin Guide`_.\n\nLots more details are available in `the Requirements page`_.\n\n.. _enum34: https://bitbucket.org/stoneleaf/enum34\n.. _python-ldap: https://www.python-ldap.org\n.. _pyldap: https://github.com/pyldap/pyldap\n.. _patches: https://github.com/akkornel/syncrepl/tree/master/patches\n.. _Section 18.3.1: https://www.openldap.org/doc/admin24/replication.html#Syncrepl\n.. _Admin Guide: https://www.openldap.org/doc/admin24/index.html\n.. _the Requirements page: http://syncrepl-client.readthedocs.io/en/latest/requirements.html\n\nHow to Use\n==========\n\nAlthough you'll still need to do a fair bit of coding (mainly in Step 1),\nsyncrepl_client is (intentionally) pretty easy to use! Over the life of your\ncode's execution, you should do these four things:\n\n1. Create a class which implements the methods defined in `BaseCallback`_ This\n is how you are notified of changes from the LDAP server.\n\n2. In your main code, `import syncrepl_client` and instantiate a new\n `Syncrepl`_ object. The instantiation will handle the connection and the\n search setup.\n\n3. Call `poll`_ until it returns `False`. If you're running single-threaded,\n set the `timeout` parameter to some positive, non-zero value. Call\n `please_stop`_ when you want to safely shut down, and then resume calling\n `poll`_ until it returns `False`.\n\n4. Call `unbind`_. You're done!\n\nLots more details are available in `the Requirements page`_, and see `demo.py`_\nfor a simple example.\n\n.. _BaseCallback: http://syncrepl-client.readthedocs.io/en/latest/callbacks.html#syncrepl_client.callbacks.BaseCallback\n.. _Syncrepl: http://syncrepl-client.readthedocs.io/en/latest/client.html#syncrepl_client.Syncrepl\n.. _poll: http://syncrepl-client.readthedocs.io/en/latest/client.html#syncrepl_client.Syncrepl.poll\n.. _please_stop: http://syncrepl-client.readthedocs.io/en/latest/client.html#syncrepl_client.Syncrepl.please_stop\n.. _unbind: http://syncrepl-client.readthedocs.io/en/latest/client.html#syncrepl_client.Syncrepl.unbind\n.. _demo.py: https://github.com/akkornel/syncrepl/blob/master/demo.py\n\nCopyright and License\n=====================\n\nThe contents of this repository are copywrited according to the contents of the \n`AUTHORS`_ file.\n\nThe code is made available under the BSD 3-Clause License.\n\nOther code is made available under the Creative Commons CC0 Public Domain Dedication.\n\nDocumentation is made available under the Creative Commons\nAttribution-ShareAlike 4.0 International Public License (the CC BY-SA License).\nCode contained within documentation is made available under both the BSD\n3-Clause License, and the CC BY-SA License.\n\nTo identify the license for any particular file, refer to the contents of the\nfile.\n\nThe text of the BSD 3-Clause License is reproduced in the file `LICENSE.md`_.\nThe text of the other licenses may be found in the file `LICENSE_others.md`_.\nNote that all three licenses are equally important, but are kept in a separate\nfiles to aid GitHub's irepository license-detection mechanisms.\n\n.. _AUTHORS: https://github.com/akkornel/syncrepl/blob/master/AUTHORS\n.. _LICENSE.md: https://github.com/akkornel/syncrepl/blob/master/LICENSE.md\n.. _LICENSE_others.md: https://github.com/akkornel/syncrepl/blob/master/LICENSE_others.md\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/akkornel/syncrepl", "keywords": "ldap syncrepl", "license": "BSD 3-Clause", "maintainer": "", "maintainer_email": "", "name": "syncrepl-client", "package_url": "https://pypi.org/project/syncrepl-client/", "platform": "", "project_url": "https://pypi.org/project/syncrepl-client/", "project_urls": { "Homepage": "http://github.com/akkornel/syncrepl" }, "release_url": "https://pypi.org/project/syncrepl-client/0.95.1/", "requires_dist": [ "pyasn1 (>=0.2.2,<0.3.1)", "enum34; python_version<'3.4'", "python-ldap (>=99); python_version<='2.7'", "pyldap (>=2.4.37); python_version>='3.1'" ], "requires_python": ">=2.7,!=3.0.*", "summary": "An easier-to-use LDAP syncrepl client", "version": "0.95.1" }, "last_serial": 3102622, "releases": { "0.81": [ { "comment_text": "", "digests": { "md5": "19438a54fc362cc74d1d5fd27b67c7dc", "sha256": "73f95887626e1109676eea134ecb3483891ff69e760a0740a53b06633f767e87" }, "downloads": -1, "filename": "syncrepl_client-0.81-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "19438a54fc362cc74d1d5fd27b67c7dc", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 17390, "upload_time": "2017-06-11T03:36:56", "url": "https://files.pythonhosted.org/packages/92/51/9a7f1adf6f04e81f8ef118866b3674773401f7ac0f6f887f5e5db18d079f/syncrepl_client-0.81-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22c543d736c807cb03247f2d699f0562", "sha256": "211ace34d0f9634340bcb8692c0d02c9338a6bac8eca44771222acb3860a5718" }, "downloads": -1, "filename": "syncrepl-client-0.81.tar.gz", "has_sig": false, "md5_digest": "22c543d736c807cb03247f2d699f0562", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15425, "upload_time": "2017-06-11T03:36:54", "url": "https://files.pythonhosted.org/packages/07/68/07f94246827ae094129d23864f6bbae2c368f1660faa0cebdfd48e604586/syncrepl-client-0.81.tar.gz" } ], "0.90": [ { "comment_text": "", "digests": { "md5": "711a1689be32a036cf365352cf6ec853", "sha256": "1dfb90f6d0b84fffa0c765f4becc1d5b7463f4b6e17c985f4851f19ccdc34023" }, "downloads": -1, "filename": "syncrepl_client-0.90-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "711a1689be32a036cf365352cf6ec853", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 23682, "upload_time": "2017-06-11T05:41:58", "url": "https://files.pythonhosted.org/packages/e9/3b/3082f908959e06ff0878b1f2570706ad53d75d01381d434ea84a55b24d72/syncrepl_client-0.90-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "64cfb44c68f5509bdd914e97b6e6641f", "sha256": "8ffd9f8f7594afcfd3ba82b2049cfebd32af1901878fe9797b8d6d6f9ac56300" }, "downloads": -1, "filename": "syncrepl-client-0.90.tar.gz", "has_sig": false, "md5_digest": "64cfb44c68f5509bdd914e97b6e6641f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24075, "upload_time": "2017-06-11T05:41:56", "url": "https://files.pythonhosted.org/packages/98/ff/fd646747e2d04b1602a14d7da70ebeb74c9cb55deb774b427a050e65b7d5/syncrepl-client-0.90.tar.gz" } ], "0.91": [ { "comment_text": "", "digests": { "md5": "03f09e4b42a49ebafbcf53ebb63cd2d8", "sha256": "7bd899c78435215a7b7b68e666cca8815b888f6734f55e465dac3d05bc2ac752" }, "downloads": -1, "filename": "syncrepl_client-0.91-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "03f09e4b42a49ebafbcf53ebb63cd2d8", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 24472, "upload_time": "2017-06-11T22:36:15", "url": "https://files.pythonhosted.org/packages/16/43/8f41db6ec79ac2f0fb40dca9cb07eb0e9d1136b78c74484d93fc276e61d8/syncrepl_client-0.91-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87f6ffabf4995ed90326371ce2d19959", "sha256": "bb7ec0388a1660adf6f716d1733e6a2fde49ee601cb2e599896be9028946d4c4" }, "downloads": -1, "filename": "syncrepl-client-0.91.tar.gz", "has_sig": false, "md5_digest": "87f6ffabf4995ed90326371ce2d19959", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24700, "upload_time": "2017-06-11T22:36:13", "url": "https://files.pythonhosted.org/packages/25/3c/cc24b27a54c614367c7dbbd423fc8c756967e6c808bc5b40d66b0b6be545/syncrepl-client-0.91.tar.gz" } ], "0.93": [ { "comment_text": "", "digests": { "md5": "5c6c76eea4be632c37b3f0158cff6db8", "sha256": "496c8f75ab6fcb99c8e461bfccc253fc9a9e9f36ad9ef9e7a35c2112fc435fd1" }, "downloads": -1, "filename": "syncrepl_client-0.93-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "5c6c76eea4be632c37b3f0158cff6db8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*", "size": 27465, "upload_time": "2017-06-18T20:03:26", "url": "https://files.pythonhosted.org/packages/78/87/22a4d8e83e11d91e6f2e94ad1cb613cacbf01ff38233d0fe67afebee1eef/syncrepl_client-0.93-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb85cee12c24390cff2553f21895dc3f", "sha256": "6ade1db4adb57305c38d2c1fa7034d493cb9ba718c8c1181632bf5db3c161133" }, "downloads": -1, "filename": "syncrepl-client-0.93.tar.gz", "has_sig": true, "md5_digest": "eb85cee12c24390cff2553f21895dc3f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*", "size": 26413, "upload_time": "2017-06-18T20:03:33", "url": "https://files.pythonhosted.org/packages/83/b0/08f7915fa57c85e015da34514a77f3c27bf7a61d20b1bf87f58a529537f9/syncrepl-client-0.93.tar.gz" } ], "0.94": [ { "comment_text": "", "digests": { "md5": "79be031ca301f55260977201b36807a1", "sha256": "6566ce846d53f0cb6faa04aed542c8313b5013d169f36b300014965fe2577157" }, "downloads": -1, "filename": "syncrepl_client-0.94-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "79be031ca301f55260977201b36807a1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*", "size": 27724, "upload_time": "2017-08-04T22:58:17", "url": "https://files.pythonhosted.org/packages/4a/d9/e66439b38ef89eac7b813e9626f9cc433a37c72eb4e891417d4a05e18435/syncrepl_client-0.94-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d2edf1763110dfafe55855f98b2ccaf", "sha256": "b0dfa13a91b9c05b4d5d677b7a892c46c04ed3ce59dfb98958034b574180f0c8" }, "downloads": -1, "filename": "syncrepl-client-0.94.tar.gz", "has_sig": true, "md5_digest": "5d2edf1763110dfafe55855f98b2ccaf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*", "size": 26559, "upload_time": "2017-08-04T22:58:25", "url": "https://files.pythonhosted.org/packages/02/b1/48b26919d5793a42291fca769ed320b2237ff2bfb69cf5d8891ef80c255c/syncrepl-client-0.94.tar.gz" } ], "0.95": [ { "comment_text": "", "digests": { "md5": "937d57bd43a7cbd86889f0a76255440d", "sha256": "5b82d5de9df127fade7f88ddb3b07513beee04b96eb99f1d0f7c78471e539b83" }, "downloads": -1, "filename": "syncrepl_client-0.95-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "937d57bd43a7cbd86889f0a76255440d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*", "size": 28630, "upload_time": "2017-08-16T07:34:59", "url": "https://files.pythonhosted.org/packages/0f/ff/2331ee0c1d7f95b6db22d9b733f79c5181638dbf4ffdd3ef2311ba22a272/syncrepl_client-0.95-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2cae5a477df881d6961ded936907f139", "sha256": "3ce23d315972760e24b50c2ca61429aafcafebb714028c045748c221ccb32ac5" }, "downloads": -1, "filename": "syncrepl-client-0.95.tar.gz", "has_sig": true, "md5_digest": "2cae5a477df881d6961ded936907f139", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*", "size": 27440, "upload_time": "2017-08-16T07:35:06", "url": "https://files.pythonhosted.org/packages/47/9b/828cbd445f10a78581a1f044858d0c7f5f0bb57d3a2d5c34e62f80f726e7/syncrepl-client-0.95.tar.gz" } ], "0.95.1": [ { "comment_text": "", "digests": { "md5": "cb8cd51a4963538d099fa46fc7eda717", "sha256": "5628b38500f7f09abe454917793159308a8bbc346641e1b147d558454e7f01e1" }, "downloads": -1, "filename": "syncrepl_client-0.95.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "cb8cd51a4963538d099fa46fc7eda717", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*", "size": 29018, "upload_time": "2017-08-17T06:24:00", "url": "https://files.pythonhosted.org/packages/25/1e/f958dd383556ea37d3220c30dce6d3cf87b09d48fea739666acb0cc89673/syncrepl_client-0.95.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ecd23c9b6abc1aedf2448f456571743", "sha256": "9c5f7dfedbefd7f05d218d0b08b4c0139bd02930f9775317d15aa0a38e5574f4" }, "downloads": -1, "filename": "syncrepl-client-0.95.1.tar.gz", "has_sig": true, "md5_digest": "6ecd23c9b6abc1aedf2448f456571743", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*", "size": 27899, "upload_time": "2017-08-17T06:24:05", "url": "https://files.pythonhosted.org/packages/1c/1c/8d5c520e5cda4cff705c4d6e803e3761792a68ef5b048c08c4c0de38efec/syncrepl-client-0.95.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cb8cd51a4963538d099fa46fc7eda717", "sha256": "5628b38500f7f09abe454917793159308a8bbc346641e1b147d558454e7f01e1" }, "downloads": -1, "filename": "syncrepl_client-0.95.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "cb8cd51a4963538d099fa46fc7eda717", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*", "size": 29018, "upload_time": "2017-08-17T06:24:00", "url": "https://files.pythonhosted.org/packages/25/1e/f958dd383556ea37d3220c30dce6d3cf87b09d48fea739666acb0cc89673/syncrepl_client-0.95.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ecd23c9b6abc1aedf2448f456571743", "sha256": "9c5f7dfedbefd7f05d218d0b08b4c0139bd02930f9775317d15aa0a38e5574f4" }, "downloads": -1, "filename": "syncrepl-client-0.95.1.tar.gz", "has_sig": true, "md5_digest": "6ecd23c9b6abc1aedf2448f456571743", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*", "size": 27899, "upload_time": "2017-08-17T06:24:05", "url": "https://files.pythonhosted.org/packages/1c/1c/8d5c520e5cda4cff705c4d6e803e3761792a68ef5b048c08c4c0de38efec/syncrepl-client-0.95.1.tar.gz" } ] }