Updating models and imports for Django 2.2 upgrade.

Removed all obsolete references to django.core.urlresolvers. Added the
newly required on_delete fields to foreign key relationships in models.py
and in all migrations.

Signed-off-by: Amber Elliot  <amber.n.elliot@intel.com>
Signed-off-by: Paul Eggleton <bluelightning@bluelightning.org>
This commit is contained in:
Amber Elliot 2020-06-25 15:57:34 -07:00 committed by Paul Eggleton
parent 9b9961a683
commit 2d526f9b0d
14 changed files with 62 additions and 63 deletions

View File

@ -12,7 +12,7 @@ from django.contrib.auth.views import (PasswordResetConfirmView,
from django.contrib.sites.shortcuts import get_current_site from django.contrib.sites.shortcuts import get_current_site
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse from django.urls import reverse
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render from django.shortcuts import render
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator

View File

@ -6,7 +6,7 @@
from django.utils.deprecation import MiddlewareMixin from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse from django.urls import reverse
from reversion.middleware import RevisionMiddleware from reversion.middleware import RevisionMiddleware
import settings import settings
import re import re

View File

@ -69,7 +69,7 @@ class Migration(migrations.Migration):
('vcs_last_commit', models.DateTimeField(verbose_name='Last commit date', blank=True, null=True)), ('vcs_last_commit', models.DateTimeField(verbose_name='Last commit date', blank=True, null=True)),
('actual_branch', models.CharField(verbose_name='Actual Branch', blank=True, help_text='Name of the actual branch in the repository matching the core branch', max_length=80)), ('actual_branch', models.CharField(verbose_name='Actual Branch', blank=True, help_text='Name of the actual branch in the repository matching the core branch', max_length=80)),
('updated', models.DateTimeField(auto_now=True)), ('updated', models.DateTimeField(auto_now=True)),
('branch', models.ForeignKey(to='layerindex.Branch')), ('branch', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.Branch')),
], ],
options={ options={
'verbose_name_plural': 'Layer branches', 'verbose_name_plural': 'Layer branches',
@ -116,7 +116,7 @@ class Migration(migrations.Migration):
('email', models.CharField(max_length=255)), ('email', models.CharField(max_length=255)),
('responsibility', models.CharField(blank=True, help_text='Specific area(s) this maintainer is responsible for, if not the entire layer', max_length=200)), ('responsibility', models.CharField(blank=True, help_text='Specific area(s) this maintainer is responsible for, if not the entire layer', max_length=200)),
('status', models.CharField(default='A', max_length=1, choices=[('A', 'Active'), ('I', 'Inactive')])), ('status', models.CharField(default='A', max_length=1, choices=[('A', 'Active'), ('I', 'Inactive')])),
('layerbranch', models.ForeignKey(to='layerindex.LayerBranch')), ('layerbranch', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerBranch')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -124,7 +124,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('text', models.TextField()), ('text', models.TextField()),
('layer', models.ForeignKey(to='layerindex.LayerItem')), ('layer', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerItem')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -134,7 +134,7 @@ class Migration(migrations.Migration):
('name', models.CharField(max_length=255)), ('name', models.CharField(max_length=255)),
('description', models.CharField(max_length=255)), ('description', models.CharField(max_length=255)),
('updated', models.DateTimeField(auto_now=True)), ('updated', models.DateTimeField(auto_now=True)),
('layerbranch', models.ForeignKey(to='layerindex.LayerBranch')), ('layerbranch', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerBranch')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -184,7 +184,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('name', models.CharField(max_length=255)), ('name', models.CharField(max_length=255)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), ('user', models.ForeignKey(on_delete=models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -192,7 +192,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('path', models.CharField(db_index=True, max_length=255)), ('path', models.CharField(db_index=True, max_length=255)),
('layerbranch', models.ForeignKey(related_name='+', to='layerindex.LayerBranch')), ('layerbranch', models.ForeignKey(on_delete=models.deletion.CASCADE, related_name='+', to='layerindex.LayerBranch')),
], ],
options={ options={
'verbose_name_plural': 'Recipe file dependencies', 'verbose_name_plural': 'Recipe file dependencies',
@ -201,7 +201,7 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='ClassicRecipe', name='ClassicRecipe',
fields=[ fields=[
('recipe_ptr', models.OneToOneField(primary_key=True, to='layerindex.Recipe', auto_created=True, parent_link=True, serialize=False)), ('recipe_ptr', models.OneToOneField(on_delete=models.deletion.CASCADE, primary_key=True, to='layerindex.Recipe', auto_created=True, parent_link=True, serialize=False)),
('cover_pn', models.CharField(verbose_name='Covering recipe', blank=True, max_length=100)), ('cover_pn', models.CharField(verbose_name='Covering recipe', blank=True, max_length=100)),
('cover_status', models.CharField(default='U', max_length=1, choices=[('U', 'Unknown'), ('N', 'Not available'), ('R', 'Replaced'), ('P', 'Provided (BBCLASSEXTEND)'), ('C', 'Provided (PACKAGECONFIG)'), ('O', 'Obsolete'), ('E', 'Equivalent functionality'), ('D', 'Direct match')])), ('cover_status', models.CharField(default='U', max_length=1, choices=[('U', 'Unknown'), ('N', 'Not available'), ('R', 'Replaced'), ('P', 'Provided (BBCLASSEXTEND)'), ('C', 'Provided (PACKAGECONFIG)'), ('O', 'Obsolete'), ('E', 'Equivalent functionality'), ('D', 'Direct match')])),
('cover_verified', models.BooleanField(default=False)), ('cover_verified', models.BooleanField(default=False)),
@ -216,57 +216,57 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='recipefiledependency', model_name='recipefiledependency',
name='recipe', name='recipe',
field=models.ForeignKey(to='layerindex.Recipe'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.Recipe'),
), ),
migrations.AddField( migrations.AddField(
model_name='recipechange', model_name='recipechange',
name='changeset', name='changeset',
field=models.ForeignKey(to='layerindex.RecipeChangeset'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.RecipeChangeset'),
), ),
migrations.AddField( migrations.AddField(
model_name='recipechange', model_name='recipechange',
name='recipe', name='recipe',
field=models.ForeignKey(related_name='+', to='layerindex.Recipe'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, related_name='+', to='layerindex.Recipe'),
), ),
migrations.AddField( migrations.AddField(
model_name='recipe', model_name='recipe',
name='layerbranch', name='layerbranch',
field=models.ForeignKey(to='layerindex.LayerBranch'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerBranch'),
), ),
migrations.AddField( migrations.AddField(
model_name='layerdependency', model_name='layerdependency',
name='dependency', name='dependency',
field=models.ForeignKey(related_name='dependents_set', to='layerindex.LayerItem'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, related_name='dependents_set', to='layerindex.LayerItem'),
), ),
migrations.AddField( migrations.AddField(
model_name='layerdependency', model_name='layerdependency',
name='layerbranch', name='layerbranch',
field=models.ForeignKey(related_name='dependencies_set', to='layerindex.LayerBranch'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, related_name='dependencies_set', to='layerindex.LayerBranch'),
), ),
migrations.AddField( migrations.AddField(
model_name='layerbranch', model_name='layerbranch',
name='layer', name='layer',
field=models.ForeignKey(to='layerindex.LayerItem'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerItem'),
), ),
migrations.AddField( migrations.AddField(
model_name='branch', model_name='branch',
name='update_environment', name='update_environment',
field=models.ForeignKey(to='layerindex.PythonEnvironment', blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL), field=models.ForeignKey(to='layerindex.PythonEnvironment', blank=True, null=True, on_delete=models.deletion.SET_NULL),
), ),
migrations.AddField( migrations.AddField(
model_name='bbclass', model_name='bbclass',
name='layerbranch', name='layerbranch',
field=models.ForeignKey(to='layerindex.LayerBranch'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerBranch'),
), ),
migrations.AddField( migrations.AddField(
model_name='bbappend', model_name='bbappend',
name='layerbranch', name='layerbranch',
field=models.ForeignKey(to='layerindex.LayerBranch'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerBranch'),
), ),
migrations.AddField( migrations.AddField(
model_name='classicrecipe', model_name='classicrecipe',
name='cover_layerbranch', name='cover_layerbranch',
field=models.ForeignKey(to='layerindex.LayerBranch', verbose_name='Covering layer', blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL), field=models.ForeignKey(to='layerindex.LayerBranch', verbose_name='Covering layer', blank=True, null=True, on_delete=models.deletion.SET_NULL),
), ),
migrations.RunPython(create_master_branch, reverse_code=migrations.RunPython.noop), migrations.RunPython(create_master_branch, reverse_code=migrations.RunPython.noop),
] ]

View File

@ -18,7 +18,7 @@ class Migration(migrations.Migration):
('name', models.CharField(max_length=255)), ('name', models.CharField(max_length=255)),
('description', models.CharField(max_length=255)), ('description', models.CharField(max_length=255)),
('updated', models.DateTimeField(auto_now=True)), ('updated', models.DateTimeField(auto_now=True)),
('layerbranch', models.ForeignKey(to='layerindex.LayerBranch')), ('layerbranch', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerBranch')),
], ],
), ),
] ]

View File

@ -20,7 +20,7 @@ class Migration(migrations.Migration):
('errors', models.IntegerField(default=0)), ('errors', models.IntegerField(default=0)),
('warnings', models.IntegerField(default=0)), ('warnings', models.IntegerField(default=0)),
('log', models.TextField(blank=True)), ('log', models.TextField(blank=True)),
('layerbranch', models.ForeignKey(to='layerindex.LayerBranch')), ('layerbranch', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerBranch')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -41,6 +41,6 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='layerupdate', model_name='layerupdate',
name='update', name='update',
field=models.ForeignKey(to='layerindex.Update'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.Update'),
), ),
] ]

View File

@ -26,7 +26,7 @@ class Migration(migrations.Migration):
('with_option', models.CharField(max_length=255, blank=True)), ('with_option', models.CharField(max_length=255, blank=True)),
('without_option', models.CharField(max_length=255, blank=True)), ('without_option', models.CharField(max_length=255, blank=True)),
('build_deps', models.CharField(max_length=255, blank=True)), ('build_deps', models.CharField(max_length=255, blank=True)),
('recipe', models.ForeignKey(to='layerindex.Recipe')), ('recipe', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.Recipe')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(

View File

@ -16,7 +16,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('url', models.CharField(max_length=255)), ('url', models.CharField(max_length=255)),
('recipe', models.ForeignKey(to='layerindex.Recipe')), ('recipe', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.Recipe')),
], ],
), ),
] ]

