Example #1
0
    def test_table_columns_and_details_fields(self):
        """
        Check that all names from
        settings.TABLE_COLUMNS and
        settings.DETAILS_FILEDS exists
        """
        from cghub.apps.core.attributes import COLUMN_NAMES
        from cghub.apps.core.templatetags.search_tags import field_values

        analysis_id = '916d1bd2-f503-4775-951c-20ff19dfe409'
        names = list(settings.TABLE_COLUMNS)
        for name in names:
            self.assertIn(name, COLUMN_NAMES)
        for name in settings.DETAILS_FIELDS:
            if name not in names:
                names.append(name)
        api_request = RequestDetail(query={'analysis_id': analysis_id})
        result = api_request.call().next()
        self.assertEqual(api_request.hits, 1)
        field_values_dict = field_values(result)
        for name in names:
            if name == 'Files':
                self.assertTrue(len(result['files']))
                continue
            self.assertIn(name, field_values_dict)
Example #2
0
def summary_tsv_generator(request, compress=False):
    """
    Return summary tsv for all cart items.

    :param request: django Request object
    :param compress: set to True to enable compression 
    """
    cart = Cart(request.session)
    zipper = Gzipper(filename='summary.tsv', compress=compress)
    COLUMNS = settings.TABLE_COLUMNS
    stringio = StringIO()
    csvwriter = CSVUnicodeWriter(
            stringio, quoting=csv.QUOTE_MINIMAL,
            dialect='excel-tab', lineterminator='\n')
    csvwriter.writerow(
            [field.lower().replace(' ', '_') for field in COLUMNS])
    count_all = cart.all_count
    iterator = cart.cart.items.all().iterator()
    count = 0
    while True:
        ids = []
        for i in xrange(settings.MAX_ITEMS_IN_QUERY):
            try:
                ids.append(next(iterator).analysis.analysis_id)
            except StopIteration:
                break
        if not ids:
            break
        api_request = RequestDetailJSON(query={'analysis_id': ids})
        for result in api_request.call():
            fields = field_values(result, humanize_files_size=False)
            row = []
            for field_name in COLUMNS:
                value = fields.get(field_name, '')
                row.append(unicode(value))
            csvwriter.writerow(row)
            count += 1
        stringio.seek(0)
        line = stringio.read()
        stringio.seek(0)
        stringio.truncate()
        zipper.write(line)
        yield zipper.read()
    if count != count_all:
        cart_logger.error('Error while composing summary tsv.')
        add_message(
                request=request,
                level='error',
                content='An error occured while composing summary tsv.')
        request.session.save()
        zipper.write(u'\nError!')
    yield zipper.close()