Example #1
0
def create_project_report_on_gdocs(fc, qc, encoded_credentials, gdocs_folder):
    """Upload the sample read distribution for a project to google docs.
    """
    success = True
    # Create a client class which will make HTTP requests with Google Docs server.
    client = g_spreadsheet.get_client(encoded_credentials)
    doc_client = g_document.get_client(encoded_credentials)

    # Get a reference to the parent folder
    parent_folder = g_document.get_folder(doc_client, gdocs_folder)

    if not parent_folder:
        parent_folder = g_document.add_folder(doc_client, gdocs_folder)
        log.info("Folder {!r} created".format(gdocs_folder))

    parent_folder_title = _from_unicode(parent_folder.title.text)

    # Loop over the projects
    for project_name in fc.get_project_names():

        # Get a flowcell object containing just the data for the project
        project_fc = fc.prune_to_project(project_name)

        ssheet_title = project_name + "_sequencing_results"
        ssheet = g_spreadsheet.get_spreadsheet(client, ssheet_title)
        if not ssheet:
            ssheet = g_document.add_spreadsheet(doc_client, ssheet_title)
            g_document.move_to_folder(doc_client, ssheet, parent_folder)
            ssheet = g_spreadsheet.get_spreadsheet(client, ssheet_title)
            log.info("Spreadsheet {!r} created in " \
                     "folder {!r}".format(_from_unicode(ssheet.title.text), \
                                          parent_folder_title))

        success &= bc_metrics._write_project_report_to_gdocs(
            client, ssheet, project_fc)
        success &= bc_metrics.write_project_report_summary_to_gdocs(
            client, ssheet)
        success &= qc_metrics.write_run_report_to_gdocs(project_fc, \
                                                        qc, \
                                                        ssheet_title, \
                                                        encoded_credentials)

        log.info("Sequencing results report written to spreadsheet '%s'" \
            % _from_unicode(ssheet.title.text))

    return success
Example #2
0
def create_project_report_on_gdocs(fc, qc, encoded_credentials, gdocs_folder):
    """Upload the sample read distribution for a project to google docs.
    """
    success = True
    # Create a client class which will make HTTP requests with Google Docs server.
    client = g_spreadsheet.get_client(encoded_credentials)
    doc_client = g_document.get_client(encoded_credentials)

    # Get a reference to the parent folder
    parent_folder = g_document.get_folder(doc_client, gdocs_folder)

    if not parent_folder:
        parent_folder = g_document.add_folder(doc_client, gdocs_folder)
        log.info("Folder {!r} created".format(gdocs_folder))

    parent_folder_title = _from_unicode(parent_folder.title.text)

    # Loop over the projects
    for project_name in fc.get_project_names():

        # Get a flowcell object containing just the data for the project
        project_fc = fc.prune_to_project(project_name)

        ssheet_title = project_name + "_sequencing_results"
        ssheet = g_spreadsheet.get_spreadsheet(client, ssheet_title)
        if not ssheet:
            ssheet = g_document.add_spreadsheet(doc_client, ssheet_title)
            g_document.move_to_folder(doc_client, ssheet, parent_folder)
            ssheet = g_spreadsheet.get_spreadsheet(client, ssheet_title)
            log.info("Spreadsheet {!r} created in " \
                     "folder {!r}".format(_from_unicode(ssheet.title.text), \
                                          parent_folder_title))

        success &= bc_metrics._write_project_report_to_gdocs(client, ssheet, project_fc)
        success &= bc_metrics.write_project_report_summary_to_gdocs(client, ssheet)
        success &= qc_metrics.write_run_report_to_gdocs(project_fc, \
                                                        qc, \
                                                        ssheet_title, \
                                                        encoded_credentials)

        log.info("Sequencing results report written to spreadsheet '%s'" \
            % _from_unicode(ssheet.title.text))

    return success
