Giter Club home page Giter Club logo

oscript-library's Introduction

Библиотека полезных скриптов для 1Script

ВНИМАНИЕ! МЫ ПЕРЕЕХАЛИ!

Данный репо сохранен для истории. Вся актуальная разработка, свежие пакеты и многое-многое другое ведется в организации.

https://github.com/oscript-library

Join the chat at https://gitter.im/EvilBeaver/oscript-library

Библиотека скриптов переехала сюда: https://github.com/oscript-library

У каждого пакета из библиотеки теперь свой отдельный репозиторий.

Все пакеты библиотеки могут быть подключены с помощью директивы #Использовать <ИмяПакета>

Краткий список и назначение пакетов

Добавляет в скрипт функционал "Утверждений" (assertions). Возможны 2 стиля использования:

  • Модуль "Утверждения" - утверждения в стиле фреймворка xUnitFor1C
  • Свойство глобального контекста "Ожидаем" - fluent-API утверждений в стиле BDD

Библиотека разбора аргументов командной строки. Добавляет класс "ПарсерАргументовКоманднойСтроки", позволяющий удобным образом обрабатывать параметры запуска скрипта.

Часто используемые функции для работы с файлами

Порт модуля 1С:JSON Александра Переверзева с сайта infostart.ru

Библиотека логирования в стиле log4j

Удобная оболочка для запуска команд конфигуратора. Позволяет удобно запускать любые команды пакетного режима Конфигуратора и 1С:Предприятия.

Менеджер управления временными файлами и каталогами

Программная скриптовая обертка для популярной утилиты чтения файловых баз данных tool1cd от awa Удобно использовать, например, для работы с хранилищем 1С.

Синхронизация хранилища 1С с репозиторием git

Работа со строками. API библиотеки совместимо с API модуля СтроковыеФункцииКлиентСервер из БСП.

oscript-library's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oscript-library's Issues

Contribution guideline

собственно нужно как-то определиться с положением о контрибьюции

что имеется ввиду:

  • я хочу добаработать скрипт v8runner - у меня есть 2 команды и тесты на них которые я сделал для себя
  • дорабатывал я естественно напрямую в oscript_install_path\lib

теперь придется копировать свои доработки в отдельный git клон данного репозитория и делать пул-реквест.

я то разобрался (правда потратил 3 часа), но остальным будет полезно иметь такой вот мануал

если бы был простой файлик CONTIBIUTION.md - было бы проще будущим падаванам DevOps

gitsync: Формирование комментария коммита

При формировании комментария коммита гитсинк использует комментарий хранилища. Не секрет, он часто бывает пустым, но при этом метка в хранилище может быть заполнена (и содержать описание коммита).

Как смотрите на это с высоты своего опыта? Может стоит формировать комментарий например как (схематично):
Комментарий = КомментарийХранилища;
Если Пустаястрока(МеткаХранилища) Тогда
Комментарий = МеткаХранилища + ?(ПустаяСтрока(Комментарий), "", Символы.ПС + Комментарий);
Если ПустаяСтрока(Комментарий) Тогда
Комментарий = ".";
КонецЕсли

Поддержка YAML

Добавить библиотеку чтения YAML

Исходный issue от @allustin https://bitbucket.org/EvilBeaver/1script/issues/131/yaml

Предлагаю добавить поддержку сериализации коллекций в YAML и обратно
http://yaml.org/
YAML: YAML Ain't Markup Language

What It Is: YAML is a human friendly data serialization
standard for all programming languages.
При автоматизации необходимо хранить различные настройки, в том числе сгенерированные в процессе работы скриптов. Сейчас справляемся через ini файлы и DSL файлы инициализации, но такие файлы НЕ человекочитаемые.

Пакет обработки командной строки

Пакет обработки командной строки
Пример командной строки:
oscript test.os --run --ИмяБазы "База1" --Пользователь "admin" --Пароль "123"
oscript test.os run ИмяБазы "База1" Пользователь "admin" Пароль "123"

