<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def identify_triggers( cfg, sources, sinks, lattice, nosec_lines ):
 """Identify sources, sinks and sanitisers in a CFG. Args: cfg(CFG):
 CFG to find sources, sinks and sanitisers in. sources(tuple):
 list of sources, a source is a (source, sanitiser) tuple. sinks(tuple):
 list of sources, a sink is a (sink, sanitiser) tuple. nosec_lines(set):
 lines with # nosec whitelisting Returns: Triggers tuple with sink and source nodes and a sanitiser node dict. """

    assignment_nodes = filter_cfg_nodes(cfg, AssignmentNode)
    tainted_nodes = filter_cfg_nodes(cfg, TaintedNode)
    tainted_trigger_nodes = [
        TriggerNode(
            Source('Framework function URL parameter'),
            cfg_node=node
        ) for node in tainted_nodes
    ]
    sources_in_file = find_triggers(assignment_nodes, sources, nosec_lines)
    sources_in_file.extend(tainted_trigger_nodes)

    find_secondary_sources(assignment_nodes, sources_in_file, lattice)

    sinks_in_file = find_triggers(cfg.nodes, sinks, nosec_lines)

    sanitiser_node_dict = build_sanitiser_node_dict(cfg, sinks_in_file)

    return Triggers(sources_in_file, sinks_in_file, sanitiser_node_dict)