Add platform template environment support
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
import yaml
|
||||
try:
|
||||
from yaml import CSafeLoader as SafeLoader
|
||||
@@ -13,12 +15,25 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from mayan.apps.task_manager.classes import Worker
|
||||
|
||||
|
||||
class Variable(object):
|
||||
def __init__(self, name, default, environment_name):
|
||||
self.name = name
|
||||
self.default = default
|
||||
self.environment_name = environment_name
|
||||
|
||||
def get_value(self):
|
||||
return os.environ.get(self.environment_name, self.default)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class PlatformTemplate(object):
|
||||
_registry = {}
|
||||
context = {}
|
||||
context_defaults = {}
|
||||
label = None
|
||||
settings = None
|
||||
template_name = None
|
||||
variables = None
|
||||
|
||||
@classmethod
|
||||
def all(cls):
|
||||
@@ -38,14 +53,42 @@ class PlatformTemplate(object):
|
||||
def get_context(self):
|
||||
return self.context
|
||||
|
||||
def get_context_defaults(self):
|
||||
return self.context_defaults
|
||||
|
||||
def get_label(self):
|
||||
return self.label or self.name
|
||||
|
||||
def get_settings_context(self):
|
||||
result = {}
|
||||
for setting in self.settings or ():
|
||||
if setting.value:
|
||||
result[setting.global_name] = setting.value
|
||||
|
||||
return result
|
||||
|
||||
def get_template_name(self):
|
||||
return self.template_name or 'platform/{}.tmpl'.format(self.name)
|
||||
|
||||
def get_variables_context(self):
|
||||
result = {}
|
||||
for variable in self.variables or ():
|
||||
result[variable.name] = variable.get_value()
|
||||
|
||||
return result
|
||||
|
||||
def render(self, context_string=None):
|
||||
context = self.get_context()
|
||||
"""
|
||||
context_string allows the management command to pass context to this
|
||||
method as a JSON string
|
||||
"""
|
||||
context = {}
|
||||
|
||||
context.update(self.get_context_defaults())
|
||||
context.update(self.get_settings_context())
|
||||
context.update(self.get_variables_context())
|
||||
# get_context goes last to server as the override
|
||||
context.update(self.get_context())
|
||||
|
||||
if context_string:
|
||||
context.update(
|
||||
@@ -59,23 +102,61 @@ class PlatformTemplate(object):
|
||||
)
|
||||
|
||||
|
||||
from mayan.apps.common.settings import (
|
||||
setting_celery_broker_url, setting_celery_result_backend
|
||||
)
|
||||
|
||||
class PlatformTemplateSupervisord(PlatformTemplate):
|
||||
context_defaults = {
|
||||
'BROKER_URL': 'redis://127.0.0.1:6379/0',
|
||||
'CELERY_RESULT_BACKEND': 'redis://127.0.0.1:6379/0',
|
||||
}
|
||||
label = _('Template for Supervisord.')
|
||||
name = 'supervisord'
|
||||
settings = (
|
||||
setting_celery_broker_url, setting_celery_result_backend
|
||||
)
|
||||
variables = (
|
||||
Variable(
|
||||
name='GUNICORN_WORKERS', default=2,
|
||||
environment_name='MAYAN_GUNICORN_WORKERS'
|
||||
),
|
||||
Variable(
|
||||
name='DATABASE_CONN_MAX_AGE', default=60,
|
||||
environment_name='MAYAN_DATABASE_CONN_MAX_AGE'
|
||||
),
|
||||
Variable(
|
||||
name='DATABASE_ENGINE', default='django.db.backends.postgresql',
|
||||
environment_name='MAYAN_DATABASE_ENGINE'
|
||||
),
|
||||
Variable(
|
||||
name='DATABASE_HOST', default='127.0.0.1',
|
||||
environment_name='MAYAN_DATABASE_HOST'
|
||||
),
|
||||
Variable(
|
||||
name='DATABASE_NAME', default='mayan',
|
||||
environment_name='MAYAN_DATABASE_NAME'
|
||||
),
|
||||
Variable(
|
||||
name='DATABASE_PASSWORD', default='mayanuserpass',
|
||||
environment_name='MAYAN_DATABASE_PASSWORD'
|
||||
),
|
||||
Variable(
|
||||
name='DATABASE_USER', default='mayan',
|
||||
environment_name='MAYAN_DATABASE_USER'
|
||||
),
|
||||
Variable(
|
||||
name='INSTALLATION_PATH', default='/opt/mayan-edms',
|
||||
environment_name='MAYAN_INSTALLATION_PATH'
|
||||
),
|
||||
Variable(
|
||||
name='MEDIA_ROOT', default='/opt/mayan-edms/media',
|
||||
environment_name='MAYAN_MEDIA_ROOT'
|
||||
),
|
||||
)
|
||||
|
||||
def get_context(self):
|
||||
return {
|
||||
'gunicorn_workers': 2,
|
||||
'result_backend': 'redis://127.0.0.1:6379/0',
|
||||
'broker_url': 'redis://127.0.0.1:6379/0',
|
||||
'database_conn_max_age': 60,
|
||||
'database_engine': 'django.db.backends.postgresql',
|
||||
'database_host': '127.0.0.1',
|
||||
'database_name': 'mayan',
|
||||
'database_password': 'mayanuserpass',
|
||||
'database_user': 'mayan',
|
||||
'installation_path': '/opt/mayan-edms',
|
||||
'media_root': '/opt/mayan-edms/media',
|
||||
'workers': Worker.all()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user