Exemple #1
0
def project_canvases(request, project_uri, canvas_uri):
    if request.method == 'GET':
        return NegotiatedGraphResponse(
            request, read_canvas(request, project_uri, canvas_uri))
    elif request.method == 'PUT':
        input_graph = parse_request_into_graph(request)
        return NegotiatedGraphResponse(
            request, update_canvas(project_uri, canvas_uri, input_graph))
    else:
        return HttpResponseNotAllowed(('GET', 'PUT'))
Exemple #2
0
    def post(self, request, project_uri):
        project_uri = URIRef(project_uri)
        project_graph = get_project_graph(project_uri)
        project_metadata_graph = get_project_metadata_graph(project_uri)
        canvas_graph = Graph()

        image_file = request.FILES['image_file']
        title = request.POST.get('title', '')
        uri = uris.uuid()

        if hasattr(settings, 'MAX_IMAGE_UPLOAD_FILE_SIZE'
                   ) and image_file.size > settings.MAX_IMAGE_UPLOAD_FILE_SIZE:
            return HttpResponse(status=406)
        if not image_file.content_type.startswith('image/'):
            return HttpResponse(status=406)

        uploaded = UploadedImage.objects.create(imagefile=image_file,
                                                owner=request.user)
        create_canvas_from_upload(canvas_graph, uploaded, uri, request.user,
                                  title)

        # Make the canvas a top level project resource
        canvas_graph.add((project_uri, NS.ore.aggregates, uri))

        project_graph += canvas_graph
        project_metadata_graph += canvas_graph

        canvas_graph += metadata_triples(project_metadata_graph, project_uri)
        canvas_graph += project_metadata_graph.triples(
            (project_uri, NS.ore.aggregates, None))

        return NegotiatedGraphResponse(request, canvas_graph)
Exemple #3
0
def remove_project_canvas_triples(request, project_uri, canvas_uri):
    if request.method == 'PUT':
        return NegotiatedGraphResponse(
            request, remove_canvas_triples(project_uri, canvas_uri,
                                           input_graph))
    else:
        return HttpResponseNotAllowed(('PUT'))
Exemple #4
0
def delete_triples_from_project(request, uri):
    """Deletes the triples in a graph provided by a request object from the project graph.
    Returns an HttpResponse of all the triples which were successfully removed from the graph."""
    if request.user.is_authenticated():
        if permissions.has_permission_over(uri, user=request.user, permission=NS.perm.mayUpdate):
            removed = Graph()
            bind_namespaces(removed)

            try:
                logger.debug('!!!!!!!!!!!!!!! project_texts.py - delete_triples_from_project')
                g = parse_request_into_graph(request)
            except (ParserError, SyntaxError) as e:
                return HttpResponse(status=400, content="Unable to parse serialization.\n%s" % e)

            project_g = get_project_graph(uri)
            project_metadata_g = get_project_metadata_graph(uri)

            for t in g:
                if t in project_g:
                    project_g.remove(t)
                    removed.add(t)
                project_metadata_g.remove(t)

            return NegotiatedGraphResponse(request, removed)
        else:
            return HttpResponseForbidden('User "%s" does not have update permissions over project "%s"' % (request.user.username, uri))
    else:
        return HttpResponse(status=401)
Exemple #5
0
def read_project(request, project_uri):
    """Returns a HttpResponse of the cached project metadata graph"""
    project_uri = URIRef(project_uri)

    if request.user.is_authenticated():
        if permissions.has_permission_over(project_uri, user=request.user, permission=NS.perm.mayRead):
            identifier = uris.uri('semantic_store_projects', uri=project_uri)
            store_metadata_graph = get_project_metadata_graph(project_uri)
            ret_graph = Graph()
            ret_graph += store_metadata_graph

            add_is_described_bys(request, project_uri, ret_graph)

            for permission in ProjectPermission.objects.filter(identifier=project_uri):
                user = permission.user
                user_uri = uris.uri('semantic_store_users', username=user.username)
                perm_uri = permissions.PERMISSION_URIS_BY_MODEL_VALUE[permission.permission]

                ret_graph += user_metadata_graph(user=user)
                ret_graph.add((user_uri, NS.perm.hasPermissionOver, project_uri))
                ret_graph.add((user_uri, perm_uri, project_uri))
            
            if len(ret_graph) > 0:
                return NegotiatedGraphResponse(request, ret_graph)
            else:
                return HttpResponseNotFound()
        else:
            return HttpResponseForbidden('User "%s" does not have read permissions over project "%s"' % (request.user.username, project_uri))
    else:
        return HttpResponse(status=401)
