<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def convert_table(self, table_name, cls_att=None):
        '''
        Returns the specified table as an orange example table.

            :param table_name: table name to convert
            :cls_att: class attribute name
            :rtype: orange.ExampleTable
        '''
        import Orange

        cols = self.db.cols[table_name]
        attributes, metas, class_var = [], [], None
        for col in cols:
            att_type = self.orng_type(table_name, col)
            if att_type == 'd':
                att_vals = self.db.col_vals[table_name][col]
                att_var = Orange.data.DiscreteVariable(str(col), values=[str(val) for val in att_vals])
            elif att_type == 'c':
                att_var = Orange.data.ContinuousVariable(str(col))
            else:
                att_var = Orange.data.StringVariable(str(col))
            if col == cls_att:
                if att_type == 'string':
                    raise Exception('Unsuitable data type for a target variable: %s' % att_type)
                class_var = att_var
                continue
            elif att_type == 'string' or table_name in self.db.pkeys and col in self.db.pkeys[
                table_name] or table_name in self.db.fkeys and col in self.db.fkeys[table_name]:
                metas.append(att_var)
            else:
                attributes.append(att_var)
        domain = Orange.data.Domain(attributes, class_vars=class_var, metas=metas)
        # for meta in metas:
        #    domain.addmeta(Orange.newmetaid(), meta)
        dataset = Orange.data.Table(domain)
        dataset.name = table_name
        for row in self.db.rows(table_name, cols):
            example = Orange.data.Instance(domain)
            for col, val in zip(cols, row):
                example[str(col)] = str(val) if val != None else '?'
            dataset.append(example)
        return dataset