MAINT: Upgrade to Django 1.11 (#45)
This commit is contained in:
parent
17899ad7c7
commit
a482019a81
15 changed files with 101 additions and 67 deletions
|
@ -38,11 +38,12 @@ router.register(r'species', species_viewsets.SpeciesViewSet)
|
|||
router.register(r'collection-species',
|
||||
species_viewsets.CollectionSpeciesViewSet)
|
||||
|
||||
app_name = 'api'
|
||||
urlpatterns = [
|
||||
url(r'^auth/login/', api_v.Login.as_view()),
|
||||
url(r'^auth/password/reset/confirm/',
|
||||
api_v.PasswordResetConfirm.as_view()),
|
||||
url(r'^auth/password/reset/', api_v.PasswordReset.as_view()),
|
||||
url(r'^auth/', include('djoser.urls.authtoken')),
|
||||
url(r'^v1/', include(router.urls, namespace='v1')),
|
||||
url(r'^v1/', include((router.urls, 'api_v1'), namespace='v1')),
|
||||
]
|
||||
|
|
|
@ -9,43 +9,43 @@ from ccdb.species.models import Species
|
|||
|
||||
class CollectionFilter(filters.FilterSet):
|
||||
project = ModelMultipleChoiceFilter(
|
||||
name='project__id',
|
||||
field_name='project__id',
|
||||
to_field_name='id',
|
||||
queryset=Project.objects.all(),
|
||||
)
|
||||
|
||||
region = ModelMultipleChoiceFilter(
|
||||
name='study_location__site__region__id',
|
||||
field_name='study_location__site__region__id',
|
||||
to_field_name='id',
|
||||
queryset=Region.objects.all(),
|
||||
)
|
||||
|
||||
site = ModelMultipleChoiceFilter(
|
||||
name='study_location__site__id',
|
||||
field_name='study_location__site__id',
|
||||
to_field_name='id',
|
||||
queryset=Site.objects.all(),
|
||||
)
|
||||
|
||||
study_location = ModelMultipleChoiceFilter(
|
||||
name='study_location__id',
|
||||
field_name='study_location__id',
|
||||
to_field_name='id',
|
||||
queryset=StudyLocation.objects.all(),
|
||||
)
|
||||
|
||||
collection_method = ModelMultipleChoiceFilter(
|
||||
name='collection_method__id',
|
||||
field_name='collection_method__id',
|
||||
to_field_name='id',
|
||||
queryset=CollectionMethod.objects.all(),
|
||||
)
|
||||
|
||||
adfg_permit = ModelMultipleChoiceFilter(
|
||||
name='adfg_permit__id',
|
||||
field_name='adfg_permit__id',
|
||||
to_field_name='id',
|
||||
queryset=ADFGPermit.objects.all(),
|
||||
)
|
||||
|
||||
species = ModelMultipleChoiceFilter(
|
||||
name='collection_species__species__id',
|
||||
field_name='collection_species__species__id',
|
||||
to_field_name='id',
|
||||
queryset=Species.objects.all(),
|
||||
)
|
||||
|
|
|
@ -56,13 +56,17 @@ class ADFGPermit(models.Model):
|
|||
|
||||
|
||||
class Collection(models.Model):
|
||||
project = models.ForeignKey('projects.Project', related_name='collections')
|
||||
project = models.ForeignKey('projects.Project', related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
study_location = models.ForeignKey('locations.StudyLocation',
|
||||
related_name='collections')
|
||||
related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
collection_type = models.ForeignKey(CollectionType,
|
||||
related_name='collections')
|
||||
related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
collection_method = models.ForeignKey(CollectionMethod,
|
||||
related_name='collections')
|
||||
related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
number_of_traps = models.IntegerField(blank=True, null=True)
|
||||
collection_start_date = models.DateField(blank=True, null=True)
|
||||
collection_start_time = models.TimeField(blank=True, null=True)
|
||||
|
@ -71,16 +75,21 @@ class Collection(models.Model):
|
|||
notes = models.TextField(blank=True, null=False)
|
||||
storage_location = models.ForeignKey('locations.StorageLocation',
|
||||
blank=True, null=True,
|
||||
related_name='collections')
|
||||
related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
specimen_state = models.CharField(max_length=50, blank=True)
|
||||
process_type = models.ForeignKey('processing.ProcessType', blank=True,
|
||||
null=True, related_name='collections')
|
||||
null=True, related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
reagent = models.ForeignKey('processing.Reagent', blank=True, null=True,
|
||||
related_name='collections')
|
||||
related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
adfg_permit = models.ForeignKey(ADFGPermit, blank=True, null=True,
|
||||
related_name='collections')
|
||||
related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
collection_flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||
related_name='collections')
|
||||
related_name='collections',
|
||||
on_delete=models.CASCADE)
|
||||
display_name = models.CharField(max_length=255, editable=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
@ -101,13 +110,15 @@ class Collection(models.Model):
|
|||
|
||||
|
||||
class DatasheetAttachment(models.Model):
|
||||
collection = models.ForeignKey(Collection, related_name='datasheets')
|
||||
collection = models.ForeignKey(Collection, related_name='datasheets',
|
||||
on_delete=models.CASCADE)
|
||||
datasheet = models.FileField("Datasheet",
|
||||
upload_to='collections/datasheets/%Y/%m/%d')
|
||||
|
||||
|
||||
class CollectionTrap(models.Model):
|
||||
collection = models.ForeignKey(Collection, related_name='traps')
|
||||
collection = models.ForeignKey(Collection, related_name='traps',
|
||||
on_delete=models.CASCADE)
|
||||
number_of_traps = models.IntegerField()
|
||||
date_opened = models.DateField()
|
||||
time_opened = models.TimeField()
|
||||
|
@ -126,7 +137,8 @@ class CollectionTrap(models.Model):
|
|||
|
||||
|
||||
class CollectionMeasurement(models.Model):
|
||||
collection = models.ForeignKey(Collection, related_name='env_measurements')
|
||||
collection = models.ForeignKey(Collection, related_name='env_measurements',
|
||||
on_delete=models.CASCADE)
|
||||
date_measured = models.DateField()
|
||||
time_measured = models.TimeField()
|
||||
water_temp_c = models.FloatField(null=True)
|
||||
|
|
|
@ -18,7 +18,8 @@ class Experiment(models.Model):
|
|||
code = models.CharField(max_length=10, blank=True)
|
||||
description = models.CharField(max_length=255, blank=True)
|
||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||
related_name='experiments')
|
||||
related_name='experiments',
|
||||
on_delete=models.CASCADE)
|
||||
sort_order = models.IntegerField(blank=True, null=True)
|
||||
collections = models.ManyToManyField('collections_ccdb.Collection')
|
||||
|
||||
|
@ -31,7 +32,8 @@ class Experiment(models.Model):
|
|||
|
||||
|
||||
class ProtocolAttachment(models.Model):
|
||||
experiment = models.ForeignKey(Experiment, related_name='protocols')
|
||||
experiment = models.ForeignKey(Experiment, related_name='protocols',
|
||||
on_delete=models.CASCADE)
|
||||
protocol = models.FileField(upload_to='experiments/protocols/%Y/%m/%d')
|
||||
|
||||
def __str__(self):
|
||||
|
@ -40,7 +42,8 @@ class ProtocolAttachment(models.Model):
|
|||
|
||||
class TreatmentType(models.Model):
|
||||
experiment = models.ForeignKey(Experiment, blank=True, null=True,
|
||||
related_name='treatment_types')
|
||||
related_name='treatment_types',
|
||||
on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=200)
|
||||
code = models.CharField(max_length=25, blank=True)
|
||||
treatment_type = models.CharField(max_length=50, blank=True)
|
||||
|
@ -65,15 +68,20 @@ class TreatmentType(models.Model):
|
|||
|
||||
class Treatment(models.Model):
|
||||
treatment_type = models.ForeignKey(TreatmentType,
|
||||
related_name='treatments')
|
||||
related_name='treatments',
|
||||
on_delete=models.CASCADE)
|
||||
container = models.ForeignKey('misc.Container', blank=True, null=True,
|
||||
related_name='treatments')
|
||||
related_name='treatments',
|
||||
on_delete=models.CASCADE)
|
||||
study_location = models.ForeignKey('locations.StudyLocation',
|
||||
related_name='treatments')
|
||||
species = models.ForeignKey('species.Species', related_name='treatments')
|
||||
related_name='treatments',
|
||||
on_delete=models.CASCADE)
|
||||
species = models.ForeignKey('species.Species', related_name='treatments',
|
||||
on_delete=models.CASCADE)
|
||||
sex = models.CharField(max_length=25)
|
||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||
related_name='treatments')
|
||||
related_name='treatments',
|
||||
on_delete=models.CASCADE)
|
||||
display_name = models.CharField(max_length=255, editable=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
@ -93,14 +101,16 @@ class Treatment(models.Model):
|
|||
|
||||
class TreatmentReplicate(models.Model):
|
||||
treatment = models.ForeignKey(Treatment,
|
||||
related_name='treatment_replicates')
|
||||
related_name='treatment_replicates',
|
||||
on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=50)
|
||||
setup_date = models.DateField(blank=True, null=True)
|
||||
setup_time = models.TimeField(blank=True, null=True)
|
||||
setup_sample_size = models.IntegerField(blank=True, null=True)
|
||||
mass_g = models.FloatField(blank=True, null=True)
|
||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||
related_name='treatment_replicates')
|
||||
related_name='treatment_replicates',
|
||||
on_delete=models.CASCADE)
|
||||
display_name = models.CharField(max_length=255, editable=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
@ -118,13 +128,15 @@ class TreatmentReplicate(models.Model):
|
|||
|
||||
class AliveDeadCount(models.Model):
|
||||
treatment_replicate = models.ForeignKey(TreatmentReplicate,
|
||||
related_name='alive_dead_counts')
|
||||
related_name='alive_dead_counts',
|
||||
on_delete=models.CASCADE)
|
||||
status_date = models.DateField()
|
||||
status_time = models.TimeField(blank=True, null=True)
|
||||
count_alive = models.IntegerField(blank=True, null=True)
|
||||
count_dead = models.IntegerField(blank=True, null=True)
|
||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||
related_name='alive_dead_counts')
|
||||
related_name='alive_dead_counts',
|
||||
on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return "{}".format(self.status_date)
|
||||
|
|
|
@ -16,7 +16,7 @@ class Region(models.Model):
|
|||
|
||||
class Site(models.Model):
|
||||
region = models.ForeignKey(Region, blank=True, null=True,
|
||||
related_name='sites')
|
||||
related_name='sites', on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=100)
|
||||
code = models.CharField(max_length=10, blank=True)
|
||||
description = models.CharField(max_length=255, blank=True)
|
||||
|
@ -46,14 +46,16 @@ class MunicipalLocation(models.Model):
|
|||
|
||||
|
||||
class StudyLocation(models.Model):
|
||||
site = models.ForeignKey(Site, related_name='study_locations')
|
||||
site = models.ForeignKey(Site, related_name='study_locations',
|
||||
on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=100)
|
||||
code = models.CharField(max_length=10)
|
||||
study_location_type = models.CharField(max_length=50, blank=True)
|
||||
treatment_type = models.CharField(max_length=100, blank=True)
|
||||
municipal_location = models.ForeignKey(MunicipalLocation,
|
||||
blank=True, null=True,
|
||||
related_name='study_locations')
|
||||
related_name='study_locations',
|
||||
on_delete=models.CASCADE)
|
||||
collecting_location = models.BooleanField(default=False)
|
||||
description = models.CharField(max_length=255, blank=True)
|
||||
sort_order = models.IntegerField(blank=True, null=True)
|
||||
|
|
|
@ -25,7 +25,8 @@ class MeasurementType(models.Model):
|
|||
'MeasurementUnit',
|
||||
blank=True,
|
||||
null=True,
|
||||
related_name='measurement_types'
|
||||
related_name='measurement_types',
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
sort_order = models.IntegerField(blank=True, null=True)
|
||||
|
||||
|
@ -71,12 +72,15 @@ class Container(models.Model):
|
|||
code = models.CharField(max_length=10, blank=True)
|
||||
application = models.CharField(max_length=50, blank=True)
|
||||
color = models.ForeignKey(Color, blank=True, null=True,
|
||||
related_name='containers')
|
||||
related_name='containers',
|
||||
on_delete=models.CASCADE)
|
||||
material = models.ForeignKey(Material, blank=True, null=True,
|
||||
related_name='containers')
|
||||
related_name='containers',
|
||||
on_delete=models.CASCADE)
|
||||
volume = models.FloatField(blank=True, null=True)
|
||||
measurement_unit = models.ForeignKey(MeasurementUnit, blank=True,
|
||||
null=True, related_name='containers')
|
||||
null=True, related_name='containers',
|
||||
on_delete=models.CASCADE)
|
||||
sort_order = models.IntegerField(blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
|
|
|
@ -42,19 +42,24 @@ class Flaw(models.Model):
|
|||
|
||||
|
||||
class Processing(models.Model):
|
||||
process_type = models.ForeignKey(ProcessType, related_name='processings')
|
||||
container = models.ForeignKey('misc.Container', related_name='processings')
|
||||
process_type = models.ForeignKey(ProcessType, related_name='processings',
|
||||
on_delete=models.CASCADE)
|
||||
container = models.ForeignKey('misc.Container', related_name='processings',
|
||||
on_delete=models.CASCADE)
|
||||
container_label = models.CharField(max_length=50)
|
||||
process_date = models.DateField(blank=True, null=True)
|
||||
process_time = models.TimeField(blank=True, null=True)
|
||||
reagent = models.ForeignKey(Reagent, blank=True, null=True,
|
||||
related_name='processings')
|
||||
related_name='processings',
|
||||
on_delete=models.CASCADE)
|
||||
reagent_volume = models.FloatField(blank=True, null=True)
|
||||
measurement_unit = models.ForeignKey('misc.MeasurementUnit', blank=True,
|
||||
null=True, related_name='processings')
|
||||
null=True, related_name='processings',
|
||||
on_delete=models.CASCADE)
|
||||
minutes_in_reagent = models.IntegerField(blank=True, null=True)
|
||||
flaw = models.ForeignKey(Flaw, blank=True, null=True,
|
||||
related_name='processings')
|
||||
related_name='processings',
|
||||
on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return "{} {} {}".format(self.process_date, self.process_type,
|
||||
|
|
|
@ -32,7 +32,8 @@ class Grant(models.Model):
|
|||
|
||||
|
||||
class GrantReport(models.Model):
|
||||
grant = models.ForeignKey(Grant, related_name='reports')
|
||||
grant = models.ForeignKey(Grant, related_name='reports',
|
||||
on_delete=models.CASCADE)
|
||||
title = models.CharField(max_length=200)
|
||||
report_type = models.CharField(max_length=50, blank=True)
|
||||
description = models.CharField(max_length=255, blank=True)
|
||||
|
|
|
@ -19,8 +19,10 @@ class Species(models.Model):
|
|||
|
||||
class TrapSpecies(models.Model):
|
||||
collection_trap = models.ForeignKey('collections_ccdb.CollectionTrap',
|
||||
related_name='trap_species')
|
||||
species = models.ForeignKey(Species, related_name='trap_species')
|
||||
related_name='trap_species',
|
||||
on_delete=models.CASCADE)
|
||||
species = models.ForeignKey(Species, related_name='trap_species',
|
||||
on_delete=models.CASCADE)
|
||||
sex = models.CharField(max_length=25, blank=True)
|
||||
count = models.IntegerField(blank=True, null=True)
|
||||
count_estimated = models.BooleanField(default=False)
|
||||
|
@ -34,8 +36,10 @@ class TrapSpecies(models.Model):
|
|||
|
||||
class CollectionSpecies(models.Model):
|
||||
collection = models.ForeignKey('collections_ccdb.Collection',
|
||||
related_name='collection_species')
|
||||
species = models.ForeignKey(Species, related_name='collection_species')
|
||||
related_name='collection_species',
|
||||
on_delete=models.CASCADE)
|
||||
species = models.ForeignKey(Species, related_name='collection_species',
|
||||
on_delete=models.CASCADE)
|
||||
sex = models.CharField(max_length=25, blank=True)
|
||||
count = models.IntegerField(blank=True, null=True)
|
||||
count_estimated = models.BooleanField(default=False)
|
||||
|
|
|
@ -14,7 +14,7 @@ class AdminSection(models.Model):
|
|||
class AdminEntry(models.Model):
|
||||
package = models.CharField(max_length=255)
|
||||
model = models.CharField(max_length=255)
|
||||
section = models.ForeignKey(AdminSection)
|
||||
section = models.ForeignKey(AdminSection, on_delete=models.CASCADE)
|
||||
sort = models.IntegerField()
|
||||
|
||||
def admin_url(self, request=None):
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from django.core.urlresolvers import reverse
|
||||
from django.urls import reverse
|
||||
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
|
|
@ -27,14 +27,6 @@ INTERNAL_IPS = ('127.0.0.1', )
|
|||
|
||||
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
|
||||
|
||||
# http://stackoverflow.com/a/28560805/313548
|
||||
class DisableMigrations(object):
|
||||
def __contains__(self, item):
|
||||
return True
|
||||
|
||||
def __getitem__(self, item):
|
||||
return "notmigrations"
|
||||
|
||||
TESTS_IN_PROGRESS = False
|
||||
if 'test' in sys.argv[1:] or 'jenkins' in sys.argv[1:]:
|
||||
logging.disable(logging.CRITICAL)
|
||||
|
@ -44,7 +36,8 @@ if 'test' in sys.argv[1:] or 'jenkins' in sys.argv[1:]:
|
|||
DEBUG = False
|
||||
TEMPLATE_DEBUG = False
|
||||
TESTS_IN_PROGRESS = True
|
||||
MIGRATION_MODULES = DisableMigrations()
|
||||
MIGRATION_MODULES = {app[app.rfind('.') + 1:]: None
|
||||
for app in INSTALLED_APPS}
|
||||
|
||||
MANIFEST_URL = env('MANIFEST_URL', default=None)
|
||||
CORS_ORIGIN_ALLOW_ALL = False
|
||||
|
|
|
@ -4,13 +4,13 @@ from django.conf.urls.static import static
|
|||
from django.contrib import admin
|
||||
from django.views.generic import RedirectView
|
||||
from django.views import defaults as default_views
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from django.urls import reverse_lazy
|
||||
|
||||
urlpatterns = [
|
||||
url(settings.ADMIN_URL, include(admin.site.urls)),
|
||||
url(settings.ADMIN_URL, admin.site.urls),
|
||||
url(r'^api-auth/', include('rest_framework.urls',
|
||||
namespace='rest_framework')),
|
||||
url(r'^api/', include('ccdb.api.urls', namespace='api')),
|
||||
url(r'^api/', include('ccdb.api.urls')),
|
||||
url(r'^$', RedirectView.as_view(url=reverse_lazy('admin:index'),
|
||||
permanent=True)),
|
||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
django==1.10.8
|
||||
django==1.11.9
|
||||
|
||||
# Configuration
|
||||
django-environ==0.4.1
|
||||
|
@ -17,8 +17,8 @@ python-dateutil==2.5.3
|
|||
requests==2.11.0
|
||||
|
||||
# REST
|
||||
djangorestframework==3.6.4
|
||||
djangorestframework==3.7.7
|
||||
django-cors-headers==1.3.1
|
||||
django-filter==1.1
|
||||
djoser==0.7.0
|
||||
djangorestframework-jsonapi==2.1.1
|
||||
djangorestframework-jsonapi==2.2.0
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
-r base.txt
|
||||
|
||||
Werkzeug==0.11.10
|
||||
django-extensions==1.7.1
|
||||
django-extensions==1.9.9
|
||||
flake8==3.0.4
|
||||
pygraphviz==1.3.1
|
||||
ipython==5.1.0
|
||||
|
|
Loading…
Add table
Reference in a new issue