Exemple #6
0
    def get(self, request, project_uri, manuscript_uri=None):
        project_uri = URIRef(project_uri)

        project_graph = get_project_graph(project_uri)

        if manuscript_uri:
            manuscript_uri = URIRef(manuscript_uri)
            return NegotiatedGraphResponse(
                request, self.manuscript_graph(manuscript_uri, project_uri))
        else:
            graph = Graph()

            for manuscript in project_graph.subjects(NS.rdf.type,
                                                     NS.sc.Manifest):
                graph += self.manuscript_graph(manuscript, project_uri)

            return NegotiatedGraphResponse(request, graph)
Exemple #7
0
def specific_resource_graph(request, project_uri, specific_resource, source):
    if request.method == 'GET':
        return NegotiatedGraphResponse(
            request,
            read_specific_resource(project_uri, specific_resource, source))
    elif request.method == 'PUT':
        g = parse_request_into_graph(request)
        update_specific_resource(g, URIRef(project_uri),
                                 URIRef(specific_resource))
Exemple #8
0
    def get(self, request, project_uri, canvas_uri, transcription_uri):
        project_uri = URIRef(project_uri)
        canvas_uri = URIRef(canvas_uri)

        if transcription_uri:
            transcription_uri = URIRef(transcription_uri)

            project_graph = get_project_graph(project_uri)

            return NegotiatedGraphResponse(
                request,
                resource_annotation_subgraph(project_graph, transcription_uri))
Exemple #9
0
def resources(request, uri, ext=None):
    if request.user.is_authenticated():
        perms = ProjectPermission.objects.filter(user=request.user)
    else:
        perms = []

    uri = uri.rstrip('/')
    store_g = Graph(store=rdfstore(), identifier=URIRef(uri))
    g = Graph()
    g += store_g

    if len(g) > 0:
        for i in perms:
            anno_uri = settings.URI_MINT_BASE \
                + "/projects/" + i.identifier \
                + "/resources/" + uri \
                + "/annotations/"
            anno_url = reverse('semantic_store_project_annotations',
                               kwargs={'project_uri': i.identifier}) \
                               + "?uri=" + uri
            g.add((URIRef(uri), NS.ore['aggregates'], URIRef(anno_uri)))
            g.add(
                (URIRef(anno_uri), NS.ore['isDescribedBy'], URIRef(anno_url)))
            g.add((URIRef(anno_uri), NS.rdf['type'], NS.ore['Aggregation']))
            g.add((URIRef(anno_uri), NS.rdf['type'], NS.rdf['List']))
            g.add((URIRef(anno_uri), NS.rdf['type'], NS.dms['AnnotationList']))
        return NegotiatedGraphResponse(request, g)
    else:
        main_graph_store = ConjunctiveGraph(store=rdfstore(),
                                            identifier=default_identifier)
        main_graph = Graph()
        main_graph += main_graph_store
        g = Graph()
        bind_namespaces(g)
        for t in main_graph.triples((URIRef(uri), None, None)):
            g.add(t)
        if len(g) > 0:
            return NegotiatedGraphResponse(request, g)
        else:
            return HttpResponseNotFound()
Exemple #10
0
def project_texts(request, project_uri, text_uri):
    if request.method == 'POST':
        return create_project_text_from_request(request, project_uri)
    elif request.method == 'GET':
        g = read_project_text(project_uri, text_uri)
        return NegotiatedGraphResponse(request, g)
    elif request.method == 'PUT':
        return update_project_text_from_request(request, project_uri, text_uri)
    elif request.method == 'DELETE':
        remove_project_text(project_uri, text_uri)
        return HttpResponse(status=204)
    else:
        return HttpResponseNotAllowed(['POST', 'PUT', 'DELETE', 'GET'])
Exemple #11
0
def create_project_text_from_request(request, project_uri):
    if request.user.is_authenticated():
        if has_permission_over(project_uri, user=request.user, permission=NS.perm.mayUpdate):
            try:
                g = parse_request_into_graph(request)
            except (ParserError, SyntaxError) as e:
                return HttpResponse(status=400, content="Unable to parse serialization.\n%s" % e)
            else:
                text_uri = URIRef(uris.uuid())
                update_project_text(g, project_uri, text_uri, request.user)
                return NegotiatedGraphResponse(request, read_project_text(project_uri, text_uri))
        else:
            return HttpResponseForbidden()
    else:
        return HttpResponse(status=401)
