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/
|
.. _Django: https://www.djangoproject.com/
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`ldapentities` app
|
||||||
|
==========================
|
||||||
|
|
||||||
.. automodule:: ldapentities
|
.. automodule:: ldapentities
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`ldapenties.admin`
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: ldapentities.admin
|
||||||
|
:members:
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`ldapenties.models`
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: ldapentities.models
|
||||||
|
:members:
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`osusers` app
|
||||||
|
=====================
|
||||||
|
|
||||||
.. automodule:: osusers
|
.. 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
|
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
# 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.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
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 __future__ import absolute_import
|
||||||
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from celery.utils.log import get_task_logger
|
from celery.utils.log import get_task_logger
|
||||||
from celery.exceptions import Reject
|
from celery.exceptions import Reject
|
||||||
|
|
||||||
from ldapentities.models import (
|
from ldapentities.models import (
|
||||||
LdapGroup,
|
LdapGroup,
|
||||||
LdapUser,
|
LdapUser,
|
||||||
|
@ -15,6 +23,19 @@ _logger = get_task_logger(__name__)
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def create_ldap_group(groupname, gid, descr):
|
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:
|
try:
|
||||||
ldapgroup = LdapGroup.objects.get(name=groupname)
|
ldapgroup = LdapGroup.objects.get(name=groupname)
|
||||||
_logger.info(
|
_logger.info(
|
||||||
|
@ -30,6 +51,28 @@ def create_ldap_group(groupname, gid, descr):
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def create_ldap_user(username, uid, gid, gecos, homedir, shell, password):
|
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:
|
try:
|
||||||
ldapuser = LdapUser.objects.get(username=username)
|
ldapuser = LdapUser.objects.get(username=username)
|
||||||
_logger.info(
|
_logger.info(
|
||||||
|
@ -64,6 +107,19 @@ def create_ldap_user(username, uid, gid, gecos, homedir, shell, password):
|
||||||
|
|
||||||
@shared_task(bind=True)
|
@shared_task(bind=True)
|
||||||
def add_ldap_user_to_group(self, username, groupname):
|
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:
|
try:
|
||||||
ldapgroup = LdapGroup.objects.get(name=groupname)
|
ldapgroup = LdapGroup.objects.get(name=groupname)
|
||||||
ldapuser = LdapUser.objects.get(username=username)
|
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(
|
_logger.info('ldap user {0} is already in group {1}'.format(
|
||||||
ldapuser.username, ldapgroup.dn)
|
ldapuser.username, ldapgroup.dn)
|
||||||
)
|
)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def remove_ldap_user_from_group(username, groupname):
|
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)
|
ldapgroup = LdapGroup.objects.get(name=groupname)
|
||||||
ldapuser = LdapUser.objects.get(username=username)
|
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.members.remove(ldapuser.username)
|
||||||
ldapgroup.save()
|
ldapgroup.save()
|
||||||
|
return performdelete
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def delete_ldap_user(username):
|
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:
|
try:
|
||||||
ldapuser = LdapUser.objects.get(username=username)
|
ldapuser = LdapUser.objects.get(username=username)
|
||||||
except LdapUser.DoesNotExist:
|
except LdapUser.DoesNotExist:
|
||||||
|
@ -111,10 +188,20 @@ def delete_ldap_user(username):
|
||||||
ldapgroup.members.remove(ldapuser.username)
|
ldapgroup.members.remove(ldapuser.username)
|
||||||
ldapgroup.save()
|
ldapgroup.save()
|
||||||
ldapuser.delete()
|
ldapuser.delete()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def delete_ldap_group_if_empty(groupname):
|
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:
|
try:
|
||||||
ldapgroup = LdapGroup.objects.get(name=groupname)
|
ldapgroup = LdapGroup.objects.get(name=groupname)
|
||||||
except LdapGroup.DoesNotExist:
|
except LdapGroup.DoesNotExist:
|
||||||
|
@ -124,7 +211,9 @@ def delete_ldap_group_if_empty(groupname):
|
||||||
else:
|
else:
|
||||||
if len(ldapgroup.members) == 0:
|
if len(ldapgroup.members) == 0:
|
||||||
ldapgroup.delete()
|
ldapgroup.delete()
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
_logger.info('ldap group {0} still has {1} members'.format(
|
_logger.info('ldap group {0} still has {1} members'.format(
|
||||||
ldapgroup.dn, len(ldapgroup.members))
|
ldapgroup.dn, len(ldapgroup.members))
|
||||||
)
|
)
|
||||||
|
return False
|
||||||
|
|
Loading…
Reference in a new issue