Example #1
0
def records_v2(domain_id,
               dataset_id,
               where='',
               search='',
               refine='',
               exclude='',
               rows=10,
               start=0,
               sort='',
               select='',
               api_key=None):
    params = {
        'where': where,
        'search': search,
        'refine': refine,
        'exclude': exclude,
        'rows': rows,
        'start': start,
        'sort': sort,
        'select': select,
        'apikey': api_key
    }
    request = requests.get(
        f'https://{domain_id}.opendatasoft.com/api/v2/catalog/datasets/{dataset_id}/records',
        params,
        timeout=requester.get_timeout(),
        headers=requester.create_ods_headers())
    request.raise_for_status()
    return request.json()
Example #2
0
def lookup_uri(uri, term_type='class', language=None):
    if uri:
        if term_type == 'class':
            url = SEARCH_CLASS_URL
        else:
            url = SEARCH_PROPERTY_URL
        if language:
            language_selection_query = "language = '{}' OR language = 'undefined' OR language = 'en'".format(
                language)
            where = "(uri = '{}') AND ({})".format(uri,
                                                   language_selection_query)
        else:
            where = "uri = '{}'".format(uri)
        params = {
            'where': where,
            'rows': ROWS,
            'apikey': settings.DATA_API_KEY
        }
        request = requests.get(url,
                               params,
                               timeout=Requester.get_timeout(),
                               headers=Requester.create_ods_headers())
        request.raise_for_status()
        return request.json()
    else:
        raise QueryParameterMissing
Example #3
0
def export_records_v2(domain_id,
                      dataset_id,
                      where='',
                      search='',
                      rows=-1,
                      start=0,
                      sort='',
                      select='',
                      format='jsonl',
                      api_key=None):
    # Implemented for JSON line only (strongly advised for streaming operations)
    params = {
        'where': where,
        'search': search,
        'rows': rows,
        'start': start,
        'sort': sort,
        'select': select,
        'apikey': api_key
    }
    with requests.get(
            f'https://{domain_id}.opendatasoft.com/api/v2/catalog/datasets/{dataset_id}/exports/{format}',
            params,
            timeout=requester.get_timeout(),
            headers=requester.create_ods_headers(),
            stream=True) as request:
        request.raise_for_status()
        for line in request.iter_lines():
            if line:
                yield json.loads(line)
Example #4
0
def term_request(query, term_type='class'):
    if query:
        params = {'q': query, 'type': term_type}
        request = requests.get(SEARCH_TERM_URL, params, timeout=Requester.get_timeout(), headers=Requester.create_ods_headers())
        request.raise_for_status()
        return request.json()
    else:
        raise QueryParameterMissing
Example #5
0
def lookup_v2(domain_id, dataset_id, api_key=None):
    params = {'apikey': api_key}
    request = requests.get(f"https://{domain_id}.opendatasoft.com/api/v2/catalog/datasets/{dataset_id}",
                           params,
                           timeout=requester.get_timeout(),
                           headers=requester.create_ods_headers())
    request.raise_for_status()
    return request.json()
def datasets_meta_request(start=0, rows=100):
    params = {'start': start, 'rows': rows, 'apikey': settings.DATA_API_KEY}
    request = requests.get(DATA_CATALOG_API_SEARCH_URL,
                           params,
                           timeout=Requester.get_timeout(),
                           headers=Requester.create_ods_headers())
    request.raise_for_status()
    return request.json()
Example #7
0
def vocabulary_request(query, lang=None):
    if query:
        params = {'q': query}
        if lang:
            params['lang'] = lang
        request = requests.get(SEARCH_VOCAB_URL, params, timeout=Requester.get_timeout(), headers=Requester.create_ods_headers())
        request.raise_for_status()
        return request.json()
    else:
        raise QueryParameterMissing
def dataset_meta_request(dataset_id):
    if dataset_id:
        params = {'apikey': settings.DATA_API_KEY}
        request = requests.get(DATA_CATALOG_API_URL.format(dataset_id),
                               params,
                               timeout=Requester.get_timeout(),
                               headers=Requester.create_ods_headers())
        request.raise_for_status()
        return request.json()
    else:
        raise DatasetIdMissing
def datasets_search_v2(search='', rows=10, sort='explore.popularity_score'):
    params = {
        'search': search,
        'rows': rows,
        'sort': sort,
        'apikey': settings.DATA_API_KEY
    }
    request = requests.get(DATA_CATALOG_API_SEARCH_V2_URL,
                           params,
                           timeout=Requester.get_timeout(),
                           headers=Requester.create_ods_headers())
    request.raise_for_status()
    return request.json()
def is_valid(lov_result):
    """
        Checks if a result from linked open vocabulary (class or property) is good enough to be used by the chatbot

        Conditions are:
        - URI is available (returns HTTP code 200) activated if CHECK_URI_AVAILABILITY is set to True in configuration
        - Chatbot score of the result is equal or higher to the MINIMAL_CHATBOT_SCORE defined in configuration
        configuration is in your chatbot_app.local_settings.
        chatbot score is computed in utils.lov_ods_api._chatbot_score function.
    """
    if settings.CHECK_URI_AVAILABILITY:
        try:
            if requests.get(lov_result['fields']['uri'], timeout=Requester.get_timeout()).status_code != 200:
                return False
        except (requests.Timeout, ConnectionError):
            return False
    if lov_result['chatbot_score'] < settings.MINIMAL_CHATBOT_SCORE:
        return False
    return True
Example #11
0
def term_request(query, term_type='class', language='en'):
    language_selection_query = "language = '{}' OR language = 'undefined' OR language = 'en'".format(
        language)
    if query:
        query = _clean(query)
        splited_query = query.split()
        if term_type == 'class':
            field_priority = FIELD_CLASS_PRIORITY
            field_weight = FIELD_CLASS_WEIGHT
            filter_query = _build_filter_query(FIELD_CLASS_PRIORITY,
                                               splited_query)
            url = SEARCH_CLASS_URL
        else:
            field_priority = FIELD_PROPERTY_PRIORITY
            field_weight = FIELD_PROPERTY_WEIGHT
            filter_query = _build_filter_query(FIELD_PROPERTY_PRIORITY,
                                               splited_query)
            url = SEARCH_PROPERTY_URL
        ontology_query = _build_ontology_query()
        where = "({}) {} AND ({})".format(filter_query, ontology_query,
                                          language_selection_query)
        params = {
            'where': where,
            'rows': ROWS,
            'apikey': settings.DATA_API_KEY
        }
        request = requests.get(url,
                               params,
                               timeout=Requester.get_timeout(),
                               headers=Requester.create_ods_headers())
        request.raise_for_status()
        result_set = _chatbot_score(request.json(), field_priority,
                                    field_weight, query)
        return result_set
    else:
        raise QueryParameterMissing