Remap: Refactor scripts #177
@ -1,44 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import hashlib
|
|
||||||
import json
|
|
||||||
|
|
||||||
json_file_path = "" # File Path to write JSON File to
|
|
||||||
folder_path = "" # Create Map for items in this folder recursively
|
|
||||||
|
|
||||||
|
|
||||||
def generate_checksum(filepath: str) -> str:
|
|
||||||
"""
|
|
||||||
Generate a checksum for a zip file
|
|
||||||
Arguments:
|
|
||||||
archive_path: String of the archive's file path
|
|
||||||
Returns:
|
|
||||||
sha256 checksum for the provided archive as string
|
|
||||||
"""
|
|
||||||
with open(filepath, "rb") as f:
|
|
||||||
digest = hashlib.file_digest(f, "sha256")
|
|
||||||
return digest.hexdigest()
|
|
||||||
|
|
||||||
|
|
||||||
def generate_json_for_directory(directory_path):
|
|
||||||
data = {}
|
|
||||||
|
|
||||||
for root, _, files in os.walk(directory_path):
|
|
||||||
for file_name in files:
|
|
||||||
file_path = os.path.join(root, file_name)
|
|
||||||
sha256 = generate_checksum(file_path)
|
|
||||||
|
|
||||||
if sha256 in data:
|
|
||||||
data[sha256]['old'].append(file_path)
|
|
||||||
else:
|
|
||||||
data[sha256] = {'old': [file_path], 'new': ''}
|
|
||||||
print(f"Making hash for {file_name}")
|
|
||||||
|
|
||||||
with open(json_file_path, 'w') as json_file:
|
|
||||||
json.dump(data, json_file, indent=4)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
directory_path = folder_path
|
|
||||||
generate_json_for_directory(directory_path)
|
|
@ -1,52 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import hashlib
|
|
||||||
import json
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
json_file_path = "" # File Path to read/write JSON File to
|
|
||||||
folder_path = "" # Create Map for items in this folder recursively
|
|
||||||
|
|
||||||
|
|
||||||
gold_file_map_json = Path(json_file_path)
|
|
||||||
gold_file_map_data = open(gold_file_map_json)
|
|
||||||
gold_file_map_dict = json.load(gold_file_map_data)
|
|
||||||
|
|
||||||
|
|
||||||
def generate_checksum(filepath: str) -> str:
|
|
||||||
"""
|
|
||||||
Generate a checksum for a zip file
|
|
||||||
Arguments:
|
|
||||||
archive_path: String of the archive's file path
|
|
||||||
Returns:
|
|
||||||
sha256 checksum for the provided archive as string
|
|
||||||
"""
|
|
||||||
with open(filepath, "rb") as f:
|
|
||||||
digest = hashlib.file_digest(f, "sha256")
|
|
||||||
return digest.hexdigest()
|
|
||||||
|
|
||||||
|
|
||||||
def generate_json_for_directory(directory_path):
|
|
||||||
data = gold_file_map_dict
|
|
||||||
|
|
||||||
for root, _, files in os.walk(directory_path):
|
|
||||||
for file_name in files:
|
|
||||||
file_path = os.path.join(root, file_name)
|
|
||||||
sha256 = generate_checksum(file_path)
|
|
||||||
|
|
||||||
if not data.get(sha256):
|
|
||||||
print(f"Cannot find file in dict {file_path}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
if sha256 in data:
|
|
||||||
data[sha256]['new'] = file_path
|
|
||||||
print(f"Updating path for {file_path}")
|
|
||||||
|
|
||||||
with open(json_file_path, 'w') as json_file:
|
|
||||||
json.dump(data, json_file, indent=4)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
directory_path = folder_path
|
|
||||||
generate_json_for_directory(directory_path)
|
|
186
scripts/remap/remap.py
Normal file
186
scripts/remap/remap.py
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import hashlib
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
JSON_FILE_KEY = 'json_file_path'
|
||||||
|
CRAWL_DIR_KEY = 'folder_path'
|
||||||
|
|
||||||
|
|
||||||
|
def get_current_dir():
|
||||||
|
return Path(__file__).parent.resolve()
|
||||||
|
|
||||||
|
|
||||||
|
def get_variable_file_path():
|
||||||
|
directory = get_current_dir()
|
||||||
|
return directory.joinpath(".env")
|
||||||
|
|
||||||
|
|
||||||
|
def get_variable_file():
|
||||||
|
env_file = get_variable_file_path()
|
||||||
|
if env_file.exists():
|
||||||
|
return env_file
|
||||||
|
|
||||||
|
|
||||||
|
def remove_variable_file():
|
||||||
|
env_file = get_variable_file_path()
|
||||||
|
Path.unlink(env_file)
|
||||||
|
|
||||||
|
|
||||||
|
def get_variables():
|
||||||
|
# TODO FIX Saving JSON because os.environ.get() doesn't work when running this as a script
|
||||||
|
var_file = Path(get_variable_file())
|
||||||
|
var_file_data = open(var_file)
|
||||||
|
var_file_dict = json.load(var_file_data)
|
||||||
|
|
||||||
|
return var_file_dict
|
||||||
|
|
||||||
|
|
||||||
|
def set_variable_file():
|
||||||
|
file_path = get_variable_file_path()
|
||||||
|
variables = {}
|
||||||
|
|
||||||
|
dir_to_map = get_dir_to_map()
|
||||||
|
json_file = get_josn_file_dir()
|
||||||
|
|
||||||
|
variables[JSON_FILE_KEY] = f"{json_file}"
|
||||||
|
variables[CRAWL_DIR_KEY] = f"{dir_to_map}"
|
||||||
|
|
||||||
|
with open(file_path, 'w') as json_file:
|
||||||
|
json.dump(variables, json_file, indent=4)
|
||||||
|
return variables
|
||||||
|
|
||||||
|
|
||||||
|
def get_dir_to_map() -> str:
|
||||||
|
dir_to_map = input("Please enter directory to map: ")
|
||||||
|
if not Path(dir_to_map).is_dir():
|
||||||
|
raise Exception('Provided path is not a directory')
|
||||||
|
return dir_to_map
|
||||||
|
|
||||||
|
|
||||||
|
def get_josn_file_dir() -> str:
|
||||||
|
json_dir = input("Please enter directory to store JSON map: ")
|
||||||
|
if not Path(json_dir).is_dir():
|
||||||
|
raise Exception('Provided path is not a directory')
|
||||||
|
return Path(json_dir).joinpath("dir_map.json").__str__()
|
||||||
|
|
||||||
|
|
||||||
|
def get_bbatch_script_dir() -> Path:
|
||||||
|
bbatch_dir = input("Please select directory to save bbatch script to: ")
|
||||||
|
if not Path(bbatch_dir).is_dir():
|
||||||
|
raise Exception('Provided path is not a directory')
|
||||||
|
return Path(bbatch_dir)
|
||||||
|
|
||||||
|
|
||||||
|
def save_bbatch_script():
|
||||||
|
directory = get_current_dir()
|
||||||
|
file = directory.joinpath('remap_blender_paths.py')
|
||||||
|
variables = get_variables()
|
||||||
|
new_file_dir = get_bbatch_script_dir()
|
||||||
|
|
||||||
|
with open(file, 'r', encoding='utf-8') as file:
|
||||||
|
data = file.readlines()
|
||||||
|
for line in data:
|
||||||
|
if line.startswith('json_file_path ='):
|
||||||
|
data[data.index(line)] = f'json_file_path = "{variables[JSON_FILE_KEY]}"'
|
||||||
|
mapped_dir_name = Path(variables[CRAWL_DIR_KEY]).name
|
||||||
|
new_file = new_file_dir.joinpath(f'remap_blender_paths_for_{mapped_dir_name}.py')
|
||||||
|
|
||||||
|
with open(new_file, 'w', encoding='utf-8') as file:
|
||||||
|
file.writelines(data)
|
||||||
|
print(f"bbatch script has been saved to {new_file.__str__()}")
|
||||||
|
print("This is your bbatch command")
|
||||||
|
print(
|
||||||
|
f'python -m bbatch {variables[CRAWL_DIR_KEY]} --script {new_file.__str__()} --nosave --recursive'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_checksum(filepath: str) -> str:
|
||||||
|
"""
|
||||||
|
Generate a checksum for a zip file
|
||||||
|
Arguments:
|
||||||
|
archive_path: String of the archive's file path
|
||||||
|
Returns:
|
||||||
|
sha256 checksum for the provided archive as string
|
||||||
|
"""
|
||||||
|
with open(filepath, "rb") as f:
|
||||||
|
digest = hashlib.file_digest(f, "sha256")
|
||||||
|
return digest.hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
def generate_json_for_directory(directory_path, json_file_path):
|
||||||
|
# TODO Centralize duplicate code from 'update_json_for_directory()'
|
||||||
|
data = {}
|
||||||
|
|
||||||
|
for root, _, files in os.walk(directory_path):
|
||||||
|
for file_name in files:
|
||||||
|
file_path = os.path.join(root, file_name)
|
||||||
|
sha256 = generate_checksum(file_path)
|
||||||
|
|
||||||
|
if sha256 in data:
|
||||||
|
data[sha256]['old'].append(file_path)
|
||||||
|
else:
|
||||||
|
data[sha256] = {'old': [file_path], 'new': ''}
|
||||||
|
print(f"Making hash for {file_name}")
|
||||||
|
|
||||||
|
with open(json_file_path, 'w') as json_file:
|
||||||
|
json.dump(data, json_file, indent=4)
|
||||||
|
|
||||||
|
|
||||||
|
def update_json_for_directory(directory_path, json_file_path):
|
||||||
|
file_map_json = Path(json_file_path)
|
||||||
|
file_map_data = open(file_map_json)
|
||||||
|
file_map_dict = json.load(file_map_data)
|
||||||
|
|
||||||
|
data = file_map_dict
|
||||||
|
|
||||||
|
for root, _, files in os.walk(directory_path):
|
||||||
|
for file_name in files:
|
||||||
|
file_path = os.path.join(root, file_name)
|
||||||
|
sha256 = generate_checksum(file_path)
|
||||||
|
|
||||||
|
if not data.get(sha256):
|
||||||
|
print(f"Cannot find file in dict {file_path}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
if sha256 in data:
|
||||||
|
data[sha256]['new'] = file_path
|
||||||
|
print(f"Updating path for {file_path}")
|
||||||
|
|
||||||
|
with open(json_file_path, 'w') as json_file:
|
||||||
|
json.dump(data, json_file, indent=4)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("Welcome to 'remap' a tool to assist in a re-organization of folders")
|
||||||
|
if not get_variable_file():
|
||||||
|
print("Starting new remap session")
|
||||||
|
variables = set_variable_file()
|
||||||
|
print(f"Generating map for directory '{variables[CRAWL_DIR_KEY]}'")
|
||||||
|
generate_json_for_directory(variables[CRAWL_DIR_KEY], variables[JSON_FILE_KEY])
|
||||||
|
print(
|
||||||
|
f"Directory '{variables[CRAWL_DIR_KEY]}' can now be re-organized before updating the map"
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
variables = get_variables()
|
||||||
|
answer = input(f"Update map for dir '{variables[CRAWL_DIR_KEY]}' yes or no: ")
|
||||||
|
answer_lw = answer.lower()
|
||||||
|
if answer_lw == "yes" or answer_lw == 'y':
|
||||||
|
print(f"Updating map for directory '{variables[CRAWL_DIR_KEY]}'")
|
||||||
|
update_json_for_directory(
|
||||||
|
variables[CRAWL_DIR_KEY], variables[JSON_FILE_KEY]
|
||||||
|
)
|
||||||
|
print('Map update is complete')
|
||||||
|
save_bbatch_script()
|
||||||
|
elif answer_lw == "no" or answer_lw == 'n':
|
||||||
|
remove_variable_file()
|
||||||
|
main()
|
||||||
|
else:
|
||||||
|
print("Please enter yes or no.")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user