Skip to main content

A tool for managing telemetry scripts

Project description

GS Tool - инструмент для разработки телеметрических скриптов

GS Tool - это утилита командной строки для создания, сборки и публикации телеметрических скриптов, написанных на языке Pawn. Инструмент автоматизирует процесс разработки от создания проекта до публикации готовых скриптов на сервере.

Оглавление

Возможности

  • ✨ Создание проектов по шаблону
  • 🔧 Валидация конфигурации и препроцессинг
  • 📦 Компиляция Pawn скриптов встроенным компилятором
  • 🚀 Создание релизов с версионированием
  • 📤 Публикация скриптов на сервере
  • 🛠️ Автоматическая генерация кода из JSON конфигурации

Требования

  • Python 3.7+
  • pip (менеджер пакетов Python)
  • Jinja2 (устанавливается автоматически)
  • Click (устанавливается автоматически)
  • Requests (устанавливается автоматически)

Установка

Установка из исходников

  1. Клонируйте репозиторий:
git clone git@gl.7gis.ru:ng/gs_tools.git
cd gs_tools
  1. Установите пакет в режиме разработки:
pip install -e .

Или для обычной установки:

pip install .

Установка из PyPI (если опубликован)

pip install gs-tool

Быстрый старт

  1. Создайте новый проект:
gs create my_telemetry_script
cd my_telemetry_script
  1. Отредактируйте конфигурацию в файле gs_project.json

  2. Напишите логику скрипта в файле main.p

  3. Соберите проект:

gs build
  1. Создайте релиз:
gs release
  1. Опубликуйте на сервере:
gs push

Использование во время разработки

Если вы работаете с исходным кодом пакета и хотите тестировать изменения без переустановки:

  1. Установите пакет в режиме разработки:
pip install -e .
  1. Теперь любые изменения в исходном коде будут сразу доступны при вызове команды gs

  2. Для отладки можно запускать напрямую через 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

Выполняет полную сборку проекта:

  1. Препроцессинг (валидация + генерация кода)
  2. Компиляция Pawn кода
  3. Создание бинарного файла с заголовком

Пример:

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-ID
  • api_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/>на сервере"]

Сборка пакета

Для создания дистрибутива пакета:

  1. Убедитесь, что у вас установлены необходимые инструменты:
pip install build twine
  1. Создайте дистрибутивы:
python -m build
  1. Для публикации на 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 не найден"

Убедитесь, что:

  1. Пакет установлен правильно и содержит bin/pawncc.exe
  2. Или установите pawncc отдельно и добавьте его в PATH

Ошибка компиляции

  1. Проверьте синтаксис в main.p
  2. Убедитесь, что все используемые функции объявлены в gs_natives.inc
  3. Проверьте вывод компилятора на наличие конкретных ошибок

Ошибка публикации

  1. Проверьте настройки сервера в ~/.gs_tool/config.json
  2. Убедитесь, что API ключ актуален
  3. Проверьте доступность сервера

Отладка

Для отладки можно использовать функцию 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

gs_tool-0.2.6.tar.gz (213.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gs_tool-0.2.6-py3-none-any.whl (214.5 kB view details)

Uploaded Python 3

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

Hashes for gs_tool-0.2.6.tar.gz
Algorithm Hash digest
SHA256 1cd585b2a9f8d5a603a013d88e6e1a26d893c43ace8c562501c0b7af42fe01ab
MD5 3d92ec3314fab166f6a2cd3082836177
BLAKE2b-256 f3cb200ba0f4abbb3f43b9b72cc68e43f2508aa544303bf68bba260542aeaf62

See more details on using hashes here.

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

Hashes for gs_tool-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 84648e1e79f452872edab49fff549b90e08f6496362d5952cd3ad5e05aed5135
MD5 e613fb9901899ddc5e9d716d913b2e65
BLAKE2b-256 a72999d7a76ce351975445e04aa94395664d4b9a9086c24f64940517d34b77cf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page