Client: your server settings, profile, account and admin in Settings

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
sarahandClaude Opus 5.5 committed 2026-10-13 17:26:26 +02:00
1 parent e2cb25e2e1
commit c7a7596e99
3 files changed
+401 -2

No files matched your search

+63
View File
@@ -480,6 +480,69 @@ class ServerSource(Source):
# A big root takes the server a while to read through.
return self._Json("GET", "/graph", params=self._At(Root, RelativePath), timeout=120)
# --- Your account and settings on the server (ServerSettings.py) ------
# The same /api endpoints as the web view's Settings panel.
def UserSettings(self) -> dict:
return self._Json("GET", "/settings")
def SaveUserSettings(self, Settings: dict) -> dict:
return self._Json("PUT", "/settings", json=Settings)
def ThemeNames(self) -> list[str]:
return self._Json("GET", "/themes")
def Theme(self, Name: str) -> dict:
return self._Json("GET", "/theme", params={"Name": Name})
def SaveTheme(self, Name: str, Palette: dict) -> None:
self._Json("PUT", "/theme", params={"Name": Name}, json={"Palette": Palette})
def DeleteTheme(self, Name: str) -> None:
self._Json("DELETE", "/theme", params={"Name": Name})
def ColourOptions(self) -> list[str]:
return self._Json("GET", "/profile/colours")
def SetColour(self, Colour: str) -> dict:
self.User = {**(self.User or {}), **self._Json("PUT", "/profile/colour", json={"Colour": Colour})}
return self.User
def UploadAvatar(self, LocalFile: Path) -> None:
with LocalFile.open("rb") as Handle:
self._Json("POST", "/profile/avatar", files=[("Avatar", (LocalFile.name, Handle))])
def ChangeUsername(self, NewUsername: str) -> dict:
self.User = {**(self.User or {}), **self._Json("PUT", "/profile/username", json={"NewUsername": NewUsername})}
return self.User
def ChangePassword(self, CurrentPassword: str, NewPassword: str) -> None:
self._Json("PUT", "/profile/password", json={"CurrentPassword": CurrentPassword, "NewPassword": NewPassword})
def Users(self) -> list[dict]:
return self._Json("GET", "/users")
def CreateUser(self, Username: str, Password: str, IsAdmin: bool, Colour: str) -> None:
self._Json("POST", "/users", json={"Username": Username, "Password": Password, "IsAdmin": IsAdmin, "Colour": Colour})
def Groups(self) -> list[dict]:
return self._Json("GET", "/groups")
def CreateGroup(self, Name: str) -> None:
self._Json("POST", "/groups", json={"Name": Name})
def DeleteGroup(self, Name: str) -> None:
self._Json("DELETE", "/groups", params={"Name": Name})
def SetGroupMembers(self, Name: str, Members: list[str]) -> None:
self._Json("PUT", "/groups/members", params={"Name": Name}, json={"Members": Members})
def Locks(self) -> list[dict]:
return self._Json("GET", "/locks")
def RemoveLock(self, Root: str, RelativePath: str) -> None:
self._Json("DELETE", "/lock", params=self._At(Root, RelativePath))
def Diagram(self, Source: str, ThemePalette: dict[str, str], FontSize: int) -> bytes:
"""A ```mermaid block as a PNG, drawn by the server (Diagrams.py)."""
Body = {"Source": Source, "Palette": ThemePalette, "FontSize": FontSize}