Beispiel #1
0
    def query(self, job_uri):
        base_uri = "http://example.com/columns/{id}".format(id=self.uuid)
        uri = escape_helpers.sparql_escape_uri(base_uri)

        query_str = "INSERT DATA { \n"
        query_str += "\tGRAPH {app_uri} {{ \n".format(
            app_uri=escape_helpers.sparql_escape_uri(
                "http://mu.semte.ch/application"))
        query_str += "\t\t{uri} a ext:Column . \n".format(uri=uri)
        for attr, value in self.__dict__.items():
            print(attr, value, type(value))
            relation = get_relation(attr)
            if relation == 'ext:file' and value is not None:
                str = "\t\t{uri} {relation} {value} . \n".format(
                    uri=uri, relation=relation, value=value)
                query_str += str
            else:
                query_str += str_query(uri, relation, value)
        query_str += "{job} ext:column {column} . ".format(
            job=escape_helpers.sparql_escape_uri(job_uri), column=uri)
        query_str += "\t}\n"
        query_str += "}\n"

        prefixes = "PREFIX ext: {uri}\n".format(
            uri=escape_helpers.sparql_escape_uri(
                "http://mu.semte.ch/vocabularies/ext/"))
        prefixes += "PREFIX mu: {uri}\n".format(
            uri=escape_helpers.sparql_escape_uri(
                "http://mu.semte.ch/vocabularies/core/"))
        query_str = prefixes + query_str

        return query_str
Beispiel #2
0
def __register_start_signing_flow(signflow_uri: str):
    timestamp = datetime.now()
    update_activities_command = __update_activities_template.substitute(
        graph=sparql_escape_uri(APPLICATION_GRAPH),
        signflow=sparql_escape_uri(signflow_uri),
        start_date=sparql_escape_datetime(timestamp))
    update(update_activities_command)
def construct_insert_document(document_name,
                              file_uri,
                              graph=APPLICATION_GRAPH):
    document = {"name": document_name, "created": datetime.now(TIMEZONE)}
    document["uuid"] = generate_uuid()
    document["uri"] = DOCUMENT_BASE_URI + document["uuid"]
    query_template = Template("""
PREFIX dossier: <https://data.vlaanderen.be/ns/dossier#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>

INSERT {
    GRAPH $graph {
        $document a dossier:Stuk ;
            mu:uuid $uuid ;
            dct:title $name ;
            dct:created $created ;
            ext:file $file .
    }
}
WHERE {
    GRAPH $graph {
        $file a nfo:FileDataObject .
    }
}
""")
    return query_template.substitute(
        graph=sparql_escape_uri(graph),
        document=sparql_escape_uri(document["uri"]),
        uuid=sparql_escape_string(document["uuid"]),
        name=sparql_escape_string(document["name"]),
        created=sparql_escape_datetime(document["created"]),
        file=sparql_escape_uri(file_uri))
def construct_attach_document_to_previous_version(doc_uri,
                                                  prev_ver_doc_uri,
                                                  graph=APPLICATION_GRAPH):
    """ Also handles attaching the new version to the previous one's case"""
    query_template = Template("""
PREFIX dossier: <https://data.vlaanderen.be/ns/dossier#>
PREFIX pav: <http://purl.org/pav/>

INSERT {
    GRAPH $graph {
        $doc pav:previousVersion $prev_doc .
        ?case dossier:Dossier.bestaatUit $doc .
    }
}
WHERE {
    GRAPH $graph {
        $doc a dossier:Stuk .
        $prev_doc a dossier:Stuk .
        OPTIONAL {
            ?case a dossier:Dossier ;
                dossier:Dossier.bestaatUit $prev_doc .
        }
    }
}
""")
    return query_template.substitute(
        graph=sparql_escape_uri(graph),
        doc=sparql_escape_uri(doc_uri),
        prev_doc=sparql_escape_uri(prev_ver_doc_uri))
def construct_get_file_for_document(document_uri,
                                    file_mimetype=None,
                                    graph=APPLICATION_GRAPH):
    if file_mimetype is not None:
        format_filter = "FILTER( CONTAINS( ?format, {} ) )".format(
            sparql_escape_string(file_mimetype))
    else:
        format_filter = ""
    query_template = Template("""
PREFIX dossier: <https://data.vlaanderen.be/ns/dossier#>
PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>

SELECT (?file AS ?uri)
WHERE {
    GRAPH $graph {
        $document a dossier:Stuk ;
            ext:file ?file .
        ?file a nfo:FileDataObject ;
            nfo:fileName ?name ;
            dct:format ?format .
        $format_filter
    }
}
LIMIT 1
""")
    return query_template.substitute(graph=sparql_escape_uri(graph),
                                     document=sparql_escape_uri(document_uri),
                                     format_filter=format_filter)
