aboutsummaryrefslogtreecommitdiffstats
path: root/rrs
diff options
context:
space:
mode:
authorAníbal Limón <anibal.limon@linux.intel.com>2015-01-08 10:56:26 -0600
committerPaul Eggleton <paul.eggleton@linux.intel.com>2018-05-04 23:57:51 +1200
commit8e2d772e00c5e994041f3194cc5fd7158dfd49cd (patch)
tree561d1c6045d49b0c279436f90d819b0b2dde9f66 /rrs
parent837359e6f18aac985c2967344d035d70c05e427a (diff)
downloadopenembedded-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__.py0
-rw-r--r--rrs/admin.py48
-rw-r--r--rrs/context_processors.py19
-rw-r--r--rrs/fixtures/initial_data.json461
-rw-r--r--rrs/migrations/0001_initial.py200
-rw-r--r--rrs/migrations/__init__.py0
-rw-r--r--rrs/models.py127
-rw-r--r--rrs/urls.py4
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('',
+)