This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
combo-plugin-subscriptions/combo_plugin_subscriptions/forms.py

52 lines
2.1 KiB
Python

import logging
from django import forms
logger = logging.getLogger(__name__)
class SubscriptionsManageForm(forms.Form):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
self.user = self.request.user
instance = self.instance = kwargs.pop('instance')
try:
subscriptions = self.subscriptions = self.instance.get_subscriptions(user=self.user.email)
except:
subscriptions = self.subscriptions = []
logger.warning('unable to retrieve subscriptions for %r: %r',
self.user, self.user.email, exc_info=True)
super(SubscriptionsManageForm, self).__init__(*args, **kwargs)
self.all_choices = set()
for subscription in subscriptions:
if not instance.check_resource(subscription['name']):
continue
choices = []
initial = []
for transport in subscription['transports']['available']:
if not instance.check_transport(transport):
continue
self.all_choices.add(transport)
choices.append((transport, transport))
if transport in subscription['transports']['defined']:
initial.append(transport)
self.fields[instance.simplify(subscription['name'])] = \
forms.MultipleChoiceField(label=subscription['description'],
choices=choices, initial=initial,
widget=forms.CheckboxSelectMultiple,
required=False)
def save(self):
self.full_clean()
subscriptions = []
for key, value in self.cleaned_data.iteritems():
subscriptions.append({
'name': key,
'transports': value
})
try:
self.instance.set_subscriptions(subscriptions, user=self.user.email)
except:
subscriptions = self.subscriptions = []
logger.warning('unable to save subscriptions for %r: %r',
self.user, self.user.email, exc_info=True)