GLYCAM-Web / website

A bare-bones repo to contain public website stuff and issues related to the GLYCAM Web Django apps.
4 stars 0 forks source link

Library builds fail unless CB is used first #21

Closed Lachele closed 2 years ago

Lachele commented 4 years ago

Tool: Hybrid N-glycan builder: https://dev.glycam.org/lib/chnlib/

Bug Description: Build fails with error "UnboundLocalError at /cb/download/" until something is built from the CB itself, first. Full text of error message below.

I tested Chrome and Firefox in a Ubuntu-flavored Linux.

To Reproduce:

  1. Start with a browser that hasn't seen dev.glycam.org in at least a couple months. Better if it's totally, brand-spanking new to the site.
  2. Go to the URL above. Hover over something and "Select" it.
  3. You will get the error message copied below.
  4. In that same browser window - or a new one if you want to preserve the error - go to dev.glycam.org/cb
  5. Build DManpa1-OH and click Done.
  6. Go back to the chnlib URL and try again.
  7. It works!

Expected behavior I expect the library to work even if the Carbohydrate Builder interface has never been used before.

Screenshots Probably not necessary.

Device & OS Details Firefox in Pop!_OS 20.04; Firefox and Chrome in Kubuntu 18.04.4.

Additional context

Initially found while testing Selenium... Lol.

Full text of the error message:

Request Method: GET

http://dev.glycam.org/cb/download/ 2.2.2 UnboundLocalError local variable 'buildOptions' referenced before assignment /website/glycam-django/glycamweb/cb/views.py in download, line 218 /usr/local/bin/python 3.7.5 ['..', '/programs/GRPC/BatchCompute', '/programs/gems/', '/website/glycam-django/glycamweb', '/usr/local/bin', '/programs/gems', '/programs/GRPC/BatchCompute', '/programs/GRPC/JSON', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages', '/programs/gems', '/programs/gems/gemsModules', '/programs/gems', '/programs/GRPC/JSON', '/programs/gems', '/programs/GRPC/BatchCompute', '/programs/GRPC/BatchCompute', '/programs/gems', '/programs/GRPC/BatchCompute', '/website/glycam-django/glycamweb/pdb', '/programs/gems/', '/programs/GRPC/JSON', '/programs/GRPC/BatchCompute', '/programs/site_deps/Grafting/program/'] Tue, 5 May 2020 23:01:51 -0400

Environment:

Request Method: GET Request URL: http://dev.glycam.org/cb/download/

