-
-
Notifications
You must be signed in to change notification settings - Fork 60
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
UGENE-5291 WD can't work with files with ; in name #1588
base: master
Are you sure you want to change the base?
Conversation
Я бы попробовала корректно поддержать файлы с допустимыми символами. Нужно сделать 2 модификации в этих методах: энкодить и декодить "плохие" имена файлов по примеру того как это делается в веб: https://doc.qt.io/qt-6/qurl.html#toEncoded. Можно выбрать любой свой вид энкодинга (энкодить только ';' ), так чтобы при этом максимально сохранялось визуальное представление файла в закодированном виде. |
Решение с энкодингом не универсально.
|
Если такой файл может быть в файловой системе, то UGENE должен уметь его открывать. Давай решать задачу в этом контексте. |
У меня есть только такой вариант решения: Если честно мне не сильно нравится эта идея, не нравится этот "элемент угадывания", мне кажется программа так не должна работать. Вариант с информированием пользователя об ограничении мне больше нравится. Ну или предложи свое решение. |
Решение простое: изучить и выбрать какой вид encoding в данном случае будет наиболее приемлем. Кодирование/декодирование URL- это именно то что используют как командные шелы в операционных системах, так и строки с параметрами в интернет. Примеры:
Так же и в UGENE это проблема может быть решена во всех местах где мы сериализируем/парсим список имен файлов. К самой файловой системе при этом обращаться не нужно - список имен файлов должен однозначно кодироваться и декодироваться без внешнего контекста. Проанализируй и выбери наиболее приемлемый нам вариант решения. Например:
|
Заэскейпленые не воспринимает.
Тут в списке все файлы присутствуют. Если что то, скриншот выше это месседж бокса с ошибкой - это я просто через File->Open попробовал открыть файл с проблемным именем. Это я к тому что если делать поддержку точки с запятой в путях, то это надо будет по всему приложению в итоге делать, а не только в дизайнере. |
Попробовал сделать с экранированием всей строки заключением в двойные кавычки. Пока я все это пытался делать обнаружил что датасеты должны нормально работать с путями с ";" так как там файлы всегда передаются для обработки по одному и неопределенности не возникает.
|
А что именно будет в предупреждении? Можно ли при сохранении в UWL экранировать и переводы строк и кавычки по примеру URL encoding? files: urls("url1", "url2"...) где url в кавычках уже безопасный (encoded) |
В предупреждении будет написано "путь до файла ';', такие пути не поддерживаются этим элементом, переименуйте и/или положите файл в другую папку.".
Думаю, если делать "по-красоте" то для данных из URLLineEdit обертку как для dataset и показывать пользователю в воркере пути как он их ввел - с ";" в путях, а внутри юджина гонять эти данные в заэнкоженном виде. Так же и в схему писать в заэнкоженном виде, а при загрузке и показе схемы пользователю приводить к "человеческому" виду. Я бы ограничился с вариантом с проверкой работоспособности датасетов и предупреждением в URLLineEdit. Мне кажется поддержка такого вида имен файлов не стоит уже потраченного времени на эту задачу. |
В качестве временного/быстрого решения можно сделать так, чтобы UGENE вообще не давал записывать/запускать то, в результате чего он не уверен. Можно ли вместо "предупреждения" сделать блокировку на запуск? |
То есть если мы идем по пути отказа от полноценного фикса, получается что мы не можем отличить ситуацию где ; это символ в имени файла или ; это символ разделитель разных имен. Если мы не можем различить - не нужно ни warning, ни ошибки - мы должны работать с ; как с разделителем. Если же мы знаем, что ; каким-то образом пришел в элемент как символ в имени файла - тут мы должны отказать в исполнении/записи этого имени, так как при чтении мы будем трактовать его как разделитель. Правильно? |
Сейчас работает так - во время валидации когда проверяется что все входные пути существуют ; интерпретируется как разделитель. Появляются ошибки валидации и все прерывается, предлагаешь убрать эту проверку в валидаторе схемы?
Ну не совсем, я предлагал что если пользователь ввел в URLLineEdit путь с ; то не принимать его ввод и выдавать MessageBox с просьбой переименовать/поменять путь. Так же мне тут еще идея пришла, сделать класс URLLineEdit для мест где ожидается ввод одного пути и для мест где вводится список. Тогда, если из URLLineEdit в котором ожидается ввод одного пути пришел url то не пытаться парсить его как список файлов и тогда будет однозначность насчет данных пришедших из него. А проверку и предупреждение делать только в тех где список вводим. |
Мне было бы интересно сделать поддержку multiple URLS в UWL таким образом, что не возникает неопределенности. |
Поменял проверку путей для датасетов, так как там всегда единственный url приходит для проверки. |
const QStringList urlsList = urls.split(';'); | ||
for (const QString& url : qAsConst(urlsList)) { | ||
CHECK_EXT_CONTINUE(validateInputFile(url, notificationList)); | ||
res = false; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Есть ли смысл тут продолжать проверять файлы после первой ошибки? Ошибок может быть тысячи?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тоже думал так сделать, но оставил старое поведение.
Если пользователь получит ошибку на пачку файлов он их пачкой и исправит, а не по одной будет. Можно ввести лимит на количество ошибок, например. IDE так же делают. Что думаешь?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нужно выдавать только одну ошибку. Если хочешь можешь в ее текст включить первые N файлов
Исправление устраивает, пишу тесты? |
Да |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Меняю статус requested review -> request changes. Причина: часть комментариев не исправлена
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну нужно говорить в сообщении об ошибке о символе ;
Вероятность имено этой исчезающе мала по сравнению с обычной: файл не найден по каким-то другим причинам. В этом случае мы только запутаем пользователя своей рекомендацией. Можешь добавить это в доку если хочешь и сослаться из ошибки на доку.
Достаточно показать пользователю имя файла как мы его понимаем - дальше он поймет сам что не так
Хорошо, поменял в случае ручного ввода. Если пользователь выбирал через гуи оставил текущее сообщение - тут вполне однозначно что выбран файл с плохим путем\именем. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тест должен быть без workarounds и извинений: если иначе не работает, надо исправлять или просто писать тест иначе (так как текущие проблемы в тесте не относятся к тестируемуму исправлению)
Если мы оставили 2 варианта поведения: c и без ручнного ввода: можно ли протестировать оба варианта?
Не понял что не так с тестом, мы тут тестируем и ручной ввод, и ввод через gui и то что в датасетах можно любой путь задать. |
Перекликивание говорит о баге в WD - либо элемент в фокусе и на него не нужно кликать чтобы увидеть его детали, либо не в фокусе - тогда достаточно кликнуть только на него. Кликать на другой элемент и потом возвращаться к текущему - это workaround для бага.
Не вижу где тестируется текст нового сообщения об ошибке |
Так устроит? |
Замечаний нет, жду зеленые тесты |
На маке несвязанный тест упал, считаем что успех? |
Устроит такое решение?
Если да дополню тестом и трансляциями.