diff --git a/mainproject/settings.py b/mainproject/settings.py index c78d407..cc68b6c 100644 --- a/mainproject/settings.py +++ b/mainproject/settings.py @@ -23,79 +23,80 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = config( - 'SECRET_KEY', default='GF#QhIU%}4;auyFdIr]6>$_~|=."9qB%[Oj;.<^$IkNAgp0E{d') -DEBUG = config('DEBUG', default=False, cast=bool) -ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='', cast=Csv()) -MATD3_NAME = mark_safe(config('MATD3_NAME', default='MatD³')) -MATD3_URL = config('MATD3_URL', default='') -# DEFAULT_AUTO_FIELD='django.db.models.AutoField' #Uncomment this line if using Django version 3.2 or higher + "SECRET_KEY", default='GF#QhIU%}4;auyFdIr]6>$_~|=."9qB%[Oj;.<^$IkNAgp0E{d' +) +DEBUG = config("DEBUG", default=False, cast=bool) +ALLOWED_HOSTS = config("ALLOWED_HOSTS", default="", cast=Csv()) +MATD3_NAME = mark_safe(config("MATD3_NAME", default="MatD³")) +MATD3_URL = config("MATD3_URL", default="") +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" # Uncomment this line if using Django version 3.2 or higher # Application definition INSTALLED_APPS = [ - 'materials', - 'accounts', - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'raven.contrib.django.raven_compat', - 'nested_admin', - 'rest_framework', - 'django_filters' + "materials", + "accounts", + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "raven.contrib.django.raven_compat", + "nested_admin", + "rest_framework", + "django_filters", ] MIDDLEWARE = [ - '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', + "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", ] -ROOT_URLCONF = 'mainproject.urls' +ROOT_URLCONF = "mainproject.urls" TEMPLATES = [ { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'mainproject/templates')], - 'APP_DIRS': True, - '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', - 'mainproject.context_processors.title', + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [os.path.join(BASE_DIR, "mainproject/templates")], + "APP_DIRS": True, + "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", + "mainproject.context_processors.title", ], }, }, ] -WSGI_APPLICATION = 'mainproject.wsgi.application' +WSGI_APPLICATION = "mainproject.wsgi.application" # Database -USE_SQLITE = config('USE_SQLITE', default=False, cast=bool) +USE_SQLITE = config("USE_SQLITE", default=False, cast=bool) if USE_SQLITE: DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'materials.db'), + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": os.path.join(BASE_DIR, "materials.db"), } } else: DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': 'materials', - 'USER': config('DB_USER', default=''), - 'PASSWORD': config('DB_PASSWORD', default=''), - 'HOST': 'localhost', - 'PORT': '', + "default": { + "ENGINE": "django.db.backends.mysql", + "NAME": "materials", + "USER": config("DB_USER", default=""), + "PASSWORD": config("DB_PASSWORD", default=""), + "HOST": "localhost", + "PORT": "", } } @@ -103,28 +104,25 @@ AUTH_PASSWORD_VALIDATORS = [ { - 'NAME': 'django.contrib.auth.password_validation.' - 'UserAttributeSimilarityValidator', + "NAME": "django.contrib.auth.password_validation." + "UserAttributeSimilarityValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.' - 'MinimumLengthValidator', + "NAME": "django.contrib.auth.password_validation." "MinimumLengthValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.' - 'CommonPasswordValidator', + "NAME": "django.contrib.auth.password_validation." "CommonPasswordValidator", }, { - 'NAME': 'django.contrib.auth.password_validation.' - 'NumericPasswordValidator', + "NAME": "django.contrib.auth.password_validation." "NumericPasswordValidator", }, ] # Internationalization -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = "en-us" -TIME_ZONE = 'America/New_York' +TIME_ZONE = "America/New_York" USE_I18N = True @@ -136,76 +134,73 @@ # Static files (CSS, JavaScript, Images) -STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'static') -STATICFILES_DIRS = [ - os.path.join(BASE_DIR, 'mainproject/static') -] +STATIC_URL = "/static/" +STATIC_ROOT = os.path.join(BASE_DIR, "static") +STATICFILES_DIRS = [os.path.join(BASE_DIR, "mainproject/static")] # Media -MEDIA_URL = '/media/' -MEDIA_ROOT = os.path.join(BASE_DIR, 'mainproject/media') +MEDIA_URL = "/media/" +MEDIA_ROOT = os.path.join(BASE_DIR, "mainproject/media") DATA_UPLOAD_MAX_MEMORY_SIZE = None DATA_UPLOAD_MAX_NUMBER_FIELDS = None FILE_UPLOAD_MAX_MEMORY_SIZE = int(5e8) # Account -LOGIN_REDIRECT_URL = '/' -LOGIN_URL = '/accounts/login' +LOGIN_REDIRECT_URL = "/" +LOGIN_URL = "/accounts/login" ACCOUNT_ACTIVATION_DAYS = 7 # Email -EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -EMAIL_HOST = config('EMAIL_HOST', default='') -EMAIL_PORT = config('EMAIL_PORT', default=587, cast=int) -EMAIL_HOST_USER = config('EMAIL_HOST_USER', default='') -EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', default='') -EMAIL_USE_TLS = config('EMAIL_USE_TLS', default=True, cast=bool) +EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" +EMAIL_HOST = config("EMAIL_HOST", default="") +EMAIL_PORT = config("EMAIL_PORT", default=587, cast=int) +EMAIL_HOST_USER = config("EMAIL_HOST_USER", default="") +EMAIL_HOST_PASSWORD = config("EMAIL_HOST_PASSWORD", default="") +EMAIL_USE_TLS = config("EMAIL_USE_TLS", default=True, cast=bool) # Messages framework MESSAGE_TAGS = { - messages.ERROR: 'danger', + messages.ERROR: "danger", } # Logging RAVEN_CONFIG = { - 'dsn': config('RAVEN_DSN', default=''), - 'release': raven.fetch_git_sha(BASE_DIR), + "dsn": config("RAVEN_DSN", default=""), + "release": raven.fetch_git_sha(BASE_DIR), } LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'verbose': { - 'format': '{levelname} - {asctime} - {module} - {message}', - 'style': '{', + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "verbose": { + "format": "{levelname} - {asctime} - {module} - {message}", + "style": "{", }, }, - 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', - 'formatter': 'verbose', + "handlers": { + "console": { + "class": "logging.StreamHandler", + "formatter": "verbose", }, - 'sentry': { - 'level': 'WARNING', - 'class': - 'raven.contrib.django.raven_compat.handlers.SentryHandler', + "sentry": { + "level": "WARNING", + "class": "raven.contrib.django.raven_compat.handlers.SentryHandler", }, }, - 'loggers': { - 'django': { - 'handlers': ['console'], - 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'), - 'propagate': True, + "loggers": { + "django": { + "handlers": ["console"], + "level": os.getenv("DJANGO_LOG_LEVEL", "INFO"), + "propagate": True, }, - '': { - 'handlers': ['sentry'], - 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'), + "": { + "handlers": ["sentry"], + "level": os.getenv("DJANGO_LOG_LEVEL", "INFO"), }, }, } @@ -213,14 +208,14 @@ # REST framework REST_FRAMEWORK = { - 'DEFAULT_PERMISSION_CLASSES': [ - 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' + "DEFAULT_PERMISSION_CLASSES": [ + "rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly" ], - 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', - 'PAGE_SIZE': 10, - 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'] + "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", + "PAGE_SIZE": 10, + "DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"], } # Tests -SELENIUM_DRIVER = config('SELENIUM_DRIVER', default='firefox').lower() +SELENIUM_DRIVER = config("SELENIUM_DRIVER", default="firefox").lower() diff --git a/materials/forms.py b/materials/forms.py index 744e84f..410f1bf 100644 --- a/materials/forms.py +++ b/materials/forms.py @@ -27,7 +27,8 @@ def __init__(self, model=None, field=None, *args, **kwargs): class AddReferenceForm(forms.Form): inputRISFile = forms.FileField( required=False, - widget=forms.ClearableFileInput(attrs={'multiple': True, 'onchange':'handleFileSelect();' }), + widget=forms.ClearableFileInput(attrs={'allow_multiple_selected': True, 'onchange':'handleFileSelect();' }), + # widget=forms.ClearableFileInput(attrs={'multiple': True, 'onchange':'handleFileSelect();' }), help_text='Upload RIS file reference' ) title = forms.CharField( @@ -558,7 +559,8 @@ class AddDataForm(forms.Form): # Uploads uploaded_files = forms.FileField( required=False, - widget=forms.ClearableFileInput(attrs={'multiple': True}), + widget=forms.ClearableFileInput(attrs={'allow_multiple_selected': True}), + # widget=forms.ClearableFileInput(attrs={'allow_multiple_selected': True}), help_text='' 'Upload files containing anything that is relevant to the current ' 'data (input files to a calculation, image of the sample, ...). ' diff --git a/requirements.txt b/requirements.txt index b12b1dc..6eb1e4d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,18 +1,18 @@ -Django==3.1.14 -matplotlib==3.0.2 -mysqlclient==1.4.2 -numpy==1.21.0 -Pillow==9.0.1 -python-dateutil==2.8.0 -sentry-sdk==0.7.3 -raven==6.10.0 -python-decouple==3.1 -django-nested-admin==3.2.4 -djangorestframework==3.12.2 -coverage==4.5.3 -selenium==3.141.0 -requests==2.22.0 -Sphinx==2.2.0 -gunicorn==19.9.0 +Django +matplotlib +mysqlclient +numpy +Pillow +python-dateutil +sentry-sdk +raven +python-decouple +django-nested-admin +djangorestframework +coverage +selenium +requests +Sphinx +gunicorn sphinx_rtd_theme -django-filter>=2.4.0 +django-filter