Skip to content

Repository files navigation

urbackup-server-web-api-wrapper

Python wrapper to access and control an UrBackup server.

All responses are returned as typed dataclasses (e.g. StatusResult, Backups, UserListItem) so you get IDE autocompletion and type checking out of the box.

Installation

Install with:

pip3 install urbackup-server-web-api-wrapper

Usage

Connect and log in

fromurbackup_apiimporturbackup_server_typedserver=urbackup_server_typed("http://127.0.0.1:55414/x", "admin", "foo")
server.login()

Start a backup

fromurbackup_apiimportBackupType# Get the client ID from the status liststatus=server.get_status_result()
client= [cforcinstatus.statusifc.name=="testclient0"][0]
results=server.start_backup([client.id], BackupType.FULL_FILE)
forrinresults:
print(f"client {r.clientid}: start_ok={r.start_ok}")

List clients with no file backup in the last three days

importdatetimeimporttimestatus=server.get_status_result()
diff_time=3*24*60*60# 3 daysforclientinstatus.status:
ifclient.lastbackup=="-"orclient.lastbackup<time.time() -diff_time:
ifclient.lastbackup=="-"orclient.lastbackup==0:
lastbackup="Never"else:
lastbackup=datetime.datetime.fromtimestamp(client.lastbackup).strftime("%x %X")
print(f"Last file backup at {lastbackup} of client {client.name} is older than three days")

Browse backups

fromurbackup_apiimportBackupsbackups=server.get_backups(client.id)
forbinbackups.backups:
print(f"Backup {b.id}: {b.size_bytes} bytes, incremental={b.incremental}")
# Browse files inside a backupfiles=server.get_files(client.id, backups.backups[0].id, path="/")
forfinfiles.files:
print(f" {'[dir]'iff.direlse' '}{f.name}")

Monitor progress

fromurbackup_apiimportProgressResultprogress=server.get_progress(with_last_activities=True)
forpinprogress.progress:
print(f"Client {p.name}: {p.pcdone:.1f}% done")
forainprogress.lastactsor []:
print(f" Last activity: {a.name} ({a.duration}s)")

Manage settings

# Global settingssettings=server.get_general_settings_result()
print(settings["settings"]["max_file_incr"]["value"])
server.save_general_settings({"max_file_incr": "15"})
# Client settings (by ID)client_settings=server.get_client_settings_by_id(client.id)
# Configure client to backup folder C:\foo as name fooserver.save_client_settings_by_id(client.id, {"default_dirs": "C:\\foo|foo"})
# Configure incremental backup interval to 4hserver.save_client_settings_by_id(client.id, {"update_freq_incr": 4*60*60})
# Mailserver.save_mail_settings({"mail_servername": "smtp.example.com", "mail_serverport": "587"})

User management

fromurbackup_apiimportUserListItem# List usersusers=server.get_user_list()
foruinusers:
print(f"{u.name} (id={u.id})")
# Create / remove / change passwordserver.create_user("operator", "s3cret")
server.change_user_rights(users[0].id, "all=all")
server.change_user_password(users[0].id, "newpassword")
server.remove_user(users[0].id)

Logs

fromurbackup_apiimportLogLevellogs=server.get_logs(log_level=LogLevel.WARNING)
forentryinlogs:
print(f"[{entry.name}] errors={entry.errors} warnings={entry.warnings}")
# Detailed log entriesdetails=server.get_log(logs[0].id)
forrowindetails:
print(f" [{row.level}] {row.message}")

Extra clients

# Extra clients are included in the status resultstatus=server.get_status_result()
forecinstatus.extra_clients:
print(ec["hostname"])
server.add_extra_client("10.0.1.100")
server.remove_extra_client(ec_id)

Remove / stop-remove clients

server.remove_client(client.id)
server.stop_remove_client(client.id) # cancel pending removal

Usage statistics

usage=server.get_usage_stats()
foruinusage:
print(f"{u.name}: files={u.files}, images={u.images}, used={u.used}")

About

Python wrapper to access and control an UrBackup server

Resources

Stars

45 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages