Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 15 additions & 18 deletions draw/api/drive_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@

import frappe

DIAGRAM_MIME = "frappe_doc"


def drive_installed() -> bool:
return "drive" in frappe.get_installed_apps()
Expand All @@ -31,33 +29,32 @@ def _default_team() -> str | None:
return teams[0] if teams else None


def diagram_link(diagram_name: str) -> str:
"""The Draw editor route for a diagram — the Drive link target."""
return f"/draw/d/{diagram_name}"


def register_in_drive(diagram_name: str, team: str | None = None) -> str | None:
"""Ensure a Drive File links to this diagram; returns the File name (or None
when Drive is unavailable / has no team). Idempotent — reuses an existing link."""
"""Register the diagram in Drive as a LINK file that opens the Draw editor
(/draw/d/<name>) — so it appears in Drive and clicking it opens the diagram in
Draw, with NO Drive-side renderer needed. Returns the File name, or None when
Drive is unavailable / not set up (no team). Idempotent — reuses an existing
link for this diagram."""
if not drive_installed() or not frappe.db.exists("Draw Diagram", diagram_name):
return None
team = team or _default_team()
if not team:
return None # Drive present but not set up (no team) — nothing to do yet.

existing = frappe.db.exists(
"File", {"content_doctype": "Draw Diagram", "content_docname": diagram_name}
)
link = diagram_link(diagram_name)
existing = frappe.db.exists("File", {"file_url": link, "team": team})
if existing:
return existing

from drive.api.files import create_link

diagram = frappe.get_doc("Draw Diagram", diagram_name)
drive_file = frappe.get_doc(
{
"doctype": "File",
"file_name": diagram.title or diagram_name,
"is_private": 1,
"team": team,
"content_doctype": "Draw Diagram",
"content_docname": diagram_name,
"mime_type": DIAGRAM_MIME,
}
).insert(ignore_permissions=True)
drive_file = create_link(team, diagram.title or diagram_name, link)
return drive_file.name


Expand Down
7 changes: 3 additions & 4 deletions draw/draw/doctype/draw_diagram/test_draw_diagram.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,9 @@ def test_register_in_drive_when_available(self):
file_name = register_in_drive(doc.name, team=team)
self.addCleanup(lambda: frappe.delete_doc("File", file_name, force=True, ignore_permissions=True))
self.assertTrue(file_name)
self.assertTrue(
frappe.db.exists(
"File", {"content_doctype": "Draw Diagram", "content_docname": doc.name}
)
# Registered as a Drive link that opens the Draw editor.
self.assertEqual(
frappe.db.get_value("File", file_name, "file_url"), f"/draw/d/{doc.name}"
)
# Idempotent — a second call reuses the same File.
self.assertEqual(register_in_drive(doc.name, team=team), file_name)
Expand Down
Loading