示例#1
0
 def __get_integer_id(self, cell_value, row_index):
     """
     Converts the parsed ID into an integer.
     """
     if isinstance(cell_value, int):
         result = cell_value
     elif isinstance(cell_value, float):
         result = int(cell_value)
     elif isinstance(cell_value, string_types):
         # FIXME: This is highly suspicious - do we really want to parse
         #        1.99999 as 1??
         if '.' in cell_value:
             cell_value = cell_value.split('.')[0]
         try:
             result = int(cell_value)
         except ValueError:
             result = None
             cell_name = '%s%i' \
                         % (label_from_number(self.column_index + 1),
                            row_index + 1)
             msg = 'There is a non-number character in row %i. ' \
                   % (row_index + 1)
             error_msg = self.format_log_message(self.SHEET_NAME, cell_name,
                                                 msg)
             self.add_error(error_msg)
         if not result is None:
             result = int(cell_value)
     return result
示例#2
0
 def __get_integer_id(self, cell_value, row_index):
     """
     Converts the parsed ID into an integer.
     """
     if isinstance(cell_value, int):
         result = cell_value
     elif isinstance(cell_value, float):
         result = int(cell_value)
     elif isinstance(cell_value, string_types):
         # FIXME: This is highly suspicious - do we really want to parse
         #        1.99999 as 1??
         if '.' in cell_value:
             cell_value = cell_value.split('.')[0]
         try:
             result = int(cell_value)
         except ValueError:
             result = None
             cell_name = '%s%i' \
                         % (label_from_number(self.column_index + 1),
                            row_index + 1)
             msg = 'There is a non-number character in row %i. ' \
                   % (row_index + 1)
             error_msg = self.format_log_message(self.SHEET_NAME,
                                                 cell_name, msg)
             self.add_error(error_msg)
         if not result is None:
             result = int(cell_value)
     return result
示例#3
0
 def __check_for_duplicate_id(self, pool_id, row_index):
     """
     Checks whether the current molecule design has been found before.
     """
     if pool_id in self.molecule_design_pool_ids:
         cell_name = '%s%i' % (label_from_number(self.column_index + 1),
                               row_index + 1)
         msg = 'Duplicate molecule design pool ID %i in row %i!' \
               % (pool_id, row_index + 1)
         warning_msg = self.format_log_message(self.SHEET_NAME, cell_name,
                                               msg)
         self.add_warning(warning_msg)
示例#4
0
 def __check_for_duplicate_id(self, pool_id, row_index):
     """
     Checks whether the current molecule design has been found before.
     """
     if pool_id in self.molecule_design_pool_ids:
         cell_name = '%s%i' % (label_from_number(self.column_index + 1),
                               row_index + 1)
         msg = 'Duplicate molecule design pool ID %i in row %i!' \
               % (pool_id, row_index + 1)
         warning_msg = self.format_log_message(self.SHEET_NAME, cell_name,
                                               msg)
         self.add_warning(warning_msg)
示例#5
0
文件: base.py 项目: helixyte/TheLMA
    def get_cell_name(row_index, column_index):
        """
        Convenience method deriving an Excel cell label from a row and
        column index.

        :returns: Cell name.
        :rtype: :class:`str`
        """
        if row_index is None or column_index is None:
            result = None
        else:
            result = '%s%i' \
                     % (label_from_number(column_index + 1), row_index + 1)
        return result
示例#6
0
文件: base.py 项目: papagr/TheLMA
    def get_cell_name(row_index, column_index):
        """
        Convenience method deriving an Excel cell label from a row and
        column index.

        :returns: Cell name.
        :rtype: :class:`str`
        """
        if row_index is None or column_index is None:
            result = None
        else:
            result = '%s%i' \
                     % (label_from_number(column_index + 1), row_index + 1)
        return result
