def test_2(self): expected = '0+1+2+3+4+5+6+7+8+9' result = limited_join(self.list, -1) self.assertEqual(result, expected) result = limited_join(self.list, len(self.list)) self.assertEqual(result, expected) result = limited_join(self.list, len(self.list) + 1) self.assertEqual(result, expected)
def _parse_versions(self, document): """Parse document and return a list of releases""" del self.versions[:] data = [] namekeys = ("tracks", "year", "country", "format", "label", "catnum") headings = { "tracks": N_('Tracks'), "year": N_('Year'), "country": N_('Country'), "format": N_('Format'), "label": N_('Label'), "catnum": N_('Cat No'), } extrakeys = ("packaging", "barcode", "disambiguation") try: releases = document['releases'] except (TypeError, KeyError): releases = [] max_tracks = 10 for node in releases: labels, catnums = label_info_from_node(node['label-info']) countries = countries_from_node(node) if len(node['media']) > max_tracks: tracks = "+".join([ str(m['track-count']) for m in node['media'][:max_tracks] ]) + '+…' else: tracks = "+".join( [str(m['track-count']) for m in node['media']]) formats = [] for medium in node['media']: if "format" in medium: formats.append(medium['format']) release = { "id": node['id'], "year": node['date'][:4] if "date" in node else "????", "country": limited_join(countries, 10, '+', '…') if countries else node.get('country', '') or "??", "format": media_formats_from_node(node['media']), "label": ", ".join([' '.join(x.split(' ')[:2]) for x in set(labels)]), "catnum": ", ".join(set(catnums)), "tracks": tracks, "barcode": node.get('barcode', '') or _('[no barcode]'), "packaging": node.get('packaging', '') or '??', "disambiguation": node.get('disambiguation', ''), "_disambiguate_name": list(), "totaltracks": sum([m['track-count'] for m in node['media']]), "countries": countries, "formats": formats, } data.append(release) versions = defaultdict(list) for release in data: name = " / ".join([release[k] for k in namekeys]).replace("&", "&&") if name == release["tracks"]: name = "%s / %s" % (_('[no release info]'), name) versions[name].append(release) # de-duplicate names if possible for name, releases in versions.items(): for a, b in combinations(releases, 2): for key in extrakeys: (value1, value2) = (a[key], b[key]) if value1 != value2: a['_disambiguate_name'].append(value1) b['_disambiguate_name'].append(value2) for name, releases in versions.items(): for release in releases: dis = " / ".join( filter(None, uniqify(release['_disambiguate_name']))).replace( "&", "&&") disname = name if not dis else name + ' / ' + dis version = { 'id': release['id'], 'name': disname, 'totaltracks': release['totaltracks'], 'countries': release['countries'], 'formats': release['formats'], } self.versions.append(version) self.version_headings = " / ".join(_(headings[k]) for k in namekeys)
def test_3(self): expected = '0,1,2,3,…,6,7,8,9' result = limited_join(self.list, len(self.list) - 1, ',') self.assertEqual(result, expected)
def test_1(self): expected = '0+1+...+8+9' result = limited_join(self.list, 5, '+', '...') self.assertEqual(result, expected)