[Toaster] [PATCH 1/5] toaster: Remove DATABASE_URL being passed around as an environment var
Smith, Elliot
elliot.smith at intel.com
Tue Apr 26 10:10:08 PDT 2016
On 25 April 2016 at 19:04, Michael Wood <michael.g.wood at intel.com> wrote:
> We don't need to pass the DATABASE_URL around and read it back if we
> setup the django framework in the correct way.
> We make the default sqlite database path a full path so that the
> database isn't being assumed to be in CWD.
>
I think there's a problem here, as I get multiple errors when I try to run
a build via the Toaster UI (see attached file).
The build does appear to complete correctly (bitbake reports that the tasks
have run); but Toaster never notices this, presumably because of the
errors, and the build "hangs" in the UI.
I think the problem is that the database isn't being located correctly by
toasterui, which makes it appear as though *all* of the database tables are
missing. Note that the migrations have run and I have the toaster.sqlite
file in my build/ directory as expected, complete with all its tables. I
have replicated this with a completely clean shell and new database.
Elliot
>
> Also add some more useful comments on the database settings.
>
> This is preparation work to migrate the build tests and be able to
> trigger builds on differently configured databases.
>
> Signed-off-by: Michael Wood <michael.g.wood at intel.com>
> ---
> bitbake/bin/toaster | 2 -
> bitbake/lib/bb/ui/buildinfohelper.py | 20 +++----
> .../toastermain/management/commands/get-dburl.py | 9 ---
> bitbake/lib/toaster/toastermain/settings.py | 64
> +++-------------------
> 4 files changed, 17 insertions(+), 78 deletions(-)
> delete mode 100644
> bitbake/lib/toaster/toastermain/management/commands/get-dburl.py
>
> diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster
> index 987d53c1..91716e6 100755
> --- a/bitbake/bin/toaster
> +++ b/bitbake/bin/toaster
> @@ -100,7 +100,6 @@ stop_system()
> fi
> webserverKillAll
> # unset exported variables
> - unset DATABASE_URL
> unset TOASTER_CONF
> unset TOASTER_DIR
> unset BITBAKE_UI
> @@ -278,7 +277,6 @@ case $CMD in
> return 4
> fi
> export BITBAKE_UI='toasterui'
> - export DATABASE_URL=`$MANAGE get-dburl`
> $MANAGE runbuilds & echo $! >${BUILDDIR}/.runbuilds.pid
> # set fail safe stop system on terminal exit
> trap stop_system SIGHUP
> diff --git a/bitbake/lib/bb/ui/buildinfohelper.py
> b/bitbake/lib/bb/ui/buildinfohelper.py
> index 9397905..b07dc81 100644
> --- a/bitbake/lib/bb/ui/buildinfohelper.py
> +++ b/bitbake/lib/bb/ui/buildinfohelper.py
> @@ -21,19 +21,19 @@ import bb
> import re
> import os
>
> -os.environ["DJANGO_SETTINGS_MODULE"] = "toaster.toastermain.settings"
> -
> -
> import django
> from django.utils import timezone
>
> +import toaster
> +# Add toaster module to the search path to help django.setup() find the
> right
> +# modules
> +sys.path.insert(0, os.path.dirname(toaster.__file__))
>
> -def _configure_toaster():
> - """ Add toaster to sys path for importing modules
> - """
> -
> sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))),
> 'toaster'))
> -_configure_toaster()
> -
> +#Set the DJANGO_SETTINGS_MODULE if it's not already set
> +os.environ["DJANGO_SETTINGS_MODULE"] =\
> + os.environ.get("DJANGO_SETTINGS_MODULE",
> + "toaster.toastermain.settings")
> +# Setup django framework (needs to be done before importing modules)
> django.setup()
>
> from orm.models import Build, Task, Recipe, Layer_Version, Layer, Target,
> LogMessage, HelpText
> @@ -54,11 +54,11 @@ from datetime import datetime, timedelta
>
> from django.db import transaction, connection
>
> +
> # pylint: disable=invalid-name
> # the logger name is standard throughout BitBake
> logger = logging.getLogger("ToasterLogger")
>
> -
> class NotExisting(Exception):
> pass
>
> diff --git
> a/bitbake/lib/toaster/toastermain/management/commands/get-dburl.py
> b/bitbake/lib/toaster/toastermain/management/commands/get-dburl.py
> deleted file mode 100644
> index 22b3eb7..0000000
> --- a/bitbake/lib/toaster/toastermain/management/commands/get-dburl.py
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -from toastermain.settings import getDATABASE_URL
> -from django.core.management.base import NoArgsCommand
> -
> -class Command(NoArgsCommand):
> - args = ""
> - help = "get database url"
> -
> - def handle_noargs(self,**options):
> - print getDATABASE_URL()
> diff --git a/bitbake/lib/toaster/toastermain/settings.py
> b/bitbake/lib/toaster/toastermain/settings.py
> index 74ab604..063460b 100644
> --- a/bitbake/lib/toaster/toastermain/settings.py
> +++ b/bitbake/lib/toaster/toastermain/settings.py
> @@ -21,7 +21,7 @@
>
> # Django settings for Toaster project.
>
> -import os, re
> +import os
>
> DEBUG = True
> TEMPLATE_DEBUG = DEBUG
> @@ -40,12 +40,14 @@ MANAGERS = ADMINS
>
> DATABASES = {
> 'default': {
> - 'ENGINE': 'django.db.backends.sqlite3', # Add
> 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
> - 'NAME': 'toaster.sqlite', # Or path to
> database file if using sqlite3.
> + # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
> + 'ENGINE': 'django.db.backends.sqlite3',
> + # DB name or full path to database file if using sqlite3.
> + 'NAME': 'toaster.sqlite',
> 'USER': '',
> 'PASSWORD': '',
> - 'HOST': '127.0.0.1', # Empty for localhost
> through domain sockets or '127.0.0.1' for localhost through TCP.
> - 'PORT': '3306', # Set to empty string for
> default.
> + #'HOST': '127.0.0.1', # e.g. mysql server
> + #'PORT': '3306', # e.g. mysql port
> }
> }
>
> @@ -55,58 +57,6 @@ DATABASES = {
> if 'sqlite' in DATABASES['default']['ENGINE']:
> DATABASES['default']['OPTIONS'] = { 'timeout': 20 }
>
> -# Reinterpret database settings if we have DATABASE_URL environment
> variable defined
> -
> -if 'DATABASE_URL' in os.environ:
> - dburl = os.environ['DATABASE_URL']
> -
> - if dburl.startswith('sqlite3://'):
> - result = re.match('sqlite3://(.*)', dburl)
> - if result is None:
> - raise Exception("ERROR: Could not read sqlite database url:
> %s" % dburl)
> - DATABASES['default'] = {
> - 'ENGINE': 'django.db.backends.sqlite3',
> - 'NAME': result.group(1),
> - 'USER': '',
> - 'PASSWORD': '',
> - 'HOST': '',
> - 'PORT': '',
> - }
> - elif dburl.startswith('mysql://'):
> - # URL must be in this form: mysql://user:pass@host:port/name
> - result =
> re.match(r"mysql://([^:]*):([^@]*)@([^:]*):(\d*)/([^/]*)", dburl)
> - if result is None:
> - raise Exception("ERROR: Could not read mysql database url:
> %s" % dburl)
> - DATABASES['default'] = {
> - 'ENGINE': 'django.db.backends.mysql',
> - 'NAME': result.group(5),
> - 'USER': result.group(1),
> - 'PASSWORD': result.group(2),
> - 'HOST': result.group(3),
> - 'PORT': result.group(4),
> - }
> - else:
> - raise Exception("FIXME: Please implement missing database url
> schema for url: %s" % dburl)
> -
> -
> -# Allows current database settings to be exported as a DATABASE_URL
> environment variable value
> -
> -def getDATABASE_URL():
> - d = DATABASES['default']
> - if d['ENGINE'] == 'django.db.backends.sqlite3':
> - if d['NAME'] == ':memory:':
> - return 'sqlite3://:memory:'
> - elif d['NAME'].startswith("/"):
> - return 'sqlite3://' + d['NAME']
> - return "sqlite3://" + os.path.join(os.getcwd(), d['NAME'])
> -
> - elif d['ENGINE'] == 'django.db.backends.mysql':
> - return "mysql://" + d['USER'] + ":" + d['PASSWORD'] + "@" +
> d['HOST'] + ":" + d['PORT'] + "/" + d['NAME']
> -
> - raise Exception("FIXME: Please implement missing database url schema
> for engine: %s" % d['ENGINE'])
> -
> -
> -
> # Hosts/domain names that are valid for this site; required if DEBUG is
> False
> # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
> ALLOWED_HOSTS = []
> --
> 2.7.4
>
> --
> _______________________________________________
> toaster mailing list
> toaster at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/toaster
>
--
Elliot Smith
Software Engineer
Intel Open Source Technology Centre
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/toaster/attachments/20160426/0dc85f64/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: toaster_ui.log
Type: text/x-log
Size: 135264 bytes
Desc: not available
URL: <http://lists.yoctoproject.org/pipermail/toaster/attachments/20160426/0dc85f64/attachment-0001.bin>
More information about the toaster
mailing list