Page tree

resources/


Рекомендуем к прочтению: Параметры и ресурсы в скриптах

В теле скрипта Trassir есть возможность сохранить любые файлы например иконки, сторонние бибилотеки Python или же свои модули (блоки кода).

Пример
resources = {
	"sound_player.py": '''
		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
	'''
}
t1utils.resources_check(script_path, resources)

Ресурсы скрипта хранятся в зашифрованном в base64 формате (т.к. тело ресурса может содержать кавычки из-за которых возникнут ошибки парсинга) в словаре, где в качестве ключа используется путь до файла (относительно папки скрипта) а в качестве значения - код ресурса в base64.

После запуска скрипта ресурсы "распаковываются" в папку скрипта с помощью функции t1utils.resources_check которая в качестве аргументов принимает путь до папки скрипта (глобальная переменная script_path) и словарь с описанием ресурсов.


В большинстве случаев можно разрабатывать и тестировать скрипт локально, например на клиентском ПО т.к. большинство функций одинаково доступны и на клиенте и на сервере.

Разберем пример создания скрипта, который по нажатию кнопки будет проигрывать звуковой файл

Создадим новый скрипт и сразу изменим его параметры

После сохранения нового скрипта можно будет создать папку ресурсов для данного скрипта

Обратите внимание, что параметры company, title, version влияют на путь, где будут храниться ресурсы скрипта.

Для WinOS данная папка создается в .../trassir/scripts-data/company_title_version

Для TrassirOS данная папка создается в /home/trassir/scripts-data/company_title_version

*при этом знаки пробела и точки заменяются на нижнее подчеркивание _

Скопируем модуль sound_player.py в созданную папку ресурсов скрипта

Теперь данный модуль будет доступен для импорта в нашем скрипте.

Далее, если мы хотим перенести наш скрипт вместе с модулем sound_player.py на другой сервер нам необходимо добавить в список ресурсов наш модуль

Для этого укажем в скрипте ссылку на ресурс в описании параметров скрипта

'''
<parameters>
	<company>DSSL</company>
	<title>SoundPlayerExample</title>
	<version>1.0</version>
	
	<resources>
		<resource>sound_player.py</resource>
	</resources>
</parameters>
'''

Подключем скопированную библиотеку в скрипт, а также встроенный модуль host

import host
import sound_player

Далее созданим функцию, при вызове которой мы будем проигрывать звуковой файл.
Для удобства вынесем название звукового файла в костанту SOUND_FILE, а также инициализируем глобальный объект player

SOUND_FILE = "bell.wav"

player = sound_player.SoundPlayer()


def play_sound():
    player.play(SOUND_FILE)

После чего останется только добавить хендлер, который будет отслеживать нажание кнопки F12 и вызывать функцию play_sound()
Итоговый скрипт должен получиться примерно таким

# Sound player example
'''
<parameters>
	<company>DSSL</company>
	<title>SoundPlayerExample</title>
	<version>1.0</version>
	
	<resources>
		<resource>sound_player.py</resource>
	</resources>
</parameters>
'''

import host
import sound_player

SOUND_FILE = "bell.wav"

player = sound_player.SoundPlayer()


def play_sound():
    player.play(SOUND_FILE)


host.activate_on_shortcut("F12", play_sound)

На данном этапе можно сохранить и протестировать скрипт.
Нажав F12 - мы услышим проигрывание звукового файла.

Для сохранения итогового скрипта с ресурсами воспользуемся встроенным функционалом публикации скрипта

Если просто сохранить в файл - скрипт сохранится в закодированном виде. дальнейшее изменение закодированного скрипта невозможно

После сохранения скрипта в файл - в коде получившегося скрипта также будут находится закодированные в base64 данные ресурсов

# Sound player example
'''
<parameters>
	<company>DSSL</company>
	<title>SoundPlayerExample</title>
	<version>1.0</version>
	
	<resources>
		<resource>sound_player.py</resource>
	</resources>
</parameters>
'''


resources = {
	"sound_player.py": '''
		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
	'''
}
t1utils.resources_check(script_path, resources)

script = '''
		3c54sx/v1SfptVjOswhGbZNjLChosHjVdjBa3CYwjeyEBPTTTJ88coeL1fNXS8qrRyOMS6I3
		G9pWlt73liA8ABtobQia5q39I1iaZq/zOcNzbS7Y6HILYBAQfXAILphX3stZMLkpvVj5+ehY
		hIC9uD80ezzo4w2DExgovMiweNnd50SohLte6pi7+PW88EyEZJSqlTpOTUrFvwvN+q2/frQ2
		ghclaIAO88biyNdl+Zr7xI6SfHEeZ758o0fnd48SifVnPfUfLjZ75n/vAEDsPA==
'''
exec_encoded(script)

# Sound player example
'''
<parameters>
	<company>DSSL</company>
	<title>SoundPlayerExample</title>
	<version>1.0</version>
	
	<resources>
		<resource>sound_player.py</resource>
	</resources>
</parameters>
'''


resources = {
	"sound_player.py": '''
		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
	'''
}
t1utils.resources_check(script_path, resources)



import host
import sound_player

SOUND_FILE = "bell.wav"

player = sound_player.SoundPlayer()


def play_sound():
    player.play(SOUND_FILE)


host.activate_on_shortcut("F12", play_sound)


  • No labels