Beispiel #6
0
def construct_get_mandatee_by_email(mandatee_email, graph=APPLICATION_GRAPH):
    mail_uri = "mailto:{}".format(mandatee_email)
    maximal_end_date = datetime.now().replace(hour=0,
                                              minute=0,
                                              second=0,
                                              microsecond=0)  # Today
    # Sometimes a mandatee needs to sign some last docs a couple of days after the end of the mandate
    maximal_end_date = maximal_end_date - timedelta(days=30)
    query_template = Template("""
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>

SELECT ?mandatee
WHERE {
    GRAPH $graph {
        ?mandatee a mandaat:Mandataris ;
            mandaat:isBestuurlijkeAliasVan ?person ;
            mandaat:einde ?end_date ;
            mandaat:start ?start_date .
        ?person foaf:mbox $mail_uri .
        FILTER(?start_date < NOW())
        FILTER(?end_date > $end_date)
    }
}
ORDER BY DESC(?end_date)
""")
    return query_template.substitute(
        graph=sparql_escape_uri(graph),
        mail_uri=sparql_escape_uri(mail_uri),
        end_date=sparql_escape_datetime(maximal_end_date))
def construct_get_signinghub_machine_user_session_query():
    query_template = Template("""
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX oauth-2.0: <http://kanselarij.vo.data.gift/vocabularies/oauth-2.0-session/>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>

SELECT (?signinghubSession AS ?uri) ?expiryTime ?token
WHERE {
    GRAPH $session_graph {
        ?signinghubSession a ext:SigninghubSudoSession .
        ?signinghubSession oauth-2.0:hasEndpointURI $signinghub_token_endpoint ;
            oauth-2.0:hasTokenValue ?tokenUri.
        ?tokenUri oauth-2.0:hasTokenValue ?token ;
            oauth-2.0:hasExpirytime ?expiryTime .
        BIND($now as ?now)
        FILTER (?now < ?expiryTime)
    }
}
ORDER BY DESC(?expiryTime)
LIMIT 1
""")
    query_string = query_template.substitute(
        session_graph=sparql_escape_uri(SESSION_GRAPH),
        signinghub_token_endpoint=sparql_escape_uri(SIGNINGHUB_OAUTH_TOKEN_EP),
        now=sparql_escape_datetime(datetime.now(tz=TIMEZONE)))
    return query_string
def construct_get_signinghub_session_query(mu_session_uri):
    # TODO: Model connection betheen Signinghub Session and user/account (now "ext:shSessionAccount").
    query_template = Template("""
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX session: <http://mu.semte.ch/vocabularies/session/>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
PREFIX oauth-2.0: <http://kanselarij.vo.data.gift/vocabularies/oauth-2.0-session/>

SELECT (?signinghubSession AS ?uri) ?expiryTime ?token
WHERE {
    GRAPH $session_graph {
        $mu_session session:account ?account .
        ?signinghubSession ext:shSessionAccount ?account .
        ?signinghubSession oauth-2.0:hasEndpointURI $signinghub_token_endpoint ;
            oauth-2.0:hasTokenValue ?tokenUri.
        ?tokenUri oauth-2.0:hasTokenValue ?token ;
            oauth-2.0:hasExpirytime ?expiryTime .
        BIND($now as ?now)
        FILTER (?now < ?expiryTime)
    }
}
ORDER BY DESC(?expiryTime)
LIMIT 1
""")
    query_string = query_template.substitute(
        session_graph=sparql_escape_uri(SESSION_GRAPH),
        mu_session=sparql_escape_uri(mu_session_uri),
        signinghub_token_endpoint=sparql_escape_uri(SIGNINGHUB_OAUTH_TOKEN_EP),
        now=sparql_escape_datetime(datetime.now(tz=TIMEZONE)))
    return query_string
