mirror of
https://git.srhtnin.garden/sarah/SaraView.git
synced 2026-10-15 02:43:17 +02:00
Client: your server settings, profile, account and admin in Settings
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
e2cb25e2e1
commit
c7a7596e99
3 files changed
+401
-2
No files matched your search
@@ -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}
|
||||
|
||||
Reference in new issue
Block a user