Example #3
0
def create_report_on_gdocs(fc_date, fc_name, run_info_yaml, dirs, config):
    """Create reports on gdocs containing both demultiplexed read counts and QC data.
    """
    success = True
    try:
        # Inject the fc_date and fc_name in the email subject
        def record_processor(record):
            return record.extra.__setitem__('run', "%s_%s" % (fc_date, fc_name))

        # Parse the run_info.yaml file
        log.debug("Loading this run_info: {}".format(run_info_yaml))
        with open(run_info_yaml, "r") as fh:
            run_info = yaml.load(fh)

        # Get the gdocs account credentials
        encoded_credentials = get_credentials(config)
        if not encoded_credentials:
            log.warn("Could not find Google Docs account credentials in configuration. \
                      No sequencing report was written")
            return False

        # Get the required parameters from the post_process.yaml configuration file
        gdocs = config.get("gdocs_upload", None)

        # Add email notification
        email = gdocs.get("gdocs_email_notification", None)
        smtp_host = config.get("smtp_host", "")
        smtp_port = config.get("smtp_port", "")
        log_handler = create_log_handler({'email': email, \
                                          'smtp_host': smtp_host, \
                                          'smtp_port': smtp_port}, True)

    except Exception as e:
        success = False
        log.warn("Encountered exception when writing sequencing report to Google Docs: %s" % e)

    with log_handler.applicationbound(), logbook.Processor(record_processor):
        try:
            log.info("Started creating sequencing report on Google docs for %s_%s on %s" \
                % (fc_date, fc_name, datetime.datetime.now().isoformat()))

            # Get a flowcell object
            fc = Flowcell(fc_name, fc_date, run_info, dirs.get("work", None))

            # Get the GDocs demultiplex result file title
            gdocs_dmplx_spreadsheet = gdocs.get("gdocs_dmplx_file", None)
            # Get the GDocs QC file title
            gdocs_qc_spreadsheet = gdocs.get("gdocs_qc_file", None)

            # FIXME: Make the bc stuff use the Flowcell module
            if gdocs_dmplx_spreadsheet is not None:
                # Upload the data
                bc_metrics.write_run_report_to_gdocs(fc, fc_date, \
                    fc_name, gdocs_dmplx_spreadsheet, encoded_credentials, append=True)
            else:
                log.warn("Could not find Google Docs demultiplex results file \
                    title in configuration. No demultiplex counts were \
                    written to Google Docs for %s_%s" % (fc_date, fc_name))

            # Parse the QC metrics
            try:
                qc = RTAQCMetrics(dirs.get("flowcell", None))
            except:
                qc = None

            if gdocs_qc_spreadsheet is not None and qc is not None:
                qc_metrics.write_run_report_to_gdocs(fc, qc, gdocs_qc_spreadsheet, encoded_credentials)
            else:
                log.warn("Could not find Google Docs QC file title in configuration. " \
                         "No QC data were written to Google Docs " \
                         "for %s_%s".format(fc_date, fc_name))

            # Get the projects parent folder
            projects_folder = gdocs.get("gdocs_projects_folder", None)

            # Write the bc project summary report
            if projects_folder is not None:
                create_project_report_on_gdocs(fc, qc, \
                    encoded_credentials, projects_folder)

        except Exception as e:
            success = False
            log.warn("Encountered exception when writing sequencing report " \
                     "to Google Docs: {}".format(e))

        if success:
            log.info("Sequencing report successfully created on Google " \
                     "docs for {}_{} on {}".format(fc_date, fc_name, datetime.datetime.now().isoformat()))
        else:
            log.warn("Encountered exception when writing sequencing " \
                     "report for %s_%s to Google docs on %s" \
                     % (fc_date, fc_name, datetime.datetime.now().isoformat()))

    return success
Example #4
0
def create_report_on_gdocs(fc_date, fc_name, run_info_yaml, dirs, config):
    """Create reports on gdocs containing both demultiplexed read counts and QC data.
    """
    success = True
    try:
        # Inject the fc_date and fc_name in the email subject
        def record_processor(record):
            return record.extra.__setitem__('run',
                                            "%s_%s" % (fc_date, fc_name))

        # Parse the run_info.yaml file
        log.debug("Loading this run_info: {}".format(run_info_yaml))
        with open(run_info_yaml, "r") as fh:
            run_info = yaml.load(fh)

        # Get the gdocs account credentials
        encoded_credentials = get_credentials(config)
        if not encoded_credentials:
            log.warn(
                "Could not find Google Docs account credentials in configuration. \
                      No sequencing report was written")
            return False

        # Get the required parameters from the post_process.yaml configuration file
        gdocs = config.get("gdocs_upload", None)

        # Add email notification
        email = gdocs.get("gdocs_email_notification", None)
        smtp_host = config.get("smtp_host", "")
        smtp_port = config.get("smtp_port", "")
        log_handler = create_log_handler({'email': email, \
                                          'smtp_host': smtp_host, \
                                          'smtp_port': smtp_port}, True)

    except Exception as e:
        success = False
        log.warn(
            "Encountered exception when writing sequencing report to Google Docs: %s"
            % e)

    with log_handler.applicationbound(), logbook.Processor(record_processor):
        try:
            log.info("Started creating sequencing report on Google docs for %s_%s on %s" \
                % (fc_date, fc_name, datetime.datetime.now().isoformat()))

            # Get a flowcell object
            fc = Flowcell(fc_name, fc_date, run_info, dirs.get("work", None))

            # Get the GDocs demultiplex result file title
            gdocs_dmplx_spreadsheet = gdocs.get("gdocs_dmplx_file", None)
            # Get the GDocs QC file title
            gdocs_qc_spreadsheet = gdocs.get("gdocs_qc_file", None)

            # FIXME: Make the bc stuff use the Flowcell module
            if gdocs_dmplx_spreadsheet is not None:
                # Upload the data
                bc_metrics.write_run_report_to_gdocs(fc, fc_date, \
                    fc_name, gdocs_dmplx_spreadsheet, encoded_credentials, append=True)
            else:
                log.warn("Could not find Google Docs demultiplex results file \
                    title in configuration. No demultiplex counts were \
                    written to Google Docs for %s_%s" % (fc_date, fc_name))

            # Parse the QC metrics
            try:
                qc = RTAQCMetrics(dirs.get("flowcell", None))
            except:
                qc = None

            if gdocs_qc_spreadsheet is not None and qc is not None:
                qc_metrics.write_run_report_to_gdocs(fc, qc,
                                                     gdocs_qc_spreadsheet,
                                                     encoded_credentials)
            else:
                log.warn("Could not find Google Docs QC file title in configuration. " \
                         "No QC data were written to Google Docs " \
                         "for %s_%s".format(fc_date, fc_name))

            # Get the projects parent folder
            projects_folder = gdocs.get("gdocs_projects_folder", None)

            # Write the bc project summary report
            if projects_folder is not None:
                create_project_report_on_gdocs(fc, qc, \
                    encoded_credentials, projects_folder)

        except Exception as e:
            success = False
            log.warn("Encountered exception when writing sequencing report " \
                     "to Google Docs: {}".format(e))

        if success:
            log.info("Sequencing report successfully created on Google " \
                     "docs for {}_{} on {}".format(fc_date, fc_name, datetime.datetime.now().isoformat()))
        else:
            log.warn("Encountered exception when writing sequencing " \
                     "report for %s_%s to Google docs on %s" \
                     % (fc_date, fc_name, datetime.datetime.now().isoformat()))

    return success