mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-21 07:55:00 +00:00
62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
Manage storage of repository information in KVStore table in database.
|
|
"""
|
|
|
|
import json
|
|
from uuid import uuid1
|
|
|
|
from plinth import kvstore
|
|
|
|
# kvstore key for repository store
|
|
STORAGE_KEY = 'network_storage'
|
|
REQUIRED_FIELDS = ['path', 'storage_type', 'added_by_module']
|
|
|
|
|
|
def get_storages(storage_type=None):
|
|
"""Get all repositories from store."""
|
|
storages = kvstore.get_default(STORAGE_KEY, {})
|
|
if storages:
|
|
storages = json.loads(storages)
|
|
|
|
if storage_type:
|
|
storages = {
|
|
uuid: storage
|
|
for uuid, storage in storages.items()
|
|
if storage['storage_type'] == storage_type
|
|
}
|
|
|
|
return storages
|
|
|
|
|
|
def get(uuid):
|
|
"""Return a repository with given UUID from store."""
|
|
storages = get_storages()
|
|
return storages[uuid]
|
|
|
|
|
|
def update_or_add(storage):
|
|
"""Update an existing or create a new repository in store."""
|
|
for field in REQUIRED_FIELDS:
|
|
if field not in storage:
|
|
raise ValueError('missing storage parameter: %s' % field)
|
|
|
|
existing_storages = get_storages()
|
|
if 'uuid' in storage:
|
|
# Replace the existing storage
|
|
existing_storages[storage['uuid']] = storage
|
|
else:
|
|
uuid = str(uuid1())
|
|
storage['uuid'] = uuid
|
|
existing_storages[uuid] = storage
|
|
|
|
kvstore.set(STORAGE_KEY, json.dumps(existing_storages))
|
|
return storage['uuid']
|
|
|
|
|
|
def delete(uuid):
|
|
"""Remove a repository from store."""
|
|
storages = get_storages()
|
|
del storages[uuid]
|
|
kvstore.set(STORAGE_KEY, json.dumps(storages))
|