Skip to content
__init__.py 3.95 KiB
Newer Older
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from flask import Blueprint, session, current_app
from utils.decorator import login_required, admin_required
from utils.template import my_render_template
from NIST.fingerprint.labels import FINGER_POSITION_CODE, PALM_POSITION_CODE
segments_position_code = dict( FINGER_POSITION_CODE, **PALM_POSITION_CODE )

afis_view = Blueprint( "afis", __name__, template_folder = "templates" )

@afis_view.route( "/admin/afis/list" )
def admin_list_folders():
Marco De Donno's avatar
Marco De Donno committed
    return "ok"
@afis_view.route( "/afis/list" )
@login_required
def list_folders():
    user_id = session.get( "user_id", None )
    
    sql = """
        SELECT
            cnm_assignment.folder_uuid,
            tmp.*
        FROM cnm_assignment
        
        LEFT JOIN cnm_folder ON cnm_assignment.folder_uuid = cnm_folder.folder_uuid
        LEFT JOIN (
            SELECT DISTINCT ON ( donor_id, pc ) *
            FROM donor_segments_v
        ) AS tmp ON cnm_folder.donor_id = tmp.donor_id AND cnm_folder.pc = tmp.pc
        
        WHERE cnm_assignment.user_id = %s
        
        ORDER BY
            tmp.donor_id ASC,
            tmp.pc ASC
    """
    folder_list = config.db.query_fetchall( sql, ( user_id, ) )
    
    return my_render_template(
        "afis/folder_list.html",
        folder_list = folder_list
    )
@afis_view.route( "/admin/target/<uuid>" )
@admin_required
def admin_show_target( uuid ):
    return show_folder_inner( uuid, True )

@afis_view.route( "/afis/<uuid>" )
def show_folder( uuid ):
    return show_folder_inner( uuid, False )

def show_folder_inner( uuid, admin ):
    sql = """
        SELECT
            cnm_assignment.folder_uuid,
            donor_segments_v.*
        FROM cnm_assignment
        
        LEFT JOIN cnm_folder ON cnm_assignment.folder_uuid = cnm_folder.folder_uuid
        LEFT JOIN fingers_same ON cnm_folder.pc = fingers_same.base_finger
        RIGHT JOIN donor_segments_v ON
            cnm_folder.donor_id = donor_segments_v.donor_id AND
            fingers_same.target = donor_segments_v.pc
        
        WHERE cnm_assignment.folder_uuid = %s
        
        ORDER BY
            donor_segments_v.donor_id ASC,
            donor_segments_v.pc ASC
    """
    segments_list = config.db.query_fetchall( sql, ( uuid, ) )
    
    sql = """
        SELECT uuid
        FROM cnm_data
        WHERE folder_uuid = %s
    """
    annotation_list = config.db.query_fetchall( sql, ( uuid, ) )
    
    sql = """
        SELECT
            submissions.uuid,
            cnm_folder.pc,
            users.username
        FROM cnm_folder
        INNER JOIN submissions ON cnm_folder.donor_id = submissions.donor_id
        INNER JOIN users ON cnm_folder.donor_id = users.id
        WHERE cnm_folder.folder_uuid = %s
    """
    submission_id, pc, username = config.db.query_fetchone( sql, ( uuid, ) )
    finger_name = "{} (F{})".format( segments_position_code[ pc ], pc )
    
    return my_render_template(
        target_uuid = uuid,
        segments_list = segments_list,
        annotation_list = annotation_list,
        submission_id = submission_id,
        username = username,
        finger_name = finger_name
@afis_view.route( "/admin/<uuid>/target/list" )
def admin_show_target_list( uuid ):
    sql = """
        SELECT DISTINCT ON ( donor_segments_v.pc )
            donor_segments_v.*,
            cnm_folder.folder_uuid
        FROM donor_segments_v
        LEFT JOIN submissions ON submissions.donor_id = donor_segments_v.donor_id
        LEFT JOIN cnm_folder ON
            donor_segments_v.donor_id = cnm_folder.donor_id AND
            donor_segments_v.pc = cnm_folder.pc
        WHERE submissions.uuid = %s
    """
    segments_list = config.db.query_fetchall( sql, ( uuid, ) )
    
    return my_render_template(
        "admin/folder_list.html",
        segments_list = segments_list,
        segments_position_code = segments_position_code