[extensions-web] Make errorreports Extension specific, not ExtensionVersion specific



commit 1e54c56eb272fc05630427bb25c6a2c986944e0c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Thu Nov 24 00:13:47 2011 -0500

    Make errorreports Extension specific, not ExtensionVersion specific
    
    The guarantee that a user would grab the correct version to report an error
    to is very slim... and with our upcoming multiversion feature, we can't even
    guarantee that "the latest version" is the one the user installed. We're
    better off detecting the extension version and sticking it in the pre-built
    error report.

 ...ort_version__add_field_errorreport_extension.py |   87 ++++++++++++++++++++
 sweettooth/errorreports/models.py                  |    4 +-
 .../templates/errorreports/report.html             |    6 +-
 .../templates/errorreports/report_mail.txt         |    2 +-
 sweettooth/errorreports/views.py                   |   24 ++----
 .../extensions/templates/extensions/comments.html  |    2 +-
 6 files changed, 103 insertions(+), 22 deletions(-)
---
diff --git a/sweettooth/errorreports/migrations/0005_auto__del_field_errorreport_version__add_field_errorreport_extension.py b/sweettooth/errorreports/migrations/0005_auto__del_field_errorreport_version__add_field_errorreport_extension.py
new file mode 100644
index 0000000..315d1db
--- /dev/null
+++ b/sweettooth/errorreports/migrations/0005_auto__del_field_errorreport_version__add_field_errorreport_extension.py
@@ -0,0 +1,87 @@
+# 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):
+        
+        # Deleting field 'ErrorReport.version'
+        db.delete_column('errorreports_errorreport', 'version_id')
+
+        # Adding field 'ErrorReport.extension'
+        db.add_column('errorreports_errorreport', 'extension', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['extensions.Extension'], null=True), keep_default=False)
+
+
+    def backwards(self, orm):
+        
+        # User chose to not deal with backwards NULL issues for 'ErrorReport.version'
+        raise RuntimeError("Cannot reverse this migration. 'ErrorReport.version' and its values cannot be restored.")
+
+        # Deleting field 'ErrorReport.extension'
+        db.delete_column('errorreports_errorreport', 'extension_id')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        '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'})
+        },
+        'errorreports.errorreport': {
+            'Meta': {'object_name': 'ErrorReport'},
+            'can_contact': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'extension': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['extensions.Extension']", 'null': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"})
+        },
+        'extensions.extension': {
+            'Meta': {'object_name': 'Extension'},
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'description': ('django.db.models.fields.TextField', [], {}),
+            'icon': ('django.db.models.fields.files.ImageField', [], {'default': "'/static/images/plugin.png'", 'max_length': '100', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+            'screenshot': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100', 'blank': 'True'}),
+            'slug': ('autoslug.fields.AutoSlugField', [], {'unique_with': '()', 'max_length': '50', 'populate_from': 'None', 'db_index': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200', 'db_index': 'True'})
+        }
+    }
+
+    complete_apps = ['errorreports']
diff --git a/sweettooth/errorreports/models.py b/sweettooth/errorreports/models.py
index 1dc9e38..3c3e512 100644
--- a/sweettooth/errorreports/models.py
+++ b/sweettooth/errorreports/models.py
@@ -2,12 +2,12 @@
 from django.contrib import auth
 from django.db import models
 from django.dispatch import Signal
-from extensions.models import ExtensionVersion
+from extensions.models import Extension
 
 class ErrorReport(models.Model):
     comment = models.TextField(blank=True)
     user = models.ForeignKey(auth.models.User, related_name="+")
-    version = models.ForeignKey(ExtensionVersion)
+    extension = models.ForeignKey(Extension, null=True)
     can_contact = models.BooleanField()
 
 error_reported = Signal(providing_args=["request", "version", "report"])
diff --git a/sweettooth/errorreports/templates/errorreports/report.html b/sweettooth/errorreports/templates/errorreports/report.html
index fb00cd1..24ea2a2 100644
--- a/sweettooth/errorreports/templates/errorreports/report.html
+++ b/sweettooth/errorreports/templates/errorreports/report.html
@@ -1,10 +1,10 @@
 {% extends "base.html" %}
-{% block title %}Report Error for "{{ version.extension.name }}" - {{ block.super }}{% endblock %}
+{% block title %}Report Error for "{{ extension.name }}" - {{ block.super }}{% endblock %}
 {% block body %}
-<h2><em>{{ version.extension.name }}</em> is malfunctioning?</h2>
+<h2><em>{{ extension.name }}</em> is malfunctioning?</h2>
 
 <p>Please look through the information below and edit out any unwanted information.</p>
-<form action="" method="POST" id="error_report" data-uuid="{{ version.extension.uuid }}">
+<form action="" method="POST" id="error_report" data-uuid="{{ extension.uuid }}">
   {% csrf_token %}
 
   <h3> Comments for the author </h3>
diff --git a/sweettooth/errorreports/templates/errorreports/report_mail.txt b/sweettooth/errorreports/templates/errorreports/report_mail.txt
index 65e6abf..3c400df 100644
--- a/sweettooth/errorreports/templates/errorreports/report_mail.txt
+++ b/sweettooth/errorreports/templates/errorreports/report_mail.txt
@@ -1,4 +1,4 @@
-Your extension, "{{ extension.name }}", version {{ version.version }} has received an error report from {{ report.user }}:
+Your extension, "{{ extension.name }}" has received an error report from {{ report.user }}:
 
 {{ report.comments }}
 
diff --git a/sweettooth/errorreports/views.py b/sweettooth/errorreports/views.py
index e0040ff..21c87b4 100644
--- a/sweettooth/errorreports/views.py
+++ b/sweettooth/errorreports/views.py
@@ -9,15 +9,13 @@ from django.template.loader import render_to_string
 
 from errorreports.models import ErrorReport, error_reported
 from errorreports.forms import ErrorReportForm
-from extensions.models import ExtensionVersion
+from extensions.models import Extension
 
 from decorators import post_only_view, model_view
 from utils import render
 
- model_view(ExtensionVersion.objects.visible())
-def report_error_view(request, obj):
-    extension, version = obj.extension, obj
-
+ model_view(Extension.objects.visible())
+def report_error_view(request, extension):
     if request.method == 'POST':
         form = ErrorReportForm(data=request.POST)
 
@@ -25,22 +23,20 @@ def report_error_view(request, obj):
             return HttpResponseForbidden()
 
         if form.is_valid():
-            report = form.save(request=request, version=version)
+            report = form.save(request=request, extension=extension)
             error_reported.send(sender=request, request=request,
-                                version=version, report=report)
+                                extension=extension, report=report)
 
             messages.info(request, "Thank you for your error report!")
 
-            return redirect('extensions-version-detail',
-                            pk=version.pk,
+            return redirect('extensions-detail',
                             ext_pk=extension.pk,
                             slug=extension.slug)
 
     else:
         form = ErrorReportForm()
 
-    context = dict(version=version,
-                   extension=extension,
+    context = dict(extension=extension,
                    form=form)
     return render(request, 'errorreports/report.html', context)
 
@@ -49,14 +45,12 @@ def view_error_report_view(request, obj):
     return render(request, 'errorreports/view.html', dict(report=obj))
 
 
-def send_email_on_error_reported(sender, request, version, report, **kwargs):
-    extension = version.extension
+def send_email_on_error_reported(sender, request, extension, report, **kwargs):
 
     url = request.build_absolute_uri(reverse('errorreports-view',
                                              kwargs=dict(pk=report.pk)))
 
-    data = dict(version=version,
-                extension=extension,
+    data = dict(extension=extension,
                 report=report,
                 url=url)
 
diff --git a/sweettooth/extensions/templates/extensions/comments.html b/sweettooth/extensions/templates/extensions/comments.html
index 1ab87cb..3612e8e 100644
--- a/sweettooth/extensions/templates/extensions/comments.html
+++ b/sweettooth/extensions/templates/extensions/comments.html
@@ -31,7 +31,7 @@
     </div>
 
     <div class="report error">
-      <a class="txt" href="{% url errorreports-report pk=version.pk %}" class="report error">Help! It didn't work!</a>
+      <a class="txt" href="{% url errorreports-report pk=extension.pk %}" class="report error">Help! It didn't work!</a>
       <p>
         Errors should be reported through the error reporting tool &mdash; it
         helps extension authors be known about bugs in their extension!



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]