def _get_role_area_ids(parentAreaIds, areaType, voteTypes=[]):
    from orm.entities import Area, Election

    _role_area_ids = []

    parentAreas = []
    if parentAreaIds is not None and len(parentAreaIds) > 0:
        parentAreas = db.session.query(Area.Model).filter(
            Area.Model.areaId.in_(parentAreaIds)).all()

    if len(parentAreas) > 0:
        associated_areas_subquery = Area.get_associated_areas_query(
            areas=parentAreas, areaType=areaType).subquery()

        query = db.session.query(associated_areas_subquery.c.areaId)

        if len(voteTypes) > 0:
            query = query.filter(
                Election.Model.electionId ==
                associated_areas_subquery.c.electionId,
                Election.Model.voteType.in_(voteTypes))

        _role_area_ids = query.group_by(
            associated_areas_subquery.c.areaId).all()

    return _role_area_ids
def get_root_token(election):
    electionId = election.electionId

    electoral_districts = Area.get_associated_areas_query(
        areas=[],
        areaType=AreaTypeEnum.ElectoralDistrict,
        electionId=electionId).all()

    countries = Area.get_associated_areas_query(areas=[],
                                                areaType=AreaTypeEnum.Country,
                                                electionId=electionId).all()

    jwt_payload = {
        ROLE_CLAIM: [
            ROLE_PREFIX + ADMIN_ROLE, ROLE_PREFIX + DATA_EDITOR_ROLE,
            ROLE_PREFIX + POLLING_DIVISION_REPORT_VIEWER_ROLE,
            ROLE_PREFIX + POLLING_DIVISION_REPORT_VERIFIER_ROLE,
            ROLE_PREFIX + ELECTORAL_DISTRICT_REPORT_VIEWER_ROLE,
            ROLE_PREFIX + ELECTORAL_DISTRICT_REPORT_VERIFIER_ROLE,
            ROLE_PREFIX + NATIONAL_REPORT_VIEWER_ROLE,
            ROLE_PREFIX + NATIONAL_REPORT_VERIFIER_ROLE,
            ROLE_PREFIX + EC_LEADERSHIP_ROLE
        ],
        SUB:
        "*****@*****.**",
        AREA_CLAIM_PREFIX + ADMIN_ROLE:
        str([]),
        AREA_CLAIM_PREFIX + DATA_EDITOR_ROLE:
        str([{
            "areaId": electoral_district.areaId,
            "areaName": electoral_district.areaName
        } for electoral_district in electoral_districts]),
        AREA_CLAIM_PREFIX + POLLING_DIVISION_REPORT_VIEWER_ROLE:
        str([{
            "areaId": electoral_district.areaId,
            "areaName": electoral_district.areaName
        } for electoral_district in electoral_districts]),
        AREA_CLAIM_PREFIX + POLLING_DIVISION_REPORT_VERIFIER_ROLE:
        str([{
            "areaId": electoral_district.areaId,
            "areaName": electoral_district.areaName
        } for electoral_district in electoral_districts]),
        AREA_CLAIM_PREFIX + ELECTORAL_DISTRICT_REPORT_VIEWER_ROLE:
        str([{
            "areaId": electoral_district.areaId,
            "areaName": electoral_district.areaName
        } for electoral_district in electoral_districts]),
        AREA_CLAIM_PREFIX + ELECTORAL_DISTRICT_REPORT_VERIFIER_ROLE:
        str([{
            "areaId": electoral_district.areaId,
            "areaName": electoral_district.areaName
        } for electoral_district in electoral_districts]),
        AREA_CLAIM_PREFIX + NATIONAL_REPORT_VIEWER_ROLE:
        str([{
            "areaId": country.areaId,
            "areaName": country.areaName
        } for country in countries]),
        AREA_CLAIM_PREFIX + NATIONAL_REPORT_VERIFIER_ROLE:
        str([{
            "areaId": country.areaId,
            "areaName": country.areaName
        } for country in countries]),
        AREA_CLAIM_PREFIX + EC_LEADERSHIP_ROLE:
        str([{
            "areaId": country.areaId,
            "areaName": country.areaName
        } for country in countries])
    }

    # Generate a token with claims for everything.
    key = "jwt_secret"
    encoded_jwt_token = jwt.encode(jwt_payload, key)

    return encoded_jwt_token
