def remove_dirs(self, root): """Удаление элементов, у которых размер не совпадает с фильтром""" for row in reversed(range(root.rowCount())): child = root.child(row, 1) filter_size = self.ui.line_edit_filter.text() if not check_filter_size_eval(filter_size, directory_sizes.get_bytes(child.data(Qt.UserRole + 1))): root.removeRow(child.row()) else: self.remove_dirs(root.child(row, 0))
def check_filter_size_eval(pattern, size): """Функция выполнит проверку по шаблону pattern и вернет результат: True или False. :type pattern: шаблон фильтра размера, например: '{size} >= %1GB% and {size} <= %3GB%' :type size: размер в байтах, который будет подставляться в {size} pattern. Целое число. """ # logger.debug('Pattern: %s.', pattern) # logger.debug('Size: %s.', size) for match in set(re.findall('%.+?%', pattern)): byte_size = directory_sizes.get_bytes(match[1:-1]) pattern = pattern.replace(match, str(byte_size)) source = pattern.format(size=size) # logger.debug('After replace. Source eval: %s.', source) result = eval(source) # logger.debug('Result eval: %s.', result) return result