Exemple #12
0
def create_project_text_from_request(request, project_uri, request_text_uri):
    if request.user.is_authenticated():
        if has_permission_over(project_uri,
                               user=request.user,
                               permission=NS.perm.mayUpdate):
            try:
                logger.debug(
                    '!!!!!!!!!!!!!!! project_texts.py - create_project_text_from_request'
                )
                g = parse_request_into_graph(request)
            except (ParserError, SyntaxError) as e:
                logger.debug(
                    '!!!!!!!!!!!!!!! project_texts.py - create_project_text_from_request - EXCEPTION !!!!!!!!'
                )
                return HttpResponse(
                    status=400,
                    content="Unable to parse serialization.\n%s" % e)
            else:
                logger.debug(
                    '!!!!!!!!!!!!!!! project_texts.py - create_project_text_from_request - ELSE !!!!!!!!'
                )
                text_uri = URIRef(uris.uuid())
                logger.debug("uris.uuid(): %s", uris.uuid())
                logger.debug("text_uri: %s", text_uri)
                logger.debug(
                    '!!!!!!!!!!!!!!! project_texts.py - create_project_text_from_request - CREATING TEXT... !!!!!!!!'
                )
                update_project_text(g, project_uri, text_uri, request.user)
                logger.debug(
                    '!!!!!!!!!!!!!!! project_texts.py - create_project_text_from_request - CREATING TEXT COMPLETE !!!!!!!!'
                )
                logger.debug(
                    '!!!!!!!!!!!!!!! project_texts.py - create_project_text_from_request - UPDATING... !!!!!!!!'
                )
                update_project_text(g, project_uri, request_text_uri,
                                    request.user)
                logger.debug(
                    '!!!!!!!!!!!!!!! project_texts.py - create_project_text_from_request - UPDATING COMPLETE !!!!!!!!'
                )
                return NegotiatedGraphResponse(
                    request, read_project_text(project_uri, text_uri))
        else:
            return HttpResponseForbidden()
    else:
        return HttpResponse(status=401)
def create_or_update_annotations(request, dest_graph_uri=None, anno_uri=None):
    dest_g = destination_graph(dest_graph_uri)
    annotations_g = graph()
    try:
        parse_request_into_graph(request, annotations_g)
    except (ParserError, SyntaxError) as e:
        return HttpResponse(status=400,
                            content="Unable to parse serialization.\n%s" % e)
    anno_uris = annotation_uris(annotations_g)
    if not anno_uris:
        return HttpResponse(status=400,
                            content="No %s nodes found." %
                            URIRef(NS.oa['Annotation']))

    if not valid_annotations(dest_g, annotations_g, anno_uris):
        return HttpResponse(status=400, content=validator.failure)

    with transaction.commit_on_success():
        for i in anno_uris:
            stored_g = update_annotation(request, dest_g, annotations_g, i)

    return NegotiatedGraphResponse(request, stored_g, status=201)
def get_annotations(request, graph_uri, anno_uris=None):
    if anno_uris is None:
        anno_uris = []

    result_g = graph()
    g = destination_graph(graph_uri)
    num_anno_uris = len(anno_uris)
    if num_anno_uris > 1:
        agg_bnode = BNode()
        for i in anno_uris:
            anno_g = annotation_graph(g, URIRef(i))
            if len(list(anno_g)) > 0:
                result_g.add((agg_bnode, NS.ore['aggregates'], URIRef(i)))
                for t in anno_g:
                    result_g.add(t)
    elif num_anno_uris == 1:
        anno_g = annotation_graph(g, URIRef(anno_uris[0]))
        for t in anno_g:
            result_g.add(t)
    else:
        subjects = g.subjects(NS.rdf['type'], NS.oa['Annotation'])
        agg_bnode = BNode()
        for i in subjects:
            result_g.add((agg_bnode, NS.ore['aggregates'], URIRef(i)))
            result_g.add((URIRef(i), NS.rdf['type'], NS.oa['Annotation']))
            url = reverse('semantic_store_project_annotations',
                          kwargs={
                              'project_uri': graph_uri,
                              'anno_uri': i
                          })
            url = "http://dm.drew.edu" + url
            result_g.add((URIRef(i), NS.ore['isDescribedBy'], URIRef(url)))

    if len(result_g) > 0:
        return NegotiatedGraphResponse(request, result_g, status=200)
    else:
        return HttpResponse(status=204)  # Not really a 404, just no content