def test_get_clustermap_table(self): queries = {SearchQuery("a"): [1, 2, 3], SearchQuery("b"): [1, 4], SearchQuery("c"): [1]} headers, rows = get_clustermap_table(queries) self.assertEqual(['a', 'b', 'c', 'Total'], headers) self.assertEqual(sorted(rows), [ (0, 1, 0, 1), # article 4 (1, 0, 0, 2), # articles 2 and 3 (1, 1, 1, 1), # article 1 ])
def run(self, form): selection = SelectionSearch(form) queries = selection.get_article_ids_per_query() if form.cleaned_data["output_type"] == "application/json+clustermap": clusters, articles = zip(*get_clusters(queries).items()) cluster_queries = get_cluster_queries(clusters) image, html = get_clustermap_image(queries) coords = tuple(clustermap_html_to_coords(html)) return json.dumps({ "coords": coords, "image": b64encode(image).decode("ascii"), "clusters": [{ "query": q, "articles": tuple(a) } for q, a in zip(cluster_queries, articles)] }) headers, rows = get_clustermap_table(queries) if form.cleaned_data["output_type"] == "application/spss-sav": # *sigh*.. this code is fugly. _headers = {str(h): i for i, h in enumerate(headers)} return table2sav( Table(rows=list(rows), columns=list(map(str, headers)), columnTypes=[int] * len(headers), cellfunc=lambda row, col: row[_headers[col]])) dialect = 'excel' if form.cleaned_data["output_type"] == "text/csv+tab": dialect = 'excel-tab' result = StringIO() csvf = csv.writer(result, dialect=dialect) csvf.writerow(list(map(str, headers))) csvf.writerows(sorted(rows)) if form.cleaned_data[ "output_type"] == "application/json+clustermap+table": return json.dumps({ "csv": result.getvalue(), "queries": {q.label: q.query for q in queries} }) return result.getvalue()
def run(self, form): selection = SelectionSearch.get_instance(form) queries = selection.get_article_ids_per_query() if form.cleaned_data["output_type"] == "application/json+clustermap": try: clusters, articles = zip(*get_clusters(queries).items()) except ValueError as e: raise ValueError("Cannot build clustermap of empty query result.") cluster_queries = get_cluster_queries(clusters) image, html = get_clustermap_image(queries) coords = tuple(clustermap_html_to_coords(html)) return json.dumps( {"coords": coords, "image": b64encode(image).decode("ascii"), "clusters": [ {"query": q, "articles": tuple(a)} for q, a in zip(cluster_queries, articles) ]} ) headers, rows = get_clustermap_table(queries) if form.cleaned_data["output_type"] == "application/spss-sav": # *sigh*.. this code is fugly. _headers = {str(h): i for i, h in enumerate(headers)} return table2sav(Table( rows=list(rows), columns=list(map(str, headers)), columnTypes=[int]*len(headers), cellfunc=lambda row, col: row[_headers[col]] )) dialect = 'excel' if form.cleaned_data["output_type"] == "text/csv+tab": dialect = 'excel-tab' result = StringIO() csvf = csv.writer(result, dialect=dialect) csvf.writerow(list(map(str, headers))) csvf.writerows(sorted(rows)) if form.cleaned_data["output_type"] == "application/json+clustermap+table": return json.dumps({ "csv": result.getvalue(), "queries": {q.label: q.query for q in queries} }) return result.getvalue()
def test_get_clustermap_table(self): queries = {"a": [1, 2, 3], "b": [1, 4], "c": [1]} headers, rows = get_clustermap_table(queries) self.assertEqual(['a', 'b', 'c', 'Total'], headers) self.assertEqual(sorted(rows), [ (0, 0, 1, 1), (0, 1, 0, 2), (0, 1, 1, 1), (1, 0, 0, 3), (1, 0, 1, 1), (1, 1, 0, 1), (1, 1, 1, 1), ])
def test_get_clustermap_table(self): queries = { SearchQuery("a"): [1, 2, 3], SearchQuery("b"): [1, 4], SearchQuery("c"): [1] } headers, rows = get_clustermap_table(queries) self.assertEqual(['a', 'b', 'c', 'Total'], headers) self.assertEqual( sorted(rows), [ (0, 1, 0, 1), # article 4 (1, 0, 0, 2), # articles 2 and 3 (1, 1, 1, 1), # article 1 ])