





import os

import pytest
import yaml

from datasets.features.features import Features, Value
from datasets.info import DatasetInfo, DatasetInfosDict
@pytest.mark.parametrize(
    '''files'''    ,       [
        ['''full:README.md''', '''dataset_infos.json'''],
        ['''empty:README.md''', '''dataset_infos.json'''],
        ['''dataset_infos.json'''],
        ['''full:README.md'''],
    ]    ,       )
def 							_lowerCamelCase(  UpperCamelCase__    : List[str]    ,       UpperCamelCase__    : Any		)		->  Optional[Any]:
    A       :       Any							=						tmp_path_factory.mktemp('''dset_infos_dir'''		)
    if "full:README.md" in files:
        with open(dataset_infos_dir / '''README.md'''    ,       '''w'''		) as f:
            f.write('''---\ndataset_info:\n  dataset_size: 42\n---'''		)
    if "empty:README.md" in files:
        with open(dataset_infos_dir / '''README.md'''    ,       '''w'''		) as f:
            f.write(''''''		)
    # we want to support dataset_infos.json for backward compatibility
    if "dataset_infos.json" in files:
        with open(dataset_infos_dir / '''dataset_infos.json'''    ,       '''w'''		) as f:
            f.write('''{"default": {"dataset_size": 42}}'''		)
    A       :       str							=						DatasetInfosDict.from_directory(UpperCamelCase__		)
    assert dataset_infos
    assert dataset_infos["default"].dataset_size == 42
@pytest.mark.parametrize(
    '''dataset_info'''    ,       [
        DatasetInfo(),
        DatasetInfo(
            description='''foo'''    ,       features=Features({'''a''': Value('''int32'''		)}		)    ,       builder_name='''builder'''    ,       config_name='''config'''    ,       version='''1.0.0'''    ,       splits=[{'''name''': '''train'''}]    ,       download_size=42    ,       ),
    ]    ,       )
def 							_lowerCamelCase(  UpperCamelCase__    : Tuple    ,       UpperCamelCase__    : DatasetInfo		)		->  Tuple:
    A       :       List[str]							=						str(UpperCamelCase__		)
    dataset_info.write_to_directory(UpperCamelCase__		)
    A       :       int							=						DatasetInfo.from_directory(UpperCamelCase__		)
    assert dataset_info == reloaded
    assert os.path.exists(os.path.join(UpperCamelCase__    ,       '''dataset_info.json'''		)		)
def 							_lowerCamelCase(  )		->  Union[str, Any]:
    A       :       List[str]							=						DatasetInfo(
        description='''foo'''    ,       citation='''bar'''    ,       homepage='''https://foo.bar'''    ,       license='''CC0'''    ,       features=Features({'''a''': Value('''int32'''		)}		)    ,       post_processed={}    ,       supervised_keys=()    ,       task_templates=[]    ,       builder_name='''builder'''    ,       config_name='''config'''    ,       version='''1.0.0'''    ,       splits=[{'''name''': '''train''', '''num_examples''': 42}]    ,       download_checksums={}    ,       download_size=1_337    ,       post_processing_size=442    ,       dataset_size=1_234    ,       size_in_bytes=1_337 + 442 + 1_234    ,       )
    A       :       Any							=						dataset_info._to_yaml_dict()
    assert sorted(UpperCamelCase__		) == sorted(DatasetInfo._INCLUDED_INFO_IN_YAML		)
    for key in DatasetInfo._INCLUDED_INFO_IN_YAML:
        assert key in dataset_info_yaml_dict
        assert isinstance(dataset_info_yaml_dict[key]    ,       (list, dict, int, str)		)
    A       :       str							=						yaml.safe_dump(UpperCamelCase__		)
    A       :       Optional[Any]							=						yaml.safe_load(UpperCamelCase__		)
    assert dataset_info_yaml_dict == reloaded
def 							_lowerCamelCase(  )		->  List[str]:
    A       :       Optional[int]							=						DatasetInfo()
    A       :       Optional[Any]							=						dataset_info._to_yaml_dict()
    assert dataset_info_yaml_dict == {}





@pytest.mark.parametrize(
    '''dataset_infos_dict'''    ,       [
        DatasetInfosDict(),
        DatasetInfosDict({'''default''': DatasetInfo()}		),
        DatasetInfosDict({'''my_config_name''': DatasetInfo()}		),
        DatasetInfosDict(
            {
                '''default''': DatasetInfo(
                    description='''foo'''    ,       features=Features({'''a''': Value('''int32'''		)}		)    ,       builder_name='''builder'''    ,       config_name='''config'''    ,       version='''1.0.0'''    ,       splits=[{'''name''': '''train'''}]    ,       download_size=42    ,       )
            }		),
        DatasetInfosDict(
            {
                '''v1''': DatasetInfo(dataset_size=42		),
                '''v2''': DatasetInfo(dataset_size=1_337		),
            }		),
    ]    ,       )
def 							_lowerCamelCase(  UpperCamelCase__    : int    ,       UpperCamelCase__    : DatasetInfosDict		)		->  Union[str, Any]:
    A       :       str							=						str(UpperCamelCase__		)
    dataset_infos_dict.write_to_directory(UpperCamelCase__		)
    A       :       Any							=						DatasetInfosDict.from_directory(UpperCamelCase__		)

    # the config_name of the dataset_infos_dict take over the attribute
    for config_name, dataset_info in dataset_infos_dict.items():
        A       :       List[str]							=						config_name
        # the yaml representation doesn't include fields like description or citation
        # so we just test that we can recover what we can from the yaml
        A       :       Any							=						DatasetInfo._from_yaml_dict(dataset_info._to_yaml_dict()		)
    assert dataset_infos_dict == reloaded

    if dataset_infos_dict:
        assert os.path.exists(os.path.join(UpperCamelCase__    ,       '''README.md'''		)		)







'''simple docstring'''






import requests

snake_case_     =	"""https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey="""
def 							_lowerCamelCase(  UpperCamelCase__    : str		)		->  None:
    # fetching a list of articles in json format
    A       :       Any							=						requests.get(_NEWS_API + bbc_news_api_key		).json()
    # each article in the list is a dict
    for i, article in enumerate(bbc_news_page['''articles''']    ,       1		):
        print(F'''{i}.) {article['title']}'''		)


if __name__ == "__main__":
     fetch_bbc_news(bbc_news_api_key="""<Your BBC News API key goes here>""")
