Парсинг данных и yaml в python

Всем привет. Как я могу распарсить данный из yaml в функцию, чтоб передавать ключ и значение. суть в том, что на выходе мне нужно получить для бесконечно возможного количества новых service1...99 вывод вида : service1 google good http://google.com 1 1 app1, service2 google bad http://gooogle.com 2 2 app2 и так далее. это вообще возможно сделать и что я делаю не так? мой код работает не так и я не знаю куда копать

services:
  service1:
    name: google good
    url: http://google.com
    service: 1
    time: 1
  service2:
    name: google bad
    url: http://gooogle.com
    service:  2
    time:  2
  service3:
    name: google bad
    url: http://googgle.com
    service:  3
    time:  3

в который я подставляю данные url, который хочу проверить на доступность кодом

def get_status_app():
    with open('config.yaml', 'r') as f:
        config = yaml.load_all(f, Loader=yaml.FullLoader)
        config_services =  config["url"]
        print(config_services)
        for urls in config_url :            
            app_url(urls)
    
def app_url(urls):
        try:
            resp = requests.head(urls)
            if resp.status_code == 200:
                print(urls,'app1')
            else:
                print('app2')
        except:
            print(urls,'app3')

get_status_app()

Ответы (1 шт):

Автор решения: Катерина Белокрыльцева

Потому что urlы вложены в service_name (service1, service2 etc), поэтому они не будут доступны. В начале вам нужно узнать service_name, а уже потом вытаскиваете из него url, name etc. Попробуйте код ниже:

def get_status_app():
    with open('config.yaml', 'r') as f:
        dump = yaml.load_all(f, Loader=yaml.FullLoader)
        for service_name in dump:
            config = dump[service_name]
            name = config['name']
            url = config['url']
            service = config['service']
            time = config['time']

@ Dmitrii Seleznev а если будет еще один общий заголовок в yaml services и дальше уже service1..etc

Представьте yaml файл в виде дерева или проще словаря, где значением может быть еще один словарь. Вы вытаскиваете из services значения services = dump['services'], а дальше итерируетесь по ним, узнавая service_name, только точка входа в значения service_name (url, name etc) будет уже services[service_name].

def get_status_app():
    with open('config.yaml', 'r') as f:
        dump = yaml.load_all(f, Loader=yaml.FullLoader)
        services = dump['services']
        for service_name in services:
            config = services[service_name]
            name = config['name']
            url = config['url']
            service = config['service']
            time = config['time']

Наглядная структура вложенности в виде дерева:

services
└── service_name(service1)
    └── url
        └── google.com
→ Ссылка