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.
Install with:
pip3 install urbackup-server-web-api-wrapper
fromurbackup_apiimporturbackup_server_typedserver=urbackup_server_typed("http://127.0.0.1:55414/x", "admin", "foo")
server.login()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}")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")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}")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)")# 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"})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)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 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)server.remove_client(client.id)
server.stop_remove_client(client.id) # cancel pending removalusage=server.get_usage_stats()
foruinusage:
print(f"{u.name}: files={u.files}, images={u.images}, used={u.used}")