Re: [PATCH 02/10] models: Add 'Series' model and related models

2016-07-18 Thread Andrew Donnellan

On 19/07/16 10:50, Russell Currey wrote:

On Mon, 2016-06-13 at 11:41 +0100, Stephen Finucane wrote:

Add a series model. This model is intentionally very minimal to allow
as much dynaminism as possible. It is expected that patches will be
migrated between series as new data is provided.

Signed-off-by: Stephen Finucane 
---


I'm pretty sure this broke the patches API, though I'm not exactly a Django
expert.  Here's what I'm seeing:

Exception Type: ImproperlyConfigured at /api/1.0/patches/
Exception Value: Could not resolve URL for hyperlinked relationship using view
name "seriesrevision-detail". You may have failed to include the related model
in your API, or incorrectly configured the `lookup_field` attribute on this
field.

Full log here: http://dpaste.com/0P3C63K


Temporary fix to exclude the series field from the Patch endpoint.

Signed-off-by: Andrew Donnellan 

diff --git a/patchwork/rest_serializers.py b/patchwork/rest_serializers.py
index af6b1b7..be55ad1 100644
--- a/patchwork/rest_serializers.py
+++ b/patchwork/rest_serializers.py
@@ -84,7 +84,7 @@ class PatchSerializer(URLSerializer):
 'content', 'hash', 'msgid')
 # there's no need to expose an entire "tags" endpoint, so we 
custom

 # render this field
-exclude = ('tags',)
+exclude = ('tags', 'series')
 check_names = dict(Check.STATE_CHOICES)
 mbox_url = SerializerMethodField()
 state = SerializerMethodField()


--
Andrew Donnellan  OzLabs, ADL Canberra
andrew.donnel...@au1.ibm.com  IBM Australia Limited

___
Patchwork mailing list
Patchwork@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/patchwork


Re: [PATCH 02/10] models: Add 'Series' model and related models

2016-07-17 Thread Russell Currey
On Mon, 2016-06-13 at 11:41 +0100, Stephen Finucane wrote:
> Add a series model. This model is intentionally very minimal to allow
> as much dynaminism as possible. It is expected that patches will be
> migrated between series as new data is provided.
> 
> Signed-off-by: Stephen Finucane 
> ---



> diff --git a/patchwork/models.py b/patchwork/models.py
> index 9ad2bcb..67ea012 100644
> --- a/patchwork/models.py
> +++ b/patchwork/models.py
> @@ -37,6 +37,9 @@ from django.utils.six.moves import filter
>  from patchwork.fields import HashField
>  from patchwork.parser import extract_tags, hash_patch
>  
> +SERIES_REVISION_DEFAULT_NAME = 'Unnamed Series Revision'
> +SERIES_DEFAULT_NAME = 'Unnamed Series'
> +
>  

Having multiple series revisions without a cover letter appear the same is a
problem.  If there are multiple series next to each other in the patch view,
it's visually difficult to tell them apart, even though they link to different
places. Perhaps series without a cover letter could instead be named after the
first patch in the series, prefixed with "Series starting with" or "[Missing
cover letter]", or something?
___
Patchwork mailing list
Patchwork@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/patchwork


[PATCH 02/10] models: Add 'Series' model and related models

2016-06-13 Thread Stephen Finucane
Add a series model. This model is intentionally very minimal to allow
as much dynaminism as possible. It is expected that patches will be
migrated between series as new data is provided.

Signed-off-by: Stephen Finucane 
---
v2:
- Rename 'SeriesGroup' to 'Series'
- Rename 'Series' to 'SeriesRevision'
---
 patchwork/admin.py |   55 +++-
 patchwork/migrations/0013_add_series_models.py |   56 
 patchwork/models.py|  110 +++-
 3 files changed, 216 insertions(+), 5 deletions(-)
 create mode 100644 patchwork/migrations/0013_add_series_models.py

