diff options
author | Aníbal Limón <anibal.limon@linux.intel.com> | 2015-01-08 10:56:26 -0600 |
---|---|---|
committer | Paul Eggleton <paul.eggleton@linux.intel.com> | 2018-05-04 23:57:51 +1200 |
commit | 8e2d772e00c5e994041f3194cc5fd7158dfd49cd (patch) | |
tree | 561d1c6045d49b0c279436f90d819b0b2dde9f66 /rrs | |
parent | 837359e6f18aac985c2967344d035d70c05e427a (diff) | |
download | openembedded-core-contrib-8e2d772e00c5e994041f3194cc5fd7158dfd49cd.tar.gz |
rrs: Add application
Add models for store Milestone, Maintainer and Recipe{Maintainer,
Upgrade, Upstream, Distro}, add initial data for Milestone and
Maintainer, initial migration and admin sites.
Add rrs/context_processors.py for return the site_name and application
for use in templates.
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Diffstat (limited to 'rrs')
-rw-r--r-- | rrs/__init__.py | 0 | ||||
-rw-r--r-- | rrs/admin.py | 48 | ||||
-rw-r--r-- | rrs/context_processors.py | 19 | ||||
-rw-r--r-- | rrs/fixtures/initial_data.json | 461 | ||||
-rw-r--r-- | rrs/migrations/0001_initial.py | 200 | ||||
-rw-r--r-- | rrs/migrations/__init__.py | 0 | ||||
-rw-r--r-- | rrs/models.py | 127 | ||||
-rw-r--r-- | rrs/urls.py | 4 |
8 files changed, 859 insertions, 0 deletions
diff --git a/rrs/__init__.py b/rrs/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/rrs/__init__.py diff --git a/rrs/admin.py b/rrs/admin.py new file mode 100644 index 0000000000..fa7dec0acc --- /dev/null +++ b/rrs/admin.py @@ -0,0 +1,48 @@ +# rrs-web - admin interface definitions +# +# Copyright (C) 2014 Intel Corporation +# +# Licensed under the MIT license, see COPYING.MIT for details + +from django.contrib import admin +from django.contrib.admin import DateFieldListFilter + +from rrs.models import Milestone, Maintainer, RecipeMaintainer, RecipeDistro, \ + RecipeUpgrade, RecipeUpstream + +class MilestoneAdmin(admin.ModelAdmin): + search_fields = ['name'] + model = Milestone + +class MaintainerAdmin(admin.ModelAdmin): + search_fields = ['name'] + model = Maintainer + +class RecipeMaintainerAdmin(admin.ModelAdmin): + search_fields = ['recipe__pn'] + list_filter = ['recipe__layerbranch__layer__name', 'maintainer__name'] + model = RecipeMaintainer + +class RecipeDistroAdmin(admin.ModelAdmin): + search_fields = ['recipe__pn'] + list_filter = ['recipe__layerbranch__layer__name', 'distro'] + model = RecipeDistro + +class RecipeUpgradeAdmin(admin.ModelAdmin): + search_fields = ['recipe__pn'] + list_filter = ['recipe__layerbranch__layer__name', + ('commit_date', DateFieldListFilter), 'maintainer__name'] + model = RecipeUpgrade + +class RecipeUpstreamAdmin(admin.ModelAdmin): + search_fields = ['recipe__pn'] + list_filter = ['recipe__layerbranch__layer__name', 'status', + 'type', ('date', DateFieldListFilter)] + model = RecipeUpstream + +admin.site.register(Milestone, MilestoneAdmin) +admin.site.register(Maintainer, MaintainerAdmin) +admin.site.register(RecipeMaintainer, RecipeMaintainerAdmin) +admin.site.register(RecipeDistro, RecipeDistroAdmin) +admin.site.register(RecipeUpgrade, RecipeUpgradeAdmin) +admin.site.register(RecipeUpstream, RecipeUpstreamAdmin) diff --git a/rrs/context_processors.py b/rrs/context_processors.py new file mode 100644 index 0000000000..0d79bd1858 --- /dev/null +++ b/rrs/context_processors.py @@ -0,0 +1,19 @@ +# rrs-web - custom context processor +# +# Copyright (C) 2014 Intel Corporation +# +# Licensed under the MIT license, see COPYING.MIT for details + +import settings +from django.contrib.sites.models import Site + +def rrs_context(request): + site = Site.objects.get_current() + if site and site.name and site.name != 'example.com': + site_name = site.name + else: + site_name = 'Recipe reporting system' + return { + 'site_name': site_name, + 'application' : settings.APPLICATION + } diff --git a/rrs/fixtures/initial_data.json b/rrs/fixtures/initial_data.json new file mode 100644 index 0000000000..0d9eb9435b --- /dev/null +++ b/rrs/fixtures/initial_data.json @@ -0,0 +1,461 @@ +[ + { + "pk": 0, + "model": "rrs.maintainer", + "fields": { + "name": "No Maintainer", + "email": "" + } + }, + + { + "pk": 1, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.0", + "end_date": "2011-04-15", + "start_date": "2010-06-20" + } + }, + { + "pk": 2, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.0_M1", + "end_date": "2010-11-08", + "start_date": "2010-06-20" + } + }, + { + "pk": 3, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.0_M2", + "end_date": "2010-12-24", + "start_date": "2010-11-08" + } + }, + { + "pk": 4, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.0_M3", + "end_date": "2011-02-08", + "start_date": "2010-12-20" + } + }, + { + "pk": 5, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.0_M4", + "end_date": "2011-04-15", + "start_date": "2011-02-07" + } + }, + { + "pk": 6, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.1", + "end_date": "2011-10-06", + "start_date": "2011-04-18" + } + }, + { + "pk": 7, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.1_M1", + "end_date": "2011-06-13", + "start_date": "2011-04-18" + } + }, + { + "pk": 8, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.1_M2", + "end_date": "2011-07-25", + "start_date": "2011-05-30" + } + }, + { + "pk": 9, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.1_M3", + "end_date": "2011-08-15", + "start_date": "2011-07-11" + } + }, + { + "pk": 10, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.1_M4", + "end_date": "2011-10-06", + "start_date": "2011-08-15" + } + }, + { + "pk": 11, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.2", + "end_date": "2012-04-27", + "start_date": "2011-10-31" + } + }, + { + "pk": 12, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.2_M1", + "end_date": "2011-12-23", + "start_date": "2011-10-31" + } + }, + { + "pk": 13, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.2_M2", + "end_date": "2012-02-03", + "start_date": "2011-12-12" + } + }, + { + "pk": 14, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.2_M3", + "end_date": "2012-03-16", + "start_date": "2012-01-23" + } + }, + { + "pk": 15, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.2_M4", + "end_date": "2012-04-27", + "start_date": "2012-03-05" + } + }, + { + "pk": 16, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.3", + "end_date": "2012-10-26", + "start_date": "2012-05-14" + } + }, + { + "pk": 17, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.3_M1", + "end_date": "2012-06-29", + "start_date": "2012-05-14" + } + }, + { + "pk": 18, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.3_M2", + "end_date": "2012-07-27", + "start_date": "2012-06-11" + } + }, + { + "pk": 19, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.3_M3", + "end_date": "2012-08-24", + "start_date": "2012-07-08" + } + }, + { + "pk": 20, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.3_M4", + "end_date": "2012-09-21", + "start_date": "2012-08-06" + } + }, + { + "pk": 21, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.3_M5", + "end_date": "2012-10-26", + "start_date": "2012-09-19" + } + }, + { + "pk": 22, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.4", + "end_date": "2013-04-26", + "start_date": "2012-10-29" + } + }, + { + "pk": 23, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.4_M1", + "end_date": "2012-12-14", + "start_date": "2012-10-29" + } + }, + { + "pk": 24, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.4_M2", + "end_date": "2013-01-11", + "start_date": "2012-11-26" + } + }, + { + "pk": 25, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.4_M3", + "end_date": "2013-02-08", + "start_date": "2012-12-24" + } + }, + { + "pk": 26, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.4_M4", + "end_date": "2013-03-08", + "start_date": "2013-01-21" + } + }, + { + "pk": 27, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.4_M5", + "end_date": "2013-04-05", + "start_date": "2013-02-18" + } + }, + { + "pk": 28, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.4_M6", + "end_date": "2013-04-26", + "start_date": "2013-03-18" + } + }, + { + "pk": 29, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.5", + "end_date": "2013-10-18", + "start_date": "2013-05-06" + } + }, + { + "pk": 30, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.5_M1", + "end_date": "2013-06-21", + "start_date": "2013-05-06" + } + }, + { + "pk": 31, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.5_M2", + "end_date": "2013-07-19", + "start_date": "2013-06-03" + } + }, + { + "pk": 32, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.5_M3", + "end_date": "2013-08-16", + "start_date": "2013-07-01" + } + }, + { + "pk": 33, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.5_M4", + "end_date": "2013-09-13", + "start_date": "2013-07-29" + } + }, + { + "pk": 34, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.5_M5", + "end_date": "2013-10-18", + "start_date": "2013-08-26" + } + }, + { + "pk": 35, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.6", + "end_date": "2014-05-25", + "start_date": "2013-11-11" + } + }, + { + "pk": 36, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.6_M1", + "end_date": "2013-12-20", + "start_date": "2013-11-11" + } + }, + { + "pk": 37, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.6_M2", + "end_date": "2014-01-31", + "start_date": "2013-12-09" + } + }, + { + "pk": 38, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.6_M3", + "end_date": "2014-02-28", + "start_date": "2014-01-13" + } + }, + { + "pk": 39, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.6_M4", + "end_date": "2014-03-28", + "start_date": "2014-02-10" + } + }, + { + "pk": 40, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.6_M5", + "end_date": "2014-05-25", + "start_date": "2014-03-25" + } + }, + { + "pk": 41, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.7", + "end_date": "2014-10-31", + "start_date": "2014-05-19" + } + }, + { + "pk": 42, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.7_M1", + "end_date": "2014-07-11", + "start_date": "2014-05-19" + } + }, + { + "pk": 43, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.7_M2", + "end_date": "2014-08-15", + "start_date": "2014-06-30" + } + }, + { + "pk": 44, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.7_M3", + "end_date": "2014-09-19", + "start_date": "2014-08-04" + } + }, + { + "pk": 45, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.7_M4", + "end_date": "2014-10-31", + "start_date": "2014-09-08" + } + }, + { + "pk": 46, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.8", + "end_date": "2015-04-24", + "start_date": "2014-11-03" + } + }, + { + "pk": 47, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.8_M1", + "end_date": "2014-12-19", + "start_date": "2014-11-03" + } + }, + { + "pk": 48, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.8_M2", + "end_date": "2015-01-30", + "start_date": "2014-12-03" + } + }, + { + "pk": 49, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.8_M3", + "end_date": "2015-03-06", + "start_date": "2015-01-14" + } + }, + { + "pk": 50, + "model": "rrs.milestone", + "fields": { + "name": "Release 1.8_M4", + "end_date": "2015-04-24", + "start_date": "2015-02-19" + } + } +] diff --git a/rrs/migrations/0001_initial.py b/rrs/migrations/0001_initial.py new file mode 100644 index 0000000000..8834c4d7d1 --- /dev/null +++ b/rrs/migrations/0001_initial.py @@ -0,0 +1,200 @@ +# -*- 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): + # Adding model 'Milestone' + db.create_table('rrs_milestone', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=100)), + ('start_date', self.gf('django.db.models.fields.DateField')()), + ('end_date', self.gf('django.db.models.fields.DateField')()), + )) + db.send_create_signal('rrs', ['Milestone']) + + # Adding model 'Maintainer' + db.create_table('rrs_maintainer', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('email', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + )) + db.send_create_signal('rrs', ['Maintainer']) + + # Adding model 'RecipeMaintainer' + db.create_table('rrs_recipemaintainer', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])), + ('maintainer', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.Maintainer'])), + )) + db.send_create_signal('rrs', ['RecipeMaintainer']) + + # Adding model 'RecipeUpstream' + db.create_table('rrs_recipeupstream', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])), + ('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), + ('type', self.gf('django.db.models.fields.CharField')(max_length=1, blank=True)), + ('status', self.gf('django.db.models.fields.CharField')(max_length=1, blank=True)), + ('no_update_reason', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + ('date', self.gf('django.db.models.fields.DateTimeField')()), + )) + db.send_create_signal('rrs', ['RecipeUpstream']) + + # Adding model 'RecipeDistro' + db.create_table('rrs_recipedistro', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])), + ('distro', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), + ('alias', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), + )) + db.send_create_signal('rrs', ['RecipeDistro']) + + # Adding model 'RecipeUpgrade' + db.create_table('rrs_recipeupgrade', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['layerindex.Recipe'])), + ('maintainer', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['rrs.Maintainer'], null=True, blank=True)), + ('sha1', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=1024, blank=True)), + ('version', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), + ('author_date', self.gf('django.db.models.fields.DateTimeField')()), + ('commit_date', self.gf('django.db.models.fields.DateTimeField')()), + )) + db.send_create_signal('rrs', ['RecipeUpgrade']) + + + def backwards(self, orm): + # Deleting model 'Milestone' + db.delete_table('rrs_milestone') + + # Deleting model 'Maintainer' + db.delete_table('rrs_maintainer') + + # Deleting model 'RecipeMaintainer' + db.delete_table('rrs_recipemaintainer') + + # Deleting model 'RecipeUpstream' + db.delete_table('rrs_recipeupstream') + + # Deleting model 'RecipeDistro' + db.delete_table('rrs_recipedistro') + + # Deleting model 'RecipeUpgrade' + db.delete_table('rrs_recipeupgrade') + + + 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': '255', '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': {'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', [], {'unique': 'True', 'max_length': '100'}), + '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'}, + '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.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']", 'null': 'True', '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', [], {}), + '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'}) + } + } + + complete_apps = ['rrs']
\ No newline at end of file diff --git a/rrs/migrations/__init__.py b/rrs/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/rrs/migrations/__init__.py diff --git a/rrs/models.py b/rrs/models.py new file mode 100644 index 0000000000..e9dbcdcc7c --- /dev/null +++ b/rrs/models.py @@ -0,0 +1,127 @@ +# rrs-web - model definitions +# +# Copyright (C) 2014 Intel Corporation +# +# Licensed under the MIT license, see COPYING.MIT for details + +import sys +import os +import os.path +sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), '../'))) + +from datetime import date + +from django.db import models +from layerindex.models import Recipe + +class Milestone(models.Model): + name = models.CharField(max_length=100, unique=True) + start_date = models.DateField() + end_date = models.DateField() + + """ Get current milestone """ + @staticmethod + def get_current(): + current = date.today() + + milestone_set = Milestone.objects.filter(start_date__lte = current, + end_date__gte = current).order_by('-id') + + if milestone_set: + return milestone_set[0] + else: + return Milestone.objects.filter().order_by('-id')[0] + + """ Get month intervals between the start and the end of the milestone """ + def get_intervals(self): + intervals = [] + previous_date = self.start_date + current_date = self.start_date + while current_date < self.end_date+timedelta(days=28): + current_date += timedelta(days=1) + if current_date.month != previous_date.month: + interval_start = previous_date.replace(day=1) + interval_end = current_date.replace(day=1) + interval_end -= timedelta(days=1) + intervals.append((interval_start, interval_end)) + previous_date = current_date + return intervals + + def __unicode__(self): + return '%s' % (self.name) + +class Maintainer(models.Model): + name = models.CharField(max_length=255, unique=True) + email = models.CharField(max_length=255, blank=True) + + class Meta: + ordering = ["name"] + + def __unicode__(self): + return "%s <%s>" % (self.name, self.email) + +class RecipeMaintainer(models.Model): + recipe = models.ForeignKey(Recipe) + maintainer = models.ForeignKey(Maintainer) + + def __unicode__(self): + return "%s: %s <%s>" % (self.recipe.pn, self.maintainer.name, + self.maintainer.email) + +class RecipeUpstream(models.Model): + RECIPE_UPSTREAM_STATUS_CHOICES = ( + ('N', 'Not updated'), + ('Y', 'Up-to-date'), + ('D', 'Downgrade'), + ('U', 'Unknown'), + ) + + RECIPE_UPSTREAM_TYPE_CHOICES = ( + ('A', 'Automatic'), + ('M', 'Manual'), + ) + + recipe = models.ForeignKey(Recipe) + version = models.CharField(max_length=100, blank=True) + type = models.CharField(max_length=1, choices=RECIPE_UPSTREAM_TYPE_CHOICES, blank=True) + status = models.CharField(max_length=1, choices=RECIPE_UPSTREAM_STATUS_CHOICES, blank=True) + no_update_reason = models.CharField(max_length=255, blank=True) + date = models.DateTimeField() + + def needs_upgrade(self): + if self.status == 'N': + return True + else: + return False + + def __unicode__(self): + return '%s: (%s, %s, %s)' % (self.recipe.pn, self.status, + self.version, self.date) + +class RecipeDistro(models.Model): + recipe = models.ForeignKey(Recipe) + distro = models.CharField(max_length=100, blank=True) + alias = models.CharField(max_length=100, blank=True) + + def __unicode__(self): + return '%s: %s' % (self.recipe.pn, self.distro) + +class RecipeUpgrade(models.Model): + recipe = models.ForeignKey(Recipe) + maintainer = models.ForeignKey(Maintainer, blank=True, null=True) + sha1 = models.CharField(max_length=40, blank=True) + title = models.CharField(max_length=1024, blank=True) + version = models.CharField(max_length=100, blank=True) + author_date = models.DateTimeField() + commit_date = models.DateTimeField() + + def short_sha1(self): + return self.sha1[0:6] + + def commit_url(self): + web_interface_url = self.recipe.layerbranch.layer.vcs_web_url + return web_interface_url + "/commit/?id=" + self.sha1 + + def __unicode__(self): + return '%s: (%s, %s)' % (self.recipe.pn, self.version, + self.commit_date) diff --git a/rrs/urls.py b/rrs/urls.py new file mode 100644 index 0000000000..c474c7c0c5 --- /dev/null +++ b/rrs/urls.py @@ -0,0 +1,4 @@ +from django.conf.urls import patterns, include, url + +urlpatterns = patterns('', +) |