A tool for managing telemetry scripts
Project description
GS Tool - инструмент для разработки телеметрических скриптов
GS Tool - это утилита командной строки для создания, сборки и публикации телеметрических скриптов, написанных на языке Pawn. Инструмент автоматизирует процесс разработки от создания проекта до публикации готовых скриптов на сервере.
Оглавление
- Возможности
- Требования
- Установка
- Быстрый старт
- Использование во время разработки
- Команды
- Конфигурация
- Структура проекта
- Рабочий процесс
- Сборка пакета
- Решение проблем
Возможности
- ✨ Создание проектов по шаблону
- 🔧 Валидация конфигурации и препроцессинг
- 📦 Компиляция Pawn скриптов встроенным компилятором
- 🚀 Создание релизов с версионированием
- 📤 Публикация скриптов на сервере
- 🛠️ Автоматическая генерация кода из JSON конфигурации
Требования
- Python 3.7+
- pip (менеджер пакетов Python)
- Jinja2 (устанавливается автоматически)
- Click (устанавливается автоматически)
- Requests (устанавливается автоматически)
Установка
Установка из исходников
- Клонируйте репозиторий:
git clone git@gl.7gis.ru:ng/gs_tools.git
cd gs_tools
- Установите пакет в режиме разработки:
pip install -e .
Или для обычной установки:
pip install .
Установка из PyPI (если опубликован)
pip install gs-tool
Быстрый старт
- Создайте новый проект:
gs create my_telemetry_script
cd my_telemetry_script
-
Отредактируйте конфигурацию в файле
gs_project.json -
Напишите логику скрипта в файле
main.p -
Соберите проект:
gs build
- Создайте релиз:
gs release
- Опубликуйте на сервере:
gs push
Использование во время разработки
Если вы работаете с исходным кодом пакета и хотите тестировать изменения без переустановки:
- Установите пакет в режиме разработки:
pip install -e .
-
Теперь любые изменения в исходном коде будут сразу доступны при вызове команды
gs -
Для отладки можно запускать напрямую через Python:
python -m gs_tool.cli create test_project
Команды
gs create <name>
Создает новый проект с указанным именем. Создается папка проекта со всеми необходимыми файлами:
gs_project.json- конфигурация проектаmain.p- основной файл скриптаgs_natives.inc- файл с нативными функциями.gs_history/- папка для хранения релизов
Пример:
gs create speed_monitor
gs preprocess
Выполняет только препроцессинг: валидацию конфигурации и генерацию файла project.inc.
Пример:
gs preprocess
gs build
Выполняет полную сборку проекта:
- Препроцессинг (валидация + генерация кода)
- Компиляция Pawn кода
- Создание бинарного файла с заголовком
Пример:
gs build
Результаты:
main.amx— результат компиляции Pawn- локальный артефакт
<script_id>(заголовок + AMX) для проверки - при
gs releaseформируется<script_id>.binи попадает в архив
gs release
Создает zip-архив текущей версии проекта для последующей публикации. Архив сохраняется в папке .gs_history/.
Пример:
gs release
gs push
Публикует все созданные релизы на сервере. Использует настройки из конфигурационного файла.
Пример:
gs push
gs token
Управление персональными токенами доступа (PAT):
-
gs token create— выпуск токена (интерактивный вход по email/паролю, выбор компании, сохранение в~/.gs_tool/config.json).Примеры:
gs token create --email you@example.com gs token create --name ci-bot --scope scripts:write --scope descriptors:write --never-expires --email you@example.com
-
gs token list— список токенов текущего пользователя.gs token list
-
gs token revoke <token_id>— отзыв токена.gs token revoke abcdef0123456789
Конфигурация
Глобальная конфигурация
Файл конфигурации находится в ~/.gs_tool/config.json:
{
"server_url": "http://127.0.0.1:8000",
"company_id": "your_company_id",
"api_key": "your_api_key_here"
}
server_url- адрес сервера для публикации скриптовcompany_id- идентификатор компании по умолчанию для заголовкаX-Company-IDapi_key- персональный токен (PAT) для авторизации (можно выпустить черезgs token create)
Конфигурация проекта
Файл gs_project.json содержит всю информацию о проекте:
{
"script_id": "uuid-проекта",
"project_name": "имя_проекта",
"version": "0.0.1",
"description": "Описание скрипта",
"config": {
"uuid": "uuid-конфигурации",
"fields": [
{
"name": "speed_limit",
"type": "INT32",
"default": 60,
"min": "0",
"max": "200",
"ui": {
"category": "limits",
"widget": "spinbox",
"name": {"ru": "Ограничение скорости", "en": "Speed limit"},
"hint": {"ru": "Максимальная скорость", "en": "Maximum speed"},
"dimension": {"ru": "км/ч", "en": "km/h"}
}
}
]
},
"datasources": [
{
"name": "telemetry",
"uuid": "uuid-датасорса",
"fields": [
{"name": "speed", "type": "UINT32"},
{"name": "voltage", "type": "FLOAT"}
]
}
],
"subscriptions": [
{
"path": "/system/start",
"function": "start"
}
],
"api": {
"uuid": "uuid-api",
"endpoints": [
{
"name": "start",
"signature": [{"type": "FST_CELL"}]
}
]
}
}
Поддерживаемые типы данных
INT8,INT16,INT32- знаковые целыеUINT8,UINT16,UINT32- беззнаковые целыеFLOAT- число с плавающей точкойSTRING- строкаENUM- перечислениеARRAY- массивBOOL- логическое значение
Структура проекта
После создания проект имеет следующую структуру:
my_telemetry_script/
├── gs_project.json # Конфигурация проекта
├── main.p # Основной файл скрипта
├── gs_natives.inc # Нативные функции
├── project.inc # Сгенерированный файл (после препроцессинга)
├── main.amx # Скомпилированный байткод (после сборки)
└── .gs_history/ # История релизов
└── release_v0.0.1.zip
Рабочий процесс
graph TD
A["gs create"] --> B["Создание проекта<br/>с шаблонами"]
B --> C["Редактирование<br/>gs_project.json"]
C --> D["Написание<br/>кода в main.p"]
D --> E["gs build"]
E --> F["Препроцессинг<br/>project.inc"]
F --> G["Компиляция<br/>pawncc"]
G --> H["Бинарный файл<br/>.bin"]
H --> I["gs release"]
I --> J["Архив релиза<br/>.zip"]
J --> K["gs push"]
K --> L["Публикация<br/>на сервере"]
Сборка пакета
Для создания дистрибутива пакета:
- Убедитесь, что у вас установлены необходимые инструменты:
pip install build twine
- Создайте дистрибутивы:
python -m build
- Для публикации на PyPI:
python -m twine upload dist/*
Структура пакета
gs_tool/
├── __init__.py
├── cli.py # Основной CLI модуль
├── config.py # Работа с конфигурацией
├── project_template.json # Шаблон проекта
├── bin/ # Встроенный компилятор
│ ├── pawncc.exe
│ └── include/ # Include файлы компилятора
├── templates/ # Шаблоны для генерации кода
│ ├── gs_natives.inc
│ ├── main.p.j2
│ └── project.inc.j2
├── setup.py # Конфигурация установки
├── README.md # Этот файл
└── requirements.txt # Зависимости
Решение проблем
Ошибка "pawncc не найден"
Убедитесь, что:
- Пакет установлен правильно и содержит
bin/pawncc.exe - Или установите pawncc отдельно и добавьте его в PATH
Ошибка компиляции
- Проверьте синтаксис в
main.p - Убедитесь, что все используемые функции объявлены в
gs_natives.inc - Проверьте вывод компилятора на наличие конкретных ошибок
Ошибка публикации
- Проверьте настройки сервера в
~/.gs_tool/config.json - Убедитесь, что API ключ актуален
- Проверьте доступность сервера
Отладка
Для отладки можно использовать функцию Diagnostics() в Pawn коде:
Diagnostics("Debug message: %d", value);
Лицензия
[Укажите вашу лицензию]
Вклад в проект
[Инструкции для контрибьюторов]
Контакты
[Контактная информация]
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gs_tool-0.2.6.tar.gz.
File metadata
- Download URL: gs_tool-0.2.6.tar.gz
- Upload date:
- Size: 213.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cd585b2a9f8d5a603a013d88e6e1a26d893c43ace8c562501c0b7af42fe01ab
|
|
| MD5 |
3d92ec3314fab166f6a2cd3082836177
|
|
| BLAKE2b-256 |
f3cb200ba0f4abbb3f43b9b72cc68e43f2508aa544303bf68bba260542aeaf62
|
File details
Details for the file gs_tool-0.2.6-py3-none-any.whl.
File metadata
- Download URL: gs_tool-0.2.6-py3-none-any.whl
- Upload date:
- Size: 214.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84648e1e79f452872edab49fff549b90e08f6496362d5952cd3ad5e05aed5135
|
|
| MD5 |
e613fb9901899ddc5e9d716d913b2e65
|
|
| BLAKE2b-256 |
a72999d7a76ce351975445e04aa94395664d4b9a9086c24f64940517d34b77cf
|