Exemple #1
0
def html_datasets(provider=None):

    query_providers = {"enable": True}
    projection_provider = {"_id": False, 
                           "name": True, "slug": True}

    query_datasets = {"enable": True}
    projection_datasets = {"_id": False, 
                           "name": True, "slug": True, 
                           "dataset_code": True, "provider_name": True}
    
    if provider:
        provider_doc = queries.col_providers().find_one({"slug": provider})
        query_datasets["provider_name"] = provider_doc["name"]
        query_providers["name"] = provider_doc["name"]

    providers = dict([(doc["name"], doc) for doc in queries.col_providers().find(query_providers, 
                                                                                projection_provider)])
    
    query_datasets["provider_name"] = {"$in": list(providers.keys())}
    datasets = queries.col_datasets().find(query_datasets, projection_datasets)
    
    docs = {}
    for dataset in datasets:
        provider_name = dataset["provider_name"]
        if not provider_name in docs:
            docs[provider_name] = {"provider": providers[provider_name],
                                   "datasets": []}
        docs[provider_name]["datasets"].append(dataset)
    
    return render_template("datasets.html", docs=docs)
Exemple #2
0
def datasets_codelists(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "codelists": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_tools.json_response(doc["codelists"])
Exemple #3
0
def series_values_view(slug):
    query = {'slug': slug}
    projection = {
        "_id": False,
        "key": True,
        "slug": True,
        "values.value": True,
        "values.period": True,
        "provider_name": True,
        'dataset_code': True
    }
    doc = queries.col_series().find_one(query, projection)
    if not doc:
        abort(404)

    query = {
        'enable': True,
        "provider_name": doc["provider_name"],
        'dataset_code': doc["dataset_code"]
    }
    projection = {"_id": False, "enable": True}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    return json_response(json_util.dumps(doc, default=json_util.default))
Exemple #4
0
def dataset_unit(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "enable": False, "lock": False, "tags": False}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_tools.json_response(doc)
Exemple #5
0
def datasets_series_list(dataset):
    """Return all series for one dataset
    """
    
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "values": False}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    query = {'provider_name': dataset_doc['provider_name'], 
             'dataset_code': dataset_doc["dataset_code"]}
    projection = {"_id": False, "values": False}
    
    query = queries.complex_queries_series(query)

    limit = request.args.get('limit', default=1000, type=int)
    
    docs = queries.col_series().find(query, projection)

    if limit:
        docs= docs.limit(limit)
    
    _docs = [doc for doc in docs]
    
    return json_tools.json_response(_docs)
Exemple #6
0
def dataflow_2_1(agencyID=None, resourceID=None, version="latest"):
    """
    TODO: option references avec limit sur 1 dataset
    """

    references = request.args.get('references')
    
    query_ds = {'enable': True}
    if agencyID:
        query_ds["provider_name"] = agencyID.upper()
    if resourceID:
        query_ds["dataset_code"] = resourceID
    
    projection_ds = {"_id": False, 
                     "provider_name": True, "dataset_code": True, "name": True}
    docs = queries.col_datasets().find(query_ds, projection_ds)
    
    now = "%sZ" % str(datetime.utcnow().isoformat())
    context = {
        "datasets": docs,
        "message_id": str(uuid.uuid4()),
        "prepared_date": now,
        "version": "1.0"
    }
    
    tmpl = render_template('sdmx/2.1/dataflow.xml', **context)
    response = make_response(tmpl)
    response.headers["Content-Type"] = "application/xml"
    return response
