src/catedit/views/social.py
changeset 48 353e246a8f59
parent 47 ddba4624d661
child 53 0acc8b2adcb9
--- a/src/catedit/views/social.py	Mon Mar 02 14:39:22 2015 +0100
+++ b/src/catedit/views/social.py	Tue Mar 03 13:04:38 2015 +0100
@@ -7,7 +7,7 @@
 from catedit.views.utils import check_user_status_and_repo_access, \
                                 get_comments, post_comment, get_commits, \
                                 get_issues, get_category_list_for_commit
-from catedit.utils import make_differences_list
+from catedit.utils import make_differences_list, compare_categories
 from flask import render_template, request, redirect, url_for, \
                   abort, Blueprint, session
 from flask_wtf import Form
@@ -102,13 +102,22 @@
 
 @module.route("/<string:repository>/changesets/<string:changeset_id>",
               methods=["GET", "POST"],
-              defaults={"per_page": 10, "page": 1})
+              defaults={"per_page": 10, "page": 1, "details_cat_id": None})
 @module.route(
     "/<string:repository>/changesets/<string:changeset_id>"
     + "/page/<int:page>-per_page-<int:per_page>",
+    defaults={"details_cat_id": None},
     methods=["GET", "POST"]
 )
-def changeset(repository, changeset_id, per_page, page):
+@module.route("/<string:repository>/changesets/"
+              + "<string:changeset_id>/details_<string:details_cat_id>",
+              methods=["GET", "POST"],
+              defaults={"per_page": 10, "page": 1})
+@module.route("/<string:repository>/changesets/"
+              + "<string:changeset_id>/page/<int:page>-"
+              + "per_page-<int:per_page>-details_<string:details_cat_id>",
+              methods=["GET", "POST"])
+def changeset(repository, changeset_id, per_page, page, details_cat_id):
     """
         View that displays a snapshot of the repository as it was for a given
         changeset, and the related discussion to this changeset. Allows
@@ -146,7 +155,7 @@
 
     category_differences_dict = {
         list_type: [
-            (first_category.label, second_category.label)
+            (first_category.label, second_category.label, first_category.cat_id)
             for (first_category, second_category) in diff_list
         ] if list_type == "modifications" else [
             category.label
@@ -158,6 +167,31 @@
         ).items()
     }
 
+    changes_details = None
+    print(str(details_cat_id))
+    if details_cat_id is not None:
+        if (
+        details_cat_id not in [category.cat_id
+        for category in old_category_list]
+        or
+        details_cat_id not in [category.cat_id
+        for category in new_category_list]
+        ):
+            abort(404)
+        else:
+            old_category = next(
+                category
+                for category in old_category_list
+                if category.cat_id == details_cat_id
+            )
+            new_category = next(
+                category
+                for category in new_category_list
+                if category.cat_id == details_cat_id
+            )
+            changes_details = compare_categories(old_category, new_category)
+            changes_details["cat_id"] = details_cat_id
+
     old_category_list_template = []
     for category in old_category_list:
         old_category_list_template.append({
@@ -183,6 +217,7 @@
             old_cat_list=old_category_list_template,
             new_cat_list=new_category_list_template,
             differences=category_differences_dict,
+            changes_details=changes_details,
             comments=comments_list,
             changeset_id=changeset_id,
             comment_form=comment_form,
@@ -201,7 +236,9 @@
             "social.changeset",
             repository=repository,
             changeset_id=return_id,
-            per_page=per_page
+            page=1,
+            per_page=per_page,
+            changes_details=changes_details
         ))
     else:
         # Form didn't validate
@@ -211,6 +248,7 @@
             new_cat_list=new_category_list_template,
             comments=comments_list,
             changeset_id=changeset_id,
+            change_details=change_details,
             comment_form=comment_form,
             current_repository=repository,
             comments_pagination=pagination,