adding features
This commit is contained in:
Executable
+216
@@ -0,0 +1,216 @@
|
||||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Configuration
|
||||
BASE_URL = "http://localhost:8085/api"
|
||||
DEFAULT_USER_ID = "00000000-0000-0000-0000-000000000000"
|
||||
DEBUG = True
|
||||
|
||||
# Save the current directory
|
||||
CURRENT_DIR = os.getcwd()
|
||||
|
||||
def log(message):
|
||||
if DEBUG:
|
||||
print(f"[DEBUG] {message}")
|
||||
|
||||
def create_test_file():
|
||||
"""Create a test file and return its ID"""
|
||||
url = f"{BASE_URL}/files/upload"
|
||||
|
||||
# Create a unique filename
|
||||
filename = f"test-file-{int(time.time())}.txt"
|
||||
file_content = f"Test content created at {time.time()}"
|
||||
|
||||
files = {'file': (filename, file_content.encode(), 'text/plain')}
|
||||
log(f"Uploading file: {filename}")
|
||||
|
||||
response = requests.post(url, files=files)
|
||||
log(f"Upload response: {response.status_code}")
|
||||
|
||||
if response.status_code in [200, 201]:
|
||||
data = response.json()
|
||||
file_id = data.get('id')
|
||||
log(f"File created with ID: {file_id}")
|
||||
return file_id
|
||||
else:
|
||||
log(f"Failed to create file: {response.text}")
|
||||
return None
|
||||
|
||||
def delete_file_to_trash(file_id):
|
||||
"""Delete a file (should move to trash)"""
|
||||
url = f"{BASE_URL}/files/{file_id}"
|
||||
log(f"Deleting file: {file_id} (should move to trash)")
|
||||
|
||||
response = requests.delete(url)
|
||||
log(f"Delete response: {response.status_code}")
|
||||
|
||||
if response.status_code in [200, 201, 202, 204]:
|
||||
return True
|
||||
else:
|
||||
log(f"Failed to delete file: {response.text}")
|
||||
return False
|
||||
|
||||
def list_trash_items():
|
||||
"""List all items in the trash"""
|
||||
url = f"{BASE_URL}/trash?userId={DEFAULT_USER_ID}"
|
||||
log("Listing trash items")
|
||||
|
||||
response = requests.get(url)
|
||||
log(f"List trash response: {response.status_code}")
|
||||
|
||||
if response.status_code == 200:
|
||||
items = response.json()
|
||||
log(f"Found {len(items)} items in trash")
|
||||
for item in items:
|
||||
print(f" - {item['name']} (ID: {item['id']}, Original ID: {item['original_id']}, Type: {item['item_type']})")
|
||||
return items
|
||||
else:
|
||||
log(f"Failed to list trash items: {response.text}")
|
||||
return []
|
||||
|
||||
def check_trash_structure():
|
||||
"""Checks the structure of the trash directory"""
|
||||
print("\n--- Checking Trash Directory Structure ---")
|
||||
|
||||
# Check storage directory
|
||||
storage_dir = os.path.join(CURRENT_DIR, "storage")
|
||||
if os.path.exists(storage_dir):
|
||||
print(f"Storage directory exists: {storage_dir}")
|
||||
else:
|
||||
print(f"ERROR: Storage directory does not exist: {storage_dir}")
|
||||
return False
|
||||
|
||||
# Check trash directory
|
||||
trash_dir = os.path.join(storage_dir, ".trash")
|
||||
if os.path.exists(trash_dir):
|
||||
print(f"Trash directory exists: {trash_dir}")
|
||||
else:
|
||||
print(f"ERROR: Trash directory does not exist: {trash_dir}")
|
||||
return False
|
||||
|
||||
# Check trash files directory
|
||||
trash_files_dir = os.path.join(trash_dir, "files")
|
||||
if os.path.exists(trash_files_dir):
|
||||
print(f"Trash files directory exists: {trash_files_dir}")
|
||||
else:
|
||||
print(f"ERROR: Trash files directory does not exist: {trash_files_dir}")
|
||||
return False
|
||||
|
||||
# Check trash index file
|
||||
trash_index_path = os.path.join(trash_dir, "trash_index.json")
|
||||
if os.path.exists(trash_index_path):
|
||||
print(f"Trash index file exists: {trash_index_path}")
|
||||
try:
|
||||
with open(trash_index_path, 'r') as f:
|
||||
trash_index = json.load(f)
|
||||
print(f"Trash index contains {len(trash_index)} entries")
|
||||
except Exception as e:
|
||||
print(f"ERROR: Could not read trash index file: {e}")
|
||||
return False
|
||||
else:
|
||||
print(f"ERROR: Trash index file does not exist: {trash_index_path}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def check_file_in_trash_fs(file_id):
|
||||
"""Checks if a file exists in the trash directory filesystem"""
|
||||
print("\n--- Checking File In Trash Filesystem ---")
|
||||
|
||||
# Check if the file exists in the trash files directory
|
||||
trash_files_dir = os.path.join(CURRENT_DIR, "storage", ".trash", "files")
|
||||
if os.path.exists(os.path.join(trash_files_dir, file_id)):
|
||||
print(f"File found in trash filesystem: {file_id}")
|
||||
return True
|
||||
else:
|
||||
print(f"File NOT found in trash filesystem: {file_id}")
|
||||
|
||||
# List all files in the trash directory to help debugging
|
||||
print("\nFiles in trash directory:")
|
||||
try:
|
||||
files = os.listdir(trash_files_dir)
|
||||
if files:
|
||||
for f in files:
|
||||
print(f" - {f}")
|
||||
else:
|
||||
print(" (no files)")
|
||||
except Exception as e:
|
||||
print(f"Error listing trash directory: {e}")
|
||||
|
||||
return False
|
||||
|
||||
def dump_trash_index():
|
||||
"""Dumps the contents of the trash index file"""
|
||||
trash_index_path = os.path.join(CURRENT_DIR, "storage", ".trash", "trash_index.json")
|
||||
try:
|
||||
with open(trash_index_path, 'r') as f:
|
||||
trash_index = json.load(f)
|
||||
print("\n--- Trash Index Contents ---")
|
||||
print(json.dumps(trash_index, indent=2))
|
||||
except Exception as e:
|
||||
print(f"ERROR: Could not read trash index file: {e}")
|
||||
|
||||
def main():
|
||||
print("=== Trash Debug Tool ===")
|
||||
|
||||
# First check the trash directory structure
|
||||
if not check_trash_structure():
|
||||
print("FAILED: Trash directory structure is not correct")
|
||||
print("Run the check-trash-dirs.sh script to fix it")
|
||||
sys.exit(1)
|
||||
|
||||
# List current trash contents
|
||||
print("\n--- Current Trash Contents ---")
|
||||
list_trash_items()
|
||||
|
||||
# Create a test file
|
||||
print("\n1. Creating test file...")
|
||||
file_id = create_test_file()
|
||||
if not file_id:
|
||||
print("FAILED: Could not create test file")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Created file with ID: {file_id}")
|
||||
|
||||
# Delete the file (should move to trash)
|
||||
print("\n2. Deleting file (should move to trash)...")
|
||||
if not delete_file_to_trash(file_id):
|
||||
print("FAILED: Could not delete file")
|
||||
sys.exit(1)
|
||||
|
||||
print("\n3. Waiting 2 seconds for trash operation to complete...")
|
||||
time.sleep(2)
|
||||
|
||||
# Check if the file appears in trash
|
||||
print("\n4. Checking trash contents after deletion...")
|
||||
trash_items = list_trash_items()
|
||||
|
||||
file_in_trash = False
|
||||
for item in trash_items:
|
||||
if item.get('original_id') == file_id:
|
||||
file_in_trash = True
|
||||
break
|
||||
|
||||
# Check if the file physically exists in the trash directory
|
||||
file_in_trash_fs = check_file_in_trash_fs(file_id)
|
||||
|
||||
# Dump the trash index file contents
|
||||
dump_trash_index()
|
||||
|
||||
# Final result
|
||||
if file_in_trash and file_in_trash_fs:
|
||||
print("\nSUCCESS: File was moved to trash correctly")
|
||||
elif file_in_trash:
|
||||
print("\nPARTIAL SUCCESS: File is in trash index but not in trash filesystem")
|
||||
elif file_in_trash_fs:
|
||||
print("\nPARTIAL SUCCESS: File is in trash filesystem but not in trash index")
|
||||
else:
|
||||
print("\nFAILURE: File was not found in trash")
|
||||
print("This indicates the trash feature is not working properly")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user