More smoothness and persistence
This commit is contained in:
1 parent
f924016478
commit
aeb9173825
10 files changed
+2113
-1776
No files matched your search
@@ -0,0 +1,87 @@
|
||||
import pathlib
|
||||
|
||||
def is_item_ignored(item_name, ignored_directories_list, ignored_extensions_list):
|
||||
if item_name in ignored_directories_list:
|
||||
return True
|
||||
for extension_string in ignored_extensions_list:
|
||||
if item_name.endswith(extension_string):
|
||||
return True
|
||||
return False
|
||||
|
||||
def format_tree_line(entry_name, prefix_string, is_last_element):
|
||||
connector_string = '└── ' if is_last_element else '├── '
|
||||
return prefix_string + connector_string + entry_name
|
||||
|
||||
def format_file_section(relative_path_string, file_content_string):
|
||||
header_string = '\n--- FILE START: ' + relative_path_string + ' ---\n'
|
||||
footer_string = '\n--- FILE END: ' + relative_path_string + ' ---\n'
|
||||
return header_string + file_content_string + footer_string
|
||||
|
||||
def build_final_output_string(tree_lines_list, code_contents_list):
|
||||
tree_string = '\n'.join(tree_lines_list)
|
||||
code_string = ''.join(code_contents_list)
|
||||
return 'PROJECT STRUCTURE:\n' + tree_string + '\n\n' + code_string
|
||||
|
||||
def collect_file_system_nodes(root_path, ignored_directories_list, ignored_extensions_list):
|
||||
valid_nodes_list = []
|
||||
try:
|
||||
directory_items_list = list(root_path.iterdir())
|
||||
except PermissionError:
|
||||
return valid_nodes_list
|
||||
|
||||
for item_path in directory_items_list:
|
||||
if not is_item_ignored(item_path.name, ignored_directories_list, ignored_extensions_list):
|
||||
valid_nodes_list.append(item_path)
|
||||
|
||||
valid_nodes_list.sort(key=lambda path_object: (not path_object.is_dir(), path_object.name.lower()))
|
||||
return valid_nodes_list
|
||||
|
||||
def read_file_content_safely(file_path_object):
|
||||
try:
|
||||
return file_path_object.read_text(encoding='utf-8')
|
||||
except UnicodeDecodeError:
|
||||
return '[BINARY_OR_UNSUPPORTED_ENCODING]'
|
||||
except PermissionError:
|
||||
return '[PERMISSION_DENIED]'
|
||||
|
||||
def write_output_file(output_file_path, content_string):
|
||||
output_file_path.write_text(content_string, encoding='utf-8')
|
||||
|
||||
def process_directory_recursively(current_path, base_directory_path, prefix_string, ignored_directories_list, ignored_extensions_list, tree_lines_list, code_contents_list):
|
||||
nodes_list = collect_file_system_nodes(current_path, ignored_directories_list, ignored_extensions_list)
|
||||
total_nodes_count = len(nodes_list)
|
||||
|
||||
for index_number, node_path in enumerate(nodes_list):
|
||||
is_last_node = index_number == total_nodes_count - 1
|
||||
formatted_tree_line = format_tree_line(node_path.name, prefix_string, is_last_node)
|
||||
tree_lines_list.append(formatted_tree_line)
|
||||
|
||||
if node_path.is_dir():
|
||||
new_prefix_string = prefix_string + (' ' if is_last_node else '│ ')
|
||||
process_directory_recursively(node_path, base_directory_path, new_prefix_string, ignored_directories_list, ignored_extensions_list, tree_lines_list, code_contents_list)
|
||||
else:
|
||||
relative_file_path_string = str(node_path.relative_to(base_directory_path))
|
||||
file_content_string = read_file_content_safely(node_path)
|
||||
formatted_file_section = format_file_section(relative_file_path_string, file_content_string)
|
||||
code_contents_list.append(formatted_file_section)
|
||||
|
||||
def execute_bundler_script():
|
||||
target_output_file_name_string = 'output_fuer_ki.txt'
|
||||
ignored_directories_list = ['.git', '__pycache__', 'venv', 'env', '.venv', 'node_modules', '.idea', '.vscode', 'instance']
|
||||
ignored_extensions_list = ['.pyc', '.sqlite', '.db', '.png', '.jpg', '.jpeg', '.svg', '.ico', '.exe', '.pdf', '.zip', '.tar.gz', '.mp3', '.mp4', target_output_file_name_string]
|
||||
|
||||
current_working_directory_path = pathlib.Path.cwd()
|
||||
output_file_path = current_working_directory_path / target_output_file_name_string
|
||||
|
||||
tree_lines_list = [current_working_directory_path.name]
|
||||
code_contents_list = []
|
||||
|
||||
process_directory_recursively(current_working_directory_path, current_working_directory_path, '', ignored_directories_list, ignored_extensions_list, tree_lines_list, code_contents_list)
|
||||
|
||||
final_output_string = build_final_output_string(tree_lines_list, code_contents_list)
|
||||
write_output_file(output_file_path, final_output_string)
|
||||
|
||||
print('Erfolg! Die Datei ' + target_output_file_name_string + ' wurde generiert.')
|
||||
|
||||
if __name__ == '__main__':
|
||||
execute_bundler_script()
|
||||
Reference in new issue
Block a user