Example #1
0
def edit_resource(app_id, url):
    ltwapp = App.query.filter_by(id=app_id).first()
    graph_id = ltwapp.graph_id

    data_graph = get_ltw_data_graph(graph_id)
    config_graph = get_ltw_config_graph(graph_id)
    class_uri = list(data_graph.objects(URIRef(url), RDF.type))[0]

    res_data = get_resource_triples(data_graph, config_graph, str(class_uri), url)

    i = -1

    for i, triple in enumerate(sorted(res_data['triples'])):
        if isinstance(triple[1], Literal) and triple[1].language:
            default_txt = u'%s @ %s' % (unicode(triple[1]), triple[1].language)
        else:
            default_txt = triple[1]
        setattr(ResourceEditForm, 'field' + str(i), TextField(triple[2], default=default_txt, description=triple[0]))

    number_of_fields = i + 1 # +1 because i starts on 0
    form = ResourceEditForm()

    if form.validate_on_submit():
        for i, triple in enumerate(sorted(res_data['triples'])):
            data_graph.remove( (URIRef(url), triple[0], triple[1]) )

            field_data, lang = get_literal_and_lang(getattr(form, 'field' + str(i)).data)

            if field_data:
                data_graph.add( (URIRef(url), triple[0], Literal(field_data, lang=lang)) )

        if len(request.form.keys()) - 1 > number_of_fields: # -1 because CSRF token is included in form keys
            number_of_new_fields = (len(request.form.keys()) - 1 - number_of_fields) / 2
            for i in range(number_of_fields + 1, number_of_fields + 1 + number_of_new_fields):
                p = request.form['field%s_p' % str(i)]
                o = request.form['field%s_o' % str(i)]
                if p and o:
                    if o.startswith('http://'):
                        data_graph.add( (URIRef(url), URIRef(p), URIRef(o)) )
                    else:
                        o, lang = get_literal_and_lang(o)
                        data_graph.add( (URIRef(url), URIRef(p), Literal(o, lang=lang)) )

        return redirect(url_for('edit_resource', app_id=app_id, url=url))
    else:
        linked_resources = []
        resources = {}

        for link in res_data['linkable']:
            for o in data_graph.objects(URIRef(url), URIRef(link)):
                if str(o.encode('utf-8')) not in linked_resources:
                    linked_resources.append(str(o.encode('utf-8')))
                    lang = o.language if o.language else 'en'
                    if lang not in resources:
                        resources[lang] = []
                    for resource in search_dbpedia_trough_wikipedia(str(o.encode('utf-8')), lang):
                        resources[lang].append(resource)

        return render_template('edit_resource.html', data=res_data, app_id=app_id, url=url, resources=resources,
            form=form, number_of_fields=number_of_fields)
Example #2
0
def add_external_triples():
    s = request.args.get('s', None, type=str)
    p = request.args.get('p', None, type=str)
    o = request.args.get('o', None, type=str)

    o, lang = get_literal_and_lang(urllib.unquote(o))

    ltwapp = App.query.filter_by(id=session['app']).first()
    data_graph = get_ltw_data_graph(ltwapp.graph_id)
    data_graph.add( (URIRef(urllib.unquote(s)), URIRef(urllib.unquote(p)), Literal(o, lang=lang)) )

    return json.dumps({})
Example #3
0
def add_external_triples():
    s = request.args.get('s', None, type=str)
    p = request.args.get('p', None, type=str)
    o = request.args.get('o', None, type=str)

    o, lang = get_literal_and_lang(urllib.unquote(o))

    ltwapp = App.query.filter_by(id=session['app']).first()
    data_graph = get_ltw_data_graph(ltwapp.graph_id)
    data_graph.add((URIRef(urllib.unquote(s)), URIRef(urllib.unquote(p)),
                    Literal(o, lang=lang)))

    return json.dumps({})
Example #4
0
def edit_resource(app_id, url):
    ltwapp = App.query.filter_by(id=app_id).first()
    graph_id = ltwapp.graph_id

    data_graph = get_ltw_data_graph(graph_id)
    config_graph = get_ltw_config_graph(graph_id)
    class_uri = list(data_graph.objects(URIRef(url), RDF.type))[0]

    res_data = get_resource_triples(data_graph, config_graph, str(class_uri),
                                    url)

    i = -1

    for i, triple in enumerate(sorted(res_data['triples'])):
        if isinstance(triple[1], Literal) and triple[1].language:
            default_txt = u'%s @ %s' % (unicode(triple[1]), triple[1].language)
        else:
            default_txt = triple[1]
        setattr(
            ResourceEditForm, 'field' + str(i),
            TextField(triple[2], default=default_txt, description=triple[0]))

    number_of_fields = i + 1  # +1 because i starts on 0
    form = ResourceEditForm()

    if form.validate_on_submit():
        for i, triple in enumerate(sorted(res_data['triples'])):
            data_graph.remove((URIRef(url), triple[0], triple[1]))

            field_data, lang = get_literal_and_lang(
                getattr(form, 'field' + str(i)).data)

            if field_data:
                data_graph.add(
                    (URIRef(url), triple[0], Literal(field_data, lang=lang)))

        if len(
                request.form.keys()
        ) - 1 > number_of_fields:  # -1 because CSRF token is included in form keys
            number_of_new_fields = (len(request.form.keys()) - 1 -
                                    number_of_fields) / 2
            for i in range(number_of_fields + 1,
                           number_of_fields + 1 + number_of_new_fields):
                p = request.form['field%s_p' % str(i)]
                o = request.form['field%s_o' % str(i)]
                if p and o:
                    if o.startswith('http://'):
                        data_graph.add((URIRef(url), URIRef(p), URIRef(o)))
                    else:
                        o, lang = get_literal_and_lang(o)
                        data_graph.add(
                            (URIRef(url), URIRef(p), Literal(o, lang=lang)))

        return redirect(url_for('edit_resource', app_id=app_id, url=url))
    else:
        linked_resources = []
        resources = {}

        for link in res_data['linkable']:
            for o in data_graph.objects(URIRef(url), URIRef(link)):
                if str(o.encode('utf-8')) not in linked_resources:
                    linked_resources.append(str(o.encode('utf-8')))
                    lang = o.language if o.language else 'en'
                    if lang not in resources:
                        resources[lang] = []
                    for resource in search_dbpedia_trough_wikipedia(
                            str(o.encode('utf-8')), lang):
                        resources[lang].append(resource)

        return render_template('edit_resource.html',
                               data=res_data,
                               app_id=app_id,
                               url=url,
                               resources=resources,
                               form=form,
                               number_of_fields=number_of_fields)