def calcAddr(rec, unit, cell):
    """
    :param rec: позиционный адрес РЭК 9ДПД (строка типа 'a1')
    :param unit: позиционный адрес блока 9ДБ-434 (строка типа 'a1')
    :param cell: позиционный адрес ячейки или крейта (строка типа 'a1')
    :return: МКТУ_2 адрес в формате строки вида '0:0:0:0:0:0'
    """

    addr = '2:'
    addr += {'a18': '18', 'a19': '19', 'a20': '20'}[rec]
    addr += ':'
    addr += {'a5': '101', 'a6': '101', 'a7': '101', 'a8': '101',
             'a9': '102', 'a10': '102', 'a11': '102', 'a12': '102',
             'a14': '103', 'a15': '103', 'a16': '103', 'a17': '103',
             'a18': '104', 'a19': '104', 'a20': '104', 'a21': '104'}[unit]
    addr += ':'
    addr += {'a5': '5', 'a6': '6', 'a7': '7', 'a8': '8',
             'a9': '9', 'a10': '10', 'a11': '11', 'a12': '12',
             'a14': '14', 'a15': '15', 'a16': '16', 'a17': '17',
             'a18': '18', 'a19': '19', 'a20': '20', 'a21': '21'}[unit]
    addr += ':'
    addr += {'a1': '1', 'a2': '2', 'a3': '3', 'a4': '4'}[cell]
    addr += ':'
    addr += '0'

    return addr


def calcIP(rec, unit, cell):
    """
    :param rec: позиционный адрес РЭК 9ДПД
    :param unit: позиционный адрес блока 9ДБ-434
    :param cell: позиционный адрес ячейки или крейта
    :return: кортеж из основного и резервного IP адресов вида ('10.71.x.x', '10.72.x.x'))
    """
    addr_main = '10.71.'
    addr_res = '10.72.'
    rec_addr = {'a18': '118', 'a19': '119', 'a20': '120'}
    addr_main += rec_addr[rec]
    addr_main += '.'
    addr_res += rec_addr[rec]
    addr_res += '.'
    #таблица IP адресов
    cell_addr = {'a5': {'a1': '1', 'a2': '2', 'a3': '3', 'a4': '4'},
                 'a6': {'a1': '5', 'a2': '6', 'a3': '7', 'a4': '8'},
                 'a7': {'a1': '9', 'a2': '10', 'a3': '11', 'a4': '12'},
                 'a8': {'a1': '13', 'a2': '14', 'a3': '15', 'a4': '16'},
                 'a9': {'a1': '17', 'a2': '18', 'a3': '19', 'a4': '20'},
                 'a10': {'a1': '21', 'a2': '22', 'a3': '23', 'a4': '24'},
                 'a11': {'a1': '25', 'a2': '26', 'a3': '27', 'a4': '28'},
                 'a12': {'a1': '29', 'a2': '30', 'a3': '31', 'a4': '32'},
                 'a14': {'a1': '51', 'a2': '52', 'a3': '53', 'a4': '54'},
                 'a15': {'a1': '55', 'a2': '56', 'a3': '57', 'a4': '58'},
                 'a16': {'a1': '59', 'a2': '60', 'a3': '61', 'a4': '62'},
                 'a17': {'a1': '63', 'a2': '64', 'a3': '65', 'a4': '66'},
                 'a18': {'a1': '67', 'a2': '68', 'a3': '69', 'a4': '70'},
                 'a19': {'a1': '71', 'a2': '72', 'a3': '73', 'a4': '74'},
                 'a20': {'a1': '75', 'a2': '76', 'a3': '77', 'a4': '78'},
                 'a21': {'a1': '79', 'a2': '80', 'a3': '81', 'a4': '82'}}
    addr_main += cell_addr[unit][cell]
    addr_res += cell_addr[unit][cell]
    return addr_main, addr_res


def calcCfgFname(cellAddr):
    """
    :param cellAddr: позиционный адрес ячейки ('a1')
    :return: название конфигурационного файла для данной ячейки (9dpdf11-k9k434.cfg для a1)
    """

    addrToGfg = {'a1': '9dpdf11-k9k434.cfg',
                 'a2': '9dpdf11-k415.cfg',
                 'a3': '9dpdf11-k146.cfg',
                 'a4': '9dpdf11-k434.cfg'}

    return addrToGfg[cellAddr]





