)]}'
{"horizon/static/horizon/js/horizon.membership.js":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"b293b9e34293eeaf221c7f5cfb1ed896000cce28","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    var $dropdown \u003d member_el.find(\"li.member\").siblings(\u0027.dropdown\u0027);"},{"line_number":164,"context_line":"    var $role_items \u003d $dropdown.children(\u0027.role_dropdown\u0027).children(\u0027li\u0027);"},{"line_number":165,"context_line":"    "},{"line_number":166,"context_line":"    $role_items.each(function (idx, el) {"},{"line_number":167,"context_line":"      if (_.contains(role_ids, $(el).data(\u0027role-id\u0027))) {"},{"line_number":168,"context_line":"        $(el).addClass(\u0027selected\u0027);"}],"source_content_type":"text/javascript","patch_set":11,"id":"AAAAQn%2F%2FIMA%3D","line":165,"updated":"2013-08-06 20:02:52.000000000","message":"extra whitespace","commit_id":"129f9637576ccbc0694a40e3ebabc8661388bbb2"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"b293b9e34293eeaf221c7f5cfb1ed896000cce28","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    var template \u003d horizon.templates.compiled_templates[\"#membership_template\"],"},{"line_number":205,"context_line":"    params \u003d {data_id: str_id,"},{"line_number":206,"context_line":"    \t\t  step_slug: step_slug,"},{"line_number":207,"context_line":"              default_role: horizon.membership.roles[horizon.membership.default_role_id[step_slug]],"},{"line_number":208,"context_line":"              display_name: display_name,"},{"line_number":209,"context_line":"              text: text,"}],"source_content_type":"text/javascript","patch_set":11,"id":"AAAAQn%2F%2FIME%3D","line":206,"updated":"2013-08-06 20:02:52.000000000","message":"remove tabs","commit_id":"129f9637576ccbc0694a40e3ebabc8661388bbb2"}],"openstack_dashboard/api/keystone.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b8884ed349a7024f9f6cc212aab8ba066b7167c6","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    if project:"},{"line_number":410,"context_line":"        project_groups \u003d []"},{"line_number":411,"context_line":"        for group in groups:"},{"line_number":412,"context_line":"            roles \u003d roles_for_group(request, group\u003dgroup.id, project\u003dproject)"},{"line_number":413,"context_line":"            if roles and len(roles) \u003e 0:"},{"line_number":414,"context_line":"                project_groups.append(group)"},{"line_number":415,"context_line":"        groups \u003d project_groups"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2Fl%2BE%3D","line":412,"updated":"2013-07-26 22:29:28.000000000","message":"Looks awful, but there is no API in Keystone to get list of Groups by Project ID. This is the only workaround.","commit_id":"dd1cfd0d6891e2482ecf8219318f04f13b14036e"}],"openstack_dashboard/dashboards/admin/groups/tests.py":[{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"b293b9e34293eeaf221c7f5cfb1ed896000cce28","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        groups \u003d self._get_groups(domain_id)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        api.keystone.group_list(IgnoreArg()) \\"},{"line_number":67,"context_line":"            .AndReturn(groups)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.mox.ReplayAll()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAQn%2F%2FILQ%3D","line":67,"updated":"2013-08-06 20:02:52.000000000","message":"all changes in this file seem unnecessary","commit_id":"129f9637576ccbc0694a40e3ebabc8661388bbb2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"fbb07dcf8563591b9d7a403d6f77793c66fc9e0f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        groups \u003d self._get_groups(domain_id)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        api.keystone.group_list(IgnoreArg()) \\"},{"line_number":67,"context_line":"            .AndReturn(groups)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.mox.ReplayAll()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAQn%2F%2FH8s%3D","line":67,"in_reply_to":"AAAAQn%2F%2FILQ%3D","updated":"2013-08-06 20:56:07.000000000","message":"This was part of the group assignment implementation, missed reverting this back.","commit_id":"129f9637576ccbc0694a40e3ebabc8661388bbb2"}],"openstack_dashboard/dashboards/admin/groups/views.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b8884ed349a7024f9f6cc212aab8ba066b7167c6","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        domain_context \u003d self.request.session.get(\u0027domain_context\u0027, None)"},{"line_number":57,"context_line":"        try:"},{"line_number":58,"context_line":"            groups \u003d api.keystone.group_list(self.request,"},{"line_number":59,"context_line":"                                             domain\u003ddomain_context)"},{"line_number":60,"context_line":"        except:"},{"line_number":61,"context_line":"            exceptions.handle(self.request,"},{"line_number":62,"context_line":"                              _(\u0027Unable to retrieve group list.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2Fl%2Bw%3D","line":59,"updated":"2013-07-26 22:29:28.000000000","message":"Moved the filtering logic to keystone.py","commit_id":"dd1cfd0d6891e2482ecf8219318f04f13b14036e"}],"openstack_dashboard/dashboards/admin/projects/tables.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b8884ed349a7024f9f6cc212aab8ba066b7167c6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        pagination_param \u003d \"tenant_marker\""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"class RemoveUserAction(tables.BatchAction):"},{"line_number":114,"context_line":"    name \u003d \"remove_user\""},{"line_number":115,"context_line":"    action_present \u003d _(\"Remove\")"},{"line_number":116,"context_line":"    action_past \u003d _(\"Removed\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2Fl%2Bg%3D","side":"PARENT","line":113,"updated":"2013-07-26 22:29:28.000000000","message":"Orhpan code, the table class below is not accessible anywhere. \n\nProject role assignment to Users is handled by JS code.","commit_id":"07b134334fa48b34a3483aab6ff064992f6b7d03"}],"openstack_dashboard/dashboards/admin/projects/urls.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b8884ed349a7024f9f6cc212aab8ba066b7167c6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        UpdateProjectView.as_view(), name\u003d\u0027update\u0027),"},{"line_number":39,"context_line":"    url(r\u0027^(?P\u003ctenant_id\u003e[^/]+)/usage/$\u0027,"},{"line_number":40,"context_line":"        ProjectUsageView.as_view(), name\u003d\u0027usage\u0027),"},{"line_number":41,"context_line":"    url(r\u0027^(?P\u003ctenant_id\u003e[^/]+)/create_user/$\u0027,"},{"line_number":42,"context_line":"        CreateUserView.as_view(), name\u003d\u0027create_user\u0027),"},{"line_number":43,"context_line":")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2Fl94%3D","side":"PARENT","line":41,"updated":"2013-07-26 22:29:28.000000000","message":"Opened the link directly in browser, it is just broken. This is just orphan code.","commit_id":"07b134334fa48b34a3483aab6ff064992f6b7d03"}],"openstack_dashboard/dashboards/admin/projects/views.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b8884ed349a7024f9f6cc212aab8ba066b7167c6","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return tenants"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class UsersView(tables.MultiTableView):"},{"line_number":101,"context_line":"    table_classes \u003d (TenantUsersTable, AddUsersTable)"},{"line_number":102,"context_line":"    template_name \u003d \u0027admin/projects/users.html\u0027"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2Fl%2BY%3D","side":"PARENT","line":100,"updated":"2013-07-26 22:29:28.000000000","message":"The list of Users is accessed through the workflow template.  I tried hitting the url that maps to this view, it just throws a bunch of error.","commit_id":"07b134334fa48b34a3483aab6ff064992f6b7d03"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b8884ed349a7024f9f6cc212aab8ba066b7167c6","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return initial"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"class CreateUserView(CreateView):"},{"line_number":197,"context_line":"    form_class \u003d CreateUser"},{"line_number":198,"context_line":"    template_name \u003d \"admin/projects/create_user.html\""},{"line_number":199,"context_line":"    success_url \u003d reverse_lazy(\u0027horizon:admin:projects:index\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2Fl%2Bc%3D","side":"PARENT","line":196,"updated":"2013-07-26 22:29:28.000000000","message":"There is no option for creating users from Project panel.","commit_id":"07b134334fa48b34a3483aab6ff064992f6b7d03"}],"openstack_dashboard/dashboards/admin/projects/workflows.py":[{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"6f46a8a79bf3cb65b11351d5f8747689ffda0185","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def __init__(self, request\u003dNone, context_seed\u003dNone, entry_point\u003dNone,"},{"line_number":220,"context_line":"                 *args, **kwargs):"},{"line_number":221,"context_line":"        super(CreateProject, self).__init__(request\u003drequest,"},{"line_number":222,"context_line":"                                            context_seed\u003dcontext_seed,"},{"line_number":223,"context_line":"                                            entry_point\u003dentry_point,"},{"line_number":224,"context_line":"                                            *args,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2B6mU%3D","line":221,"updated":"2013-08-09 23:19:52.000000000","message":"Is this method needed?","commit_id":"ee8bdb7e15d0ce03da90e268915d9fcff41e46c5"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"97761e4e9dcca0ea914dacc9138cee11af6cc203","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def __init__(self, request\u003dNone, context_seed\u003dNone, entry_point\u003dNone,"},{"line_number":220,"context_line":"                 *args, **kwargs):"},{"line_number":221,"context_line":"        super(CreateProject, self).__init__(request\u003drequest,"},{"line_number":222,"context_line":"                                            context_seed\u003dcontext_seed,"},{"line_number":223,"context_line":"                                            entry_point\u003dentry_point,"},{"line_number":224,"context_line":"                                            *args,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2B6OI%3D","line":221,"in_reply_to":"AAAAQn%2F%2B6mU%3D","updated":"2013-08-10 04:34:10.000000000","message":"Actually this is a leftover from the Role Assignment to Group code, it will make sense on the next patch I\u0027ll submit. :)","commit_id":"ee8bdb7e15d0ce03da90e268915d9fcff41e46c5"},{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"6f46a8a79bf3cb65b11351d5f8747689ffda0185","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                     UpdateProjectMembers,"},{"line_number":315,"context_line":"                     UpdateProjectQuota)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def __init__(self, request\u003dNone, context_seed\u003dNone, entry_point\u003dNone,"},{"line_number":318,"context_line":"                 *args, **kwargs):"},{"line_number":319,"context_line":"        super(UpdateProject, self).__init__(request\u003drequest,"},{"line_number":320,"context_line":"                                            context_seed\u003dcontext_seed,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2B6mQ%3D","line":317,"updated":"2013-08-09 23:19:52.000000000","message":"or this one?","commit_id":"ee8bdb7e15d0ce03da90e268915d9fcff41e46c5"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"97761e4e9dcca0ea914dacc9138cee11af6cc203","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                     UpdateProjectMembers,"},{"line_number":315,"context_line":"                     UpdateProjectQuota)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def __init__(self, request\u003dNone, context_seed\u003dNone, entry_point\u003dNone,"},{"line_number":318,"context_line":"                 *args, **kwargs):"},{"line_number":319,"context_line":"        super(UpdateProject, self).__init__(request\u003drequest,"},{"line_number":320,"context_line":"                                            context_seed\u003dcontext_seed,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2B6OE%3D","line":317,"in_reply_to":"AAAAQn%2F%2B6mQ%3D","updated":"2013-08-10 04:34:10.000000000","message":"Same here.","commit_id":"ee8bdb7e15d0ce03da90e268915d9fcff41e46c5"},{"author":{"_account_id":5733,"name":"Kieran Spear","email":"kispear@gmail.com","username":"kspear"},"change_message_id":"6f46a8a79bf3cb65b11351d5f8747689ffda0185","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            return False"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Get our role options"},{"line_number":346,"context_line":"        available_roles \u003d api.keystone.role_list(request)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        # update project members"},{"line_number":349,"context_line":"        users_to_modify \u003d 0"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2B6lk%3D","line":346,"updated":"2013-08-09 23:19:52.000000000","message":"The workflow view will handle this if it raises, but it would be better to catch the failure and add a message about exactly what happened.","commit_id":"ee8bdb7e15d0ce03da90e268915d9fcff41e46c5"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"97761e4e9dcca0ea914dacc9138cee11af6cc203","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            return False"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Get our role options"},{"line_number":346,"context_line":"        available_roles \u003d api.keystone.role_list(request)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        # update project members"},{"line_number":349,"context_line":"        users_to_modify \u003d 0"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAQn%2F%2B6N8%3D","line":346,"in_reply_to":"AAAAQn%2F%2B6lk%3D","updated":"2013-08-10 04:34:10.000000000","message":"Good catch, I\u0027ll fix it on the next patch.","commit_id":"ee8bdb7e15d0ce03da90e268915d9fcff41e46c5"}],"openstack_dashboard/static/dashboard/less/horizon.less":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"b8884ed349a7024f9f6cc212aab8ba066b7167c6","unresolved":false,"context_lines":[{"line_number":1352,"context_line":""},{"line_number":1353,"context_line":"/* Project and Group-Role Membership UI */"},{"line_number":1354,"context_line":".project_membership,"},{"line_number":1355,"context_line":".group_role_membership {"},{"line_number":1356,"context_line":"  min-height: 200px;"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    /* Buttons */"}],"source_content_type":"text/x-less","patch_set":3,"id":"AAAAQn%2F%2Fl%2BM%3D","line":1355,"updated":"2013-07-26 22:29:28.000000000","message":"The javascript code for handling role assignment is tightly couple to CSS class. I needed to define separate CSS just for Group role management to avoid conflict with the User role management.","commit_id":"dd1cfd0d6891e2482ecf8219318f04f13b14036e"}]}