def construct_insert_signinghub_session_query(signinghub_session,
                                              signinghub_session_uri):
    signinghub_token_uri = SIGNINGHUB_TOKEN_BASE_URI + generate_uuid()
    expiry_time = signinghub_session.last_successful_auth_time + signinghub_session.access_token_expiry_time
    query_template = Template("""
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX oauth-2.0: <http://kanselarij.vo.data.gift/vocabularies/oauth-2.0-session/>

INSERT DATA {
    GRAPH $session_graph {
        $signinghub_session a oauth-2.0:OauthSession ;
            oauth-2.0:hasEndpointURI $signinghub_token_endpoint ;
            oauth-2.0:hasTokenValue $token_uri .
        $token_uri a oauth-2.0:BearerToken ;
            dct:created $creation_time ;
            oauth-2.0:hasTokenValue $token_value ;
            oauth-2.0:hasExpirytime $expiry_time .
    }
}""")

    query_string = query_template.substitute(
        session_graph=sparql_escape_uri(SESSION_GRAPH),
        signinghub_session=sparql_escape_uri(signinghub_session_uri),
        signinghub_token_endpoint=sparql_escape_uri(SIGNINGHUB_OAUTH_TOKEN_EP),
        token_uri=sparql_escape_uri(signinghub_token_uri),
        creation_time=sparql_escape_datetime(
            signinghub_session.last_successful_auth_time.astimezone(TIMEZONE)),
        expiry_time=sparql_escape_datetime(expiry_time.astimezone(TIMEZONE)),
        token_value=sparql_escape_string(signinghub_session.access_token))
    return query_string
Beispiel #10
0
def construct_get_file_query(file_uri, graph=APPLICATION_GRAPH):
    """
    Construct a SPARQL query for querying a file.
    :param file_uri: string containing file uri
    :returns: string containing SPARQL query
    """
    query_template = Template("""
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>
PREFIX nie: <http://www.semanticdesktop.org/ontologies/2007/01/19/nie#>
PREFIX dbpedia: <http://dbpedia.org/ontology/>

SELECT (?file_uri AS ?uri) ?uuid ?name ?size ?extension ?physicalFile
WHERE {
    GRAPH $graph {
        $file_uri a nfo:FileDataObject ;
            mu:uuid ?uuid ;
            nfo:fileName ?name ;
            nfo:fileSize ?size ;
            dbpedia:fileExtension ?extension ;
            ^nie:dataSource ?physicalFile .
        BIND($file_uri AS ?file_uri)
        ?physicalFile a nfo:FileDataObject .
    }
}
""")
    return query_template.substitute(graph=sparql_escape_uri(graph),
                                     file_uri=sparql_escape_uri(file_uri))
Beispiel #11
0
def construct(signflow_uri: str) -> str:
    query_template = Template("""
PREFIX prov: <http://www.w3.org/ns/prov#>
PREFIX dossier: <https://data.vlaanderen.be/ns/dossier#>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX sign: <http://mu.semte.ch/vocabularies/ext/handtekenen/>
PREFIX signinghub: <http://mu.semte.ch/vocabularies/ext/signinghub/>

SELECT ?signing_activity ?start_date ?end_date ?signer ?signer_id
WHERE {
    GRAPH $graph {
        ?signflow a sign:Handtekenaangelegenheid ;
            sign:doorlooptHandtekening ?sign_subcase .
        ?sign_subcase a sign:HandtekenProcedurestap ;
            ^sign:handtekeningVindtPlaatsTijdens ?signing_activity .
        ?signing_activity a sign:Handtekenactiviteit ;
            dossier:Activiteit.startdatum ?start_date ;
            dossier:Activiteit.einddatum ?end_date ;
            sign:ondertekenaar ?signer .
        ?signer a mandaat:Mandataris ;
            mu:uuid ?signer_id .
    }

    VALUES ?signflow { $signflow }
}
""")
    return query_template.substitute(
        graph=sparql_escape_uri(APPLICATION_GRAPH),
        signflow=sparql_escape_uri(signflow_uri))
