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

add rpc method

parent be46f5c3
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -2222,6 +2222,40 @@ def move_items(
    return results


@_rpc_groups(["Projects"])
def project_stats(user: User, project_id: int) -> dict:
    """
    Get infos from given project:
    - number of descendants
    - number of descendant resources
    - number of resources
    - number of children collections
    """
    try:
        project = Project.objects.get(pk=project_id)
        _check_project_permission(user, project, PERM_COLLECTION_READ)
        _check_project_permission(user, project, PERM_RESOURCE_READ)
        root = Collection.objects.get(title=ROOT_COLLECTION_TITLE, parent_id=None)
        return {
            "descendants_count": Collection.objects.filter(
                project=project, deleted_at__isnull=True
            ).count(),
            "descendants_resources_count": Resource.objects.filter(
                project=project, deleted_at__isnull=True
            ).count(),
            "children_count": Collection.objects.filter(
                project=project, deleted_at__isnull=True, parent=root
            ).count(),
            "resources_count": Resource.objects.filter(
                project=project,
                deleted_at__isnull=True,
                collectionmembership__isnull=True,
            ).count(),
        }
    except Project.DoesNotExist:
        raise ServiceException(NO_SUCH_PROJECT)


@_rpc_groups(["Collections", "Resources"])
def collection_stats(user: User, collection_id: int) -> dict:
    """