Skip to content

Querytree

querytree

QUERYTREE

Source code in modules/querytree.py
class QUERYTREE:
    def __init__(self):
        pass

    def get(self):
        """Get the metadata of all queries and deliver it as json.
        """

        auth = current.auth
        db = current.db
        VERSION_ORDER = current.VERSION_ORDER
        VERSION_INDEX = current.VERSION_INDEX

        myId = None
        if auth.user:
            myId = auth.user.id
        objInfo = collections.defaultdict(lambda: {})

        def titleBadge(obj_id, objType, publ, good, num, tot):
            name = objInfo[objType][obj_id] if objType is not None else "Shared Queries"
            nums = []
            if publ != 0:
                nums.append(f'<span class="special fa fa-quote-right"> {publ}</span>')
            if good != 0:
                nums.append(f'<span class="good fa fa-gears"> {good}</span>')
            badge = ""
            if len(nums) == 0:
                if tot == num:
                    badge = f'<span class="total">{tot}</span>'
                else:
                    badge = f'{num} of <span class="total">{tot}</span>'
            else:
                nRep = ", ".join(nums)
                if tot == num:
                    badge = f'{nRep} of <span class="total">{tot}</span>'
                else:
                    badge = f'{nRep} of {num} of all <span class="total">{tot}</span>'
            rename = ""
            select = ""
            if objType in {"o", "p"}:
                if myId is not None:
                    if obj_id:
                        rename = (
                            f'<a class="r_{objType}" obj_id="{obj_id}" href="#"></a>'
                        )
                    select = dedent(
                        f"""<a
                            class="s_{objType} fa fa-lg"
                            obj_id="{obj_id}"
                            href="#"></a>"""
                    )
                else:
                    if obj_id:
                        rename = (
                            f'<a class="v_{objType}" obj_id="{obj_id}" href="#"></a>'
                        )
            return dedent(
                f"""{select}
                <span n="1">{hEsc(name)}</span><span
                class="brq">({badge})</span> {rename}"""
            )

        condition = (
            dedent(
                """
                where query.is_shared = 'T'
                """
            )
            if myId is None
            else dedent(
                f"""
                where query.is_shared = 'T' or query.created_by = {myId}
            """
            )
        )

        projectQueryXSql = dedent(
            f"""
            select
                query_exe.query_id,
                query_exe.version,
                query_exe.is_published,
                query_exe.published_on,
                query_exe.modified_on,
                query_exe.executed_on
            from query_exe
            inner join query on query.id = query_exe.query_id
            {condition};
            """
        )

        projectQuerySql = dedent(
            f"""
            select
                query.id as query_id,
                organization.name as org_name, organization.id as org_id,
                project.name as project_name, project.id as project_id,
                concat(auth_user.first_name, ' ', auth_user.last_name) as uname,
                auth_user.id as user_id,
                query.name as query_name, query.is_shared as is_shared
            from query
            inner join auth_user on query.created_by = auth_user.id
            inner join project on query.project = project.id
            inner join organization on query.organization = organization.id
            {condition}
            order by organization.name,
            project.name,
            auth_user.last_name,
            auth_user.first_name,
            query.name
            ;
            """
        )

        projectQuery = db.executesql(projectQuerySql)
        projectQueryX = db.executesql(projectQueryXSql)
        projectQueries = collections.OrderedDict()
        for (
            query_id,
            orgName,
            org_id,
            projectName,
            project_id,
            userName,
            user_id,
            queryName,
            queryShared,
        ) in projectQuery:
            qSharedStatus = queryShared == "T"
            qOwnStatus = user_id == myId
            projectQueries[query_id] = {
                "": (
                    orgName,
                    org_id,
                    projectName,
                    project_id,
                    userName,
                    user_id,
                    queryName,
                    qSharedStatus,
                    qOwnStatus,
                ),
                "publ": False,
                "good": False,
                "v": [4 for v in VERSION_ORDER],
            }

        now = current.request.utcnow

        for (
            query_id,
            vr,
            queryIs_published,
            queryPublished_on,
            queryMod_on,
            queryExe_on,
        ) in projectQueryX:
            queryInfo = projectQueries[query_id]
            queryExeStatus = None
            if queryExe_on:
                queryExeStatus = queryExe_on >= queryMod_on
            queryPubStatus = (
                False
                if queryIs_published != "T"
                else None
                if queryPublished_on > now - PUBLISH_FREEZE
                else True
            )
            queryStatus = (
                1
                if queryPubStatus
                else 2
                if queryPubStatus is None
                else 3
                if queryExeStatus
                else 4
                if queryExeStatus is None
                else 5
            )
            queryInfo["v"][VERSION_INDEX[vr]] = queryStatus
            if queryPubStatus or queryPubStatus is None:
                queryInfo["publ"] = True
            if queryExeStatus:
                queryInfo["good"] = True

        projectOrgSql = dedent(
            """
            select name, id from organization order by name
            ;
            """
        )
        porg = db.executesql(projectOrgSql)

        projectSql = dedent(
            """
            select name, id from project order by name
            ;
            """
        )
        project = db.executesql(projectSql)

        tree = collections.OrderedDict()
        countSet = collections.defaultdict(lambda: set())
        countOrg = collections.defaultdict(lambda: 0)
        countOrgPub = collections.defaultdict(lambda: 0)
        countOrgGood = collections.defaultdict(lambda: 0)
        countOrgTotal = collections.defaultdict(lambda: 0)
        countProject = collections.defaultdict(
            lambda: collections.defaultdict(lambda: 0)
        )
        countProjectPub = collections.defaultdict(
            lambda: collections.defaultdict(lambda: 0)
        )
        countProjectGood = collections.defaultdict(
            lambda: collections.defaultdict(lambda: 0)
        )
        countProjectTotal = collections.defaultdict(lambda: 0)
        countUser = collections.defaultdict(
            lambda: collections.defaultdict(lambda: collections.defaultdict(lambda: 0))
        )
        countUserPub = collections.defaultdict(
            lambda: collections.defaultdict(lambda: collections.defaultdict(lambda: 0))
        )
        countUserGood = collections.defaultdict(
            lambda: collections.defaultdict(lambda: collections.defaultdict(lambda: 0))
        )
        countUserTotal = collections.defaultdict(lambda: 0)
        count = 0
        countPub = 0
        countGood = 0
        for query_id in projectQueries:
            projectQueryInfo = projectQueries[query_id]
            (
                orgName,
                org_id,
                projectName,
                project_id,
                userName,
                user_id,
                queryName,
                queryShared,
                queryOwn,
            ) = projectQueryInfo[""]
            queryPub = projectQueryInfo["publ"]
            queryGood = projectQueryInfo["good"]
            countSet["o"].add(org_id)
            countSet["p"].add(project_id)
            countSet["u"].add(user_id)
            countSet["q"].add(query_id)
            objInfo["o"][org_id] = orgName
            objInfo["p"][project_id] = projectName
            objInfo["u"][user_id] = userName
            if queryOwn:
                countSet["m"].add(query_id)
            if not queryShared:
                countSet["r"].add(query_id)
            if queryPub:
                countUserPub[org_id][project_id][user_id] += 1
                countProjectPub[org_id][project_id] += 1
                countOrgPub[org_id] += 1
                countPub += 1
            if queryGood:
                countUserGood[org_id][project_id][user_id] += 1
                countProjectGood[org_id][project_id] += 1
                countOrgGood[org_id] += 1
                countGood += 1
            tree.setdefault(org_id, collections.OrderedDict()).setdefault(
                project_id, collections.OrderedDict()
            ).setdefault(user_id, []).append(query_id)
            count += 1
            countOrg[org_id] += 1
            countProject[org_id][project_id] += 1
            countUser[org_id][project_id][user_id] += 1
            countOrgTotal[org_id] += 1
            countProjectTotal[project_id] += 1
            countUserTotal[user_id] += 1

        objInfo["o"][0] = "Projects without Queries"
        objInfo["p"][0] = "New Project"
        objInfo["u"][0] = ""
        objInfo["q"] = projectQueries
        countOrg[0] = 0
        countProject[0][0] = 0
        for (orgName, org_id) in porg:
            if org_id in objInfo["o"]:
                continue
            countSet["o"].add(org_id)
            objInfo["o"][org_id] = orgName
            tree[org_id] = collections.OrderedDict()

        for (projectName, project_id) in project:
            if project_id in objInfo["p"]:
                continue
            countSet["o"].add(0)
            countSet["p"].add(project_id)
            objInfo["p"][project_id] = projectName
            tree.setdefault(0, collections.OrderedDict())[
                project_id
            ] = collections.OrderedDict()

        categoryCount = dict((x[0], len(x[1])) for x in countSet.items())
        categoryCount["user_id"] = myId
        title = titleBadge(None, None, countPub, countGood, count, count)
        dest = [dict(title=str(title), folder=True, children=[], data=categoryCount)]
        curDest = dest[-1]["children"]
        curSource = tree
        for org_id in curSource:
            orgN = countOrg[org_id]
            orgPub = countOrgPub[org_id]
            orgGood = countOrgGood[org_id]
            orgTot = countOrgTotal[org_id]
            orgTitle = titleBadge(org_id, "o", orgPub, orgGood, orgN, orgTot)
            curDest.append(dict(title=str(orgTitle), folder=True, children=[]))
            curOrgDest = curDest[-1]["children"]
            curOrgSource = curSource[org_id]
            for project_id in curOrgSource:
                projectN = countProject[org_id][project_id]
                projectPub = countProjectPub[org_id][project_id]
                projectPub = countProjectGood[org_id][project_id]
                projectTot = countProjectTotal[project_id]
                projectTitle = titleBadge(
                    project_id, "p", projectPub, projectPub, projectN, projectTot
                )
                curOrgDest.append(
                    dict(title=str(projectTitle), folder=True, children=[])
                )
                curProjectDest = curOrgDest[-1]["children"]
                curProjectSource = curOrgSource[project_id]
                for user_id in curProjectSource:
                    userN = countUser[org_id][project_id][user_id]
                    userPub = countUserPub[org_id][project_id][user_id]
                    userGood = countUserGood[org_id][project_id][user_id]
                    userTot = countUserTotal[user_id]
                    userTitle = titleBadge(
                        user_id, "u", userPub, userGood, userN, userTot
                    )
                    curProjectDest.append(
                        dict(title=str(userTitle), folder=True, children=[])
                    )
                    curUserDest = curProjectDest[-1]["children"]
                    curUserSource = curProjectSource[user_id]
                    for query_id in curUserSource:
                        projectQueryInfo = objInfo["q"][query_id]
                        (
                            orgName,
                            org_id,
                            projectName,
                            project_id,
                            userName,
                            user_id,
                            queryName,
                            queryShared,
                            queryOwn,
                        ) = projectQueryInfo[""]
                        queryPub = projectQueryInfo["publ"]
                        queryGood = projectQueryInfo["good"]
                        queryVersions = projectQueryInfo["v"]
                        queryOwnRep = "r" if queryOwn else "v"
                        queryMyRep = "qmy" if queryOwn else ""
                        querySharedRep = "" if queryShared else "qpriv"
                        queryIdRep = iEncode("q", query_id)
                        rename = dedent(
                            f"""<a
                            class="{queryOwnRep}_q"
                            obj_id="{queryIdRep}"
                            href="#"></a>"""
                        )
                        versionRep = " ".join(
                            formatVersion(
                                "q", query_id, v, queryVersions[VERSION_INDEX[v]]
                            )
                            for v in VERSION_ORDER
                        )
                        curUserDest.append(
                            dict(
                                title=dedent(
                                    f"""{versionRep} <a
                                    class="q {queryMyRep} {querySharedRep}"
                                    n="1"
                                    query_id="{query_id}"
                                    href="#">{hEsc(queryName)}</a>
                                    <a class="md" href="#"></a> {rename}"""
                                ),
                                key=f"q{query_id}",
                                folder=False,
                            )
                        )
        return dict(data=json.dumps(dest))

