Work on provider manager and UI

This commit is contained in:
2020-10-18 19:36:26 +03:00
parent c8b2ef77e6
commit 45d50a1bff
11 changed files with 219 additions and 63 deletions

View File

@ -0,0 +1,59 @@
from django import forms
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import ValidationError
from django.views.generic import FormView
from YtManagerApp.providers.video_provider import VideoProvider, ProviderValidationError
from YtManagerApp.services import Services
from YtManagerApp.views.controls.modal import ModalMixin
class ProviderConfigForm(forms.Form):
def __init__(self, *args, **kwargs):
self.provider_id = kwargs.pop('provider_id', None)
super().__init__(*args, **kwargs)
if self.provider_id is not None:
provider: VideoProvider = Services.videoProviderManager().get(self.provider_id)
for key, field in provider.settings.items():
self.fields[key] = field
def clean(self):
cleaned_data = super().clean()
provider: VideoProvider = Services.videoProviderManager().get(self.provider_id)
try:
provider.validate_configuration(cleaned_data)
except ProviderValidationError as ex:
raise ValidationError(ex.field_messages)
class ProviderConfigView(LoginRequiredMixin, ModalMixin, FormView):
template_name = 'YtManagerApp/controls/provider_config_modal.html'
form_class = ProviderConfigForm
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['provider_id'] = self.kwargs['provider_id']
return kwargs
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data['provider'] = Services.videoProviderManager().get(self.kwargs['provider_id'])
return data
def get_initial(self):
initial = super().get_initial()
cfg = Services.videoProviderManager().get_provider_config(self.kwargs['provider_id'])
if cfg is not None:
initial.update(cfg)
def form_valid(self, form):
try:
Services.videoProviderManager().configure_provider(self.kwargs['provider_id'], form.cleaned_data)
except Exception as ex:
super().modal_response(form, success=False, error_msg='Configuration of provider failed! ' + str(ex))
return super().form_valid(form)

View File

@ -1,11 +1,12 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
from YtManagerApp.providers.video_provider import VideoProviderState
from YtManagerApp.services import Services
from collections import namedtuple
VideoProviderInfoViewModel = namedtuple('VideoProviderInfoViewModel',
['id', 'name', 'is_configured', 'image_src'])
['id', 'name', 'is_configured', 'has_error', 'image_src'])
class ProvidersView(LoginRequiredMixin, TemplateView):
@ -16,16 +17,23 @@ class ProvidersView(LoginRequiredMixin, TemplateView):
providers = []
have_unconfigured = False
have_configured = False
for provider in Services.videoProviderManager().get_available_providers():
providers.append(VideoProviderInfoViewModel(
id=provider.id,
name=provider.name,
is_configured=provider.is_configured,
is_configured=provider.state != VideoProviderState.NOT_CONFIGURED,
has_error=provider.state == VideoProviderState.ERROR,
image_src=f"YtManagerApp/img/video_providers/{provider.id}.png"
))
if not provider.is_configured:
if provider.state != VideoProviderState.NOT_CONFIGURED:
have_configured = True
if provider.state == VideoProviderState.NOT_CONFIGURED:
have_unconfigured = True
context['providers'] = sorted(providers, key=lambda x: x.name)
context['have_unconfigured'] = have_unconfigured
context['have_configured'] = have_configured
return context