{ "info": { "author": "Alexander Kavanaugh", "author_email": "alex@kavdev.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP", "Topic :: Utilities" ], "description": "=============================\nldap-groups\n=============================\nA python/django Active Directory group management abstraction that uses ldap3 as a backend for cross-platform compatibility.\n\nBadges\n------\n\n.. image:: https://img.shields.io/travis/kavdev/ldap-groups/master.svg?style=flat-square\n :target: https://travis-ci.org/kavdev/ldap-groups\n.. image:: https://img.shields.io/codecov/c/github/kavdev/ldap-groups/master.svg?style=flat-square\n :target: http://codecov.io/github/kavdev/ldap-groups?branch=master\n.. image:: https://img.shields.io/requires/github/kavdev/ldap-groups.svg?style=flat-square\n :target: https://requires.io/github/kavdev/ldap-groups/requirements/?branch=master\n.. image:: https://img.shields.io/codacy/f8b8c71b805e4585b8c34ba7c02fbd0c.svg?style=flat-square\n :target: https://www.codacy.com/app/kavdev/ldap-groups/dashboard\n\n.. image:: https://img.shields.io/pypi/v/ldap-groups.svg?style=flat-square\n :target: https://pypi.python.org/pypi/ldap-groups\n.. image:: https://img.shields.io/pypi/dw/ldap-groups.svg?style=flat-square\n :target: https://pypi.python.org/pypi/ldap-groups\n\n.. image:: https://img.shields.io/github/issues/kavdev/ldap-groups.svg?style=flat-square\n :target: https://github.com/kavdev/ldap-groups/issues\n.. image:: https://img.shields.io/github/license/kavdev/ldap-groups.svg?style=flat-square\n :target: https://github.com/kavdev/ldap-groups/blob/master/LICENSE\n\nInstallation\n-----\n\nInstall ldap-groups with pip:\n\n.. code-block:: bash\n\n pip install ldap-groups\n\nAdd ldap-groups to ``INSTALLED_APPS`` (if you're using Django)\n\n.. code:: python\n\n INSTALLED_APPS = (\n ...\n 'ldap_groups',\n ...\n )\n\nDjango Settings\n---------------\n\nThere are a few settings that must be configured before ldap-groups will run.\n\n*Mandatory*\n\n* ``LDAP_GROUPS_SERVER_URI`` - The ldap server's uri, e.g. 'ldap://example.com'\n* ``LDAP_GROUPS_BASE_DN`` - The base search dn, e.g. 'DC=example,DC=com'\n\n*Optional*\n\n* ``LDAP_GROUPS_BIND_DN`` - The bind user's DN\n* ``LDAP_GROUPS_BIND_PASSWORD`` - The bind user's password\n\nNOTE: while a bind user is optional, many servers' security settings will deny anonymous access.\n\n* ``LDAP_GROUPS_USER_LOOKUP_ATTRIBUTE`` - The attribute by which to search when looking up users (should be unique). Defaults to ``'sAMAccountName'``.\n* ``LDAP_GROUPS_USER_SEARCH_BASE_DN`` - The base dn to use when looking up users. Defaults to ``LDAP_GROUPS_BASE_DN``.\n* ``LDAP_GROUPS_GROUP_LOOKUP_ATTRIBUTE`` - The attribute by which to search when looking up groups (should be unique). Defaults to ``'name'``.\n* ``LDAP_GROUPS_GROUP_SEARCH_BASE_DN`` - The base dn to use when looking up groups. Defaults to ``LDAP_GROUPS_BASE_DN``.\n* ``LDAP_GROUPS_ATTRIBUTE_LIST`` - A list of attributes returned for each member while pulling group members. An empty list should return all attributes. Defaults to ``['displayName', 'sAMAccountName', 'distinguishedName']``.\n\nUsage\n-----\n\nIn its current state, ldap-groups can perform the following functions:\n\n\n* Get a specific attribute of a group\n* Get all attributes of a group in dictionary form\n* Get all members of a group and their attributes (users)\n* Add a member to a group (user)\n* Remove a member from a group (user)\n* Add a child to a group (nested group)\n* Remove a child from a group (nested group)\n* Get all descendants of a group (groups and organizational units)\n* Get all children of a group (groups and organizational units)\n* Traverse to a specific child of a group\n* Traverse to a group's parent\n* Traverse to a group's ancestor\n\n\nAn ADGroup instance only requires one argument to function: a group's distinguished name.\nOnce the ADGroup is instantiated, the rest is fairly simple:\n\n.. code:: python\n\n from ldap_groups import ADGroup\n\n GROUP_DN = \"ou=users,dc=example,dc=com\"\n ACCOUNT_NAME = \"jdoe\"\n NAME_ATTRIBUTE = \"name\"\n TYPE_ATTRIBUTE = \"objectClass\"\n\n class ADGroupModifier(object):\n\n def __init__(self):\n self.ad_group_instance = ADGroup(GROUP_DN)\n\n def add_member(self):\n self.ad_group_instance.add_member(ACCOUNT_NAME)\n\n def remove_member(self):\n self.ad_group_instance.remove_member(ACCOUNT_NAME)\n\n def get_group_member_info(self):\n return self.ad_group_instance.get_member_info()\n\n\n class ADGroupInfo(object):\n\n def __init__(self):\n self.ad_group_instance = ADGroup(GROUP_DN)\n\n def get_attributes(self):\n return self.ad_group_instance.get_attributes()\n\n def get_name(self):\n return self.ad_group_instance.get_attribute(NAME_ATTRIBUTE)\n\n def get_type(self):\n return self.ad_group_instance.get_attribute(TYPE_ATTRIBUTE)\n\nDocumentation\n-------------\n\n.. code:: python\n\n\n def get_attribute(attribute_name, no_cache=False):\n \"\"\" Gets the passed attribute of this group.\n\n :param attribute_name: The name of the attribute to get.\n :type attribute_name: str\n :param no_cache (optional): Set to True to pull the attribute directly from an LDAP search instead of from the cache. Default False.\n :type no_cache: boolean\n\n :returns: The attribute requested or None if the attribute is not set.\n\n \"\"\"\n\n def get_attributes(no_cache=False):\n \"\"\" Returns a dictionary of this group's attributes. This method caches the attributes after the first search unless no_cache is specified.\n\n :param no_cache (optional): Set to True to pull attributes directly from an LDAP search instead of from the cache. Default False\n :type no_cache: boolean\n\n \"\"\"\n\n def _get_group_members(page_size=500):\n \"\"\" Searches for a group and retrieve its members.\n\n :param page_size (optional): Many servers have a limit on the number of results that can be returned. Paged searches circumvent that limit. Adjust the page_size to be below the server's size limit. (default: 500)\n :type page_size: int\n\n \"\"\"\n\n def get_member_info(page_size=500):\n \"\"\" Retrieves member information from the AD group object.\n\n :param page_size (optional): Many servers have a limit on the number of results that can be returned. Paged searches circumvent that limit. Adjust the page_size to be below the server's size limit. (default: 500)\n :type page_size: int\n\n :returns: A dictionary of information on members of the AD group based on the LDAP_GROUPS_ATTRIBUTE_LIST setting or attr_list argument.\n\n \"\"\"\n \n def get_tree_members():\n \"\"\" Retrieves all members from this node of the tree down.\"\"\"\n\n def add_member(user_lookup_attribute_value):\n \"\"\" Attempts to add a member to the AD group.\n\n :param user_lookup_attribute_value: The value for the LDAP_GROUPS_USER_LOOKUP_ATTRIBUTE.\n :type user_lookup_attribute_value: str\n\n :raises: **AccountDoesNotExist** if the provided account doesn't exist in the active directory. (inherited from _get_user_dn)\n :raises: **EntryAlreadyExists** if the account already exists in this group. (subclass of ModificationFailed)\n :raises: **InsufficientPermissions** if the bind user does not have permission to modify this group. (subclass of ModificationFailed)\n :raises: **ModificationFailed** if the modification could not be performed for an unforseen reason.\n\n \"\"\"\n\n def remove_member(user_lookup_attribute_value):\n \"\"\" Attempts to remove a member from the AD group.\n\n :param user_lookup_attribute_value: The value for the LDAP_GROUPS_USER_LOOKUP_ATTRIBUTE.\n :type user_lookup_attribute_value: str\n\n :raises: **AccountDoesNotExist** if the provided account doesn't exist in the active directory. (inherited from _get_user_dn)\n :raises: **InsufficientPermissions** if the bind user does not have permission to modify this group. (subclass of ModificationFailed)\n :raises: **ModificationFailed** if the modification could not be performed for an unforseen reason.\n\n \"\"\"\n\n def add_child(group_lookup_attribute_value):\n \"\"\" Attempts to add a child to the AD group.\n\n :param group_lookup_attribute_value: The value for the LDAP_GROUPS_GROUP_LOOKUP_ATTRIBUTE.\n :type group_lookup_attribute_value: str\n\n :raises: **GroupDoesNotExist** if the provided group doesn't exist in the active directory. (inherited from _get_group_dn)\n :raises: **EntryAlreadyExists** if the child already exists in this group. (subclass of ModificationFailed)\n :raises: **InsufficientPermissions** if the bind user does not have permission to modify this group. (subclass of ModificationFailed)\n :raises: **ModificationFailed** if the modification could not be performed for an unforseen reason.\n\n \"\"\"\n\n def remove_child(group_lookup_attribute_value):\n \"\"\" Attempts to remove a child from the AD group.\n\n :param group_lookup_attribute_value: The value for the LDAP_GROUPS_GROUP_LOOKUP_ATTRIBUTE.\n :type group_lookup_attribute_value: str\n\n :raises: **GroupDoesNotExist** if the provided group doesn't exist in the active directory. (inherited from _get_group_dn)\n :raises: **EntryAlreadyExists** if the child already exists in this group. (subclass of ModificationFailed)\n :raises: **InsufficientPermissions** if the bind user does not have permission to modify this group. (subclass of ModificationFailed)\n :raises: **ModificationFailed** if the modification could not be performed for an unforseen reason.\n\n \"\"\"\n\n def get_descendants(page_size=500):\n \"\"\" Returns a list of all descendants of this group.\n\n :param page_size (optional): Many servers have a limit on the number of results that can be returned. Paged searches circumvent that limit. Adjust the page_size to be below the server's size limit. (default: 500)\n :type page_size: int\n\n \"\"\"\n\n def get_children(page_size=500):\n \"\"\" Returns a list of this group's children.\n\n :param page_size (optional): Many servers have a limit on the number of results that can be returned. Paged searches circumvent that limit. Adjust the page_size to be below the server's size limit. (default: 500)\n :type page_size: int\n\n \"\"\"\n\n def child(group_name, page_size=500):\n \"\"\" Returns the child ad group that matches the provided group_name or none if the child does not exist.\n\n :param group_name: The name of the child group. NOTE: A name does not contain 'CN=' or 'OU='\n :type group_name: str\n :param page_size (optional): Many servers have a limit on the number of results that can be returned. Paged searches circumvent that limit. Adjust the page_size to be below the server's size limit. (default: 500)\n :type page_size: int\n\n \"\"\"\n\n def parent():\n \"\"\" Returns this group's parent (up to the DC)\"\"\"\n\n def ancestor(generation):\n \"\"\" Returns an ancestor of this group given a generation (up to the DC).\n\n :param generation: Determines how far up the path to go. Example: 0 = self, 1 = parent, 2 = grandparent ...\n :type generation: int\n\n \"\"\"\n\nRunning ldap-groups without Django\n----------------------------------\n\nIf ldap-groups is not used in a django project, the ADGroup object can be initialized with the following parameters:\n\n.. code:: python\n\n ADGroup(group_dn, server_uri, base_dn[, user_lookup_attr[, group_lookup_attr[, attr_list[, bind_dn, bind_password[, user_search_base_dn[, group_search_base_dn]]]]]])\n\n\n* ``group_dn`` - The distinguished name of the group to manage.\n* ``server_uri`` - The ldap server's uri, e.g. 'ldap://example.com'\n* ``base_dn`` - The base search dn, e.g. 'DC=example,DC=com'\n* ``user_lookup_attr`` - The attribute by which to search when looking up users (should be unique). Defaults to ``'sAMAccountName'``.\n* ``group_lookup_attr`` - The attribute by which to search when looking up groups (should be unique). Defaults to ``'name'``.\n* ``attr_list`` - A list of attributes returned for each member while pulling group members. An empty list should return all attributes. Defaults to ``['displayName', 'sAMAccountName', 'distinguishedName']``.\n* ``bind_dn`` - The bind user's DN\n* ``bind_password`` - The bind user's password\n* ``user_search_base_dn`` - The base dn to use when looking up users. Defaults to ``LDAP_GROUPS_BASE_DN``.\n* ``group_search_base_dn`` - The base dn to use when looking up groups. Defaults to ``LDAP_GROUPS_BASE_DN``.\n\nRunning the Tests\n------------------\n\n.. code-block:: bash\n\n pip install -r requirements/test.txt\n ./runtests.py\n\n\n\n\n\nChanges\n=======\n\n4.2.2 (2016-09-14)\n------------------\n\n* pep8 and project structure changes\n* added support for using ADGroup as a context_manager #2\n\n\n4.2.1 (2015-12-23)\n------------------\n\n* A KeyError is no longer thrown when a member attribute can't be retrieved. None is returned instead. (Thanks @willson556)\n\n4.2.0 (2015-09-01)\n------------------\n\n* added get_tree_members method\n\n4.1.1 (2015-08-28)\n------------------\n\n* updated dependency, escape_query bugfixes\n\n4.1.0 (2015-03-25)\n------------------\n\n* all filter queries are now properly escaped in accordance with the LDAP spec (except the NUL character)\n\n4.0.0 (2014-11-10)\n------------------\n\n* added abilily to configure search bases, search for user/group by now specified attribute\n* added child add/remove methods, refactored method/class signatures, added attribute caching, all lookups are now paged\n\n3.0.4 (2014-10-20)\n------------------\n\n* bugfix, refactoring\n\n3.0.3 (2014-10-13)\n------------------\n\n* bugfix\n\n3.0.2 (2014-10-08)\n------------------\n\n* bugfix\n\n3.0.1 (2014-10-08)\n------------------\n\n* bugfix\n\n3.0.0 (2014-10-03)\n------------------\n\n* Switched to python3-ldap\n\n2.5.3 (2014-09-15)\n------------------\n\n* Fixed child search, added custom search function\n\n2.5.2 (2014-09-04)\n------------------\n\n* Fixed Issue #2, fixed readme examples\n\n2.5.1 (2014-08-31)\n------------------\n\n* Fixed python-ldap dependency restriction (now >=)\n\n2.5.0 (2014-08-30)\n------------------\n\n* Added group attribute and tree traversal methods\n\n2.0.0 (2014-08-30)\n------------------\n\n* Removed django dependency\n\n1.0.1 (2013-09-05)\n------------------\n\n* Bugfix - Nonexistent user can also throw a TypeError\n\n1.0.0 (2013-08-26)\n------------------\n\n* Initial release", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kavdev/ldap-groups/", "keywords": "ldap active directory ldap-groups groups adgroups python django ad", "license": "License :: OSI Approved :: MIT License", "maintainer": "", "maintainer_email": "", "name": "ldap-groups", "package_url": "https://pypi.org/project/ldap-groups/", "platform": "", "project_url": "https://pypi.org/project/ldap-groups/", "project_urls": { "Homepage": "https://github.com/kavdev/ldap-groups/" }, "release_url": "https://pypi.org/project/ldap-groups/4.2.2/", "requires_dist": null, "requires_python": "", "summary": "A python/django Active Directory group management abstraction that uses ldap3 as a backend for cross-platform compatibility.", "version": "4.2.2" }, "last_serial": 4691714, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "ad882c646e852358cac1abf894f36c99", "sha256": "b939c877d313e1b3005223bc2162ca1f20977ca52b59682b540b7a8191ebbca9" }, "downloads": -1, "filename": "ldap-groups-1.0.0.tar.gz", "has_sig": false, "md5_digest": "ad882c646e852358cac1abf894f36c99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18302, "upload_time": "2013-08-27T00:31:00", "url": "https://files.pythonhosted.org/packages/5f/60/3dcd69f2658f7492e9ad120751e57ed70a87bb62acc9c85722bbdb860c16/ldap-groups-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a646119cb484799b5dd83391943e83a6", "sha256": "fd75e10b1d53ee2af3e8c8dbe125843df033564c46f8d3def51b575da31ad978" }, "downloads": -1, "filename": "ldap-groups-1.0.1.tar.gz", "has_sig": false, "md5_digest": "a646119cb484799b5dd83391943e83a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18379, "upload_time": "2013-09-05T19:53:32", "url": "https://files.pythonhosted.org/packages/71/a1/f6beb40a93c45a6b39773cec27670f0204c248aabdd96f4d6c21a3d75da9/ldap-groups-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "f3cfa0fa67cb61194375017f2b96a135", "sha256": "fd75a18b16a0253189d0ca82fc33417142d206bdf4c3dffd8e1738f69e2d9c84" }, "downloads": -1, "filename": "ldap-groups-2.0.0.tar.gz", "has_sig": false, "md5_digest": "f3cfa0fa67cb61194375017f2b96a135", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19296, "upload_time": "2014-08-30T18:24:44", "url": "https://files.pythonhosted.org/packages/e5/ad/ebcac03f0d9993c602854bd1ca97ffe3b09b1a88f6bd501b95e3674c1cc4/ldap-groups-2.0.0.tar.gz" } ], "2.5.0": [ { "comment_text": "", "digests": { "md5": "4993f3ef8bd93167feb45567c435bd21", "sha256": "1863457fd5845fd2d4625d9d5ed4364691c33bfe408cdc8ab3f70a95c9e5d5f0" }, "downloads": -1, "filename": "ldap-groups-2.5.0.tar.gz", "has_sig": false, "md5_digest": "4993f3ef8bd93167feb45567c435bd21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21450, "upload_time": "2014-08-31T03:52:43", "url": "https://files.pythonhosted.org/packages/20/78/5b7c944dafbaab12bda5a6aaf93d926aa80a656a069db0854186961a72e7/ldap-groups-2.5.0.tar.gz" } ], "2.5.1": [ { "comment_text": "", "digests": { "md5": "f0abbab6f2fbf6b1b8bf820f92e7300e", "sha256": "3876d8e2960a8655411639468ddb019ae375987a63590e08f78781920dbc5ba3" }, "downloads": -1, "filename": "ldap-groups-2.5.1.tar.gz", "has_sig": false, "md5_digest": "f0abbab6f2fbf6b1b8bf820f92e7300e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21470, "upload_time": "2014-08-31T23:49:51", "url": "https://files.pythonhosted.org/packages/89/73/54f136e9e40f0b7ca569e2ee58921d554ca4fc33d1d4d37846d8eeac52c8/ldap-groups-2.5.1.tar.gz" } ], "2.5.2": [ { "comment_text": "", "digests": { "md5": "abaad47b34bb560d9d8860e04e792c57", "sha256": "d71b830a2ceb9ebafc132e1e4e46661a75d048d4c3fd2a889c8490e10fc99ee0" }, "downloads": -1, "filename": "ldap-groups-2.5.2.tar.gz", "has_sig": false, "md5_digest": "abaad47b34bb560d9d8860e04e792c57", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21528, "upload_time": "2014-09-05T04:28:10", "url": "https://files.pythonhosted.org/packages/2a/4b/1ddc37ef601118cb60032169ebf23d52edfce148d11c627a330771317189/ldap-groups-2.5.2.tar.gz" } ], "2.5.3": [ { "comment_text": "", "digests": { "md5": "e6f45276f15a068eda01aed060e30089", "sha256": "76faa4f83dfa44f60503b059d49b80304ffe675ab9076199dce2fc43dc4a7011" }, "downloads": -1, "filename": "ldap-groups-2.5.3.tar.gz", "has_sig": false, "md5_digest": "e6f45276f15a068eda01aed060e30089", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21620, "upload_time": "2014-09-16T07:11:23", "url": "https://files.pythonhosted.org/packages/25/ff/891a7b92328a5b3a16237d6baf9a205c13b00342fe552a5f5e8ff9fea908/ldap-groups-2.5.3.tar.gz" } ], "3.0.0-dev": [ { "comment_text": "", "digests": { "md5": "245d2d0b8b5d50a37a62dec577377b4d", "sha256": "8d613f09b1063d9969e8ba208a8bf642e397afa9f2a96ec0bc2c06ef64fccbd4" }, "downloads": -1, "filename": "ldap-groups-3.0.0-dev.tar.gz", "has_sig": false, "md5_digest": "245d2d0b8b5d50a37a62dec577377b4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23053, "upload_time": "2014-10-06T07:44:16", "url": "https://files.pythonhosted.org/packages/be/5c/d84eb67b710dab00a6bad925eac9cf074abe0509dd7f64ce8416ed1cf679/ldap-groups-3.0.0-dev.tar.gz" } ], "3.0.1-dev": [ { "comment_text": "", "digests": { "md5": "4a703413248ac3fba5462e929ee9359e", "sha256": "2f86df5b02613f11a7ef088f5dcd9a0caace082c183b8f86536a2c01ec892685" }, "downloads": -1, "filename": "ldap-groups-3.0.1-dev.tar.gz", "has_sig": false, "md5_digest": "4a703413248ac3fba5462e929ee9359e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23067, "upload_time": "2014-10-09T03:22:54", "url": "https://files.pythonhosted.org/packages/37/e5/6c161a4827da6ea19c517b6833bdf73e931b76923ceece78d2f3105ac5b8/ldap-groups-3.0.1-dev.tar.gz" } ], "3.0.2-dev": [ { "comment_text": "", "digests": { "md5": "ff7dfeeda99d8e4cde4e62b89f2935e1", "sha256": "07552f23f292d31e6cc716b9c5d819fc204ec70358fd8f19081b3a7d3886f6cc" }, "downloads": -1, "filename": "ldap-groups-3.0.2-dev.tar.gz", "has_sig": false, "md5_digest": "ff7dfeeda99d8e4cde4e62b89f2935e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23071, "upload_time": "2014-10-09T03:49:21", "url": "https://files.pythonhosted.org/packages/fa/35/fc5a50383b1c8f0eddad9d629c5d77accc6afb3b647f198a4360063f317f/ldap-groups-3.0.2-dev.tar.gz" } ], "3.0.3-dev": [ { "comment_text": "", "digests": { "md5": "18033cd75923ccf7e8a6fcc391a3cd90", "sha256": "f5ba8c269325ba4d392f913b1a7415be5475e994eac09de9194ea1643236aa5c" }, "downloads": -1, "filename": "ldap-groups-3.0.3-dev.tar.gz", "has_sig": false, "md5_digest": "18033cd75923ccf7e8a6fcc391a3cd90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23125, "upload_time": "2014-10-13T07:55:21", "url": "https://files.pythonhosted.org/packages/47/a5/1cbe4f6b87c20f311b90dc2c60458f89488468f44f78e723c0be2faa51b1/ldap-groups-3.0.3-dev.tar.gz" } ], "3.0.4-dev": [ { "comment_text": "", "digests": { "md5": "4f4662130e4d604b1992e9c8ce41d133", "sha256": "a329c8f53ab56b98b9d9d7f9402f85607e816c8f07a8821c1a7d194233c651f9" }, "downloads": -1, "filename": "ldap-groups-3.0.4-dev.zip", "has_sig": false, "md5_digest": "4f4662130e4d604b1992e9c8ce41d133", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16342, "upload_time": "2014-10-20T17:54:47", "url": "https://files.pythonhosted.org/packages/84/e7/c615bc0d18d90b65058c0b7d0d532f9a7893a0c109a832dc53283fe9681a/ldap-groups-3.0.4-dev.zip" } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "0ac229a9885f421269806d1b3f483b95", "sha256": "3249ef0e2f138992831f89d6141058cd78f6802d9fc1e801570023b17d19006d" }, "downloads": -1, "filename": "ldap-groups-4.0.0.zip", "has_sig": false, "md5_digest": "0ac229a9885f421269806d1b3f483b95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18995, "upload_time": "2014-11-10T21:11:54", "url": "https://files.pythonhosted.org/packages/0e/48/6a7a069d275e6a75f8b5183a8b4b7c3aec8bd4057d3e1133a9c39e569477/ldap-groups-4.0.0.zip" } ], "4.1.0": [ { "comment_text": "", "digests": { "md5": "7851f254e7567b25840c921cece06532", "sha256": "e0d0206314b54a166e466805df0fad24579689b59fdfbdf35e241c4b09fc1306" }, "downloads": -1, "filename": "ldap-groups-4.1.0.tar.gz", "has_sig": false, "md5_digest": "7851f254e7567b25840c921cece06532", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13349, "upload_time": "2015-03-26T01:31:05", "url": "https://files.pythonhosted.org/packages/cf/35/0b8ee7514cd73ab8c25c2a2bcc7281eaab386c7025624a85acfac5f985f3/ldap-groups-4.1.0.tar.gz" } ], "4.1.1": [ { "comment_text": "", "digests": { "md5": "3438d68410828df05da93b27ce43346a", "sha256": "ee61217677f5584866e1f572b1c663bc6d52fc70d223b3a1253615cd848cff78" }, "downloads": -1, "filename": "ldap-groups-4.1.1.tar.gz", "has_sig": false, "md5_digest": "3438d68410828df05da93b27ce43346a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13360, "upload_time": "2015-08-28T12:05:14", "url": "https://files.pythonhosted.org/packages/d9/7e/90e36facab9e7973fc07bb8e18f0190146e95013eff42bf5597d99a36f45/ldap-groups-4.1.1.tar.gz" } ], "4.1.1.post1": [ { "comment_text": "", "digests": { "md5": "f6f7bbce4313033f8dc5cb4802974cb3", "sha256": "c315967934a5ec2559d14e03fee709117e3df229b64f7f8c2ba4168e067126ef" }, "downloads": -1, "filename": "ldap-groups-4.1.1.post1.tar.gz", "has_sig": false, "md5_digest": "f6f7bbce4313033f8dc5cb4802974cb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13367, "upload_time": "2015-08-28T12:06:58", "url": "https://files.pythonhosted.org/packages/a6/97/985cfc151b88380b12cc1ab047e5122a6da82e6929fc8b8f2eaaac0f4fd3/ldap-groups-4.1.1.post1.tar.gz" } ], "4.2.0": [ { "comment_text": "", "digests": { "md5": "9b3579a429e72f3ee871a7078c93c624", "sha256": "6504f4b0fb2976837162d5c9e62566216d4bf77790d22a2d7d2b56739af5f844" }, "downloads": -1, "filename": "ldap_groups-4.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9b3579a429e72f3ee871a7078c93c624", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 17808, "upload_time": "2015-09-01T22:26:10", "url": "https://files.pythonhosted.org/packages/46/ea/ab3ebd23d927321b65e349f43f3d69edab7486ddfbd4b73fee9b62c32aac/ldap_groups-4.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c0ac0894c617be5d58327878bd97634", "sha256": "8e1b6b2a257dcb76df927124fcee4921679456c0262fe07fc8d75b66e4348398" }, "downloads": -1, "filename": "ldap-groups-4.2.0.tar.gz", "has_sig": false, "md5_digest": "5c0ac0894c617be5d58327878bd97634", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13592, "upload_time": "2015-09-01T22:26:07", "url": "https://files.pythonhosted.org/packages/f3/05/2abe78b994dc8ad9f3ae02a79e8253f49955ecf281de4d32b4838104844d/ldap-groups-4.2.0.tar.gz" } ], "4.2.0.post1": [ { "comment_text": "", "digests": { "md5": "8b8381523f5a1cd334bd7671e14d2312", "sha256": "0dc270538adb948acdbb8e556cdd57cfaea319ebbadb12d457e7e08cd47ea084" }, "downloads": -1, "filename": "ldap_groups-4.2.0.post1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8b8381523f5a1cd334bd7671e14d2312", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 17890, "upload_time": "2015-09-01T22:32:12", "url": "https://files.pythonhosted.org/packages/16/f6/c0532611fb709ada707c6fd88318760a7d27c206c8699d022176e9e67f20/ldap_groups-4.2.0.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eaf50d75e85ce9e1e20b35e48b95bcc5", "sha256": "6f57efab4c78e963955eac65e7b5a4d699e82cb1f3347f3c9e98f1254f5a98ad" }, "downloads": -1, "filename": "ldap-groups-4.2.0.post1.tar.gz", "has_sig": false, "md5_digest": "eaf50d75e85ce9e1e20b35e48b95bcc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13581, "upload_time": "2015-09-01T22:32:08", "url": "https://files.pythonhosted.org/packages/82/df/11d1ae04669085343fd37113ed20572bc394fc240d9b4d093f9fa959fde8/ldap-groups-4.2.0.post1.tar.gz" } ], "4.2.1": [ { "comment_text": "", "digests": { "md5": "2a546e0825ec49324191188831c54d2a", "sha256": "da5d7ae21ca48ab9f85a8eb17692868bdfe20f8699c680c496a7647245b2d2dd" }, "downloads": -1, "filename": "ldap_groups-4.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2a546e0825ec49324191188831c54d2a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 17800, "upload_time": "2015-12-24T07:08:27", "url": "https://files.pythonhosted.org/packages/bd/f0/c1f1ebc4e2a83fd6dc11f5a510b15aa278e469280dca6d75641640bf61cc/ldap_groups-4.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "82d264a0b92c85c52a780644df4ac78b", "sha256": "7830bf0e9982d5c56f5e9561e0b2341007f8ad570fd32606acd9082488e8859a" }, "downloads": -1, "filename": "ldap-groups-4.2.1.tar.gz", "has_sig": false, "md5_digest": "82d264a0b92c85c52a780644df4ac78b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13569, "upload_time": "2015-12-24T07:08:17", "url": "https://files.pythonhosted.org/packages/23/93/a3a9b1fa99cab7e455a21781cb361b53c11cfe3c9f7b4aa30a547ba92dfd/ldap-groups-4.2.1.tar.gz" } ], "4.2.2": [ { "comment_text": "", "digests": { "md5": "1d1843f7f0ce30c89c2bfdee1b7f3921", "sha256": "1af492950f38a2a4a42b669a305a71020936b736adfcfa6108115c578b3bca61" }, "downloads": -1, "filename": "ldap_groups-4.2.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1d1843f7f0ce30c89c2bfdee1b7f3921", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 17308, "upload_time": "2016-09-15T06:08:43", "url": "https://files.pythonhosted.org/packages/91/62/181f70f8e0982080feccf5b4572f838858c3b9454d3493934aa4ab4215cd/ldap_groups-4.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "950d1a9417f568b73643b27adb31d281", "sha256": "427e18d7355a5e5fe3bc87c04815ca22a2a56bb04cbe904ae4e37fd02662a67e" }, "downloads": -1, "filename": "ldap-groups-4.2.2.tar.gz", "has_sig": true, "md5_digest": "950d1a9417f568b73643b27adb31d281", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15587, "upload_time": "2016-09-15T06:08:39", "url": "https://files.pythonhosted.org/packages/f8/b8/ff5ea0587fa4162c135d82a30a0d0fd3f7e1c0991bc7e2dd9cf4515a7029/ldap-groups-4.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1d1843f7f0ce30c89c2bfdee1b7f3921", "sha256": "1af492950f38a2a4a42b669a305a71020936b736adfcfa6108115c578b3bca61" }, "downloads": -1, "filename": "ldap_groups-4.2.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1d1843f7f0ce30c89c2bfdee1b7f3921", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 17308, "upload_time": "2016-09-15T06:08:43", "url": "https://files.pythonhosted.org/packages/91/62/181f70f8e0982080feccf5b4572f838858c3b9454d3493934aa4ab4215cd/ldap_groups-4.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "950d1a9417f568b73643b27adb31d281", "sha256": "427e18d7355a5e5fe3bc87c04815ca22a2a56bb04cbe904ae4e37fd02662a67e" }, "downloads": -1, "filename": "ldap-groups-4.2.2.tar.gz", "has_sig": true, "md5_digest": "950d1a9417f568b73643b27adb31d281", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15587, "upload_time": "2016-09-15T06:08:39", "url": "https://files.pythonhosted.org/packages/f8/b8/ff5ea0587fa4162c135d82a30a0d0fd3f7e1c0991bc7e2dd9cf4515a7029/ldap-groups-4.2.2.tar.gz" } ] }