#!/usr/bin/env python
# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved. #
# This file is part of the AiiDA code. #
# #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file #
# For further information please visit http://www.aiida.net #
###########################################################################
import getpass
import os
import aiida
import aiida.common.setup as setup
[docs]class Migration(object):
"""
This class converts the configuration from the AiiDA version with one
backend (Django) as it is described in commit e048939 (version to to the implementation
that supports DJango and SQLAlchemy.
It is assumed that it is already (correctly) defined the place that the
various configuration files are found in the aiida.common.setup.
"""
DAEMON_CONF_FILE = "aiida_daemon.conf"
# The default umask for file creation under AIIDA_CONFIG_FOLDER
DEFAULT_UMASK = 0077
[docs] def __init__(self):
# Profile key
self._profiles_key = "profiles"
[docs] def install_daemon_files(self, aiida_dir, daemon_dir, log_dir, local_user):
"""
Install the files needed to run the daemon.
"""
daemon_conf = """
[unix_http_server]
file={daemon_dir}/supervisord.sock ; (the path to the socket file)
[supervisord]
logfile={log_dir}/supervisord.log
logfile_maxbytes=10MB
logfile_backups=2
loglevel=info
pidfile={daemon_dir}/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///{daemon_dir}/supervisord.sock
;=======================================
; Main AiiDA Daemon
;=======================================
[program:aiida-daemon]
command=python "{aiida_module_dir}/backends/djsite/manage.py" --aiida-process=daemon celeryd --loglevel=INFO
directory={daemon_dir}
user={local_user}
numprocs=1
stdout_logfile={log_dir}/aiida_daemon.log
stderr_logfile={log_dir}/aiida_daemon.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=30
process_name=%(process_num)s
; ==========================================
; AiiDA Deamon BEAT - for scheduled tasks
; ==========================================
[program:aiida-daemon-beat]
command=python "{aiida_module_dir}/backends/djsite/manage.py" --aiida-process=daemon celerybeat
directory={daemon_dir}
user={local_user}
numprocs=1
stdout_logfile={log_dir}/aiida_daemon_beat.log
stderr_logfile={log_dir}/aiida_daemon_beat.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 30
process_name=%(process_num)s
"""
old_umask = os.umask(self.DEFAULT_UMASK)
try:
with open(os.path.join(aiida_dir, daemon_dir, self.DAEMON_CONF_FILE),
"w") as f:
f.write(
daemon_conf.format(daemon_dir=daemon_dir, log_dir=log_dir,
local_user=local_user,
aiida_module_dir=
os.path.split(os.path.abspath(
aiida.__file__))[0]))
finally:
os.umask(old_umask)
[docs] def adding_backend(self):
"""
Gets the main AiiDA configuration and searches if there is a backend
defined. If there isn't any then Django is added.
"""
# Get the available configuration
conf = setup.get_config()
# Identifying all the available profiles
if self._profiles_key in conf.keys():
profiles = conf[self._profiles_key]
p_keys = profiles.keys()
# For every profile
for p_key in p_keys:
# get the
curr_profile = profiles[p_key]
# Check if there is a specific backend in the profile
# and if not, add Django as backend
if setup.aiidadb_backend_key not in curr_profile.keys():
curr_profile[setup.aiidadb_backend_key] = \
setup.aiidadb_backend_value_django
# Returning the configuration
return conf
if __name__ == '__main__':
Migration().perform_migration()
print("Migration finished.")