commit 15abceb5e3b9dd5b40ab73a99e501858d1cf3b2b Author: Support Date: Fri Sep 20 21:10:15 2024 +0000 Arweave Manifest Update: Linux & Python Scripts First you're putting your wallet and folders in the Linux script. Then with all the files in the folder you marked in the Linux script, you're running the Linux script which calls upon the python. In the example, it's in the folder "zenaku". But you can change it to a different folder, just put a "/" at the end (no quotes) diff --git a/script.sh b/script.sh new file mode 100644 index 0000000..f2b0bad --- /dev/null +++ b/script.sh @@ -0,0 +1,8 @@ +for i in *; do ardrive upload-file --local-path "$i" --parent-folder-id "000000-insert-your-folder-000000" -w ~/path/to/your/wallet.json; done > rawupload1.txt + +python3 path/to/python/simple.py rawupload1.txt zenaku/ output.json + +ardrive upload-file --content-type "application/x.arweave-manifest+json" --local-path output-html.json --parent-folder-id "000000-insert-your-folder-000000" -w ~/path/to/your/wallet > output2.txt + +ardrive upload-file --content-type "application/x.arweave-manifest+json" --local-path output-xml.json --parent-folder-id "000000-insert-your-folder-000000" -w ~/path/to/your/wallet > output3.txt + diff --git a/simple.py b/simple.py new file mode 100644 index 0000000..491e6d6 --- /dev/null +++ b/simple.py @@ -0,0 +1,142 @@ +import re +import json +import shutil +import argparse +import os + +def main(): + parser = argparse.ArgumentParser(description='Procesar archivos JSON a partir de un archivo de entrada.') + parser.add_argument('input_file', type=str, help='Ruta al archivo de entrada (.txt)') + parser.add_argument('folder', type=str, help='Nombre del directorio para eliminar del URI') + parser.add_argument('output_file', type=str, help='Nombre del archivo de salida (.json)') + + args = parser.parse_args() + + input_file = args.input_file + folder = args.folder + output_file = args.output_file + + if step_1(input_file): + new_data = step_2(input_file, folder) + update_json(output_file, new_data) + create_output_copies(output_file) # Crear copias del archivo JSON + +def step_1(file_path): + return file_path.endswith('.txt') or print("Archive is not txt, please contact support.") + +def folder_guide(source_uri, folder): + return source_uri.split(folder, 1)[1] if folder in source_uri else source_uri + +def step_2(file_path, folder): + with open(file_path, 'r') as file: + content = file.read() + + pattern = r'\{[^{}]*"sourceUri"[^{}]*"dataTxId"[^{}]*|[^{}]*"dataTxId"[^{}]*"sourceUri"[^{}]*\}' + data = {} + + for match in re.findall(pattern, content): + source_uri_match = re.search(r'"sourceUri"\s*:\s*"([^"]*)"', match) + data_tx_id_match = re.search(r'"dataTxId"\s*:\s*"([^"]*)"', match) + if source_uri_match and data_tx_id_match: + source_uri = folder_guide(source_uri_match.group(1), folder) + data[source_uri] = {'id': data_tx_id_match.group(1)} + + print(f'Number of valid pairs found: {len(data)}') + return data + +def update_json(output_file, new_data): + try: + with open(output_file, 'r') as file: + existing_data = json.load(file) + print(f'Successfully loaded {output_file}') + except FileNotFoundError: + print(f'File {output_file} not found. Creating a new one.') + existing_data = { + "manifest": "arweave/paths", + "version": "0.1.0", + "index": { + "path": "index.html" + }, + "paths": {} + } + except json.JSONDecodeError: + print(f'Error in decoding JSON from {output_file}. Creating a new one.') + existing_data = { + "manifest": "arweave/paths", + "version": "0.1.0", + "index": { + "path": "index.html" + }, + "paths": {} + } + + index_keys = ['index.html', 'index.xml'] + + for key in index_keys: + if key in new_data: + existing_data['paths'][key] = new_data.pop(key) + + existing_data['paths'].update(new_data) + + with open(output_file, 'w') as file: + json.dump(existing_data, file, indent=4) + + print(f'Updated JSON file: {output_file}') + +def create_output_copies(output_file): + base_name, ext = os.path.splitext(output_file) + html_copy = f'{base_name}-html{ext}' + xml_copy = f'{base_name}-xml{ext}' + + try: + shutil.copy(output_file, html_copy) + print(f'Successfully copied {output_file} to {html_copy}') + except FileNotFoundError: + print(f'Error: {output_file} not found. Could not copy to {html_copy}.') + return + except Exception as e: + print(f'Error copying {output_file} to {html_copy}: {e}') + return + + try: + shutil.copy(output_file, xml_copy) + print(f'Successfully copied {output_file} to {xml_copy}') + except FileNotFoundError: + print(f'Error: {output_file} not found. Could not copy to {xml_copy}.') + return + except Exception as e: + print(f'Error copying {output_file} to {xml_copy}: {e}') + return + + try: + with open(xml_copy, 'r') as file: + data = json.load(file) + print(f'Successfully loaded {xml_copy} for modification.') + except FileNotFoundError: + print(f'Error: {xml_copy} not found. Could not modify.') + return + except json.JSONDecodeError: + print(f'Error: {xml_copy} contains invalid JSON. Could not modify.') + return + except Exception as e: + print(f'Error reading {xml_copy}: {e}') + return + + if 'index' in data and 'path' in data['index']: + if data['index']['path'] == 'index.html': + data['index']['path'] = 'index.xml' + print(f'Successfully changed "index.html" to "index.xml" in {xml_copy}.') + else: + print(f'No changes made to "index.html" in {xml_copy}. The path was not "index.html".') + else: + print(f'No "index" or "path" field found in {xml_copy}. No changes made.') + + try: + with open(xml_copy, 'w') as file: + json.dump(data, file, indent=4) + print(f'Successfully saved changes to {xml_copy}.') + except Exception as e: + print(f'Error saving changes to {xml_copy}: {e}') + +if __name__ == "__main__": + main() \ No newline at end of file