mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 20:59:01 +02:00
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>
This commit is contained in:
parent
d61f95164b
commit
665dfae577
|
@ -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']
|
|
@ -38,14 +38,39 @@ class Release(models.Model):
|
||||||
return current_release or Release.objects.filter().order_by('-end_date')[0]
|
return current_release or Release.objects.filter().order_by('-end_date')[0]
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return '%s: %s - %s' % (self.name, self.start_date, self.end_date)
|
return '%s' % (self.name)
|
||||||
|
|
||||||
class Milestone(models.Model):
|
class Milestone(models.Model):
|
||||||
release = models.ForeignKey(Release)
|
release = models.ForeignKey(Release)
|
||||||
name = models.CharField(max_length=100, unique=True)
|
name = models.CharField(max_length=100)
|
||||||
start_date = models.DateField()
|
start_date = models.DateField()
|
||||||
end_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 """
|
""" Get milestone by release and date """
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_by_release_and_date(release, date):
|
def get_by_release_and_date(release, date):
|
||||||
|
@ -60,9 +85,18 @@ class Milestone(models.Model):
|
||||||
""" Get current milestone """
|
""" Get current milestone """
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_current(release):
|
def get_current(release):
|
||||||
current = date.today()
|
current_milestone = None
|
||||||
current_milestone = Milestone.get_by_release_and_date(release, current)
|
current_date = date.today()
|
||||||
return current_milestone or Milestone.objects.filter().order_by('-end_date')[0]
|
|
||||||
|
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 """
|
""" Get milestone intervals by release """
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -102,7 +136,7 @@ class Milestone(models.Model):
|
||||||
return weeks
|
return weeks
|
||||||
|
|
||||||
def __unicode__(self):
|
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):
|
class Maintainer(models.Model):
|
||||||
name = models.CharField(max_length=255, unique=True)
|
name = models.CharField(max_length=255, unique=True)
|
||||||
|
|
|
@ -214,8 +214,7 @@ class RecipeListView(ListView):
|
||||||
context['release_name'] = self.release_name
|
context['release_name'] = self.release_name
|
||||||
context['all_releases'] = Release.objects.filter().order_by('-end_date')
|
context['all_releases'] = Release.objects.filter().order_by('-end_date')
|
||||||
context['milestone_name'] = self.milestone_name
|
context['milestone_name'] = self.milestone_name
|
||||||
context['all_milestones'] = Milestone.objects.filter(release__name =
|
context['all_milestones'] = Milestone.get_by_release_name(self.release_name)
|
||||||
self.release_name).order_by('-end_date')
|
|
||||||
|
|
||||||
context['recipes_percentage'] = self.milestone_statistics['percentage']
|
context['recipes_percentage'] = self.milestone_statistics['percentage']
|
||||||
context['recipes_up_to_date'] = self.milestone_statistics['up_to_date']
|
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['release_name'] = self.release_name
|
||||||
context['all_releases'] = Release.objects.filter().order_by('-end_date')
|
context['all_releases'] = Release.objects.filter().order_by('-end_date')
|
||||||
context['milestone_name'] = self.milestone_name
|
context['milestone_name'] = self.milestone_name
|
||||||
context['all_milestones'] = Milestone.objects.filter(release__name =
|
context['all_milestones'] = Milestone.get_by_release_name(self.release_name)
|
||||||
self.release_name).order_by('-end_date')
|
|
||||||
|
|
||||||
context['recipes_percentage'] = self.milestone_statistics['percentage']
|
context['recipes_percentage'] = self.milestone_statistics['percentage']
|
||||||
context['recipes_up_to_date'] = self.milestone_statistics['up_to_date']
|
context['recipes_up_to_date'] = self.milestone_statistics['up_to_date']
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
{% for r in all_releases %}
|
{% 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 %}
|
{% if r.name = release_name %}<b>{% endif %}
|
||||||
{{ r.name }}
|
{{ r.name }}
|
||||||
{% if r.name = release_name %}</b>{% endif %}
|
{% if r.name = release_name %}</b>{% endif %}
|
||||||
|
@ -58,7 +58,12 @@
|
||||||
|
|
||||||
<div class="navbar">
|
<div class="navbar">
|
||||||
<div class="navbar-inner">
|
<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">
|
<ul class="nav">
|
||||||
<li class="divider-vertical"></li>
|
<li class="divider-vertical"></li>
|
||||||
<li class="lead" id="percentage"><strong>{{ recipes_percentage }}%</strong> done</li>
|
<li class="lead" id="percentage"><strong>{{ recipes_percentage }}%</strong> done</li>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user