changeset 1343:a04fe5986109 beta

#47 implemented basic gui for browsing repo groups
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 23 May 2011 00:00:03 +0200
parents 9dacacc5b7c2
children eef7a1b953e8
files rhodecode/controllers/admin/repos_groups.py rhodecode/controllers/home.py rhodecode/model/db.py rhodecode/model/scm.py rhodecode/templates/admin/repos_groups/repos_groups.html rhodecode/templates/index.html
diffstat 6 files changed, 86 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos_groups.py	Sun May 22 21:09:02 2011 +0200
+++ b/rhodecode/controllers/admin/repos_groups.py	Mon May 23 00:00:03 2011 +0200
@@ -52,7 +52,7 @@
 
         c.group = Group.get(id)
         if c.group:
-            c.group_repos = c.group.repositories
+            c.group_repos = c.group.repositories.all()
         else:
             return redirect(url('repos_group'))
 
@@ -82,6 +82,10 @@
 
         c.repo_cnt = len(c.repos_list)
 
+
+        c.groups = self.sa.query(Group).order_by(Group.group_name)\
+            .filter(Group.group_parent_id == id).all()
+
         return render('admin/repos_groups/repos_groups.html')
 
     def edit(self, id, format='html'):
--- a/rhodecode/controllers/home.py	Sun May 22 21:09:02 2011 +0200
+++ b/rhodecode/controllers/home.py	Mon May 23 00:00:03 2011 +0200
@@ -31,7 +31,7 @@
 
 from rhodecode.lib.auth import LoginRequired
 from rhodecode.lib.base import BaseController, render
-
+from rhodecode.model.db import Group
 
 log = logging.getLogger(__name__)
 
@@ -64,6 +64,12 @@
                                   reverse=False)
 
         c.repo_cnt = len(c.repos_list)
+
+
+        c.groups = self.sa.query(Group)\
+            .filter(Group.group_parent_id == None).all()
+
+
         return render('/index.html')
 
     def repo_switcher(self):
--- a/rhodecode/model/db.py	Sun May 22 21:09:02 2011 +0200
+++ b/rhodecode/model/db.py	Mon May 23 00:00:03 2011 +0200
@@ -297,10 +297,12 @@
 class Group(Base):
     __tablename__ = 'groups'
     __table_args__ = (UniqueConstraint('group_name'), {'useexisting':True},)
+    __mapper_args__ = {'order_by':'group_name'}
 
     group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
     group_name = Column("group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
     group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
+    group_description = Column("group_description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
     parent_group = relationship('Group', remote_side=group_id)
 
@@ -336,7 +338,7 @@
 
     @property
     def repositories(self):
-        return Session.query(Repository).filter(Repository.group == self).all()
+        return Session.query(Repository).filter(Repository.group == self)
 
 class Permission(Base):
     __tablename__ = 'permissions'
--- a/rhodecode/model/scm.py	Sun May 22 21:09:02 2011 +0200
+++ b/rhodecode/model/scm.py	Mon May 23 00:00:03 2011 +0200
@@ -119,14 +119,16 @@
         return repos_list
 
     def get_repos(self, all_repos=None):
-        """Get all repos from db and for each repo create it's
+        """
+        Get all repos from db and for each repo create it's
         backend instance and fill that backed with information from database
 
-        :param all_repos: give specific repositories list, good for filtering
-            this have to be a list of  just the repository names
+        :param all_repos: list of repository names as strings
+            give specific repositories list, good for filtering
         """
         if all_repos is None:
             repos = self.sa.query(Repository)\
+                        .filter(Repository.group_id == None)\
                         .order_by(Repository.repo_name).all()
             all_repos = [r.repo_name for r in repos]
 
--- a/rhodecode/templates/admin/repos_groups/repos_groups.html	Sun May 22 21:09:02 2011 +0200
+++ b/rhodecode/templates/admin/repos_groups/repos_groups.html	Mon May 23 00:00:03 2011 +0200
@@ -7,7 +7,12 @@
 
 
 <%def name="breadcrumbs_links()">
-    ${_('Group')} &raquo; ${c.group.group_name} - ${_(' %s repositories' % c.repo_cnt)} 
+    ${_('Repository Groups')} 
+    %if c.group.parent_group:
+        &raquo; ${h.link_to(c.group.parent_group.group_name,h.url('repos_group',id=c.group.parent_group.group_id))}
+    %endif
+    
+    &raquo; "${c.group.group_name}" ${_('with %s repositories' % c.repo_cnt)} 
 </%def>
 <%def name="page_nav()">
     ${self.menu('admin')}
@@ -33,6 +38,35 @@
     </div>
     <!-- end box / title -->
         <div class="table">
+           % if c.groups:
+            <table>
+            
+                <thead>
+                    <tr>
+                        <th class="left"><a href="#">${_('Group name')}</a></th>
+                        <th class="left"><a href="#">${_('Description')}</a></th>
+                        <th class="left"><a href="#">${_('Number of repositories')}</a></th>
+                    </tr>
+                </thead>
+                
+                ## REPO GROUPS
+                
+                % for gr in c.groups:
+                  <tr>
+                      <td>
+                          <div style="white-space: nowrap">
+                          <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
+                          ${h.link_to(gr.group_name,url('repos_group',id=gr.group_id))}
+                          </div>
+                      </td>
+                      <td>${gr.group_description}</td>
+                      <td><b>${gr.repositories.count()}</b></td>
+                  </tr>
+                % endfor            
+                
+            </table>
+            <div style="height: 20px"></div>
+            % endif        
             <table>
             <thead>
                 <tr>
@@ -112,7 +146,7 @@
                       %endif:
                     </td>
                 </tr>
-            %endfor
+            %endfor          
             </tbody>
             </table>
             </div>
--- a/rhodecode/templates/index.html	Sun May 22 21:09:02 2011 +0200
+++ b/rhodecode/templates/index.html	Mon May 23 00:00:03 2011 +0200
@@ -46,6 +46,35 @@
 	    </div>
 	    <!-- end box / title -->
         <div class="table">
+           % if c.groups:
+            <table>
+            
+                <thead>
+                    <tr>
+                        <th class="left"><a href="#">${_('Group name')}</a></th>
+                        <th class="left"><a href="#">${_('Description')}</a></th>
+                        <th class="left"><a href="#">${_('Number of repositories')}</a></th>
+                    </tr>
+                </thead>
+                
+                ## REPO GROUPS
+                
+                % for gr in c.groups:
+                  <tr>
+                      <td>
+                          <div style="white-space: nowrap">
+                          <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
+                          ${h.link_to(gr.group_name,url('repos_group',id=gr.group_id))}
+                          </div>
+                      </td>
+                      <td>${gr.group_description}</td>
+                      <td><b>${gr.repositories.count()}</b></td>
+                  </tr>
+                % endfor            
+                
+            </table>
+            <div style="height: 20px"></div>
+            % endif
             <table>
             <thead>
 	            <tr>
@@ -126,6 +155,7 @@
 		            </td>
 		        </tr>
 		    %endfor
+		    
             </tbody>
             </table>
             </div>