Commit ccd7d22b authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

add command to create new projects

parent ccd7c017
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -72,23 +72,11 @@ Le seul vocabulaire disponible pour l'OAI-PMH est le Dublin Core.
Les enregistrements retournés correspondent aux collections Jama pour lesquelles le flag 
"is_oai_record" vaut VRAI.

## Mise en place d'un projet et d'un utilisateur de test:

    (venv) code/jama: poetry run ./manage.py shell
    >>> from resources.models import APIKey, Project, ProjectAccess, Permission, Role
    >>> from django.contrib.auth.models import User
    >>> test_project, _ = Project.objects.get_or_create(label="test")
    >>> test_user, _ = User.objects.get_or_create(username="test")
    >>> admin_role, _ = Role.objects.get_or_create(label="admin", project=test_project)
    >>> for permission in Permission.objects.all():
    ...     admin_role.permissions.add(permission)
    ... 
    >>>     
    >>> ProjectAccess.objects.get_or_create(project=test_project, role=admin_role, user=test_user)
    (<ProjectAccess: test: test (admin)>, False)
    >>> key, _ = APIKey.objects.get_or_create(user=test_user, key="123456")
    >>> key.active = True
    >>> key.save()
## Création d'un nouveau projet:

    (venv) code/jama: poetry run python manage.py newjamaproject "mon projet"
    Projet "mon projet" créé avec le compte administrateur "admin_mon_projet" et la clef d'API "EOwy6laNTMBDUvH6pGuOvGdMEpYM2F9M"


## Étendre JAMA

+38 −0
Original line number Diff line number Diff line
from django.core.management.base import BaseCommand, CommandError
from resources.models import Project, Role, Permission, ProjectAccess, APIKey
from django.utils.text import slugify
from django.contrib.auth.models import User
import secrets
import string


class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument("project_label", type=str)

    def handle(self, *args, **options):
        project_label = options.get("project_label")
        project = Project.objects.filter(label__iexact=project_label).first()
        if project:
            raise CommandError("Le projet existe déjà.")
        project_admin_username = slugify(f"admin_{project_label.replace(' ', '_')}")
        project = Project.objects.create(label=project_label)
        admin_user, _ = User.objects.get_or_create(username=project_admin_username)
        admin_role, _ = Role.objects.get_or_create(label="admin", project=project)
        for permission in Permission.objects.all():
            if permission.label != "collection.public_only":
                admin_role.permissions.add(permission)
        ProjectAccess.objects.get_or_create(
            project=project, role=admin_role, user=admin_user
        )
        key, _ = APIKey.objects.get_or_create(
            user=admin_user,
            key="".join(
                secrets.choice(string.ascii_letters + string.digits) for i in range(32)
            ),
        )
        key.active = True
        key.save()
        print(
            f'Projet "{project_label}" créé avec le compte administrateur "{admin_user.username}" et la clef d\'API "{key.key}"'
        )