You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/04/25 00:30:47 UTC

[22/50] git commit: [#2835] ticket:292 Better blog search

[#2835] ticket:292 Better blog search


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/b636c9d2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/b636c9d2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/b636c9d2

Branch: refs/heads/cj/5655
Commit: b636c9d2a5ec36d469b6743e19a9241c5d14857e
Parents: 891ff45
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Mar 25 12:31:07 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Wed Apr 24 16:34:41 2013 +0000

----------------------------------------------------------------------
 ForgeBlog/forgeblog/main.py                    |   48 +++++++++----------
 ForgeBlog/forgeblog/model/blog.py              |    5 +-
 ForgeBlog/forgeblog/templates/blog/search.html |   27 ++---------
 3 files changed, 28 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b636c9d2/ForgeBlog/forgeblog/main.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/main.py b/ForgeBlog/forgeblog/main.py
index 65f5c6d..91ed6b6 100644
--- a/ForgeBlog/forgeblog/main.py
+++ b/ForgeBlog/forgeblog/main.py
@@ -21,7 +21,6 @@ from datetime import datetime
 import urllib2
 
 # Non-stdlib imports
-import pkg_resources
 import pymongo
 from tg import config, expose, validate, redirect, flash
 from tg.decorators import with_trailing_slash, without_trailing_slash
@@ -35,15 +34,16 @@ from webob import exc
 from ming.orm import session
 
 # Pyforge-specific imports
-from allura.app import Application, ConfigOption, SitemapEntry
+from allura.app import Application, SitemapEntry
 from allura.app import DefaultAdminController
 from allura.lib import helpers as h
-from allura.lib.search import search, SearchError
+from allura.lib.search import search_app
 from allura.lib.decorators import require_post, Property
 from allura.lib.security import has_access, require_access
 from allura.lib import widgets as w
 from allura.lib.widgets.subscriptions import SubscribeForm
 from allura.lib.widgets import form_fields as ffw
+from allura.lib.widgets.search import SearchResults
 from allura import model as M
 from allura.controllers import BaseController, AppDiscussionController
 
@@ -67,6 +67,7 @@ class W:
     attachment_list = ffw.AttachmentList()
     preview_post_form = widgets.PreviewPostForm()
     subscribe_form = SubscribeForm()
+    search_results = SearchResults()
 
 class ForgeBlogApp(Application):
     __version__ = version.__version__
@@ -203,31 +204,26 @@ class RootController(BaseController):
         c.pager = W.pager
         return dict(posts=posts, page=page, limit=limit, count=post_count)
 
+    @with_trailing_slash
     @expose('jinja:forgeblog:templates/blog/search.html')
     @validate(dict(q=validators.UnicodeString(if_empty=None),
-                   history=validators.StringBool(if_empty=False)))
-    def search(self, q=None, history=None, **kw):
-        'local tool search'
-        results = []
-        search_error = None
-        count=0
-        if not q:
-            q = ''
-        else:
-            try:
-                results = search(
-                    q,
-                    fq=[
-                        'state_s:published',
-                        'is_history_b:%s' % history,
-                        'project_id_s:%s' % c.project._id,
-                        'mount_point_s:%s'% c.app.config.options.mount_point ],
-                    short_timeout=True,
-                    ignore_errors=False)
-            except SearchError as e:
-                search_error = e
-            if results: count=results.hits
-        return dict(q=q, history=history, results=results or [], count=count, search_error=search_error)
+                   history=validators.StringBool(if_empty=False),
+                   search_comments=validators.StringBool(if_empty=False),
+                   project=validators.StringBool(if_empty=False)))
+    def search(self, q=None, history=None, search_comments=None, project=None, limit=None, page=0, **kw):
+        c.search_results = W.search_results
+        search_params = kw
+        search_params.update({
+            'q': q or '',
+            'history': history,
+            'search_comments': search_comments,
+            'project': project,
+            'limit': limit,
+            'page': page,
+            'allowed_types': ['Blog Post', 'Blog Post Snapshot'],
+            'fq': ['state_s:published']
+        })
+        return search_app(**search_params)
 
     @expose('jinja:forgeblog:templates/blog/edit_post.html')
     @without_trailing_slash

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b636c9d2/ForgeBlog/forgeblog/model/blog.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/model/blog.py b/ForgeBlog/forgeblog/model/blog.py
index 1801c22..d5ec233 100644
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -74,8 +74,7 @@ class BlogPostSnapshot(M.Snapshot):
             return None
         result = super(BlogPostSnapshot, self).index()
         result.update(
-            title='Version %d of %s' % (
-                self.version, orig.shorthand_id()),
+            title='%s (version %d)' % (orig.title, self.version),
             type_s=self.type_s,
             text=self.data.text)
         return result
@@ -201,7 +200,7 @@ class BlogPost(M.VersionedArtifact, ActivityObject):
     def index(self):
         result = super(BlogPost, self).index()
         result.update(
-            title=self.slug,
+            title=self.title,
             type_s=self.type_s,
             state_s=self.state,
             snippet_s='%s: %s' % (self.title, h.text.truncate(self.text, 200)),

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b636c9d2/ForgeBlog/forgeblog/templates/blog/search.html
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/templates/blog/search.html b/ForgeBlog/forgeblog/templates/blog/search.html
index b8574ca..76b4372 100644
--- a/ForgeBlog/forgeblog/templates/blog/search.html
+++ b/ForgeBlog/forgeblog/templates/blog/search.html
@@ -20,29 +20,10 @@
 
 {% block title %}{{c.project.name}} / {{c.app.config.options.mount_label}} / Search{% endblock %}
 
-{% block header %}ForgeBlog Search{% endblock %}
+{% block header %}Search {{c.app.config.options.mount_point}}: {{q}}{% endblock %}
 
 {% block content %}
-  <form method="GET" action="search" class="grid-19">
-    <input type="text" name="q" value="{{q}}"/><br/>
-    Search history? <input type="checkbox" name="history" {% if history %}checked="checked"{% endif %}/><br/>
-    <input type="submit" value="Search"/>
-  </form>
-  <div style="clear: both">&nbsp;</div>
-  {% if search_error %}
-  <p>{{ search_error }}</p>
-  {% elif count==0 and q %}
-  <p>No results.</p>
-  {% elif count==1 and q %}
-  <p>{{count}} result.</p>
-  {% elif count > 1 and q %}
-  <p>{{count}} results.</p>
-  {% endif %}
-  {% for doc in results %}
-  <div>
-    <div class="grid-19"><a href="{{doc['url_s']}}">{{ h.get_first(doc, 'title') }}</a></div>
-    <p>{{doc.get('snippet_s', '...')}}</p>
-    <hr/>
-  </div>
-  {% endfor %}
+  {{c.search_results.display(results=results,q=q,history=history,
+     count=count,limit=limit,page=page,search_error=search_error,
+     sort_score_url=sort_score_url, sort_date_url=sort_date_url, sort_field=sort_field)}}
 {% endblock %}