示例#7
0
 def __determine_layout_dimension(self):
     # Makes sure the layout is in the right position and determines
     # the layout dimension.
     self.add_debug('Determine layout dimension ...')
     first_col_value = self.get_cell_value(self.sheet,
                                           self.TOP_LEFT_POSITION[0] + 1,
                                           self.TOP_LEFT_POSITION[1])
     is_layout = first_col_value == 'A'
     if not is_layout:
         msg = 'Error when trying to locate the layout. Please make sure ' \
               'the columns header start in row 2 in column A.'
         self.add_error(msg)
         return None
     row_number = self.get_sheet_row_number(self.sheet)
     col_number = self.get_sheet_column_number(self.sheet)
     rack_row, rack_column = 0, 0
     start_row = self.TOP_LEFT_POSITION[0]
     start_column = self.TOP_LEFT_POSITION[1]
     # Get number of rows, row labels are alphanumeric.
     while True:
         row_cell_value = self.get_cell_value(self.sheet,
                                              (start_row + rack_row + 1),
                                              start_column)
         if row_cell_value != label_from_number(rack_row + 1):
             break
         rack_row += 1
         if (start_row + rack_row + 1) >= row_number:
             break
     # Get number of columns, column labels are numbers.
     while True:
         column_cell_value = self.get_cell_value(
             self.sheet, start_row, (start_column + rack_column + 1))
         if column_cell_value != (rack_column + 1):
             break
         rack_column += 1
         if (start_column + rack_column + 1) >= col_number:
             break
     if not (rack_row, rack_column) in self.RACK_SHAPES:
         msg = 'Invalid layout block shape (%ix%i).' % (rack_row,
                                                        rack_column)
         self.add_error(msg)
     else:
         self.shape = RackShapeParsingContainer(self, rack_row, rack_column)
示例#8
0
文件: base.py 项目: helixyte/TheLMA
 def get_cell_value(self, sheet, row_index, column_index):
     """
     Returns the value of the specified in the given sheet.
     Converts the passed cell value either into
     a ascii string (if basestring) or a number (if non_string).
     """
     cell_value = sheet.cell_value(row_index, column_index)
     cell_name = '%s%i' % (label_from_number(column_index + 1),
                           row_index + 1)
     sheet_name = self.get_sheet_name(sheet)
     conv_value = None
     if isinstance(cell_value, string_types):
         try:
             conv_value = ascii_native_(cell_value)
         except UnicodeEncodeError:
             msg = 'Unknown character in cell %s (sheet "%s"). Remove ' \
                   'or replace the character, please.' \
                   % (cell_name, sheet_name)
             self.add_error(msg)
         else:
             if conv_value == '':
                 conv_value = None
             else:
                 # Try to convert to an int or float.
                 try:
                     conv_value = int(conv_value)
                 except ValueError:
                     try:
                         conv_value = float(conv_value)
                     except ValueError:
                         pass
     elif isinstance(cell_value, (float, int)):
         if is_valid_number(value=cell_value, is_integer=True):
             conv_value = int(cell_value)
         else:
             conv_value = cell_value
     else:
         msg = 'There is some unknown content in cell %s (sheet %s).' \
               % (cell_name, sheet_name)
         self.add_error(msg)
     return conv_value
示例#9
0
文件: base.py 项目: helixyte/TheLMA
 def __parse_layout_shape(self, start_row, start_col):
     """
     Determines the dimensions of plate layout definition.
     """
     rack_row = 0
     rack_col = 0
     # Get number of rows, row labels are alphanumeric.
     while rack_row + start_row + 2 < self._row_number:
         row_value = self._get_cell_value(start_row + rack_row + 1,
                                          start_col)
         if row_value != label_from_number(rack_row + 1):
             break
         rack_row += 1
     # Get number of columns, column labels are numbers.
     while start_col + rack_col + 1 < self._col_number:
         col_value = self._get_cell_value(start_row,
                                          start_col + rack_col + 1)
         if col_value != rack_col + 1:
             break
         rack_col += 1
     if not (rack_row, rack_col) in self._parser.allowed_rack_dimensions:
         msg = 'Invalid layout block shape (%ix%i). Make sure you ' \
               'have placed an "%s" maker, too.' % (rack_row, rack_col,
                                                    self._END_MARKER)
         self._create_error(msg, self._get_cell_name(start_row, start_col))
         result = None
     else:
         shape = RackShapeParsingContainer(self._parser, rack_row,
                                           rack_col)
         result = shape
         if self._parser.HAS_COMMON_LAYOUT_DIMENSION:
             if self._parser.shape is None:
                 self._parser.shape = shape
             elif not shape == self._parser.shape:
                 msg = 'There are 2 different layout shapes in the file ' \
                       '(%s and %s). For this parser, all layout ' \
                       'dimensions have to be the same.' \
                       % (shape, self._parser.shape)
                 self._create_error(msg)
                 result = None
     return result