View File

@ -19,7 +19,7 @@ class Migration(migrations.Migration):
('src_path', models.CharField(max_length=255)), ('src_path', models.CharField(max_length=255)),
('status', models.CharField(default='U', choices=[('U', 'Unknown'), ('A', 'Accepted'), ('P', 'Pending'), ('I', 'Inappropriate'), ('B', 'Backport'), ('S', 'Submitted'), ('D', 'Denied')], max_length=1)), ('status', models.CharField(default='U', choices=[('U', 'Unknown'), ('A', 'Accepted'), ('P', 'Pending'), ('I', 'Inappropriate'), ('B', 'Backport'), ('S', 'Submitted'), ('D', 'Denied')], max_length=1)),
('status_extra', models.CharField(blank=True, max_length=255)), ('status_extra', models.CharField(blank=True, max_length=255)),
('recipe', models.ForeignKey(to='layerindex.Recipe')), ('recipe', models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.Recipe')),
], ],
options={ options={
'verbose_name_plural': 'Patches', 'verbose_name_plural': 'Patches',

View File

@ -15,12 +15,12 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='layerupdate', model_name='layerupdate',
name='branch', name='branch',
field=models.ForeignKey(to='layerindex.Branch'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.Branch'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='layerupdate', model_name='layerupdate',
name='layer', name='layer',
field=models.ForeignKey(to='layerindex.LayerItem'), field=models.ForeignKey(on_delete=models.deletion.CASCADE, to='layerindex.LayerItem'),
), ),
migrations.RemoveField( migrations.RemoveField(
model_name='layerupdate', model_name='layerupdate',

View File

@ -7,7 +7,7 @@
from django.db import models from django.db import models
from datetime import datetime from datetime import datetime
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.urlresolvers import reverse from django.urls import reverse
from django.core.validators import URLValidator from django.core.validators import URLValidator
from django.db.models.signals import pre_save from django.db.models.signals import pre_save
from django.dispatch import receiver from django.dispatch import receiver
@ -140,7 +140,6 @@ class LayerItem(models.Model):
mailing_list_url = models.URLField('Mailing list URL', blank=True, help_text='URL of the info page for a mailing list for discussing the layer, if any') mailing_list_url = models.URLField('Mailing list URL', blank=True, help_text='URL of the info page for a mailing list for discussing the layer, if any')
index_preference = models.IntegerField('Preference', default=0, help_text='Number used to find preferred recipes in recipe search results (higher number is greater preference)') index_preference = models.IntegerField('Preference', default=0, help_text='Number used to find preferred recipes in recipe search results (higher number is greater preference)')
comparison = models.BooleanField('Comparison', default=False, help_text='Is this a comparison layer?') comparison = models.BooleanField('Comparison', default=False, help_text='Is this a comparison layer?')
updated = models.DateTimeField(auto_now=True) updated = models.DateTimeField(auto_now=True)
class Meta: class Meta:
@ -196,7 +195,7 @@ class LayerItem(models.Model):
class LayerRecipeExtraURL(models.Model): class LayerRecipeExtraURL(models.Model):
layer = models.ForeignKey(LayerItem) layer = models.ForeignKey(LayerItem, on_delete=models.CASCADE)
name = models.CharField(max_length=50, help_text='Name to display for link') name = models.CharField(max_length=50, help_text='Name to display for link')
url = models.CharField('URL', max_length=255, help_text='Template for URL to link to (macros: %pn% %pv% %branch% %actual_branch%)') url = models.CharField('URL', max_length=255, help_text='Template for URL to link to (macros: %pn% %pv% %branch% %actual_branch%)')
@ -229,8 +228,8 @@ class YPCompatibleVersion(models.Model):
return self.name return self.name
class LayerBranch(models.Model): class LayerBranch(models.Model):
layer = models.ForeignKey(LayerItem) layer = models.ForeignKey(LayerItem, on_delete=models.CASCADE)
branch = models.ForeignKey(Branch) branch = models.ForeignKey(Branch, on_delete=models.CASCADE)
collection = models.CharField('Layer Collection', max_length=40, null=True, blank=True, help_text='Name of the collection that the layer provides for the purpose of expressing dependencies (as specified in BBFILE_COLLECTIONS). Can only contain letters, numbers and dashes.') collection = models.CharField('Layer Collection', max_length=40, null=True, blank=True, help_text='Name of the collection that the layer provides for the purpose of expressing dependencies (as specified in BBFILE_COLLECTIONS). Can only contain letters, numbers and dashes.')
version = models.CharField('Layer Version', max_length=10, null=True, blank=True, help_text='The layer version for this particular branch.') version = models.CharField('Layer Version', max_length=10, null=True, blank=True, help_text='The layer version for this particular branch.')
vcs_subdir = models.CharField('Repository subdirectory', max_length=40, blank=True, help_text='Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)') vcs_subdir = models.CharField('Repository subdirectory', max_length=40, blank=True, help_text='Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)')
@ -375,7 +374,7 @@ class LayerMaintainer(models.Model):
('A', 'Active'), ('A', 'Active'),
('I', 'Inactive'), ('I', 'Inactive'),
) )
layerbranch = models.ForeignKey(LayerBranch) layerbranch = models.ForeignKey(LayerBranch, on_delete=models.CASCADE)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
email = models.CharField(max_length=255) email = models.CharField(max_length=255)
responsibility = models.CharField(max_length=200, blank=True, help_text='Specific area(s) this maintainer is responsible for, if not the entire layer') responsibility = models.CharField(max_length=200, blank=True, help_text='Specific area(s) this maintainer is responsible for, if not the entire layer')
@ -389,8 +388,8 @@ class LayerMaintainer(models.Model):
class LayerDependency(models.Model): class LayerDependency(models.Model):
layerbranch = models.ForeignKey(LayerBranch, related_name='dependencies_set') layerbranch = models.ForeignKey(LayerBranch, related_name='dependencies_set', on_delete=models.CASCADE)
dependency = models.ForeignKey(LayerItem, related_name='dependents_set') dependency = models.ForeignKey(LayerItem, related_name='dependents_set', on_delete=models.CASCADE)
required = models.BooleanField(default=True) required = models.BooleanField(default=True)
class Meta: class Meta:
@ -401,7 +400,7 @@ class LayerDependency(models.Model):
class LayerNote(models.Model): class LayerNote(models.Model):
layer = models.ForeignKey(LayerItem) layer = models.ForeignKey(LayerItem, on_delete=models.CASCADE)
text = models.TextField() text = models.TextField()
def __str__(self): def __str__(self):
@ -409,9 +408,9 @@ class LayerNote(models.Model):
class LayerUpdate(models.Model): class LayerUpdate(models.Model):
layer = models.ForeignKey(LayerItem) layer = models.ForeignKey(LayerItem, on_delete=models.CASCADE)
branch = models.ForeignKey(Branch) branch = models.ForeignKey(Branch, on_delete=models.CASCADE)
update = models.ForeignKey(Update) update = models.ForeignKey(Update, on_delete=models.CASCADE)
started = models.DateTimeField() started = models.DateTimeField()
finished = models.DateTimeField(blank=True, null=True) finished = models.DateTimeField(blank=True, null=True)
errors = models.IntegerField(default=0) errors = models.IntegerField(default=0)
@ -456,7 +455,7 @@ class LayerUpdate(models.Model):
class Recipe(models.Model): class Recipe(models.Model):
layerbranch = models.ForeignKey(LayerBranch) layerbranch = models.ForeignKey(LayerBranch, on_delete=models.CASCADE)
filename = models.CharField(max_length=255) filename = models.CharField(max_length=255)
filepath = models.CharField(max_length=255, blank=True) filepath = models.CharField(max_length=255, blank=True)
pn = models.CharField(max_length=100, blank=True) pn = models.CharField(max_length=100, blank=True)
@ -527,7 +526,7 @@ class Recipe(models.Model):
class Source(models.Model): class Source(models.Model):
recipe = models.ForeignKey(Recipe) recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
url = models.CharField(max_length=255) url = models.CharField(max_length=255)
sha256sum = models.CharField(max_length=64, blank=True) sha256sum = models.CharField(max_length=64, blank=True)
@ -561,7 +560,7 @@ class Patch(models.Model):
('S', 'Submitted'), ('S', 'Submitted'),
('D', 'Denied'), ('D', 'Denied'),
] ]
recipe = models.ForeignKey(Recipe) recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
path = models.CharField(max_length=255) path = models.CharField(max_length=255)
src_path = models.CharField(max_length=255) src_path = models.CharField(max_length=255)
status = models.CharField(max_length=1, choices=PATCH_STATUS_CHOICES, default='U') status = models.CharField(max_length=1, choices=PATCH_STATUS_CHOICES, default='U')
@ -610,7 +609,7 @@ class Patch(models.Model):
class PackageConfig(models.Model): class PackageConfig(models.Model):
recipe = models.ForeignKey(Recipe) recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
feature = models.CharField(max_length=255) feature = models.CharField(max_length=255)
with_option = models.CharField(max_length=255, blank=True) with_option = models.CharField(max_length=255, blank=True)
without_option = models.CharField(max_length=255, blank=True) without_option = models.CharField(max_length=255, blank=True)
@ -638,8 +637,8 @@ class DynamicBuildDep(models.Model):
return self.name return self.name
class RecipeFileDependency(models.Model): class RecipeFileDependency(models.Model):
recipe = models.ForeignKey(Recipe) recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
layerbranch = models.ForeignKey(LayerBranch, related_name='+') layerbranch = models.ForeignKey(LayerBranch, related_name='+', on_delete=models.CASCADE)
path = models.CharField(max_length=255, db_index=True) path = models.CharField(max_length=255, db_index=True)
class Meta: class Meta:
@ -715,8 +714,8 @@ class ClassicRecipe(Recipe):
class ComparisonRecipeUpdate(models.Model): class ComparisonRecipeUpdate(models.Model):
update = models.ForeignKey(Update) update = models.ForeignKey(Update, on_delete=models.CASCADE)
recipe = models.ForeignKey(ClassicRecipe) recipe = models.ForeignKey(ClassicRecipe, on_delete=models.CASCADE)
meta_updated = models.BooleanField(default=False) meta_updated = models.BooleanField(default=False)
link_updated = models.BooleanField(default=False) link_updated = models.BooleanField(default=False)
@ -725,7 +724,7 @@ class ComparisonRecipeUpdate(models.Model):
class Machine(models.Model): class Machine(models.Model):
layerbranch = models.ForeignKey(LayerBranch) layerbranch = models.ForeignKey(LayerBranch, on_delete=models.CASCADE)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
description = models.CharField(max_length=255) description = models.CharField(max_length=255)
@ -739,7 +738,7 @@ class Machine(models.Model):
return '%s (%s)' % (self.name, self.layerbranch.layer.name) return '%s (%s)' % (self.name, self.layerbranch.layer.name)
class Distro(models.Model): class Distro(models.Model):
layerbranch = models.ForeignKey(LayerBranch) layerbranch = models.ForeignKey(LayerBranch, on_delete=models.CASCADE)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
description = models.CharField(max_length=255) description = models.CharField(max_length=255)
@ -754,7 +753,7 @@ class Distro(models.Model):
class BBAppend(models.Model): class BBAppend(models.Model):
layerbranch = models.ForeignKey(LayerBranch) layerbranch = models.ForeignKey(LayerBranch, on_delete=models.CASCADE)
filename = models.CharField(max_length=255) filename = models.CharField(max_length=255)
filepath = models.CharField(max_length=255, blank=True) filepath = models.CharField(max_length=255, blank=True)
@ -780,7 +779,7 @@ class BBAppend(models.Model):
class BBClass(models.Model): class BBClass(models.Model):
layerbranch = models.ForeignKey(LayerBranch) layerbranch = models.ForeignKey(LayerBranch, on_delete=models.CASCADE)
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
class Meta: class Meta:
@ -796,7 +795,7 @@ class BBClass(models.Model):
class IncFile(models.Model): class IncFile(models.Model):
layerbranch = models.ForeignKey(LayerBranch) layerbranch = models.ForeignKey(LayerBranch, on_delete=models.CASCADE)
path = models.CharField(max_length=255) path = models.CharField(max_length=255)
def vcs_web_url(self): def vcs_web_url(self):
@ -808,7 +807,7 @@ class IncFile(models.Model):
class RecipeChangeset(models.Model): class RecipeChangeset(models.Model):
user = models.ForeignKey(User) user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
def __str__(self): def __str__(self):
@ -825,8 +824,8 @@ class RecipeChange(models.Model):
'bugtracker': 'BUGTRACKER', 'bugtracker': 'BUGTRACKER',
} }
changeset = models.ForeignKey(RecipeChangeset) changeset = models.ForeignKey(RecipeChangeset, on_delete=models.CASCADE)
recipe = models.ForeignKey(Recipe, related_name='+') recipe = models.ForeignKey(Recipe, related_name='+', on_delete=models.CASCADE)
summary = models.CharField(max_length=100, blank=True) summary = models.CharField(max_length=100, blank=True)
description = models.TextField(blank=True) description = models.TextField(blank=True)
section = models.CharField(max_length=100, blank=True) section = models.CharField(max_length=100, blank=True)
@ -882,7 +881,7 @@ class SecurityQuestion(models.Model):
class UserProfile(models.Model): class UserProfile(models.Model):
user = models.OneToOneField(User) user = models.OneToOneField(User, on_delete=models.CASCADE)
answer_attempts = models.IntegerField(default=0) answer_attempts = models.IntegerField(default=0)
def __str__(self): def __str__(self):
@ -891,7 +890,7 @@ class UserProfile(models.Model):
class SecurityQuestionAnswer(models.Model): class SecurityQuestionAnswer(models.Model):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE) user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
security_question = models.ForeignKey(SecurityQuestion) security_question = models.ForeignKey(SecurityQuestion, on_delete=models.CASCADE)
answer = models.CharField(max_length = 250, null=False) answer = models.CharField(max_length = 250, null=False)
def __str__(self): def __str__(self):

