def test_valuecounts(): table = (('foo', 'bar'), ('a', 1), ('b', 2), ('b', 7)) actual = valuecounts(table, 'foo') expect = (('foo', 'count', 'frequency'), ('b', 2, 2./3), ('a', 1, 1./3)) ieq(expect, actual) ieq(expect, actual)
def counts(request, uuid): try: csvdownload = CSVDownload.objects.get(uuid=uuid) except CSVDownload.DoesNotExist: return HttpResponseNotFound("Not found.") fname = '{0}.csv'.format(csvdownload.uuid) full_fname = os.path.join(settings.CSV_DIR, fname) people = fromcsv(full_fname) columns_str = request.GET.get('columns', '') columns = sorted([c for c in columns_str.split(',') if c.strip()]) for column in columns: if column not in header(people): return HttpResponseBadRequest('Bad request.') if not columns: return redirect(to=reverse('people_list', kwargs={'uuid': uuid})) counts = valuecounts(people, *columns) counts = cutout(counts, 'frequency') return render( request, 'counts.html', { 'csvdownload': csvdownload, 'columns': header(people), 'headers': header(counts), 'counts': data(counts), 'queryparams': { 'columns': columns } })
def test_valuecounts_multifields(): table = (('foo', 'bar', 'baz'), ('a', True, .12), ('a', True, .17), ('b', False, .34), ('b', False, .44), ('b',), ('b', False, .56)) actual = valuecounts(table, 'foo', 'bar') expect = (('foo', 'bar', 'count', 'frequency'), ('b', False, 3, 3./6), ('a', True, 2, 2./6), ('b', None, 1, 1./6)) ieq(expect, actual) ieq(expect, actual)
def test_valuecounts_shortrows(): table = (('foo', 'bar'), ('a', True), ('x', True), ('b',), ('b', True), ('c', False), ('z', False)) actual = valuecounts(table, 'bar') expect = (('bar', 'count', 'frequency'), (True, 3, 3./6), (False, 2, 2./6), (None, 1, 1./6)) ieq(expect, actual) ieq(expect, actual)