Tweaks to sobol to make its use simpler: added a prerendered version of the results...
authorStephen Burrows <stephen.r.burrows@gmail.com>
Thu, 19 May 2011 15:48:06 +0000 (11:48 -0400)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Thu, 19 May 2011 15:48:18 +0000 (11:48 -0400)
philo/contrib/sobol/migrations/0001_initial.py [new file with mode: 0644]
philo/contrib/sobol/migrations/__init__.py [new file with mode: 0644]
philo/contrib/sobol/models.py
philo/contrib/sobol/search.py

diff --git a/philo/contrib/sobol/migrations/0001_initial.py b/philo/contrib/sobol/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..c94f54c
--- /dev/null
@@ -0,0 +1,136 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'Search'
+        db.create_table('sobol_search', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('string', self.gf('django.db.models.fields.TextField')()),
+        ))
+        db.send_create_signal('sobol', ['Search'])
+
+        # Adding model 'ResultURL'
+        db.create_table('sobol_resulturl', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('search', self.gf('django.db.models.fields.related.ForeignKey')(related_name='result_urls', to=orm['sobol.Search'])),
+            ('url', self.gf('django.db.models.fields.TextField')()),
+        ))
+        db.send_create_signal('sobol', ['ResultURL'])
+
+        # Adding model 'Click'
+        db.create_table('sobol_click', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('result', self.gf('django.db.models.fields.related.ForeignKey')(related_name='clicks', to=orm['sobol.ResultURL'])),
+            ('datetime', self.gf('django.db.models.fields.DateTimeField')()),
+        ))
+        db.send_create_signal('sobol', ['Click'])
+
+        # Adding model 'SearchView'
+        db.create_table('sobol_searchview', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('results_page', self.gf('django.db.models.fields.related.ForeignKey')(related_name='search_results_related', to=orm['philo.Page'])),
+            ('searches', self.gf('philo.models.fields.SlugMultipleChoiceField')()),
+            ('enable_ajax_api', self.gf('django.db.models.fields.BooleanField')(default=True)),
+            ('placeholder_text', self.gf('django.db.models.fields.CharField')(default='Search', max_length=75)),
+        ))
+        db.send_create_signal('sobol', ['SearchView'])
+
+
+    def backwards(self, orm):
+        
+        # Deleting model 'Search'
+        db.delete_table('sobol_search')
+
+        # Deleting model 'ResultURL'
+        db.delete_table('sobol_resulturl')
+
+        # Deleting model 'Click'
+        db.delete_table('sobol_click')
+
+        # Deleting model 'SearchView'
+        db.delete_table('sobol_searchview')
+
+
+    models = {
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'philo.attribute': {
+            'Meta': {'unique_together': "(('key', 'entity_content_type', 'entity_object_id'), ('value_content_type', 'value_object_id'))", 'object_name': 'Attribute'},
+            'entity_content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attribute_entity_set'", 'to': "orm['contenttypes.ContentType']"}),
+            'entity_object_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
+            'value_content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attribute_value_set'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
+            'value_object_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'})
+        },
+        'philo.node': {
+            'Meta': {'object_name': 'Node'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['philo.Node']"}),
+            'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}),
+            'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'view_content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'node_view_set'", 'to': "orm['contenttypes.ContentType']"}),
+            'view_object_id': ('django.db.models.fields.PositiveIntegerField', [], {})
+        },
+        'philo.page': {
+            'Meta': {'object_name': 'Page'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'template': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pages'", 'to': "orm['philo.Template']"}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        'philo.template': {
+            'Meta': {'object_name': 'Template'},
+            'code': ('philo.models.fields.TemplateField', [], {}),
+            'documentation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'mimetype': ('django.db.models.fields.CharField', [], {'default': "'text/html'", 'max_length': '255'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['philo.Template']"}),
+            'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'db_index': 'True'}),
+            'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
+        },
+        'sobol.click': {
+            'Meta': {'ordering': "['datetime']", 'object_name': 'Click'},
+            'datetime': ('django.db.models.fields.DateTimeField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'result': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'clicks'", 'to': "orm['sobol.ResultURL']"})
+        },
+        'sobol.resulturl': {
+            'Meta': {'ordering': "['url']", 'object_name': 'ResultURL'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'search': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'result_urls'", 'to': "orm['sobol.Search']"}),
+            'url': ('django.db.models.fields.TextField', [], {})
+        },
+        'sobol.search': {
+            'Meta': {'ordering': "['string']", 'object_name': 'Search'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'string': ('django.db.models.fields.TextField', [], {})
+        },
+        'sobol.searchview': {
+            'Meta': {'object_name': 'SearchView'},
+            'enable_ajax_api': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'placeholder_text': ('django.db.models.fields.CharField', [], {'default': "'Search'", 'max_length': '75'}),
+            'results_page': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'search_results_related'", 'to': "orm['philo.Page']"}),
+            'searches': ('philo.models.fields.SlugMultipleChoiceField', [], {})
+        }
+    }
+
+    complete_apps = ['sobol']
diff --git a/philo/contrib/sobol/migrations/__init__.py b/philo/contrib/sobol/migrations/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index dbf37ef..37bb29e 100644 (file)
@@ -204,7 +204,7 @@ class SearchView(MultiView):
                                        })
                                else:
                                        context.update({
-                                               'searches': [{'verbose_name': verbose_name, 'slug': slug, 'url': self.reverse('ajax_api_view', kwargs={'slug': slug}, node=request.node), 'result_template': registry[slug].result_template} for slug, verbose_name in registry.iterchoices() if slug in self.searches]
+                                               'searches': [{'verbose_name': verbose_name, 'slug': slug, 'url': "%s?%s=%s" % (self.reverse('ajax_api_view', kwargs={'slug': slug}, node=request.node), SEARCH_ARG_GET_KEY, search_string), 'result_template': registry[slug].result_template} for slug, verbose_name in registry.iterchoices() if slug in self.searches]
                                        })
                else:
                        form = SearchForm()
@@ -224,7 +224,8 @@ class SearchView(MultiView):
                        raise Http404
                
                search_instance = self.get_search_instance(slug, search_string)
-               response = HttpResponse(json.dumps({
+               
+               return HttpResponse(json.dumps({
                        'results': [result.get_context() for result in search_instance.results],
-               }))
-               return response
\ No newline at end of file
+                       'rendered': [result.render() for result in search_instance.results]
+               }))
\ No newline at end of file
index 6cd577d..f1a2c6b 100644 (file)
@@ -115,7 +115,8 @@ class Result(object):
                context = self.get_extra_context()
                context.update({
                        'title': self.get_title(),
-                       'url': self.get_url()
+                       'url': self.get_url(),
+                       'result': self.result
                })
                return context
        
@@ -355,9 +356,6 @@ class GoogleSearch(JSONSearch):
        
        def get_result_url(self, result):
                return result['unescapedUrl']
-       
-       def get_result_extra_context(self, result):
-               return result
 
 
 registry.register(GoogleSearch)