def get_root_token(election):
    from orm.entities import Area
    from orm.enums import AreaTypeEnum

    provinces = Area.get_associated_areas_query(
        areas=[],
        areaType=AreaTypeEnum.Province,
        electionId=election.election.electionId).all()
    administrative_districts = Area.get_associated_areas_query(
        areas=[],
        areaType=AreaTypeEnum.AdministrativeDistrict,
        electionId=election.election.electionId).all()
    countries = Area.get_associated_areas_query(
        areas=[],
        areaType=AreaTypeEnum.Country,
        electionId=election.election.electionId).all()

    jwt_payload = {
        ROLE_CLAIM: [
            ROLE_PREFIX + ADMIN_ROLE, ROLE_PREFIX + DATA_EDITOR_ROLE,
            ROLE_PREFIX + POLLING_DIVISION_REPORT_VIEWER_ROLE,
            ROLE_PREFIX + POLLING_DIVISION_REPORT_VERIFIER_ROLE,
            ROLE_PREFIX + ADMINISTRATIVE_DISTRICT_REPORT_VIEWER_ROLE,
            ROLE_PREFIX + ADMINISTRATIVE_DISTRICT_REPORT_VERIFIER_ROLE,
            ROLE_PREFIX + PROVINCIAL_REPORT_VIEWER_ROLE,
            ROLE_PREFIX + PROVINCIAL_REPORT_VERIFIER_ROLE,
            ROLE_PREFIX + NATIONAL_REPORT_VIEWER_ROLE,
            ROLE_PREFIX + NATIONAL_REPORT_VERIFIER_ROLE,
            ROLE_PREFIX + EC_LEADERSHIP_ROLE
        ],
        SUB:
        "*****@*****.**",
        AREA_CLAIM_PREFIX + ADMIN_ROLE:
        str([]),
        AREA_CLAIM_PREFIX + DATA_EDITOR_ROLE:
        str([{
            "areaId": administrative_district.areaId,
            "areaName": administrative_district.areaName
        } for administrative_district in administrative_districts]),
        AREA_CLAIM_PREFIX + POLLING_DIVISION_REPORT_VIEWER_ROLE:
        str([{
            "areaId": administrative_district.areaId,
            "areaName": administrative_district.areaName
        } for administrative_district in administrative_districts]),
        AREA_CLAIM_PREFIX + POLLING_DIVISION_REPORT_VERIFIER_ROLE:
        str([{
            "areaId": administrative_district.areaId,
            "areaName": administrative_district.areaName
        } for administrative_district in administrative_districts]),
        AREA_CLAIM_PREFIX + ADMINISTRATIVE_DISTRICT_REPORT_VIEWER_ROLE:
        str([{
            "areaId": administrative_district.areaId,
            "areaName": administrative_district.areaName
        } for administrative_district in administrative_districts]),
        AREA_CLAIM_PREFIX + ADMINISTRATIVE_DISTRICT_REPORT_VERIFIER_ROLE:
        str([{
            "areaId": administrative_district.areaId,
            "areaName": administrative_district.areaName
        } for administrative_district in administrative_districts]),
        AREA_CLAIM_PREFIX + PROVINCIAL_REPORT_VIEWER_ROLE:
        str([{
            "areaId": province.areaId,
            "areaName": province.areaName
        } for province in provinces]),
        AREA_CLAIM_PREFIX + PROVINCIAL_REPORT_VERIFIER_ROLE:
        str([{
            "areaId": province.areaId,
            "areaName": province.areaName
        } for province in provinces]),
        AREA_CLAIM_PREFIX + NATIONAL_REPORT_VIEWER_ROLE:
        str([{
            "areaId": country.areaId,
            "areaName": country.areaName
        } for country in countries]),
        AREA_CLAIM_PREFIX + NATIONAL_REPORT_VERIFIER_ROLE:
        str([{
            "areaId": country.areaId,
            "areaName": country.areaName
        } for country in countries]),
        AREA_CLAIM_PREFIX + EC_LEADERSHIP_ROLE:
        str([{
            "areaId": country.areaId,
            "areaName": country.areaName
        } for country in countries])
    }

    # Generate a token with claims for everything.
    key = "jwt_secret"
    encoded_jwt_token = jwt.encode(jwt_payload, key)

    return encoded_jwt_token