Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Формат вызоваОписаниеПримеры использования

empty?()

Является ли значение «пустым»? Пустыми считаются:

  • None;
  • Пустая строка;
  • 0.
  • $customer_profile.attributes.Static-IP.empty?()
  • $request.RAD_REQUEST.try("DHCP-Relay-Circuit-Id").empty?()

ends_with?(<suffix>[, <start_position>[, <end_position>]])

Заканчивается ли значение строкой <suffix>? Если указаны опциональные аргументы, то проверяется не всё значение, а подстрока c символа <start_position> до символа <end_postion>. Символы нумеруются с нуля, верхняя граница интервала не включается.

$response.RAD_REPLY.DHCP-Subnet-Mask.ends_with?("/32")

has_field?(<field_name>)

Имеется ли ключ <field_name> в словаре?$response.RAD_REPLY.has_filed?("DHCP-Flags")

has_tag?(<tag_name>)

Присвоен ли тег запросу? Применяется только к переменной $context.
  • $context.has_tag?("accounting")
  • $context.has_tag?("auth-isg-service")

in?(<list_of_values>)

Входит ли значение в список <list_of_values>?$request.RAD_REQUEST.try("Session-Error-Msg").in?("Radius test by administrator;Authentication failure".split(";"))

ip4?()

Является ли значение IPv4-адресом?$request.RAD_REQUEST.Agent-Remote-Id.ip4?()

ip4_mask?()

Является ли значение маской IPv4-подсети?$request.RAD_REQUEST.DHCP-Subnet-Mask.ip4_mask?() 

like?(<pattern>)

Соответствует ли значение регулярному выражению <pattern>? Синтаксис регулярных выражений идентичен библиотеке re в Python.

$request.RAD_REQUEST.Agent-Circuit-Id.like?("^0x(.+)$")

mac?()

Является ли значение MAC-адресом?$request.RAD_REQUEST.Agent-Remote-Id.mac?()

null?()

Пуст ли словарь?$customer_profile.null?()

present?()

Заполнен ли словарь или задано ли значение?
  • $bind_id.present?()
  • $customer_profile.present?()

private_ip4?()

Принадлежит ли IPv4-адрес к одной из локальных подсетей:

  • 10.0.0.0/8;
  • 172.16.0.0/12;
  • 192.168.0.0/16?
$request.RAD_REQUEST.Agent-Remote-Id.private_ip4?()

starts_with?(<prefix>[, <start_position>[, <end_position>]])

Начинается ли значение строкой <prefix>? Если указаны опциональные аргументы, то проверяется не всё значение, а подстрока c символа <start_position> до символа <end_postion>. Символы нумеруются с нуля, верхняя граница интервала не включается.

$request.RAD_REQUEST.User-Name.starts_with?("Tester", 4, 16) 

...

extract(<code_type>, <start
Формат вызоваОписаниеПример использования
<value>.coalesce(<list_of_values>) 

$)

  • """"
  • """"
<arg1>[, <arg2>[, <arg3>...]])Возвращение первого отличного от None аргумента из <arg1>, <arg2> и т.д., если <value> равен None.

$customer_profile.attributes.L2TP-Class.coalesce("3")

  • None"3"
  • "15""15"

<string>.extract(<type>, <from_position>[, <length>])

 