Exemple #7
0
def dataset_dimensions_key_view(slug):
    query = {'enable': True, 'slug': slug}
    projection = {"_id": False, "dimension_keys": True }
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_response(json_util.dumps(doc["dimension_keys"], default=json_util.default))
Exemple #8
0
def datasets_series_list(dataset):
    """Return all series for one dataset
    """

    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "values": False}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    query = {
        'provider_name': dataset_doc['provider_name'],
        'dataset_code': dataset_doc["dataset_code"]
    }
    projection = {"_id": False, "values": False}

    query = queries.complex_queries_series(query)

    docs = queries.col_series().find(query, projection)

    page = request.args.get('page', default=1, type=int)
    per_page = request.args.get('per_page', default=20, type=int)
    if per_page > 100:
        per_page = 100
    pagination = queries.Pagination(docs, page, per_page)
    meta = {
        "page": pagination.page,
        "pages": pagination.pages,
        "per_page": pagination.per_page,
        "total": pagination.total,
    }
    _docs = [doc for doc in pagination.items]
    return json_tools.json_response(_docs, meta=meta)
Exemple #9
0
def dataset_series_list_values_by_dataset_code(provider=None,
                                               dataset_code=None,
                                               frequency=None):
    query = {"provider_name": provider, "dataset_code": dataset_code}
    projection = {
        "_id": False,
        "provider_name": True,
        "dataset_code": True,
        "metadata.frequencies": True,
        "enable": True
    }
    dataset = queries.col_datasets().find_one(query, projection)
    if not dataset:
        abort(404,
              "dataset %s/%s not found or disable." % (provider, dataset_code))

    if not frequency:
        frequency = request.args.get('frequency')
    if not frequency:
        abort(400, "frequency field is required.")

    frequencies = dataset.get("metadata", {}).get("frequencies", [])
    if frequencies and not frequency in frequencies:
        abort(404, "Frequencies available: %s" % frequencies)

    return _dataset_values(provider, dataset_code, frequency=frequency)
Exemple #10
0
def datasets_attributes_keys(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "attribute_keys": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_tools.json_response(doc.get("attribute_keys"))
Exemple #11
0
def datasets_series_list(dataset):
    """Return all series for one dataset
    """

    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "values": False}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    query = {
        'provider_name': dataset_doc['provider_name'],
        'dataset_code': dataset_doc["dataset_code"]
    }
    projection = {"_id": False, "values": False}

    query = queries.complex_queries_series(query)

    limit = request.args.get('limit', default=1000, type=int)

    docs = queries.col_series().find(query, projection)

    if limit:
        docs = docs.limit(limit)

    _docs = [doc for doc in docs]

    return json_tools.json_response(_docs)
Exemple #12
0
def datasets_attributes_keys(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "attribute_keys": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_tools.json_response(doc.get("attribute_keys"))
Exemple #13
0
def datasets_series_list(dataset):
    """Return all series for one dataset
    """
    
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "values": False}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    query = {'provider_name': dataset_doc['provider_name'], 
             'dataset_code': dataset_doc["dataset_code"]}
    projection = {"_id": False, "values": False}
    
    query = queries.complex_queries_series(query)

    docs = queries.col_series().find(query, projection)

    page = request.args.get('page', default=1, type=int)
    per_page = request.args.get('per_page', default=20, type=int)
    if per_page > 100:
        per_page = 100
    pagination = queries.Pagination(docs, page, per_page)
    meta = {
        "page": pagination.page,
        "pages": pagination.pages,
        "per_page": pagination.per_page,
        "total": pagination.total,
    }
    _docs = [doc for doc in pagination.items]
    return json_tools.json_response(_docs, meta=meta)
Exemple #14
0
def datasets_codelists(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "codelists": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_tools.json_response(doc["codelists"])
Exemple #15
0
def dataset_series_list_values(dataset):

    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "provider_name": True, "dataset_code": True }
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
        
    query = {"provider_name": doc["provider_name"], 
             'dataset_code': doc["dataset_code"]}
    projection = {
        "_id": False, 
        "key": True, "slug": True, 
        "name": True, "frequency": True,
        "start_date": True, "end_date": True,
        "dimensions": True, "attributes": True,
        "values.value": True, "values.period": True,
    }

    query = queries.complex_queries_series(query)
    docs = queries.col_series().find(query, projection)

    page = request.args.get('page', default=1, type=int)
    per_page = request.args.get('per_page', default=50, type=int)
    if per_page > 1000:
        per_page = 1000
    pagination = queries.Pagination(docs, page, per_page)
    meta = {
        "page": pagination.page,
        "pages": pagination.pages,
        "per_page": pagination.per_page,
        "total": pagination.total,
    }
    _docs = [doc for doc in pagination.items]
    return json_tools.json_response_async(_docs, meta=meta)
