Skip to contentSkip to conversation

Upgrade to Django 1.8

PATCH In review Ed Bartosh 4 participants 24 messages Dec 8, 2015 – Dec 10, 2015

lore
Share & tools
lore
author
#1 lore raw

PATCH 1/18 toaster: Upgrade to Django 1.8.6 and remove South

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

Upgrade Django to long-term support version.

Django now provides its own migration framework, so remove requirement for South.

[YOCTO #8364]

---
 bitbake/bin/toaster                         | 8 ++------
 bitbake/lib/toaster/toastermain/settings.py | 1 -
 bitbake/toaster-requirements.txt            | 3 +--
 3 files changed, 3 insertions(+), 9 deletions(-)
bitbake/bin/toaster +2 -6
index 6d1ec05..528e17e 100755
@@ -176,15 +176,11 @@ notify_chldexit() {
 verify_prereq() {
     # Verify prerequisites
 
-    if ! echo "import django; print (1,) == django.VERSION[0:1] and django.VERSION[1:2][0] in (6,)" | python 2>/dev/null | grep True >/dev/null; then
-        printf "This program needs Django 1.6. Please install with\n\npip install django==1.6\n"
+    if ! echo "import django; print (1,) == django.VERSION[0:1] and django.VERSION[1:2][0] in (8,)" | python 2>/dev/null | grep True >/dev/null; then
+        printf "This program needs Django 1.8. Please install with\n\npip install django<=1.8.7\n"
         return 2
     fi
 
-    if ! echo "import south; print reduce(lambda x, y: 2 if x==2 else 0 if x == 0 else y, map(lambda x: 1+cmp(x[1]-x[0],0), zip([0,8,4], map(int,south.__version__.split(\".\"))))) > 0" | python 2>/dev/null | grep True >/dev/null; then
-        printf "This program needs South 0.8.4. Please install with\n\npip install south==0.8.4\n"
-        return 2
-    fi
     return 0
 }
 
bitbake/lib/toaster/toastermain/settings.py +0 -1
index de686b2..7c559bc 100644
@@ -276,7 +276,6 @@ INSTALLED_APPS = (
     'django.contrib.humanize',
     'bldcollector',
     'toastermain',
-    'south',
 )
 
 
bitbake/toaster-requirements.txt +1 -2
index 1d7d21b..5d34494 100644
@@ -1,5 +1,4 @@
-Django==1.6
-South==0.8.4
+Django==1.8.6
 argparse==1.2.1
 wsgiref==0.1.2
 beautifulsoup4>=4.4.0
Signature · 1 line
2.1.4

Ed Bartosh

author
#0 lore raw

cover Upgrade to Django 1.8

Hi,

This patchset upgrades Toaster to work correctly under Django 1.8. It was tested with Django 1.8.6

Please review and submit upstream.

The following changes since commit befaceb2873ff8c8cc791d48f0324442c15cbcdc:

toaster: return back 'New project' button (2015-12-08 13:10:33 +0200)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib ed/toaster/django_upgrade-8364
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/toaster/django_upgrade-8364

Ed Bartosh (9):
toaster: Remove South migrations
toaster: Fix references to app paths
toaster: rename get_query_set -> get_queryset
toaster: use OneToOneField instead of ForeignKey
toaster: fixed format strings
toaster: work around 'database is locked' error
toaster: removed extra calls of migrate
toaster: monkey patch Queryset
toaster: rework check for Django version

Elliot Smith (9):
toaster: Upgrade to Django 1.8.6 and remove South
toaster: Create default project with get_or_create* method
toaster: Start Django machinery for database access
toaster: Update API used to make runbuilds methods run in transactions
toaster: Prevent deprecation warnings for RedirectView
toaster: Update deprecated manage.py command
toaster: Check Django version against toaster-requirements.txt
toaster: Remove compatible_layerversions() method
toaster: Amend regex for MySQL database URLs

 bitbake/bin/toaster                                |  41 +-
 bitbake/lib/bb/ui/buildinfohelper.py               |  26 +-
 bitbake/lib/toaster/bldcollector/urls.py           |   1 -
 bitbake/lib/toaster/bldcontrol/bbcontroller.py     |   4 +-
 .../toaster/bldcontrol/localhostbecontroller.py    |  13 +-
 .../bldcontrol/management/commands/runbuilds.py    |   6 +-
 .../toaster/bldcontrol/migrations/0001_initial.py  | 265 +++---
 ...onment_sourcedir__add_field_buildenvironment.py | 106 ---
 .../0003_auto__add_field_brlayer_dirpath.py        |  99 ---
 .../bldcontrol/migrations/0004_loadinitialdata.py  | 104 ---
 .../migrations/0005_auto__add_brerror.py           | 112 ---
 .../migrations/0006_auto__add_brbitbake.py         | 128 ---
 ...st_environment__chg_field_buildrequest_build.py | 145 ----
 .../bldcontrol/migrations/0008_brarchive.py        | 138 ---
 .../0009_auto__add_field_brlayer_layer_version.py  | 180 ----
 bitbake/lib/toaster/bldcontrol/models.py           |   2 +-
 bitbake/lib/toaster/bldcontrol/tests.py            |   6 +-
 bitbake/lib/toaster/orm/migrations/0001_initial.py | 928 ++++++++++++---------
 .../0002_auto__add_field_build_timespent.py        | 180 ----
 .../lib/toaster/orm/migrations/0003_timespent.py   | 182 ----
 .../0004_auto__add_field_package_installed_name.py | 181 ----
 ...e__add_target_file__add_field_variablehistor.py | 281 -------
 ...ge_size__add_field_target_license_manifest_p.py | 235 ------
 .../orm/migrations/0007_auto__add_helptext.py      | 214 -----
 ...story_operation__chg_field_recipe_descriptio.py | 225 -----
 ..._add_projectlayer__add_projecttarget__add_pr.py | 286 -------
 ...anch__add_field_project_short_description__a.py | 257 ------
 .../0011_auto__add_field_projectlayer_dirpath.py   | 242 ------
 ...layer_optional__add_field_projecttarget_task.py | 252 ------
 ...erversiondependency__add_unique_layerversion.py | 710 ----------------
 ...mmary__chg_field_layer_summary__chg_field_re.py | 336 --------
 ...web_url__add_field_layer_vcs_web_tree_base_u.py | 336 --------
 ...lptext__chg_field_release_branch__add_index_.py | 359 --------
 ...faultlayer__add_releaselayersourcepriority__.py | 396 ---------
 .../0018_auto__add_field_layer_version_project.py  | 331 --------
 .../orm/migrations/0019_auto__add_buildartifact.py | 342 --------
 ...ion_local_path__add_field_recipe_pathflags__.py | 361 --------
 ...ect__chg_field_project_bitbake_version__chg_.py | 371 --------
 ...k__add_field_layer_version_local_path__del_f.py | 343 --------
 ...ings_no__del_field_build_errors_no__del_fiel.py | 353 --------
 .../0024_auto__add_field_recipe_is_image.py        | 338 --------
 .../0025_auto__add_field_project_is_default.py     | 346 --------
 .../orm/migrations/0026_set_default_project.py     | 374 ---------
 ...e__add_unique_customimagerecipe_name_project.py | 375 ---------
 .../0028_auto__chg_field_logmessage_message.py     | 345 --------
 bitbake/lib/toaster/orm/models.py                  | 107 ++-
 bitbake/lib/toaster/toastergui/urls.py             |   2 +-
 bitbake/lib/toaster/toastergui/views.py            |  24 +-
 bitbake/lib/toaster/toastermain/settings.py        |   4 +-
 bitbake/lib/toaster/toastermain/urls.py            |   2 +-
 bitbake/toaster-requirements.txt                   |   3 +-
 51 files changed, 775 insertions(+), 10222 deletions(-)
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0002_auto__add_field_buildenvironment_sourcedir__add_field_buildenvironment.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0003_auto__add_field_brlayer_dirpath.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0004_loadinitialdata.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0005_auto__add_brerror.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0006_auto__add_brbitbake.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0007_auto__add_field_buildrequest_environment__chg_field_buildrequest_build.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0008_brarchive.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_layer_version.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0002_auto__add_field_build_timespent.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0003_timespent.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0004_auto__add_field_package_installed_name.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0005_auto__add_target_image_file__add_target_file__add_field_variablehistor.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0006_auto__add_field_target_image_size__add_field_target_license_manifest_p.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0007_auto__add_helptext.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0008_auto__chg_field_variablehistory_operation__chg_field_recipe_descriptio.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0009_auto__add_projectvariable__add_projectlayer__add_projecttarget__add_pr.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0010_auto__add_field_project_branch__add_field_project_short_description__a.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0011_auto__add_field_projectlayer_dirpath.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0012_auto__add_field_projectlayer_optional__add_field_projecttarget_task.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0013_auto__add_release__add_layerversiondependency__add_unique_layerversion.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0014_auto__chg_field_package_summary__chg_field_layer_summary__chg_field_re.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0015_auto__add_field_layer_vcs_web_url__add_field_layer_vcs_web_tree_base_u.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0016_auto__add_field_release_helptext__chg_field_release_branch__add_index_.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0017_auto__del_toastersettingdefaultlayer__add_releaselayersourcepriority__.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0018_auto__add_field_layer_version_project.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0019_auto__add_buildartifact.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0020_auto__add_field_layer_version_local_path__add_field_recipe_pathflags__.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0021_auto__chg_field_build_project__chg_field_project_bitbake_version__chg_.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0022_auto__add_field_target_task__add_field_layer_version_local_path__del_f.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0023_auto__del_field_build_warnings_no__del_field_build_errors_no__del_fiel.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0024_auto__add_field_recipe_is_image.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0025_auto__add_field_project_is_default.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0026_set_default_project.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_unique_customimagerecipe_name_project.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message.py

--
Regards,
Ed

author
#2 lore raw

PATCH 2/18 toaster: Remove South migrations

South has been deprecated in favour of Django's own migration framework, so remove the old South migrations and replace them with Django ones.

[YOCTO #8364]

---
 .../toaster/bldcontrol/migrations/0001_initial.py  | 265 +++---
 ...onment_sourcedir__add_field_buildenvironment.py | 106 ---
 .../0003_auto__add_field_brlayer_dirpath.py        |  99 ---
 .../bldcontrol/migrations/0004_loadinitialdata.py  | 104 ---
 .../migrations/0005_auto__add_brerror.py           | 112 ---
 .../migrations/0006_auto__add_brbitbake.py         | 128 ---
 ...st_environment__chg_field_buildrequest_build.py | 145 ----
 .../bldcontrol/migrations/0008_brarchive.py        | 138 ---
 .../0009_auto__add_field_brlayer_layer_version.py  | 180 ----
 bitbake/lib/toaster/orm/migrations/0001_initial.py | 928 ++++++++++++---------
 .../0002_auto__add_field_build_timespent.py        | 180 ----
 .../lib/toaster/orm/migrations/0003_timespent.py   | 182 ----
 .../0004_auto__add_field_package_installed_name.py | 181 ----
 ...e__add_target_file__add_field_variablehistor.py | 281 -------
 ...ge_size__add_field_target_license_manifest_p.py | 235 ------
 .../orm/migrations/0007_auto__add_helptext.py      | 214 -----
 ...story_operation__chg_field_recipe_descriptio.py | 225 -----
 ..._add_projectlayer__add_projecttarget__add_pr.py | 286 -------
 ...anch__add_field_project_short_description__a.py | 257 ------
 .../0011_auto__add_field_projectlayer_dirpath.py   | 242 ------
 ...layer_optional__add_field_projecttarget_task.py | 252 ------
 ...erversiondependency__add_unique_layerversion.py | 710 ----------------
 ...mmary__chg_field_layer_summary__chg_field_re.py | 336 --------
 ...web_url__add_field_layer_vcs_web_tree_base_u.py | 336 --------
 ...lptext__chg_field_release_branch__add_index_.py | 359 --------
 ...faultlayer__add_releaselayersourcepriority__.py | 396 ---------
 .../0018_auto__add_field_layer_version_project.py  | 331 --------
 .../orm/migrations/0019_auto__add_buildartifact.py | 342 --------
 ...ion_local_path__add_field_recipe_pathflags__.py | 361 --------
 ...ect__chg_field_project_bitbake_version__chg_.py | 371 --------
 ...k__add_field_layer_version_local_path__del_f.py | 343 --------
 ...ings_no__del_field_build_errors_no__del_fiel.py | 353 --------
 .../0024_auto__add_field_recipe_is_image.py        | 338 --------
 .../0025_auto__add_field_project_is_default.py     | 346 --------
 .../orm/migrations/0026_set_default_project.py     | 374 ---------
 ...e__add_unique_customimagerecipe_name_project.py | 375 ---------
 .../0028_auto__chg_field_logmessage_message.py     | 345 --------
 37 files changed, 641 insertions(+), 10115 deletions(-)
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0002_auto__add_field_buildenvironment_sourcedir__add_field_buildenvironment.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0003_auto__add_field_brlayer_dirpath.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0004_loadinitialdata.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0005_auto__add_brerror.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0006_auto__add_brbitbake.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0007_auto__add_field_buildrequest_environment__chg_field_buildrequest_build.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0008_brarchive.py
 delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_layer_version.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0002_auto__add_field_build_timespent.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0003_timespent.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0004_auto__add_field_package_installed_name.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0005_auto__add_target_image_file__add_target_file__add_field_variablehistor.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0006_auto__add_field_target_image_size__add_field_target_license_manifest_p.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0007_auto__add_helptext.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0008_auto__chg_field_variablehistory_operation__chg_field_recipe_descriptio.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0009_auto__add_projectvariable__add_projectlayer__add_projecttarget__add_pr.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0010_auto__add_field_project_branch__add_field_project_short_description__a.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0011_auto__add_field_projectlayer_dirpath.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0012_auto__add_field_projectlayer_optional__add_field_projecttarget_task.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0013_auto__add_release__add_layerversiondependency__add_unique_layerversion.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0014_auto__chg_field_package_summary__chg_field_layer_summary__chg_field_re.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0015_auto__add_field_layer_vcs_web_url__add_field_layer_vcs_web_tree_base_u.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0016_auto__add_field_release_helptext__chg_field_release_branch__add_index_.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0017_auto__del_toastersettingdefaultlayer__add_releaselayersourcepriority__.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0018_auto__add_field_layer_version_project.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0019_auto__add_buildartifact.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0020_auto__add_field_layer_version_local_path__add_field_recipe_pathflags__.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0021_auto__chg_field_build_project__chg_field_project_bitbake_version__chg_.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0022_auto__add_field_target_task__add_field_layer_version_local_path__del_f.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0023_auto__del_field_build_warnings_no__del_field_build_errors_no__del_fiel.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0024_auto__add_field_recipe_is_image.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0025_auto__add_field_project_is_default.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0026_set_default_project.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_unique_customimagerecipe_name_project.py
 delete mode 100644 bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message.py
bitbake/lib/toaster/bldcontrol/migrations/0001_initial.py +112 -153
index a7e6350..67db378 100644
@@ -1,154 +1,113 @@
 # -*- 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 'BuildEnvironment'
-        db.create_table(u'bldcontrol_buildenvironment', (
-            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('address', self.gf('django.db.models.fields.CharField')(max_length=254)),
-            ('betype', self.gf('django.db.models.fields.IntegerField')()),
-            ('bbaddress', self.gf('django.db.models.fields.CharField')(max_length=254, blank=True)),
-            ('bbport', self.gf('django.db.models.fields.IntegerField')(default=-1)),
-            ('bbtoken', self.gf('django.db.models.fields.CharField')(max_length=126, blank=True)),
-            ('bbstate', self.gf('django.db.models.fields.IntegerField')(default=0)),
-            ('lock', self.gf('django.db.models.fields.IntegerField')(default=0)),
-            ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-        ))
-        db.send_create_signal(u'bldcontrol', ['BuildEnvironment'])
-
-        # Adding model 'BuildRequest'
-        db.create_table(u'bldcontrol_buildrequest', (
-            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Project'])),
-            ('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Build'], null=True)),
-            ('state', self.gf('django.db.models.fields.IntegerField')(default=0)),
-            ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-        ))
-        db.send_create_signal(u'bldcontrol', ['BuildRequest'])
-
-        # Adding model 'BRLayer'
-        db.create_table(u'bldcontrol_brlayer', (
-            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('req', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['bldcontrol.BuildRequest'])),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('giturl', self.gf('django.db.models.fields.CharField')(max_length=254)),
-            ('commit', self.gf('django.db.models.fields.CharField')(max_length=254)),
-        ))
-        db.send_create_signal(u'bldcontrol', ['BRLayer'])
-
-        # Adding model 'BRVariable'
-        db.create_table(u'bldcontrol_brvariable', (
-            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('req', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['bldcontrol.BuildRequest'])),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('value', self.gf('django.db.models.fields.TextField')(blank=True)),
-        ))
-        db.send_create_signal(u'bldcontrol', ['BRVariable'])
-
-        # Adding model 'BRTarget'
-        db.create_table(u'bldcontrol_brtarget', (
-            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('req', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['bldcontrol.BuildRequest'])),
-            ('target', self.gf('django.db.models.fields.CharField')(max_length=100)),
-            ('task', self.gf('django.db.models.fields.CharField')(max_length=100, null=True)),
-        ))
-        db.send_create_signal(u'bldcontrol', ['BRTarget'])
-
-
-    def backwards(self, orm):
-        # Deleting model 'BuildEnvironment'
-        db.delete_table(u'bldcontrol_buildenvironment')
-
-        # Deleting model 'BuildRequest'
-        db.delete_table(u'bldcontrol_buildrequest')
-
-        # Deleting model 'BRLayer'
-        db.delete_table(u'bldcontrol_brlayer')
-
-        # Deleting model 'BRVariable'
-        db.delete_table(u'bldcontrol_brvariable')
-
-        # Deleting model 'BRTarget'
-        db.delete_table(u'bldcontrol_brtarget')
-
-
-    models = {
-        u'bldcontrol.brlayer': {
-            'Meta': {'object_name': 'BRLayer'},
-            'commit': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
-            'giturl': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"})
-        },
-        u'bldcontrol.brtarget': {
-            'Meta': {'object_name': 'BRTarget'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"}),
-            'target': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
-        },
-        u'bldcontrol.brvariable': {
-            'Meta': {'object_name': 'BRVariable'},
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"}),
-            'value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
-        },
-        u'bldcontrol.buildenvironment': {
-            'Meta': {'object_name': 'BuildEnvironment'},
-            'address': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
-            'bbaddress': ('django.db.models.fields.CharField', [], {'max_length': '254', 'blank': 'True'}),
-            'bbport': ('django.db.models.fields.IntegerField', [], {'default': '-1'}),
-            'bbstate': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'bbtoken': ('django.db.models.fields.CharField', [], {'max_length': '126', 'blank': 'True'}),
-            'betype': ('django.db.models.fields.IntegerField', [], {}),
-            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lock': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
-        },
-        u'bldcontrol.buildrequest': {
-            'Meta': {'object_name': 'BuildRequest'},
-            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']", 'null': 'True'}),
-            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
-            'state': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
-        },
-        u'orm.build': {
-            'Meta': {'object_name': 'Build'},
-            'bitbake_version': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
-            'build_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'completed_on': ('django.db.models.fields.DateTimeField', [], {}),
-            'cooker_log_path': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
-            'distro': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'distro_version': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'errors_no': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'machine': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'outcome': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
-            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']", 'null': 'True'}),
-            'started_on': ('django.db.models.fields.DateTimeField', [], {}),
-            'timespent': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'warnings_no': ('django.db.models.fields.IntegerField', [], {'default': '0'})
-        },
-        u'orm.project': {
-            'Meta': {'object_name': 'Project'},
-            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
-        }
-    }
-
-    complete_apps = ['bldcontrol']
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('orm', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='BRBitbake',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('giturl', models.CharField(max_length=254)),
+                ('commit', models.CharField(max_length=254)),
+                ('dirpath', models.CharField(max_length=254)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='BRError',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('errtype', models.CharField(max_length=100)),
+                ('errmsg', models.TextField()),
+                ('traceback', models.TextField()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='BRLayer',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('name', models.CharField(max_length=100)),
+                ('giturl', models.CharField(max_length=254)),
+                ('commit', models.CharField(max_length=254)),
+                ('dirpath', models.CharField(max_length=254)),
+                ('layer_version', models.ForeignKey(to='orm.Layer_Version', null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='BRTarget',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('target', models.CharField(max_length=100)),
+                ('task', models.CharField(max_length=100, null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='BRVariable',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('name', models.CharField(max_length=100)),
+                ('value', models.TextField(blank=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='BuildEnvironment',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('address', models.CharField(max_length=254)),
+                ('betype', models.IntegerField(choices=[(0, b'local'), (1, b'ssh')])),
+                ('bbaddress', models.CharField(max_length=254, blank=True)),
+                ('bbport', models.IntegerField(default=-1)),
+                ('bbtoken', models.CharField(max_length=126, blank=True)),
+                ('bbstate', models.IntegerField(default=0, choices=[(0, b'stopped'), (1, b'started')])),
+                ('sourcedir', models.CharField(max_length=512, blank=True)),
+                ('builddir', models.CharField(max_length=512, blank=True)),
+                ('lock', models.IntegerField(default=0, choices=[(0, b'free'), (1, b'lock'), (2, b'running')])),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('updated', models.DateTimeField(auto_now=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='BuildRequest',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('state', models.IntegerField(default=0, choices=[(0, b'created'), (1, b'queued'), (2, b'in progress'), (3, b'completed'), (4, b'failed'), (5, b'deleted'), (6, b'archive')])),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('updated', models.DateTimeField(auto_now=True)),
+                ('build', models.OneToOneField(null=True, to='orm.Build')),
+                ('environment', models.ForeignKey(to='bldcontrol.BuildEnvironment', null=True)),
+                ('project', models.ForeignKey(to='orm.Project')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='brvariable',
+            name='req',
+            field=models.ForeignKey(to='bldcontrol.BuildRequest'),
+        ),
+        migrations.AddField(
+            model_name='brtarget',
+            name='req',
+            field=models.ForeignKey(to='bldcontrol.BuildRequest'),
+        ),
+        migrations.AddField(
+            model_name='brlayer',
+            name='req',
+            field=models.ForeignKey(to='bldcontrol.BuildRequest'),
+        ),
+        migrations.AddField(
+            model_name='brerror',
+            name='req',
+            field=models.ForeignKey(to='bldcontrol.BuildRequest'),
+        ),
+        migrations.AddField(
+            model_name='brbitbake',
+            name='req',
+            field=models.OneToOneField(to='bldcontrol.BuildRequest'),
+        ),
+    ]
bitbake/lib/toaster/bldcontrol/migrations/0002_auto__add_field_buildenvironment_sourcedir__add_field_buildenvironment.py deleted +0 -106

107 lines not on this page · raw message

bitbake/lib/toaster/bldcontrol/migrations/0003_auto__add_field_brlayer_dirpath.py deleted +0 -99

100 lines not on this page · raw message

bitbake/lib/toaster/bldcontrol/migrations/0004_loadinitialdata.py deleted +0 -104

104 lines not on this page · raw message

bitbake/lib/toaster/bldcontrol/migrations/0005_auto__add_brerror.py deleted +0 -112

113 lines not on this page · raw message

bitbake/lib/toaster/bldcontrol/migrations/0006_auto__add_brbitbake.py deleted +0 -128

129 lines not on this page · raw message

bitbake/lib/toaster/bldcontrol/migrations/0007_auto__add_field_buildrequest_environment__chg_field_buildrequest_build.py deleted +0 -145

146 lines not on this page · raw message

bitbake/lib/toaster/bldcontrol/migrations/0008_brarchive.py deleted +0 -138

138 lines not on this page · raw message

bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_layer_version.py deleted +0 -180

181 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0001_initial.py +529 -399

929 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0002_auto__add_field_build_timespent.py deleted +0 -180

180 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0003_timespent.py deleted +0 -182

182 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0004_auto__add_field_package_installed_name.py deleted +0 -181

181 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0005_auto__add_target_image_file__add_target_file__add_field_variablehistor.py deleted +0 -281

244 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0006_auto__add_field_target_image_size__add_field_target_license_manifest_p.py deleted +0 -235

235 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0007_auto__add_helptext.py deleted +0 -214

214 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0008_auto__chg_field_variablehistory_operation__chg_field_recipe_descriptio.py deleted +0 -225

225 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0009_auto__add_projectvariable__add_projectlayer__add_projecttarget__add_pr.py deleted +0 -286

286 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0010_auto__add_field_project_branch__add_field_project_short_description__a.py deleted +0 -257

257 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0011_auto__add_field_projectlayer_dirpath.py deleted +0 -242

242 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0012_auto__add_field_projectlayer_optional__add_field_projecttarget_task.py deleted +0 -252

252 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0013_auto__add_release__add_layerversiondependency__add_unique_layerversion.py deleted +0 -710

710 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0014_auto__chg_field_package_summary__chg_field_layer_summary__chg_field_re.py deleted +0 -336

336 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0015_auto__add_field_layer_vcs_web_url__add_field_layer_vcs_web_tree_base_u.py deleted +0 -336

336 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0016_auto__add_field_release_helptext__chg_field_release_branch__add_index_.py deleted +0 -359

359 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0017_auto__del_toastersettingdefaultlayer__add_releaselayersourcepriority__.py deleted +0 -396

396 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0018_auto__add_field_layer_version_project.py deleted +0 -331

331 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0019_auto__add_buildartifact.py deleted +0 -342

342 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0020_auto__add_field_layer_version_local_path__add_field_recipe_pathflags__.py deleted +0 -361

361 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0021_auto__chg_field_build_project__chg_field_project_bitbake_version__chg_.py deleted +0 -371

371 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0022_auto__add_field_target_task__add_field_layer_version_local_path__del_f.py deleted +0 -343

343 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0023_auto__del_field_build_warnings_no__del_field_build_errors_no__del_fiel.py deleted +0 -353

353 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0024_auto__add_field_recipe_is_image.py deleted +0 -338

338 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0025_auto__add_field_project_is_default.py deleted +0 -346

346 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0026_set_default_project.py deleted +0 -374

374 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_unique_customimagerecipe_name_project.py deleted +0 -375

375 lines not on this page · raw message

bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message.py deleted +0 -345

345 lines not on this page · raw message

The rest of this diff is not shown. View the raw message.

Signature · 1 line
2.1.4

Part of the diff is not shown here. View the raw message.

author
#3 lore raw

PATCH 3/18 toaster: Fix references to app paths

In reply to Ed Bartosh

The buildinfohelper runs outside of Django, but still needs access to our Django app classes.

Previously, the imports referenced the toaster.* app, which worked fine. But in Django 1.8, this causes an error about the same module being loaded multiple times from different paths.

Change the paths to our Django modules so they don't cause this error to be thrown. We can do this as we've added our application libraries to sys.path in the buildinfohelper anyway.

[YOCTO #8364]

---
 bitbake/lib/bb/ui/buildinfohelper.py | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
bitbake/lib/bb/ui/buildinfohelper.py +8 -8
index 1d41bba..c099551 100644
@@ -33,14 +33,14 @@ def _configure_toaster():
     sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'toaster'))
 _configure_toaster()
 
-from toaster.orm.models import Build, Task, Recipe, Layer_Version, Layer, Target, LogMessage, HelpText
-from toaster.orm.models import Target_Image_File, BuildArtifact
-from toaster.orm.models import Variable, VariableHistory
-from toaster.orm.models import Package, Package_File, Target_Installed_Package, Target_File
-from toaster.orm.models import Task_Dependency, Package_Dependency
-from toaster.orm.models import Recipe_Dependency
-
-from toaster.orm.models import Project
+from orm.models import Build, Task, Recipe, Layer_Version, Layer, Target, LogMessage, HelpText
+from orm.models import Target_Image_File, BuildArtifact
+from orm.models import Variable, VariableHistory
+from orm.models import Package, Package_File, Target_Installed_Package, Target_File
+from orm.models import Task_Dependency, Package_Dependency
+from orm.models import Recipe_Dependency
+
+from orm.models import Project
 from bldcontrol.models import BuildEnvironment, BuildRequest
 
 from bb.msg import BBLogFormatter as formatter
Signature · 1 line
2.1.4
author
#10 lore raw

PATCH 10/18 toaster: Check Django version against toaster-requirements.txt

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

Instead of hard-coding the required Django version in the start script, look it up from the toaster-requirements.txt file.

[YOCTO #8364]

---
 bitbake/bin/toaster | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
bitbake/bin/toaster +8 -2
index e3c7867..0862a35 100755
@@ -175,9 +175,15 @@ notify_chldexit() {
 
 verify_prereq() {
     # Verify prerequisites
+    regex="([0-9])\.([0-9])"
+    for line in `cat $BBBASEDIR/toaster-requirements.txt | grep Django` ; do
+        [[ `echo $line` =~ $regex ]]
+        required_major_version="${BASH_REMATCH[1]}"
+        required_minor_version="${BASH_REMATCH[2]}"
+    done
 
-    if ! echo "import django; print (1,) == django.VERSION[0:1] and django.VERSION[1:2][0] in (8,)" | python 2>/dev/null | grep True >/dev/null; then
-        printf "This program needs Django 1.8. Please install with\n\npip install django<=1.8.7\n"
+    if ! echo "import django; print ($required_major_version,) == django.VERSION[0:1] and django.VERSION[1:2][0] in ($required_minor_version,)" | python 2>/dev/null | grep True >/dev/null; then
+        printf "This program needs Django $required_major_version.$required_minor_version. Please install with\n\npip install -r $BBBASEDIR/toaster-requirements.txt\n"
         return 2
     fi
 
Signature · 1 line
2.1.4
author
#11 lore raw

PATCH 11/18 toaster: Remove compatible_layerversions() method

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

Remove compatible_layerversions() and replace calls to it with calls to get_all_compatible_layer_versions().

The sorting done in compatible_layerversions() is not relevant, and the code can be simplified by using get_all_compatible_layer_versions().

[YOCTO #8364]

---
 bitbake/lib/toaster/orm/models.py       | 20 ++------------------
 bitbake/lib/toaster/toastergui/views.py | 22 ++++++++++++++--------
 2 files changed, 16 insertions(+), 26 deletions(-)
bitbake/lib/toaster/orm/models.py +2 -18
index b25910a..5b8a45d 100644
@@ -195,23 +195,6 @@ class Project(models.Model):
         except (Variable.DoesNotExist,IndexError):
             return( "not_found" )
 
-    # returns a queryset of compatible layers for a project
-    def compatible_layerversions(self, release = None, layer_name = None):
-        logger.warning("This function is deprecated")
-        if release == None:
-            release = self.release
-        # layers on the same branch or layers specifically set for this project
-        queryset = Layer_Version.objects.filter(((Q(up_branch__name = release.branch_name) & Q(project = None)) | Q(project = self)) & Q(build__isnull=True))
-
-        if layer_name is not None:
-            # we select only a layer name
-            queryset = queryset.filter(layer__name = layer_name)
-
-        # order by layer version priority
-        queryset = queryset.filter(Q(layer_source=None) | Q(layer_source__releaselayersourcepriority__release = release)).select_related('layer_source', 'layer', 'up_branch', "layer_source__releaselayersourcepriority__priority").order_by("-layer_source__releaselayersourcepriority__priority")
-
-        return queryset
-
     def get_all_compatible_layer_versions(self):
         """ Returns Queryset of all Layer_Versions which are compatible with
         this project"""
@@ -1184,7 +1167,8 @@ class Layer_Version(models.Model):
         return self._handle_url_path(self.layer.vcs_web_tree_base_url, '')
 
     def get_equivalents_wpriority(self, project):
-        return project.compatible_layerversions(layer_name = self.layer.name)
+        layer_versions = project.get_all_compatible_layer_versions()
+        return layer_versions.filter(layer__name = self.layer.name)
 
     def get_vcs_reference(self):
         if self.branch is not None and len(self.branch) > 0:
bitbake/lib/toaster/toastergui/views.py +14 -8
index 16f27b8..bd334b9 100755
@@ -2264,16 +2264,17 @@ if True:
                 prj.bitbake_version = prj.release.bitbake_version
                 prj.save()
                 # we need to change the layers
-                for i in prj.projectlayer_set.all():
+                for project in prj.projectlayer_set.all():
                     # find and add a similarly-named layer on the new branch
                     try:
-                        lv = prj.compatible_layerversions(layer_name = i.layercommit.layer.name)[0]
-                        ProjectLayer.objects.get_or_create(project = prj, layercommit = lv)
+                        layer_versions = prj.get_all_compatible_layer_versions()
+                        layer_versions = layer_versions.filter(layer__name = project.layercommit.layer.name)
+                        ProjectLayer.objects.get_or_create(project = prj, layercommit = layer_versions.first())
                     except IndexError:
                         pass
                     finally:
                         # get rid of the old entry
-                        i.delete()
+                        project.delete()
 
             if 'machineName' in request.POST:
                 machinevar = prj.projectvariable_set.get(name="MACHINE")
@@ -2383,12 +2384,17 @@ if True:
 
             retval = []
 
-            for i in prj.projectlayer_set.all():
-                lv = prj.compatible_layerversions(release = Release.objects.get(pk=new_release_id)).filter(layer__name = i.layercommit.layer.name)
+            for project in prj.projectlayer_set.all():
+                release = Release.objects.get(pk = new_release_id)
+
+                layer_versions = prj.get_all_compatible_layer_versions()
+                layer_versions = layer_versions.filter(release = release)
+                layer_versions = layer_versions.filter(layer__name = project.layercommit.layer.name)
+
                 # there is no layer_version with the new release id,
                 # and the same name
-                if lv.count() < 1:
-                    retval.append(i)
+                if layer_versions.count() < 1:
+                    retval.append(project)
 
             return response({"error":"ok",
                              "rows" : map( _lv_to_dict(prj),
Signature · 1 line
2.1.4
author
#12 lore raw

PATCH 12/18 toaster: Amend regex for MySQL database URLs

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

The database URL detection doesn't admit a MySQL URL without a port.

As this is a common case (e.g. you would set the HOST to a mysql.sock path if pointing at a local MySQL server, with no port setting), amend the regex so it will correctly recognise paths, as well as HOST:PORT URLs.

---
 bitbake/lib/toaster/toastermain/settings.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
bitbake/lib/toaster/toastermain/settings.py +2 -1
index 7c559bc..b6bdcd8 100644
@@ -64,6 +64,7 @@ if 'sqlite' in DATABASES['default']['ENGINE']:
 
 if 'DATABASE_URL' in os.environ:
     dburl = os.environ['DATABASE_URL']
+
     if dburl.startswith('sqlite3://'):
         result = re.match('sqlite3://(.*)', dburl)
         if result is None:
@@ -78,7 +79,7 @@ if 'DATABASE_URL' in os.environ:
         }
     elif dburl.startswith('mysql://'):
         # URL must be in this form: mysql://user:pass@host:port/name
-        result = re.match(r"mysql://([^:]*):([^@]*)@([^:]*):(\d+)/([^/]*)", dburl)
+        result = re.match(r"mysql://([^:]*):([^@]*)@([^:]*):(\d*)/([^/]*)", dburl)
         if result is None:
             raise Exception("ERROR: Could not read mysql database url: %s" % dburl)
         DATABASES['default'] = {
Signature · 1 line
2.1.4
author
#14 lore raw

PATCH 14/18 toaster: fixed format strings

In reply to Ed Bartosh

Printing id as a number breaks toaster if object is not saved yet as id/pk is None in this case.

Changed format spec to print id as a string in __str__ and __unicode__ methods of Build, Task and LayerVersion models.

---
 bitbake/lib/toaster/orm/models.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
bitbake/lib/toaster/orm/models.py +3 -3
index 5b8a45d..7b99a1f 100644
@@ -370,7 +370,7 @@ class Build(models.Model):
             return self.get_outcome_text()
 
     def __str__(self):
-        return "%d %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()]))
+        return "%s %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()]))
 
 
 # an Artifact is anything that results from a Build, and may be of interest to the user, and is not stored elsewhere
@@ -552,7 +552,7 @@ class Task(models.Model):
     sstate_text  = property(get_sstate_text)
 
     def __unicode__(self):
-        return "%d(%d) %s:%s" % (self.pk, self.build.pk, self.recipe.name, self.task_name)
+        return "%s(%s) %s:%s" % (self.pk, self.build.pk, self.recipe.name, self.task_name)
 
     class Meta:
         ordering = ('order', 'recipe' ,)
@@ -1202,7 +1202,7 @@ class Layer_Version(models.Model):
         return sorted(result, key=lambda x: x.layer.name)
 
     def __unicode__(self):
-        return "%d %s (VCS %s, Project %s)" % (self.pk, str(self.layer), self.get_vcs_reference(), self.build.project if self.build is not None else "No project")
+        return "%s %s (VCS %s, Project %s)" % (self.pk, str(self.layer), self.get_vcs_reference(), self.build.project if self.build is not None else "No project")
 
     class Meta:
         unique_together = ("layer_source", "up_id")
Signature · 1 line
2.1.4
author
#16 lore raw

PATCH 16/18 toaster: removed extra calls of migrate

In reply to Ed Bartosh

One manage.py migrate should be enough to apply migrations for all applications. Extra calls just slow toaster script down.

Removed calls of migrate for orm and bldcontrol apps.

---
 bitbake/bin/toaster | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)
bitbake/bin/toaster +1 -19
index 0862a35..7645c56 100755
@@ -58,26 +58,8 @@ webserverStartAll()
     # python bitbake/lib/toaster/manage.py python manage.py createsuperuser --username=<ME>
     python $BBBASEDIR/lib/toaster/manage.py migrate --noinput || retval=1
 
-    python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2
-
-    if [ $retval -eq 1 ]; then
-        echo "Failed db sync, aborting system start" 1>&2
-        return $retval
-    fi
-
-    python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
-
-    if [ $retval -eq 1 ]; then
-        printf "\nError on orm migration, rolling back...\n"
-        python $BBBASEDIR/lib/toaster/manage.py migrate orm 0001_initial --fake
-        return $retval
-    fi
-
-    python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1
-
     if [ $retval -eq 1 ]; then
-        printf "\nError on bldcontrol migration, rolling back...\n"
-        python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol 0001_initial --fake
+        echo "Failed migrations, aborting system start" 1>&2
         return $retval
     fi
 
Signature · 1 line
2.1.4
author
#4 lore raw

PATCH 4/18 toaster: Create default project with get_or_create* method

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

Rather than maintain data as part of the migrations (as was done for the default project previously), create the default (cli builds) project on demand as a by-product of getting it from the database.

[YOCTO #8364]

---
 bitbake/lib/bb/ui/buildinfohelper.py    |  9 +++++++--
 bitbake/lib/toaster/orm/models.py       | 23 +++++++++++++++--------
 bitbake/lib/toaster/toastergui/views.py |  2 +-
 3 files changed, 23 insertions(+), 11 deletions(-)
bitbake/lib/bb/ui/buildinfohelper.py +7 -2
index c099551..87e03e7 100644
@@ -146,7 +146,7 @@ class ORMWrapper(object):
             prj = Project.objects.get(pk = project_id)
 
         else:                           # this build was triggered by a legacy system, or command line interactive mode
-            prj = Project.objects.get_default_project()
+            prj = Project.objects.get_or_create_default_project()
             logger.debug(1, "buildinfohelper: project is not specified, defaulting to %s" % prj)
 
 
@@ -308,6 +308,11 @@ class ORMWrapper(object):
         # then we are wholly responsible for the data
         # and therefore we return the 'real' recipe rather than the build
         # history copy of the recipe.
+        if  recipe_information['layer_version'].build is not None and \
+            recipe_information['layer_version'].build.project == \
+                Project.objects.get_or_create_default_project():
+            return recipe
+
         if built_recipe is None:
             return recipe
 
@@ -345,7 +350,7 @@ class ORMWrapper(object):
         # If we're doing a command line build then associate this new layer with the
         # project to avoid it 'contaminating' toaster data
         project = None
-        if build_obj.project == Project.objects.get_default_project():
+        if build_obj.project == Project.objects.get_or_create_default_project():
             project = build_obj.project
 
         layer_version_object, _ = Layer_Version.objects.get_or_create(
bitbake/lib/toaster/orm/models.py +15 -8
index 0174233..4a868e7 100644
@@ -91,18 +91,25 @@ class ProjectManager(models.Manager):
 
         return prj
 
-    def create(self, *args, **kwargs):
-        raise Exception("Invalid call to Project.objects.create. Use Project.objects.create_project() to create a project")
-
     # return single object with is_default = True
-    def get_default_project(self):
+    def get_or_create_default_project(self):
         projects = super(ProjectManager, self).filter(is_default = True)
+
         if len(projects) > 1:
-            raise Exception("Inconsistent project data: multiple " +
-                            "default projects (i.e. with is_default=True)")
+            raise Exception('Inconsistent project data: multiple ' +
+                            'default projects (i.e. with is_default=True)')
         elif len(projects) < 1:
-            raise Exception("Inconsistent project data: no default project found")
-        return projects[0]
+            options = {
+                'name': 'Command line builds',
+                'short_description': 'Project for builds started outside Toaster',
+                'is_default': True
+            }
+            project = Project.objects.create(**options)
+            project.save()
+
+            return project
+        else:
+            return projects[0]
 
 class Project(models.Model):
     search_allowed_fields = ['name', 'short_description', 'release__name', 'release__branch_name']
bitbake/lib/toaster/toastergui/views.py +1 -1
index 243bb09..16f27b8 100755
@@ -73,7 +73,7 @@ class MimeTypeFinder(object):
 def landing(request):
     # in build mode, we redirect to the command-line builds page
     # if there are any builds for the default (cli builds) project
-    default_project = Project.objects.get_default_project()
+    default_project = Project.objects.get_or_create_default_project()
     default_project_builds = Build.objects.filter(project = default_project)
 
     # we only redirect to projects page if there is a user-generated project
Signature · 1 line
2.1.4
author
#5 lore raw

PATCH 5/18 toaster: Start Django machinery for database access

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

buildinfohelper, with the new import paths for our Django models and Django 1.8, was not getting an active connection to the database.

In buildinfohelper, call django.setup() explicitly to make sure that the database connection is ready and models can be queried and saved.

[YOCTO #8364]

---
 bitbake/lib/bb/ui/buildinfohelper.py | 3 +++
 1 file changed, 3 insertions(+)
bitbake/lib/bb/ui/buildinfohelper.py +3 -0
index 87e03e7..04ce23a 100644
@@ -24,6 +24,7 @@ import os
 os.environ["DJANGO_SETTINGS_MODULE"] = "toaster.toastermain.settings"
 
 
+import django
 from django.utils import timezone
 
 
@@ -33,6 +34,8 @@ def _configure_toaster():
     sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'toaster'))
 _configure_toaster()
 
+django.setup()
+
 from orm.models import Build, Task, Recipe, Layer_Version, Layer, Target, LogMessage, HelpText
 from orm.models import Target_Image_File, BuildArtifact
 from orm.models import Variable, VariableHistory
Signature · 1 line
2.1.4
author
#6 lore raw

PATCH 6/18 toaster: rename get_query_set -> get_queryset

In reply to Ed Bartosh

Renamed get_query_set to get_queryset as get_queryset causes deprecation warning in Django 1.7 and is deprecated in Django 1.8

---
 bitbake/lib/toaster/orm/models.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
bitbake/lib/toaster/orm/models.py +4 -4
index 4a868e7..b25910a 100644
@@ -598,8 +598,8 @@ class Package(models.Model):
 class Package_DependencyManager(models.Manager):
     use_for_related_fields = True
 
-    def get_query_set(self):
-        return super(Package_DependencyManager, self).get_query_set().exclude(package_id = F('depends_on__id'))
+    def get_queryset(self):
+        return super(Package_DependencyManager, self).get_queryset().exclude(package_id = F('depends_on__id'))
 
 class Package_Dependency(models.Model):
     TYPE_RDEPENDS = 0
@@ -699,8 +699,8 @@ class Recipe(models.Model):
 class Recipe_DependencyManager(models.Manager):
     use_for_related_fields = True
 
-    def get_query_set(self):
-        return super(Recipe_DependencyManager, self).get_query_set().exclude(recipe_id = F('depends_on__id'))
+    def get_queryset(self):
+        return super(Recipe_DependencyManager, self).get_queryset().exclude(recipe_id = F('depends_on__id'))
 
 class Recipe_Dependency(models.Model):
     TYPE_DEPENDS = 0
Signature · 1 line
2.1.4
author
#8 lore raw

PATCH 8/18 toaster: Prevent deprecation warnings for RedirectView

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

The API for RedirectView is due to change in Django 1.9, which means that Toaster generates deprecation warnings.

Set the "permanent" flag when constructing RedirectView instances to prevent this warning.

[YOCTO #8364]

---
 bitbake/lib/toaster/bldcollector/urls.py | 1 -
 bitbake/lib/toaster/toastergui/urls.py   | 2 +-
 bitbake/lib/toaster/toastermain/urls.py  | 2 +-
 3 files changed, 2 insertions(+), 3 deletions(-)
bitbake/lib/toaster/bldcollector/urls.py +0 -1
index 144387b..64722f2 100644
@@ -18,7 +18,6 @@
 
 
 from django.conf.urls import patterns, include, url
-from django.views.generic import RedirectView
 
 urlpatterns = patterns('bldcollector.views',
         # landing point for pushing a bitbake_eventlog.json file to this toaster instace
bitbake/lib/toaster/toastergui/urls.py +1 -1
index a1adbb7..2bf2d99 100644
@@ -168,5 +168,5 @@ urlpatterns = patterns('toastergui.views',
             name='xhr_customrecipe'),
 
           # default redirection
-        url(r'^$', RedirectView.as_view( url= 'landing')),
+        url(r'^$', RedirectView.as_view(url='landing', permanent=True)),
 )
bitbake/lib/toaster/toastermain/urls.py +1 -1
index 5ce5a92..534679d 100644
@@ -45,7 +45,7 @@ urlpatterns = patterns('',
     url(r'^orm/eventfile$', 'bldcollector.views.eventfile'),
 
     # if no application is selected, we have the magic toastergui app here
-    url(r'^$', never_cache(RedirectView.as_view(url='/toastergui/'))),
+    url(r'^$', never_cache(RedirectView.as_view(url='/toastergui/', permanent=True))),
 )
 
 import toastermain.settings
Signature · 1 line
2.1.4
author
#7 lore raw

PATCH 7/18 toaster: Update API used to make runbuilds methods run in transactions

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

runbuilds previously had its methods decorated with transaction.commit_on_success, which is now deprecated. transaction.atomic is an (almost) drop-in replacement for this, so use this instead.

[YOCTO #8364]

---
 bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py +2 -2
index 48dc618..d40dedb 100644
@@ -14,14 +14,14 @@ class Command(NoArgsCommand):
     help    = "Schedules and executes build requests as possible. Does not return (interrupt with Ctrl-C)"
 
 
-    @transaction.commit_on_success
+    @transaction.atomic
     def _selectBuildEnvironment(self):
         bec = getBuildEnvironmentController(lock = BuildEnvironment.LOCK_FREE)
         bec.be.lock = BuildEnvironment.LOCK_LOCK
         bec.be.save()
         return bec
 
-    @transaction.commit_on_success
+    @transaction.atomic
     def _selectBuildRequest(self):
         br = BuildRequest.objects.filter(state = BuildRequest.REQ_QUEUED).order_by('pk')[0]
         br.state = BuildRequest.REQ_INPROGRESS
Signature · 1 line
2.1.4
author
#9 lore raw

PATCH 9/18 toaster: Update deprecated manage.py command

In reply to Ed Bartosh

From: Elliot Smith <[email protected]>

syncdb is deprecated in favour of migrate in Django 1.7:
https://docs.djangoproject.com/en/1.8/releases/1.7/#schema-migrations

Update to the "migrate" command in Toaster's start script.

[YOCTO #8364]

---
 bitbake/bin/toaster | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
bitbake/bin/toaster +1 -1
index 528e17e..e3c7867 100755
@@ -56,7 +56,7 @@ webserverStartAll()
     retval=0
     # you can always add a superuser later via
     # python bitbake/lib/toaster/manage.py python manage.py createsuperuser --username=<ME>
-    python $BBBASEDIR/lib/toaster/manage.py syncdb --noinput || retval=1
+    python $BBBASEDIR/lib/toaster/manage.py migrate --noinput || retval=1
 
     python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2
 
Signature · 1 line
2.1.4
author
#13 lore raw

PATCH 13/18 toaster: use OneToOneField instead of ForeignKey

In reply to Ed Bartosh

Used OneToOneField to reference BuildRequest in BRBitbake model.

Fixed django warning:
WARNINGS: Setting unique=True on a ForeignKey has the same effect
as using a OneToOneField.

---
 bitbake/lib/toaster/bldcontrol/bbcontroller.py              |  4 ++--
 bitbake/lib/toaster/bldcontrol/localhostbecontroller.py     | 13 ++++++-------
 .../lib/toaster/bldcontrol/management/commands/runbuilds.py |  2 +-
 bitbake/lib/toaster/bldcontrol/models.py                    |  2 +-
 bitbake/lib/toaster/bldcontrol/tests.py                     |  6 +++---
 5 files changed, 13 insertions(+), 14 deletions(-)
bitbake/lib/toaster/bldcontrol/bbcontroller.py +2 -2
index 8b99318..1b8587b 100644
@@ -138,10 +138,10 @@ class BuildEnvironmentController(object):
         raise Exception("FIXME: Must override in order to actually start the BB server")
 
 
-    def setLayers(self, bbs, ls):
+    def setLayers(self, bitbake, ls):
         """ Checks-out bitbake executor and layers from git repositories.
             Sets the layer variables in the config file, after validating local layer paths.
-            The bitbakes must be a 1-length list of BRBitbake
+            bitbake must be a single BRBitbake instance
             The layer paths must be in a list of BRLayer object
 
             a word of attention: by convention, the first layer for any build will be poky!
bitbake/lib/toaster/bldcontrol/localhostbecontroller.py +6 -7
index 92d9ac5..f0edcb0 100644
@@ -115,18 +115,17 @@ class LocalhostBEController(BuildEnvironmentController):
         return local_checkout_path
 
 
-    def setLayers(self, bitbakes, layers, targets):
+    def setLayers(self, bitbake, layers, targets):
         """ a word of attention: by convention, the first layer for any build will be poky! """
 
         assert self.be.sourcedir is not None
-        assert len(bitbakes) == 1
         # set layers in the layersource
 
         # 1. get a list of repos with branches, and map dirpaths for each layer
         gitrepos = {}
 
-        gitrepos[(bitbakes[0].giturl, bitbakes[0].commit)] = []
-        gitrepos[(bitbakes[0].giturl, bitbakes[0].commit)].append( ("bitbake", bitbakes[0].dirpath) )
+        gitrepos[(bitbake.giturl, bitbake.commit)] = []
+        gitrepos[(bitbake.giturl, bitbake.commit)].append( ("bitbake", bitbake.dirpath) )
 
         for layer in layers:
             # we don't process local URLs
@@ -198,7 +197,7 @@ class LocalhostBEController(BuildEnvironmentController):
                 # make sure we have a working bitbake
                 if not os.path.exists(os.path.join(self.pokydirname, 'bitbake')):
                     logger.debug("localhostbecontroller: checking bitbake into the poky dirname %s " % self.pokydirname)
-                    self._shellcmd("git clone -b \"%s\" \"%s\" \"%s\" " % (bitbakes[0].commit, bitbakes[0].giturl, os.path.join(self.pokydirname, 'bitbake')))
+                    self._shellcmd("git clone -b \"%s\" \"%s\" \"%s\" " % (bitbake.commit, bitbake.giturl, os.path.join(self.pokydirname, 'bitbake')))
 
             # verify our repositories
             for name, dirpath in gitrepos[(giturl, commit)]:
@@ -224,7 +223,7 @@ class LocalhostBEController(BuildEnvironmentController):
         for target in targets:
             try:
                 customrecipe = CustomImageRecipe.objects.get(name=target.target,
-                                                             project=bitbakes[0].req.project)
+                                                             project=bitbake.req.project)
             except CustomImageRecipe.DoesNotExist:
                 continue # not a custom recipe, skip
 
@@ -278,7 +277,7 @@ class LocalhostBEController(BuildEnvironmentController):
 
 
     def triggerBuild(self, bitbake, layers, variables, targets):
-        # set up the buid environment with the needed layers
+        # set up the build environment with the needed layers
         self.setLayers(bitbake, layers, targets)
 
         # get the bb server running with the build req id and build env id
bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py +1 -1
index d40dedb..edf71a7 100644
@@ -57,7 +57,7 @@ class Command(NoArgsCommand):
             br.save()
 
             # this triggers an async build
-            bec.triggerBuild(br.brbitbake_set.all(), br.brlayer_set.all(), br.brvariable_set.all(), br.brtarget_set.all())
+            bec.triggerBuild(br.brbitbake, br.brlayer_set.all(), br.brvariable_set.all(), br.brtarget_set.all())
 
         except Exception as e:
             logger.error("runbuilds: Error launching build %s" % e)
bitbake/lib/toaster/bldcontrol/models.py +1 -1
index ab41105..a3a49ce 100644
@@ -106,7 +106,7 @@ class BRLayer(models.Model):
     layer_version = models.ForeignKey(Layer_Version, null=True)
 
 class BRBitbake(models.Model):
-    req         = models.ForeignKey(BuildRequest, unique = True)    # only one bitbake for a request
+    req         = models.OneToOneField(BuildRequest)    # only one bitbake for a request
     giturl      = models.CharField(max_length =254)
     commit      = models.CharField(max_length = 254)
     dirpath     = models.CharField(max_length = 254)
bitbake/lib/toaster/bldcontrol/tests.py +3 -3
index f54cf7f..141b42a 100644
@@ -18,7 +18,7 @@ import subprocess
 import os
 
 # standard poky data hardcoded for testing
-BITBAKE_LAYERS = [type('bitbake_info', (object,), { "giturl": "git://git.yoctoproject.org/poky.git", "dirpath": "", "commit": "HEAD"})]
+BITBAKE_LAYER = type('bitbake_info', (object,), { "giturl": "git://git.yoctoproject.org/poky.git", "dirpath": "", "commit": "HEAD"})
 POKY_LAYERS = [
     type('poky_info', (object,), { "name": "meta", "giturl": "git://git.yoctoproject.org/poky.git", "dirpath": "meta", "commit": "HEAD"}),
     type('poky_info', (object,), { "name": "meta-yocto", "giturl": "git://git.yoctoproject.org/poky.git", "dirpath": "meta-yocto", "commit": "HEAD"}),
@@ -53,7 +53,7 @@ class BEControllerTests(object):
         bc = self._getBEController(obe)
         try:
             # setting layers, skip any layer info
-            bc.setLayers(BITBAKE_LAYERS, POKY_LAYERS)
+            bc.setLayers(BITBAKE_LAYER, POKY_LAYERS)
         except NotImplementedException,  e:
             print "Test skipped due to command not implemented yet"
             return True
@@ -80,7 +80,7 @@ class BEControllerTests(object):
         layerSet = False
         try:
             # setting layers, skip any layer info
-            layerSet = bc.setLayers(BITBAKE_LAYERS, POKY_LAYERS)
+            layerSet = bc.setLayers(BITBAKE_LAYER, POKY_LAYERS)
         except NotImplementedException:
             print "Test skipped due to command not implemented yet"
             return True
Signature · 1 line
2.1.4
author
#15 lore raw

PATCH 15/18 toaster: work around 'database is locked' error

In reply to Ed Bartosh

When sqlite can not cope with a stream of 'insert' queries it throws 'database is locked' exception.

Wrapping model.save in transaction.atomic context and repeating the call should solve this issue.

---
 bitbake/lib/toaster/orm/models.py | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
bitbake/lib/toaster/orm/models.py +19 -1
index 7b99a1f..630c395 100644
@@ -29,10 +29,28 @@ from django.core import validators
 from django.conf import settings
 import django.db.models.signals
 
-
 import logging
 logger = logging.getLogger("toaster")
 
+if 'sqlite' in settings.DATABASES['default']['ENGINE']:
+    from django.db import transaction, OperationalError
+    from time import sleep
+
+    _base_save = models.Model.save
+    def save(self, *args, **kwargs):
+        while True:
+            try:
+                with transaction.atomic():
+                    return _base_save(self, *args, **kwargs)
+            except OperationalError as err:
+                if 'database is locked' in str(err):
+                    logger.warning("%s, model: %s, args: %s, kwargs: %s",
+                                   err, self.__class__, args, kwargs)
+                    sleep(0.5)
+                    continue
+                raise
+
+    models.Model.save = save
 
 class GitURLValidator(validators.URLValidator):
     import re
Signature · 1 line
2.1.4
author
#17 lore raw

PATCH 17/18 toaster: monkey patch Queryset

In reply to Ed Bartosh

Fixed 'database is locked' issue by monkey patching django QuerySet methods.

The actual patching places were found by bisecting Django codebase.

This commit should be removed after Django is fixed if it's fixed at all.

---
 bitbake/lib/toaster/orm/models.py | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
bitbake/lib/toaster/orm/models.py +30 -0
index 630c395..0df3ca3 100644
@@ -52,6 +52,36 @@ if 'sqlite' in settings.DATABASES['default']['ENGINE']:
 
     models.Model.save = save
 
+    # HACK: Monkey patch Django to fix 'database is locked' issue
+
+    from django.db.models.query import QuerySet
+    _base_insert = QuerySet._insert
+    def _insert(self,  *args, **kwargs):
+        with transaction.atomic(using=self.db, savepoint=False):
+            return _base_insert(self, *args, **kwargs)
+    QuerySet._insert = _insert
+
+    from django.utils import six
+    def _create_object_from_params(self, lookup, params):
+        """
+        Tries to create an object using passed params.
+        Used by get_or_create and update_or_create
+        """
+        try:
+            obj = self.create(**params)
+            return obj, True
+        except IntegrityError:
+            exc_info = sys.exc_info()
+            try:
+                return self.get(**lookup), False
+            except self.model.DoesNotExist:
+                pass
+            six.reraise(*exc_info)
+
+    QuerySet._create_object_from_params = _create_object_from_params
+
+    # end of HACK
+
 class GitURLValidator(validators.URLValidator):
     import re
     regex = re.compile(
Signature · 1 line
2.1.4
author
#18 lore raw

PATCH 18/18 toaster: rework check for Django version

In reply to Ed Bartosh

Checked django version considering information from toaster-requirements.txt, e.g. if requirements file contains Django<1.9 line toaster should be able to check that requirement correctly.

---
 bitbake/bin/toaster              | 21 +++++++--------------
 bitbake/toaster-requirements.txt |  2 +-
 2 files changed, 8 insertions(+), 15 deletions(-)
bitbake/bin/toaster +7 -14
index 7645c56..aa184ba 100755
@@ -156,16 +156,12 @@ notify_chldexit() {
 
 
 verify_prereq() {
-    # Verify prerequisites
-    regex="([0-9])\.([0-9])"
-    for line in `cat $BBBASEDIR/toaster-requirements.txt | grep Django` ; do
-        [[ `echo $line` =~ $regex ]]
-        required_major_version="${BASH_REMATCH[1]}"
-        required_minor_version="${BASH_REMATCH[2]}"
-    done
-
-    if ! echo "import django; print ($required_major_version,) == django.VERSION[0:1] and django.VERSION[1:2][0] in ($required_minor_version,)" | python 2>/dev/null | grep True >/dev/null; then
-        printf "This program needs Django $required_major_version.$required_minor_version. Please install with\n\npip install -r $BBBASEDIR/toaster-requirements.txt\n"
+    # Verify Django version
+    reqfile=$BBBASEDIR/toaster-requirements.txt
+    if ! sed -n 's/Django\([><=]\+\)\(.\+\)/import sys,django;sys.exit(not django.get_version().split(".")\1"\2".split("."))/p' \
+           $reqfile | python - ; then
+        req=`grep ^Django $reqfile`
+        printf "This program needs $req\nPlease install with pip install -r $BBBASEDIR/toaster-requirements.txt\n"
         return 2
     fi
 
@@ -265,10 +261,7 @@ if [ "$1" = 'restart-bitbake' ] ; then
     return $rc
 fi
 
-if ! verify_prereq; then
-    echo "Error: Could not verify that the needed dependencies are installed. Please use virtualenv and pip to install dependencies listed in toaster-requirements.txt" 1>&2
-    return 1
-fi
+verify_prereq || return 1
 
 # We make sure we're running in the current shell and in a good environment
 if [ -z "$BUILDDIR" ] ||  ! which bitbake >/dev/null 2>&1 ; then
bitbake/toaster-requirements.txt +1 -1
index 5d34494..96408c5 100644
@@ -1,4 +1,4 @@
-Django==1.8.6
+Django<1.9
 argparse==1.2.1
 wsgiref==0.1.2
 beautifulsoup4>=4.4.0
Signature · 1 line
2.1.4
#19 lore raw
In reply to Ed Bartosh
Quoted 4 lines · On 08/12/2015 15:31, "[email protected] on behalf of Ed…

Hi,

This patchset upgrades Toaster to work correctly under Django 1.8. It was tested with Django 1.8.6

I tried to run Toaster with this, but when I call the toaster script I get this message:

Unknown command: 'migrate'
Type 'manage.py help' for usage.
Failed migrations, aborting system start
Failed start.

Any ideas about what's I am doing wrong?

Thanks!

Belén

Quoted 194 lines

Please review and submit upstream.

The following changes since commit
befaceb2873ff8c8cc791d48f0324442c15cbcdc:

toaster: return back 'New project' button (2015-12-08 13:10:33 +0200)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib ed/toaster/django_upgrade-8364

http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/toaster/django
_upgrade-8364

Ed Bartosh (9):
toaster: Remove South migrations
toaster: Fix references to app paths
toaster: rename get_query_set -> get_queryset
toaster: use OneToOneField instead of ForeignKey
toaster: fixed format strings
toaster: work around 'database is locked' error
toaster: removed extra calls of migrate
toaster: monkey patch Queryset
toaster: rework check for Django version

Elliot Smith (9):
toaster: Upgrade to Django 1.8.6 and remove South
toaster: Create default project with get_or_create* method
toaster: Start Django machinery for database access
toaster: Update API used to make runbuilds methods run in transactions
toaster: Prevent deprecation warnings for RedirectView
toaster: Update deprecated manage.py command
toaster: Check Django version against toaster-requirements.txt
toaster: Remove compatible_layerversions() method
toaster: Amend regex for MySQL database URLs

bitbake/bin/toaster                                |  41 +-
bitbake/lib/bb/ui/buildinfohelper.py               |  26 +-
bitbake/lib/toaster/bldcollector/urls.py           |   1 -
bitbake/lib/toaster/bldcontrol/bbcontroller.py     |   4 +-
.../toaster/bldcontrol/localhostbecontroller.py    |  13 +-
.../bldcontrol/management/commands/runbuilds.py    |   6 +-
.../toaster/bldcontrol/migrations/0001_initial.py  | 265 +++---
...onment_sourcedir__add_field_buildenvironment.py | 106 ---
.../0003_auto__add_field_brlayer_dirpath.py        |  99 ---
.../bldcontrol/migrations/0004_loadinitialdata.py  | 104 ---
.../migrations/0005_auto__add_brerror.py           | 112 ---
.../migrations/0006_auto__add_brbitbake.py         | 128 ---
...st_environment__chg_field_buildrequest_build.py | 145 ----
.../bldcontrol/migrations/0008_brarchive.py        | 138 ---
.../0009_auto__add_field_brlayer_layer_version.py  | 180 ----
bitbake/lib/toaster/bldcontrol/models.py           |   2 +-
bitbake/lib/toaster/bldcontrol/tests.py            |   6 +-
bitbake/lib/toaster/orm/migrations/0001_initial.py | 928
++++++++++++---------
.../0002_auto__add_field_build_timespent.py        | 180 ----
.../lib/toaster/orm/migrations/0003_timespent.py   | 182 ----
.../0004_auto__add_field_package_installed_name.py | 181 ----
...e__add_target_file__add_field_variablehistor.py | 281 -------
...ge_size__add_field_target_license_manifest_p.py | 235 ------
.../orm/migrations/0007_auto__add_helptext.py      | 214 -----
...story_operation__chg_field_recipe_descriptio.py | 225 -----
..._add_projectlayer__add_projecttarget__add_pr.py | 286 -------
...anch__add_field_project_short_description__a.py | 257 ------
.../0011_auto__add_field_projectlayer_dirpath.py   | 242 ------
...layer_optional__add_field_projecttarget_task.py | 252 ------
...erversiondependency__add_unique_layerversion.py | 710 ----------------
...mmary__chg_field_layer_summary__chg_field_re.py | 336 --------
...web_url__add_field_layer_vcs_web_tree_base_u.py | 336 --------
...lptext__chg_field_release_branch__add_index_.py | 359 --------
...faultlayer__add_releaselayersourcepriority__.py | 396 ---------
.../0018_auto__add_field_layer_version_project.py  | 331 --------
.../orm/migrations/0019_auto__add_buildartifact.py | 342 --------
...ion_local_path__add_field_recipe_pathflags__.py | 361 --------
...ect__chg_field_project_bitbake_version__chg_.py | 371 --------
...k__add_field_layer_version_local_path__del_f.py | 343 --------
...ings_no__del_field_build_errors_no__del_fiel.py | 353 --------
.../0024_auto__add_field_recipe_is_image.py        | 338 --------
.../0025_auto__add_field_project_is_default.py     | 346 --------
.../orm/migrations/0026_set_default_project.py     | 374 ---------
...e__add_unique_customimagerecipe_name_project.py | 375 ---------
.../0028_auto__chg_field_logmessage_message.py     | 345 --------
bitbake/lib/toaster/orm/models.py                  | 107 ++-
bitbake/lib/toaster/toastergui/urls.py             |   2 +-
bitbake/lib/toaster/toastergui/views.py            |  24 +-
bitbake/lib/toaster/toastermain/settings.py        |   4 +-
bitbake/lib/toaster/toastermain/urls.py            |   2 +-
bitbake/toaster-requirements.txt                   |   3 +-
51 files changed, 775 insertions(+), 10222 deletions(-)

delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0002_auto__add_field_buildenviro nment_sourcedir__add_field_buildenvironment.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0003_auto__add_field_brlayer_dir path.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0004_loadinitialdata.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0005_auto__add_brerror.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0006_auto__add_brbitbake.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0007_auto__add_field_buildreques t_environment__chg_field_buildrequest_build.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0008_brarchive.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_lay er_version.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0002_auto__add_field_build_timespent.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0003_timespent.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0004_auto__add_field_package_installed_ name.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0005_auto__add_target_image_file__add_t arget_file__add_field_variablehistor.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0006_auto__add_field_target_image_size_ _add_field_target_license_manifest_p.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0007_auto__add_helptext.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0008_auto__chg_field_variablehistory_op eration__chg_field_recipe_descriptio.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0009_auto__add_projectvariable__add_pro jectlayer__add_projecttarget__add_pr.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0010_auto__add_field_project_branch__ad d_field_project_short_description__a.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0011_auto__add_field_projectlayer_dirpa th.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0012_auto__add_field_projectlayer_optio nal__add_field_projecttarget_task.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0013_auto__add_release__add_layerversio ndependency__add_unique_layerversion.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0014_auto__chg_field_package_summary__c hg_field_layer_summary__chg_field_re.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0015_auto__add_field_layer_vcs_web_url_ _add_field_layer_vcs_web_tree_base_u.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0016_auto__add_field_release_helptext__ chg_field_release_branch__add_index_.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0017_auto__del_toastersettingdefaultlay er__add_releaselayersourcepriority__.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0018_auto__add_field_layer_version_proj ect.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0019_auto__add_buildartifact.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0020_auto__add_field_layer_version_loca l_path__add_field_recipe_pathflags__.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0021_auto__chg_field_build_project__chg _field_project_bitbake_version__chg_.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0022_auto__add_field_target_task__add_f ield_layer_version_local_path__del_f.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0023_auto__del_field_build_warnings_no_ _del_field_build_errors_no__del_fiel.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0024_auto__add_field_recipe_is_image.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0025_auto__add_field_project_is_default .py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0026_set_default_project.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_u nique_customimagerecipe_name_project.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message .py

--
Regards,
Ed

Signature · 4 lines
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster
#20 lore raw
Quoted 12 lines · Belen
Quoted 4 lines · On 08/12/2015 15:31, "[email protected] on behalf of Ed…

Hi,

This patchset upgrades Toaster to work correctly under Django 1.8. It was tested with Django 1.8.6

I tried to run Toaster with this, but when I call the toaster script I get this message:

Quoted 7 lines

Unknown command: 'migrate'
Type 'manage.py help' for usage.
Failed migrations, aborting system start
Failed start.

Any ideas about what's I am doing wrong?

looks like you've got the wrong version of django installed

Quoted 198 lines

Thanks!

Belén

Quoted 193 lines

Please review and submit upstream.

The following changes since commit
befaceb2873ff8c8cc791d48f0324442c15cbcdc:

toaster: return back 'New project' button (2015-12-08 13:10:33 +0200)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib ed/toaster/django_upgrade-8364

http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/toaster/django
_upgrade-8364

Ed Bartosh (9):
toaster: Remove South migrations
toaster: Fix references to app paths
toaster: rename get_query_set -> get_queryset
toaster: use OneToOneField instead of ForeignKey
toaster: fixed format strings
toaster: work around 'database is locked' error
toaster: removed extra calls of migrate
toaster: monkey patch Queryset
toaster: rework check for Django version

Elliot Smith (9):
toaster: Upgrade to Django 1.8.6 and remove South
toaster: Create default project with get_or_create* method
toaster: Start Django machinery for database access
toaster: Update API used to make runbuilds methods run in transactions
toaster: Prevent deprecation warnings for RedirectView
toaster: Update deprecated manage.py command
toaster: Check Django version against toaster-requirements.txt
toaster: Remove compatible_layerversions() method
toaster: Amend regex for MySQL database URLs

bitbake/bin/toaster                                |  41 +-
bitbake/lib/bb/ui/buildinfohelper.py               |  26 +-
bitbake/lib/toaster/bldcollector/urls.py           |   1 -
bitbake/lib/toaster/bldcontrol/bbcontroller.py     |   4 +-
.../toaster/bldcontrol/localhostbecontroller.py    |  13 +-
.../bldcontrol/management/commands/runbuilds.py    |   6 +-
.../toaster/bldcontrol/migrations/0001_initial.py  | 265 +++---
...onment_sourcedir__add_field_buildenvironment.py | 106 ---
.../0003_auto__add_field_brlayer_dirpath.py        |  99 ---
.../bldcontrol/migrations/0004_loadinitialdata.py  | 104 ---
.../migrations/0005_auto__add_brerror.py           | 112 ---
.../migrations/0006_auto__add_brbitbake.py         | 128 ---
...st_environment__chg_field_buildrequest_build.py | 145 ----
.../bldcontrol/migrations/0008_brarchive.py        | 138 ---
.../0009_auto__add_field_brlayer_layer_version.py  | 180 ----
bitbake/lib/toaster/bldcontrol/models.py           |   2 +-
bitbake/lib/toaster/bldcontrol/tests.py            |   6 +-
bitbake/lib/toaster/orm/migrations/0001_initial.py | 928
++++++++++++---------
.../0002_auto__add_field_build_timespent.py        | 180 ----
.../lib/toaster/orm/migrations/0003_timespent.py   | 182 ----
.../0004_auto__add_field_package_installed_name.py | 181 ----
...e__add_target_file__add_field_variablehistor.py | 281 -------
...ge_size__add_field_target_license_manifest_p.py | 235 ------
.../orm/migrations/0007_auto__add_helptext.py      | 214 -----
...story_operation__chg_field_recipe_descriptio.py | 225 -----
..._add_projectlayer__add_projecttarget__add_pr.py | 286 -------
...anch__add_field_project_short_description__a.py | 257 ------
.../0011_auto__add_field_projectlayer_dirpath.py   | 242 ------
...layer_optional__add_field_projecttarget_task.py | 252 ------
...erversiondependency__add_unique_layerversion.py | 710 ----------------
...mmary__chg_field_layer_summary__chg_field_re.py | 336 --------
...web_url__add_field_layer_vcs_web_tree_base_u.py | 336 --------
...lptext__chg_field_release_branch__add_index_.py | 359 --------
...faultlayer__add_releaselayersourcepriority__.py | 396 ---------
.../0018_auto__add_field_layer_version_project.py  | 331 --------
.../orm/migrations/0019_auto__add_buildartifact.py | 342 --------
...ion_local_path__add_field_recipe_pathflags__.py | 361 --------
...ect__chg_field_project_bitbake_version__chg_.py | 371 --------
...k__add_field_layer_version_local_path__del_f.py | 343 --------
...ings_no__del_field_build_errors_no__del_fiel.py | 353 --------
.../0024_auto__add_field_recipe_is_image.py        | 338 --------
.../0025_auto__add_field_project_is_default.py     | 346 --------
.../orm/migrations/0026_set_default_project.py     | 374 ---------
...e__add_unique_customimagerecipe_name_project.py | 375 ---------
.../0028_auto__chg_field_logmessage_message.py     | 345 --------
bitbake/lib/toaster/orm/models.py                  | 107 ++-
bitbake/lib/toaster/toastergui/urls.py             |   2 +-
bitbake/lib/toaster/toastergui/views.py            |  24 +-
bitbake/lib/toaster/toastermain/settings.py        |   4 +-
bitbake/lib/toaster/toastermain/urls.py            |   2 +-
bitbake/toaster-requirements.txt                   |   3 +-
51 files changed, 775 insertions(+), 10222 deletions(-)

delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0002_auto__add_field_buildenviro nment_sourcedir__add_field_buildenvironment.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0003_auto__add_field_brlayer_dir path.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0004_loadinitialdata.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0005_auto__add_brerror.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0006_auto__add_brbitbake.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0007_auto__add_field_buildreques t_environment__chg_field_buildrequest_build.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0008_brarchive.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_lay er_version.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0002_auto__add_field_build_timespent.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0003_timespent.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0004_auto__add_field_package_installed_ name.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0005_auto__add_target_image_file__add_t arget_file__add_field_variablehistor.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0006_auto__add_field_target_image_size_ _add_field_target_license_manifest_p.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0007_auto__add_helptext.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0008_auto__chg_field_variablehistory_op eration__chg_field_recipe_descriptio.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0009_auto__add_projectvariable__add_pro jectlayer__add_projecttarget__add_pr.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0010_auto__add_field_project_branch__ad d_field_project_short_description__a.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0011_auto__add_field_projectlayer_dirpa th.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0012_auto__add_field_projectlayer_optio nal__add_field_projecttarget_task.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0013_auto__add_release__add_layerversio ndependency__add_unique_layerversion.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0014_auto__chg_field_package_summary__c hg_field_layer_summary__chg_field_re.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0015_auto__add_field_layer_vcs_web_url_ _add_field_layer_vcs_web_tree_base_u.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0016_auto__add_field_release_helptext__ chg_field_release_branch__add_index_.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0017_auto__del_toastersettingdefaultlay er__add_releaselayersourcepriority__.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0018_auto__add_field_layer_version_proj ect.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0019_auto__add_buildartifact.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0020_auto__add_field_layer_version_loca l_path__add_field_recipe_pathflags__.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0021_auto__chg_field_build_project__chg _field_project_bitbake_version__chg_.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0022_auto__add_field_target_task__add_f ield_layer_version_local_path__del_f.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0023_auto__del_field_build_warnings_no_ _del_field_build_errors_no__del_fiel.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0024_auto__add_field_recipe_is_image.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0025_auto__add_field_project_is_default .py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0026_set_default_project.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_u nique_customimagerecipe_name_project.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message .py

--
Regards,
Ed

Signature · 4 lines
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster
#21 lore raw

Hi,

Belen-> The new push on Ed's branch will check this for you !

Ed->
I was in the process of pushing this upstream:
The good:
great new check for versions! very forward supportable :)
The sad:
one of the orm tests fails:
FAIL: test_dual_layersource (orm.tests.LayerVersionEquivalenceTestCase)

if you could fix and repush I'll upstream tonite.
ty,
b
p.s. i'm using django 1.8.7

Quoted 260 lines · Michael Wood
Quoted 14 lines · Belen
Quoted 4 lines · On 08/12/2015 15:31, "[email protected] on behalf of Ed…

Hi,

This patchset upgrades Toaster to work correctly under Django 1.8. It was tested with Django 1.8.6

I tried to run Toaster with this, but when I call the toaster script I get this message:

Quoted 7 lines

Unknown command: 'migrate'
Type 'manage.py help' for usage.
Failed migrations, aborting system start
Failed start.

Any ideas about what's I am doing wrong?

looks like you've got the wrong version of django installed

Quoted 225 lines

Thanks!

Belén

Quoted 220 lines

Please review and submit upstream.

The following changes since commit
befaceb2873ff8c8cc791d48f0324442c15cbcdc:

toaster: return back 'New project' button (2015-12-08 13:10:33 +0200)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib ed/toaster/django_upgrade-8364

http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=ed/toaster/django
_upgrade-8364

Ed Bartosh (9):
toaster: Remove South migrations
toaster: Fix references to app paths
toaster: rename get_query_set -> get_queryset
toaster: use OneToOneField instead of ForeignKey
toaster: fixed format strings
toaster: work around 'database is locked' error
toaster: removed extra calls of migrate
toaster: monkey patch Queryset
toaster: rework check for Django version

Elliot Smith (9):
toaster: Upgrade to Django 1.8.6 and remove South
toaster: Create default project with get_or_create* method
toaster: Start Django machinery for database access
toaster: Update API used to make runbuilds methods run in transactions
toaster: Prevent deprecation warnings for RedirectView
toaster: Update deprecated manage.py command
toaster: Check Django version against toaster-requirements.txt
toaster: Remove compatible_layerversions() method
toaster: Amend regex for MySQL database URLs

bitbake/bin/toaster                                |  41 +-
bitbake/lib/bb/ui/buildinfohelper.py               |  26 +-
bitbake/lib/toaster/bldcollector/urls.py           |   1 -
bitbake/lib/toaster/bldcontrol/bbcontroller.py     |   4 +-
.../toaster/bldcontrol/localhostbecontroller.py    |  13 +-
.../bldcontrol/management/commands/runbuilds.py    |   6 +-
.../toaster/bldcontrol/migrations/0001_initial.py  | 265 +++---
...onment_sourcedir__add_field_buildenvironment.py | 106 ---
.../0003_auto__add_field_brlayer_dirpath.py        |  99 ---
.../bldcontrol/migrations/0004_loadinitialdata.py  | 104 ---
.../migrations/0005_auto__add_brerror.py           | 112 ---
.../migrations/0006_auto__add_brbitbake.py         | 128 ---
...st_environment__chg_field_buildrequest_build.py | 145 ----
.../bldcontrol/migrations/0008_brarchive.py        | 138 ---
.../0009_auto__add_field_brlayer_layer_version.py  | 180 ----
bitbake/lib/toaster/bldcontrol/models.py           |   2 +-
bitbake/lib/toaster/bldcontrol/tests.py            |   6 +-
bitbake/lib/toaster/orm/migrations/0001_initial.py | 928
++++++++++++---------
.../0002_auto__add_field_build_timespent.py        | 180 ----
.../lib/toaster/orm/migrations/0003_timespent.py   | 182 ----
.../0004_auto__add_field_package_installed_name.py | 181 ----
...e__add_target_file__add_field_variablehistor.py | 281 -------
...ge_size__add_field_target_license_manifest_p.py | 235 ------
.../orm/migrations/0007_auto__add_helptext.py      | 214 -----
...story_operation__chg_field_recipe_descriptio.py | 225 -----
..._add_projectlayer__add_projecttarget__add_pr.py | 286 -------
...anch__add_field_project_short_description__a.py | 257 ------
.../0011_auto__add_field_projectlayer_dirpath.py   | 242 ------
...layer_optional__add_field_projecttarget_task.py | 252 ------
...erversiondependency__add_unique_layerversion.py | 710 ----------------
...mmary__chg_field_layer_summary__chg_field_re.py | 336 --------
...web_url__add_field_layer_vcs_web_tree_base_u.py | 336 --------
...lptext__chg_field_release_branch__add_index_.py | 359 --------
...faultlayer__add_releaselayersourcepriority__.py | 396 ---------
.../0018_auto__add_field_layer_version_project.py  | 331 --------
.../orm/migrations/0019_auto__add_buildartifact.py | 342 --------
...ion_local_path__add_field_recipe_pathflags__.py | 361 --------
...ect__chg_field_project_bitbake_version__chg_.py | 371 --------
...k__add_field_layer_version_local_path__del_f.py | 343 --------
...ings_no__del_field_build_errors_no__del_fiel.py | 353 --------
.../0024_auto__add_field_recipe_is_image.py        | 338 --------
.../0025_auto__add_field_project_is_default.py     | 346 --------
.../orm/migrations/0026_set_default_project.py     | 374 ---------
...e__add_unique_customimagerecipe_name_project.py | 375 ---------
.../0028_auto__chg_field_logmessage_message.py     | 345 --------
bitbake/lib/toaster/orm/models.py                  | 107 ++-
bitbake/lib/toaster/toastergui/urls.py             |   2 +-
bitbake/lib/toaster/toastergui/views.py            |  24 +-
bitbake/lib/toaster/toastermain/settings.py        |   4 +-
bitbake/lib/toaster/toastermain/urls.py            |   2 +-
bitbake/toaster-requirements.txt                   |   3 +-
51 files changed, 775 insertions(+), 10222 deletions(-)

delete mode 100644

bitbake/lib/toaster/bldcontrol/migrations/0002_auto__add_field_buildenviro nment_sourcedir__add_field_buildenvironment.py
delete mode 100644

bitbake/lib/toaster/bldcontrol/migrations/0003_auto__add_field_brlayer_dir path.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0004_loadinitialdata.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0005_auto__add_brerror.py delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0006_auto__add_brbitbake.py delete mode 100644

bitbake/lib/toaster/bldcontrol/migrations/0007_auto__add_field_buildreques t_environment__chg_field_buildrequest_build.py
delete mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0008_brarchive.py delete mode 100644

bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_lay er_version.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0002_auto__add_field_build_timespent.py delete mode 100644 bitbake/lib/toaster/orm/migrations/0003_timespent.py delete mode 100644

bitbake/lib/toaster/orm/migrations/0004_auto__add_field_package_installed_ name.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0005_auto__add_target_image_file__add_t arget_file__add_field_variablehistor.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0006_auto__add_field_target_image_size_ _add_field_target_license_manifest_p.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0007_auto__add_helptext.py delete mode 100644

bitbake/lib/toaster/orm/migrations/0008_auto__chg_field_variablehistory_op eration__chg_field_recipe_descriptio.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0009_auto__add_projectvariable__add_pro jectlayer__add_projecttarget__add_pr.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0010_auto__add_field_project_branch__ad d_field_project_short_description__a.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0011_auto__add_field_projectlayer_dirpa th.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0012_auto__add_field_projectlayer_optio nal__add_field_projecttarget_task.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0013_auto__add_release__add_layerversio ndependency__add_unique_layerversion.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0014_auto__chg_field_package_summary__c hg_field_layer_summary__chg_field_re.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0015_auto__add_field_layer_vcs_web_url_ _add_field_layer_vcs_web_tree_base_u.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0016_auto__add_field_release_helptext__ chg_field_release_branch__add_index_.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0017_auto__del_toastersettingdefaultlay er__add_releaselayersourcepriority__.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0018_auto__add_field_layer_version_proj ect.py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0019_auto__add_buildartifact.py delete mode 100644

bitbake/lib/toaster/orm/migrations/0020_auto__add_field_layer_version_loca l_path__add_field_recipe_pathflags__.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0021_auto__chg_field_build_project__chg _field_project_bitbake_version__chg_.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0022_auto__add_field_target_task__add_f ield_layer_version_local_path__del_f.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0023_auto__del_field_build_warnings_no_ _del_field_build_errors_no__del_fiel.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0024_auto__add_field_recipe_is_image.py delete mode 100644

bitbake/lib/toaster/orm/migrations/0025_auto__add_field_project_is_default .py
delete mode 100644 bitbake/lib/toaster/orm/migrations/0026_set_default_project.py delete mode 100644

bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_u nique_customimagerecipe_name_project.py
delete mode 100644

bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message .py

--
Regards,
Ed

--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

author
#22 lore raw

Hi Brian,

Quoted 12 lines · Brian Avery

Hi,

Belen-> The new push on Ed's branch will check this for you !

Ed->
I was in the process of pushing this upstream:
The good:
great new check for versions! very forward supportable :)
The sad:
one of the orm tests fails:
FAIL: test_dual_layersource (orm.tests.LayerVersionEquivalenceTestCase)

Quoted 1 line

if you could fix and repush I'll upstream tonite.

Fixed&repushed. Please, send it upstream.

Regards,
Ed

#23 lore raw

pushed!
ty both of you !

-b

Quoted 21 lines · Ed Bartosh

Hi Brian,

Quoted 12 lines · Brian Avery

Hi,

Belen-> The new push on Ed's branch will check this for you !

Ed->
I was in the process of pushing this upstream:
The good:
great new check for versions! very forward supportable :)
The sad:
one of the orm tests fails:
FAIL: test_dual_layersource (orm.tests.LayerVersionEquivalenceTestCase)

Quoted 1 line

if you could fix and repush I'll upstream tonite.

Fixed&repushed. Please, send it upstream.

Regards,
Ed