def lookup(dataset): dataset = Dataset.find(dataset) readonly = validators.StringBool(if_empty=False, if_missing=False)\ .to_python(request.args.get('readonly')) readonly = readonly if authz.logged_in() else True data = request_content() if response_format() != 'json': return Response("Not implemented!", status=400) try: link = Link.lookup(dataset, data, request.account, readonly=readonly) if link is None: return jsonify({ 'is_matched': False, 'value': None, 'key': data.get('key'), 'dataset': dataset.name }, status=404) if isinstance(link, Value): return jsonify({ 'is_matched': True, 'value': link, 'key': data.get('key'), 'dataset': dataset.name }, status=200) db.session.commit() status = 200 if link.is_matched else 404 status = 418 if link.is_invalid else status return jsonify(link, status=status) except Invalid, inv: return handle_invalid(inv, index, data=data, args=[dataset.name])
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()