diff --git a/patchwork/admin.py b/patchwork/admin.py
index 0f217d7..afb4af6 100644
--- a/patchwork/admin.py
+++ b/patchwork/admin.py
@@ -23,7 +23,8 @@ from django.contrib import admin
 
 from patchwork.models import (Project, Person, UserProfile, State, Submission,
   Patch, CoverLetter, Comment, Bundle, Tag, Check,
-  DelegationRule)
+  DelegationRule, Series, SeriesRevision,
+  SeriesReference)
 
 
 class DelegationRuleInline(admin.TabularInline):
@@ -76,8 +77,8 @@ admin.site.register(CoverLetter, CoverLetterAdmin)
 
 class PatchAdmin(admin.ModelAdmin):
 list_display = ('name', 'submitter', 'project', 'state', 'date',
-'archived', 'is_pull_request')
-list_filter = ('project', 'state', 'archived')
+'archived', 'is_pull_request', 'series')
+list_filter = ('project', 'state', 'archived', 'series')
 search_fields = ('name', 'submitter__name', 'submitter__email')
 date_hierarchy = 'date'
 
@@ -97,6 +98,54 @@ class CommentAdmin(admin.ModelAdmin):
 admin.site.register(Comment, CommentAdmin)
 
 
+class CoverLetterInline(admin.StackedInline):
+model = CoverLetter
+extra = 0
+
+
+class PatchInline(admin.StackedInline):
+model = Patch
+extra = 0
+
+
+class SeriesRevisionAdmin(admin.ModelAdmin):
+list_display = ('name', 'group', 'date', 'submitter', 'version', 'total',
+'actual_total', 'complete')
+readonly_fields = ('actual_total', 'complete')
+search_fields = ('submitter_name', 'submitter_email')
+inlines = [CoverLetterInline, PatchInline]
+
+def complete(self, series):
+return series.complete
+complete.boolean = True
+admin.site.register(SeriesRevision, SeriesRevisionAdmin)
+
+
+class SeriesRevisionInline(admin.StackedInline):
+model = SeriesRevision
+readonly_fields = ('date', 'submitter', 'version', 'total',
+   'actual_total', 'complete')
+ordering = ('-date', )
+show_change_link = True
+extra = 0
+
+def complete(self, series):
+return series.complete
+complete.boolean = True
+
+
+class SeriesAdmin(admin.ModelAdmin):
+list_display = ('name', )
+readonly_fields = ('name', )
+inlines = [SeriesRevisionInline]
+admin.site.register(Series, SeriesAdmin)
+
+
+class SeriesReferenceAdmin(admin.ModelAdmin):
+model = SeriesReference
+admin.site.register(SeriesReference, SeriesReferenceAdmin)
+
+
 class CheckAdmin(admin.ModelAdmin):
 list_display = ('patch', 'user', 'state', 'target_url',
 'description', 'context')
diff --git a/patchwork/migrations/0013_add_series_models.py 
b/patchwork/migrations/0013_add_series_models.py
new file mode 100644
index 000..03b7a22
--- /dev/null
+++ b/patchwork/migrations/0013_add_series_models.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+dependencies = [
+('patchwork', '0012_add_coverletter_model'),
+]
+
+operations = [
+migrations.CreateModel(
+name='Series',
+fields=[
+('id', models.AutoField(verbose_name='ID', serialize=False, 
auto_created=True, primary_key=True)),
+],
+options={
+'verbose_name_plural': 'Series',
+},
+),
+migrations.CreateModel(
+name='SeriesReference',
+fields=[
+('id', models.AutoField(verbose_name='ID', serialize=False, 
auto_created=True, primary_key=True)),
+('msgid', models.CharField(unique=True, max_length=255)),
+],
+),
+migrations.CreateModel(
+name='SeriesRevision',
+fields=[
+('id', models.AutoField(verbose_name='ID', serialize=False, 
auto_created=True, primary_key=True)),
+('date', models.DateTimeField()),
+('version', models.IntegerField(default=1, help_text=b'Version 
of series revision as indicated by the subject prefix(es)')),
+('total', models.IntegerField(help_text=b'Number of patches in 
series as indicated by the subject