Beispiel #12
0
def generate_integration_url(signinghub_session: SigningHubSession,
                             signflow_uri: str, piece_uri: str,
                             collapse_panels: bool):
    pieces = signing_flow.get_pieces(signflow_uri)
    piece = query_result_helpers.ensure_1(pieces)
    if piece["uri"] != piece_uri:
        raise exceptions.InvalidStateException(
            f"Piece <{piece_uri}> is not linked to signflow <{signflow_uri}>.")

    query_string = _query_signinghub_document.substitute(
        graph=sparql_escape_uri(APPLICATION_GRAPH),
        signflow=sparql_escape_uri(signflow_uri),
        piece=sparql_escape_uri(piece_uri))

    signinghub_document_result = query(query_string)
    signinghub_documents = query_result_helpers.to_recs(
        signinghub_document_result)
    signinghub_document = signinghub_documents[0]
    signinghub_package_id = signinghub_document["signinghub_package_id"]

    integration_url = signinghub_session.get_integration_link(
        signinghub_package_id,
        {
            "language": "nl-NL",
            # "user_email": "*****@*****.**", # Know through SSO login?
            # "callback_url":"https://web.signinghub.com/", # default configured fir the app.
            "collapse_panels": "true" if collapse_panels else "false",
            # "usercertificate_id": "31585" # Undocumented
        })

    return integration_url
def str_query(uri, relation, value):
    if value is not None:
        if isinstance(value, list):
            # Store lists as json string dumps
            value = json.dumps(value)

        if type(value).__module__ == np.__name__:
            # Convert the numpy value (e.g. int64) to a python value
            value = value.item()

        uri_relations = (get_relation("data_type"))
        escaped_value = ""
        if relation in uri_relations:
            escaped_value = escape_helpers.sparql_escape_uri(value)
        else:
            escaped_value = escape_helpers.sparql_escape(value)

        if isinstance(value, bool):
            # Fix for weird problem with booleans
            escaped_value = escaped_value.replace("False", "false")
            escaped_value = escaped_value.replace("True", "true")
            escaped_value = escaped_value.replace("^^xsd:boolean",
                                                  "^^<http://mu.semte.ch/vocabularies/typed-literals/boolean>")

        return "\t\t{uri} {relation} {value} . \n".format(uri=uri, relation=relation,
                                                          value=escaped_value)
    return ""
Beispiel #14
0
def get_physical_file(uri):
    """
    Fetches the physical file on disk that belongs to a certain
    virtual file object (virtual files can link to files that are not in the
    database, but every file in the database has a virtual file object that acts
    as an identifier).
    """
    # Get file based on ?file
    file_query = """
        PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
        PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>
        PREFIX dbpedia: <http://dbpedia.org/ontology/>
        PREFIX dct: <http://purl.org/dc/terms/>
        PREFIX nie: <http://www.semanticdesktop.org/ontologies/2007/01/19/nie#>

        SELECT (?uuid as ?id) ?logical_file ?extension
        WHERE{{
            GRAPH <http://mu.semte.ch/application>{{
            {uri} a nfo:FileDataObject ;
                  dbpedia:fileExtension ?extension;
                  mu:uuid ?uuid .
            ?logical_file nie:dataSource {uri} .
            }}
        }}
        LIMIT 20
        """.format(uri=escape_helpers.sparql_escape_uri(uri))

    result = helpers.query(file_query)
    pprint(flask.jsonify(result))

    logical_file = extract_from_query(result, "logical_file")
    extension = extract_from_query(result, "extension")

    return logical_file, extension
Beispiel #15
0
def construct_select_docs_query(batch_size, graph):
    with open('/usr/src/app/ext/app/queries/1-select-docs.sparql',
              'r') as file:
        template = file.read()
        template = template.replace('# GRAPH_PLACEHOLDER',
                                    escape_helpers.sparql_escape_uri(graph))
        template = template.replace('# LIMIT_PLACEHOLDER', str(batch_size))
        return template
