document the celery tasks in osusers.tasks
This commit is contained in:
		
							parent
							
								
									1466d3c93a
								
							
						
					
					
						commit
						91791320ca
					
				
					 5 changed files with 123 additions and 5 deletions
				
			
		|  | @ -8,6 +8,35 @@ gvaldap is implemented as a set of `Django`_ apps. | |||
| 
 | ||||
| .. _Django: https://www.djangoproject.com/ | ||||
| 
 | ||||
| 
 | ||||
| :py:mod:`ldapentities` app | ||||
| ========================== | ||||
| 
 | ||||
| .. automodule:: ldapentities | ||||
| 
 | ||||
| 
 | ||||
| :py:mod:`ldapenties.admin` | ||||
| -------------------------- | ||||
| 
 | ||||
| .. automodule:: ldapentities.admin | ||||
|    :members: | ||||
| 
 | ||||
| 
 | ||||
| :py:mod:`ldapenties.models` | ||||
| --------------------------- | ||||
| 
 | ||||
| .. automodule:: ldapentities.models | ||||
|    :members: | ||||
| 
 | ||||
| 
 | ||||
| :py:mod:`osusers` app | ||||
| ===================== | ||||
| 
 | ||||
| .. automodule:: osusers | ||||
| 
 | ||||
| :py:mod:`osusers.tasks` | ||||
| ----------------------- | ||||
| 
 | ||||
| .. automodule:: osusers.tasks | ||||
|    :members: | ||||
|    :undoc-members: | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ sys.path.insert(0, os.path.abspath(os.path.join('..', 'gvaldap'))) | |||
| 
 | ||||
| # Add any Sphinx extension module names here, as strings. They can be extensions | ||||
| # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. | ||||
| extensions = ['releases', 'sphinx.ext.autodoc'] | ||||
| extensions = ['releases', 'sphinx.ext.autodoc', 'celery.contrib.sphinx'] | ||||
| 
 | ||||
| # Add any paths that contain templates here, relative to this directory. | ||||
| templates_path = ['_templates'] | ||||
|  |  | |||
|  | @ -1,3 +0,0 @@ | |||
| from django.contrib import admin | ||||
| 
 | ||||
| # Register your models here. | ||||
|  | @ -0,0 +1,3 @@ | |||
| """ | ||||
| Empty models module required for Django to accept this as an app. | ||||
| """ | ||||
|  | @ -1,9 +1,17 @@ | |||
| """ | ||||
| This module defines `Celery`_ tasks to manage LDAP entities. | ||||
| 
 | ||||
| .. _Celery: http://www.celeryproject.org/ | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from __future__ import absolute_import | ||||
| 
 | ||||
| from django.core.exceptions import ObjectDoesNotExist | ||||
| from celery import shared_task | ||||
| from celery.utils.log import get_task_logger | ||||
| from celery.exceptions import Reject | ||||
| 
 | ||||
| from ldapentities.models import ( | ||||
|     LdapGroup, | ||||
|     LdapUser, | ||||
|  | @ -15,6 +23,19 @@ _logger = get_task_logger(__name__) | |||
| 
 | ||||
| @shared_task | ||||
| def create_ldap_group(groupname, gid, descr): | ||||
|     """ | ||||
|     This task creates an :py:class:`LDAP group <ldapentities.models.LdapGroup>` | ||||
|     if it does not exist yet. | ||||
| 
 | ||||
|     If a group with the given name exists its group id and description | ||||
|     attributes are updated. | ||||
| 
 | ||||
|     :param str groupname: the group name | ||||
|     :param int gid: the group id | ||||
|     :param str descr: description text for the group | ||||
|     :return: the distinguished name of the group | ||||
|     :rtype: str | ||||
|     """ | ||||
|     try: | ||||
|         ldapgroup = LdapGroup.objects.get(name=groupname) | ||||
|         _logger.info( | ||||
|  | @ -30,6 +51,28 @@ def create_ldap_group(groupname, gid, descr): | |||
| 
 | ||||
| @shared_task | ||||
| def create_ldap_user(username, uid, gid, gecos, homedir, shell, password): | ||||
|     """ | ||||
|     This task creates an :py:class:`LDAP user <ldapentities.models.LdapUser>` | ||||
|     if it does not exist yet. | ||||
| 
 | ||||
|     The task is rejected if the primary group of the user is not defined. | ||||
| 
 | ||||
|     The user's fields are updated if the user already exists. | ||||
| 
 | ||||