示例#10
0
 def __determine_layout_dimension(self):
     # Makes sure the layout is in the right position and determines
     # the layout dimension.
     self.add_debug('Determine layout dimension ...')
     first_col_value = self.get_cell_value(self.sheet,
                 self.TOP_LEFT_POSITION[0] + 1, self.TOP_LEFT_POSITION[1])
     is_layout = first_col_value == 'A'
     if not is_layout:
         msg = 'Error when trying to locate the layout. Please make sure ' \
               'the columns header start in row 2 in column A.'
         self.add_error(msg)
         return None
     row_number = self.get_sheet_row_number(self.sheet)
     col_number = self.get_sheet_column_number(self.sheet)
     rack_row, rack_column = 0, 0
     start_row = self.TOP_LEFT_POSITION[0]
     start_column = self.TOP_LEFT_POSITION[1]
     # Get number of rows, row labels are alphanumeric.
     while True:
         row_cell_value = self.get_cell_value(self.sheet,
                                 (start_row + rack_row + 1), start_column)
         if row_cell_value != label_from_number(rack_row + 1):
             break
         rack_row += 1
         if (start_row + rack_row + 1) >= row_number:
             break
     # Get number of columns, column labels are numbers.
     while True:
         column_cell_value = self.get_cell_value(self.sheet, start_row,
                              (start_column + rack_column + 1))
         if column_cell_value != (rack_column + 1):
             break
         rack_column += 1
         if (start_column + rack_column + 1) >= col_number:
             break
     if not (rack_row, rack_column) in self.RACK_SHAPES:
         msg = 'Invalid layout block shape (%ix%i).' % (rack_row,
                                                        rack_column)
         self.add_error(msg)
     else:
         self.shape = RackShapeParsingContainer(self, rack_row, rack_column)
示例#11
0
文件: base.py 项目: papagr/TheLMA
 def get_cell_value(self, sheet, row_index, column_index):
     """
     Returns the value of the specified in the given sheet.
     Converts the passed cell value either into
     a ascii string (if basestring) or a number (if non_string).
     """
     cell_value = sheet.cell_value(row_index, column_index)
     cell_name = '%s%i' % (label_from_number(column_index + 1),
                           row_index + 1)
     sheet_name = self.get_sheet_name(sheet)
     conv_value = None
     if isinstance(cell_value, string_types):
         try:
             conv_value = ascii_native_(cell_value)
         except UnicodeEncodeError:
             msg = 'Unknown character in cell %s (sheet "%s"). Remove ' \
                   'or replace the character, please.' \
                   % (cell_name, sheet_name)
             self.add_error(msg)
         else:
             if conv_value == '':
                 conv_value = None
             else:
                 # Try to convert to an int or float.
                 try:
                     conv_value = int(conv_value)
                 except ValueError:
                     try:
                         conv_value = float(conv_value)
                     except ValueError:
                         pass
     elif isinstance(cell_value, (float, int)):
         if is_valid_number(value=cell_value, is_integer=True):
             conv_value = int(cell_value)
         else:
             conv_value = cell_value
     else:
         msg = 'There is some unknown content in cell %s (sheet %s).' \
               % (cell_name, sheet_name)
         self.add_error(msg)
     return conv_value