Beispiel #16
0
def construct_insert_file_query(file, physical_file, graph=APPLICATION_GRAPH):
    """
    Construct a SPARQL query for inserting a file.
    :param file: dict containing properties for file
    :param share_uri: 
    :returns: string containing SPARQL query
    """
    query_template = Template("""
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>
PREFIX nie: <http://www.semanticdesktop.org/ontologies/2007/01/19/nie#>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX dbpedia: <http://dbpedia.org/ontology/>

INSERT DATA {
    GRAPH $graph {
        $uri a nfo:FileDataObject ;
            mu:uuid $uuid ;
            nfo:fileName $name ;
            dct:format $mimetype ;
            dct:created $created ;
            nfo:fileSize $size ;
            dbpedia:fileExtension $extension .
        $physical_uri a nfo:FileDataObject ;
            mu:uuid $physical_uuid ;
            nfo:fileName $physical_name ;
            dct:format $mimetype ;
            dct:created $created ;
            nfo:fileSize $size ;
            dbpedia:fileExtension $extension ;
            nie:dataSource $uri .
    }
}
""")
    return query_template.substitute(
        graph=sparql_escape_uri(graph),
        uri=sparql_escape_uri(file["uri"]),
        uuid=sparql_escape_string(file["uuid"]),
        name=sparql_escape_string(file["name"]),
        mimetype=sparql_escape_string(file["mimetype"]),
        created=sparql_escape_datetime(file["created"]),
        size=sparql_escape_int(file["size"]),
        extension=sparql_escape_string(file["extension"]),
        physical_uri=sparql_escape_uri(physical_file["uri"]),
        physical_uuid=sparql_escape_string(physical_file["uuid"]),
        physical_name=sparql_escape_string(physical_file["name"]))
def run_batch(batch_size, graph):

    documents = list(
        map(
            lambda res: res['doc']['value'],
            list(
                helpers.query(construct_select_docs_query(
                    batch_size, graph))['results']['bindings'])))

    res = helpers.query(construct_list_doc_versions_query(
        documents, graph))['results']['bindings']

    res_by_doc = itertools.groupby(res, lambda res: res['doc']['value'])

    triples = []
    for doc_uri, results in res_by_doc:
        results = list(results)
        for i in range(len(results)):
            res = results[i]
            try:
                title = res['stuknummerVR']['value']
            except KeyError:
                title = res['title']['value']
            versioned_title = title + LATIN_ADVERBIAL_NUMERALS[int(
                res['num']['value'])]
            triples.append((
                escape_helpers.sparql_escape_uri(results[i]['ver']['value']),
                'dct:title',
                escape_helpers.sparql_escape_string(versioned_title),
            ))
            if i > 0:
                triples.append((
                    escape_helpers.sparql_escape_uri(
                        results[i]['ver']['value']),
                    'pav:previousVersion',
                    escape_helpers.sparql_escape_uri(
                        results[i - 1]['ver']['value']),
                ))
    if triples:
        query = construct_insert_triples(triples, graph)
        res = helpers.update(query)

    query = construct_migrate_docs(documents, graph)
    res = helpers.update(query)

    return documents
def construct_get_document_for_file(file_uri, graph=APPLICATION_GRAPH):
    query_template = Template("""
PREFIX dossier: <https://data.vlaanderen.be/ns/dossier#>
PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>

SELECT (?document AS ?uri)
WHERE {
    GRAPH $graph {
        ?document a dossier:Stuk ;
            ext:file $file .
        $file a nfo:FileDataObject .
    }
}
LIMIT 1
""")
    return query_template.substitute(graph=sparql_escape_uri(graph),
                                     file=sparql_escape_uri(file_uri))
Beispiel #19
0
def construct_migrate_docs(document_uris, graph):
    document_uris = '\n      '.join(
        map(escape_helpers.sparql_escape_uri, document_uris))
    with open('/usr/src/app/ext/app/queries/4-migrate-docs.sparql',
              'r') as file:
        template = file.read()
        template = template.replace('# GRAPH_PLACEHOLDER',
                                    escape_helpers.sparql_escape_uri(graph))
        template = template.replace('# DOC_URIS_PLACEHOLDER', document_uris)
        return template
Beispiel #20
0
def construct_get_mandatee(mandatee_uri, graph=APPLICATION_GRAPH):
    query_template = Template("""
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>

SELECT ?email ?first_name ?family_name
WHERE {
    GRAPH $graph {
        $mandatee a mandaat:Mandataris ;
            mandaat:isBestuurlijkeAliasVan ?person .
        OPTIONAL { ?person foaf:firstName ?first_name }
        OPTIONAL { ?person foaf:familyName ?family_name }
        OPTIONAL {
            ?person foaf:mbox ?mail_uri .
            BIND( REPLACE(STR(?mail_uri), "mailto:", "") AS ?email)
        }
    }
}
""")
    return query_template.substitute(graph=sparql_escape_uri(graph),
                                     mandatee=sparql_escape_uri(mandatee_uri))
