Source code for mould.read

import io
import os
from binaryornot import check

from .gitignore import read_ignore, remove_ignores


[docs]def read_directory(project_directory): directory_entries = [] project_parent_directory = os.path.normpath( os.path.join(project_directory, os.pardir) ) ignore_path = os.path.join(project_directory, '.gitignore') ignore_list = [] if os.path.exists(ignore_path): ignore_list = read_ignore(read_file(ignore_path)) for root, dirs, files in os.walk(project_directory): directory_path = os.path.relpath(root, project_parent_directory) if '.git' in directory_path: dirs[:] = [] continue directory = { 'path': directory_path, 'files': [], } if ignore_list: files = remove_ignores(files, ignore_list) for file_path in files: if file_path.startswith('.'): continue file_path = os.path.join(root, file_path) content = read_file(file_path) is_binary = check.is_binary(file_path) directory['files'].append({ 'path': os.path.relpath(file_path, project_parent_directory), 'binary': is_binary, 'content': content, }) directory_entries.append(directory) return directory_entries
[docs]def read_file(file_path): is_binary = check.is_binary(file_path) mode = 'r{}'.format('b' if is_binary else 't') return io.open(file_path, mode=mode).read()