mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 18:49:32 +02:00
bitbake: toaster: address Django-1.10 API deprecations
There are four main API deprecations in Django-1.10:
(a) String view arguments to url() must be replaced by
the explicit class reference
(b) New TEMPLATES stucture in settings.py consolidates
TEMPLATE_DIRS, TEMPLATE_CONTEXT_PROCESSORS,
TEMPLATE_LOADERS, TEMPLATE_STRING_IF_INVALID, and
TEMPLATE_DEBUG
(c) patterns() wrapper in url() is removed, with
urlpatterns now a simple list
(d) NoArgsCommand in commands() must be replace by
BaseCommand, and handle_noargs() changed to
handle()
Also, the Django version checker must be updated to accept
two digit sub-version numbers (e.g. "1.8" < "1.10")
[YOCTO #11684]
(Bitbake rev: e4c7a94fac7a53fc146387a57e5a09b9ec3caca0)
Signed-off-by: David Reyna <David.Reyna@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
c3058ec4a4
commit
d74bcbeaf2
@@ -116,8 +116,14 @@ verify_prereq() {
|
|||||||
# Verify Django version
|
# Verify Django version
|
||||||
reqfile=$(python3 -c "import os; print(os.path.realpath('$BBBASEDIR/toaster-requirements.txt'))")
|
reqfile=$(python3 -c "import os; print(os.path.realpath('$BBBASEDIR/toaster-requirements.txt'))")
|
||||||
exp='s/Django\([><=]\+\)\([^,]\+\),\([><=]\+\)\(.\+\)/'
|
exp='s/Django\([><=]\+\)\([^,]\+\),\([><=]\+\)\(.\+\)/'
|
||||||
exp=$exp'import sys,django;version=django.get_version().split(".");'
|
# expand version parts to 2 digits to support 1.10.x > 1.8
|
||||||
exp=$exp'sys.exit(not (version \1 "\2".split(".") and version \3 "\4".split(".")))/p'
|
# (note:helper functions hard to insert in-line)
|
||||||
|
exp=$exp'import sys,django;'
|
||||||
|
exp=$exp'version=["%02d" % int(n) for n in django.get_version().split(".")];'
|
||||||
|
exp=$exp'vmin=["%02d" % int(n) for n in "\2".split(".")];'
|
||||||
|
exp=$exp'vmax=["%02d" % int(n) for n in "\4".split(".")];'
|
||||||
|
exp=$exp'sys.exit(not (version \1 vmin and version \3 vmax))'
|
||||||
|
exp=$exp'/p'
|
||||||
if ! sed -n "$exp" $reqfile | python3 - ; then
|
if ! sed -n "$exp" $reqfile | python3 - ; then
|
||||||
req=`grep ^Django $reqfile`
|
req=`grep ^Django $reqfile`
|
||||||
echo "This program needs $req"
|
echo "This program needs $req"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# BitBake Toaster Implementation
|
# BitBake Toaster Implementation
|
||||||
#
|
#
|
||||||
# Copyright (C) 2014 Intel Corporation
|
# Copyright (C) 2014-2017 Intel Corporation
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License version 2 as
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -19,7 +19,9 @@
|
|||||||
|
|
||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
urlpatterns = patterns('bldcollector.views',
|
import bldcollector.views
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
# landing point for pushing a bitbake_eventlog.json file to this toaster instace
|
# landing point for pushing a bitbake_eventlog.json file to this toaster instace
|
||||||
url(r'^eventfile$', 'eventfile', name='eventfile'),
|
url(r'^eventfile$', bldcollector.views.eventfile, name='eventfile'),
|
||||||
)
|
]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from django.core.management.base import NoArgsCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
@@ -18,7 +18,7 @@ def DN(path):
|
|||||||
return os.path.dirname(path)
|
return os.path.dirname(path)
|
||||||
|
|
||||||
|
|
||||||
class Command(NoArgsCommand):
|
class Command(BaseCommand):
|
||||||
args = ""
|
args = ""
|
||||||
help = "Verifies that the configured settings are valid and usable, or prompts the user to fix the settings."
|
help = "Verifies that the configured settings are valid and usable, or prompts the user to fix the settings."
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ class Command(NoArgsCommand):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def handle_noargs(self, **options):
|
def handle(self, **options):
|
||||||
retval = 0
|
retval = 0
|
||||||
retval += self._verify_build_environment()
|
retval += self._verify_build_environment()
|
||||||
retval += self._verify_default_settings()
|
retval += self._verify_default_settings()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ import os
|
|||||||
logger = logging.getLogger("toaster")
|
logger = logging.getLogger("toaster")
|
||||||
|
|
||||||
|
|
||||||
class Command(NoArgsCommand):
|
class Command(BaseCommand):
|
||||||
args = ""
|
args = ""
|
||||||
help = "Schedules and executes build requests as possible. "\
|
help = "Schedules and executes build requests as possible. "\
|
||||||
"Does not return (interrupt with Ctrl-C)"
|
"Does not return (interrupt with Ctrl-C)"
|
||||||
@@ -168,7 +168,7 @@ class Command(NoArgsCommand):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn("runbuilds: schedule exception %s" % str(e))
|
logger.warn("runbuilds: schedule exception %s" % str(e))
|
||||||
|
|
||||||
def handle_noargs(self, **options):
|
def handle(self, **options):
|
||||||
pidfile_path = os.path.join(os.environ.get("BUILDDIR", "."),
|
pidfile_path = os.path.join(os.environ.get("BUILDDIR", "."),
|
||||||
".runbuilds.pid")
|
".runbuilds.pid")
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# BitBake Toaster Implementation
|
# BitBake Toaster Implementation
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016 Intel Corporation
|
# Copyright (C) 2016-2017 Intel Corporation
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License version 2 as
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
from orm.models import LayerSource, Layer, Release, Layer_Version
|
from orm.models import LayerSource, Layer, Release, Layer_Version
|
||||||
from orm.models import LayerVersionDependency, Machine, Recipe
|
from orm.models import LayerVersionDependency, Machine, Recipe
|
||||||
@@ -56,7 +56,7 @@ class Spinner(threading.Thread):
|
|||||||
self.signal = False
|
self.signal = False
|
||||||
|
|
||||||
|
|
||||||
class Command(NoArgsCommand):
|
class Command(BaseCommand):
|
||||||
args = ""
|
args = ""
|
||||||
help = "Updates locally cached information from a layerindex server"
|
help = "Updates locally cached information from a layerindex server"
|
||||||
|
|
||||||
@@ -307,5 +307,5 @@ class Command(NoArgsCommand):
|
|||||||
|
|
||||||
os.system('setterm -cursor on')
|
os.system('setterm -cursor on')
|
||||||
|
|
||||||
def handle_noargs(self, **options):
|
def handle(self, **options):
|
||||||
self.update()
|
self.update()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# BitBake Toaster Implementation
|
# BitBake Toaster Implementation
|
||||||
#
|
#
|
||||||
# Copyright (C) 2013 Intel Corporation
|
# Copyright (C) 2013-2017 Intel Corporation
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License version 2 as
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
@@ -25,49 +25,50 @@ from toastergui import buildtables
|
|||||||
from toastergui import typeaheads
|
from toastergui import typeaheads
|
||||||
from toastergui import api
|
from toastergui import api
|
||||||
from toastergui import widgets
|
from toastergui import widgets
|
||||||
|
from toastergui import views
|
||||||
|
|
||||||
urlpatterns = patterns('toastergui.views',
|
urlpatterns = [
|
||||||
# landing page
|
# landing page
|
||||||
url(r'^landing/$', 'landing', name='landing'),
|
url(r'^landing/$', views.landing, name='landing'),
|
||||||
|
|
||||||
url(r'^builds/$',
|
url(r'^builds/$',
|
||||||
tables.AllBuildsTable.as_view(template_name="builds-toastertable.html"),
|
tables.AllBuildsTable.as_view(template_name="builds-toastertable.html"),
|
||||||
name='all-builds'),
|
name='all-builds'),
|
||||||
|
|
||||||
# build info navigation
|
# build info navigation
|
||||||
url(r'^build/(?P<build_id>\d+)$', 'builddashboard', name="builddashboard"),
|
url(r'^build/(?P<build_id>\d+)$', views.builddashboard, name="builddashboard"),
|
||||||
url(r'^build/(?P<build_id>\d+)/tasks/$',
|
url(r'^build/(?P<build_id>\d+)/tasks/$',
|
||||||
buildtables.BuildTasksTable.as_view(
|
buildtables.BuildTasksTable.as_view(
|
||||||
template_name="buildinfo-toastertable.html"),
|
template_name="buildinfo-toastertable.html"),
|
||||||
name='tasks'),
|
name='tasks'),
|
||||||
|
|
||||||
url(r'^build/(?P<build_id>\d+)/task/(?P<task_id>\d+)$', 'task', name='task'),
|
url(r'^build/(?P<build_id>\d+)/task/(?P<task_id>\d+)$', views.task, name='task'),
|
||||||
|
|
||||||
url(r'^build/(?P<build_id>\d+)/recipes/$',
|
url(r'^build/(?P<build_id>\d+)/recipes/$',
|
||||||
buildtables.BuiltRecipesTable.as_view(
|
buildtables.BuiltRecipesTable.as_view(
|
||||||
template_name="buildinfo-toastertable.html"),
|
template_name="buildinfo-toastertable.html"),
|
||||||
name='recipes'),
|
name='recipes'),
|
||||||
|
|
||||||
url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)/active_tab/(?P<active_tab>\d{1})$', 'recipe', name='recipe'),
|
url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)/active_tab/(?P<active_tab>\d{1})$', views.recipe, name='recipe'),
|
||||||
|
|
||||||
url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)$', 'recipe', name='recipe'),
|
url(r'^build/(?P<build_id>\d+)/recipe/(?P<recipe_id>\d+)$', views.recipe, name='recipe'),
|
||||||
url(r'^build/(?P<build_id>\d+)/recipe_packages/(?P<recipe_id>\d+)$', 'recipe_packages', name='recipe_packages'),
|
url(r'^build/(?P<build_id>\d+)/recipe_packages/(?P<recipe_id>\d+)$', views.recipe_packages, name='recipe_packages'),
|
||||||
|
|
||||||
url(r'^build/(?P<build_id>\d+)/packages/$',
|
url(r'^build/(?P<build_id>\d+)/packages/$',
|
||||||
buildtables.BuiltPackagesTable.as_view(
|
buildtables.BuiltPackagesTable.as_view(
|
||||||
template_name="buildinfo-toastertable.html"),
|
template_name="buildinfo-toastertable.html"),
|
||||||
name='packages'),
|
name='packages'),
|
||||||
|
|
||||||
url(r'^build/(?P<build_id>\d+)/package/(?P<package_id>\d+)$', 'package_built_detail',
|
url(r'^build/(?P<build_id>\d+)/package/(?P<package_id>\d+)$', views.package_built_detail,
|
||||||
name='package_built_detail'),
|
name='package_built_detail'),
|
||||||
url(r'^build/(?P<build_id>\d+)/package_built_dependencies/(?P<package_id>\d+)$',
|
url(r'^build/(?P<build_id>\d+)/package_built_dependencies/(?P<package_id>\d+)$',
|
||||||
'package_built_dependencies', name='package_built_dependencies'),
|
views.package_built_dependencies, name='package_built_dependencies'),
|
||||||
url(r'^build/(?P<build_id>\d+)/package_included_detail/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
url(r'^build/(?P<build_id>\d+)/package_included_detail/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
||||||
'package_included_detail', name='package_included_detail'),
|
views.package_included_detail, name='package_included_detail'),
|
||||||
url(r'^build/(?P<build_id>\d+)/package_included_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
url(r'^build/(?P<build_id>\d+)/package_included_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
||||||
'package_included_dependencies', name='package_included_dependencies'),
|
views.package_included_dependencies, name='package_included_dependencies'),
|
||||||
url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
url(r'^build/(?P<build_id>\d+)/package_included_reverse_dependencies/(?P<target_id>\d+)/(?P<package_id>\d+)$',
|
||||||
'package_included_reverse_dependencies', name='package_included_reverse_dependencies'),
|
views.package_included_reverse_dependencies, name='package_included_reverse_dependencies'),
|
||||||
|
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$',
|
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$',
|
||||||
buildtables.InstalledPackagesTable.as_view(
|
buildtables.InstalledPackagesTable.as_view(
|
||||||
@@ -75,11 +76,11 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
name='target'),
|
name='target'),
|
||||||
|
|
||||||
|
|
||||||
url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', 'xhr_dirinfo', name='dirinfo_ajax'),
|
url(r'^dentries/build/(?P<build_id>\d+)/target/(?P<target_id>\d+)$', views.xhr_dirinfo, name='dirinfo_ajax'),
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', 'dirinfo', name='dirinfo'),
|
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo$', views.dirinfo, name='dirinfo'),
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', 'dirinfo', name='dirinfo_filepath'),
|
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/dirinfo_filepath/_(?P<file_path>(?:/[^/\n]+)*)$', views.dirinfo, name='dirinfo_filepath'),
|
||||||
url(r'^build/(?P<build_id>\d+)/configuration$', 'configuration', name='configuration'),
|
url(r'^build/(?P<build_id>\d+)/configuration$', views.configuration, name='configuration'),
|
||||||
url(r'^build/(?P<build_id>\d+)/configvars$', 'configvars', name='configvars'),
|
url(r'^build/(?P<build_id>\d+)/configvars$', views.configvars, name='configvars'),
|
||||||
url(r'^build/(?P<build_id>\d+)/buildtime$',
|
url(r'^build/(?P<build_id>\d+)/buildtime$',
|
||||||
buildtables.BuildTimeTable.as_view(
|
buildtables.BuildTimeTable.as_view(
|
||||||
template_name="buildinfo-toastertable.html"),
|
template_name="buildinfo-toastertable.html"),
|
||||||
@@ -97,26 +98,26 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
|
|
||||||
# image information dir
|
# image information dir
|
||||||
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/packagefile/(?P<packagefile_id>\d+)$',
|
url(r'^build/(?P<build_id>\d+)/target/(?P<target_id>\d+)/packagefile/(?P<packagefile_id>\d+)$',
|
||||||
'image_information_dir', name='image_information_dir'),
|
views.image_information_dir, name='image_information_dir'),
|
||||||
|
|
||||||
# build download artifact
|
# build download artifact
|
||||||
url(r'^build/(?P<build_id>\d+)/artifact/(?P<artifact_type>\w+)/id/(?P<artifact_id>\w+)', 'build_artifact', name="build_artifact"),
|
url(r'^build/(?P<build_id>\d+)/artifact/(?P<artifact_type>\w+)/id/(?P<artifact_id>\w+)', views.build_artifact, name="build_artifact"),
|
||||||
|
|
||||||
# project URLs
|
# project URLs
|
||||||
url(r'^newproject/$', 'newproject', name='newproject'),
|
url(r'^newproject/$', views.newproject, name='newproject'),
|
||||||
|
|
||||||
url(r'^projects/$',
|
url(r'^projects/$',
|
||||||
tables.ProjectsTable.as_view(template_name="projects-toastertable.html"),
|
tables.ProjectsTable.as_view(template_name="projects-toastertable.html"),
|
||||||
name='all-projects'),
|
name='all-projects'),
|
||||||
|
|
||||||
url(r'^project/(?P<pid>\d+)/$', 'project', name='project'),
|
url(r'^project/(?P<pid>\d+)/$', views.project, name='project'),
|
||||||
url(r'^project/(?P<pid>\d+)/configuration$', 'projectconf', name='projectconf'),
|
url(r'^project/(?P<pid>\d+)/configuration$', views.projectconf, name='projectconf'),
|
||||||
url(r'^project/(?P<pid>\d+)/builds/$',
|
url(r'^project/(?P<pid>\d+)/builds/$',
|
||||||
tables.ProjectBuildsTable.as_view(template_name="projectbuilds-toastertable.html"),
|
tables.ProjectBuildsTable.as_view(template_name="projectbuilds-toastertable.html"),
|
||||||
name='projectbuilds'),
|
name='projectbuilds'),
|
||||||
|
|
||||||
# the import layer is a project-specific functionality;
|
# the import layer is a project-specific functionality;
|
||||||
url(r'^project/(?P<pid>\d+)/importlayer$', 'importlayer', name='importlayer'),
|
url(r'^project/(?P<pid>\d+)/importlayer$', views.importlayer, name='importlayer'),
|
||||||
|
|
||||||
# the table pages that have been converted to ToasterTable widget
|
# the table pages that have been converted to ToasterTable widget
|
||||||
url(r'^project/(?P<pid>\d+)/machines/$',
|
url(r'^project/(?P<pid>\d+)/machines/$',
|
||||||
@@ -142,7 +143,7 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
name="projectlayers"),
|
name="projectlayers"),
|
||||||
|
|
||||||
url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$',
|
url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$',
|
||||||
'layerdetails', name='layerdetails'),
|
views.layerdetails, name='layerdetails'),
|
||||||
|
|
||||||
url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)/recipes/$',
|
url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)/recipes/$',
|
||||||
tables.LayerRecipesTable.as_view(template_name="generic-toastertable-page.html"),
|
tables.LayerRecipesTable.as_view(template_name="generic-toastertable-page.html"),
|
||||||
@@ -166,7 +167,7 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
name="customrecipe"),
|
name="customrecipe"),
|
||||||
|
|
||||||
url(r'^project/(?P<pid>\d+)/customrecipe/(?P<recipe_id>\d+)/download$',
|
url(r'^project/(?P<pid>\d+)/customrecipe/(?P<recipe_id>\d+)/download$',
|
||||||
'customrecipe_download',
|
views.customrecipe_download,
|
||||||
name="customrecipedownload"),
|
name="customrecipedownload"),
|
||||||
|
|
||||||
url(r'^project/(?P<pid>\d+)/recipe/(?P<recipe_id>\d+)$',
|
url(r'^project/(?P<pid>\d+)/recipe/(?P<recipe_id>\d+)$',
|
||||||
@@ -186,9 +187,9 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
typeaheads.GitRevisionTypeAhead.as_view(),
|
typeaheads.GitRevisionTypeAhead.as_view(),
|
||||||
name='xhr_gitrevtypeahead'),
|
name='xhr_gitrevtypeahead'),
|
||||||
|
|
||||||
url(r'^xhr_testreleasechange/(?P<pid>\d+)$', 'xhr_testreleasechange',
|
url(r'^xhr_testreleasechange/(?P<pid>\d+)$', views.xhr_testreleasechange,
|
||||||
name='xhr_testreleasechange'),
|
name='xhr_testreleasechange'),
|
||||||
url(r'^xhr_configvaredit/(?P<pid>\d+)$', 'xhr_configvaredit',
|
url(r'^xhr_configvaredit/(?P<pid>\d+)$', views.xhr_configvaredit,
|
||||||
name='xhr_configvaredit'),
|
name='xhr_configvaredit'),
|
||||||
|
|
||||||
url(r'^xhr_layer/(?P<pid>\d+)/(?P<layerversion_id>\d+)$',
|
url(r'^xhr_layer/(?P<pid>\d+)/(?P<layerversion_id>\d+)$',
|
||||||
@@ -200,7 +201,7 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
name='xhr_layer'),
|
name='xhr_layer'),
|
||||||
|
|
||||||
# JS Unit tests
|
# JS Unit tests
|
||||||
url(r'^js-unit-tests/$', 'jsunittests', name='js-unit-tests'),
|
url(r'^js-unit-tests/$', views.jsunittests, name='js-unit-tests'),
|
||||||
|
|
||||||
# image customisation functionality
|
# image customisation functionality
|
||||||
url(r'^xhr_customrecipe/(?P<recipe_id>\d+)'
|
url(r'^xhr_customrecipe/(?P<recipe_id>\d+)'
|
||||||
@@ -237,4 +238,4 @@ urlpatterns = patterns('toastergui.views',
|
|||||||
|
|
||||||
# default redirection
|
# default redirection
|
||||||
url(r'^$', RedirectView.as_view(url='landing', permanent=True)),
|
url(r'^$', RedirectView.as_view(url='landing', permanent=True)),
|
||||||
)
|
]
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
from django.core.management.base import NoArgsCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from orm.models import Build
|
from orm.models import Build
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Command(NoArgsCommand):
|
class Command(BaseCommand):
|
||||||
args = ""
|
args = ""
|
||||||
help = "Lists current builds"
|
help = "Lists current builds"
|
||||||
|
|
||||||
def handle_noargs(self,**options):
|
def handle(self,**options):
|
||||||
for b in Build.objects.all():
|
for b in Build.objects.all():
|
||||||
print("%d: %s %s %s" % (b.pk, b.machine, b.distro, ",".join([x.target for x in b.target_set.all()])))
|
print("%d: %s %s %s" % (b.pk, b.machine, b.distro, ",".join([x.target for x in b.target_set.all()])))
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
TEMPLATE_DEBUG = DEBUG
|
|
||||||
|
|
||||||
# Set to True to see the SQL queries in console
|
# Set to True to see the SQL queries in console
|
||||||
SQL_DEBUG = False
|
SQL_DEBUG = False
|
||||||
@@ -161,12 +160,47 @@ STATICFILES_FINDERS = (
|
|||||||
# Make this unique, and don't share it with anybody.
|
# Make this unique, and don't share it with anybody.
|
||||||
SECRET_KEY = 'NOT_SUITABLE_FOR_HOSTED_DEPLOYMENT'
|
SECRET_KEY = 'NOT_SUITABLE_FOR_HOSTED_DEPLOYMENT'
|
||||||
|
|
||||||
# List of callables that know how to import templates from various sources.
|
class InvalidString(str):
|
||||||
TEMPLATE_LOADERS = (
|
def __mod__(self, other):
|
||||||
'django.template.loaders.filesystem.Loader',
|
from django.template.base import TemplateSyntaxError
|
||||||
'django.template.loaders.app_directories.Loader',
|
raise TemplateSyntaxError(
|
||||||
# 'django.template.loaders.eggs.Loader',
|
"Undefined variable or unknown value for: \"%s\"" % other)
|
||||||
)
|
|
||||||
|
TEMPLATES = [
|
||||||
|
{
|
||||||
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
|
'DIRS': [
|
||||||
|
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
||||||
|
# Always use forward slashes, even on Windows.
|
||||||
|
# Don't forget to use absolute paths, not relative paths.
|
||||||
|
],
|
||||||
|
'OPTIONS': {
|
||||||
|
'context_processors': [
|
||||||
|
# Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
|
||||||
|
# list if you haven't customized them:
|
||||||
|
'django.contrib.auth.context_processors.auth',
|
||||||
|
'django.template.context_processors.debug',
|
||||||
|
'django.template.context_processors.i18n',
|
||||||
|
'django.template.context_processors.media',
|
||||||
|
'django.template.context_processors.static',
|
||||||
|
'django.template.context_processors.tz',
|
||||||
|
'django.contrib.messages.context_processors.messages',
|
||||||
|
# Custom
|
||||||
|
'django.core.context_processors.request',
|
||||||
|
'toastergui.views.managedcontextprocessor',
|
||||||
|
|
||||||
|
],
|
||||||
|
'loaders': [
|
||||||
|
# List of callables that know how to import templates from various sources.
|
||||||
|
'django.template.loaders.filesystem.Loader',
|
||||||
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
#'django.template.loaders.eggs.Loader',
|
||||||
|
],
|
||||||
|
'string_if_invalid': InvalidString("%s"),
|
||||||
|
'debug': DEBUG,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = (
|
MIDDLEWARE_CLASSES = (
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
@@ -203,22 +237,6 @@ ROOT_URLCONF = 'toastermain.urls'
|
|||||||
# Python dotted path to the WSGI application used by Django's runserver.
|
# Python dotted path to the WSGI application used by Django's runserver.
|
||||||
WSGI_APPLICATION = 'toastermain.wsgi.application'
|
WSGI_APPLICATION = 'toastermain.wsgi.application'
|
||||||
|
|
||||||
TEMPLATE_DIRS = (
|
|
||||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
|
||||||
# Always use forward slashes, even on Windows.
|
|
||||||
# Don't forget to use absolute paths, not relative paths.
|
|
||||||
)
|
|
||||||
|
|
||||||
TEMPLATE_CONTEXT_PROCESSORS = ('django.contrib.auth.context_processors.auth',
|
|
||||||
'django.core.context_processors.debug',
|
|
||||||
'django.core.context_processors.i18n',
|
|
||||||
'django.core.context_processors.media',
|
|
||||||
'django.core.context_processors.static',
|
|
||||||
'django.core.context_processors.tz',
|
|
||||||
'django.contrib.messages.context_processors.messages',
|
|
||||||
"django.core.context_processors.request",
|
|
||||||
'toastergui.views.managedcontextprocessor',
|
|
||||||
)
|
|
||||||
|
|
||||||
INSTALLED_APPS = (
|
INSTALLED_APPS = (
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
@@ -348,10 +366,4 @@ connection_created.connect(activate_synchronous_off)
|
|||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
class InvalidString(str):
|
|
||||||
def __mod__(self, other):
|
|
||||||
from django.template.base import TemplateSyntaxError
|
|
||||||
raise TemplateSyntaxError(
|
|
||||||
"Undefined variable or unknown value for: \"%s\"" % other)
|
|
||||||
|
|
||||||
TEMPLATE_STRING_IF_INVALID = InvalidString("%s")
|
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ from django.conf.urls import patterns, include, url
|
|||||||
from django.views.generic import RedirectView
|
from django.views.generic import RedirectView
|
||||||
from django.views.decorators.cache import never_cache
|
from django.views.decorators.cache import never_cache
|
||||||
|
|
||||||
|
import bldcollector.views
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger("toaster")
|
logger = logging.getLogger("toaster")
|
||||||
@@ -31,7 +33,7 @@ logger = logging.getLogger("toaster")
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = [
|
||||||
|
|
||||||
# Examples:
|
# Examples:
|
||||||
# url(r'^toaster/', include('toaster.foo.urls')),
|
# url(r'^toaster/', include('toaster.foo.urls')),
|
||||||
@@ -42,11 +44,11 @@ urlpatterns = patterns('',
|
|||||||
|
|
||||||
# This is here to maintain backward compatibility and will be deprecated
|
# This is here to maintain backward compatibility and will be deprecated
|
||||||
# in the future.
|
# in the future.
|
||||||
url(r'^orm/eventfile$', 'bldcollector.views.eventfile'),
|
url(r'^orm/eventfile$', bldcollector.views.eventfile),
|
||||||
|
|
||||||
# if no application is selected, we have the magic toastergui app here
|
# if no application is selected, we have the magic toastergui app here
|
||||||
url(r'^$', never_cache(RedirectView.as_view(url='/toastergui/', permanent=True))),
|
url(r'^$', never_cache(RedirectView.as_view(url='/toastergui/', permanent=True))),
|
||||||
)
|
]
|
||||||
|
|
||||||
import toastermain.settings
|
import toastermain.settings
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
Django>1.8,<1.9
|
Django>1.8,<1.9.9
|
||||||
beautifulsoup4>=4.4.0
|
beautifulsoup4>=4.4.0
|
||||||
pytz
|
pytz
|
||||||
|
|||||||
Reference in New Issue
Block a user