Django Version: 2.2.2 Python Version: 3.7.5 Installed Applications: ['core.apps.CoreConfig', 'home.apps.HomeConfig', 'cb.apps.CbConfig', 'feedback.apps.FeedbackConfig', 'txt.apps.TxtConfig', 'gr.apps.GrConfig', 'oms.apps.OmsConfig', 'lib.apps.LibConfig', 'varmean.apps.VarmeanConfig', 'status.apps.StatusConfig', 'drawglycan.apps.DrawglycanConfig', 'gf.apps.GfConfig', 'gp.apps.GpConfig', 'ad.apps.AdConfig', 'pdb.apps.PdbConfig', 'portal.apps.PortalConfig', 'project.apps.ProjectConfig', 'md5sum.apps.Md5sumConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', 'crispy_forms', 'rest_framework', 'registration', 'choices.apps.ChoicesConfig', 'steps.apps.StepsConfig', 'json_api.apps.JsonApiConfig', 'url.apps.UrlConfig', 'md.apps.MdConfig'] Installed Middleware: ['django.middleware.common.CommonMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback:

File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner

  1. response = get_response(request)

File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response

  1. response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response

  1. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/website/glycam-django/glycamweb/cb/views.py" in download

  1. log.debug("buildOptions: \n" + str(buildOptions))

Exception Type: UnboundLocalError at /cb/download/ Exception Value: local variable 'buildOptions' referenced before assignment

Request information USER

AnonymousUser GET

No GET data POST

No POST data FILES

No FILES data COOKIES Variable Value csrftoken

'cmfl5coOZT4G1grkYLX1wbmIAPHcsCwVNiVrKPyaP417qa9PGH4AVYDNTFd4wf9X'

_ga

'GA1.2.1409876372.1563680332'

sessionid

'vi8zt3m47genvtansn3nq6mxurilazxo'

META Variable Value CSRF_COOKIE

'cmfl5coOZT4G1grkYLX1wbmIAPHcsCwVNiVrKPyaP417qa9PGH4AVYDNTFd4wf9X'

HTTP_ACCEPT

'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'

HTTP_ACCEPT_ENCODING

'gzip, deflate, br'

HTTP_ACCEPT_LANGUAGE

'en-US,en;q=0.5'

HTTP_CONNECTION

'upgrade'

HTTP_COOKIE

('csrftoken=cmfl5coOZT4G1grkYLX1wbmIAPHcsCwVNiVrKPyaP417qa9PGH4AVYDNTFd4wf9X; ' '_ga=GA1.2.1409876372.1563680332; sessionid=vi8zt3m47genvtansn3nq6mxurilazxo')

HTTP_HOST

'dev.glycam.org'

HTTP_REFERER

'https://dev.glycam.org/lib/chnlib/'

HTTP_UPGRADE_INSECURE_REQUESTS

'1'

HTTP_USER_AGENT

'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0'

HTTP_X_FORWARDED_FOR

'10.0.0.3, 10.0.33.191, 10.0.21.6'

HTTP_X_FORWARDED_HOST

'dev.glycam.org'

HTTP_X_FORWARDED_PORT

'80'

HTTP_X_FORWARDED_PROTO

'http'

HTTP_X_FORWARDED_SERVER

'eb2bfa3030c0'

HTTP_X_REAL_IP

'10.0.21.6'

PATH_INFO

'/cb/download/'

QUERY_STRING

''

RAW_URI

'/cb/download/'

REMOTE_ADDR

'10.0.21.7'

REMOTE_PORT

'46572'

REQUEST_METHOD

'GET'

SCRIPT_NAME

''

SERVER_NAME

'0.0.0.0'

SERVER_PORT

'8000'

SERVER_PROTOCOL

'HTTP/1.1'

SERVER_SOFTWARE

'gunicorn/20.0.4'

gunicorn.socket

<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('10.0.21.3', 8000), raddr=('10.0.21.7', 46572)>

wsgi.errors

<gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f3750b36bd0>

wsgi.file_wrapper

''

wsgi.input

<gunicorn.http.body.Body object at 0x7f3750b368d0>

wsgi.input_terminated

True

wsgi.multiprocess

False

wsgi.multithread

False

wsgi.run_once

False

wsgi.url_scheme

'http'

wsgi.version

(1, 0)

Settings Using settings module glycamweb.settings Setting Value ABSOLUTE_URL_OVERRIDES

{}

ACCOUNT_ACTIVATION_DAYS

7

ADMINS

[]

ALLOWED_HOSTS

['*']

APPEND_SLASH

True

AUTHENTICATION_BACKENDS

['django.contrib.auth.backends.ModelBackend']

AUTH_PASSWORD_VALIDATORS

'****'

AUTH_USER_MODEL

'auth.User'

BASE_DIR

'/website/glycam-django/glycamweb'

CACHES

{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}

CACHE_MIDDLEWARE_ALIAS

'default'

CACHE_MIDDLEWARE_KEY_PREFIX

'****'

CACHE_MIDDLEWARE_SECONDS

600

CORS_ORIGIN_ALLOW_ALL

True

CRISPY_TEMPLATE_PACK

'bootstrap'

CSRF_COOKIE_AGE

31449600

CSRF_COOKIE_DOMAIN

None

CSRF_COOKIE_HTTPONLY

False

CSRF_COOKIE_NAME

'csrftoken'

CSRF_COOKIE_PATH

'/'

CSRF_COOKIE_SAMESITE

'Lax'

CSRF_COOKIE_SECURE

False

CSRF_FAILURE_VIEW

'django.views.csrf.csrf_failure'

CSRF_HEADER_NAME

'HTTP_X_CSRFTOKEN'

CSRF_TRUSTED_ORIGINS

[]

CSRF_USE_SESSIONS

False

DATABASES

{'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.mysql', 'HOST': 'gw-django_db', 'NAME': 'GLYCAMWebDjangoDB', 'OPTIONS': {}, 'PASSWORD': '****', 'PORT': '3306', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'webdev'}}

