Формат вызова | Описание | Примеры использования |
---|
<value>.coalesce(<arg1>[, <arg2>[, <arg3>...]]) | Возвращение первого отличного от None аргумента из <arg1> , <arg2> и т.д., если <value> равен None . В качестве аргументов могут быть указаны как фиксированные значения, так и вычисляемые выражения. | $customer_profile.attributes.L2TP-Class.coalesce("3")
$customer_profile.attributes.Custom-ACL-Name.coalesce($customer_profile.attributes.Service-ACL-Name, $var.Default-ACL-Name)
Custom-ACL-Name | Service-ACL-Name | Default-ACL-Name | Результат |
---|
None | None | None | None | None | None | PERM_ALL | PERM_ALL | None | BLOCK_IPv6 | PERM_ALL | BLOCK_IPv6 | BLOCK_SMTP | BLOCK_IPv6 | PERM_ALL | BLOCK_SMTP |
|
<dictionary>.except(<key_1>[, <key_2>[, ...]]) | Исключение из словаря <dictionary> элементов с ключами <key_1> , <key_2> и т. д. | $request.RAD_CHECK.except('Auth-Type')
{"Auth-Type": "CHAP", "Pool-Name": "NAT-10"} → {"Pool-Name": "NAT-10"}
|
<string>.format_mac([<delimeter>[, <groups>]])
| Приведение MAC–адреса <string> к верхнему регистру и форматирование его разбиением на <groups> групп с разделителем <delimeter> между ними. Если аргумент <delimeter> не передан, в качестве разделителя используется дефис. Если аргумент <groups> не передан, адрес разбивается на 6 групп. | $request.RAD_REQUEST.Agent-Remote-Id.format_mac(":")
"acf1.dfaf.42c0" → "AC:F1:DF:AF:42:C0" "BA46EC2EA786" → "BA:46:EC:2E:A7:86"
$request.RAD_REQUEST.Calling-Station-Id.format_mac(".", 3)
"AC:F1:DF:AF:42:C0" → "ACF1.DFAF.42C0" "BA46EC2EA786" → "BA46.EC2E.A786"
|
<number>.gigabytes()
| Перевод гигабайтов в байты умножением числа <number> на 230. | 4 * $request.RAD_REQUEST.try("Acct-Input-Gigawords", "0").to_i().gigabytes()
|
<string>.ip4_and(<mask_string>)
| Побитовое И для IPv4–адреса <string> и маски подсети <mask_string> . Можно использовать для получения адреса подсети. | $request.RAD_REQUEST.Framed-IP-Address.ip4_or("255.255.0.0")
"192.168.154.37" → "192.168.0.0"
$request.RAD_REQUEST.Framed-IP-Address.ip4_or("255.255.240.0")
"10.83.5.1" → "10.83.0.0"
|
<string>.ip4_or(<mask_string>)
| Побитовое ИЛИ для IPv4–адреса <string> и маски подсети <mask_string> . Можно использовать для получения широковещательного адреса, передавая в <mask_string> инвертированную маску подсети. | $request.RAD_REQUEST.Framed-IP-Address.ip4_or("0.0.255.255")
"192.168.154.37" → "192.168.255.255"
$request.RAD_REQUEST.Framed-IP-Address.ip4_or("0.0.15.255")
"10.83.5.1" → "10.83.15.255"
|
<string>.ip4_scan()
| Извлечение из строки <string> IPv4–адреса. Если адресов в <string> несколько, возвращается первый из них. Если адресов нет, возвращается пустая строка. | $request.RAD_REQUEST.Raw-Ip.ip4_scan()
"vlan102260.172.16.1.1.2" → "60.172.16.1.1" "172.16.0." → ""
|
<list>.join([<delimeter>])
| Объединение элементов списка <list> в одну строку с использованием разделителя <delimeter> . Если аргумент <delimeter> не передан, разделитель не используется. | $response.RAD_REPLY.Rules.join(";")
[2048, 1024, None, 100] → "2048;1024;;100"
|
<dictionary>.length()
<list>.length()
<string>.length()
| Вычисление количетсва элементов списка <list> , словаря <dictionary> или длины строки <string> . | $response.RAD_REPLY.DHCP-Vendor.length()
"http://10.20.30.40:4321/acs" → 27
$response.RAD_REPLY.Rules.length()
[2048, 1024, None, 100] → 4
|
<string>.lower()
| Приведение строки <string> к нижнему регистру. | $request.RAD_REQUEST.User-Name.lower()
"sUpErUsEr.321" → "superuser.321" "TEST-LOGIN" → "test-login"
|
<list_of_kvp>.map_join([<delimeter>])
| Формирование из списка <list_of_kvp> пар (ключ, значение) списка строк, полученных объединением ключа и соответствующего ему значения. Ключ и значение в строках разделяются символом <delimeter> . Если аргумент <delimeter> не передан, в качестве разделителя используется запятая. | $response.RAD_REPLY.Cisco-Attributes.pairs().map_join("=")
{"ip:dns-servers": "10.1.14.1", "ip": "inacl: blockdns"} → ["ip=inacl: blockdns", "ip:dns-servers=10.1.14.1"]
|
<dictionary>.merge(<key>, <value>)
<dictionary>.merge(<key_value_list>)
<dictionary>.merge(<list_of_kvp>)
<dictionary>.merge(<additional_dictionary>)
| Обновление словаря <dictionary> . Если в словаре <dictionary> обновляемый ключ уже существует, его значение будет заменено новым. Аргументы могут быть следующими: - Ключ
<key> и значение <value> ; - Список
<key_value_list> из двух элементов: первый — ключ, второй — значение; - Список
<list_of_kvp> пар (ключ, значение); - Словарь
<additional_dictionary> .
| $request.RAD_REQUEST.Cisco-AVPair.merge("xpgk-owner-type=User".split("="))
{"xpgk-request-type": "number"} → {"xpgk-request-type": "number", "xpgk-owner-type": "User"} {"xpgk-owner-type": "Gateway"} → {"xpgk-owner-type": "User"}
|
<value>.mod(<divider>)
| Получение остатка от деления <value> на <divider> с предварительным приведением <value> к целому числу методом to_i() . Аналог оператора % . | $request.RAD_REQUEST.Acct-Session-Time.mod(86400)
"325752" → 66552 325 → 325
|
<string>.normalize_mac()
| Приведение MAC–адреса из строки <string> к формату, используемому Гидрой: верхний регистр, пары шестнадцатеричных цифр разделены дефисом. | $request.RAD_REQUEST.Agent-Remote-Id.normalize_mac()
"acf1.dfaf.42c0" → "AC-F1-DF-AF-42-C0" "428d01c53db7" → "42-8D-01-C5-3D-B7"
|
<string>.pad_left(<length>, <character>)
| Дополнение строки <string> до длины <length> путём добавления в начало символов <character> . Если длина строки меньше или равна указанной в <length> , возвращается исходная строка <string> . | "0x" + $var.Port-Number.to_hex_from_int().substring(2).pad_left(12, "0")
|
<string>.pad_right(<length>, <character>)
| Дополнение строки <string> до длины <length> путём добавления в конец символов <character> . Если длина строки меньше или равна указанной в <length> , возвращается исходная строка <string> . | $var.Port-Number.to_hex_from_int().pad_right(14, "0")
|
<dictionary>.pairs()
| Приведение словаря <dictionary> к списку пар (ключ, значение), лексикографически упорядоченных по ключу. | $response.RAD_REPLY.Cisco-Attributes.pairs()
{"ip:dns-servers": "10.1.14.1", "ip": "inacl: blockdns"} → [("ip", "inacl: blockdns"), ("ip:dns-servers", "10.1.14.1")]
|
<string>.regexp_replace(<regexp>[, <replacement_template>])
| Замена в строке <string> удовлетворяющих регулярному выражению <regexp> подстрок в соответствии с шаблоном <replacement_template> . Если <replacement_template> не задан, подстроки удаляются. В шаблоне могут использоваться ссылки на группы из регулярного выражения. Правила замены и синтаксис шаблона идентичны таковым у метода re.sub в Python за исключением необходимости дополнительного экранирования символа \ в шаблоне. | $request.RAD_REQUEST.User-Name.regexp_replace("^office([0-9]+?)$", "\\1")
"office2" → "2" "office123456789" → "123456789"
$var.Circuit-Id.regexp_replace("^0x0005(?P<vlan>[0-9a-f]{4})(?P<slot>[0-9a-f]{4})(?P<port>[0-9a-f]{2})$", "0x0006\g<vlan>\g<slot>00\g<port>") "0x0005043d000016" → "0x0006043d00000016"
|
<string>.replace(<string_to_replace>[, <replacement>])
| Замена в строке <string> подстрок <string_to_replace> на <replacement> . Если <replacement> не задан, подстроки удаляются. | $request.RAD_REQUEST.Agent-Circuit-Id.replace("0x")
"0x10006a12" → "10006a12"
|
<list>.reverse()
<string>.reverse()
| Изменение порядка символов строки <string> или элементов списка <list> на обратный. | $request.RAD_REQUEST.Cisco-Attributes.h323-incoming-conf-id.reverse()
"A0E8218F 9A4011E4" → "4E1104A9 F8128E0A"
$var.DNS-Servers-List.reverse()
["10.1.0.254", "10.254.0.254"] → ["10.254.0.254", "10.1.0.254"]
|
<string>.split([<separator>[, <maxsplit>]])
| Разбиение строки <string> на части (результат — список строк) по строке-разделителю <separator> . Правила разбиения и аргументы идентичны таковым у метода str.split в Python. | $response.RAD_REPLY.DHCP-Classless-Static-Route.replace(".", ";").split(";")
"24;192.168.123;10.1.1.1" → ["24", "192", "168", "123", "10", "1", "1", "1"]
$var.Routed-Subnets.split(",")
"192.168.14.128/29,,10.0.0.0/8" → ["192.168.14.128/29", "", "10.0.0.0/8"]
|
<string>.strip()
| Удаление пробелов в начале и конце строки <string> . | $request.RAD_REQUEST.User-Name.strip()
" Vasiliy Terkin " → "Vasiliy Terkin"
|
<string>.substring(<from_position>[, <to_position>])
| Извлечение подстроки из <string> : <from_position> — начало, а <to_position> — окончание. Символы нумеруются с нуля, верхняя граница интервала не включается. Если верхняя граница <to_position> не задана, подстрока извлекается до конца исходной строки. Значения границ могут быть отрицательными — в таком случае символы считаются от конца строки. | $request.RAD_REQUEST.DHCP-Relay-Remote-Id.substring(6)
"0x010a31302e3232312e332e34" → "31302e3232312e332e34"
$request.RAD_REQUEST.DHCP-Relay-Circuit-Id.substring(12,14)
"0x0005010d0004e3a1" → "04" "0x0005010d00c" → "c"
$request.RAD_REQUEST.DHCP-Relay-Circuit-Id.substring(-4,-2)
"0x0005010d0004e3a1" → "e3" "0x0005010d00c" → "d0"
$request.RAD_REQUEST.DHCP-Relay-Circuit-Id.substring(-2)
"0x0005010d0004e3a1" → "a1" "0x0005010d00c" → "0c"
|
<string>.to_date(<format>)
| Приведение строки в формате <format> к дате с временем (тип datetime.datetime в Python). Правила преобразования и описания формата идентичны таковым у метода datetime.strptime в Python. | $request.RAD_REQUEST.Event-Timestamp.to_date("%d.%m.%Y %H:%M:%S")
"06.08.1961 06:00:00" → datetime.datetime(1961, 8, 6, 6, 0)
|
<number>.to_days()
| Приведение количества дней <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. | $session.attributes.Trial-Period-Days.to_days()
"-5" → datetime.timedelta(-5) 123 → datetime.timedelta(123)
|
<number>.to_hex_from_int()
до 4.2.10.6 <number>.to_hex() | Перевод целого числа <number> в шестнадцатеричную систему с возвращением результата в виде строки в нижнем регистре с префиксом 0x . | $var.Service-Priority.to_hex_from_int()
24 → "0x18" -237 → "-0xed"
|
<string>.to_hex_from_str()
c 4.2.10.6 | Возвращает строку, содержащую шестнадцатеричное представление строки <string> . | $request.RAD_REQUEST.Agent-Remote-Id.to_hex_from_str()
"a8:f9:4b:5b:1b:02" → "61383a66393a34623a35623a31623a3032" "172.17.0.4" → "3137322e31372e302e34"
|
<number>.to_hours()
| Приведение количества часов <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. | $provider_profile.attributes.Acct-UTC-Offset.to_hours()
"-5" → datetime.timedelta(-1, 68400) 123 → datetime.timedelta(5, 10800)
|
<value>.to_i([<base>]) | Приведение <value> к целому числу. Если <value> — это число, оно будет округлено к меньшему по модулю («к нулю»). Если <value> является строкой, то в ней должно быть только целое число в системе счисления с основанием <base> . Если аргумент <base> не передан, основание полагается равным десяти. Правила преобразования и ограничения идентичны таковым у конструктора int в Python. | $request.RAD_REQUEST.Bill-Total-Amount.to_i()
"012" → 12 " - 12345 " → -12345 -123.45 → -123
$request.RAD_REQUEST.Agent-Circuit-Id.substring(2).to_i(16)
|
<number>.to_minutes()
| Приведение количества минут <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. | $customer_profile.attributes.Timeout.to_minutes()
"-5" → datetime.timedelta(-1, 86100) 123 → datetime.timedelta(0, 7380)
|
<value>.to_s([<format>])
| Приведение <value> к строке. Если <value> — это дата с временем (тип datetime.datetime в Python), то она будет преобразована в соответствии с форматом <format> (его указание в этом случае обязательно). Правила преобразования и описания формата идентичны таковым у метода datetime.strftime в Python. | ($var.Connection-Date.to_date("%d.%m.%Y %H:%M:%S") + 1.to_seconds()).to_s("%Y-%m-%dT%H:%M:%S")
datetime.datetime(1961, 4, 12, 9, 7) → "1961-04-12T09:07:00"
"QU;" + ($customer_profile.attributes.Upload-Rate.to_i() / 1024).to_i().to_s() + ";"
"250000" → "QU;244;" "256000" → "QU;250;"
|
<number>.to_seconds()
| Приведение количества секунд <number> к разнице между датами (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка. | $var.Delay-In-Seconds.to_seconds()
"-5" → datetime.timedelta(-1, 86395) 123 → datetime.timedelta(0, 123)
|
<string>.to_subnet_suffix()
| Определение длины префикса IPv4-подсети с маской <string> (суффикса подсети в CIDR-нотации). | $response.RAD_REPLY.Framed-IP-Netmask.to_subnet_suffix()
"255.255.255.248" → 29 "255.255.240.0" → 20
|
<number>.to_subnet_mask()
| Формирование маски IPv4-подсети с длиной префикса равной <number> бит. <number> — целое число от 0 до 32, либо преобразуемая к такому числу строка. | $customer_profile.attributes.Custom-Netmask-Prefix.to_subnet_mask()
30 → "255.255.255.252" "21" → "255.255.248.0"
|
<value>.try(<key>[, <default_value>])
| Возвращение соответствующего ключу <key> значения из <value> , или значения по умолчанию <default_value> , если такого ключа нет. Если <default_value> не задано, в качестве него используется пустое значение (None ). Особенности преобразования в зависимости от типа <value> : - Пустое значение (
None ) — возвращается <default_value> независимо от <key> . Это позволяет применять несколько методов try в одном выражении. - Список — возвращается элемент списка с номером <key>, нумерация элементов списка ведётся с нуля.
<key> — целое неотрицательное число.
| $request.RAD_REQUEST.try("ERX-Service-Session") $customer_profile.provider_profiles.try(0).try("equipment_id") $var.try("Service-Auth-Speed-Limits").try("Rate", "100000000") $response.try("RAD_REPLY").try("Cisco-Account-Info").present?()
|
<string>.unhex()
| Декодирование строки <string> , представленной в виде шестнадцатеричных кодов символов (формат ASCII-HEX). Если в исходной строке есть префикс 0x , он отбрасывается. | $request.RAD_REQUEST.DHCP-Relay-Remote-Id.unhex()
"61383a66393a34623a35623a31623a3032" → "a8:f9:4b:5b:1b:02" "0x3137322e31362e3132302e323130" → "172.16.120.210"
|
<string>.upper()
| Приведение строки <string> к верхнему регистру. | $request.RAD_REQUEST.User-Name.upper()
|