View File

@ -7,7 +7,7 @@
from django.conf.urls import * from django.conf.urls import *
from django.views.generic import TemplateView, DetailView, ListView, RedirectView from django.views.generic import TemplateView, DetailView, ListView, RedirectView
from django.views.defaults import page_not_found from django.views.defaults import page_not_found
from django.core.urlresolvers import reverse_lazy from django.urls import reverse_lazy
from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, \ from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, \
MachineSearchView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, \ MachineSearchView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, \
HistoryListView, EditProfileFormView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, \ HistoryListView, EditProfileFormView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, \

View File

@ -6,7 +6,7 @@
from django.conf.urls import * from django.conf.urls import *
from django.views.defaults import page_not_found from django.views.defaults import page_not_found
from django.core.urlresolvers import reverse_lazy from django.urls import reverse_lazy
from layerindex.views import LayerListView, RecipeSearchView, MachineSearchView, DistroSearchView, ClassSearchView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, RedirectParamsView, DuplicatesView, LayerUpdateDetailView, layer_export_recipes_csv_view, comparison_update_view from layerindex.views import LayerListView, RecipeSearchView, MachineSearchView, DistroSearchView, ClassSearchView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, RedirectParamsView, DuplicatesView, LayerUpdateDetailView, layer_export_recipes_csv_view, comparison_update_view
urlpatterns = [ urlpatterns = [

View File

@ -21,7 +21,7 @@ from django.contrib.auth.models import Permission, User
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import resolve, reverse, reverse_lazy from django.urls import resolve, reverse, reverse_lazy
from django.db import transaction from django.db import transaction
from django.db.models import Count, Q from django.db.models import Count, Q
from django.db.models.functions import Lower from django.db.models.functions import Lower

View File

@ -6,7 +6,7 @@
# All rights reserved. # All rights reserved.
from django.conf.urls import include, url from django.conf.urls import include, url
from django.core.urlresolvers import reverse_lazy from django.urls import reverse_lazy
from django.views.generic import RedirectView, TemplateView from django.views.generic import RedirectView, TemplateView
from layerindex.auth_views import CaptchaRegistrationView, CaptchaPasswordResetView, delete_account_view, \ from layerindex.auth_views import CaptchaRegistrationView, CaptchaPasswordResetView, delete_account_view, \
PasswordResetSecurityQuestions PasswordResetSecurityQuestions
@ -17,7 +17,7 @@ import settings
urlpatterns = [ urlpatterns = [
url(r'^layerindex/', include('layerindex.urls')), url(r'^layerindex/', include('layerindex.urls')),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', admin.site.urls),
url(r'^accounts/password_reset/$', url(r'^accounts/password_reset/$',
CaptchaPasswordResetView.as_view( CaptchaPasswordResetView.as_view(
email_template_name='registration/password_reset_email.txt', email_template_name='registration/password_reset_email.txt',