diff rhodecode/controllers/summary.py @ 1605:df59c0503636 beta

implements #215 Repository view uses a README (text/markdown + rst)
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 27 Oct 2011 03:26:02 +0200
parents 87ec80c280bb
children e886f91fcb71
line wrap: on
line diff
--- a/rhodecode/controllers/summary.py	Thu Oct 27 03:21:05 2011 +0200
+++ b/rhodecode/controllers/summary.py	Thu Oct 27 03:26:02 2011 +0200
@@ -23,23 +23,25 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import traceback
 import calendar
 import logging
 from time import mktime
-from datetime import datetime, timedelta, date
+from datetime import timedelta, date
+from itertools import product
 
-from vcs.exceptions import ChangesetError
+from vcs.exceptions import ChangesetError, EmptyRepositoryError, \
+    NodeDoesNotExistError
 
 from pylons import tmpl_context as c, request, url
 from pylons.i18n.translation import _
 
-from rhodecode.model.db import Statistics, Repository
-from rhodecode.model.repo import RepoModel
-
+from rhodecode.model.db import Statistics
+from rhodecode.lib import ALL_READMES, ALL_EXTS
 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
 from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.utils import EmptyChangeset
-
+from rhodecode.lib.markup_renderer import MarkupRenderer
 from rhodecode.lib.celerylib import run_task
 from rhodecode.lib.celerylib.tasks import get_commits_stats, \
     LANGUAGES_EXTENSIONS_MAP
@@ -48,6 +50,9 @@
 
 log = logging.getLogger(__name__)
 
+README_FILES = [''.join([x[0][0], x[1][0]]) for x in 
+                    sorted(list(product(ALL_READMES, ALL_EXTS)),
+                           key=lambda y:y[0][1] + y[1][1])]
 
 class SummaryController(BaseRepoController):
 
@@ -161,8 +166,33 @@
         if c.enable_downloads:
             c.download_options = self._get_download_links(c.rhodecode_repo)
 
+        c.readme_data,c.readme_file = self.__get_readme_data()
         return render('summary/summary.html')
 
+    def __get_readme_data(self):
+        readme_data = None
+        readme_file = None
+        
+        try:
+            cs = c.rhodecode_repo.get_changeset('tip')
+            renderer = MarkupRenderer()
+            for f in README_FILES:
+                try:
+                    readme = cs.get_node(f)
+                    readme_file = f
+                    readme_data = renderer.render(readme.content, f)
+                    break
+                except NodeDoesNotExistError:
+                    continue
+        except ChangesetError:
+            pass
+        except EmptyRepositoryError:
+            pass
+        except Exception:
+            log.error(traceback.format_exc())        
+
+        return readme_data, readme_file
+
     def _get_download_links(self, repo):
 
         download_l = []
@@ -181,3 +211,4 @@
         download_l.append(tags_group)
 
         return download_l
+