Интерфейс:

  • ДобавитьПараметр(ИмяПараметра)
  • ДобавитьПараметрФлаг(ИмяПараметра)
  • ДобавитьПараметрКоллекция(ИмяПараметра)
    • после ключа можно задавать любое количество значений до появления следующей команды или до конца строки
  • Разобрать(ВходнойМассивПараметров)
    -- Возвращает соответствие

Пример теста:

    // строка запуска - oscript test.os Параметр Значение или oscript test.os "Параметр" "Значение"
    ВходнойМассивПараметров = Новый Массив;
    ВходнойМассивПараметров.Добавить("Параметр");
    ВходнойМассивПараметров.Добавить("Значение"); 

    ПарсерКомаднойСтроки.ДобавитьПараметр("Параметр");

    Коллекция = ПарсерКомаднойСтроки.Разобрать(ВходнойМассивПараметров); //АргументыКоманднойСтроки);

    юТест.ПроверитьРавенство(1, Коллекция.Количество());
    юТест.ПроверитьРавенство("Значение", Коллекция.Получить("Параметр"));
    юТест.ПроверитьРавенство("Значение", Коллекция["Параметр"]);

gitsync: В некоторых случаях в случае ошибок возвращает код возврат 0, что является ошибкой

gitsync: В некоторых случаях в случае ошибок возвращает код возврат 0, что является ошибкой
Для билд-конфигураций это означает, что билд, который должен был упасть, не падает :(

Например, я убираю файл VERSION в другой каталог и получаю ошибку, но билд не падает

ИНФОРМАЦИЯ - Проверяю необходимость синхронизации: Main
[13:38:09][Step 1/1] ИНФОРМАЦИЯ - 
{Модуль gitsync\src\unpack.os / Ошибка в строке: 1048 / Файл с версией ГИТ
<GitRepo\Main\src\VERSION> не существует}
[13:38:09][Step 1/1] ИНФОРМАЦИЯ - Синхронизация завершена
[13:38:09][Step 1/1] Process exited with code 0

Определиться с новыми библиотеками

Есть разные полезные методы, которые юзаются/будут юзаться не в одном скрипте.
Например, КопироватьДеревоФайлов
или получение пути программы из переменной среды Path
или метод для проверки минимально нужной версии oscript и выброс исключения

Поэтому предлагаю подобные методы также закидывать в библиотеку.

Вопросы - как назовем соответствующие разделы библиотеки (русский и английский варианты)
КопироватьДеревоФайлов просится в раздел ФайловыеОперации/Файлы/files

По другим упомянутым методам пока не знаю, куда поместить.

Жду мнений.

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

пересмотрел видео с Инфостарта - один из вопросов малого зала был про возможность поставки скрипттов в скомированном виде или дополнительных dll или еще чего либо.

и в этот момент я подумал, что не все такие как мы - кто-то может попытаться распространять вредоносный код.

в связи с чем думается необходимо каким-то образом реализовать подпись пакетов или их проверку и подтверждение... или как то еще.

то есть push на хаб пакета явно не должен быть анонимным.

P.S. Задача глобальная, но требующая проработки

Отключить вывод "Информация - " для обычных логов

ИМХО было бы удобно отключить вывод "Информация - " для логов уровня "информация".
сейчас в логах большое количество строк "Информация" является ненужным "шумом" :(

ИМХО я где-то в log4ХХХ видел подобную фичу.

gitsync: Хак для исправления ошибки распаковки

Добрый день.

При распаковке одного из хранилищ возникла ошибка
Ошибка преобразования данных XDTO:
Запись значения свойства:
форма: Элемент
имя: {http://v8.1c.ru/8.2/data/spreadsheet}document
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства:
форма: Элемент
имя: {http://v8.1c.ru/8.2/data/spreadsheet}table
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'СводнаяТаблица'

Опытным путем пришел к решению, в рамках которого добавил еще один параметр гитсинку. При наличии этого параметра производится распаковка cf средствами unpackv8 и удаляется лишняя информация из cf. После этого произвожу обратную упаковку и продолжаю синк.

Есть ли более элегантное решение?
Интересно ли описанное (могу прислать пулл реквест)?

Gitsync неверно работает c 8.3.7

В 8.3.7 по умолчанию используется иерархический формат при выгрузке.

Нужно доработать код для использования старого формата + влить пулл-реквест #38 для использования нового формата.

Исправлю сам.

v8runner: Возможность указания произвольного имени файла вывода логов от 1С:Предприятие

Возможность указания произвольного имени файла вывода логов от 1С:Предприятие/Конфигуратор

Например, когда идет несколько запусков Конфигуратора и Предприятия подряд, происходит неприятное:

  • логи от всех 1С пишутся в один и тот же log.txt
  • В итоге последний запуск в режиме Конфигуратора/Предприятия затирает все логи и файл лога всегда пуст

Библиотека логирования (аналогично log4j)

Библиотека логирования (аналогично log4j)
Пример кода:

    ПодключитьСценарий("libs\logger.os", "Логгер");
    Лог = Новый Логгер; 
    Лог.УстановитьУровень(Лог.Уровень().Ошибка);
    //ПодключитьСценарий("libs\console-appender.os", "ВыводВКонсоль"); //внутри логгера
    Лог.ДобавитьСпособВывода(Новый ВыводВКонсоль);

    // ПодключитьСценарий("libs\file-appender.os", "ВыводВФайл");//внутри логгера
    ФайловыйПисатель = Новый ВыводВФайл;
    ФайловыйПисатель.Открыть(ИмяФайлаЛога);
    Лог.ДобавитьСпособВывода(ФайловыйПисатель);
    Лог.УстановитьУровень(Лог.Уровень().Отключить);
    Лог.УстановитьУровень(Лог.Уровень().Информация);
    Лог.Отладка("текст");
    Лог.Информация("текст");
    Лог.Предупреждение("текст");
    Лог.Ошибка("текст");
    Лог.КритичнаяОшибка("текст");

    Лог.Закрыть();

Объединить loader для opm со стандартным

Сейчас opm имеет собственный загрузчик, работающий на предопределенных папках Классы и Модули. Нужно этот алгоритм встроить в глобальный загрузчик (чтобы поддерживал оба варианта), а из opm - удалить.

gitsync: При начальной настройке репозитария выполнять правильную настройку работу с русскими именами файлов

Необходима настройка git для возможности использования кириллических наименований внешних обработок через команду git config --local core.quotepath false

Аналогично xDrivenDevelopment/precommit1c#42

Подключать gitsync как библиотеку

Нужно иметь возможность управления синхронизатором в объектной технике, а не только через командную строку.

Критерий завершения:

Есть возможность создать некий объект синхронизатора, подключив его через "Использовать", и выполнять те же действия, что и в командной строке, но объектно, из управляющего скрипта.

gitsync: Обрабатывать только одну версию хранилища 1С за один запуск, а не все новые версии из хранилища 1С

gitsync: Обрабатывать только одну версию хранилища 1С за один запуск, а не все новые версии из хранилища 1С

Например, при работе с билд-сервером нельзя управлять процессом обработки хранилища 1С.

И в случае активной разработки несколькими разработчиками обработка хранилища может идти очень долго. Особенно это критично в случае использования схемы обработки нескольких репозитариев.

А если при одном запуске обрабатывается только одна версия, появилась бы возможность прогнозирования времени работы и повысилась управляемость.

Было бы удобно добавить специальный ключ командной строки для управления.

gitsync Ошибка подгрузки библиотеки "core"

Не выполняется скрипт gytsync. Вываливает ошибку:

{Модуль e:\Repos\oscript-library\src\gitsync\src\gitsync.os / Ошибка в строке: 10 / Библиотека не найдена "core"}

Это строка звучит так:
#Использовать "core"
Каталог core состоит из двух подкаталогов: "Классы" и "Модули".
Так и должно быть? Использую 1script самый последний 1.0.11.53

Запускаю всё из локального свежего гит-репозитория.
Строка запуска:
oscript gitsync.os help init

Что я делаю не так?

Пакетный менеджер

Нужен функционал:

  • Версионирования пакетов
  • Управления зависимостями
  • Подгрузки пакетов из облака hub.oscript.io
  • Хелпер создания новых пакетов

Добавить загрузку из исходников

Добавить команду для загрузки данных из исходников в базу данных с возможностью сохранения результата в cf файл.
в v8runner возможно необходимо добавить загрузку из исходников с учетом возможности загрузки объектов частично, а gitsync подготовку папки для загрузки, с учетом обратной сборки из исходников "толстых форм" и последующем вызове загрузки данных в v8runner, а дальше выгрузка результата в cf.

fluent API для CMDLINE

Оставляю, как напоминалку, задокументирую позже.
Суть: текущий API cmdline сложноват.
Предложение:

Парсер.ДобавитьПараметр("Путь")
    .Обязательный()
    .Описание("Укажите путь к файлу")
    .Именованный("-file");

В командной строке:

someapp -file /home/user/file.txt

В коде чтения параметров:

Сообщить(ПараметрыКомСтроки.Путь);

v8runner: Убрать ключ по умолчанию MIGRATE в методе ЗапуститьВРежимеПредприятия

Убрать ключ по умолчанию MIGRATE в методе ЗапуститьВРежимеПредприятия

Процедура ЗапуститьВРежимеПредприятия(Знач КлючЗапуска = "MIGRATE",
Знач УправляемыйРежим = Неопределено, 
Знач ДополнительныеКлючи = Неопределено) Экспорт

readme.md: Исправить описание библиотеки strings

В описании библиотеки strings написано

Работа со строками. Фактически является копией общего модуля "СтроковыеФункцииКлиентСервер" из поставки Библиотеки Стандартных Подсистем.

Смущает слово "копия", предлагаю заменить слово "аналог" или более явно написать: "API библиотеки совместимо с API модуля СтроковыеФункцииКлиентСервер из БСП".

v8runner: Перед выполнением команд 1С нужно проверять существование файла платформы 1С

Перед выполнением команд 1С нужно проверять существование файла платформы 1С

Сейчас при указании неверного пути к платформе выдается малопонятное сообщение

{Модуль C:\Program Files (x86)\OneScript\lib\v8runner\src\v8runner.os / 
Ошибка в строке: 484 / Внешнее исключение: Не удается найти указанный файл}
[12:11:43][Step 2/10] Process exited with code 1

Ошибка подключения библиотек при использовании локальных путей

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

#Использовать "libs/asserts"
#Использовать "libs/v8runner"

то при компиляции происходит ошибка вида

{Модуль C:\Program Files (x86)\OneScript\lib\asserts\package-loader.os / Ошибка в строке: 45 / Внешнее исключение: Symbol already defined in the scope}    
                    ДобавитьМодуль(ФайлКласса.ПолноеИмя, Идентификатор);

Протестировано на ветке develop, sha - 6a8aaba
На сколько я понял, проблема связана с тем, что в v8runner используется подключение asserts стандартным способом "по имени", через #Использовать asserts, и происходит конфликт имен классов/модулей.

Такая же проблема часто возникает с модулем logos.

Приходится исключать эти библиотеки из импорта, что может привести к ошибкам, так как в стандартном каталоге lib могут лежать неактуальные и/или конфликтующие версии подключаемых библиотек.

Возможно ли научить oscipt при подключении библиотек "по имени" проверять, подключена ли она (не важно, "по имени" или "по пути"), и если подключена, то использовать уже ее?
(Ну, или радикальный вариант - не использовать подключение библиотек внутри стандартных библиотек)

Если это проблема самого oscript, могу перенести issue туда.

Скрипт, подобный gitsync для работы с mercurial

Понравилась работа скрипта, но в компании корпоративным стандартом для веберов является Mercurial, соответственно, идет давление на использование именно этой системы контроля версий и для 1С.
Насколько большой проблемой является переделать данный скрипт на работу с Mercurial?

В gitsync не работает синхронизация одного репозитария

В gitsync не работает синхронизация одного репозитария :(
Причина: временная база, используемая для выгрузки модулей, создается пустая, т.к. вообще нет кода для создания этой базы с помощью полученного из хранилища файла конфигурации.

И далее вторая причина: не разбираются формы, т.к. в репозитарий не положили файлы для Unpackv8.exe

@EvilBeaver у меня буря эмоций по этой ошибке :(

opm не скачивает обновления на win 10

c:\Program Files (x86)\OneScript\lib\opm>opm update cmdline
ИНФОРМАЦИЯ - Скачиваю файл: cmdline.ospx
Внешнее исключение: Знак "=", шестнадцатеричное значение 0x3D, не может стоять в начале имени., строка 2, позиция 21.

json: Добавить возможность настройки объекта (АвтоматическоеПриведениеОбъектаКСтруктуре и т.п.)

В исходной обработке, на основе которой сделана библиотека, настройка объекта предполагает "хардкод" параметров, например, есть параметр АвтоматическоеПриведениеОбъектаКСтруктуре, по умолчанию его значение - Ложь.

Изменить эту настройку никак нельзя, кроме как поменять жестко захардкоженое в функции НастройкаАвтоматическоеПриведениеОбъектаКСтруктуре() возвращаемое значение (Ложь на Истина), что неприемлемо для библиотеки общего назначения, коей является данная библиотека.

Необходимо для следующих настроек, описанных в документации библиотеки, сделать так, чтобы их можно было бы менять из клиентских скриптов:

  • АвтоматическоеПриведениеОбъектаКСтруктуре
  • НеявноеПриведениеПримитивныхЗначенийКлюча
  • ПолноеМаскированиеСимволов
  • МаскированиеКириллицы

V8Runner ищет платформы только на диске C

Места установки платформ нужно брать из служебного файлика 1С в %APPDATA%\бла-бла

Сейчас, если платформы ставятся не на диск C: v8runner их не сможет найти автоматом.

ВременныеФайлы: доработать получение имен и путей для новых файлов (добавить СлучайноеИмяФайла)

Сейчас у нас используется метод НовоеИмяФайла
ИМХО имя этого метода не отвечает своему функционалу, т.к. возвращает не имя файла, а полный путь.
Возникает путаница с терминологией: у нас есть путь, полное имя, имя файла и есть метод, который должен возвращать имя, а возвращать полный путь/полное имя.

Предлагаю разделить функционал этого метода на два метода:

  • НовоеИмяФайла - получает именно имя нового файла, без пути к файлу
  • НовоеПолноеИмяФайла - получает именно полное имя нового файла, т.е. полный путь с именем файла

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

Добавить версии для библиотек

Добавить версии для библиотек, чтобы исключить в пользовательском коде комментарии следующего вида Требуется библиотека cmdline от 21.10.2015 и новее.

Вопрос - какую архитектуру выберем?
Например, у каждого класса библиотеки будет метод Версия()?
или у каждой библиотеки будет глобальный метод Версия() ?
какие еще варианты есть?

@EvilBeaver что скажешь?

gitsync: При уровне логгирования debug не удалять временные файлы

Часто при работе с gitsync приходится отлаживать код, при этом временные файлы удаляются. Хотелось бы при режиме отладки, что-бы временные файлы не удалялись. В теории такой режим нужен только для отладки, поэтому остаточные артефакты - это необходимый функционал для полноценной отладки. Сейчас вроде в режиме отладки выводиться команда которая должна выполниться, но выполнить мы ее не можем, т.к. уже таких путей не существует.

Прогон тестов при CI

Дать дополнительным разработчикам простые возможности прогона тестов c использованием CI.
Прогонять тесты руками, через finder.os, совсем неудобно, т.к. не видно, какие в итоге упали :(

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.