PyRunner / core /views /datastores.py
Akoda35's picture
Upload 18 files
1f6c983 verified
Raw
History Blame Contribute Delete
6.31 kB
"""
Data Store management views for the control panel.
"""
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpRequest, HttpResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.views.decorators.http import require_POST
from core.forms import DataStoreForm, DataStoreEntryForm
from core.models import DataStore, DataStoreEntry
from core.services import DatastoreService
@login_required
def datastore_list_view(request: HttpRequest) -> HttpResponse:
"""List all data stores."""
datastores = DatastoreService.get_datastores_with_stats()
# Format size for each datastore
for ds in datastores:
ds.size_display = DatastoreService.format_size(ds.size_bytes)
total_size = DatastoreService.get_total_size()
total_size_display = DatastoreService.format_size(total_size)
return render(
request,
"cpanel/datastores/list.html",
{
"datastores": datastores,
"total_size_display": total_size_display,
"datastore_count": len(datastores),
},
)
@login_required
def datastore_create_view(request: HttpRequest) -> HttpResponse:
"""Create a new data store."""
if request.method == "POST":
form = DataStoreForm(request.POST)
if form.is_valid():
datastore = form.save(commit=False)
datastore.created_by = request.user
datastore.save()
messages.success(request, f'Data store "{datastore.name}" created successfully.')
return redirect("cpanel:datastore_detail", pk=datastore.pk)
else:
form = DataStoreForm()
return render(
request,
"cpanel/datastores/create.html",
{
"form": form,
},
)
@login_required
def datastore_detail_view(request: HttpRequest, pk) -> HttpResponse:
"""View a data store with all its entries."""
datastore = get_object_or_404(DataStore, pk=pk)
entries = datastore.entries.all().order_by("key")
return render(
request,
"cpanel/datastores/detail.html",
{
"datastore": datastore,
"entries": entries,
},
)
@login_required
def datastore_edit_view(request: HttpRequest, pk) -> HttpResponse:
"""Edit a data store's metadata."""
datastore = get_object_or_404(DataStore, pk=pk)
if request.method == "POST":
form = DataStoreForm(request.POST, instance=datastore)
if form.is_valid():
form.save()
messages.success(request, f'Data store "{datastore.name}" updated successfully.')
return redirect("cpanel:datastore_detail", pk=datastore.pk)
else:
form = DataStoreForm(instance=datastore)
return render(
request,
"cpanel/datastores/edit.html",
{
"form": form,
"datastore": datastore,
},
)
@login_required
@require_POST
def datastore_delete_view(request: HttpRequest, pk) -> HttpResponse:
"""Delete a data store and all its entries."""
datastore = get_object_or_404(DataStore, pk=pk)
name = datastore.name
datastore.delete()
messages.success(request, f'Data store "{name}" deleted successfully.')
return redirect("cpanel:datastore_list")
@login_required
@require_POST
def datastore_clear_view(request: HttpRequest, pk) -> HttpResponse:
"""Clear all entries from a data store."""
datastore = get_object_or_404(DataStore, pk=pk)
count = datastore.entries.count()
datastore.entries.all().delete()
messages.success(request, f'Cleared {count} entries from "{datastore.name}".')
return redirect("cpanel:datastore_detail", pk=datastore.pk)
# =============================================================================
# Entry Views
# =============================================================================
@login_required
def datastore_entry_create_view(request: HttpRequest, pk) -> HttpResponse:
"""Add a new entry to a data store."""
datastore = get_object_or_404(DataStore, pk=pk)
if request.method == "POST":
form = DataStoreEntryForm(request.POST, datastore=datastore)
if form.is_valid():
entry = DataStoreEntry(
datastore=datastore,
key=form.cleaned_data["key"],
value_json=form.cleaned_data["value"],
)
entry.save()
messages.success(request, f'Entry "{entry.key}" added successfully.')
return redirect("cpanel:datastore_detail", pk=datastore.pk)
else:
form = DataStoreEntryForm(datastore=datastore)
return render(
request,
"cpanel/datastores/entry_create.html",
{
"form": form,
"datastore": datastore,
},
)
@login_required
def datastore_entry_edit_view(request: HttpRequest, pk, entry_pk) -> HttpResponse:
"""Edit an existing entry."""
datastore = get_object_or_404(DataStore, pk=pk)
entry = get_object_or_404(DataStoreEntry, pk=entry_pk, datastore=datastore)
if request.method == "POST":
form = DataStoreEntryForm(request.POST, datastore=datastore, instance=entry)
if form.is_valid():
entry.key = form.cleaned_data["key"]
entry.value_json = form.cleaned_data["value"]
entry.save()
messages.success(request, f'Entry "{entry.key}" updated successfully.')
return redirect("cpanel:datastore_detail", pk=datastore.pk)
else:
form = DataStoreEntryForm(datastore=datastore, instance=entry)
return render(
request,
"cpanel/datastores/entry_edit.html",
{
"form": form,
"datastore": datastore,
"entry": entry,
},
)
@login_required
@require_POST
def datastore_entry_delete_view(request: HttpRequest, pk, entry_pk) -> HttpResponse:
"""Delete an entry from a data store."""
datastore = get_object_or_404(DataStore, pk=pk)
entry = get_object_or_404(DataStoreEntry, pk=entry_pk, datastore=datastore)
key = entry.key
entry.delete()
messages.success(request, f'Entry "{key}" deleted successfully.')
return redirect("cpanel:datastore_detail", pk=datastore.pk)