from __future__ import annotations
from typing import Any, Union
from .base import Base
from .modules import ActionResult, ActionResultError, Backup, RunningTask
__all__ = ("LocalFileBackupPlugin",)
[docs]
class LocalFileBackupPlugin(Base):
"""
Contains all functions for any ``/API/LocalFileBackupPlugin/`` API endpoints.
"""
[docs]
async def delete_from_s3(
self, backup_id: str, format_data: Union[bool, None] = None
) -> ActionResult | ActionResultError:
"""|coro|
Delete a backup from S3.
Parameters
-----------
backup_id: :class:`str`
The backup ID to delete.
format_data: Union[:class:`bool`, None], optional
Format the JSON response data, by default None.
Returns
--------
:class:`ActionResult`
On success returns a :class:`ActionResult` dataclass.
"""
await self._connect()
parameters: dict[str, str] = {"BackupId": backup_id}
result: Any = await self._call_api(
api="LocalFileBackupPlugin/DeleteFromS3", parameters=parameters, format_data=format_data, format_=ActionResult
)
return result
[docs]
async def delete_local_backup(self, backup_id: str) -> None:
"""|coro|
Delete a local backup.
Parameters
-----------
backup_id: :class:`str`
The backup ID to delete.
Returns
--------
None
"""
await self._connect()
parameters: dict[str, str] = {"BackupId": backup_id}
await self._call_api(api="LocalFileBackupPlugin/DeleteLocalBackup", parameters=parameters, _no_data=True)
return
[docs]
async def download_from_s3(
self, backup_id: str, format_data: Union[bool, None] = None
) -> RunningTask | ActionResultError:
"""|coro|
Download a backup from S3.
Parameters
-----------
backup_id: :class:`str`
The backup ID to download.
format_data: Union[:class:`bool`, None], optional
Format the JSON response data, by default None.
Returns
--------
:class:`RunningTask`
On success returns a :class:`RunningTask` dataclass.
"""
await self._connect()
parameters: dict[str, str] = {"BackupId": backup_id}
result: Any = await self._call_api(
api="LocalFileBackupPlugin/DownloadFromS3", parameters=parameters, format_data=format_data, format_=RunningTask
)
return result
[docs]
async def get_backups(self, format_data: Union[bool, None] = None) -> list[Backup] | ActionResultError:
"""|coro|
Get a list of Backups.
Parameters
-----------
format_data: Union[:class:`bool`, None], optional
Format the JSON response data, by default None.
Returns
--------
list[:class:`Backup`]
On success returns a list of :class:`Backup` dataclasses.
"""
await self._connect()
result: Any = await self._call_api(
api="LocalFileBackupPlugin/GetBackups", format_data=format_data, format_=Backup, _use_from_dict=False
)
return result
[docs]
async def refresh_backup_list(self) -> None:
"""|coro|
Refresh the list of backups.
Returns
--------
None
"""
await self._connect()
await self._call_api(api="LocalFileBackupPlugin/RefreshBackupList", _no_data=True)
return
[docs]
async def restore_backup(
self, backup_id: str, delete_existing_data: bool = False, format_data: Union[bool, None] = None
) -> ActionResult | ActionResultError:
"""|coro|
Restore a backup.
Parameters
-----------
backup_id: :class:`str`
The backup ID to restore.
delete_existing_data: :class:`bool`, optional
Delete the backup after restoring, defaults to False.
format_data: Union[:class:`bool`, None], optional
Format the JSON response data, by default None.
Returns
--------
:class:`ActionResult`
On success returns a :class:`ActionResult` dataclass.
"""
await self._connect()
parameters: dict[str, Any] = {"BackupId": backup_id, "DeleteExistingData": delete_existing_data}
result: Any = await self._call_api(
api="LocalFileBackupPlugin/RestoreBackup", parameters=parameters, format_data=format_data, format_=ActionResult
)
return result
[docs]
async def set_backup_sticky(self, backup_id: str, sticky: bool = False) -> None:
"""|coro|
Set a backup as sticky.
Parameters
-----------
backup_id: :class:`str`
The backup ID to set as sticky.
sticky: :class:`bool`, optional
Set the backup as sticky, defaults to False.
Returns
--------
None
"""
await self._connect()
parameters: dict[str, Any] = {"BackupId": backup_id, "Sticky": sticky}
await self._call_api(api="LocalFileBackupPlugin/SetBackupSticky", parameters=parameters, _no_data=True)
return
[docs]
async def take_backup(
self,
name: str,
description: str,
sticky: bool = False,
local: bool | None = None,
s3: bool | None = None,
format_data: Union[bool, None] = None,
) -> ActionResult | ActionResultError:
"""|coro|
Takes a backup of the AMP Server.
Parameters
-----------
name: :class:`str`
The name of the backup.
description: :class:`str`
Brief description of why or what the backup is for.
sticky: :class:`bool`, optional
Sticky backups won't be deleted to make room for automatic backups, defaults to ``False``.
local: :class:`bool`, optional
If the backup should be local or not.
s3: :class:`bool`, optional
If the backup should be on S3 or not.
format_data: Union[:class:`bool`, None], optional
Format the JSON response data, by default None.
Returns
--------
:class:`ActionResult`
On success returns a :class:`ActionResult` dataclass.
"""
await self._connect()
parameters: dict[str, Any] = {"Title": name, "Description": description, "Sticky": sticky}
if local is not None:
parameters["Local"] = local
if s3 is not None:
parameters["S3"] = s3
result: Any = await self._call_api(
api="LocalFileBackupPlugin/TakeBackup", parameters=parameters, format_data=format_data, format_=ActionResult
)
return result
[docs]
async def upload_to_s3(self, backup_id: str, format_data: Union[bool, None] = None) -> RunningTask | ActionResultError:
"""|coro|
Upload a backup to S3.
Parameters
-----------
backup_id: :class:`str`
The backup ID to upload.
format_data: Union[:class:`bool`, None], optional
Format the JSON response data, by default None.
Returns
--------
:class:`RunningTask`
On success returns a :class:`RunningTask` dataclass.
"""
await self._connect()
parameters: dict[str, str] = {"BackupId": backup_id}
result: Any = await self._call_api(
api="LocalFileBackupPlugin/UploadToS3", parameters=parameters, format_data=format_data, format_=RunningTask
)
return result