# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import json import string from random import choice, randint, random, uniform from typing import Any, Dict, List import pandas as pd import pytest from pandas import DataFrame from sqlalchemy import DateTime, String, TIMESTAMP from superset import db from superset.connectors.sqla.models import SqlaTable from superset.models.core import Database from superset.models.dashboard import Dashboard from superset.models.slice import Slice from superset.utils.core import get_example_database from tests.dashboard_utils import create_dashboard, create_table_for_dashboard from tests.test_app import app @pytest.fixture() def load_world_bank_dashboard_with_slices(): dash_id_to_delete, slices_ids_to_delete = _load_data() yield with app.app_context(): _cleanup(dash_id_to_delete, slices_ids_to_delete) @pytest.fixture(scope="module") def load_world_bank_dashboard_with_slices_module_scope(): dash_id_to_delete, slices_ids_to_delete = _load_data() yield with app.app_context(): _cleanup(dash_id_to_delete, slices_ids_to_delete) def _load_data(): table_name = "wb_health_population" with app.app_context(): database = get_example_database() df = _get_dataframe(database) dtype = { "year": DateTime if database.backend != "presto" else String(255), "country_code": String(3), "country_name": String(255), "region": String(255), } table = create_table_for_dashboard(df, table_name, database, dtype) slices = _create_world_bank_slices(table) dash = _create_world_bank_dashboard(table, slices) slices_ids_to_delete = [slice.id for slice in slices] dash_id_to_delete = dash.id return dash_id_to_delete, slices_ids_to_delete def _create_world_bank_slices(table: SqlaTable) -> List[Slice]: from superset.examples.world_bank import create_slices slices = create_slices(table) _commit_slices(slices) return slices def _commit_slices(slices: List[Slice]): for slice in slices: o = db.session.query(Slice).filter_by(slice_name=slice.slice_name).one_or_none() if o: db.session.delete(o) db.session.add(slice) db.session.commit() def _create_world_bank_dashboard(table: SqlaTable, slices: List[Slice]) -> Dashboard: from superset.examples.world_bank import dashboard_positions pos = dashboard_positions from superset.examples.helpers import update_slice_ids update_slice_ids(pos, slices) table.fetch_metadata() dash = create_dashboard( "world_health", "World Bank's Data", json.dumps(pos), slices ) dash.json_metadata = '{"mock_key": "mock_value"}' db.session.commit() return dash def _cleanup(dash_id: int, slices_ids: List[int]) -> None: engine = get_example_database().get_sqla_engine() engine.execute("DROP TABLE IF EXISTS wb_health_population") dash = db.session.query(Dashboard).filter_by(id=dash_id).first() db.session.delete(dash) for slice_id in slices_ids: db.session.query(Slice).filter_by(id=slice_id).delete() db.session.commit() def _get_dataframe(database: Database) -> DataFrame: data = _get_world_bank_data() df = pd.DataFrame.from_dict(data) if database.backend == "presto": df.year = pd.to_datetime(df.year) df.year = df.year.dt.strftime("%Y-%m-%d %H:%M%:%S") else: df.year = pd.to_datetime(df.year) return df def _get_world_bank_data() -> List[Dict[Any, Any]]: data = [] for _ in range(100): data.append( { "country_name": "".join( choice(string.ascii_uppercase + string.ascii_lowercase + " ") for _ in range(randint(3, 10)) ), "country_code": "".join( choice(string.ascii_uppercase + string.ascii_lowercase) for _ in range(3) ), "region": "".join( choice(string.ascii_uppercase + string.ascii_lowercase) for _ in range(randint(3, 10)) ), "year": "-".join( [str(randint(1900, 2020)), str(randint(1, 12)), str(randint(1, 28))] ), "NY_GNP_PCAP_CD": get_random_float_or_none(0, 100, 0.3), "SE_ADT_1524_LT_FM_ZS": get_random_float_or_none(0, 100, 0.3), "SE_ADT_1524_LT_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SE_ADT_1524_LT_ZS": get_random_float_or_none(0, 100, 0.3), "SE_ADT_LITR_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SE_ADT_LITR_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SE_ADT_LITR_ZS": get_random_float_or_none(0, 100, 0.3), "SE_ENR_ORPH": get_random_float_or_none(0, 100, 0.3), "SE_PRM_CMPT_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SE_PRM_CMPT_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SE_PRM_CMPT_ZS": get_random_float_or_none(0, 100, 0.3), "SE_PRM_ENRR": get_random_float_or_none(0, 100, 0.3), "SE_PRM_ENRR_FE": get_random_float_or_none(0, 100, 0.3), "SE_PRM_ENRR_MA": get_random_float_or_none(0, 100, 0.3), "SE_PRM_NENR": get_random_float_or_none(0, 100, 0.3), "SE_PRM_NENR_FE": get_random_float_or_none(0, 100, 0.3), "SE_PRM_NENR_MA": get_random_float_or_none(0, 100, 0.3), "SE_SEC_ENRR": get_random_float_or_none(0, 100, 0.3), "SE_SEC_ENRR_FE": get_random_float_or_none(0, 100, 0.3), "SE_SEC_ENRR_MA": get_random_float_or_none(0, 100, 0.3), "SE_SEC_NENR": get_random_float_or_none(0, 100, 0.3), "SE_SEC_NENR_FE": get_random_float_or_none(0, 100, 0.3), "SE_SEC_NENR_MA": get_random_float_or_none(0, 100, 0.3), "SE_TER_ENRR": get_random_float_or_none(0, 100, 0.3), "SE_TER_ENRR_FE": get_random_float_or_none(0, 100, 0.3), "SE_XPD_TOTL_GD_ZS": get_random_float_or_none(0, 100, 0.3), "SH_ANM_CHLD_ZS": get_random_float_or_none(0, 100, 0.3), "SH_ANM_NPRG_ZS": get_random_float_or_none(0, 100, 0.3), "SH_CON_1524_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_CON_1524_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_CON_AIDS_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_CON_AIDS_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_DTH_COMM_ZS": get_random_float_or_none(0, 100, 0.3), "SH_DTH_IMRT": get_random_float_or_none(0, 100, 0.3), "SH_DTH_INJR_ZS": get_random_float_or_none(0, 100, 0.3), "SH_DTH_MORT": get_random_float_or_none(0, 100, 0.3), "SH_DTH_NCOM_ZS": get_random_float_or_none(0, 100, 0.3), "SH_DTH_NMRT": get_random_float_or_none(0, 100, 0.3), "SH_DYN_AIDS": get_random_float_or_none(0, 100, 0.3), "SH_DYN_AIDS_DH": get_random_float_or_none(0, 100, 0.3), "SH_DYN_AIDS_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_DYN_AIDS_ZS": get_random_float_or_none(0, 100, 0.3), "SH_DYN_MORT": get_random_float_or_none(0, 100, 0.3), "SH_DYN_MORT_FE": get_random_float_or_none(0, 100, 0.3), "SH_DYN_MORT_MA": get_random_float_or_none(0, 100, 0.3), "SH_DYN_NMRT": get_random_float_or_none(0, 100, 0.3), "SH_FPL_SATI_ZS": get_random_float_or_none(0, 100, 0.3), "SH_H2O_SAFE_RU_ZS": get_random_float_or_none(0, 100, 0.3), "SH_H2O_SAFE_UR_ZS": get_random_float_or_none(0, 100, 0.3), "SH_H2O_SAFE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_0014": get_random_float_or_none(0, 100, 0.3), "SH_HIV_1524_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_1524_KW_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_1524_KW_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_1524_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_ARTC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_KNOW_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_KNOW_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_HIV_ORPH": get_random_float_or_none(0, 100, 0.3), "SH_HIV_TOTL": get_random_float_or_none(0, 100, 0.3), "SH_IMM_HEPB": get_random_float_or_none(0, 100, 0.3), "SH_IMM_HIB3": get_random_float_or_none(0, 100, 0.3), "SH_IMM_IBCG": get_random_float_or_none(0, 100, 0.3), "SH_IMM_IDPT": get_random_float_or_none(0, 100, 0.3), "SH_IMM_MEAS": get_random_float_or_none(0, 100, 0.3), "SH_IMM_POL3": get_random_float_or_none(0, 100, 0.3), "SH_MED_BEDS_ZS": get_random_float_or_none(0, 100, 0.3), "SH_MED_CMHW_P3": get_random_float_or_none(0, 100, 0.3), "SH_MED_NUMW_P3": get_random_float_or_none(0, 100, 0.3), "SH_MED_PHYS_ZS": get_random_float_or_none(0, 100, 0.3), "SH_MLR_NETS_ZS": get_random_float_or_none(0, 100, 0.3), "SH_MLR_PREG_ZS": get_random_float_or_none(0, 100, 0.3), "SH_MLR_SPF2_ZS": get_random_float_or_none(0, 100, 0.3), "SH_MLR_TRET_ZS": get_random_float_or_none(0, 100, 0.3), "SH_MMR_DTHS": get_random_float_or_none(0, 100, 0.3), "SH_MMR_LEVE": get_random_float_or_none(0, 100, 0.3), "SH_MMR_RISK": get_random_float_or_none(0, 100, 0.3), "SH_MMR_RISK_ZS": get_random_float_or_none(0, 100, 0.3), "SH_MMR_WAGE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_PRG_ANEM": get_random_float_or_none(0, 100, 0.3), "SH_PRG_ARTC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_PRG_SYPH_ZS": get_random_float_or_none(0, 100, 0.3), "SH_PRV_SMOK_FE": get_random_float_or_none(0, 100, 0.3), "SH_PRV_SMOK_MA": get_random_float_or_none(0, 100, 0.3), "SH_STA_ACSN": get_random_float_or_none(0, 100, 0.3), "SH_STA_ACSN_RU": get_random_float_or_none(0, 100, 0.3), "SH_STA_ACSN_UR": get_random_float_or_none(0, 100, 0.3), "SH_STA_ANV4_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_ANVC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_ARIC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_BFED_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_BRTC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_BRTW_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_DIAB_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_IYCF_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_MALN_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_MALN_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_MALN_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_MALR": get_random_float_or_none(0, 100, 0.3), "SH_STA_MMRT": get_random_float_or_none(0, 100, 0.3), "SH_STA_MMRT_NE": get_random_float_or_none(0, 100, 0.3), "SH_STA_ORCF_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_ORTH": get_random_float_or_none(0, 100, 0.3), "SH_STA_OW15_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_OW15_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_OW15_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_OWGH_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_OWGH_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_OWGH_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_PNVC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_STNT_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_STNT_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_STNT_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_WAST_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_WAST_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_STA_WAST_ZS": get_random_float_or_none(0, 100, 0.3), "SH_SVR_WAST_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_SVR_WAST_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SH_SVR_WAST_ZS": get_random_float_or_none(0, 100, 0.3), "SH_TBS_CURE_ZS": get_random_float_or_none(0, 100, 0.3), "SH_TBS_DTEC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_TBS_INCD": get_random_float_or_none(0, 100, 0.3), "SH_TBS_MORT": get_random_float_or_none(0, 100, 0.3), "SH_TBS_PREV": get_random_float_or_none(0, 100, 0.3), "SH_VAC_TTNS_ZS": get_random_float_or_none(0, 100, 0.3), "SH_XPD_EXTR_ZS": get_random_float_or_none(0, 100, 0.3), "SH_XPD_OOPC_TO_ZS": get_random_float_or_none(0, 100, 0.3), "SH_XPD_OOPC_ZS": get_random_float_or_none(0, 100, 0.3), "SH_XPD_PCAP": get_random_float_or_none(0, 100, 0.3), "SH_XPD_PCAP_PP_KD": get_random_float_or_none(0, 100, 0.3), "SH_XPD_PRIV": get_random_float_or_none(0, 100, 0.3), "SH_XPD_PRIV_ZS": get_random_float_or_none(0, 100, 0.3), "SH_XPD_PUBL": get_random_float_or_none(0, 100, 0.3), "SH_XPD_PUBL_GX_ZS": get_random_float_or_none(0, 100, 0.3), "SH_XPD_PUBL_ZS": get_random_float_or_none(0, 100, 0.3), "SH_XPD_TOTL_CD": get_random_float_or_none(0, 100, 0.3), "SH_XPD_TOTL_ZS": get_random_float_or_none(0, 100, 0.3), "SI_POV_NAHC": get_random_float_or_none(0, 100, 0.3), "SI_POV_RUHC": get_random_float_or_none(0, 100, 0.3), "SI_POV_URHC": get_random_float_or_none(0, 100, 0.3), "SL_EMP_INSV_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SL_TLF_TOTL_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SL_TLF_TOTL_IN": get_random_float_or_none(0, 100, 0.3), "SL_UEM_TOTL_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SL_UEM_TOTL_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SL_UEM_TOTL_ZS": get_random_float_or_none(0, 100, 0.3), "SM_POP_NETM": get_random_float_or_none(0, 100, 0.3), "SN_ITK_DEFC": get_random_float_or_none(0, 100, 0.3), "SN_ITK_DEFC_ZS": get_random_float_or_none(0, 100, 0.3), "SN_ITK_SALT_ZS": get_random_float_or_none(0, 100, 0.3), "SN_ITK_VITA_ZS": get_random_float_or_none(0, 100, 0.3), "SP_ADO_TFRT": get_random_float_or_none(0, 100, 0.3), "SP_DYN_AMRT_FE": get_random_float_or_none(0, 100, 0.3), "SP_DYN_AMRT_MA": get_random_float_or_none(0, 100, 0.3), "SP_DYN_CBRT_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_CDRT_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_CONU_ZS": get_random_float_or_none(0, 100, 0.3), "SP_DYN_IMRT_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_IMRT_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_IMRT_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_LE00_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_LE00_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_LE00_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_SMAM_FE": get_random_float_or_none(0, 100, 0.3), "SP_DYN_SMAM_MA": get_random_float_or_none(0, 100, 0.3), "SP_DYN_TFRT_IN": get_random_float_or_none(0, 100, 0.3), "SP_DYN_TO65_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SP_DYN_TO65_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SP_DYN_WFRT": get_random_float_or_none(0, 100, 0.3), "SP_HOU_FEMA_ZS": get_random_float_or_none(0, 100, 0.3), "SP_MTR_1519_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_0004_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_0004_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_0004_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_0004_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_0014_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_0014_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_0014_TO": get_random_float_or_none(0, 100, 0.3), "SP_POP_0014_TO_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_0509_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_0509_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_0509_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_0509_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_1014_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_1014_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_1014_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_1014_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_1519_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_1519_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_1519_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_1519_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_1564_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_1564_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_1564_TO": get_random_float_or_none(0, 100, 0.3), "SP_POP_1564_TO_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_2024_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_2024_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_2024_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_2024_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_2529_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_2529_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_2529_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_2529_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_3034_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_3034_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_3034_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_3034_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_3539_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_3539_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_3539_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_3539_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_4044_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_4044_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_4044_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_4044_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_4549_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_4549_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_4549_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_4549_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_5054_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_5054_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_5054_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_5054_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_5559_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_5559_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_5559_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_5559_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_6064_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_6064_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_6064_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_6064_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_6569_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_6569_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_6569_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_6569_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_65UP_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_65UP_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_65UP_TO": get_random_float_or_none(0, 100, 0.3), "SP_POP_65UP_TO_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_7074_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_7074_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_7074_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_7074_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_7579_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_7579_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_7579_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_7579_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_80UP_FE": get_random_float_or_none(0, 100, 0.3), "SP_POP_80UP_FE_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_80UP_MA": get_random_float_or_none(0, 100, 0.3), "SP_POP_80UP_MA_5Y": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG00_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG00_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG01_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG01_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG02_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG02_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG03_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG03_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG04_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG04_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG05_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG05_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG06_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG06_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG07_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG07_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG08_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG08_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG09_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG09_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG10_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG10_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG11_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG11_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG12_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG12_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG13_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG13_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG14_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG14_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG15_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG15_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG16_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG16_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG17_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG17_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG18_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG18_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG19_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG19_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG20_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG20_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG21_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG21_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG22_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG22_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG23_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG23_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG24_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG24_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG25_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_AG25_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_BRTH_MF": get_random_float_or_none(0, 100, 0.3), "SP_POP_DPND": get_random_float_or_none(0, 100, 0.3), "SP_POP_DPND_OL": get_random_float_or_none(0, 100, 0.3), "SP_POP_DPND_YG": get_random_float_or_none(0, 100, 0.3), "SP_POP_GROW": get_random_float_or_none(0, 100, 0.3), "SP_POP_TOTL": get_random_float_or_none(0, 100, 0.3), "SP_POP_TOTL_FE_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_TOTL_FE_ZS": get_random_float_or_none(0, 100, 0.3), "SP_POP_TOTL_MA_IN": get_random_float_or_none(0, 100, 0.3), "SP_POP_TOTL_MA_ZS": get_random_float_or_none(0, 100, 0.3), "SP_REG_BRTH_RU_ZS": get_random_float_or_none(0, 100, 0.3), "SP_REG_BRTH_UR_ZS": get_random_float_or_none(0, 100, 0.3), "SP_REG_BRTH_ZS": get_random_float_or_none(0, 100, 0.3), "SP_REG_DTHS_ZS": get_random_float_or_none(0, 100, 0.3), "SP_RUR_TOTL": get_random_float_or_none(0, 100, 0.3), "SP_RUR_TOTL_ZG": get_random_float_or_none(0, 100, 0.3), "SP_RUR_TOTL_ZS": get_random_float_or_none(0, 100, 0.3), "SP_URB_GROW": get_random_float_or_none(0, 100, 0.3), "SP_URB_TOTL": get_random_float_or_none(0, 100, 0.3), "SP_URB_TOTL_IN_ZS": get_random_float_or_none(0, 100, 0.3), "SP_UWT_TFRT": get_random_float_or_none(0, 100, 0.3), } ) return data def get_random_float_or_none(min_value, max_value, none_probability): if random() < none_probability: return None else: return uniform(min_value, max_value)