collections.ChainMap#

ChainMap - класс похожий на словарь для создания единого интерфейса для доступа к нескольким словарям

class collections.ChainMap(*maps)

Методы:

  • maps

  • new_child(m=None, **kwargs)

  • parents

In [1]: from collections import ChainMap

In [2]: r1 = {
   ...:    "host": "192.168.100.1",
   ...:    "auth_username": "cisco",
   ...:    "auth_password": "cisco",
   ...:    "auth_secondary": "cisco",
   ...:    "platform": "cisco_iosxe",
   ...:    "timeout_socket": 15,
   ...: }

In [3]: default_params = {
   ...:    "auth_strict_key": False,
   ...:    "timeout_socket": 5,
   ...:    "timeout_transport": 10,
   ...: }

In [4]: scrapli_params = ChainMap(r1, default_params)

In [5]: pprint(scrapli_params)
ChainMap({'auth_password': 'cisco',
          'auth_secondary': 'cisco',
          'auth_username': 'cisco',
          'host': '192.168.100.1',
          'platform': 'cisco_iosxe',
          'timeout_socket': 15},
         {'auth_strict_key': False,
          'timeout_socket': 5,
          'timeout_transport': 10})

In [6]: scrapli_params["timeout_socket"]
Out[6]: 15

In [7]: scrapli_params["timeout_transport"]
Out[7]: 10

In [8]: scrapli_params["host"]
Out[8]: '192.168.100.1'

maps, parents#

In [12]: scrapli_params.maps
Out[12]:
[{'host': '192.168.100.1',
  'auth_username': 'cisco',
  'auth_password': 'cisco',
  'auth_secondary': 'cisco',
  'platform': 'cisco_iosxe',
  'timeout_socket': 15},
 {'auth_strict_key': False, 'timeout_socket': 5, 'timeout_transport': 10}]

In [13]: scrapli_params.parents
Out[13]: ChainMap({'auth_strict_key': False, 'timeout_socket': 5, 'timeout_transport': 10})

new_child#

In [18]: pprint(scrapli_params)
ChainMap({'auth_password': 'cisco',
          'auth_secondary': 'cisco',
          'auth_username': 'cisco',
          'host': '192.168.100.1',
          'platform': 'cisco_iosxe',
          'timeout_socket': 15},
         {'auth_strict_key': False,
          'timeout_socket': 5,
          'timeout_transport': 10})

In [19]: updated_info = {"host": "10.1.1.1"}

In [20]: new_params = scrapli_params.new_child(updated_info)

In [22]: pprint(new_params)
ChainMap({'host': '10.1.1.1'},
         {'auth_password': 'cisco',
          'auth_secondary': 'cisco',
          'auth_username': 'cisco',
          'host': '192.168.100.1',
          'platform': 'cisco_iosxe',
          'timeout_socket': 15},
         {'auth_strict_key': False,
          'timeout_socket': 5,
          'timeout_transport': 10})

In [23]: new_params["host"]
Out[23]: '10.1.1.1'

In [25]: pprint(scrapli_params)
ChainMap({'auth_password': 'cisco',
          'auth_secondary': 'cisco',
          'auth_username': 'cisco',
          'host': '192.168.100.1',
          'platform': 'cisco_iosxe',
          'timeout_socket': 15},
         {'auth_strict_key': False,
          'timeout_socket': 5,
          'timeout_transport': 10})