def view(dataset, value): dataset = Dataset.find(dataset) value = Value.find(dataset, value) format = response_format() if format == 'json': return jsonify(value) query = request.args.get('query', '').strip().lower() choices = match_op(value.value, dataset) choices = filter(lambda (c,v,s): v != value.id, choices) if len(query): choices = filter(lambda (c,v,s): query in Value.find(dataset,v).value.lower(), choices) # THIS is very inefficient - rather do this # differently pager = Pager(choices, '.view', dataset=dataset.name, value=value.id, limit=10) # HACK: Fetch only the values on the selected page. value_objs = Value.id_map(dataset, map(lambda (c,v,s): v, pager.query[pager.offset:pager.offset+pager.limit])) for i, (c,v,s) in enumerate(pager.query): if v in value_objs: pager.query[i] = (c, value_objs.get(v), s) return render_template('value/view.html', dataset=dataset, value=value, values=pager, query=query)
def import_upload(dataset_name, sig, account_id, value_col, link_col): dataset = Dataset.find(dataset_name) account = Account.by_id(account_id) metadata, row_set = parse_upload(dataset, sig) headers = detect_headers(row_set) for row in row_set: data = dict([(c.column, c.value) for c in row]) value = data.pop(value_col) if value_col else None link = data.pop(link_col) if link_col else None if link_col: d = {'key': link, 'data': data} link_obj = Link.lookup(dataset, d, account, match_value=False) data = {} if value_col: d = {'value': value, 'data': data} value_obj = Value.by_value(dataset, value) if value_obj is None: value_obj = Value.create(dataset, d, account) value_obj.data = data if link_col and value_col: link_obj.match(dataset, {'choice': value_obj.id}, account) db.session.commit()
def match(dataset, link, random=False): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) link = Link.find(dataset, link) random = random or request.args.get('random')=='True' choices = match_op(link.key, dataset, query=request.args.get('query')) pager = Pager(choices, '.match', dataset=dataset.name, link=link.id, limit=10) # HACK: Fetch only the values on the selected page. value_objs = Value.id_map(dataset, map(lambda (c,v,s): v, pager.query[pager.offset:pager.offset+pager.limit])) for i, (c,v,s) in enumerate(pager.query): if v in value_objs: pager.query[i] = (c, value_objs.get(v), s) html = render_template('link/match.html', dataset=dataset, link=link, choices=pager, random=random) choice = 'INVALID' if link.is_invalid else link.value_id if len(choices) and choice is None: c, v, s = choices[0] choice = 'INVALID' if s <= 50 else v return htmlfill.render(html, force_defaults=False, defaults={'choice': choice, 'value': link.key, 'query': request.args.get('query', ''), 'random': random})
def _get_candidates(dataset): for value in Value.all(dataset, eager_links=dataset.match_links): candidate = normalize(value.value, dataset) yield candidate, value.id if dataset.match_links: for link in value.links_static: candidate = normalize(link.key, dataset) yield candidate, value.id
def get_candidates(dataset): candidates = set() for value in Value.all(dataset, eager_links=dataset.match_links): candidate = normalize(value.value, dataset) candidates.add(candidate) yield candidate, value if dataset.match_links: for link in value.links_static: candidate = normalize(link.key, dataset) if candidate in candidates: continue candidates.add(candidate) yield candidate, value
def update(dataset, value): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) value = Value.find(dataset, value) data = request_content() try: value.update(data, request.account) db.session.commit() flash("Updated %s" % value.value, 'success') return redirect(url_for('.view', dataset=dataset.name, value=value.id)) except Invalid, inv: return handle_invalid(inv, view, data=data, args=[dataset.name, value.id])
def create(dataset): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) data = request_content() try: value = Value.create(dataset, data, request.account) db.session.commit() return redirect(url_for('.view', dataset=dataset.name, value=value.id)) except Invalid, inv: return handle_invalid(inv, view_dataset, data=data, args=[dataset.name])
def view(dataset, value): dataset = Dataset.find(dataset) value = Value.find(dataset, value) format = response_format() if format == 'json': return jsonify(value) query = request.args.get('query', '').strip().lower() choices = match_op(value.value, dataset) choices = filter(lambda (c,v,s): v != value, choices) if len(query): choices = filter(lambda (c,v,s): query in v.value.lower(), choices) pager = Pager(choices, '.view', dataset=dataset.name, value=value.id, limit=10) return render_template('value/view.html', dataset=dataset, value=value, values=pager, query=query)
def merge(dataset, value): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) value = Value.find(dataset, value) data = request_content() try: target = value.merge_into(data, request.account) flush_cache(dataset) db.session.commit() flash("Merged %s" % value.value, 'success') return redirect(url_for('.view', dataset=dataset.name, value=target.id)) except Invalid, inv: print inv return handle_invalid(inv, view, data=data, args=[dataset.name, value.id])
def view(dataset): dataset = Dataset.find(dataset) format = response_format() if format == 'json': return jsonify(dataset) unmatched = Link.all_unmatched(dataset).count() values = Value.all(dataset, query=request.args.get('query')) pager = Pager(values, '.view', dataset=dataset.name, limit=10) return render_template('dataset/view.html', values=pager, num_values=len(pager), num_links=Link.all(dataset).count(), invalid=Link.all_invalid(dataset).count(), query=request.args.get('query', ''), dataset=dataset, unmatched=unmatched)
def view(dataset): dataset = Dataset.find(dataset) format = response_format() if format == "json": return jsonify(dataset) unmatched = Link.all_unmatched(dataset).count() values = Value.all(dataset, query=request.args.get("query")) pager = Pager(values, ".view", dataset=dataset.name, limit=10) return render_template( "dataset/view.html", values=pager, num_values=len(pager), num_links=Link.all(dataset).count(), invalid=Link.all_invalid(dataset).count(), query=request.args.get("query", ""), dataset=dataset, unmatched=unmatched, )
def view_by_value(dataset): dataset = Dataset.find(dataset) value = Value.by_value(dataset, request.args.get('value')) if value is None: raise NotFound("No such value: %s" % request.args.get('value')) return view(dataset.name, value.id)
def index(dataset): dataset = Dataset.find(dataset) format = response_format() if format == 'json': return jsonify(Value.all(dataset)) return "Not implemented!"