Skip to content

Работа с конфигом в формате JSON #95

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Nov 23, 2017
Merged

Работа с конфигом в формате JSON #95

merged 12 commits into from
Nov 23, 2017

Conversation

khorevaa
Copy link
Member

@khorevaa khorevaa commented Nov 9, 2017

Устал, формировать ручками xml и добавил как альтернативу работу с JSON

@artbear

Copy link
Member

@artbear artbear left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отлично дополнение, JSON давно просился! Спасибо.

У меня есть некоторые замечания.

КонецФункции


Функция ВырезатьКомментарииИзТекстаJSON(Знач JsonСтрока)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Давайте вставим вырезку комментариев из JSON сразу в пакет JSON.
Сейчас вырезание дублируется в нескольких пакетах, например, здесь и в ванесса-раннер.
Кажется, еще где-то я юзал вырезание комментов

/cc @nixel2007 @EvilBeaver @pumbaEO @khorevaa

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не против...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я скорей отрицательно отношусь к комментам, чем положительно в json

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Комментарии нужны... без них тяжко

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@artbear очень смешно.... oscript-library/json#4

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Stepa86 done

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вечером выпущу релиз json и можно будет поправить данный PR


Для Каждого КлючИЗначение Из ЭлементМассива Цикл

Если КлючИЗначение.Ключ = "name" Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю длиннющий список Если КлючИЗначение.Ключ = ??? Тогда
1 занести в спец.соответствие
2 и получать ключ через Ключ = СоответствиеКлючей[ИсходныйКлюч];

Долой множественный switch
Код будет намного проще.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделал


КонецПроцедуры

Функция НекорректнаяСтруктураНастроек()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю изменить имя на СтрокаНекорректнаяСтруктураНастроек

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переименовал


Процедура ПрочитатьНастройкиИзФайлаJSON(Знач ФайлНастроек)

Конфиг = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "json-config.os"));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем пользоваться таким способом здесь и в тестах ?
Предлагаю явно добавить классы ЧтениеКонфигаXML_Гитсинк и ЧтениеКонфигаJSON_Гитсинк и юзать их в коде и в тестах

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделал классы


Для Каждого КлючИЗначение Из ГлобальныеНастройки Цикл

Если КлючИЗначение.Ключ = "email-domain" Тогда
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь также можно добавить спец.соответствие ключей и расшифровок

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделал


КонецФункции // ВырезатьКомментарииИзТекстаJSON()

Процедура ПрочитатьНастройкиРепозитория(ЭлементМассива)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Совершенно непонятно, что же скрывается в параметре ЭлементМассива метода :(
Предлагаю переименовать.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переименовал

КонецЕсли;

Если ПустаяСтрока(КлючИЗначение.Значение) и мНастройки.Свойство(Ключ) Тогда
КлючИЗначение.Значение = мНастройки[Ключ];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Разве можно менять значение у КлючЗначение?

В 1С это запрещено :(
image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю использовать промежуточную переменную вместо присвоения в КлючИЗначение.Значение

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тем более, что здесь идет неявная работа - фактически этот код меняет содержание переданного параметра из ЭлементаМассива :(
это совсем нехорошо.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Убрал

Утверждения.ПроверитьРавенство("каталог2", мНастройки.Репозитарии[1].КаталогХранилища1С);
Утверждения.ПроверитьРавенство(мНастройки.ПутьGit, мНастройки.Репозитарии[1].ПутьGit);
Утверждения.ПроверитьРавенство(мНастройки.ПутьКПлатформе83, мНастройки.Репозитарии[1].ПутьКПлатформе83);
Утверждения.ПроверитьРавенство("server.com", мНастройки.Репозитарии[1].ДоменПочтыДляGit);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот здесь лучше явно указать
Утверждения.ПроверитьРавенство(мНастройки.ДоменПочтыДляGit, мНастройки.Репозитарии[1].ДоменПочтыДляGit);
как в строках выше
вместо использования "server.com"

Copy link
Member Author

@khorevaa khorevaa Nov 9, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это не надо править т.к. проверка корректная. Проверяется локальная настройка для репо.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У тебя что глобальная, что локальная настройка совпадают :(
Я про это и писал.

Если ты хочешь проверить именно локальную настройку, тогда нужно в конфиг.json установить локальную настройку, например, localhost вместо server.com

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И проверить именно локальную настройку, а не глобальную.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь будешь менять?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю добавить в настройку репозитория отдельную настройку для почты и убедиться, что локальная настройка переписывает глобальную

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@artbear
Copy link
Member

artbear commented Nov 9, 2017

А вообще я лично планировал использовать пакет params для разруливания подобных настроек - и ком.строка, и json, и многое другое легко использовать.

@artbear artbear self-assigned this Nov 9, 2017
@artbear artbear added this to the 2.3.0 milestone Nov 9, 2017
@khorevaa
Copy link
Member Author

khorevaa commented Nov 9, 2017

Вообще тут немного для другого используется... Хотя можно было прикрутить.. Но да ладно....

Copy link
Member

@artbear artbear left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю упростить код, а не переусложнять его

@@ -36,7 +38,17 @@

Функция ПрочитатьТестовыеНастройки()
ФайлНастроек = КаталогFixtures() + "/config.xml";
ЧтениеКонфига = Новый ЧтениеКонфига();
ЧтениеКонфига = Новый ЧтениеКонфигаXMLПакетнойСинхронизации();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У кода

ЧтениеКонфига = Новый ЧтениеКонфигаXMLПакетнойСинхронизации();
ЧтениеКонфига.СоответствиеКлючамИПараметра = Контроллер.СоответствиеКлючамИПараметра();

куча проблем:

  • введение лишней публичной переменной, которая не особо и нужна
  • нарушение инкапсуляции класса и т.п.

Предлагаю сделать проще на базе конструктора ПриСозданииОбъекта(Соответствие)

ЧтениеКонфига = Новый ЧтениеКонфигаXMLПакетнойСинхронизации(Контроллер.СоответствиеКлючамИПараметра());

и такое же исправление для ЧтениеКонфигаJSONПакетнойСинхронизации

Процедура ПрочитатьНастройкиИзФайлаXML(Знач ФайлНастроек)

Конфиг = Новый ЧтениеКонфигаXMLПакетнойСинхронизации;
Конфиг.СоответствиеКлючамИПараметра = СоответствиеКлючамИПараметра();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И здесь код упростится

Процедура ПрочитатьНастройкиИзФайлаJSON(Знач ФайлНастроек)

Конфиг = Новый ЧтениеКонфигаJSONПакетнойСинхронизации;
Конфиг.СоответствиеКлючамИПараметра = СоответствиеКлючамИПараметра();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И здесь код упростится

Copy link
Member

@artbear artbear left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@khorevaa Я выпустил релиз 1.0.0 пакета json с пропуском комментариев

  • Исправь в PR, плиз, зависимость гитсинка от версии 1.0.0 json
  • убери код по вырезке комментариев

@khorevaa
Copy link
Member Author

Все сделал, сэр.!! @artbear

@nixel2007
Copy link
Member

Если переходите на конструкторы классов, надо и версию движка повысить. Они появились только в 1.0.17

Copy link
Member

@artbear artbear left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Остались совсем мелкие замечания

СоответствиеКлючамИПараметра.Вставить("auto-set-tags", "АвтоматическаяУстановкаТэговПоВерсиям");
СоответствиеКлючамИПараметра.Вставить("process-fatform-modules", "ПереименовыватьФайлМодуляОбычнойФормы");

Возврат СоответствиеКлючамИПараметра;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше возврать ФиксированноеСоответствие, так будет гарантия, что никто случайно не поменяет коллекцию

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да поменяю..

Утверждения.ПроверитьРавенство("каталог2", мНастройки.Репозитарии[1].КаталогХранилища1С);
Утверждения.ПроверитьРавенство(мНастройки.ПутьGit, мНастройки.Репозитарии[1].ПутьGit);
Утверждения.ПроверитьРавенство(мНастройки.ПутьКПлатформе83, мНастройки.Репозитарии[1].ПутьКПлатформе83);
Утверждения.ПроверитьРавенство("server.com", мНастройки.Репозитарии[1].ДоменПочтыДляGit);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь будешь менять?

@artbear
Copy link
Member

artbear commented Nov 13, 2017

Не прошли 2 теста http://build.oscript.io/job/oscript-library/job/gitsync/job/PR-95/7/console
Искать в логе по

Тестов пройдено: 23 
  
Тестов не пройдено: 2 
 * Тест_ДолженПрочитатьФайлНастроекJSON : <c:\JenkinsOS\workspace\cript-library_gitsync_PR-95-C5NDOESOMYS37JCIRYHHNAO3G34QENYZLYI4PLESTWSL6XI6KHSA\tests\multi-controller-xml.os> 
 * Тест_ДолженПроверитьЧтоВызванОбработчикСинхронизацииJSON : <c:\JenkinsOS\workspace\cript-library_gitsync_PR-95-C5NDOESOMYS37JCIRYHHNAO3G34QENYZLYI4PLESTWSL6XI6KHSA\tests\multi-controller-xml.os> 

@khorevaa
Copy link
Member Author

Тест №18: Тест_ДолженПрочитатьФайлНастроекJSON


ОШИБКА: Тест: <Тест_ДолженПрочитатьФайлНастроекJSON>

Файл: <c:\JenkinsOS\workspace\cript-library_gitsync_PR-95-C5NDOESOMYS37JCIRYHHNAO3G34QENYZLYI4PLESTWSL6XI6KHSA\tests\multi-controller-xml.os>

Сообщение: {Модуль C:\Program Files (x86)\OneScript\lib\json\src\json.os / Ошибка в строке: 373 / Свойство объекта не обнаружено (LF)}

Пока СтрНайти( ЗначениеБезКомментариев, Символы.LF + Символы.LF ) > 0 Цикл


---------------------------------------------------------


Тест №19: Тест_ДолженПроверитьЧтоВызванОбработчикСинхронизацииJSON


ОШИБКА: Тест: <Тест_ДолженПроверитьЧтоВызванОбработчикСинхронизацииJSON>

Файл: <c:\JenkinsOS\workspace\cript-library_gitsync_PR-95-C5NDOESOMYS37JCIRYHHNAO3G34QENYZLYI4PLESTWSL6XI6KHSA\tests\multi-controller-xml.os>

Сообщение: {Модуль C:\Program Files (x86)\OneScript\lib\json\src\json.os / Ошибка в строке: 373 / Свойство объекта не обнаружено (LF)}

Пока СтрНайти( ЗначениеБезКомментариев, Символы.LF + Символы.LF ) > 0 Цикл 

ошибка в пакете json. У меня локально все проходит

@nixel2007
Copy link
Member

@khorevaa LF вроде бы в какой-то из версий 1.0.17 чинили. У тебя последний stable семнашки?

@khorevaa
Copy link
Member Author

khorevaa commented Nov 14, 2017

@nixel2007 у меня ночник.. - месячной давности

@khorevaa
Copy link
Member Author

@artbear Проверку теста решил не править. Остальных замечаний вроде нет.

@artbear artbear removed this from the 2.3.0 milestone Nov 17, 2017
@artbear artbear added this to the 2.4.0 milestone Nov 17, 2017
@khorevaa
Copy link
Member Author

@artbear - Хочется дальше двигаться.. Что с этип PR?

@artbear
Copy link
Member

artbear commented Nov 23, 2017

@khorevaa LF вроде бы в какой-то из версий 1.0.17 чинили. У тебя последний stable семнашки?

@khorevaa По поводу Символы.LF - у тебя что-то не так с версией

только что проверил на 1.0.19
запустил простейший скрипт с a = Символы.LF + Символы.LF;
ошибки нет

@khorevaa
Copy link
Member Author

@artbear Так у меня все хорошо падает на тест сервер у Вас когда ПР проходит тестирование.

@artbear
Copy link
Member

artbear commented Nov 23, 2017

Точно, там 17 версия.

А обновлять нельзя, т.к в новых версиях есть проблема движка при прогоне фич через 1bdd :(
И если обновить, то большая часть билдов разных библиотек упадет :(

/cc @dmpas @EvilBeaver

@artbear artbear merged commit f58d2d7 into oscript-library:develop Nov 23, 2017
@artbear
Copy link
Member

artbear commented Nov 25, 2017

выпустил новую версию json для работы на нашем CI

@khorevaa khorevaa deleted the json-config branch May 29, 2018 07:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants