def test_measurement_with_strain_size_1(self):
        measurement_intent = MeasurementIntent()
        measurement_intent.set_measurement_type(
            ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
        measurement_intent.add_file_type('SPREADSHEET')

        strain_name = NamedLink('and_00',
                                link='www.synbiohub.org/example/strain')
        strain = StrainIntent(strain_name)
        strain.set_strain_lab_name('my_lab')
        strain.set_strain_common_name('my_strain')
        measurement_intent.add_strain(strain)

        strain_structure_request = {
            dc_constants.SBH_URI: 'www.synbiohub.org/example/strain',
            dc_constants.LABEL: 'my_strain',
            dc_constants.LAB_ID: 'name.my_lab.and_00'
        }
        self.assertEqual(
            {
                dc_constants.MEASUREMENT_TYPE:
                ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
                dc_constants.FILE_TYPE: ['SPREADSHEET'],
                dc_constants.STRAINS: [strain_structure_request]
            }, measurement_intent.to_structured_request())
    def test_measurement_with_neg_control_content_size_1(self):
        measurement_intent = MeasurementIntent()
        measurement_intent.set_measurement_type(
            ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
        measurement_intent.add_file_type('SPREADSHEET')

        content = ContentIntent()
        num_neg_control = NamedIntegerValue(
            NamedLink(ip_constants.HEADER_NUMBER_OF_NEGATIVE_CONTROLS_VALUE),
            2)
        content.set_numbers_of_negative_controls([num_neg_control])
        measurement_intent.add_content(content)

        content_structure_request = [{
            dc_constants.NAME: {
                dc_constants.LABEL:
                ip_constants.HEADER_NUMBER_OF_NEGATIVE_CONTROLS_VALUE,
                dc_constants.SBH_URI: dc_constants.NO_PROGRAM_DICTIONARY
            },
            dc_constants.VALUE: 2
        }]
        self.assertDictEqual(
            {
                dc_constants.CONTENTS: [content_structure_request],
                dc_constants.FILE_TYPE: ['SPREADSHEET'],
                dc_constants.MEASUREMENT_TYPE:
                ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE
            }, measurement_intent.to_structured_request())
 def test_measurement_with_ods_size_1(self):
     measurement_intent = MeasurementIntent()
     measurement_intent.set_measurement_type(
         ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
     measurement_intent.add_file_type('SPREADSHEET')
     measurement_intent.add_optical_density(3.0)
     self.assertEqual(
         {
             dc_constants.MEASUREMENT_TYPE:
             ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
             dc_constants.FILE_TYPE: ['SPREADSHEET'],
             dc_constants.ODS: [3.0]
         }, measurement_intent.to_structured_request())
 def test_measurement_with_replicate_size_1(self):
     measurement_intent = MeasurementIntent()
     measurement_intent.set_measurement_type(
         ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
     measurement_intent.add_file_type('SPREADSHEET')
     measurement_intent.add_replicate(5)
     self.assertEqual(
         {
             dc_constants.MEASUREMENT_TYPE:
             ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
             dc_constants.FILE_TYPE: ['SPREADSHEET'],
             dc_constants.REPLICATES: [5]
         }, measurement_intent.to_structured_request())
    def test_measurement_with_control_type(self):
        measurement_intent = MeasurementIntent()
        measurement_intent.set_measurement_type(
            ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
        measurement_intent.add_file_type('SPREADSHEET')

        control = ControlIntent()
        control.set_control_type('HIGH_FITC')
        measurement_intent.add_control(control)

        control_structure_request = {dc_constants.TYPE: 'HIGH_FITC'}
        self.assertEqual(
            {
                dc_constants.MEASUREMENT_TYPE:
                ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
                dc_constants.FILE_TYPE: ['SPREADSHEET'],
                dc_constants.CONTROLS: [control_structure_request]
            }, measurement_intent.to_structured_request())
 def test_measurement_with_file_type_and_measurement_type(self):
     measurement_intent = MeasurementIntent()
     measurement_intent.set_measurement_type(
         ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
     measurement_intent.add_file_type('SPREADSHEET')
     self.assertEqual(
         {
             dc_constants.MEASUREMENT_TYPE:
             ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
             dc_constants.FILE_TYPE: ['SPREADSHEET']
         }, measurement_intent.to_structured_request())
    def test_measurement_with_temperature_size_1(self):
        measurement_intent = MeasurementIntent()
        measurement_intent.set_measurement_type(
            ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
        measurement_intent.add_file_type('SPREADSHEET')
        temperature = TemperatureIntent(75.0, 'fahrenheit')
        measurement_intent.add_temperature(temperature)

        temperature_structure_request = {
            dc_constants.VALUE: 75.0,
            dc_constants.UNIT: 'fahrenheit'
        }
        self.assertEqual(
            {
                dc_constants.MEASUREMENT_TYPE:
                ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
                dc_constants.FILE_TYPE: ['SPREADSHEET'],
                dc_constants.TEMPERATURES: [temperature_structure_request]
            }, measurement_intent.to_structured_request())
    def test_measurement_with_timepoint_size_1(self):
        measurement_intent = MeasurementIntent()
        measurement_intent.set_measurement_type(
            ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
        measurement_intent.add_file_type('SPREADSHEET')

        timepoint = TimepointIntent(12.0, 'hour')
        measurement_intent.add_timepoint(timepoint)

        timepoint_structure_request = {
            dc_constants.VALUE: 12.0,
            dc_constants.UNIT: 'hour'
        }
        self.assertEqual(
            {
                dc_constants.MEASUREMENT_TYPE:
                ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
                dc_constants.FILE_TYPE: ['SPREADSHEET'],
                dc_constants.TIMEPOINTS: [timepoint_structure_request]
            }, measurement_intent.to_structured_request())
 def _process_protocol_measurement_type(self, measurement_types):
     for opil_measurement_type in measurement_types:
         measurement_intent = MeasurementIntent()
         if opil_measurement_type.type == ip_constants.NCIT_FLOW_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_FLOW)
         elif opil_measurement_type.type == ip_constants.NCIT_RNA_SEQ_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_RNA_SEQ)
         elif opil_measurement_type.type == ip_constants.NCIT_DNA_SEQ_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_DNA_SEQ)
         elif opil_measurement_type.type == ip_constants.NCIT_PROTEOMICS_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_PROTEOMICS)
         elif opil_measurement_type.type == ip_constants.NCIT_SEQUENCING_CHROMATOGRAM_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_SEQUENCING_CHROMATOGRAM)
         elif opil_measurement_type.type == ip_constants.SD2_AUTOMATED_TEST_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_AUTOMATED_TEST)
         elif opil_measurement_type.type == ip_constants.NCIT_CFU_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_CFU)
         elif opil_measurement_type.type == ip_constants.NCIT_PLATE_READER_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_PLATE_READER)
         elif opil_measurement_type.type == ip_constants.SD2_CONDITION_SPACE_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
         elif opil_measurement_type.type == ip_constants.SD2_EXPERIMENTAL_DESIGN_URI:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_EXPERIMENTAL_DESIGN)
         elif opil_measurement_type.type == ip_constants.NCIT_FLUORESCENCE_MICROSCOPY:
             measurement_intent.set_measurement_type(ip_constants.MEASUREMENT_TYPE_FLUOESCENE_MICROSCOPY)
         else:
             message = 'Measurement-type %s not supported in Intent parser' % opil_measurement_type.type
             self.validation_errors.append(message)
             continue
         self._measurement_intents.append(measurement_intent)
    def _process_row(self, row_index, control_data):
        row = self._intent_parser_table.get_row(row_index)
        measurement = MeasurementIntent()
        content_intent = ContentIntent()

        row_offset = row_index  # Used for reporting row value to users
        for cell_index in range(len(row)):
            cell = self._intent_parser_table.get_cell(row_index, cell_index)

            # Cell type based on column header
            header_cell = self._intent_parser_table.get_cell(
                self._intent_parser_table.header_row_index(), cell_index)
            cell_type = cell_parser.PARSER.get_header_type(
                header_cell.get_text())

            column_offset = cell_index  # Used for reporting column value to users
            if not cell.get_text().strip() or cell_type in self.IGNORE_COLUMNS:
                continue

            if ip_constants.HEADER_MEASUREMENT_TYPE_TYPE == cell_type:
                self._process_measurement_type(cell, measurement, row_offset,
                                               column_offset)
            elif ip_constants.HEADER_FILE_TYPE_TYPE == cell_type:
                self._process_file_type(cell, measurement, row_offset,
                                        column_offset)
            elif ip_constants.HEADER_REPLICATE_TYPE == cell_type:
                self._process_replicate(cell, measurement, row_offset,
                                        column_offset)
            elif ip_constants.HEADER_STRAINS_TYPE == cell_type:
                self._process_strains(cell, measurement, row_offset,
                                      column_offset)
            elif ip_constants.HEADER_ODS_TYPE == cell_type:
                self._process_ods(cell, measurement, row_offset, column_offset)
            elif ip_constants.HEADER_TEMPERATURE_TYPE == cell_type:
                self._process_temperature(cell, measurement, row_offset,
                                          column_offset)
            elif ip_constants.HEADER_TIMEPOINT_TYPE == cell_type:
                self._process_timepoints(cell, measurement, row_offset,
                                         column_offset)
            elif ip_constants.HEADER_BATCH_TYPE == cell_type:
                self._process_batch(cell, measurement, row_offset,
                                    column_offset)
            elif ip_constants.HEADER_CONTROL_TYPE == cell_type:
                self._process_control(cell, control_data, measurement)
            elif ip_constants.HEADER_NUM_NEG_CONTROL_TYPE == cell_type:
                num_neg_controls = self._process_num_neg_controls(
                    cell, row_offset, column_offset)
                if num_neg_controls:
                    content_intent.set_numbers_of_negative_controls(
                        num_neg_controls)
            elif ip_constants.HEADER_RNA_INHIBITOR_REACTION_TYPE == cell_type:
                rna_inhibitor_reactions = self._process_rna_inhibitor_reaction(
                    cell, row_offset, column_offset)
                if rna_inhibitor_reactions:
                    content_intent.set_rna_inhibitor_reaction_flags(
                        rna_inhibitor_reactions)
            elif ip_constants.HEADER_DNA_REACTION_CONCENTRATION_TYPE == cell_type:
                dna_reaction_concentrations = self._process_dna_reaction_concentration(
                    cell, row_offset, column_offset)
                if dna_reaction_concentrations:
                    content_intent.set_dna_reaction_concentrations(
                        dna_reaction_concentrations)
            elif ip_constants.HEADER_TEMPLATE_DNA_TYPE == cell_type:
                dna_templates = self._process_template_dna(
                    cell, row_offset, column_offset)
                if dna_templates:
                    content_intent.set_template_dna_values(dna_templates)
            elif ip_constants.HEADER_COLUMN_ID_TYPE == cell_type:
                column_ids = self._process_col_id(cell, row_offset,
                                                  column_offset)
                if column_ids:
                    content_intent.set_column_ids(column_ids)
            elif ip_constants.HEADER_ROW_ID_TYPE == cell_type:
                row_ids = self._process_row_id(cell, row_offset, column_offset)
                if row_ids:
                    content_intent.set_row_ids(row_ids)
            elif ip_constants.HEADER_MEASUREMENT_LAB_ID_TYPE == cell_type:
                lab_ids = self._process_lab_id(cell, row_offset, column_offset)
                if lab_ids:
                    content_intent.set_lab_ids(lab_ids)
            else:
                reagents_and_medias = self._process_reagent_or_media(
                    cell, header_cell, row_offset, column_offset)
                self._processed_reagents_and_medias.extend(reagents_and_medias)
                self._has_medias_and_reagents = True
                for reagent_or_media in reagents_and_medias:
                    if isinstance(reagent_or_media, ReagentIntent):
                        content_intent.add_reagent(reagent_or_media)
                    elif isinstance(reagent_or_media, MediaIntent):
                        content_intent.add_media(reagent_or_media)
                    else:
                        self._validation_errors.append(
                            'Expected to process reagent or media but got %s' %
                            isinstance(reagent_or_media))

        if not content_intent.is_empty():
            measurement.add_content(content_intent)
        return measurement
    def test_measurement_with_strain_size_2(self):
        measurement_intent = MeasurementIntent()
        measurement_intent.set_measurement_type(
            ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
        measurement_intent.add_file_type('SPREADSHEET')

        strain_value1 = NamedLink('and_00',
                                  link='www.synbiohub.org/example/and_strain')
        strain1 = StrainIntent(strain_value1)
        strain1.set_strain_lab_name('my_lab')
        strain1.set_strain_common_name('and_strain')
        measurement_intent.add_strain(strain1)

        strain_value2 = NamedLink('or_gate',
                                  link='www.synbiohub.org/example/or_strain')
        strain2 = StrainIntent(strain_value2)
        strain2.set_strain_lab_name('my_lab')
        strain2.set_strain_common_name('or_strain')
        measurement_intent.add_strain(strain2)

        strain_structure_request = [{
            dc_constants.SBH_URI: 'www.synbiohub.org/example/and_strain',
            dc_constants.LABEL: 'and_strain',
            dc_constants.LAB_ID: 'name.my_lab.and_00'
        }, {
            dc_constants.SBH_URI: 'www.synbiohub.org/example/or_strain',
            dc_constants.LABEL: 'or_strain',
            dc_constants.LAB_ID: 'name.my_lab.or_gate'
        }]
        self.assertEqual(
            {
                dc_constants.MEASUREMENT_TYPE:
                ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE,
                dc_constants.FILE_TYPE: ['SPREADSHEET'],
                dc_constants.STRAINS: strain_structure_request
            }, measurement_intent.to_structured_request())
 def test_measurement_with_missing_measurement_type(self):
     measurement_intent = MeasurementIntent()
     measurement_intent.add_file_type('SPREADSHEET')
     with self.assertRaises(IntentParserException):
         measurement_intent.to_structured_request()
 def test_measurement_with_missing_file_type(self):
     measurement_intent = MeasurementIntent()
     measurement_intent.set_measurement_type(
         ip_constants.MEASUREMENT_TYPE_CONDITION_SPACE)
     with self.assertRaises(IntentParserException):
         measurement_intent.to_structured_request()