Source code for mould.read
import io
import os
from binaryornot import check
[docs]def read_directory(project_directory):
directory_entries = []
exclude_directories = ['.git']
project_parent_directory = os.path.normpath(
os.path.join(project_directory, os.pardir)
)
for root, dirs, files in os.walk(project_directory):
directory = {
'path': os.path.relpath(root, project_parent_directory),
'files': [],
}
for exclude_dir in exclude_directories:
if exclude_dir in dirs:
dirs.remove(exclude_dir)
for file_path in files:
file_path = os.path.join(root, file_path)
is_binary, content = _read_file(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
def _read_file(file_path):
is_binary = check.is_binary(file_path)
mode = 'r{}'.format('b' if is_binary else 't')
return is_binary, io.open(file_path, mode=mode).read()