Beispiel #1
0
def load_apps(APPS_DIR):
    with lock:
        from cartoview.apps_handler.utils import create_apps_dir
        from cartoview.apps_handler.config import CartoviewApp
        global CARTOVIEW_APPS
        global APPS_SETTINGS
        create_apps_dir(APPS_DIR)
        if APPS_DIR not in sys.path:
            sys.path.append(APPS_DIR)
        logger.info("Loading Cartoview Apps.....")
        CartoviewApp.apps_dir = APPS_DIR
        CartoviewApp.load()
        for app in CartoviewApp.objects.values():
            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(
                        "Append {} libs folder to the system path.\n".format(
                            app.name))
                    sys.path.append(libs_dir)
                logger.info("add {} to django 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)
                logger.error(e)
Beispiel #2
0
 def execute_pending(self):
     from cartoview.apps_handler.config import CartoviewApp
     CartoviewApp.load()
     pending_apps = CartoviewApp.objects.get_pending_apps().values()
     for app in pending_apps:
         _pending_apps = self.get_pending_apps(app.name)
         if _pending_apps:
             for _app in _pending_apps:
                 _app_name = _app.get('name', None)
                 _make_migrations = _app.get('makemigrations', False)
                 _migrate = _app.get('migrate', False)
                 if _app_name:
                     if _make_migrations:
                         self.makemigrations(_app_name)
                     if _migrate:
                         self.migrate(_app_name)
         else:
             self.migrate(app)
         self.collectstatic()
         carto_app = CartoviewApp.objects.get(app.name)
         carto_app.pending = False
         carto_app.commit()
         CartoviewApp.save()