DATABASE_ROUTERS

[]

DATA_DIR

'/website/userdata/'

DATA_UPLOAD_MAX_MEMORY_SIZE

2621440

DATA_UPLOAD_MAX_NUMBER_FIELDS

1000

DATETIME_FORMAT

'N j, Y, P'

DATETIME_INPUT_FORMATS

['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']

DATE_FORMAT

'N j, Y'

DATE_INPUT_FORMATS

['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']

DEBUG

True

DEBUG_PROPAGATE_EXCEPTIONS

False

DECIMAL_SEPARATOR

'.'

DEFAULT_CHARSET

'utf-8'

DEFAULT_CONTENT_TYPE

'text/html'

DEFAULT_EXCEPTION_REPORTER_FILTER

'django.views.debug.SafeExceptionReporterFilter'

DEFAULT_FILE_STORAGE

'django.core.files.storage.FileSystemStorage'

DEFAULT_FROM_EMAIL

'webmaster@localhost'

DEFAULT_INDEX_TABLESPACE

''

DEFAULT_TABLESPACE

''

DISALLOWED_USER_AGENTS

[]

EMAIL_BACKEND

'django.core.mail.backends.smtp.EmailBackend'

EMAIL_HOST

'smtp.gmail.com'

EMAIL_HOST_PASSWORD

'****'

EMAIL_HOST_USER

'glycam@gmail.com'

EMAIL_PORT

587

EMAIL_SSL_CERTFILE

None

EMAIL_SSL_KEYFILE

'****'

EMAIL_SUBJECT_PREFIX

'[Django] '

EMAIL_TIMEOUT

None

EMAIL_USE_LOCALTIME

False

EMAIL_USE_SSL

False

EMAIL_USE_TLS

True

FILE_CHARSET

'utf-8'

FILE_UPLOAD_DIRECTORY_PERMISSIONS

None

FILE_UPLOAD_HANDLERS

['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']

FILE_UPLOAD_MAX_MEMORY_SIZE

2621440

FILE_UPLOAD_PERMISSIONS

None

FILE_UPLOAD_TEMP_DIR

None

FIRST_DAY_OF_WEEK

0

FIXTURE_DIRS

[]

FORCE_SCRIPT_NAME

None

FORMAT_MODULE_PATH

None

FORM_RENDERER

'django.forms.renderers.DjangoTemplates'

IGNORABLE_404_URLS

[]

INSTALLED_APPS

['core.apps.CoreConfig', 'home.apps.HomeConfig', 'cb.apps.CbConfig', 'feedback.apps.FeedbackConfig', 'txt.apps.TxtConfig', 'gr.apps.GrConfig', 'oms.apps.OmsConfig', 'lib.apps.LibConfig', 'varmean.apps.VarmeanConfig', 'status.apps.StatusConfig', 'drawglycan.apps.DrawglycanConfig', 'gf.apps.GfConfig', 'gp.apps.GpConfig', 'ad.apps.AdConfig', 'pdb.apps.PdbConfig', 'portal.apps.PortalConfig', 'project.apps.ProjectConfig', 'md5sum.apps.Md5sumConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', 'crispy_forms', 'rest_framework', 'registration', 'choices.apps.ChoicesConfig', 'steps.apps.StepsConfig', 'json_api.apps.JsonApiConfig', 'url.apps.UrlConfig', 'md.apps.MdConfig']

INTERNAL_IPS

[]

JSON_API_VERSION

'****'

LANGUAGES