Exemple #16
0
def providers_datasets_list(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    projection = {
        "_id": False,
        "tags": False,
        "enable": False,
        "lock": False,
        "concepts": False,
        "codelists": False
    }
    #docs = [doc for doc in queries.col_datasets().find(query, projection)]
    docs = queries.col_datasets().find(query, projection)

    page = request.args.get('page', default=1, type=int)
    per_page = request.args.get('per_page', default=10, type=int)
    if per_page > 50:
        per_page = 50
    pagination = queries.Pagination(docs, page, per_page)
    meta = {
        "page": pagination.page,
        "pages": pagination.pages,
        "per_page": pagination.per_page,
        "total": pagination.total,
    }
    _docs = [doc for doc in pagination.items]
    #return json_tools.json_response(_docs, meta=meta)
    return json_tools.json_response_async(_docs, meta=meta)
Exemple #17
0
def dataset_unit(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, 
                  "enable": False, "lock": False, "tags": False}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_tools.json_response(doc)
Exemple #18
0
def dataset_dimensions_key_view(slug):
    query = {'enable': True, 'slug': slug}
    projection = {"_id": False, "dimension_keys": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_response(
        json_util.dumps(doc["dimension_keys"], default=json_util.default))
Exemple #19
0
def providers_datasets_list(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    projection = {"_id": False, "tags": False,
                  "enable": False, "lock": False,
                  "concepts": False, "codelists": False}
    #docs = [doc for doc in queries.col_datasets().find(query, projection)]
    docs = [doc for doc in queries.col_datasets().find(query, projection)]
    return json_tools.json_response(docs)
Exemple #20
0
def dataset_view(slug):
    query = {'enable': True, 'slug': slug}
    projection = {"_id": False, 
                  "enable": False, "lock": False, "tags": False,
                  "dimension_list": False, "attribute_list": False}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_response(json_util.dumps(doc, default=json_util.default))
Exemple #21
0
def datasets_view(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    projection = {"_id": False, "tags": False,
                  "enable": False, "lock": False,
                  "dimension_list": False, "attribute_list": False,
                  "concepts": False, "codelists": False}
    docs = queries.col_datasets().find(query, projection)
    return json_response(json_util.dumps(docs, default=json_util.default))
Exemple #22
0
def datasets_attributes_list(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "attribute_keys": True, "codelists": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    attributes = OrderedDict()
    for key in doc.get("attribute_keys"):
        attributes[key] = doc["codelists"].get(key, {})
    return json_tools.json_response(attributes)
Exemple #23
0
def datasets_attributes_list(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "attribute_keys": True, "codelists": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    attributes = OrderedDict()
    for key in doc.get("attribute_keys"):
        attributes[key] = doc["codelists"].get(key, {})
    return json_tools.json_response(attributes)
Exemple #24
0
def series_list_view(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "values": False, "tags": False}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    query = {'provider_name': dataset_doc['provider_name'], 'dataset_code': dataset_doc["dataset_code"]}
    projection = {"_id": False, "tags": False, "values": False}
    docs = queries.col_series().find(query, projection)
    return json_response(json_util.dumps(docs, default=json_util.default))
Exemple #25
0
def dataset_values_view(slug):

    query = {'enable': True, 'slug': slug}
    projection = {"_id": False, "provider_name": True, "dataset_code": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)

    #TODO: rendre obligatoire frequency

    query = {
        "provider_name": doc["provider_name"],
        'dataset_code': doc["dataset_code"]
    }
    projection = {
        "_id": False,
        "key": True,
        "slug": True,
        "frequency": True,
        "values.value": True,
        "values.period": True,
    }

    #TODO: multiple value in dimension
    limit = request.args.get('limit', default=0, type=int)

    for r in request.args.lists():
        if r[0] == 'limit':
            pass
        elif r[0] == 'frequency':
            query['frequency'] = r[1][0]
        else:
            #TODO: case regex
            query['dimensions.' + r[0]] = {'$regex': r[1][0]}

    #/api/v1/dataset/bis-pp-ls/values?Reference%20area=FR&Reference%20area=AU
    #query :  {'provider_name': 'BIS', 'dataset_code': 'PP-LS', 'dimensions.Reference area': {'$regex': 'FR'}}

    docs = queries.col_series().find(query, projection).limit(limit)
    #TODO: Period + Value
    count = docs.count() - 1

    print("dataset-values - query[%s] - result[%s]" % (query, count))

    def generate():
        yield "["
        for i, row in enumerate(docs):
            yield json_util.dumps(row, default=json_util.default)
            if i < count:
                yield ","
        yield "]"

    return app.response_class(generate(), mimetype='application/json')
Exemple #26
0
def dataset_unit_frequencies(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, 
                  "enable": False, "lock": False, "tags": False}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    
    query = {"provider_name": doc["provider_name"],
             "dataset_code": doc["dataset_code"]}
    
    docs = queries.col_series().distinct("frequency", filter=query)
    return json_tools.json_response(docs)
Exemple #27
0
def dataset_unit_frequencies(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "enable": False, "lock": False, "tags": False}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)

    query = {
        "provider_name": doc["provider_name"],
        "dataset_code": doc["dataset_code"]
    }

    docs = queries.col_series().distinct("frequency", filter=query)
    return json_tools.json_response(docs)
Exemple #28
0
def dataset_view(slug):
    query = {'enable': True, 'slug': slug}
    projection = {
        "_id": False,
        "enable": False,
        "lock": False,
        "tags": False,
        "dimension_list": False,
        "attribute_list": False
    }
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)
    return json_response(json_util.dumps(doc, default=json_util.default))
Exemple #29
0
def series_list_view(dataset):
    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "values": False, "tags": False}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    query = {
        'provider_name': dataset_doc['provider_name'],
        'dataset_code': dataset_doc["dataset_code"]
    }
    projection = {"_id": False, "tags": False, "values": False}
    docs = queries.col_series().find(query, projection)
    return json_response(json_util.dumps(docs, default=json_util.default))
Exemple #30
0
def providers_datasets_list(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    projection = {
        "_id": False,
        "tags": False,
        "enable": False,
        "lock": False,
        "concepts": False,
        "codelists": False
    }
    #docs = [doc for doc in queries.col_datasets().find(query, projection)]
    docs = [doc for doc in queries.col_datasets().find(query, projection)]
    return json_tools.json_response(docs)
Exemple #31
0
def datasets_view(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    projection = {
        "_id": False,
        "tags": False,
        "enable": False,
        "lock": False,
        "dimension_list": False,
        "attribute_list": False,
        "concepts": False,
        "codelists": False
    }
    docs = queries.col_datasets().find(query, projection)
    return json_response(json_util.dumps(docs, default=json_util.default))
Exemple #32
0
def dataset_values_view(slug):

    query = {'enable': True, 'slug': slug}
    projection = {"_id": False, "provider_name": True, "dataset_code": True }
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)

    #TODO: rendre obligatoire frequency

    query = {"provider_name": doc["provider_name"], 
             'dataset_code': doc["dataset_code"]}
    projection = {
        "_id": False, "key": True, "slug": True,
        "frequency": True,
        "values.value": True, "values.period": True,
    }

    #TODO: multiple value in dimension    
    limit = request.args.get('limit', default=0, type=int)
    
    for r in request.args.lists():
        if r[0] == 'limit':
            pass
        elif r[0] == 'frequency':
            query['frequency'] = r[1][0]
        else:
            #TODO: case regex
            query['dimensions.'+r[0]] = {'$regex': r[1][0]}
    
    #/api/v1/dataset/bis-pp-ls/values?Reference%20area=FR&Reference%20area=AU
    #query :  {'provider_name': 'BIS', 'dataset_code': 'PP-LS', 'dimensions.Reference area': {'$regex': 'FR'}}    
    
    docs = queries.col_series().find(query, projection).limit(limit)
    #TODO: Period + Value
    count = docs.count() -1
    
    print("dataset-values - query[%s] - result[%s]" % (query, count))

    def generate():
        yield "["
        for i, row in enumerate(docs):
            yield json_util.dumps(row, default=json_util.default)
            if i < count:
                yield ","
        yield "]"

    return app.response_class(generate(), mimetype='application/json')
Exemple #33
0
def series_view(slug):
    query = {'slug': slug}
    projection = {"_id": False, "tags": False}
    doc = queries.col_series().find_one(query, projection)
    if not doc:
        abort(404)
    
    query = {'enable': True, 
             "provider_name": doc["provider_name"], 
             'dataset_code': doc["dataset_code"]}
    projection = {"_id": False, "enable": True}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)
    
    return json_response(json_util.dumps(doc, default=json_util.default))
Exemple #34
0
def series_unit(series):
    query = {'slug': series}
    projection = {"_id": False}
    doc = queries.col_series().find_one(query, projection)
    if not doc:
        abort(404)
    
    query = {'enable': True, 
             "provider_name": doc["provider_name"], 
             'dataset_code': doc["dataset_code"]}
    projection = {"_id": False, "enable": True}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)
    
    return json_tools.json_response(doc)
Exemple #35
0
def EVIEWS_values_by_dataset_slug(slug=None):
    
    """
    http://widukind-api-dev.cepremap.org/api/v1/eviews/values/insee-ipch-2005-fr-coicop

    http://widukind-api-dev.cepremap.org/api/v1/eviews/values/insee-ipch-2005-fr-coicop?frequency=M
    http://widukind-api-dev.cepremap.org/api/v1/eviews/values/insee-ipch-2005-fr-coicop?frequency=M&limit=100
    http://widukind-api-dev.cepremap.org/api/v1/eviews/values/insee-ipch-2005-fr-coicop?frequency=M&PRODUIT=T00
    """
    
    query = {"slug": slug}
    projection = {"_id": False, "provider_name": True, "dataset_code": True}
    dataset_code = queries.col_datasets().find_one(query, projection)
    
    return _EVIEWS_dataset_values(dataset_code["provider_name"], 
                                  dataset_code["dataset_code"])
Exemple #36
0
def series_unit(series):
    query = {'slug': series}
    projection = {"_id": False}
    doc = queries.col_series().find_one(query, projection)
    if not doc:
        abort(404)

    query = {
        'enable': True,
        "provider_name": doc["provider_name"],
        'dataset_code': doc["dataset_code"]
    }
    projection = {"_id": False, "enable": True}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    return json_tools.json_response(doc)
Exemple #37
0
def dsd_2_1(agencyID, resourceID, version="latest"):
    """
    http://127.0.0.1:8081/api/v1/sdmx/datastructure/INSEE/IPCH-2015-FR-COICOP

    http://127.0.0.1:8081/api/v1/sdmx/datastructure/all/IPC-2015-COICOP/latest/?references=children
    
    http://127.0.0.1:8081/api/v1/sdmx/datastructure/all/IPCH-2015-FR-COICOP/latest/?references=children
    
    > attendu:
    "2016-01-23T09:09:42.771Z"    
    "2013-07-10T11:00:00.000Z","%Y-%m-%dT%H:%M:%S.%fZ")
    "2013-07-12T07:00:00Z","%Y-%m-%dT%H:%M:%SZ"
    datetime.datetime.utcnow().isoformat() + "Z"
    > iso:
    YYYY-MM-DDTHH:MM:SS.mmmmmm
    """

    references = request.args.get('references')
    
    query_ds = {'enable': True,
                'provider_name': agencyID,
                'dataset_code': resourceID}
    projection_ds = {"tags": False, "_id": False}
    doc = queries.col_datasets().find_one(query_ds, projection_ds)
    
    if not doc:
        abort(404)

    now = "%sZ" % str(datetime.utcnow().isoformat())
    context = {
        "dataset": doc,
        "datasets": [doc],        
        "time_period_concept": "TIME_PERIOD" in doc.get("concepts"),
        "obs_value_concept": "OBS_VALUE" in doc.get("concepts"),
        "load_all": references in ["children", "descendants", "all"],
        "message_id": str(uuid.uuid4()),
        "prepared_date": now,
        "version": "1.0"
    }
    
    tmpl = render_template('sdmx/2.1/datastructure.xml', **context)
    response = make_response(tmpl)
    response.headers["Content-Type"] = "application/xml"      
    return response
Exemple #38
0
def dataset_series_list_values(dataset):

    query = {'enable': True, 'slug': dataset}
    projection = {"_id": False, "provider_name": True, "dataset_code": True}
    doc = queries.col_datasets().find_one(query, projection)
    if not doc:
        abort(404)

    query = {
        "provider_name": doc["provider_name"],
        'dataset_code': doc["dataset_code"]
    }
    projection = {
        "_id": False,
        "key": True,
        "slug": True,
        "name": True,
        "frequency": True,
        "start_date": True,
        "end_date": True,
        "dimensions": True,
        "attributes": True,
        "values.value": True,
        "values.period": True,
    }

    query = queries.complex_queries_series(query)
    docs = queries.col_series().find(query, projection)

    page = request.args.get('page', default=1, type=int)
    per_page = request.args.get('per_page', default=50, type=int)
    if per_page > 1000:
        per_page = 1000
    pagination = queries.Pagination(docs, page, per_page)
    meta = {
        "page": pagination.page,
        "pages": pagination.pages,
        "per_page": pagination.per_page,
        "total": pagination.total,
    }
    _docs = [doc for doc in pagination.items]
    return json_tools.json_response_async(_docs, meta=meta)
Exemple #39
0
def dataset_series_list_values_by_dataset_code(provider=None, dataset_code=None, frequency=None):
    query = {"provider_name": provider, "dataset_code": dataset_code}
    projection = {"_id": False, 
                  "provider_name": True, "dataset_code": True,
                  "metadata.frequencies": True, 
                  "enable": True}
    dataset = queries.col_datasets().find_one(query, projection)
    if not dataset:
        abort(404, "dataset %s/%s not found or disable." % (provider, dataset_code))

    if not frequency:
        frequency = request.args.get('frequency')
    if not frequency:
        abort(400, "frequency field is required.")

    frequencies = dataset.get("metadata", {}).get("frequencies", [])
    if frequencies and not frequency in frequencies:
        abort(404, "Frequencies available: %s" % frequencies)  

    return _dataset_values(provider, dataset_code, frequency=frequency)
Exemple #40
0
def codelist_2_1(agencyID, resourceID, version="latest", itemID=None):

    references = request.args.get('references')
    
    query_ds = {'enable': True,
                'provider_name': agencyID,
                'dataset_code': resourceID}
    
    projection_ds = {"_id": False, "tags": False}
    
    #is_concepts = references and references in ["children", "descendants", "all"]
    #if not is_concepts:
    #    projection_ds["concepts"] = False
    is_concepts = True
    #TODO: itemID et repercussion sur codelists !
    #if itemID:
    #    projection_ds["concepts.%s" % itemID] = True
    
    #print("query_ds : ", query_ds)
    
    doc = queries.col_datasets().find_one(query_ds, projection_ds)
    
    if not doc:
        abort(404)

    now = "%sZ" % str(datetime.utcnow().isoformat())
    context = {
        "dataset": doc,
        "load_all": references in ["children", "descendants", "all"],
        "message_id": str(uuid.uuid4()),
        "prepared_date": now,
        "version": "1.0"
    }
    if is_concepts:
        context["time_period_concept"] = "time_period" in doc.get("concepts")
        context["obs_value_concept"] = "obs_value" in doc.get("concepts")
    
    tmpl = render_template('sdmx/2.1/codelist.xml', **context)
    response = make_response(tmpl)
    response.headers["Content-Type"] = "application/xml"      
    return response
Exemple #41
0
def series_view(slug):
    query = {'slug': slug}
    projection = {"_id": False, "tags": False}
    doc = queries.col_series().find_one(query, projection)
    if not doc:
        abort(404)

    query = {
        'enable': True,
        "provider_name": doc["provider_name"],
        'dataset_code': doc["dataset_code"]
    }
    projection = {"_id": False, "enable": True}
    dataset_doc = queries.col_datasets().find_one(query, projection)
    if not dataset_doc:
        abort(404)

    values = [v["value"] for v in doc["values"]]
    doc["values"] = values

    return json_response(json_util.dumps([doc], default=json_util.default))
Exemple #42
0
def providers_datasets_list(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    projection = {"_id": False, "tags": False,
                  "enable": False, "lock": False,
                  "concepts": False, "codelists": False}
    #docs = [doc for doc in queries.col_datasets().find(query, projection)]
    docs = queries.col_datasets().find(query, projection)
    
    page = request.args.get('page', default=1, type=int)
    per_page = request.args.get('per_page', default=10, type=int)
    if per_page > 50:
        per_page = 50
    pagination = queries.Pagination(docs, page, per_page)
    meta = {
        "page": pagination.page,
        "pages": pagination.pages,
        "per_page": pagination.per_page,
        "total": pagination.total,
    }
    _docs = [doc for doc in pagination.items]
    #return json_tools.json_response(_docs, meta=meta)
    return json_tools.json_response_async(_docs, meta=meta)
Exemple #43
0
def html_datasets(provider=None):

    query_providers = {"enable": True}
    projection_provider = {"_id": False, "name": True, "slug": True}

    query_datasets = {"enable": True}
    projection_datasets = {
        "_id": False,
        "name": True,
        "slug": True,
        "dataset_code": True,
        "provider_name": True
    }

    if provider:
        provider_doc = queries.col_providers().find_one({"slug": provider})
        query_datasets["provider_name"] = provider_doc["name"]
        query_providers["name"] = provider_doc["name"]

    providers = dict([(doc["name"], doc)
                      for doc in queries.col_providers().find(
                          query_providers, projection_provider)])

    query_datasets["provider_name"] = {"$in": list(providers.keys())}
    datasets = queries.col_datasets().find(query_datasets, projection_datasets)

    docs = {}
    for dataset in datasets:
        provider_name = dataset["provider_name"]
        if not provider_name in docs:
            docs[provider_name] = {
                "provider": providers[provider_name],
                "datasets": []
            }
        docs[provider_name]["datasets"].append(dataset)

    return render_template("datasets.html", docs=docs)
Exemple #44
0
def datasets_list_keys(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    docs = queries.col_datasets().distinct("slug", filter=query)
    return json_tools.json_response(docs)
Exemple #45
0
def datasets_list_keys(provider):
    provider_doc = queries.get_provider(provider)
    query = {'provider_name': provider_doc["name"]}
    docs = queries.col_datasets().distinct("slug", filter=query)
    return json_tools.json_response(docs)