Я хочу добавить правило, которое проверяет
наличие файла folder.jpg в
каждый каталог, но добавить это будет
сделать код значительно более грязным
в его текущем состоянии ..
Это не выглядит плохо. На самом деле ваш текущий код делает это очень хорошо, и Свен также упомянул хороший способ сделать это:
- Получить список всех файлов
- Проверить наличие "обязательных" файлов
Вы бы просто добавили в свой словарь список необходимых файлов:
checker = {
...
'required': ['file', 'list', 'for_required']
}
Насколько существует лучший / расширяемый способ сделать это? Я не совсем уверен. Я мог только придумать, как можно отбросить «множественные» регулярные выражения и построить идею Свена об использовании разделителя. Поэтому моей стратегией было бы определение словаря следующим образом (и я извиняюсь, я не знаю синтаксис Python, и я немного ленив, чтобы найти его, но это должно иметь смысл. ):
check_dict = {
'delim' : /\-/,
'parts' : [ 'Show Name', 'Episode Name', 'Episode Number' ],
'patterns' : [/valid name/, /valid episode name/, /valid number/ ],
'required' : ['list', 'of', 'files'],
'ignored' : ['.*', 'hidden.txt'],
'start_dir': '/path/to/dir/to/test/'
}
- Разделить имя файла на основе разделителя.
- Проверьте каждую из частей.
Поскольку это упорядоченный список, вы можете определить, какие части отсутствуют, и если сечение не соответствует ни одному шаблону, оно искажено. Здесь parts
и patterns
имеют соотношение 1 к 1. Два массива вместо словаря обеспечивают порядок.
Проигнорированные и требуемые файлы могут быть перечислены. Файлы .
и ..
, вероятно, следует игнорировать автоматически. Пользователь должен иметь возможность вводить «глобусы», которые могут быть расширены. Я думаю здесь о svn:ignore
свойствах, но для перечисления файлов естественно использовать globbing.
Здесь start_dir
будет по умолчанию для текущего каталога, но если вы хотите, чтобы один файл запускал автоматическое тестирование группы каталогов, это было бы полезно.
Настоящий свободный конец здесь - это шаблон пути и в том же духе, какой путь требуется для «допустимых файлов». Я действительно не мог придумать твердую идею, не написав одно большое регулярное выражение и не взяв из него группы ... для создания шаблона. Это было похоже на написание грамматики языка TextMate. Но это начинает сбиваться с простоты использования. Реальная проблема заключалась в том, что шаблон пути не состоял из parts
, что имеет смысл, но добавляет сложности.
Эта стратегия созвучна тому, о чем вы думали?