Trassir Script Framework’s documentation!¶
trassir_script_framework¶
BaseUtils¶
run_as_thread¶
- static
BaseUtils.
run_as_thread
(fn)[исходный код]¶Декоратор для запуска функций в отдельном потоке.
Результат: Функция в отдельном потоке Тип результата: 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)) Trueis_file_exists¶
- static
BaseUtils.
is_file_exists
(file_path, tries=1)[исходный код]¶Проверяет, существует ли файл.
Проверка происходит в течении
tries
секунд.Предупреждение
Запускайте функцию только в отдельном потоке еслиtries > 1
Вторая и последующие проверки производятся сtime.sleep(1)
Параметры: Результат:
True
if file exists,False
otherwiseТип результата: Examples
>>> BaseUtils.is_file_exists("_t1server.settings") Trueis_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 existsis_template_exists¶
cat¶
- classmethod
BaseUtils.
cat
(filepath, check_ext=True)[исходный код]¶Выводит на отображение текстовую инфомрацию.
Совет
- WinOS: открывает файл программой по умолчанию
- TrassirOS: открывает файл в терминале с помощью утилиты cat
Примечание
Доступные расширения файлов:[".txt", ".csv", ".log"]
Если открываете файл с другим расширением установитеcheck_ext=False
Параметры: Examples
>>> BaseUtils.cat("/home/trassir/ Trassir 3 License.txt")![]()
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)) 1564109694242000lpr_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 теге
Параметры: Результат: html image
Тип результата: 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)![]()
save_pkl¶
- static
BaseUtils.
save_pkl
(file_path, data)[исходный код]¶Сохраняет данные в .pkl файл
Параметры:
- file_path (
str
) – Путь до файла- data – Данные для сохранения
Результат: Абсолютный путь до файла
Тип результата: 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 файла
Параметры: Результат: Данные из файла или
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"
и др.
Параметры: Examples
>>> BaseUtils.set_script_name() 'trassir_script_framework v0.4'>>> BaseUtils.set_script_name(fmt="{title}") 'trassir_script_framework'HTTPRequester¶
- class
HTTPRequester
(opener=None, timeout=10)[исходный код]¶Framework for urllib2
Параметры:
- opener (
urllib2.OpenerDirector
, optional) – Обработчик запросов. По умолчаниюNone
- timeout (
int
, optional) – Время ожидания запроса, в секундах. По умолчаниюtimeout=10
Examples
Пример запроса к SDK Trassir
>>> # Отключение проверки сертификата >>> context = ssl.create_default_context() >>> context.check_hostname = False >>> context.verify_mode = ssl.CERT_NONE >>> >>> handler = urllib2.HTTPSHandler(context=context) >>> opener = urllib2.build_opener(handler) >>> >>> requests = HTTPRequester(opener, timeout=20) >>> response = requests.get( ... "https://172.20.0.101:8080/login", ... params={"username": "Admin", "password": "12345"} ... ) >>> >>> response.code 200 >>> response.text '{\n "sid" : "T6LAAcxg",\n "success" : 1\n}\n' >>> response.json {u'success': 1, u'sid': u'T6LAAcxg'}
- class
Response
(*args)[исходный код]¶Класс ответа от сервера
get
(url, params=None, headers=None)[исходный код]¶Создает GET запрос по указанному
url
Параметры: Examples
>>> requests = HTTPRequester() >>> response = requests.get( ... "http://httpbin.org/get", ... params={"PARAMETER": "TEST"}, ... ) >>> response.code 200 >>> response.text '{\n "args": {\n "PARAMETER": "TEST"\n }, \n ...' >>> response.json {u'args': {u'PARAMETER': u'TEST'}, ...}
Результат: Response instance Тип результата: HTTPRequester.Response
post
(url, data=None, headers=None)[исходный код]¶Создает POST запрос по указанному
url
Параметры: Examples
>>> requests = HTTPRequester() >>> response = requests.post( ... "http://httpbin.org/post", ... data={"PARAMETER": "TEST"}, ... headers={"Content-Type": "application/json"}, ... ) >>> response.code 200 >>> response.text '{\n "args": {\n "PARAMETER": "TEST"\n }, \n ...' >>> response.json {u'args': {u'PARAMETER': u'TEST'}, ...}
Результат: Response instance Тип результата: HTTPRequester.Response
PokaYoke¶
- class
PokaYoke
[исходный код]¶Класс для защиты от дурака
Позволяет блокировать запуск скрипта на ПО, где это не предусмотрено (например, на клиенте или TOS). А также производить некоторые другие проверки.
ban_tos¶
- static
PokaYoke.
ban_tos
()[исходный код]¶Блокирует запуск скрипта на Trassir OS
Raises: OSError
– Если скрипт запускается на Trassir OSExamples
>>> PokaYoke.ban_tos() OSError: Скрипт недоступен для TrassirOSban_win¶
- static
PokaYoke.
ban_win
()[исходный код]¶Блокирует запуск скрипта на Windows OS
Raises: OSError
– Если скрипт запускается на Windows OSExamples
>>> PokaYoke.ban_win() OSError: Скрипт недоступен для WindowsOSban_client¶
- static
PokaYoke.
ban_client
()[исходный код]¶Блокирует запуск скрипта на Trassir Client
Raises: TrassirError
– Если скрипт запускается на Trassir ClientExamples
>>> PokaYoke.ban_client() TrassirError: Скрипт недоступен для клиентской версии Trassirban_daemon¶
- classmethod
PokaYoke.
ban_daemon
()[исходный код]¶Блокирует запуск скрипта на сервре Trassir, который запущен как служба
Raises: TrassirError
– Если скрипт запускается на сервре Trassir, который запущен как службаExamples
>>> PokaYoke.ban_daemon() TrassirError: Скрипт недоступен для Trassir запущенным как службаcheck_email_account¶
- static
PokaYoke.
check_email_account
(account_name)[исходный код]¶Проверяет существование E-Mail аккаунта
Параметры: account_name (
str
) – Имя E-Mail аккаунтаРезультат: Список объектов
Тип результата: List[
TrObject
]Raises:
ParameterError
– Если аккаунт не выбранObjectsNotFoundError
– Если аккаунт не найденExamples
>>> PokaYoke.check_email_account("") ParameterError: 'EmailAccount' не выбраны >>> PokaYoke.check_email_account("YourAccount") ObjectsNotFoundError: Не найдены объекты EmailAccount: YourAccount >>> PokaYoke.check_email_account("MyAccount") [TrObject('MyAccount')]parse_emails¶
- classmethod
PokaYoke.
parse_emails
(mailing_list, regex=None)[исходный код]¶Парсит email дреса из строки
Каждый email проверяется с помощью regex
r"[^@]+@[^@]+\.[^@]+"
.
Параметры: Результат: Список адресов
Тип результата: List[
str
]Raises:
ParameterError
– Если найден невалидный emailExamples
>>> PokaYoke.parse_emails("a.trubilil!dssl.ru,support@dssl.ru") ParameterError: Email 'a.trubilil!dssl.ru' is not valid! >>> >>> PokaYoke.parse_emails("a.trubilil@dssl.ru,support@dssl.ru") ['a.trubilil@dssl.ru', 'support@dssl.ru']check_phones¶
- classmethod
PokaYoke.
check_phones
(phones, regex=None)[исходный код]¶Проверяет строку на валидность телефонных номеров
Строка проверяется с помощью regex
r"[^\d,;]"
.
Параметры: Результат: Список номеров телефона
Тип результата: Raises:
ParameterError
– Если найден невалидный номер телефонаExamples
>>> PokaYoke.check_phones("79999999999,78888888888A") ParameterError: Bad chars in phone list: `A` >>> >>> PokaYoke.check_phones("a.trubilil@dssl.ru,support@dssl.ru") '79999999999,78888888888'fire_recognizer_events¶
- classmethod
PokaYoke.
fire_recognizer_events
(enable=True, server_guid=None)[исходный код]¶Проверяет «Режим для СКУД» настроек распознавания лиц.
По умолчанию проверяет активирован ли «Режим для СКУД» на сервере, где запущен скрипт. По желанию можно указать удаленный сервер дял проверки.
Параметры: Raises:
RuntimeError
– Если указанный сервер недоступен.EnvironmentError
– Если моудль распознавания или режим для СКУД не доступны.TrassirError
– Если текущее состояние не соотвествует необходимомому.Examples
>>> PokaYoke.fire_recognizer_events() TrassirError: Пожалуйста, активируйте 'Режим для СКУД' в настройках распознавания лицScriptObject¶
- class
ScriptObject
(name=None, guid=None, parent=None, host_api=<module 'host' from '/home/docs/checkouts/readthedocs.org/user_builds/trassir-script-framework/checkouts/stable/tests/host/__init__.pyc'>)[исходный код]¶Создает объект для генерации событий
Параметры: Примечание
- Имя объекта по умолчанию -
BaseUtils.get_script_name()
- Guid объекта по умолчанию строится по шаблноу
"{script_guid}_object"
- Guid родительского объекта по умолчанию -
BaseUtils.get_server_guid()
Examples
>>> # Создаем объект >>> scr_obj = ScriptObject()>>> # Проверяем текущее состояние объекта >>> scr_obj.health 'OK'>>> # Установить флаг возле объекта >>> scr_obj.check_me = True>>> # Сгенерировать событие с текстом >>> scr_obj.fire_event_v2("New event")
health
¶Состояние объекта
Type: "OK"
|"Error"
Добавляет кнопку в контекстное меню объекта
Параметры:
- text (
str
) – Текст кнопки- callback (
function
) – Функция, которая вызывается при нажатии на кнопку. В качестве единственного аргумента функция приимает текущий объект (host.object(self.guid)
).Результат: Хендлер контекстного меню
Тип результата:
SE_ContextCatcher
Raises:
ValueError
– Если пустой текст кнопки.TypeError
– Если callback нельзя вызвать в качестве функции.Examples
>>> scr = ScriptObject() >>> >>> def switch(obj): ... check_me = scr.check_me ... scr.check_me = not check_me ... btn.set_name("ON" if check_me else "OFF") >>> >>> btn = scr.context_menu_button("ON", switch) >>> btn <host.SE_ContextCatcher object at 0x17B01A98> >>> scr.context_menu [('ON', 'switch', <host.SE_ContextCatcher object at 0x17B01A98>)]
fire_event_v2
(message, channel='', data='')[исходный код]¶Создает событие в Trassir
Параметры: GUITemplate¶
- class
GUITemplate
(template_name, host_api=<module 'host' from '/home/docs/checkouts/readthedocs.org/user_builds/trassir-script-framework/checkouts/stable/tests/host/__init__.pyc'>)[исходный код]¶Класс для работы с шаблонами Trassir
При инициализации находит существующий шаблон по имени или создает новый.
Примечание
Если вручную создать два или большее шаблона с одинаковыми именами данный класс выберет первый попавшийся шаблон с заданным именем.
Предупреждение
Работа с контентом шаблона может привести к падениям трассира. Используйте данный класс на свой страх и риск!
Совет
Для понимания, как формируется контент отредактируйте любой шаблон вручную и посмотрите что получится в скрытых параметрах трассира (активируются нажатием клавиши F4 в настройках трассира) Настройки/Шабоны/<Имя шаблона>/content
Ниже предсталвены некоторые примеры шаблонов
- Вывод одного канала
S0tE8nfg_Or3QZu4D
gui7(DEWARP_SETTINGS,zwVj07w0,dewarp(),1,S0tE8nfg_Or3QZu4D)
- Вывод шаблона 4х4 с каналами двумя
Kpid6EC0_Or3QZu4D
,ZRtXLrgu_Or3QZu4D
gui7(DEWARP_SETTINGS,zwVj07w0,dewarp(),4,Kpid6EC0_Or3QZu4D,ZRtXLrgu_Or3QZu4D,,)
- Вывод шаблон с минибраузером и ссылкой на https://www.google.com/
minibrowser(0,htmltab(,https://www.google.com/))
Параметры: template_name ( str
) – Имя шаблонExamples
>>> # Создаем шаблон с именем "New template" и получаем его guid >>> template = GUITemplate("New template") >>> template.guid 'Y2YFAkeZ'>>> # Устанавливаем на шаблон минибраузер с ссылкой на google >>> template.content = "minibrowser(0,htmltab(,https://www.google.com/))">>> # Изменяем имя шаблона на "Google search" >>> template.name = "Google search">>> # Открываем шаблон на первом мониторе >>> template.show(1)
delete
()[исходный код]¶Удаляет шаблон
show
(monitor=1)[исходный код]¶Открывает шаблон на указаном мониторе
Параметры: monitor ( int
, optional) – Номер монитора. По умолчаниюmonitor=1
TrObject¶
- class
TrObject
(obj, host_api=<module 'host' from '/home/docs/checkouts/readthedocs.org/user_builds/trassir-script-framework/checkouts/stable/tests/host/__init__.pyc'>)[исходный код]¶Вспомогательный класс для работы с объектами Trassir
obj_methods
¶Список методов объекта
TrObject.obj
Type: List[ str
]
Raises:
TypeError
– Если неправильные параметры объектаValueError
– Если в имени объекта есть запятыеServers¶
- class
Servers
[исходный код]¶Класс для работы с серверами
Examples
>>> srvs = Servers() >>> local_srv = srvs.get_local() [TrObject('Клиент')] >>> # Првоерим "Здоровье" локального сервера >>> local_srv[0].obj.state("server_health") 'Health Problem'
get_local
()[исходный код]¶Возвращает локальный сервер (на котором запущен скрипт)
Результат: Список объектов Тип результата: List[ TrObject
]
get_remote
()[исходный код]¶Возвращает список удаленных серверов
Результат: Список объектов Тип результата: List[ TrObject
]
get_all
()[исходный код]¶Возвращает список всех доступных серверов
Результат: Список объектов Тип результата: List[ TrObject
]Persons¶
- class
Persons
(server_guid=None)[исходный код]¶Класс для работы с персонами и их папками.
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> persons = Persons() >>> persons.get_folders() [TrObject('Мошенники'), TrObject('DSSL'), TrObject('persons')] >>> persons.get_persons() [ { 'name': 'Leonardo', 'guid': 'cJuJYAha', 'gender': 0, 'birth_date': '1980-01-01', 'comment': 'Comment', 'contact_info': 'Contact info', 'folder_guid': 'n68LOBhG', 'image': <image, str>, 'image_guid': 'gBHZ2vpz', 'effective_rights': 0, }, ... ] >>> persons.get_person_by_guid("cJuJYAha") { 'name': 'Leonardo', 'guid': 'cJuJYAha', 'gender': 0, 'birth_date': '1980-01-01', 'comment': 'Comment', 'contact_info': 'Contact info', 'folder_guid': 'n68LOBhG', 'image': <image, str>, 'image_guid': 'gBHZ2vpz', 'effective_rights': 0, }
get_folders
(names=None)[исходный код]¶Возвращает список папок персон
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]
get_persons
(folder_names=None, timeout=10)[исходный код]¶Возвращает список персон
Примечание
Данный метод работает только с локальной БД.
Параметры: Результат: Список персон - если персоны найдены
Тип результата: List[
dict
]Raises:
EnvironmentError
– Если произошла ошибка при запросе в БД.TrassirError
– Если в данной сборке Trassir нет методаhost.service_persons_get
get_person_by_guid
(person_guid, timeout=10)[исходный код]¶Возвращает информацию о персоне по его guid
Примечание
Для уменьшения кол-ва запросов к БД - метод создает локальную копию всех персон при первом запросе и обновляет ее вместе с последующими запросами не чаще чем 1 раз в 10 минут.
Параметры: Результат: Даные о персоне или
None
если персона не найденаТип результата:
get_person_by_name
(person_name, timeout=10)[исходный код]¶Возвращает информацию о персоне по его имени
Примечание
Для уменьшения кол-ва запросов к БД - метод создает локальную копию всех персон при первом запросе и обновляет ее вместе с последующими запросами не чаще чем 1 раз в 10 минут.
Параметры: Результат: Даные о персоне или
None
если персона не найденаТип результата: Users¶
- class
Users
(server_guid=None)[исходный код]¶Класс для работы с пользователями и их группами.
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> users = Users() >>> users.get_groups() [TrObject('TEST')]
get_groups
(names=None)[исходный код]¶Возвращает список групп пользователей
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]
get_users
(names=None)[исходный код]¶Возвращает список пользователей
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]
get_users_by_groups
(group_names)[исходный код]¶Возвращает список пользователей из указанных групп
Параметры: group_names ( str
|list
) –str
- имена групп, разделенные запятыми илиlist
- список имен.Результат: Список объектов Тип результата: List[ TrObject
]Templates¶
- class
Templates
(server_guid=None)[исходный код]¶Класс для работы с существующими шаблонами.
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> templates = Templates(BaseUtils.get_server_guid()) >>> templates.get_all() [TrObject('Parking'), TrObject('FR'), TrObject('AT'), TrObject('AD+')]PosTerminals¶
- class
PosTerminals
(server_guid=None)[исходный код]¶Класс для работы с POS Терминалами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> pos_terminals = PosTerminals() >>> pos_terminals.get_disabled() [TrObject('Касса (1)')]
get_enabled
(names=None)[исходный код]¶Возвращает список активных POS Терминалов
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]Devices¶
- class
Devices
(server_guid=None)[исходный код]¶Класс для работы с ip устройствами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> devices = Devices() >>> enabled_devices = devices.get_enabled() >>> enabled_devices [TrObject('AC-D2121IR3W'), TrObject('AC-D5123IR32'), ...] >>> >>> # Перезагрузим все устройства >>> for dev in enabled_devices: ... dev.settings["reboot"] = 1
get_enabled
(names=None)[исходный код]¶Возвращает список активных устройств
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]Channels¶
- class
Channels
(server_guid=None)[исходный код]¶Класс для работы с каналами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> channels = Channels() >>> selected_channels = channels.get_enabled("AC-D2121IR3W 2,AC-D9141IR2 1") >>> selected_channels [TrObject('AC-D2121IR3W 2'), TrObject('AC-D9141IR2 1')] >>> >>> # Включим ручную запись на выбранных каналах >>> for channel in selected_channels: ... channel.obj.manual_record_start() >>> >>> # Или добавим к имени канала его guid >>> for channel in selected_channels: ... channel.settings["name"] += " ({})".format(channel.guid)
get_enabled
(names=None)[исходный код]¶Возвращает список активных каналов
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]NetworkNodes¶
- class
NetworkNodes
(server_guid=None)[исходный код]¶Класс для работы с сетевыми подключениями
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> network_nodes = NetworkNodes("client") >>> network_nodes.get_enabled() [TrObject('QuattroStationPro (172.20.0.101)'), TrObject('NSK-HD-01 (127.0.0.1)')]
get_enabled
(names=None)[исходный код]¶Возвращает список активных сетевых подключений
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]Rules¶
- class
Rules
(server_guid=None)[исходный код]¶Класс для работы с правилами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> rules = Rules() >>> all_rules = rules.get_all() >>> all_rules [TrObject('!Rule'), TrObject('NEW RULE'), TrObject('Новое правило')] >>> >>> # Отключим все правила >>> for rule in all_rules: ... rule.settings["enable"] = 0
get_enabled
(names=None)[исходный код]¶Возвращает список активных правил
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]Scripts¶
- class
Scripts
(server_guid=None)[исходный код]¶Класс для работы со скриптами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> scripts = Scripts() >>> all_scripts = scripts.get_all() >>> all_scripts [TrObject('Новый скрипт'), TrObject('HDD Health Monitor'), TrObject('Password Reminder')] >>> >>> # Отключим все скрипты >>> for script in all_scripts: ... script.settings["enable"] = 0
get_enabled
(names=None)[исходный код]¶Возвращает список активных скриптов
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]StockScripts¶
- class
StockScripts
(server_guid=None)[исходный код]¶Класс для работы со встроенными скриптами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> stock_scripts = StockScripts() >>> all_scripts = stock_scripts.get_all() >>> all_scripts [TrObject('MegaRAID Monitor')] >>> >>> # Отключим все скрипты >>> for script in all_scripts: ... script.settings["enable"] = 0
get_enabled
(names=None)[исходный код]¶Возвращает список активных скриптов
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]Schedules¶
- class
Schedules
(server_guid=None)[исходный код]¶Класс для работы с расписаниями
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> schedules = Schedules() >>> my_schedule = schedules.get_enabled("!Schedule")[0] >>> my_schedule.obj.state("color") 'Red'
on_load
(schedule_name, callback, tries=5)[исходный код]¶Вызывает callback после загрузки расписания
Примечание
При загрузке сервера, объект расписания становится не сразу доступен. Данный метод помогает предотвратить данную ошибку.
Параметры:
- Examples
>>> schedule = None >>> # noinspection PyGlobalUndefined,PyUnresolvedReferences >>> def on_schedule_loaded(schedule_obj): ... global schedule ... schedule = schedule_obj ... ... message("Schedule '{obj.name}' ({obj.guid}) loaded".format(obj=schedule)) ... schedule.activate_on_state_changes(lambda: alert(schedule.state("color"))) >>> >>> Schedules().on_load("Unnamed Schedule", on_schedule_loaded)
get_enabled
(names=None)[исходный код]¶Возвращает список активных расписаний
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]EmailAccounts¶
- class
EmailAccounts
(server_guid=None)[исходный код]¶Класс для работы с E-Mail аккаунтами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> email_accounts = EmailAccounts() >>> email_accounts.get_all() [TrObject('Новая учетная запись e-mail'), TrObject('MyAccount')]TemplateLoops¶
- class
TemplateLoops
(server_guid=None)[исходный код]¶Класс для работы с циклическими просмотрами шаблонов
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> tmplate_loops = TemplateLoops() >>> tmplate_loops.get_all() [TrObject('Новый циклический просмотр')]
get_enabled
(names=None)[исходный код]¶Возвращает список активных циклических просмотров шаблонов
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]GPIO¶
- class
GPIO
(server_guid=None)[исходный код]¶Класс для работы с тревожными входами/выходами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> gpio = GPIO() >>> gpio_door = gpio.get_inputs("Door")[0] >>> gpio_door.obj.state("gpio_input_level") 'Input Low (Normal High)' >>> gpio_light = gpio.get_outputs("Light")[0] >>> gpio_light.obj.set_output_high()Zones¶
- class
Zones
(server_guid=None)[исходный код]¶Класс для работы с зонами
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> zones = Zones() >>> zones.get_queues("Касса 1")[0].obj.state("zone_queue") '5+'
get_people
(names=None)[исходный код]¶Возвращает список PeopleZones
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]
get_simt
(names=None)[исходный код]¶Возвращает список зон SIMT
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]
get_workplaces
(names=None)[исходный код]¶Возвращает список рабочих зон
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]Borders¶
- class
Borders
(server_guid=None)[исходный код]¶Класс для работы с линиями пересечения
Параметры: server_guid ( str
| List[str
], optional) – Guid сервера или список guid. По умолчаниюNone
, что соотвествует всем доступным серверам.Examples
>>> borders = Borders() >>> borders.get_simt() [TrObject('DBOP')] >>> borders.get_all() [TrObject('Вход в офис'), TrObject('DBOP')]
get_head
(names=None)[исходный код]¶Возвращает список HeadBorders
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]
get_people
(names=None)[исходный код]¶Возвращает список PeopleBorders
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]
get_simt
(names=None)[исходный код]¶Возвращает список SIMT Borders
Параметры: names ( str
|list
, optional) –str
- имена, разделенные запятыми илиlist
- список имен. По умолчаниюNone
Результат: Список объектов Тип результата: List[ TrObject
]ShotSaver¶
- class
ShotSaver
(shot_awaiting_time=5, tries_to_make_shot=2, pool_size=10, host_api=<module 'host' from '/home/docs/checkouts/readthedocs.org/user_builds/trassir-script-framework/checkouts/stable/tests/host/__init__.pyc'>)[исходный код]¶Класс для сохранения скриншотов
Параметры:
- shot_awaiting_time (
int
, optional) – Время ожидания скриншота, с. По умолчанию5
.- tries_to_make_shot (
int
, optional) – Кол-во попыток сохранить скриншот. Если в течении времени shot_awaiting_time скриншот не был сохранен - производится следующая попытка сохранить скриншот. По умолчанию2
- pool_size (
int
) – Размер пула. По умолчанию10
pool_size
¶Размер пула для метода
pool_shot
Устанавливает размер пула (кол-во одновременно созданных задач сохранения скриншотов). По умолчанию
10
.Предупреждение
Изменить данный параметр можно только до первого вызова метода
pool_shot
. После вызоветRuntimeError
Raises: RuntimeError
– Если пул уже создан.Type: int
pool_queue_size
¶Размер текущей очереди в пуле
Возвращает текущий размер очереди в пуле.
Примечание
Если пул еще не был созда (метод
pool_shot
не вызывался) данный метод вернет-1
Type: int
screenshots_folder
¶Папка для сохранения скриншотов по умолчанию
Устанавливает новый путь по умолчанию для сохранения скриншотов, если папка не существует - создает папку. Или возвращает текущий путь для сохранения скриншотов.
Примечание
По молчанию
screenshots_folder
=BaseUtils.get_screenshot_folder()
Raises: OSError
– Если возникает ошибка при создании папкиType: str
shot
(channel_full_guid, dt=None, file_name=None, file_path=None)[исходный код]¶Делает скриншот с указанного канала
Примечание
По умолчанию:
dt=datetime.now()
file_name="{name} (%Y.%m.%d %H-%M-%S).jpg"
, где{name}
- имя канала
Параметры:
- channel_full_guid (
str
) – Полный guid анала. Например:"CFsuNBzt_pV4ggECb"
- dt (
datetime.datetime
, optional) –datetime.datetime
для скриншота. По умолчаниюNone
- file_name (
str
, optional) – Имя файла с расширением. По умолчаниюNone
- file_path (
str
, optional) – Путь для сохранения скриншота. По умолчаниюNone
Результат: Полный путь до скриншота
Тип результата: Raises:
ValueError
– Если в guid канала отсутствует guid сервераTypeError
– Еслиisinstance(dt, (datetime, date)) is False
Examples
>>> ss = ShotSaver() >>> ss.shot("e80kgBLh_pV4ggECb") '/home/trassir/shots/AC-D2141IR3 Склад (2019.04.03 15-58-26).jpg'
async_shot
(channel_full_guid, dt=None, file_name=None, file_path=None, callback=None)[исходный код]¶Вызывает
callback
после сохнанения скриншота
- Метод работает в отдельном потоке
- Вызывает функцию
ShotSaver.shot()
- Ждет выполнения функции
BaseUtils.check_file()
tries=10
- Вызвает
callback
функцию
Параметры:
- channel_full_guid (
str
) – Полный guid канала. Например:"CFsuNBzt_pV4ggECb"
- dt (
datetime.datetime
, optional) –datetime.datetime
для скриншота. По умолчаниюNone
- file_name (
str
, optional) – Имя файла с расширением. По умолчаниюNone
- file_path (
str
, optional) – Путь для сохранения скриншота. По умолчаниюNone
- callback (
function
, optional) – Функциюя, которая вызывается после сохранения скриншота. В качестве аргументов должна принимать success, shot_path. По умолчаниюNone
Результат: Thread object
Тип результата: Examples
>>> # noinspection PyUnresolvedReferences >>> def callback(success, shot_path): ... # Пример callback функции ... # Args: ... # success (bool): True если скриншот успешно сохранен, иначе False ... # shot_path (str): Полный путь до скриншота ... if success: ... host.message("Скриншот успешно сохранен<br>%s" % shot_path) ... else: ... host.error("Ошибка сохранения скриншота <br>%s" % shot_path) >>> >>> ss = ShotSaver() >>> ss.async_shot("e80kgBLh_pV4ggECb", callback=callback)
pool_shot
(channel_full_guid, dt=None, file_name=None, file_path=None, callback=None)[исходный код]¶Сохраняет скриншоты в пуле.
Одновременно в работе не более
ShotSaver.pool_size
задач.Предупреждение
Данный метод создает
ShotSaver.pool_size
доп. потоков. Потоки удаляются при отключении скрипта.
Параметры:
- channel_full_guid (
str
) – Полный guid канала. Например:"CFsuNBzt_pV4ggECb"
- dt (
datetime.datetime
, optional) –datetime.datetime
для скриншота. По умолчаниюNone
- file_name (
str
, optional) – Имя файла с расширением. По умолчаниюNone
- file_path (
str
, optional) – Путь для сохранения скриншота. По умолчаниюNone
- callback (
function
, optional) – Функциюя, которая вызывается после сохранения скриншота. В качестве аргументов должна принимать success, shot_path. По умолчаниюNone
Examples
>>> ss = ShotSaver() >>> ss.pool_size = 2 >>> >>> ss.pool_shot("e80kgBLh_pV4ggECb") >>> ss.pool_shot("e80kgBLh_pV4ggECb") >>> ss.pool_shot("e80kgBLh_pV4ggECb") >>> ss.pool_shot("e80kgBLh_pV4ggECb") >>> >>> ss.pool_queue_size 4VideoExporter¶
- class
VideoExporter
(host_api=<module 'host' from '/home/docs/checkouts/readthedocs.org/user_builds/trassir-script-framework/checkouts/stable/tests/host/__init__.pyc'>)[исходный код]¶Класс для экспорта видео
Examples
Смена папки экспорта видео по умолчанию
>>> ss = VideoExporter() >>> ss.export_folder '/home/trassir/shots' >>> ss.export_folder += "/my_videos" >>> ss.export_folder '/home/trassir/shots/my_videos'Экспорт видео с вызовомcallback
функции после выполнения.Начало экспорта - 120 секунд назад, продолжительность 60 сек.>>> # noinspection PyUnresolvedReferences >>> def callback(success, file_path, channel_full_guid): ... # Пример callback функции ... # Args: ... # success (bool): True если видео экспортировано успешно, иначе False ... # file_path (str): Полный путь до видеофайла ... # channel_full_guid (str) : Полный guid канала ... if success: ... host.message("Экспорт успешно завершен<br>%s" % file_path) ... else: ... host.error("Ошибка экспорта<br>%s" % file_path)>>> ss = VideoExporter() >>> dt_start = datetime.now() - timedelta(seconds=120) >>> ss.export(callback, "e80kgBLh_pV4ggECb", dt_start)
export_folder
¶Папка для экспорта видео по умолчанию
Устанавливает новый путь по умолчанию для экспорта видео, если папка не существует - создает папку. Или возвращает текущий путь для экспорта видео.
Примечание
По молчанию
export_folder
=BaseUtils.get_screenshot_folder()
Raises: OSError
– Если возникает ошибка при создании папкиType: str
export
(channel_full_guid, dt_start, dt_end=None, duration=60, prefer_substream=False, file_name=None, file_path=None, callback=None)[исходный код]¶Запускает экспорт или добавляет задачу экспорта в очередь.
После завершения экспорта вызывает
callback
функцию а также очищает список задач экспорта в панеле управления Trassir.Примечание
Задача экспорта добавляется только после завершения предыдущей.
Совет
- Вы можете задать время начала и окончания экспорта
dt_start
,dt_end
.- Или можно задать время начала экспорта
dt_start
и продолжительность экспорта (в сек.)duration
. По умолчниюduration=60
.- Если
dt_end=None
фунция используетduration
для вычисления времени окончанияdt_end = dt_start + timedelta(seconds=duration)
.
Параметры:
- channel_full_guid (
str
) – Полный guid канала. Например:"CFsuNBzt_pV4ggECb"
- dt_start (
datetime.datetime
) –datetime.datetime
начала экспорта- dt_end (
datetime.datetime
, optional) –datetime.datetime
окончания экспорта. По умолчаниюNone
- duration (
int
, optional) – Продолжительность экспорта, в секундах. Используется еслиdt_end is None
. По умолчанию60
- prefer_substream (
bool
, optional) – ЕслиTrue
- Экспортирует субпоток. По умолчаниюFalse
- file_name (
str
, optional) – Имя экспортируемого файла. По умолчаниюNone
- file_path (
str
, optional) – Путь для экспорта. По умолчаниюNone
- callback (
function
, optional) – Функция, которая вызывается после завершения экспорта. По умолчаниюNone
Senders¶
PopupSender¶
- class
PopupSender
(width=400)[исходный код]¶Класс для показа всплывающих окон в правом нижнем углу экрана
Параметры: width ( int
, optional) – Ширина изображения, px. По умолчаниюwidth=400
Examples
>>> sender = PopupSender(300) >>> sender.text("Hello World!")
>>> sender.image(r"manual/en/cloud-devices-16.png")![]()
text
(text, popup_type='message', **kwargs)[исходный код]¶Показывает текст во всплывающем окне
Вызывает один из методов Trassir
host.alert
,host.message
илиhost.error
с текстом
Параметры:
- text (
str
) – Текст сообщения- popup_type (
"message"
|"alert"
|"error"
, optional) – Тип сообщения. По умолчанию"message"
image
(image_path, text='', popup_type=None, **kwargs)[исходный код]¶Показывает изображение во всплывающем окне
Параметры: PopupWithBtnSender¶
- class
PopupWithBtnSender
(width=800)[исходный код]¶Класс для показа всплывающих окон с кнопкой Оk
Примечание
Для закрытия окна необходимо нажать кнопку Ok в течении 60 сек.После 60 сек окно закрывается автоматически.
Параметры: width ( int
, optional) – Ширина изображения, px. По умолчаниюwidth=800
Examples
>>> sender = PopupWithBtnSender() >>> sender.text("Hello World!")
>>> sender.image(r"manual/en/cloud-devices-16.png")![]()
text
(text, **kwargs)[исходный код]¶Показывает текст во всплывающем окне
Вызывает метод Trassir
host.question
с текстом
Параметры: text ( str
) – Текст сообщения
image
(image_path, text='', **kwargs)[исходный код]¶Показывает изображение во всплывающем окне
Параметры: EmailSender¶
- class
EmailSender
(account, mailing_list, subject=None, max_size=None)[исходный код]¶Класс для отправки уведомлений, изображений и файлов на почту
Примечание
По умолчанию тема сообщений соответствует шаблону
{server_name} -> {script_name}
Совет
При отправке изображения с текстом предпочтительней использовать метод
EmailSender.image()
с необязательным аргументомtext
чемEmailSender.text()
с необазательным аргументомattachments
Параметры:
- account (
str
) – E-Mail аккаунт trassir. Проверяется методомPokaYoke.check_email_account()
- mailing_list (
str
) – Список email адресов для отправки писем разделенный запятыми. Проверяется и парсится в список методомPokaYoke.parse_emails()
- subject (
str
, optional) – Общая тема для сообщений. По умолчаниюNone
- max_size (
int
, optional) – Максимальный размер вложения, байт. По умолчанию 25 * 1024 * 1024Examples
>>> sender = EmailSender("MyAccount", "my_mail@google.com") >>> sender.text("Hello World!")
>>> sender.image(r"manual/en/cloud-devices-16.png")
>>> sender.files([r"manual/en/cloud.html", r"manual/en/cloud.png"])![]()
text
(text, subject=None, attachments=None, **kwargs)[исходный код]¶Отправка текстового сообщения
Параметры:
image
(image_path, text='', subject=None, **kwargs)[исходный код]¶Отправка изображения
Параметры:
files
(file_paths, text='', subject=None, callback=None, **kwargs)[исходный код]¶Отправка файлов
Примечание
Если отправляется несколько файлов они могут быть разделены на несколько сообщений, основываясь на максимальном размере вложений.
Параметры: TelegramSender¶
- class
TelegramSender
(telegram_ids=None)[исходный код]¶Работа с телеграм ботом @trassirbot
Предупреждение
Cкрипт должен быть запущен на сервере Trassir.На Клиенте скрипт вызовет ошибкуServerKeyError
Параметры: telegram_ids ( str
) – Id пользователей, через запятую.Examples
>>> # Можно указать id для рассылки при инициализации >>> # класса, для всех уведомлений >>> sender = TelegramSender("123456789") >>> sender.text("Hello World!")
>>> sender.image(r"manual/en/cloud-devices-16.png")
>>> sender.files([r"manual/en/cloud.html", r"manual/en/cloud.png"])
>>> # Или можно опередовать telegram id при вызове методов >>> sender = TelegramSender() >>> sender.text("Hello World!", tg_users=[123456789])
>>> sender.image(r"manual/en/cloud-devices-16.png", tg_users=[123456789])
>>> sender.files([r"manual/en/cloud.html", r"manual/en/cloud.png"], tg_users=[123456789])![]()
text
(text, tg_users=None, **kwargs)[исходный код]¶Отправка текстового сообщения
Параметры:
image
(image_path, text='', tg_users=None, remove=False, **kwargs)[исходный код]¶Отправка изображения
Параметры:
- image_path (
str
| List[str
]) – Полный путь до изображения или список путей- text (
str
, optional) – Текст сообщения. По умолчанию""
- tg_users (List[
int
], optional) – Список id пользователей telegram для отправки отдельных сообщений. По умолчаниюNone
- remove (bool, optional) – Удалить файл после отправки или нет. По умолчанию
False
files
(file_paths, text='', tg_users=None, remove=False, **kwargs)[исходный код]¶Отправка файлов
Параметры:
- file_paths (
str
|list
) – Путь до файла или список файлов для отправки- text (
str
, optional) – Текст сообщения. По умолчанию""
- tg_users (List[
int
], optional) – Список id пользователей telegram для отправки отдельных сообщений. По умолчаниюNone
- remove (bool, optional) – Удалить файл после отправки или нет. По умолчанию
False
SMSCSender¶
- class
SMSCSender
(login, password, phones, translit=True)[исходный код]¶Класс для отправки сообщений с помощью сервиса smsc.ru
См.также
Примечание
Номера проверяются методомPokaYoke.check_phones()
Также при первом запуске скрипт проверяет данные авторизацииПредупреждение
По умолчанию сервис smsc.ru отправляет сообщения от своего имени SMSC.RU. При этом отправка на номера Мегафон/Йота недоступна т.к. имя SMSC.RU заблокировано оператором.Мы настоятельно НЕ рекомендуем использовать стандартное имя SMSC.RU.Для отправки смс от вашего буквенного имени необходимо его создать в разделе - https://smsc.ru/senders/ и зарегистрировать для операторов в колонке Действия по кнопке Изменить (после заключения договора согласно инструкции - https://smsc.ru/contract/info/ ) а также приложить гарантийное письмо на МТС в личный кабинет http://smsc.ru/documents/ и отправить на почту inna@smsc.ru
Параметры: Raises:
SMSCSenderError
– При любых ошибках с отправкой сообщенияExamples
>>> sender = SMSCSender("login", "password", "79999999999") >>> sender.text("Hello World!")![]()
text
(text, **kwargs)[исходный код]¶Отправка текстового сообщения
Параметры: text ( str
) – Текст сообщения.FTPSender¶
- class
FTPSender
(host, port=21, user='anonymous', passwd='', work_dir=None, callback=None, queue_maxlen=1000)[исходный код]¶Класс для отправки файлов на ftp сервер
При инициализации проверят подключение к ftp серверу. Файлы отправляет по очереди. Максимальный размер очереди можно изменить. Во время выполнения передает текущий прогресс отправки файла в callback функцию.
Примечание
- Помимо прогресса в функцию callback может вернуться код ошибки.
- -1 Файл не существует.
- -2 Ошибка отправки на ftp, файл будет повторно отправлен.
- -3 Неизвестная ошибка.
Параметры:
- host (
str
) – Адрес ftp сервера.- port (
int
, optional) – Порт ftp сервера. По умолчаниюport=21
- user (
str
, optional) – Имя пользователя. По умолчанию"anonymous"
- passwd (
str
, optional) – Пароль пользователя. По умолчаниюpasswd=""
- work_dir (
str
, optional) – Директория на сервре для сохранения файлов. По умолчаниюNone
- callback (
function
, optional) – Callable function. По умолчаниюNone
- queue_maxlen (
int
, optional) – Максимальная длина очереди на отправку. По умолчаниюqueue_maxlen=1000
Examples
>>> # noinspection PyUnresolvedReferences >>> def callback(file_path, progress, error): ... # Пример callback функции, которая отображает ... # текущий прогресс в счетчике запуска скрипта ... # Args: ... # file_path (str): Путь до файла ... # progress (int): Текущий прогресс передачи файла, % ... # error (str | Exception): Ошибка при отправке файла, если есть ... host.stats()["run_count"] = progress ... if error: ... host.error(error) ... ... if progress == 100: ... host.timeout(3000, lambda: os.remove(BaseUtils.win_encode_path(file_path))) >>> >>> sender = FTPSender("172.20.0.10", 21, "trassir", "12345", work_dir="/test_dir/", callback=callback) >>> sender.files(r"D:/Shots/export_video.avi")
files
(file_paths, *args, **kwargs)[исходный код]¶Отправка файлов
Примечание
Можно указать отдельный путь на ftp сервере для каждого файла. Для этого список файлов на отправку должен быть приведен к виду
[(shot_path, ftp_path), ...]
При этом так же будет учитываться глобальная папкаwork_dir
заданная при инициализации класса.
Параметры: file_paths ( str
|list
) – Путь до файла или список файлов для отправкиSoundPlayer¶
- class
SoundPlayer
(sound_file, host_api=<module 'host' from '/home/docs/checkouts/readthedocs.org/user_builds/trassir-script-framework/checkouts/stable/tests/host/__init__.pyc'>)[исходный код]¶Класс для проигрывания выбранной мелодии.
Можно указать один из стандартных зуков или указать полный путь до своего файла.
Примечание
Список стандартных файлов
"SNES-startup.wav"
"alarm.wav"
"bell.wav"
"boxing-bell-1.wav"
"boxing-bell-3.wav"
"cardlock-open.wav"
"chime.wav"
"chip001.wav"
"chip019.wav"
"chip069.wav"
"cordless-phone-ring.wav"
"countdown.wav"
"dialtone.wav"
"ding.wav"
"horn-beep.wav"
"phone-beep.wav"
"police2.wav"
"ship-on-fog.wav"
"ships-bell.wav"
"spin-up.wav"
"tada1.wav"
"tape-slow9.wav"
Параметры: sound_file ( str
) – Имя файла с расширением
play
()[исходный код]¶Проигрывает выбранный файл
Examples
>>> player = SoundPlayer("alarm.wav") >>> player.play()
Changelog¶
Changelog¶
Version 0.64¶
Released 2019-07-25
New Features
- Add global logger. You need just set DEBUG = True
- Add
trassir_script_framework.BaseUtils.context_menu
- Add
trassir_script_framework.BaseUtils.context_menu_button()
- Add
trassir_script_framework.SoundPlayer
Changes
- Refactoring
trassir_script_framework.BaseUtils.is_template_exists()
- Fix
trassir_script_framework.BaseUtils.is_template_exists()
returns returns 1e15 - Now you can pass list argument to senders.
Version 0.63¶
Released 2019-07-19
New Features
- Added
trassir_script_framework.BaseUtils.dt_to_ts()
- Added
trassir_script_framework.StockScript
- Added
trassir_script_framework.PokaYoke.fire_recognizer_events()
Changes
- Rename
trassir_script_framework.BaseUtils.ts_to_datetime()
->trassir_script_framework.BaseUtils.dt_to_ts()
- Update TBotAPI: Fix - Send image method with cyrillic symbols on WinOS; Add - send_image_album
- Fix docstrings
Version 0.61¶
Released 2019-07-12
New Features
- Added
trassir_script_framework.Schedules.on_load()
- Added
trassir_script_framework.BaseUtils.event_type_encode()
- Added
trassir_script_framework.BaseUtils.event_type_decode()
Changes
- Exec encoded tbot_service in TelegramSender __init__
- Rebuild
trassir_script_framework.ShotSaver.pool_shot()
- Rebuild
trassir_script_framework.BaseUtils.get_logger()
Version 0.60¶
Released 2019-07-05
Changes
- Fix
trassir_script_framework.BaseUtils.win_encode_path()
- Update tbot_api
- Other fixes
Version 0.50¶
Released 2019-05-16
New Features
- Added
trassir_script_framework.BaseUtils.save_pkl()
- Added
trassir_script_framework.BaseUtils.load_pkl()
- Added
trassir_script_framework.Templates
- Added
trassir_script_framework.GUITemplate.delete()
Changes
- Fix ShotSaver examples
- Rename Template to
trassir_script_framework.GUITemplate
- Fix some errors in
trassir_script_framework.BaseUtils.image_to_base64()
- Add extension to file_log in
trassir_script_framework.BaseUtils.get_logger()
Version 0.4¶
Released 2019-04-30
New Features
Changes
- Fix catch_request_exceptions in
trassir_script_framework.HTTPRequester
- Add tg_users argument to
trassir_script_framework.TelegramSender
methods
Version 0.3¶
Released 2019-04-26
New Features
- Added
trassir_script_framework.BaseUtils.is_template_exists()
- Added
trassir_script_framework.HTTPRequester
- Added
trassir_script_framework.ShotSaver.pool_shot()
- Added
trassir_script_framework.Persons.get_person_by_name()
- Added
trassir_script_framework.BaseUtils.image_to_base64()
- Added
trassir_script_framework.BaseUtils.base64_to_html_img()
- Added more examples
Changes
- Added data to string transform
trassir_script_framework.ScriptObject.fire_event_v2()
- Added raise exception in functions with
trassir_script_framework.BaseUtils.run_as_thread_v2()
- Change argument structure in
trassir_script_framework.BaseUtils.to_json()
- Change argument structure in
trassir_script_framework.ShotSaver.async_shot()
- Fix:
trassir_script_framework.FTPSender
errors when send several files - Fix:
trassir_script_framework.FTPSender
remove self.logger - Fix:
trassir_script_framework.BaseUtils.get_logger()
permission denied when deleting log file
Version 0.2b¶
Released 2019-04-12
New Features
- Added
trassir_script_framework.FTPSender
- Added
trassir_script_framework.BaseUtils.lpr_flags_decode()
- Added more examples
Changes
Transferring PokaYoke GET methods to independent classes and extended functionality:
PokaYoke.get_servers ->trassir_script_framework.Servers
PokaYoke.get_persons ->trassir_script_framework.Persons
PokaYoke.get_person_folders ->trassir_script_framework.Persons
PokaYoke.get_users ->trassir_script_framework.Users
PokaYoke.get_terminals ->trassir_script_framework.PosTerminals
PokaYoke.get_ip_cameras ->trassir_script_framework.Devices
PokaYoke.get_channels ->trassir_script_framework.Channels
PokaYoke.get_networks ->trassir_script_framework.NetworkNodes
PokaYoke.get_rules ->trassir_script_framework.Rules
PokaYoke.get_scripts ->trassir_script_framework.Scripts
PokaYoke.get_schedules ->trassir_script_framework.Schedules
PokaYoke.get_servers ->trassir_script_framework.EmailAccounts
PokaYoke.get_template_loops ->trassir_script_framework.TemplateLoops
PokaYoke.get_gpio_inputs ->trassir_script_framework.GPIO
PokaYoke.get_gpio_outputs ->trassir_script_framework.GPIO
PokaYoke.get_people_zones ->trassir_script_framework.Zones
PokaYoke.get_simt_zones ->trassir_script_framework.Zones
PokaYoke.get_workplaces ->trassir_script_framework.Zones
PokaYoke.get_queues ->trassir_script_framework.Zones
PokaYoke.get_shelves ->trassir_script_framework.Zones
PokaYoke.get_people_zones ->trassir_script_framework.Zones
PokaYoke.get_head_borders ->trassir_script_framework.Borders
PokaYoke.get_people_borders ->trassir_script_framework.Borders
PokaYoke.get_simt_borders ->trassir_script_framework.Borders
PokaYoke.get_deep_people_borders ->trassir_script_framework.Borders
PokaYoke.get_all_borders ->trassir_script_framework.Borders
PokaYoke.get_access_points ->trassir_script_framework.Sigur
Rename some method and classes:
BaseUtils.check_file ->trassir_script_framework.BaseUtils.is_file_exists()
BaseUtils.check_folder ->trassir_script_framework.BaseUtils.is_folder_exists()
BaseUtils.pretty_json ->trassir_script_framework.BaseUtils.to_json()
PokaYokeObject ->trassir_script_framework.TrObject()
Fix some typos