$)

  • """"
  • "" → "Извлечение из строки <string> подстроки длины <length>, начиная с символа <from_position>. Символы нумеруются с нуля. Если аргумент <length> не передан, подстрока извлекается до конца исходной строки. Если аргумент <type> равен binary, то <from_postition> и <length> умножаются на два (один байт — две шестнадцатеричные цифры), а извлекаемые данные переводятся из шестнадцатеричной системы счисления в десятичную.

    $request.RAD_REQUEST.Agent-Circuit-Id.extract("binary", 5)

    • "0x00040900002a""42"

    $request.RAD_REQUEST.Agent-Circuit-Id.extract("string", 15, 2)

    • "vlan=0125.port=07.unit=2""07"

    <string>.format_mac([<delimeter>][, <groups>])

     

    $)

    • """"
    • """"

    ])

    Приведение MAC–адреса <string> к верхнему регистру и форматирование его разбиением на <groups> групп с разделителем <delimeter> между ними. Если аргумент <delimeter> не передан, в качестве разделителя используется дефис. Если аргумент <groups> не передан, адрес разбивается на 6 групп.

    $request.RAD_REQUEST.Agent-Remote-Id(":")

    • "acf1.dfaf.42c0""AC:F1:DF:AF:42:C0"
    • "BA46EC2EA786""BA:46:EC:2E:A7:86"

    $request.RAD_REQUEST.Agent-Remote-Id(".", 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()

    • "0"0
    • "2"8589934592

    <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_of_strings><list>.join([<delimeter>])

     

    $)

  • """"
  • "" → "Объединение элементов списка <list> в одну строку с использованием разделителя <delimeter>. Если аргумент <delimeter> не передан, разделитель не используется.

    $response.RAD_REPLY.Rules.join(";")

    • [2048, 1024, None, 100]"2048;1024;;100"

    <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
    • 325325

    <string>.normalize_mac()

    Приведение 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().substring(2).pad_left(12, "0")

    • 24"0x000000000018"

    <string>.pad_right(<length>, <character>)

    Дополнение строки <string> до длины <length> путём добавления в конец символов <character>. Если длина строки меньше или равна указанной в <length>, возвращается исходная строка <string>.

    $var.Port-Number.to_hex().pad_right(14, "0")

    • 39"0x270000000000"

    <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"

    <string>.replace(<string_to_replace>[, <replacement>])

    Замена в строке <string> подстрок <string_to_replace> на <replacement>. Если <replacement> не задан, подстроки удаляются.

    $request.RAD_REQUEST.Agent-Circuit-Id.replace("0x")

    • "0x10006a12""10006a12"

    <value>.reverse()

    Изменение порядка символов строки или элементов списка <value> на обратный.

    $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"

    <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)
    • 123datetime.timedelta(123)
    <number>.to_hex()Перевод целого числа <number> в шестнадцатеричную систему с возвращением результата в виде строки в нижнем регистре с префиксом 0x.

    $var.Service-Priority.to_hex()

    • 24"0x18"
    • -237"-0xed"

    <number>.to_hours()

    Приведение количества часов <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка.

    $provider_profile.attributes.Acct-UTC-Offset.to_hours()

    • "-5"datetime.timedelta(-1, 68400)
    • 123datetime.timedelta(5, 10800)
    Anchor
    to_i
    to_i
    <value>.to_i([<base>])

    Приведение <value> к целому числу. Если <value> — это число, оно будет округлено к меньшему по модулю («к нулю»). Если <value> является строкой, то в ней должно быть только целое число в системе счисления с основанием <base>. Если аргумент <base> не передан, основание полагается равным 10десяти. Правила преобразования и ограничения идентичны таковым у конструктора int в Python.

    $request.RAD_REQUEST.Bill-Total-Amount.to_i()

    • "012"12
    • " - 12345 "-12345
    • -123.45-123

    <number>.to_minutes()

    Приведение количества минут <number> к разнице между датами с временем (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка.

    $customer_profile.attributes.Timeout.to_minutes()

    • "-5"datetime.timedelta(-1, 86100)
    • 123datetime.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"

    <number>.to_seconds()

    Приведение количества секунд <number> к разнице между датами (тип datetime.timedelta в Python). <number> — целое число, либо преобразуемая к такому числу строка.

    $var.Delay-In-Seconds.to_seconds()

    • "-5"datetime.timedelta(-1, 86395)
    • 123datetime.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()

    • "SuPeRuSeR-123""SUPERUSER-123"

    • "test-login""TEST-LOGIN"

    ...