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)
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()