diff options
author | Aníbal Limón <anibal.limon@linux.intel.com> | 2015-02-19 15:01:08 +0000 |
---|---|---|
committer | Paul Eggleton <paul.eggleton@linux.intel.com> | 2018-05-04 23:57:51 +1200 |
commit | 665dfae57735149cb60d40b6f2a6bf6db1577831 (patch) | |
tree | d2c8551d6c360f42709315f187db77eb01e662be | |
parent | d61f95164b8a57b5053c6ea3b324bd2ae74757fb (diff) | |
download | openembedded-core-contrib-665dfae57735149cb60d40b6f2a6bf6db1577831.tar.gz |
rrs: Release/Milestone improvments
rrs/models.py: Milestone now have unique in Release and Name fields
instead of only field. When try to get current milestone give priority
to Mn instead of All.
templates/rrs/base_toplevel.html: Display only release name when
milestone is All.
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
-rw-r--r-- | rrs/migrations/0002_auto__del_unique_milestone_name__add_unique_milestone_release_name.py | 159 | ||||
-rw-r--r-- | rrs/models.py | 46 | ||||
-rw-r--r-- | rrs/views.py | 6 | ||||
-rw-r--r-- | templates/rrs/base_toplevel.html | 9 |
4 files changed, 208 insertions, 12 deletions
diff --git a/rrs/migrations/0002_auto__del_unique_milestone_name__add_unique_milestone_release_name.py b/rrs/migrations/0002_auto__del_unique_milestone_name__add_unique_milestone_release_name.py new file mode 100644 index 0000000000..cab8b42f3e --- /dev/null +++ b/rrs/migrations/0002_auto__del_unique_milestone_name__add_unique_milestone_release_name.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Removing unique constraint on 'Milestone', fields ['name'] + db.delete_unique('rrs_milestone', ['name']) + + # Adding unique constraint on 'Milestone', fields ['release', 'name'] + db.create_unique('rrs_milestone', ['release_id', 'name']) + + + def backwards(self, orm): + # Removing unique constraint on 'Milestone', fields ['release', 'name'] + db.delete_unique('rrs_milestone', ['release_id', 'name']) + + # Adding unique constraint on 'Milestone', fields ['name'] + db.create_unique('rrs_milestone', ['name']) + + + models = { + 'layerindex.branch': { + 'Meta': {'object_name': 'Branch'}, + 'bitbake_branch': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'sort_priority': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}) + }, + 'layerindex.layerbranch': { + 'Meta': {'object_name': 'LayerBranch'}, + 'actual_branch': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}), + 'branch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Branch']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerItem']"}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'vcs_last_commit': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'vcs_last_fetch': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'vcs_last_rev': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}), + 'vcs_subdir': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}) + }, + 'layerindex.layeritem': { + 'Meta': {'object_name': 'LayerItem'}, + 'classic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'description': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'index_preference': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'layer_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'mailing_list_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'N'", 'max_length': '1'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'usage_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'vcs_url': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'vcs_web_file_base_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'vcs_web_tree_base_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'vcs_web_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) + }, + 'layerindex.recipe': { + 'Meta': {'object_name': 'Recipe'}, + 'bbclassextend': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'bugtracker': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'depends': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'filepath': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'homepage': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'layerbranch': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.LayerBranch']"}), + 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'pn': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'provides': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}), + 'pv': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'section': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'src_uri': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'summary': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'rrs.maintainer': { + 'Meta': {'ordering': "['name']", 'object_name': 'Maintainer'}, + 'email': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}) + }, + 'rrs.milestone': { + 'Meta': {'unique_together': "(('release', 'name'),)", 'object_name': 'Milestone'}, + 'end_date': ('django.db.models.fields.DateField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'release': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Release']"}), + 'start_date': ('django.db.models.fields.DateField', [], {}) + }, + 'rrs.recipedistro': { + 'Meta': {'object_name': 'RecipeDistro'}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'distro': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}) + }, + 'rrs.recipemaintainer': { + 'Meta': {'object_name': 'RecipeMaintainer'}, + 'history': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.RecipeMaintainerHistory']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']"}), + 'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}) + }, + 'rrs.recipemaintainerhistory': { + 'Meta': {'object_name': 'RecipeMaintainerHistory'}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']"}), + 'date': ('django.db.models.fields.DateTimeField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'sha1': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + 'rrs.recipeupgrade': { + 'Meta': {'object_name': 'RecipeUpgrade'}, + 'author_date': ('django.db.models.fields.DateTimeField', [], {}), + 'commit_date': ('django.db.models.fields.DateTimeField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'maintainer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.Maintainer']", 'blank': 'True'}), + 'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}), + 'sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'rrs.recipeupstream': { + 'Meta': {'object_name': 'RecipeUpstream'}, + 'date': ('django.db.models.fields.DateTimeField', [], {}), + 'history': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['rrs.RecipeUpstreamHistory']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'no_update_reason': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['layerindex.Recipe']"}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'rrs.recipeupstreamhistory': { + 'Meta': {'object_name': 'RecipeUpstreamHistory'}, + 'end_date': ('django.db.models.fields.DateTimeField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'start_date': ('django.db.models.fields.DateTimeField', [], {}) + }, + 'rrs.release': { + 'Meta': {'object_name': 'Release'}, + 'end_date': ('django.db.models.fields.DateField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}), + 'start_date': ('django.db.models.fields.DateField', [], {}) + } + } + + complete_apps = ['rrs']
\ No newline at end of file diff --git a/rrs/models.py b/rrs/models.py index cb1b67bd1d..9ed74a1dca 100644 --- a/rrs/models.py +++ b/rrs/models.py @@ -38,14 +38,39 @@ class Release(models.Model): return current_release or Release.objects.filter().order_by('-end_date')[0] def __unicode__(self): - return '%s: %s - %s' % (self.name, self.start_date, self.end_date) + return '%s' % (self.name) class Milestone(models.Model): release = models.ForeignKey(Release) - name = models.CharField(max_length=100, unique=True) + name = models.CharField(max_length=100) start_date = models.DateField() end_date = models.DateField() + class Meta: + unique_together = ('release', 'name',) + + """ Get milestones, filtering don't exist yet and ordering """ + @staticmethod + def get_by_release_name(release_name): + milestones = [] + today = date.today() + + mall = Milestone.objects.get(release__name = release_name, name = 'All') + if mall: + milestones.append(mall) + + mqry = Milestone.objects.filter(release__name = release_name).order_by('-end_date') + for m in mqry: + if m.name == 'All': + continue + + if m.start_date > today: + continue + + milestones.append(m) + + return milestones + """ Get milestone by release and date """ @staticmethod def get_by_release_and_date(release, date): @@ -60,9 +85,18 @@ class Milestone(models.Model): """ Get current milestone """ @staticmethod def get_current(release): - current = date.today() - current_milestone = Milestone.get_by_release_and_date(release, current) - return current_milestone or Milestone.objects.filter().order_by('-end_date')[0] + current_milestone = None + current_date = date.today() + + mqry = Milestone.objects.filter(release = release, start_date__lte = current_date, + end_date__gte = current_date).exclude(name = 'All').order_by('-end_date') + if mqry: + current_milestone = mqry[0] + else: + current_milestone = Milestone.objects.filter(release = release). \ + order_by('-end_date')[0] + + return current_milestone """ Get milestone intervals by release """ @staticmethod @@ -102,7 +136,7 @@ class Milestone(models.Model): return weeks def __unicode__(self): - return '%s: %s - %s' % (self.name, self.start_date, self.end_date) + return '%s%s' % (self.release.name, self.name) class Maintainer(models.Model): name = models.CharField(max_length=255, unique=True) diff --git a/rrs/views.py b/rrs/views.py index 820810262a..bcc505399c 100644 --- a/rrs/views.py +++ b/rrs/views.py @@ -214,8 +214,7 @@ class RecipeListView(ListView): context['release_name'] = self.release_name context['all_releases'] = Release.objects.filter().order_by('-end_date') context['milestone_name'] = self.milestone_name - context['all_milestones'] = Milestone.objects.filter(release__name = - self.release_name).order_by('-end_date') + context['all_milestones'] = Milestone.get_by_release_name(self.release_name) context['recipes_percentage'] = self.milestone_statistics['percentage'] context['recipes_up_to_date'] = self.milestone_statistics['up_to_date'] @@ -476,8 +475,7 @@ class MaintainerListView(ListView): context['release_name'] = self.release_name context['all_releases'] = Release.objects.filter().order_by('-end_date') context['milestone_name'] = self.milestone_name - context['all_milestones'] = Milestone.objects.filter(release__name = - self.release_name).order_by('-end_date') + context['all_milestones'] = Milestone.get_by_release_name(self.release_name) context['recipes_percentage'] = self.milestone_statistics['percentage'] context['recipes_up_to_date'] = self.milestone_statistics['up_to_date'] diff --git a/templates/rrs/base_toplevel.html b/templates/rrs/base_toplevel.html index 3339000b9d..9804c03817 100644 --- a/templates/rrs/base_toplevel.html +++ b/templates/rrs/base_toplevel.html @@ -24,7 +24,7 @@ </a> <ul class="dropdown-menu"> {% for r in all_releases %} - <li><a href="{% url this_url_name r.name r.name|add:"All" %}{{ extra_url_param }}"> + <li><a href="{% url this_url_name r.name "All" %}{{ extra_url_param }}"> {% if r.name = release_name %}<b>{% endif %} {{ r.name }} {% if r.name = release_name %}</b>{% endif %} @@ -58,7 +58,12 @@ <div class="navbar"> <div class="navbar-inner"> - <span class="brand">{{ milestone_name }}</span> + <span class="brand"> + {{ release_name }} + {% if milestone_name != "All" %} + {{ milestone_name }} + {% endif %} + </span> <ul class="nav"> <li class="divider-vertical"></li> <li class="lead" id="percentage"><strong>{{ recipes_percentage }}%</strong> done</li> |