[('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]

LANGUAGES_BIDI

['he', 'ar', 'fa', 'ur']

LANGUAGE_CODE

'en-us'

LANGUAGE_COOKIE_AGE

None

LANGUAGE_COOKIE_DOMAIN

None

LANGUAGE_COOKIE_NAME

'django_language'

LANGUAGE_COOKIE_PATH

'/'

LOCALE_PATHS

[]

LOGGING

{}

LOGGING_CONFIG

'logging.config.dictConfig'

LOGIN_REDIRECT_URL

'/accounts/login/'

LOGIN_URL

'/accounts/login/'

LOGOUT_REDIRECT_URL

None

MANAGERS

[]

MEDIA_ROOT

'/website/uploads/'

MEDIA_URL

''

MESSAGE_STORAGE

'django.contrib.messages.storage.fallback.FallbackStorage'

MIDDLEWARE

['django.middleware.common.CommonMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

MIGRATION_MODULES

{}

MONTH_DAY_FORMAT

'F j'

NUMBER_GROUPING

0

PASSWORD_HASHERS

'****'

PASSWORD_RESET_TIMEOUT_DAYS

'****'

PREPEND_WWW

False

REGISTRATION_AUTO_LOGIN

True

REGISTRATION_DEFAULT_FROM_EMAIL

'glycam@gmail.com'

REST_FRAMEWORK

{'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',)}

ROOT_URLCONF

'glycamweb.urls'

SECRET_KEY

'****'

SECURE_BROWSER_XSS_FILTER

False

SECURE_CONTENT_TYPE_NOSNIFF

False

SECURE_HSTS_INCLUDE_SUBDOMAINS

False

SECURE_HSTS_PRELOAD

False

SECURE_HSTS_SECONDS

0

SECURE_PROXY_SSL_HEADER

None

SECURE_REDIRECT_EXEMPT

[]

SECURE_SSL_HOST

None

SECURE_SSL_REDIRECT

False

SERVER_EMAIL

'root@localhost'

SESSION_CACHE_ALIAS

'default'

SESSION_COOKIE_AGE

1209600

SESSION_COOKIE_DOMAIN

None

SESSION_COOKIE_HTTPONLY

True

SESSION_COOKIE_NAME

'sessionid'

SESSION_COOKIE_PATH

'/'

SESSION_COOKIE_SAMESITE

'Lax'

SESSION_COOKIE_SECURE

False

SESSION_ENGINE

'django.contrib.sessions.backends.db'

SESSION_EXPIRE_AT_BROWSER_CLOSE

False

SESSION_FILE_PATH

None

SESSION_SAVE_EVERY_REQUEST

False

SESSION_SERIALIZER

'django.contrib.sessions.serializers.PickleSerializer'

SETTINGS_MODULE

'glycamweb.settings'

SHORT_DATETIME_FORMAT

'm/d/Y P'

SHORT_DATE_FORMAT

'm/d/Y'

SIGNING_BACKEND

'django.core.signing.TimestampSigner'

SILENCED_SYSTEM_CHECKS

[]

SITE_ID

1

STATICFILES_DIRS

[]

STATICFILES_FINDERS

['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']

STATICFILES_STORAGE

'django.contrib.staticfiles.storage.StaticFilesStorage'

STATIC_ROOT

'/website/glycam-django/glycamweb/static'

STATIC_URL

'/static/'

TEMPLATES

[{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/website/glycam-django/glycamweb/templates'], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}]

TEST_NON_SERIALIZED_APPS

[]

TEST_RUNNER

'django.test.runner.DiscoverRunner'

THOUSAND_SEPARATOR

','

TIME_FORMAT

'P'

TIME_INPUT_FORMATS

['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']

TIME_ZONE

'America/New_York'

USE_I18N

True

USE_L10N

True

USE_THOUSAND_SEPARATOR

False

USE_TZ

True

USE_X_FORWARDED_HOST

False

USE_X_FORWARDED_PORT

False

WSGI_APPLICATION

'glycamweb.wsgi.application'

X_FRAME_OPTIONS

'SAMEORIGIN'

YEAR_MONTH_FORMAT

'F Y'

_UPLOAD_ROOT

'/website/userdata/tmp_uploads/'

danwentworthart commented 2 years ago

I got in there and read that error in detail. This is the bit that we can act on:


File "/website/glycam-django/glycamweb/cb/views.py" in download
218. log.debug("buildOptions: \n" + str(buildOptions))

Exception Type: UnboundLocalError at /cb/download/
Exception Value: local variable 'buildOptions' referenced before assignment
danwentworthart commented 2 years ago

Offending code is removed.