vsptd

Основная библиотека. Позволяет работать с триплетами, триплетными строками, триплетными выражениями (фрейм-формулами). Также содержит функционал для настройки параметров ВСПТД.

class vsptd.vsptd.VSPTDSettings

Хранение настроек параметров ВСПТД-объектов и правил валидации строковых значений

Примечание

  • Правила валидации значений представлены в виде регулярных выражений (RegExp).
  • Подразумевается, что типы данных для параметров триплета не будут изменяться.
Пример работы:
>>> my_settings = VSPTDSettings()
>>> my_settings.prefix_min = 5
>>> my_settings.prefix_max = 100
>>> my_settings.prefix_regexp = '.*'
>>> my_settings.trp_start = '~'
>>> Trp.settings = my_settings  # применение настроек к классу триплета
bid = ':'

Заявка. См. описание ВСПТД

trp_start = '$'

Начало триплета

trp_pn_sprtr = '.'

Разделитель префикса и имени триплета

trp_nv_sprtr = '='

Разделитель имени и значения триплета

trp_end = ';'

Конец триплета

trp_val_str_isltr = "'"

Обособление значения-строки триплета

trp_comment_isltr = '"'

Обособление комментария триплета

trps_sprtr = ' '

Разделитель триплетов в триплетной строке TrpStr

trp_expr_items_sprtr = ''

Разделитель операторов и операндов в триплетном выражении TrpExp

prefix_min = 1

Мин. длина префикса триплета

prefix_max = 32

Макс. длина префикса триплета

prefix_regexp = '[A-Z]+\\d*'

Формат префикса триплета (RegExp)

prefix_types = (<class 'str'>,)

Типы данных префикса триплета

name_min = 1

Мин. длина имени триплета

name_max = 32

Макс. длина имени триплета

name_regexp = '[A-Z]+'

Формат имени триплета (RegExp)

name_types = (<class 'str'>,)

Типы данных имени триплета

value_str_min = 0

Мин. длина значения-строки триплета

value_str_max = 256

Макс. длина значения-строки триплета

value_str_regexp = None

Формат значения-строки триплета (RegExp)

value_types = (<class 'str'>, <class 'int'>, <class 'float'>, <class 'vsptd.vsptd.Trp'>, <class 'vsptd.vsptd.TrpExpr'>)

Типы данных значения триплета

comment_min = 0

Мин. длина комментария триплета

comment_max = 256

Макс. длина комментария триплета

comment_regexp = None

Формат комментария триплета (RegExp)

comment_types = (<class 'str'>,)

Типы данных комментария триплета

validate(prefix=None, name=None, value=None, comment=None) → None

Проверяет корректность параметра триплета. В случае ошибки вызывает исключение

Примечание

Проверить можно лишь один параметр за раз. Необходимо всегда указывать имя параметра функции.

Параметры:
  • prefix – префикс триплета
  • name – имя триплета
  • value – значение триплета
  • comment – комментарий триплета
to_dict() → dict

Возвращает настройки ВСПТД в виде словаря

from_dict(settings: dict) → None

Обновляет настройки ВСПТД из переданных в словаре

Предупреждение

Валидация настроек не проводится.

Параметры:settings (dict) – настройки
class vsptd.vsptd.Trp(prefix: str, name=None, value=None, comment=None, bid=False, special=False)

Триплет

Примечание

  • при создании триплета и изменении его значений производится валидация, в результате чего могут вызваны различные исключения. См. дополнительно в спецификации ВСПТД требования к параметрам триплета, а также стандартную конфигурацию ВСПТД-параметров в описании API класса VSPTDSettings.

  • свойства prefix и name недоступны для изменения после создания триплета;

  • если не указано значение триплета, то созданный триплет может использоваться как триплет-цель в значении другого триплета или в триплетном выражении TrpExpr:

    >>> print(Trp('A', 'B', Trp('C', 'D')))
    $A.B=$C.D;
    
  • свойство special отвечает за “особенность” триплета, что проявляется отсутствием символа начала триплета в строковом представлении, а также приобретаемым дополнительным смыслом в контексте решаемой задачи:

    >>> print(Trp('A', 'B', special=True))
    A.B
    
  • имени или комментарию, равным пустой строке, будет присвоено значение None

Параметры:
  • prefix (str) – префикс триплета
  • name (str, необяз.) – имя триплета
  • value (str, int, float, Trp, TrpExpr, необяз.) – значение триплета; None по умолчанию
  • comment (str, необяз.) – комментарий; пустая строка по умолчанию
  • bid (bool, необяз.) – заявка
  • special (bool, необяз.) – “особенность” триплета
Исключение:
  • TypeError – если параметры не соответствующих типов
  • ValueError – если параметры не удовлетворяют соответствующим требованиям
  • ValueError – при попытке использовать в качестве значения триплет, не являющийся триплетом-целью
  • AttributeError – при попытке изменить свойства prefix и name
Пример работы:
>>> Trp('A', 'B', 'C')
Trp(prefix='A', name='B', value='C')
settings = <VSPTDSettings>

Свойство класса. Настройки конфигурации ВСПТД VSPTDSettings; по умолчанию используются стандартные

prefix

Префикс триплета

name

Имя триплета

value

Значение триплета

comment

Комментарий триплета

bid

Заявка

special

“Особенность” триплета

class vsptd.vsptd.TrpStr(*trps)

Триплетная строка

Примечание

Триплетная строка упорядочена. Новые триплеты добавляются в конец, старые обновляются и сохраняют свои позиции.

Параметры:

*trps – триплеты Trp

Исключение:

TypeError – если параметры не Trp

Пример работы:
>>> TrpStr(Trp('A', 'B', 'C'))
TrpStr(Trp(prefix='A', name='B', value='C'))
settings = <VSPTDSettings>

Свойство класса. Настройки конфигурации ВСПТД VSPTDSettings; по умолчанию используются стандартные

add(other) → None

Добавляет в триплетную строку переданный триплет или триплеты переданной триплетной строки

Практически эквивалентно сложению через оператор “+”. Отличие в том, что данный метод не возвращает новый экземпляр, а изменяет нынешний.

Параметры:

other (Trp, TrpStr) – триплет или триплетная строка

Исключение:

TypeError – если параметр не Trp и не TrpStr

Пример работы:
>>> my_trp_str = TrpStr(Trp('A', 'B', 'C'))
>>> my_trp_str.add(Trp('D', 'E', 'F'))
index(trp) → int

Возвращает позицию триплета в триплетной строке

Параметры:

trp (Trp) – триплет

Тип результата:

int

Исключение:
  • TypeError – Если принят не Trp
  • ValueError – Если триплет не найден в триплетной строке
get(prefix: str, name)

Возвращает из триплетной строки триплет по заданным префиксу и имени

Эквивалентно <TrpStr>[prefix, name]

Параметры:
  • prefix (str) – префикс
  • name (str) – имя
Тип результата:

Trp

Исключение:
  • TypeError – если префикс/имя не является str
  • ValueError – если префикс/имя не удовлетворяет соответствующим требованиям
  • KeyError – если по заданным префиксу и имени триплет не найден
getpr(prefix: str, strict=True)

Возвращает из триплетной строки триплеты по заданному префиксу

Эквивалентно <TrpStr>[prefix]

Параметры:
  • prefix (str) – префикс
  • strict (bool) – использовать строгий поиск (не включает префиксы вида E, E1, E2 и т.д.), True по умолчанию
Тип результата:

TrpStr

Исключение:
  • TypeError – если префикс не является str
  • ValueError – префикс не удовлетворяет соответствующим требованиям
  • KeyError – если по заданному префиксу триплетов не найдено
rem(prefix: str, name) → None

Удаляет из триплетной строки триплет по заданным префиксу и имени

Эквивалентно del <TrpStr>[prefix, name]

Параметры:
  • prefix (str) – префикс
  • name (str) – имя параметра
Исключение:
  • TypeError – если префикс/имя не является str
  • ValueError – если префикс/имя не удовлетворяет соответствующим требованиям
  • KeyError – если по заданным префиксу и имени триплет не найден
rempr(prefix: str, strict=True) → None

Удаляет из триплетной строки все триплеты по заданному префиксу

Эквивалентно del <TrpStr>[prefix]

Параметры:
  • prefix (str) – префикс
  • strict (bool) – использовать строгий поиск (не включает префиксы вида E, E1, E2 и т.д.), True по умолчанию
Исключение:
  • TypeError – если префикс не является str
  • ValueError – префикс не удовлетворяет соответствующим требованиям
  • KeyError – если по заданному префиксу триплетов не найдено
sort() → None

Сортирует триплетную строку в лексиграфическом порядке по префиксу и имени триплетов

class vsptd.vsptd.TrpExpr(*items)

Триплетное выражение, или фрейм-формула

Примечание

  • операторы должны быть в виде строк str;
  • используемые триплеты должны быть триплетами-целями.
Параметры:

*items (str, int, float, bool, Trp) – параметры

Исключение:
  • ValueError – если триплет не является триплетом-целью
  • TypeError – если элемент не str, int, float, bool, Trp, TrpExpr
Пример работы:
>>> expr = TrpExpr(Trp('A', 'B'), '*', Trp('C', 'D'))
>>> print(expr)
$A.B*$C.D
>>> print(Trp('E', 'F', expr))
$E.F=$A.B*$C.D;
settings = <VSPTDSettings>

Свойство класса. Настройки конфигурации ВСПТД VSPTDSettings; по умолчанию используются стандартные

items

Операнды и операторы в триплетном выражении

calculate(source=None, special_source=None)

Вычисляет выражение

Предупреждение

В текущей версии для вычисления выражения используется eval, что потенциально опасно.

Параметры:
  • source (TrpStr, необяз.) – триплетная строка, откуда будут браться значения
  • special_source (TrpStr, необяз.) – триплетная строка, откуда будут браться значения, соответствующие “специальным” триплетам
Результат:

результат вычисления выражения

Пример работы:
>>> expr = TrpExpr(Trp('A', 'B'), '*', Trp('C', 'D'))
>>> trp_str = TrpStr(Trp('A', 'B', 21), Trp('C', 'D', 2))
>>> expr.calculate(trp_str)
42