From 0f724d3f2f3086fc1e9cada49e5d60da694571ae Mon Sep 17 00:00:00 2001 From: Divio Bot Date: Thu, 15 Mar 2018 11:21:09 +0000 Subject: [PATCH] new website using base project default_v3_py3 website template: repo=git@github.com:aldryn/project-template.git hash=7c69ca419989c530ca1768e6af73c54a67af19e2 --- .dockerignore | 6 + .env-local | 3 + .gitignore | 24 +++ Dockerfile | 23 +++ Procfile | 2 + addons-dev/.empty | 0 addons-dev/.gitignore | 3 + addons/.gitignore | 1 + addons/aldryn-addons/addon.json | 3 + addons/aldryn-django/addon.json | 3 + addons/aldryn-django/aldryn_config.py | 230 ++++++++++++++++++++++++++ addons/aldryn-django/settings.json | 3 + docker-compose.yml | 21 +++ manage.py | 7 + private/.empty | 0 requirements.in | 2 + settings.py | 18 ++ static/.empty | 0 templates/.empty | 0 urls.py | 12 ++ wsgi.py | 5 + 21 files changed, 366 insertions(+) create mode 100644 .dockerignore create mode 100644 .env-local create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Procfile create mode 100644 addons-dev/.empty create mode 100644 addons-dev/.gitignore create mode 100644 addons/.gitignore create mode 100644 addons/aldryn-addons/addon.json create mode 100644 addons/aldryn-django/addon.json create mode 100644 addons/aldryn-django/aldryn_config.py create mode 100644 addons/aldryn-django/settings.json create mode 100644 docker-compose.yml create mode 100755 manage.py create mode 100644 private/.empty create mode 100644 requirements.in create mode 100644 settings.py create mode 100644 static/.empty create mode 100644 templates/.empty create mode 100644 urls.py create mode 100644 wsgi.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0da5edc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +*.pyc +*.pyo +/.env +/data +/static_collected +/node_modules diff --git a/.env-local b/.env-local new file mode 100644 index 0000000..4a8be83 --- /dev/null +++ b/.env-local @@ -0,0 +1,3 @@ +DEBUG=True +STAGE=local +DATABASE_URL=postgres://postgres@postgres:5432/db diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d1ce150 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# # Warning: text inside the DEFAULT tags is auto-generated. Manual changes will be overwritten. +# OS generated +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +*~ + +# Python +*.pyc +*.pyo + +# Aldryn +/.env +/.env-local +.aldryn +/data +/data.tar.gz +/static_collected +/node_modules +# diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..62bc9cf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +# +# + +# +# + +# +# + +# +# + +# +# + +# +# + +# +# + +# +# diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..37c454b --- /dev/null +++ b/Procfile @@ -0,0 +1,2 @@ +web: aldryn-django web +migrate: aldryn-django migrate diff --git a/addons-dev/.empty b/addons-dev/.empty new file mode 100644 index 0000000..e69de29 diff --git a/addons-dev/.gitignore b/addons-dev/.gitignore new file mode 100644 index 0000000..bed5232 --- /dev/null +++ b/addons-dev/.gitignore @@ -0,0 +1,3 @@ +/* +!/.gitignore +!/.empty diff --git a/addons/.gitignore b/addons/.gitignore new file mode 100644 index 0000000..ba7711d --- /dev/null +++ b/addons/.gitignore @@ -0,0 +1 @@ +/.debug diff --git a/addons/aldryn-addons/addon.json b/addons/aldryn-addons/addon.json new file mode 100644 index 0000000..99679c9 --- /dev/null +++ b/addons/aldryn-addons/addon.json @@ -0,0 +1,3 @@ +{ + "package-name": "aldryn-addons" +} diff --git a/addons/aldryn-django/addon.json b/addons/aldryn-django/addon.json new file mode 100644 index 0000000..74280fe --- /dev/null +++ b/addons/aldryn-django/addon.json @@ -0,0 +1,3 @@ +{ + "package-name": "aldryn-django" +} diff --git a/addons/aldryn-django/aldryn_config.py b/addons/aldryn-django/aldryn_config.py new file mode 100644 index 0000000..1a7fb8e --- /dev/null +++ b/addons/aldryn-django/aldryn_config.py @@ -0,0 +1,230 @@ +# -*- coding: utf-8 -*- +import json +import sys +from aldryn_client import forms + + +class Form(forms.BaseForm): + languages = forms.CharField('Languages', required=True, initial='["en", "de"]') + + def to_settings(self, data, settings): + import os + import dj_database_url + import warnings + import yurl + from functools import partial + from aldryn_addons.utils import boolean_ish, djsenv + env = partial(djsenv, settings=settings) + + # BASE_DIR should already be set by aldryn-addons + settings['BASE_DIR'] = env('BASE_DIR', required=True) + settings['DATA_ROOT'] = env('DATA_ROOT', os.path.join(settings['BASE_DIR'], 'data')) + settings['SECRET_KEY'] = env('SECRET_KEY', 'this-is-not-very-random') + settings['DEBUG'] = boolean_ish(env('DEBUG', False)) + settings['TEMPLATE_DEBUG'] = boolean_ish(env('TEMPLATE_DEBUG', settings['DEBUG'])) + + settings['DATABASE_URL'] = env('DATABASE_URL') + if settings['DATABASE_URL']: + pass + elif env('DJANGO_MODE') == 'build': + settings['DATABASE_URL'] = 'sqlite://:memory:' + else: + settings['DATABASE_URL'] = 'sqlite:///{}'.format( + os.path.join(settings['DATA_ROOT'], 'db.sqlite3') + ) + warnings.warn( + 'no database configured. Falling back to DATABASE_URL={0}'.format( + settings['DATABASE_URL'] + ), + RuntimeWarning, + ) + settings['DATABASES']['default'] = dj_database_url.parse(settings['DATABASE_URL']) + + settings['ROOT_URLCONF'] = env('ROOT_URLCONF', 'urls') + settings['ADDON_URLS'].append('aldryn_django.urls') + settings['ADDON_URLS_I18N'].append('aldryn_django.i18n_urls') + + settings['WSGI_APPLICATION'] = 'wsgi.application' + + settings['STATIC_URL'] = env('STATIC_URL', '/static/') + settings['STATIC_URL_IS_ON_OTHER_DOMAIN'] = bool(yurl.URL(settings['STATIC_URL']).host) + settings['STATIC_ROOT'] = env( + 'STATIC_ROOT', + os.path.join(settings['BASE_DIR'], 'static_collected'), + ) + settings['STATICFILES_DIRS'] = env( + 'STATICFILES_DIRS', + [os.path.join(settings['BASE_DIR'], 'static'),] + ) + + settings['MEDIA_URL'] = env('MEDIA_URL', '/media/') + settings['MEDIA_URL_IS_ON_OTHER_DOMAIN'] = bool(yurl.URL(settings['MEDIA_URL']).host) + settings['MEDIA_ROOT'] = env('MEDIA_ROOT', os.path.join(settings['DATA_ROOT'], 'media')) + + settings['INSTALLED_APPS'].extend([ + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.messages', + 'django.contrib.admin', + 'django.contrib.staticfiles', + 'aldryn_django', + ]) + if 'sqlite3' not in settings['DATABASES']['default']['ENGINE']: + settings['INSTALLED_APPS'].append('south') + + settings['TEMPLATE_CONTEXT_PROCESSORS'].extend([ + 'django.core.context_processors.request', + 'aldryn_django.context_processors.debug', + ]) + settings['MIDDLEWARE_CLASSES'].extend([ + 'django.middleware.locale.LocaleMiddleware', + 'aldryn_django.middleware.CurrentSiteMiddleware', + ]) + + settings['TEMPLATE_DIRS'] = env( + 'TEMPLATE_DIRS', + [os.path.join(settings['BASE_DIR'], 'templates')], + ) + settings['SITE_ID'] = env('SITE_ID', 1) + + self.domain_settings(data, settings, env=env) + self.server_settings(settings, env=env) + self.logging_settings(settings, env=env) + self.cache_settings(settings, env=env) + self.storage_settings(settings, env=env) + self.i18n_settings(data, settings, env=env) + self.migration_settings(settings, env=env) + return settings + + def domain_settings(self, data, settings, env): + settings['ALLOWED_HOSTS'] = env('ALLOWED_HOSTS', ['localhost', '*']) + # will take a full config dict from ALDRYN_SITES_DOMAINS if available, + # otherwise fall back to constructing the dict from DOMAIN, + # DOMAIN_ALIASES and DOMAIN_REDIRECTS + domains = env('ALDRYN_SITES_DOMAINS', {}) + domain = env('DOMAIN') + if domain: + settings['DOMAIN'] = domain + domain_aliases = env('DOMAIN_ALIASES', '') + domain_redirects = env('DOMAIN_REDIRECTS', '') + if not domains and domain: + domains = { + 1: { + 'domain': domain, + 'aliases': [d.strip() for d in domain_aliases.split(',') if d.strip()], + 'redirects': [d.strip() for d in domain_redirects.split(',') if d.strip()] + } + } + settings['ALDRYN_SITES_DOMAINS'] = domains + if domains and settings['SITE_ID'] in domains: + settings['ALLOWED_HOSTS'].extend([ + domain for domain in domains[settings['SITE_ID']]['aliases'] + ] + [ + domain for domain in domains[settings['SITE_ID']]['redirects'] + ]) + + + settings['INSTALLED_APPS'].append('aldryn_sites') + settings['MIDDLEWARE_CLASSES'].insert( + settings['MIDDLEWARE_CLASSES'].index('django.middleware.common.CommonMiddleware'), + 'aldryn_sites.middleware.SiteMiddleware', + ) + + def server_settings(self, settings, env): + settings['PORT'] = env('PORT', 80) + settings['BACKEND_PORT'] = env('BACKEND_PORT', 8000) + settings['ENABLE_NGINX'] = env('ENABLE_NGINX', False) + settings['ENABLE_PAGESPEED'] = env('ENABLE_PAGESPEED', False) + settings['ENABLE_BROWSERCACHE'] = env('ENABLE_BROWSERCACHE', False) + settings['BROWSERCACHE_MAX_AGE'] = env('BROWSERCACHE_MAX_AGE', 300) + settings['NGINX_CONF_PATH'] = env('NGINX_CONF_PATH') + settings['NGINX_PROCFILE_PATH'] = env('NGINX_PROCFILE_PATH') + settings['DJANGO_WEB_WORKERS'] = env('DJANGO_WEB_WORKERS', 3) + settings['DJANGO_WEB_MAX_REQUESTS'] = env('DJANGO_WEB_MAX_REQUESTS', 500) + settings['DJANGO_WEB_TIMEOUT'] = env('DJANGO_WEB_TIMEOUT', 120) + + def logging_settings(self, settings, env): + settings['LOGGING'] = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse', + }, + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue', + }, + }, + 'handlers': { + 'console': { + 'level': 'INFO', + 'class': 'logging.StreamHandler', + 'stream': sys.stdout, + }, + 'null': { + 'class': 'django.utils.log.NullHandler', + }, + }, + 'loggers': { + '': { + 'handlers': ['console'], + 'level': 'INFO', + }, + 'django': { + 'handlers': ['console'], + 'level': 'INFO', + }, + 'django.request': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': False, + }, + 'aldryn': { + 'handlers': ['console'], + 'level': 'INFO', + }, + 'py.warnings': { + 'handlers': ['console'], + }, + } + } + + def cache_settings(self, settings, env): + import django_cache_url + cache_url = env('CACHE_URL') + if cache_url: + settings['CACHES']['default'] = django_cache_url.parse(cache_url) + + def storage_settings(self, settings, env): + from aldryn_django.storage import parse_storage_url + if env('DEFAULT_STORAGE_DSN'): + settings['DEFAULT_STORAGE_DSN'] = env('DEFAULT_STORAGE_DSN') + + if 'DEFAULT_STORAGE_DSN' in settings: + settings.update(parse_storage_url(settings['DEFAULT_STORAGE_DSN'])) + + def i18n_settings(self, data, settings, env): + settings['ALL_LANGUAGES'] = list(settings['LANGUAGES']) + settings['ALL_LANGUAGES_DICT'] = dict(settings['ALL_LANGUAGES']) + languages = json.loads(data['languages']) + settings['LANGUAGE_CODE'] = languages[0] + settings['USE_L10N'] = True + settings['USE_I18N'] = True + settings['LANGUAGES'] = [ + (code, settings['ALL_LANGUAGES_DICT'][code]) + for code in languages + ] + + def time_settings(self, settings, env): + if env('TIME_ZONE'): + settings['TIME_ZONE'] = env('TIME_ZONE') + + def migration_settings(self, settings, env): + settings.setdefault('MIGRATION_COMMANDS', []) + mcmds = settings['MIGRATION_COMMANDS'] + + mcmds.append('python manage.py createcachetable django_dbcache; exit 0') + mcmds.append('python manage.py syncdb --noinput') + mcmds.append('python manage.py migrate --list --noinput && python manage.py migrate --noinput && python manage.py migrate --list --noinput') diff --git a/addons/aldryn-django/settings.json b/addons/aldryn-django/settings.json new file mode 100644 index 0000000..5dae0aa --- /dev/null +++ b/addons/aldryn-django/settings.json @@ -0,0 +1,3 @@ +{ + "languages": "[\"en\"]" +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..44f522a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: "2" + +services: + web: + build: "." + links: + - "db:postgres" + ports: + - "8000:80" + volumes: + - ".:/app:rw" + - "./data:/data:rw" + command: python manage.py runserver 0.0.0.0:80 + env_file: .env-local + + db: + image: postgres:9.6-alpine + environment: + POSTGRES_DB: "db" + volumes: + - ".:/app:rw" diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..49ab4dc --- /dev/null +++ b/manage.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python +import os +from aldryn_django import startup + + +if __name__ == "__main__": + startup.manage(path=os.path.dirname(os.path.abspath(__file__))) diff --git a/private/.empty b/private/.empty new file mode 100644 index 0000000..e69de29 diff --git a/requirements.in b/requirements.in new file mode 100644 index 0000000..40b9338 --- /dev/null +++ b/requirements.in @@ -0,0 +1,2 @@ +# # Warning: text inside the INSTALLED_ADDONS tags is auto-generated. Manual changes will be overwritten. +# diff --git a/settings.py b/settings.py new file mode 100644 index 0000000..52e1e02 --- /dev/null +++ b/settings.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +INSTALLED_ADDONS = [ + # # Warning: this is auto-generated. Manual changes will be overwritten. + 'aldryn-addons', + 'aldryn-django', + # ' +] + +import aldryn_addons.settings +aldryn_addons.settings.load(locals()) + + +# all django settings can be altered here + +INSTALLED_APPS.extend([ + # add your project specific apps here +]) diff --git a/static/.empty b/static/.empty new file mode 100644 index 0000000..e69de29 diff --git a/templates/.empty b/templates/.empty new file mode 100644 index 0000000..e69de29 diff --git a/urls.py b/urls.py new file mode 100644 index 0000000..555f9db --- /dev/null +++ b/urls.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from django.conf.urls import url, include +from aldryn_django.utils import i18n_patterns +import aldryn_addons.urls + + +urlpatterns = [ + # add your own patterns here +] + aldryn_addons.urls.patterns() + i18n_patterns( + # add your own i18n patterns here + *aldryn_addons.urls.i18n_patterns() # MUST be the last entry! +) diff --git a/wsgi.py b/wsgi.py new file mode 100644 index 0000000..31702cc --- /dev/null +++ b/wsgi.py @@ -0,0 +1,5 @@ +import os +from aldryn_django import startup + + +application = startup.wsgi(path=os.path.dirname(__file__))