BaseUtils

run_as_thread

static BaseUtils.run_as_thread(func)[исходный код]

Декоратор для запуска функций в отдельном потоке.

Результат:Функция в отдельном потоке
Тип результата:threading.Thread

Examples

>>> import time
>>>
>>>
>>> @BaseUtils.run_as_thread
>>> def run_count_timer():
...     time.sleep(1)
...     host.stats()["run_count"] += 1
>>>
>>>
>>> run_count_timer()

win_encode_path

static BaseUtils.win_encode_path(path)[исходный код]

Изменяет кодировку на "cp1251" для WinOS.

Параметры:path (str) – Путь до файла или папки
Результат:Декодированый путь до файла или папки
Тип результата:str

Examples

>>> path = r"D:/Shots/Скриншот.jpeg"
>>> os.path.isfile(path)
False
>>> os.path.isfile(BaseUtils.win_encode_path(path))
True

is_file_exists

static BaseUtils.is_file_exists(file_path, tries=1)[исходный код]

Проверяет, существует ли файл.

Проверка происходит в течении tries секунд.

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

Запускайте функцию только в отдельном потоке если tries > 1
Вторая и последующие проверки производятся с time.sleep(1)
Параметры:
  • file_path (str) – Полный путь до файла
  • tries (int, optional) – Количество проверок. По умолчанию tries=1
Результат:

True if file exists, False otherwise

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

bool

Examples

>>> BaseUtils.is_file_exists("_t1server.settings")
True

is_folder_exists

static BaseUtils.is_folder_exists(folder)[исходный код]

Проверяет существование папки и доступ на запись.

Параметры:folder (str) – Путь к папке.
Raises:IOError – Если папка не существует

Examples

>>> BaseUtils.is_folder_exists("/test_path")
IOError: Folder '/test_path' is not exists

is_template_exists

classmethod BaseUtils.is_template_exists(template_name)[исходный код]

Проверяет существование шаблона

Параметры:template_name (str) – Имя шаблона
Результат:True если шаблон существует, иначе False
Тип результата:bool

cat

classmethod BaseUtils.cat(filepath, check_ext=True)[исходный код]

Выводит на отображение текстовую инфомрацию.

Совет

  • WinOS: открывает файл программой по умолчанию
  • TrassirOS: открывает файл в терминале с помощью утилиты cat

Примечание

Доступные расширения файлов: [".txt", ".csv", ".log"]
Если открываете файл с другим расширением установите check_ext=False
Параметры:
  • filepath (str) – Полный путь до файла
  • check_ext (bool, optional) – Если True - проверяет расширение файла. По умолчанию True

Examples

>>> BaseUtils.cat("/home/trassir/ Trassir 3 License.txt")
_images/base_utils.cat.png
Raises:TypeError – Если check_ext=True расширение файла нет в списке _TEXT_FILE_EXTENSIONS

to_json

classmethod BaseUtils.to_json(data, **kwargs)[исходный код]

Сериализация объекта в JSON стрку

Примечание

Не вызывает ошибку при сериализации объектов datetime, date, SE_Settings, SE_Object

Параметры:data (obj) – Объект для сериализации
Результат:JSON строка
Тип результата:str

Examples

>>> obj = {"now": datetime.now()}
>>> json.dumps(obj)
TypeError: datetime.datetime(2019, 4, 2, 18, 01, 33, 881000) is not JSON serializable
>>> BaseUtils.to_json(obj, indent=None)
'{"now": "2019-04-02T18:01:33.881000"}'

ts_to_dt

static BaseUtils.ts_to_dt(ts)[исходный код]

Конвертирует timestamp в datetime объект

Параметры:ts (int) – Timestamp
Результат:Datetime объект
Тип результата:datetime

Examples

>>> BaseUtils.ts_to_dt(1564109694242000)
datetime.datetime(2019, 7, 26, 9, 54, 54, 242000)

dt_to_ts

static BaseUtils.dt_to_ts(dt)[исходный код]

Конвертирует datetime объект в trassir timestamp

Параметры:dt (datetime) – Datetime
Результат:Trassir timestamp
Тип результата:int

Examples

>>> BaseUtils.ts_to_dt(datetime(2019, 7, 26, 9, 54, 54, 242000))
1564109694242000