|     :param str username: the user name | ||||
|     :param int uid: the user id | ||||
|     :param int gid: the user's primary group's id | ||||
|     :param str gecos: the text for the GECOS field | ||||
|     :param str homedir: the user's home directory | ||||
|     :param str shell: the user's login shell | ||||
|     :param str or None password: the clear text password, if :py:const:`None` | ||||
|         is passed the password is not touched | ||||
|     :raises celery.exceptions.Reject: if the specified primary group does not | ||||
|         exist | ||||
|     :return: the distinguished name of the user | ||||
|     :rtype: str | ||||
| 
 | ||||
|     """ | ||||
|     try: | ||||
|         ldapuser = LdapUser.objects.get(username=username) | ||||
|         _logger.info( | ||||
|  | @ -64,6 +107,19 @@ def create_ldap_user(username, uid, gid, gecos, homedir, shell, password): | |||
| 
 | ||||
| @shared_task(bind=True) | ||||
| def add_ldap_user_to_group(self, username, groupname): | ||||
|     """ | ||||
|     This task adds the specified user to the given group. | ||||
| 
 | ||||
|     This task does nothing if the user is already member of the group. | ||||
| 
 | ||||
|     :param str username: the user name | ||||
|     :param str groupname: the group name | ||||
|     :raises celery.exceptions.Retry: if the user does not exist yet, | ||||
|         :py:func:`create_ldap_user` should be called before | ||||
|     :return: True if the user has been added to the group otherwise False | ||||
|     :rtype: boolean | ||||
| 
 | ||||
|     """ | ||||
|     try: | ||||
|         ldapgroup = LdapGroup.objects.get(name=groupname) | ||||
|         ldapuser = LdapUser.objects.get(username=username) | ||||
|  | @ -80,19 +136,40 @@ def add_ldap_user_to_group(self, username, groupname): | |||
|             _logger.info('ldap user {0} is already in group {1}'.format( | ||||
|                 ldapuser.username, ldapgroup.dn) | ||||
|             ) | ||||
|         return True | ||||
|     return False | ||||
| 
 | ||||
| 
 | ||||
| @shared_task | ||||
| def remove_ldap_user_from_group(username, groupname): | ||||
|     """ | ||||
|     This task removes the given user from the given group. | ||||
| 
 | ||||
|     :param str username: the user name | ||||
|     :param str groupname: the group name | ||||
|     :return: True if the user has been removed, False otherwise | ||||
|     :rtype: boolean | ||||
| 
 | ||||
|     """ | ||||
|     ldapgroup = LdapGroup.objects.get(name=groupname) | ||||
|     ldapuser = LdapUser.objects.get(username=username) | ||||
|     if ldapuser.username in ldapgroup.members: | ||||
|     performdelete = ldapuser.username in ldapgroup.members | ||||
|     if performdelete: | ||||
|         ldapgroup.members.remove(ldapuser.username) | ||||
|     ldapgroup.save() | ||||
|     return performdelete | ||||
| 
 | ||||
| 
 | ||||
| @shared_task | ||||
| def delete_ldap_user(username): | ||||
|     """ | ||||
|     This task deletes the given user. | ||||
| 
 | ||||
|     :param str username: the user name | ||||
|     :return: True if the user has been deleted, False otherwise | ||||
|     :rtype: boolean | ||||
| 
 | ||||
|     """ | ||||
|     try: | ||||
|         ldapuser = LdapUser.objects.get(username=username) | ||||
|     except LdapUser.DoesNotExist: | ||||
|  | @ -111,10 +188,20 @@ def delete_ldap_user(username): | |||
|                 ldapgroup.members.remove(ldapuser.username) | ||||
|                 ldapgroup.save() | ||||
|         ldapuser.delete() | ||||
|         return True | ||||
|     return False | ||||
| 
 | ||||
| 
 | ||||
| @shared_task | ||||
| def delete_ldap_group_if_empty(groupname): | ||||
|     """ | ||||
|     This task deletes the given group. | ||||
| 
 | ||||
|     :param str groupname: the group name | ||||
|     :return: True if the user has been deleted, False otherwise | ||||
|     :rtype: boolean | ||||
| 
 | ||||
|     """ | ||||
|     try: | ||||
|         ldapgroup = LdapGroup.objects.get(name=groupname) | ||||
|     except LdapGroup.DoesNotExist: | ||||
|  | @ -124,7 +211,9 @@ def delete_ldap_group_if_empty(groupname): | |||
|     else: | ||||
|         if len(ldapgroup.members) == 0: | ||||
|             ldapgroup.delete() | ||||
|             return True | ||||
|         else: | ||||
|             _logger.info('ldap group {0} still has {1} members'.format( | ||||
|                 ldapgroup.dn, len(ldapgroup.members)) | ||||
|             ) | ||||
|     return False | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue