zmactep / ig-pipeline

2 stars 0 forks source link

Манифесты #29

Closed zmactep closed 10 years ago

zmactep commented 10 years ago

Требуется внедрить манифесты (см #21) как можно скорее, а то сейчас от пары запусков storage похож на помойку.

В случае же наличия манифеста можно будет добавлять в storage только "полезные" outputs, игнорируя все прочее.

Feodorov commented 10 years ago

Идея отличная. Может, введем в Storage не плоский список, как сейчас, а древовидную структуру - группировка по группе, а затем по run? Нажимаешь на плюсик - список разворачивается. И отдельный переключатель "показать все/только полезное из манифеста". Можно еше отдельную кнопку flat view, которая развернет все подпапки/подгруппы в выбранной группе в плоский список как сейчас.

Feodorov commented 10 years ago

О! И туда же кнопку "просканировать директорию". Нажимаешь на нее - вводишь путь - запускается scan_dir.py. Тебе показывается список найденных файлов, в котором ты удаляешь лишнее, затем указываешь группу и run куда добавить. Если группы нет - предлагается создать новую.

zmactep commented 10 years ago

Да, это классно, мы это уже обсуждали как-то. И сейчас необходимость реально есть.

Feodorov commented 10 years ago

Получилось вот такое дерево: 2013-11-16 11 03 29

Feodorov commented 10 years ago

А еще самому себе на заметку - если комментарий на русском - то все падает :( Это потому что в MySQL неправильный collation, так как джанго выдает ошибку при попытке сохранить данные в таблицу.

zmactep commented 10 years ago

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

Feodorov commented 10 years ago

Вот итог работы над формой в /storage/. Это изначальный вид страницы при первой загрузке: 2013-11-16 21 11 17 Затем, если пораскрывать списки, получается вот так: 2013-11-16 21 11 38 Группы помечены бледно-зеленой шапкой, а run-ы - желтой, чтобы визуально их отличать. Фильтрацию файлов по манифесту я не делал (чекбокс "показать только нужное"). Если честно, при такой группировке даже не знаю, нужна ли фильтрация? Изначально файлы глаза не мозолят, и скрываются внутри run-а, не занимая места.

Feodorov commented 10 years ago

Кнопка "Развернуть все", как ни странно, разворачивает все: 2013-11-16 21 15 24

Feodorov commented 10 years ago

При нажатии на кнопку "Добавить файл" открывается вот такая форма: 2013-11-16 21 16 59 1) Я решил не добавлять кнопку scan_dir, а сделал древовидное меню внизу, через которое нужно выбрать файл. Папки разворачиваются. При клике на файл путь автоматом добавляется в последнюю строку формы, а название файла как ID добавляется в первую строку. 2) Прикрутил jquery плагин для валидации форм на стороне клиента. В аттрибутах input'ов прописывается тип валидации (длина, дата, регулярка и т.п. Вариантов много.), и, соответственно, форма не отправляется пока все поля не пройдут валидацию. 3) Дерево папок внизу может быть любым, который вернет функция dir_list() в igstorage/views.py. Функция возвращает на клиент html список (ul tag), поэтому, потенциально, мы можем передать любой список файлов, а не только реальную файловую систему. Например, можно отдавать список файлов на ftp сервере. Корневая директория прописыватся в igcad/settings.py в переменную STORAGE_ROOT. Сейчас там проставлено значение '/opt/ig-pipeline/'

Feodorov commented 10 years ago

На скриншоте подсвечен NUC4.4.txt вместо DH.fasta не потому, что глюк, а потому что строки подсвечиваются onmouseover

Feodorov commented 10 years ago

Предлагаю ограничиться простым манифестом:

{
    "output": [
        {
            "name": "description.txt",
            "type": "text",
            "pipelined": false 
        },
        {
            "name": "output.fasta",
            "type": "fasta",
            "pipelined": true 
        },
    ]
}

Нужно только условиться, что у наших утилит будут стандартные имена выходных файлов (или чтобы у них было значение по-умолчанию, которое переопределяется доп. параметром). Хранить будем в базе: ключ - путь к тулу от tools_root, значение - json как на примере выше. Я буду брать файлы с pipeline=true, и, ориентируясь на тип, подставлять в соответствующий список входных файлов следующего тула.

zmactep commented 10 years ago

Костя, в тебе умер гениальный дизайнер! Достанет программировать, задумайся! :)

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

Feodorov commented 10 years ago

Предлагаю закрыть. Манифесты есть и работают.