lpr_flags_decode

classmethod BaseUtils.lpr_flags_decode(flags)[исходный код]

Преобразует флаги события AutoTrassir

Приводит флаги события человекочитаемый список

Примечание

Список доступных флагов:

  • LPR_UP - Направление движения вверх
  • LPR_DOWN - Направление движения вниз
  • LPR_BLACKLIST - Номер в черном списке
  • LPR_WHITELIST - Номер в черном списке
  • LPR_INFO - Номер в информационном списке
  • LPR_FIRST_LANE - Автомобиль двигается по первой полосе
  • LPR_SECOND_LANE - Автомобиль двигается по второй полосе
  • LPR_THIRD_LANE - Автомобиль двигается по третей полосе
  • LPR_EXT_DB_ERROR - Ошибка во внешнем списке
  • LPR_CORRECTED - Номер исправлен оператором
Параметры:flags (int) – Биты LPR события. Как правило аргумент ev.flags события SE_LprEvent AutoTrassir. Например 536870917
Результат:Список флагов
Тип результата:List[str]

Examples

>>> BaseUtils.lpr_flags_decode(536870917)
['LPR_UP', 'LPR_BLACKLIST']

event_type_encode

classmethod BaseUtils.event_type_encode(event_type)[исходный код]

Преобразует тип события str -> int

Примечание

События в БД хранятся в int, в скриптах приходят в человекочитаемом, строковом формате.

Параметры:event_type (str) – Тип события как в скриптах.

Examples

>>> BaseUtils.event_type_encode("Border Crossed A -> B")
-2010220362
Результат:Тип события как в БД
Тип результата:int

event_type_decode

classmethod BaseUtils.event_type_decode(event_type)[исходный код]

Преобразует тип события int -> str

Примечание

События в БД хранятся в int, в скриптах приходят в человекочитаемом, строковом формате.

Параметры:event_type (int) – Тип события как в БД.

Examples

>>> BaseUtils.event_type_encode(-2010220362)
"Border Crossed A -> B"
Результат:Тип события как в скриптах
Тип результата:str

image_to_base64

classmethod BaseUtils.image_to_base64(image)[исходный код]

Создает base64 из изображения

Параметры:image (str) – Путь к изображению или изображение
Результат:Base64 image
Тип результата:str

Examples

>>> BaseUtils.image_to_base64(r"manual/en/cloud-devices-16.png")
'iVBORw0KGgoAAAANSUhEUgAAB1MAAAH0CAYAAABo5wRhAAAACXBIWXMAAC4jA...'
>>> BaseUtils.image_to_base64(open(r"manual/en/cloud-devices-16.png", "rb").read())
'iVBORw0KGgoAAAANSUhEUgAAB1MAAAH0CAYAAABo5wRhAAAACXBIWXMAAC4jA...'

base64_to_html_img

classmethod BaseUtils.base64_to_html_img(image_base64, **kwargs)[исходный код]

Возвращает base64 изображение в <img> html теге

Параметры:
  • image_base64 (str) – Base64 image
  • **kwargs – HTML <img> tag attributes. Подробнее на html.com
Результат:

html image

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

str

Examples

>>> base64_image = BaseUtils.image_to_base64(r"manual/en/cloud-devices-16.png")
>>> html_image = BaseUtils.base64_to_html_img(base64_image, width=280, height=75)
>>> html_image
'<img src="data:image/png;base64,iVBORw0KGgoAA...Jggg==" width="280" height="75">'
>>> host.message(html_image)
_images/popup_sender.image.png

save_pkl

static BaseUtils.save_pkl(file_path, data)[исходный код]

Сохраняет данные в .pkl файл

Параметры:
  • file_path (str) – Путь до файла
  • data – Данные для сохранения
Результат:

Абсолютный путь до файла

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

str

Examples

>>> data = {"key": "value"}
>>> BaseUtils.save_pkl("saved_data.pkl", data)
'D:\DSSL\Trassir-4.1-Client\saved_data.pkl'

load_pkl

static BaseUtils.load_pkl(file_path, default_type=<type 'dict'>)[исходный код]

Загружает данные из .pkl файла

Параметры:
  • file_path (str) – Путь до файла
  • default_type (optional) – Тип данных, возвращаемый при неудачной загрузке данных из файла. По умолчанию dict
