Skip to content

Commit

Permalink
lock load_apps
Browse files Browse the repository at this point in the history
  • Loading branch information
hisham waleed karam committed Jan 27, 2019
1 parent 1aadbe3 commit 5675e9e
Showing 1 changed file with 43 additions and 40 deletions.
83 changes: 43 additions & 40 deletions cartoview/app_manager/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import importlib
import os
import sys
import threading

from future import standard_library

from cartoview.log_handler import get_logger

logger = get_logger(__name__, with_formatter=True)

lock = threading.RLock()
standard_library.install_aliases()

# BASE_DIR must be defined in project.settings
Expand All @@ -20,42 +22,43 @@


def load_apps(APPS_DIR):
from cartoview.apps_handler.utils import create_apps_dir
from cartoview.apps_handler.handlers import CartoApps, apps_orm
global CARTOVIEW_APPS
global APPS_SETTINGS
create_apps_dir(APPS_DIR)
if APPS_DIR not in sys.path:
sys.path.append(APPS_DIR)
# apps_file_path = os.path.join(APPS_DIR, "apps.yml")
# apps_config = AppsConfig(apps_file_path)
logger.info("Loading Cartoview Apps.....")
with apps_orm.session() as session:
carto_apps = session.query(CartoApps).filter(
CartoApps.active == True).all()
for app in carto_apps:
try:
logger.info("Check if {} Healthy.\n".format(app.name))
# ensure that the folder is python module
app_module = importlib.import_module(app.name)
app_dir = os.path.dirname(app_module.__file__)
app_settings_file = os.path.join(app_dir, 'settings.py')
libs_dir = os.path.join(app_dir, 'libs')
if os.path.exists(app_settings_file):
# By doing this instead of import, app/settings.py can
# refer to local variables from settings.py without
# circular imports.
app_settings_file = os.path.realpath(app_settings_file)
APPS_SETTINGS += (app_settings_file, )
if os.path.exists(libs_dir) and libs_dir not in sys.path:
logger.info("Install {} libs folder to the system.\n".format(
app.name))
sys.path.append(libs_dir)
logger.info("add {} to INSTALLED_APPS.\n".format(app.name))
if app.name not in CARTOVIEW_APPS:
# app_config.name.__str__() because Django don't like
# unicode_literals
CARTOVIEW_APPS += (app.name.__str__(), )
except Exception as e:
print(e.message)
logger.error(e.message)
with lock:
from cartoview.apps_handler.utils import create_apps_dir
from cartoview.apps_handler.handlers import CartoApps, apps_orm
global CARTOVIEW_APPS
global APPS_SETTINGS
create_apps_dir(APPS_DIR)
if APPS_DIR not in sys.path:
sys.path.append(APPS_DIR)
# apps_file_path = os.path.join(APPS_DIR, "apps.yml")
# apps_config = AppsConfig(apps_file_path)
logger.info("Loading Cartoview Apps.....")
with apps_orm.session() as session:
carto_apps = session.query(CartoApps).filter(
CartoApps.active == True).all()
for app in carto_apps:
try:
logger.info("Check if {} Healthy.\n".format(app.name))
# ensure that the folder is python module
app_module = importlib.import_module(app.name)
app_dir = os.path.dirname(app_module.__file__)
app_settings_file = os.path.join(app_dir, 'settings.py')
libs_dir = os.path.join(app_dir, 'libs')
if os.path.exists(app_settings_file):
# By doing this instead of import, app/settings.py can
# refer to local variables from settings.py without
# circular imports.
app_settings_file = os.path.realpath(app_settings_file)
APPS_SETTINGS += (app_settings_file, )
if os.path.exists(libs_dir) and libs_dir not in sys.path:
logger.info("Install {} libs folder to the system.\n"
.format(app.name))
sys.path.append(libs_dir)
logger.info("add {} to INSTALLED_APPS.\n".format(app.name))
if app.name not in CARTOVIEW_APPS:
# app_config.name.__str__() because Django don't like
# unicode_literals
CARTOVIEW_APPS += (app.name.__str__(), )
except Exception as e:
print(e.message)
logger.error(e.message)

0 comments on commit 5675e9e

Please sign in to comment.