def construct_attach_signinghub_session_to_mu_session_query(
        signinghub_session_uri, mu_session_uri):
    # TODO: Model connection betheen Signinghub Session and user/account (now "ext:shSessionAccount").
    query_template = Template("""
PREFIX session: <http://mu.semte.ch/vocabularies/session/>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>

INSERT {
    GRAPH $session_graph {
        $signinghub_session ext:shSessionAccount ?account .
    }
}
WHERE {
    GRAPH $session_graph {
        $mu_session session:account ?account .
    }
}""")
    query_string = query_template.substitute(
        session_graph=sparql_escape_uri(SESSION_GRAPH),
        signinghub_session=sparql_escape_uri(signinghub_session_uri),
        mu_session=sparql_escape_uri(mu_session_uri))
    return query_string
Beispiel #22
0
def construct(signflow_uri: str):
    query_template = Template("""
PREFIX prov: <http://www.w3.org/ns/prov#>
PREFIX dossier: <https://data.vlaanderen.be/ns/dossier#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX sign: <http://mu.semte.ch/vocabularies/ext/handtekenen/>
PREFIX signinghub: <http://mu.semte.ch/vocabularies/ext/signinghub/>

SELECT ?piece ?piece_id ?sh_document_id
WHERE {
    GRAPH $graph {
        ?signflow a sign:Handtekenaangelegenheid ;
            sign:doorlooptHandtekening ?sign_subcase .
        ?sign_subcase a sign:HandtekenProcedurestap .
        ?marking_activity a sign:Markeringsactiviteit ;
            sign:markeringVindtPlaatsTijdens ?sign_subcase ;
            sign:gemarkeerdStuk ?piece .
        ?piece a dossier:Stuk ;
            mu:uuid ?piece_id .
    
        OPTIONAL {
            ?preparation_activity a sign:Voorbereidingsactiviteit ;
                sign:voorbereidingVindtPlaatsTijdens ?sign_subcase ;
                sign:voorbereidingGenereert ?signinghub_doc .
            ?signinghub_doc a signinghub:Document ;
                prov:hadPrimarySource ?piece ;
                signinghub:documentId ?sh_document_id .
        }
    
    }
            
    VALUES ?signflow { $signflow }
}
""")
    return query_template.substitute(
        graph=sparql_escape_uri(APPLICATION_GRAPH),
        signflow=sparql_escape_uri(signflow_uri)
    )
def construct_get_mu_session_query(mu_session_uri):
    query_template = Template("""
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX session: <http://mu.semte.ch/vocabularies/session/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?uuid ?email
WHERE {
    GRAPH $session_graph {
        $mu_session mu:uuid ?uuid ;
            session:account ?account .
    }
    GRAPH $account_graph {
        ?person foaf:account ?account ;
            foaf:mbox ?email_uri .
        BIND(REPLACE(STR(?email_uri), "^mailto:", "") AS ?email)
    }
}""")
    query_string = query_template.substitute(
        session_graph=sparql_escape_uri(SESSION_GRAPH),
        account_graph=sparql_escape_uri(ACCOUNT_GRAPH),
        mu_session=sparql_escape_uri(mu_session_uri))
    return query_string
def construct_mark_signinghub_session_as_machine_users_query(
        signinghub_session_uri):
    # TODO: this is a hacky way of marking the machine user session.
    # Should think about way to model the service as an agent (with a mu session?)
    query_template = Template("""
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
PREFIX oauth-2.0: <http://kanselarij.vo.data.gift/vocabularies/oauth-2.0-session/>

INSERT {
    GRAPH $session_graph {
        $signinghub_session a ext:SigninghubSudoSession .
    }
}
WHERE {
    GRAPH $session_graph {
        $signinghub_session a oauth-2.0:OauthSession .
    }
}
""")
    query_string = query_template.substitute(
        session_graph=sparql_escape_uri(SESSION_GRAPH),
        signinghub_session=sparql_escape_uri(signinghub_session_uri),
        now=sparql_escape_datetime(datetime.now(tz=TIMEZONE)))
    return query_string
Beispiel #25
0
def construct_get_mandatee_by_id(mandatee_id, graph=APPLICATION_GRAPH):
    query_template = Template("""
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>

SELECT DISTINCT (?mandatee as ?uri)
WHERE {
    GRAPH $graph {
        ?mandatee a mandaat:Mandataris ;
            mu:uuid $uuid .
    }
}
""")
    return query_template.substitute(graph=sparql_escape_uri(graph),
                                     uuid=sparql_escape_string(mandatee_id))
