Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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})
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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])
Exemplo n.º 7
0
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])
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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])
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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,
    )
Exemplo n.º 12
0
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)
Exemplo n.º 13
0
def index(dataset):
    dataset = Dataset.find(dataset)
    format = response_format()
    if format == 'json':
        return jsonify(Value.all(dataset))
    return "Not implemented!"