def prime_cache(args): # # TODO: relate survey chapter reference with language! # icons = {} frequencies = {} args.log.info('computing wals representation') for feature in DBSession.query(common.Parameter).options( joinedload(common.Parameter.valuesets) ): feature.representation = len(feature.valuesets) if feature.wals_id: with open(path(apics.__file__).dirname().joinpath( 'static', 'wals', '%sA.json' % feature.wals_id ), 'r') as fp: data = json.load(fp) feature.wals_representation = sum([len(l['features']) for l in data['layers']]) args.log.info('computing language sources') compute_language_sources((common.ContributionReference, 'contribution')) compute_number_of_values() for valueset in DBSession.query(common.ValueSet)\ .join(common.Parameter)\ .filter(common.Parameter.id == '0')\ .options(joinedload(common.ValueSet.language)): if valueset.language.language_pk: continue if len(valueset.values) > 1: valueset.language.lexifier = 'Other' else: if valueset.values[0].domainelement.name == 'Other': valueset.language.lexifier = 'Other' else: valueset.language.lexifier = valueset.values[0].domainelement.name.replace('-based', '') for lect in valueset.language.lects: lect.lexifier = valueset.language.lexifier args.log.info('creating icons') for valueset in DBSession.query(common.ValueSet).options( joinedload(common.ValueSet.parameter), joinedload_all(common.ValueSet.values, common.Value.domainelement) ): values = sorted(list(valueset.values), key=lambda v: v.domainelement.number) assert abs(sum(v.frequency for v in values) - 100) < 1 fracs = [] colors = [] for v in values: color = v.domainelement.jsondata['color'] frequency = round(v.frequency) assert frequency if frequency not in frequencies: figure(figsize=(0.4, 0.4)) axes([0.1, 0.1, 0.8, 0.8]) coll = pie((int(100 - frequency), frequency), colors=('w', 'k')) coll[0][0].set_linewidth(0.5) save('freq-%s' % frequency) frequencies[frequency] = True v.jsondata = {'frequency_icon': 'freq-%s.png' % frequency} fracs.append(frequency) colors.append(color) v.domainelement.jsondata = { 'color': color, 'icon': 'pie-100-%s.png' % color} assert len(colors) == len(set(colors)) fracs, colors = tuple(fracs), tuple(colors) basename = 'pie-' basename += '-'.join('%s-%s' % (f, c) for f, c in zip(fracs, colors)) valueset.update_jsondata(icon=basename + '.png') if (fracs, colors) not in icons: figure(figsize=(0.4, 0.4)) axes([0.1, 0.1, 0.8, 0.8]) coll = pie( tuple(reversed(fracs)), colors=['#' + color for color in reversed(colors)]) for wedge in coll[0]: wedge.set_linewidth(0.5) save(basename) icons[(fracs, colors)] = True with open(str(icons_dir.joinpath(basename + '.svg')), 'w') as fp: fp.write(svg.pie(fracs, ['#' + color for color in colors], width=40)) for de in DBSession.query(common.DomainElement): if not de.jsondata.get('icon'): de.update_jsondata(icon='pie-100-%s.png' % de.jsondata['color']) gbs_func('update', args)
def test_compute_number_of_values(self): from clld.db.util import compute_number_of_values compute_number_of_values()
def prime_cache(args): # # TODO: relate survey chapter reference with language! # icons = {} frequencies = {} args.log.info('computing wals representation') for feature in DBSession.query(common.Parameter).options( joinedload(common.Parameter.valuesets)): feature.representation = len(feature.valuesets) if feature.wals_id: data = jsonload( path(apics.__file__).dirname().joinpath( 'static', 'wals', '%sA.json' % feature.wals_id)) feature.wals_representation = sum( [len(l['features']) for l in data['layers']]) args.log.info('computing language sources') compute_language_sources((common.ContributionReference, 'contribution')) compute_number_of_values() for valueset in DBSession.query(common.ValueSet)\ .join(common.Parameter)\ .filter(common.Parameter.id == '0')\ .options(joinedload(common.ValueSet.language)): if valueset.language.language_pk: continue if len(valueset.values) > 1: valueset.language.lexifier = 'Other' else: if valueset.values[0].domainelement.name == 'Other': valueset.language.lexifier = 'Other' else: valueset.language.lexifier \ = valueset.values[0].domainelement.name.replace('-based', '') for lect in valueset.language.lects: lect.lexifier = valueset.language.lexifier args.log.info('creating icons') for valueset in DBSession.query(common.ValueSet).options( joinedload(common.ValueSet.parameter), joinedload_all(common.ValueSet.values, common.Value.domainelement)): values = sorted(list(valueset.values), key=lambda v: v.domainelement.number) assert abs(sum(v.frequency for v in values) - 100) < 1 fracs = [] colors = [] for v in values: color = v.domainelement.jsondata['color'] frequency = round(v.frequency) assert frequency if frequency not in frequencies: figure(figsize=(0.4, 0.4)) axes([0.1, 0.1, 0.8, 0.8]) coll = pie((int(100 - frequency), frequency), colors=('w', 'k')) coll[0][0].set_linewidth(0.5) assert icons_dir.joinpath('freq-%s.png' % frequency).exists() frequencies[frequency] = True v.jsondata = {'frequency_icon': 'freq-%s.png' % frequency} fracs.append(frequency) colors.append(color) v.domainelement.jsondata = { 'color': color, 'icon': 'pie-100-%s.png' % color } assert len(colors) == len(set(colors)) fracs, colors = tuple(fracs), tuple(colors) basename = 'pie-' basename += '-'.join('%s-%s' % (f, c) for f, c in zip(fracs, colors)) valueset.update_jsondata(icon=basename + '.png') if (fracs, colors) not in icons: figure(figsize=(0.4, 0.4)) axes([0.1, 0.1, 0.8, 0.8]) coll = pie(tuple(reversed(fracs)), colors=['#' + _color for _color in reversed(colors)]) for wedge in coll[0]: wedge.set_linewidth(0.5) assert icons_dir.joinpath('%s.png' % basename).exists() icons[(fracs, colors)] = True assert icons_dir.joinpath(basename + '.svg').exists() for de in DBSession.query(common.DomainElement): if not de.jsondata.get('icon'): de.update_jsondata(icon='pie-100-%s.png' % de.jsondata['color']) gbs_func('update', args)