Beispiel #26
0
def construct_get_file_by_id(file_id, graph=APPLICATION_GRAPH):
    query_template = Template("""
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>

SELECT (?file AS ?uri)
WHERE {
    GRAPH $graph {
        ?file a nfo:FileDataObject ;
            mu:uuid $uuid .
    }
}
LIMIT 1
""")
    return query_template.substitute(graph=sparql_escape_uri(graph),
                                     uuid=sparql_escape_string(file_id))
def construct_get_document_by_uuid(document_uuid, graph=APPLICATION_GRAPH):
    query_template = Template("""
PREFIX dossier: <https://data.vlaanderen.be/ns/dossier#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>

SELECT (?document AS ?uri)
WHERE {
    GRAPH $graph {
        ?document a dossier:Stuk ;
            mu:uuid $uuid .
    }
}
LIMIT 1
""")
    return query_template.substitute(graph=sparql_escape_uri(graph),
                                     uuid=sparql_escape_string(document_uuid))
Beispiel #28
0
def construct_insert_triples(triples, graph):
    query = """
    PREFIX pav: <http://purl.org/pav/>
    PREFIX dct: <http://purl.org/dc/terms/>
    
    INSERT DATA {
      GRAPH # GRAPH_PLACEHOLDER {
    """
    query = query.replace('# GRAPH_PLACEHOLDER',
                          escape_helpers.sparql_escape_uri(graph))
    for s, p, o in triples:
        query += "    {} {} {} .\n".format(s, p, o)
    query += """
      }
    }
    """
    return query
Beispiel #29
0
def assign_signers(signinghub_session: SigningHubSession, signflow_uri: str,
                   signer_uris: typing.List[str]):
    #TODO: validation: ensure signflow is in draft
    mandatees_query_command = _query_mandatees_template.substitute(
        graph=sparql_escape_uri(APPLICATION_GRAPH),
        mandatees=query_result_helpers.sparql_escape_list(
            [sparql_escape_uri(uri) for uri in signer_uris]))
    mandatee_result = query(mandatees_query_command)
    mandatee_records = query_result_helpers.to_recs(mandatee_result)
    mandatee_records_set = {r["mandatee"] for r in mandatee_records}
    mandatees_not_found = [
        uri for uri in signer_uris if uri not in mandatee_records_set
    ]
    if mandatees_not_found:
        raise exceptions.ResourceNotFoundException(
            ','.join(mandatees_not_found))

    signflow_record = signing_flow.get_signing_flow(signflow_uri)
    sh_package_id = signflow_record["sh_package_id"]
    sh_users = [{
        "user_email":
        r["email"],
        "user_name":
        ' '.join(
            [name for name in [r["first_name"], r["family_name"]] if name]),
        "role":
        "SIGNER"
    } for r in mandatee_records]
    signinghub_session.add_users_to_workflow(sh_package_id, sh_users)

    signing_activities = [
        _build_signing_activity(signer_uri) for signer_uri in signer_uris
    ]

    signing_activities_escaped = query_result_helpers.sparql_escape_table([[
        sparql_escape_uri(r["uri"]),
        sparql_escape_string(r["id"]),
        sparql_escape_uri(r["mandatee_uri"])
    ] for r in signing_activities])

    assign_signers_command = _assign_signers_template.substitute(
        graph=sparql_escape_uri(APPLICATION_GRAPH),
        signflow=sparql_escape_uri(signflow_uri),
        signing_activities=signing_activities_escaped)
    update(assign_signers_command)

    return signing_activities
Beispiel #30
0
def str_query(uri, relation, value):
    if value is not None:

        uri_relations = ("ext:unitUri")
        escaped_value = ""
        if relation in uri_relations:
            escaped_value = escape_helpers.sparql_escape_uri(value)
        else:
            escaped_value = escape_helpers.sparql_escape(value)

        if isinstance(value, bool):
            # Fix for weird problem with booleans
            escaped_value = escaped_value.replace("False", "false")
            escaped_value = escaped_value.replace("True", "true")
            escaped_value = escaped_value.replace(
                "^^xsd:boolean",
                "^^<http://mu.semte.ch/vocabularies/typed-literals/boolean>")

        return "\t\t{uri} {relation} {value} . \n".format(uri=uri,
                                                          relation=relation,
                                                          value=escaped_value)
    return ""