diff --git a/attach_and_embed_image.py b/attach_and_embed_image.py deleted file mode 100644 index 930b900..0000000 --- a/attach_and_embed_image.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python -import os -import sys -from nextcloud_mcp_server.client import NextcloudClient - -def main(): - note_id = 487 # ID of the note we just created - - # Create client - client = NextcloudClient.from_env() - - # Check if image exists - image_path = 'sample_image.png' - if not os.path.exists(image_path): - print(f"Error: Image file '{image_path}' not found") - return 1 - - # Read the image - with open(image_path, 'rb') as f: - image_content = f.read() - - print(f"Attaching image to note {note_id}...") - try: - # Attach the image to the note - upload_response = client.add_note_attachment( - note_id=note_id, - filename="sample_image.png", - content=image_content, - mime_type="image/png" - ) - - print(f"Image attached successfully (Status: {upload_response['status_code']}).") - - # Now get the current note to get its etag - note = client.notes_get_note(note_id=note_id) - etag = note["etag"] - - # Update the note content to include the image references - updated_content = f"""# Note with Visible Image Demo - -This note demonstrates how to properly embed an image in Nextcloud Notes so it's visible in the browser interface. - -We'll include the sample red square image we created earlier using both Markdown and HTML methods. - -## Method 1: Markdown Image Syntax -![Sample Red Square Image](.attachments.{note_id}/sample_image.png) - -## Method 2: HTML Image Tag -Sample Red Square Image - -## Image Path Details -The image is stored at: `/Notes/.attachments.{note_id}/sample_image.png` -""" - - # Update the note with the references to the image - updated_note = client.notes_update_note( - note_id=note_id, - etag=etag, - content=updated_content - ) - - print(f"Note updated with image references. You can now view it in the browser.") - print(f"Note URL: /index.php/apps/notes/#/note/{note_id}") - return 0 - except Exception as e: - print(f"Error: {e}") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/attach_image.py b/attach_image.py deleted file mode 100644 index f9d766c..0000000 --- a/attach_image.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python -import os -import sys -from nextcloud_mcp_server.client import NextcloudClient - -def main(): - note_id = 420 # ID of the note we created earlier - - # Create client - client = NextcloudClient.from_env() - - # Check if image exists - image_path = 'sample_image.png' - if not os.path.exists(image_path): - print(f"Error: Image file '{image_path}' not found") - return 1 - - # Read the image - with open(image_path, 'rb') as f: - image_content = f.read() - - print(f"Attaching image to note {note_id}...") - try: - # Attach the image to the note - upload_response = client.add_note_attachment( - note_id=note_id, - filename="sample_image.png", - content=image_content, - mime_type="image/png" - ) - - print(f"Image attached successfully (Status: {upload_response['status_code']}).") - print(f"Note URL: /index.php/apps/notes/#/note/{note_id}") - return 0 - except Exception as e: - print(f"Error attaching image: {e}") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/check_updated_note.py b/check_updated_note.py deleted file mode 100644 index bcba688..0000000 --- a/check_updated_note.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python -import sys -from nextcloud_mcp_server.client import NextcloudClient - -def main(): - note_id = 420 # ID of the note with the image attachment - - # Create client - client = NextcloudClient.from_env() - - # Get the note again to see the updated content - try: - note = client.notes_get_note(note_id=note_id) - print(f"Retrieved note: {note['title']}") - print("\nCURRENT NOTE CONTENT:") - print("-" * 50) - print(note['content']) - print("-" * 50) - - return 0 - except Exception as e: - print(f"Error retrieving note: {e}") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/retrieved_image.png b/retrieved_image.png deleted file mode 100644 index fd67dba..0000000 Binary files a/retrieved_image.png and /dev/null differ diff --git a/sample_image.png b/sample_image.png deleted file mode 100644 index fd67dba..0000000 Binary files a/sample_image.png and /dev/null differ diff --git a/sample_image.py b/sample_image.py deleted file mode 100644 index b3e0139..0000000 --- a/sample_image.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python -from PIL import Image, ImageDraw - -# Create a simple image (a red square with some text) -img = Image.new('RGB', (200, 200), color = (255, 255, 255)) -draw = ImageDraw.Draw(img) -draw.rectangle([(20, 20), (180, 180)], fill=(255, 0, 0)) -draw.text((40, 100), "Nextcloud MCP", fill=(255, 255, 255)) -img.save('sample_image.png') - -print("Image created successfully: sample_image.png") diff --git a/test_delete_note_with_attachment.py b/test_delete_note_with_attachment.py deleted file mode 100644 index e591cfc..0000000 --- a/test_delete_note_with_attachment.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python -import sys -import time -from nextcloud_mcp_server.client import NextcloudClient - -def main(): - # Create client - client = NextcloudClient.from_env() - - # 1. Create a new test note - test_title = "Test Note for Deletion with Attachment" - print(f"Creating test note: {test_title}...") - note = client.notes_create_note( - title=test_title, - content="This note will be deleted but its attachment should remain.", - category="Test" - ) - note_id = note["id"] - print(f"Note created with ID: {note_id}") - - # 2. Attach the existing image to the note - print(f"Attaching image to note {note_id}...") - with open("sample_image.png", 'rb') as f: - image_content = f.read() - - upload_response = client.add_note_attachment( - note_id=note_id, - filename="deletion_test_image.png", - content=image_content, - mime_type="image/png" - ) - print(f"Image attached successfully (Status: {upload_response['status_code']}).") - - # 3. Verify the attachment exists - print(f"Verifying attachment exists...") - content, mime_type = client.get_note_attachment( - note_id=note_id, - filename="deletion_test_image.png" - ) - print(f"Attachment verified (Size: {len(content)} bytes)") - - # 4. Delete the note - print(f"\nDeleting note {note_id}...") - response = client.notes_delete_note(note_id=note_id) - print(f"Note deleted successfully.") - - # Wait a moment for deletion to process - time.sleep(1) - - # 5. Verify the note is gone - print("\nVerifying note is deleted...") - try: - client.notes_get_note(note_id=note_id) - print("ERROR: Note still exists!") - return 1 - except Exception as e: - print(f"Note confirmed deleted (404 Not Found expected): {e}") - - # 6. Check if attachment still exists (expected behavior) - print("\nChecking if attachment still exists (orphaned)...") - try: - content, mime_type = client.get_note_attachment( - note_id=note_id, - filename="deletion_test_image.png" - ) - print("EXPECTED BEHAVIOR: Attachment still exists after note deletion!") - print(f"Attachment size: {len(content)} bytes") - print(f"This matches the documented behavior of Nextcloud Notes.") - - # Save the orphaned attachment to verify - output_path = "orphaned_attachment.png" - with open(output_path, 'wb') as f: - f.write(content) - print(f"Saved orphaned attachment to: {output_path}") - - return 0 - except Exception as e: - print(f"Unexpected: Attachment was deleted with note: {e}") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/update_content_with_image_reference.py b/update_content_with_image_reference.py deleted file mode 100644 index f5c4efc..0000000 --- a/update_content_with_image_reference.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python -import sys -from nextcloud_mcp_server.client import NextcloudClient - -def main(): - note_id = 420 # ID of the note with the image attachment - - # Create client - client = NextcloudClient.from_env() - - # First get the current note - try: - note = client.notes_get_note(note_id=note_id) - print(f"Retrieved note: {note['title']}") - - # Update the note content to include a direct reference to the image - updated_content = f"""# Note with Image Attachment - -This note demonstrates attaching images to Nextcloud Notes. - -An image will be attached to this note as a demonstration. - -## Image Reference - -The image is attached but not displayed inline in the Notes UI. -Attachments in Nextcloud Notes exist as separate files in the .attachments.{note_id} -directory but aren't automatically embedded in the note content. - -You can view the image by going to the Files app and navigating to: -/Notes/.attachments.{note_id}/sample_image.png - -## Orphaned Attachments - -When notes are deleted, their attachments remain in the system. -This is the expected behavior of the official Nextcloud Notes app. -""" - - # Update the note with the new content - updated_note = client.notes_update_note( - note_id=note_id, - etag=note['etag'], - content=updated_content - ) - - print(f"Note updated successfully with image reference information.") - return 0 - - except Exception as e: - print(f"Error updating note: {e}") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/update_image_reference.py b/update_image_reference.py deleted file mode 100644 index 80f6d84..0000000 --- a/update_image_reference.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python -import os -import sys -from nextcloud_mcp_server.client import NextcloudClient - -def main(): - note_id = 487 # ID of the note with the issue - - # Create client - client = NextcloudClient.from_env() - - try: - # Get the current note to get its etag - note = client.notes_get_note(note_id=note_id) - etag = note["etag"] - - # Update the note content with correct image reference syntax - updated_content = f"""# Note with Visible Image Demo - -This note demonstrates how to properly embed an image in Nextcloud Notes so it's visible in the browser interface. - -We'll include the sample red square image we created earlier using both Markdown and HTML methods. - -## Method 1: Markdown Image Syntax -![Sample Red Square Image](.attachments.{note_id}/sample_image.png) - -## Method 2: HTML Image Tag -Sample Red Square Image - -## Image Path Details -The image is stored at: `/Notes/.attachments.{note_id}/sample_image.png` - -## Note on Image Embedding -In Nextcloud Notes, images must be referenced with a period at the beginning of the path. The correct format is: -`.attachments.{note_id}/filename.png` - -Without the leading period, the image won't display correctly. -""" - - # Update the note with the corrected image references - updated_note = client.notes_update_note( - note_id=note_id, - etag=etag, - content=updated_content - ) - - print(f"Note updated with corrected image references.") - print(f"Note URL: /index.php/apps/notes/#/note/{note_id}") - return 0 - except Exception as e: - print(f"Error: {e}") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/update_webdav_auth.py b/update_webdav_auth.py deleted file mode 100644 index 9a3210f..0000000 --- a/update_webdav_auth.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python -import sys -import os -import base64 -from nextcloud_mcp_server.client import NextcloudClient, HTTPStatusError -import logging -import time - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -def test_webdav_auth_with_attachment(): - """ - Test function to verify WebDAV authentication by attempting to use add_note_attachment. - """ - client = NextcloudClient.from_env() - print("Client authentication type:", type(client._client.auth).__name__) - - username = os.environ["NEXTCLOUD_USERNAME"] - webdav_base = client._get_webdav_base_path() - notes_path = f"{webdav_base}/Notes" - print(f"Target WebDAV Notes path for PROPFIND check: {notes_path}") - - temp_note_id = None - try: - # 1. Create a temporary note to get a note_id - print("\nCreating a temporary note...") - temp_note_title = f"Temp Note for WebDAV Test - {int(time.time())}" - created_note = client.notes_create_note(title=temp_note_title, content="Test content") - temp_note_id = created_note.get("id") - if not temp_note_id: - print("Error: Failed to create temporary note.") - return 1 - print(f"Temporary note created with ID: {temp_note_id}") - - # 2. Attempt to add an attachment (this will trigger the internal PROPFIND) - print(f"\nTest: Attempting add_note_attachment for note_id {temp_note_id} (uses client's BasicAuth)") - dummy_content = b"This is a test attachment." - dummy_filename = "test_attachment.txt" - - # The add_note_attachment method itself contains the PROPFIND check - # and will log details if it fails. - response_data = client.add_note_attachment( - note_id=temp_note_id, - filename=dummy_filename, - content=dummy_content, - mime_type="text/plain" - ) - print(f"add_note_attachment response: {response_data}") - if response_data and response_data.get("status_code") in [201, 204]: - print("Success! add_note_attachment (and its internal PROPFIND) worked.") - else: - print("Failure or unexpected response from add_note_attachment.") - # The client.py logs should show details of the PROPFIND if it failed. - - except HTTPStatusError as e: - print(f"HTTPStatusError during add_note_attachment: {e.response.status_code} - {e.response.text}") - if e.response.status_code == 401: - print("Reproduced 401 Unauthorized during add_note_attachment's PROPFIND check!") - else: - print("An HTTP error other than 401 occurred.") - except Exception as e: - print(f"An unexpected error occurred: {str(e)}") - finally: - # 3. Clean up: Delete the temporary note - if temp_note_id: - print(f"\nCleaning up: Deleting temporary note ID {temp_note_id}...") - try: - client.notes_delete_note(note_id=temp_note_id) - print(f"Successfully deleted temporary note ID {temp_note_id}.") - except Exception as e_del: - print(f"Error deleting temporary note ID {temp_note_id}: {str(e_del)}") - - return 0 - -if __name__ == "__main__": - sys.exit(test_webdav_auth_with_attachment()) diff --git a/verify_image_attachment.py b/verify_image_attachment.py deleted file mode 100644 index 281f1b2..0000000 --- a/verify_image_attachment.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python -import sys -from nextcloud_mcp_server.client import NextcloudClient - -def main(): - note_id = 420 # ID of the note we created earlier - - # Create client - client = NextcloudClient.from_env() - - # First verify the note exists - print(f"Retrieving note {note_id}...") - try: - note = client.notes_get_note(note_id=note_id) - print(f"Note retrieved: {note['title']}") - except Exception as e: - print(f"Error retrieving note: {e}") - return 1 - - # Now try to get the image attachment - attachment_filename = "sample_image.png" - print(f"Retrieving attachment '{attachment_filename}' from note {note_id}...") - try: - content, mime_type = client.get_note_attachment( - note_id=note_id, - filename=attachment_filename - ) - print(f"Attachment retrieved successfully!") - print(f"MIME type: {mime_type}") - print(f"Content size: {len(content)} bytes") - - # Save the retrieved image to verify it's the same - output_path = "retrieved_image.png" - with open(output_path, 'wb') as f: - f.write(content) - print(f"Saved retrieved image to: {output_path}") - - return 0 - except Exception as e: - print(f"Error retrieving attachment: {e}") - return 1 - -if __name__ == "__main__": - sys.exit(main())