示例#12
0
文件: base.py 项目: papagr/TheLMA
 def __parse_layout_shape(self, start_row, start_col):
     """
     Determines the dimensions of plate layout definition.
     """
     rack_row = 0
     rack_col = 0
     # Get number of rows, row labels are alphanumeric.
     while rack_row + start_row + 2 < self._row_number:
         row_value = self._get_cell_value(start_row + rack_row + 1,
                                          start_col)
         if row_value != label_from_number(rack_row + 1):
             break
         rack_row += 1
     # Get number of columns, column labels are numbers.
     while start_col + rack_col + 1 < self._col_number:
         col_value = self._get_cell_value(start_row,
                                          start_col + rack_col + 1)
         if col_value != rack_col + 1:
             break
         rack_col += 1
     if not (rack_row, rack_col) in self._parser.allowed_rack_dimensions:
         msg = 'Invalid layout block shape (%ix%i). Make sure you ' \
               'have placed an "%s" maker, too.' % (rack_row, rack_col,
                                                    self._END_MARKER)
         self._create_error(msg, self._get_cell_name(start_row, start_col))
         result = None
     else:
         shape = RackShapeParsingContainer(self._parser, rack_row, rack_col)
         result = shape
         if self._parser.HAS_COMMON_LAYOUT_DIMENSION:
             if self._parser.shape is None:
                 self._parser.shape = shape
             elif not shape == self._parser.shape:
                 msg = 'There are 2 different layout shapes in the file ' \
                       '(%s and %s). For this parser, all layout ' \
                       'dimensions have to be the same.' \
                       % (shape, self._parser.shape)
                 self._create_error(msg)
                 result = None
     return result
示例#13
0
    def get_label(cls, row_index, column_index):
        """
        Return the label for the given row and column indices.

        :param row_index: The row index (0-based) of the rack position.
        :type row_index: :class:`int`

        :param column_index: The column index (0-based) of the rack position.
        :type column_index: :class:`int`

        :raises TypeError: If one of the indices is not an non-negative integer.
        :raises ValueError: If there is not rack position for these indices in
            the DB.
        """
        if not cls.is_positive_integer(row_index):
            raise ValueError('The row index must be a non-negative integer ' \
                             '(obtained: %s).' % (row_index))
        if not cls.is_positive_integer(column_index):
            raise ValueError('The column index must be a non-negative ' \
                             'integer (obtained: %s).' % (column_index))

        return '%s%d' % (label_from_number(row_index + 1), column_index + 1)
示例#14
0
db_name = 'buffalo_backup'
db_string = "postgresql+psycopg2://%(db_user)s:%(db_password)s" \
            "@%(db_server)s:%(db_port)s/%(db_name)s" % locals()
engine = create_engine(db_string)
metadata = create_metadata(engine)

sess = Session()

max_row_number = 32
max_col_number = 48

pos_map = dict()

for r in range(max_row_number):

    row_letter = label_from_number(r + 1)
    for c in range(max_col_number):

        label = '%s%i' % (row_letter, c + 1)
        rack_pos = RackPosition(row_index=r, column_index=c, label=label)
        pos_map[label] = rack_pos
        sess.add(rack_pos)

print '%i rack positions have been created.' % (len(pos_map))
print 'Done processing.'


if COMMIT:
    sess.commit()
else:
    sess.rollback()
示例#15
0
 def test_basic(self):
     assert 'AG' == label_from_number(33)
示例#16
0
文件: base.py 项目: helixyte/TheLMA
 def label(self):
     """
     The label for this rack position.
     """
     return '%s%d' % (label_from_number(self.row_index + 1),
                      self.column_index + 1)
示例#17
0
 def test_basic(self):
     assert 'AG' == label_from_number(33)
示例#18
0
db_name = 'buffalo_backup'
db_string = "postgresql+psycopg2://%(db_user)s:%(db_password)s" \
            "@%(db_server)s:%(db_port)s/%(db_name)s" % locals()
engine = create_engine(db_string)
metadata = create_metadata(engine)

sess = Session()

max_row_number = 32
max_col_number = 48

pos_map = dict()

for r in range(max_row_number):

    row_letter = label_from_number(r + 1)
    for c in range(max_col_number):

        label = '%s%i' % (row_letter, c + 1)
        rack_pos = RackPosition(row_index=r, column_index=c, label=label)
        pos_map[label] = rack_pos
        sess.add(rack_pos)

print '%i rack positions have been created.' % (len(pos_map))
print 'Done processing.'

if COMMIT:
    sess.commit()
else:
    sess.rollback()
示例#19
0
文件: base.py 项目: papagr/TheLMA
 def label(self):
     """
     The label for this rack position.
     """
     return '%s%d' % (label_from_number(self.row_index + 1),
                      self.column_index + 1)