Итак, я прошел этап 1 оценки и перешел к этапу 2. На следующей неделе я почти ничего не делал, за исключением исследования кеширования и с нетерпением ждал, пока моя стипендия будет переведена на мой счет.

Итак, я начал обсуждать кеширование со своим наставником в конце недели 1. Изначально мы решили использовать linecache из стандартной библиотеки Python, чтобы заменить наш тупой подход, заключающийся в использовании простого старого open для загрузки файла.
Я сделал несколько начальных шагов. тестирование производительности двух разных библиотек кэширования: linecache и сторонней библиотеки под названием filecache. Оказалось, что linecache намного быстрее загружал файлы, хранящиеся в кеше, чем filecache, поскольку у filecache было много других дополнительных функций, которые нам не нужны. Поэтому мы решили использовать linecache.

Изменение планов
По мере того, как мы обсуждали кеширование, мой наставник Миша выразил озабоченность по поводу использования linecache. Одним из них был тот факт, что coala также поддерживает необработанные файлы, такие как изображения, и мы не могли преобразовать содержимое файла из кэша строк из-за UnicodeDecodeError, поскольку кеш строк хранил содержимое файла в форме списка. Итак, мой наставник и я решили, что нам, возможно, придется реализовать собственный кеш с нуля.

Вернемся к исходной точке
. Хотя я согласился написать собственный кеш, я просто не мог упустить из виду производительность, свидетелем которой я стал при тестировании обеих библиотек кеширования. linecache явно имел гораздо более высокую производительность, и я не был уверен, смогу ли я написать модуль кэширования так же быстро, если не быстрее, чем linecache
Мне как-то нужно было убедить Мишу использовать linecache, и для этого я решил взломать его . Единственное, что мне нужно было сделать, это изменить способ хранения содержимого файла в кеше. Я сделал это, изменив эти две линии.

Что за взлом?
Думаю, мне нужно подробнее рассказать о двухстрочном взломе. Итак, это то, что изначально сделал linecache. Он открыл файл как открытый текст, используя tokenize.open, который, в свою очередь, использует функцию builtins open, а затем оборачивает возвращаемое значение в класс IO.TextWrapper и возвращает его. Поэтому вместо использования tokenize.open я использовал простое старое открытое окно для загрузки файла в двоичном режиме и сохранения содержимого.
Бинарный режим - это исходная форма, в которой сохраняется содержимое, а затем объекты FileFactory манипулируют им. декодируется в строковый формат или передается медведю в виде списка строк.

Что дальше?
Я все еще борюсь с интеграцией FileFactory на моем локальном компьютере. Вместо 23 сейчас только 10 тестов терпят неудачу, но мне все еще не удается найти обходной путь для работы с диапазонами игнорирования, которые являются основной причиной неудачных тестов.
После объединения FileCache PR я будет работать над интеграцией и реализацией функции игнорирования каталогов для механизма кэширования.