__init__(self) special

Source code in modules/querytree.py
def __init__(self):
    pass

get(self)

Get the metadata of all queries and deliver it as json.

Source code in modules/querytree.py
def get(self):
    """Get the metadata of all queries and deliver it as json.
    """

    auth = current.auth
    db = current.db
    VERSION_ORDER = current.VERSION_ORDER
    VERSION_INDEX = current.VERSION_INDEX

    myId = None
    if auth.user:
        myId = auth.user.id
    objInfo = collections.defaultdict(lambda: {})

    def titleBadge(obj_id, objType, publ, good, num, tot):
        name = objInfo[objType][obj_id] if objType is not None else "Shared Queries"
        nums = []
        if publ != 0:
            nums.append(f'<span class="special fa fa-quote-right"> {publ}</span>')
        if good != 0:
            nums.append(f'<span class="good fa fa-gears"> {good}</span>')
        badge = ""
        if len(nums) == 0:
            if tot == num:
                badge = f'<span class="total">{tot}</span>'
            else:
                badge = f'{num} of <span class="total">{tot}</span>'
        else:
            nRep = ", ".join(nums)
            if tot == num:
                badge = f'{nRep} of <span class="total">{tot}</span>'
            else:
                badge = f'{nRep} of {num} of all <span class="total">{tot}</span>'
        rename = ""
        select = ""
        if objType in {"o", "p"}:
            if myId is not None:
                if obj_id:
                    rename = (
                        f'<a class="r_{objType}" obj_id="{obj_id}" href="#"></a>'
                    )
                select = dedent(
                    f"""<a
                        class="s_{objType} fa fa-lg"
                        obj_id="{obj_id}"
                        href="#"></a>"""
                )
            else:
                if obj_id:
                    rename = (
                        f'<a class="v_{objType}" obj_id="{obj_id}" href="#"></a>'
                    )
        return dedent(
            f"""{select}
            <span n="1">{hEsc(name)}</span><span
            class="brq">({badge})</span> {rename}"""
        )

    condition = (
        dedent(
            """
            where query.is_shared = 'T'
            """
        )
        if myId is None
        else dedent(
            f"""
            where query.is_shared = 'T' or query.created_by = {myId}
        """
        )
    )

    projectQueryXSql = dedent(
        f"""
        select
            query_exe.query_id,
            query_exe.version,
            query_exe.is_published,
            query_exe.published_on,
            query_exe.modified_on,
            query_exe.executed_on
        from query_exe
        inner join query on query.id = query_exe.query_id
        {condition};
        """
    )

    projectQuerySql = dedent(
        f"""
        select
            query.id as query_id,
            organization.name as org_name, organization.id as org_id,
            project.name as project_name, project.id as project_id,
            concat(auth_user.first_name, ' ', auth_user.last_name) as uname,
            auth_user.id as user_id,
            query.name as query_name, query.is_shared as is_shared
        from query
        inner join auth_user on query.created_by = auth_user.id
        inner join project on query.project = project.id
        inner join organization on query.organization = organization.id
        {condition}
        order by organization.name,
        project.name,
        auth_user.last_name,
        auth_user.first_name,
        query.name
        ;
        """
    )

    projectQuery = db.executesql(projectQuerySql)
    projectQueryX = db.executesql(projectQueryXSql)
    projectQueries = collections.OrderedDict()
    for (
        query_id,
        orgName,
        org_id,
        projectName,
        project_id,
        userName,
        user_id,
        queryName,
        queryShared,
    ) in projectQuery:
        qSharedStatus = queryShared == "T"
        qOwnStatus = user_id == myId
        projectQueries[query_id] = {
            "": (
                orgName,
                org_id,
                projectName,
                project_id,
                userName,
                user_id,
                queryName,
                qSharedStatus,
                qOwnStatus,
            ),
            "publ": False,
            "good": False,
            "v": [4 for v in VERSION_ORDER],
        }

    now = current.request.utcnow

    for (
        query_id,
        vr,
        queryIs_published,
        queryPublished_on,
        queryMod_on,
        queryExe_on,
    ) in projectQueryX:
        queryInfo = projectQueries[query_id]
        queryExeStatus = None
        if queryExe_on:
            queryExeStatus = queryExe_on >= queryMod_on
        queryPubStatus = (
            False
            if queryIs_published != "T"
            else None
            if queryPublished_on > now - PUBLISH_FREEZE
            else True
        )
        queryStatus = (
            1
            if queryPubStatus
            else 2
            if queryPubStatus is None
            else 3
            if queryExeStatus
            else 4
            if queryExeStatus is None
            else 5
        )
        queryInfo["v"][VERSION_INDEX[vr]] = queryStatus
        if queryPubStatus or queryPubStatus is None:
            queryInfo["publ"] = True
        if queryExeStatus:
            queryInfo["good"] = True

    projectOrgSql = dedent(
        """
        select name, id from organization order by name
        ;
        """
    )
    porg = db.executesql(projectOrgSql)

    projectSql = dedent(
        """
        select name, id from project order by name
        ;
        """
    )
    project = db.executesql(projectSql)

    tree = collections.OrderedDict()
    countSet = collections.defaultdict(lambda: set())
    countOrg = collections.defaultdict(lambda: 0)
    countOrgPub = collections.defaultdict(lambda: 0)
    countOrgGood = collections.defaultdict(lambda: 0)
    countOrgTotal = collections.defaultdict(lambda: 0)
    countProject = collections.defaultdict(
        lambda: collections.defaultdict(lambda: 0)
    )
    countProjectPub = collections.defaultdict(
        lambda: collections.defaultdict(lambda: 0)
    )
    countProjectGood = collections.defaultdict(
        lambda: collections.defaultdict(lambda: 0)
    )
    countProjectTotal = collections.defaultdict(lambda: 0)
    countUser = collections.defaultdict(
        lambda: collections.defaultdict(lambda: collections.defaultdict(lambda: 0))
    )
    countUserPub = collections.defaultdict(
        lambda: collections.defaultdict(lambda: collections.defaultdict(lambda: 0))
    )
    countUserGood = collections.defaultdict(
        lambda: collections.defaultdict(lambda: collections.defaultdict(lambda: 0))
    )
    countUserTotal = collections.defaultdict(lambda: 0)
    count = 0
    countPub = 0
    countGood = 0
    for query_id in projectQueries:
        projectQueryInfo = projectQueries[query_id]
        (
            orgName,
            org_id,
            projectName,
            project_id,
            userName,
            user_id,
            queryName,
            queryShared,
            queryOwn,
        ) = projectQueryInfo[""]
        queryPub = projectQueryInfo["publ"]
        queryGood = projectQueryInfo["good"]
        countSet["o"].add(org_id)
        countSet["p"].add(project_id)
        countSet["u"].add(user_id)
        countSet["q"].add(query_id)
        objInfo["o"][org_id] = orgName
        objInfo["p"][project_id] = projectName
        objInfo["u"][user_id] = userName
        if queryOwn:
            countSet["m"].add(query_id)
        if not queryShared:
            countSet["r"].add(query_id)
        if queryPub:
            countUserPub[org_id][project_id][user_id] += 1
            countProjectPub[org_id][project_id] += 1
            countOrgPub[org_id] += 1
            countPub += 1
        if queryGood:
            countUserGood[org_id][project_id][user_id] += 1
            countProjectGood[org_id][project_id] += 1
            countOrgGood[org_id] += 1
            countGood += 1
        tree.setdefault(org_id, collections.OrderedDict()).setdefault(
            project_id, collections.OrderedDict()
        ).setdefault(user_id, []).append(query_id)
        count += 1
        countOrg[org_id] += 1
        countProject[org_id][project_id] += 1
        countUser[org_id][project_id][user_id] += 1
        countOrgTotal[org_id] += 1
        countProjectTotal[project_id] += 1
        countUserTotal[user_id] += 1

    objInfo["o"][0] = "Projects without Queries"
    objInfo["p"][0] = "New Project"
    objInfo["u"][0] = ""
    objInfo["q"] = projectQueries
    countOrg[0] = 0
    countProject[0][0] = 0
    for (orgName, org_id) in porg:
        if org_id in objInfo["o"]:
            continue
        countSet["o"].add(org_id)
        objInfo["o"][org_id] = orgName
        tree[org_id] = collections.OrderedDict()

    for (projectName, project_id) in project:
        if project_id in objInfo["p"]:
            continue
        countSet["o"].add(0)
        countSet["p"].add(project_id)
        objInfo["p"][project_id] = projectName
        tree.setdefault(0, collections.OrderedDict())[
            project_id
        ] = collections.OrderedDict()

    categoryCount = dict((x[0], len(x[1])) for x in countSet.items())
    categoryCount["user_id"] = myId
    title = titleBadge(None, None, countPub, countGood, count, count)
    dest = [dict(title=str(title), folder=True, children=[], data=categoryCount)]
    curDest = dest[-1]["children"]
    curSource = tree
    for org_id in curSource:
        orgN = countOrg[org_id]
        orgPub = countOrgPub[org_id]
        orgGood = countOrgGood[org_id]
        orgTot = countOrgTotal[org_id]
        orgTitle = titleBadge(org_id, "o", orgPub, orgGood, orgN, orgTot)
        curDest.append(dict(title=str(orgTitle), folder=True, children=[]))
        curOrgDest = curDest[-1]["children"]
        curOrgSource = curSource[org_id]
        for project_id in curOrgSource:
            projectN = countProject[org_id][project_id]
            projectPub = countProjectPub[org_id][project_id]
            projectPub = countProjectGood[org_id][project_id]
            projectTot = countProjectTotal[project_id]
            projectTitle = titleBadge(
                project_id, "p", projectPub, projectPub, projectN, projectTot
            )
            curOrgDest.append(
                dict(title=str(projectTitle), folder=True, children=[])
            )
            curProjectDest = curOrgDest[-1]["children"]
            curProjectSource = curOrgSource[project_id]
            for user_id in curProjectSource:
                userN = countUser[org_id][project_id][user_id]
                userPub = countUserPub[org_id][project_id][user_id]
                userGood = countUserGood[org_id][project_id][user_id]
                userTot = countUserTotal[user_id]
                userTitle = titleBadge(
                    user_id, "u", userPub, userGood, userN, userTot
                )
                curProjectDest.append(
                    dict(title=str(userTitle), folder=True, children=[])
                )
                curUserDest = curProjectDest[-1]["children"]
                curUserSource = curProjectSource[user_id]
                for query_id in curUserSource:
                    projectQueryInfo = objInfo["q"][query_id]
                    (
                        orgName,
                        org_id,
                        projectName,
                        project_id,
                        userName,
                        user_id,
                        queryName,
                        queryShared,
                        queryOwn,
                    ) = projectQueryInfo[""]
                    queryPub = projectQueryInfo["publ"]
                    queryGood = projectQueryInfo["good"]
                    queryVersions = projectQueryInfo["v"]
                    queryOwnRep = "r" if queryOwn else "v"
                    queryMyRep = "qmy" if queryOwn else ""
                    querySharedRep = "" if queryShared else "qpriv"
                    queryIdRep = iEncode("q", query_id)
                    rename = dedent(
                        f"""<a
                        class="{queryOwnRep}_q"
                        obj_id="{queryIdRep}"
                        href="#"></a>"""
                    )
                    versionRep = " ".join(
                        formatVersion(
                            "q", query_id, v, queryVersions[VERSION_INDEX[v]]
                        )
                        for v in VERSION_ORDER
                    )
                    curUserDest.append(
                        dict(
                            title=dedent(
                                f"""{versionRep} <a
                                class="q {queryMyRep} {querySharedRep}"
                                n="1"
                                query_id="{query_id}"
                                href="#">{hEsc(queryName)}</a>
                                <a class="md" href="#"></a> {rename}"""
                            ),
                            key=f"q{query_id}",
                            folder=False,
                        )
                    )
    return dict(data=json.dumps(dest))