diff options
author | Aurélien Bompard <aurelien@bompard.org> | 2013-07-11 16:28:07 +0200 |
---|---|---|
committer | Aurélien Bompard <aurelien@bompard.org> | 2013-07-11 17:17:27 +0200 |
commit | 2c7c64b084040ad0666b15c511ff18bb96fc79b9 (patch) | |
tree | 0b3a627936cad2de88344fca4c351ee761128a33 | |
parent | 510c337117a77591400d7ee1d8d20ffd3ca2f731 (diff) | |
download | hyperkitty-2c7c64b084040ad0666b15c511ff18bb96fc79b9.tar.gz hyperkitty-2c7c64b084040ad0666b15c511ff18bb96fc79b9.tar.xz hyperkitty-2c7c64b084040ad0666b15c511ff18bb96fc79b9.zip |
Factorize the category widget code
-rw-r--r-- | hyperkitty/lib/__init__.py | 26 | ||||
-rw-r--r-- | hyperkitty/views/thread.py | 29 |
2 files changed, 28 insertions, 27 deletions
diff --git a/hyperkitty/lib/__init__.py b/hyperkitty/lib/__init__.py index fef4a75..0cb1c7d 100644 --- a/hyperkitty/lib/__init__.py +++ b/hyperkitty/lib/__init__.py @@ -29,6 +29,8 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from mailmanclient import MailmanConnectionError from hyperkitty.lib import mailman +from hyperkitty.models import ThreadCategory +from hyperkitty.views.forms import CategoryForm FLASH_MESSAGES = { @@ -176,3 +178,27 @@ def paginate(objects, page_num, max_page_range=10, paginator=None): else: objects.page_range = [ p+1 for p in range(paginator.num_pages) ] return objects + + +def get_category_widget(request, current_category=None): + categories = [ (c.name, c.name.upper()) + for c in ThreadCategory.objects.all() ] \ + + [("", "no categories")] + + if request.method == "POST": + category_form = CategoryForm(request.POST) + else: + category_form = CategoryForm(initial={"category": current_category or ""}) + category_form["category"].field.choices = categories + if request.method == "POST" and category_form.is_valid(): + # is_valid() must be called after the choices have been set + current_category = category_form.cleaned_data["category"] + + if not current_category: + category = None + else: + try: + category = ThreadCategory.objects.get(name=current_category) + except ThreadCategory.DoesNotExist: + category = None + return category, category_form diff --git a/hyperkitty/views/thread.py b/hyperkitty/views/thread.py index 8c745ba..365dca9 100644 --- a/hyperkitty/views/thread.py +++ b/hyperkitty/views/thread.py @@ -100,18 +100,7 @@ def thread_index(request, mlist_fqdn, threadid, month=None, year=None): fav_action = "rm" # Category - categories = [ (c.name, c.name.upper()) - for c in ThreadCategory.objects.all() ] \ - + [("", "no categories")] - category_form = CategoryForm(initial={"category": thread.category or ""}) - category_form["category"].field.choices = categories - if not thread.category: - category = None - else: - try: - category = ThreadCategory.objects.get(name=thread.category) - except ThreadCategory.DoesNotExist: - category = None + category, category_form = get_category_widget(request, thread.category) # Extract relative dates today = datetime.date.today() @@ -312,21 +301,7 @@ def set_category(request, mlist_fqdn, threadid): raise SuspiciousOperation store = get_store(request) - categories = [ (c.name, c.name.upper()) - for c in ThreadCategory.objects.all() ] \ - + [("", "No categories")] - category_form = CategoryForm(request.POST) - category_form["category"].field.choices = categories - - if not category_form.is_valid(): - return HttpResponse("Error settings category: invalid data", - content_type="text/plain", status=500) - - category_name = category_form.cleaned_data["category"] - try: - category = ThreadCategory.objects.get(name=category_name) - except ThreadCategory.DoesNotExist: - raise Http404("No such category: %s" % category_name) + category, category_form = get_category_widget(request) thread = store.get_thread(mlist_fqdn, threadid) if category.name != thread.category: thread.category = category.name |