Результат:

Данные из файла или default_type()

Examples

>>> BaseUtils.load_pkl("fake_saved_data.pkl")
{}
>>> BaseUtils.load_pkl("fake_saved_data.pkl", default_type=list)
[]
>>> BaseUtils.load_pkl("fake_saved_data.pkl", default_type=int)
0
>>> BaseUtils.load_pkl("fake_saved_data.pkl", default_type=str)
''
>>> BaseUtils.load_pkl("saved_data.pkl")
{'key': 'value'}

get_operator_gui

classmethod BaseUtils.get_operator_gui()[исходный код]

Возвращает объект интерфейса оператора

Результат:Объект интерфейса оператора
Тип результата:OperatorGUI
Raises:ScriptError – Если не удается загрузить интерфейс

Examples

Открыть интерфейс Trassir а мониторе №1

>>> operator_gui = BaseUtils.get_operator_gui()
>>> operator_gui.raise_monitor(1)

get_server_guid

classmethod BaseUtils.get_server_guid()[исходный код]

Возвращает guid текущего сервра

Результат:Guid сервера
Тип результата:str

Examples

>>> BaseUtils.get_server_guid()
'client'

get_script_name

classmethod BaseUtils.get_script_name()[исходный код]

Возвращает имя текущего скрипта

Результат:Имя скрипта
Тип результата:str

Examples

>>> BaseUtils.get_script_name()
'Новый скрипт'

get_screenshot_folder

classmethod BaseUtils.get_screenshot_folder()[исходный код]

Возвращает путь до папки скриншотов

При этом производит проверку папки методом BaseUtils.is_folder_exists()

Результат:Полный путь к папке скриншотов
Тип результата:str

Examples

>>> BaseUtils.get_screenshot_folder()
'/home/trassir/shots'

get_logger

classmethod BaseUtils.get_logger(host_log='WARNING', popup_log='ERROR', file_log=None, file_name=None, file_max_bytes=5242880, file_backup_count=2)[исходный код]

Возвращает логгер с предустановленными хэндлерами

Доступные хэндлеры:
  • host_log: Пишет сообщения в основной лог сервера _t1server.log
  • popup_log: Показывает всплывающие сообщения message/alert/error
  • file_log: Пишет сообщения в отдельный файл в папку скриншотов

Для каждого хэндлера можно установить разный уровень логирования

По умолчанию host_log="WARNING" и popup_log="ERROR"

Примечание

Имя файла лога можно указать с расширение «.log» или без.

Параметры:
  • host_log (str, optional) – Уровень логирования в основной лог. По умолчанию "WARNING"
  • popup_log (str, optional) – Уровень логирования во всплывающих сообщениях. По умолчанию "ERROR"
  • file_log (str, optional) – Уровень логирования в отдельный файл По умолчанию None
  • file_name (str, optional) – Имя файла для логирования. По умолчанию None и равно <имени скрипта>.log
  • file_max_bytes (int, optional) – Максимальный размер файла лога в байтах. По умолчанию 5 * 1024 * 1024
  • file_backup_count (int, optional) – Макссимальное кол-во бэкапов лога. По умолчанию 2
Результат:

Логгер

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

logging.logger

Examples

>>> logger = BaseUtils.get_logger()
>>> logger.warning("My warning message")
>>> try:
...     # noinspection PyUnresolvedReferences
...     do_something()
... except NameError:
...     logger.error("Function is not defined", exc_info=True)

set_script_name

classmethod BaseUtils.set_script_name(fmt=None, script_name=None)[исходный код]

Автоматически изменяет имя скрипта

Новое имя скрипта создается на основе параметров скрипта. По желанию можно изменить шаблон имени. По умолчанию "{title} v{version}"

Примечание

Имя изменяется только если сейчас у скрипта стандартное имя, например "Новый скрипт" или "Unnamed Script" и др.

Параметры:
  • fmt (str, optional) – Шаблон имени скрипта. По умолчанию None
  • script_name (str, optional) – Имя скрипта. Если не задано - парсит имя из параметров. По умолчанию None

Examples

>>> BaseUtils.set_script_name()
'trassir_script_framework v0.4'
>>> BaseUtils.set_script_name(fmt="{title}")
'trassir_script_framework'