def run(self,
            entity_name=None,
            path=None,
            sample_data=False,
            force=False,
            init_index_only=False):
        """Run the initialization

        :param str,list,NoneType entity_name: entity(ies) to initialize
        :param str,NoneType path: path of the file to import
        :param bool sample_data: True if sample data need to be used
        :param bool force: if True, update item even if it has been modified by user
        :param bool init_index_only: if True, it only initializes index only
        """
        logger.info('Starting data initialization')
        logger.info('Config: %s', app.config['APP_ABSPATH'])

        # create indexes in mongo
        app.init_indexes()
        # put mapping to elastic
        app.data.init_elastic(app)

        if init_index_only:
            logger.info('Only indexes initialized.')
            return 0

        if sample_data:
            if not path:
                path = INIT_DATA_PATH.parent / 'data_sample'
            else:
                raise ValueError(
                    'path and sample_data should not be set at the same time')

        if entity_name:
            if isinstance(entity_name, str):
                entity_name = [entity_name]
            for name in entity_name:
                (file_name, index_params, do_patch) = __entities__[name]
                self.import_file(name, path, file_name, index_params, do_patch,
                                 force)
            return 0

        for name, (file_name, index_params, do_patch) in __entities__.items():
            try:
                self.import_file(name, path, file_name, index_params, do_patch,
                                 force)
            except KeyError:
                continue
            except Exception as ex:
                logger.exception(ex)
                logger.info('Exception loading entity {} from {}'.format(
                    name, file_name))

        logger.info('Data import finished')
        return 0
    def run(self, entity_name=None, path=None, sample_data=False, force=False, init_index_only=False):
        """Run the initialization

        :param str,list,NoneType entity_name: entity(ies) to initialize
        :param str,NoneType path: path of the file to import
        :param bool sample_data: True if sample data need to be used
        :param bool force: if True, update item even if it has been modified by user
        :param bool init_index_only: if True, it only initializes index only
        """
        logger.info('Starting data initialization')
        logger.info('Config: %s', app.config['APP_ABSPATH'])

        # create indexes in mongo
        app.init_indexes()
        # put mapping to elastic
        app.data.init_elastic(app)

        if init_index_only:
            logger.info('Only indexes initialized.')
            return 0

        if sample_data:
            if not path:
                path = INIT_DATA_PATH.parent / 'data_sample'
            else:
                raise ValueError('path and sample_data should not be set at the same time')

        if entity_name:
            if isinstance(entity_name, str):
                entity_name = [entity_name]
            for name in entity_name:
                (file_name, index_params, do_patch) = __entities__[name]
                self.import_file(name, path, file_name, index_params, do_patch, force)
            return 0

        for name, (file_name, index_params, do_patch) in __entities__.items():
            try:
                self.import_file(name, path, file_name, index_params, do_patch, force)
            except KeyError:
                continue
            except Exception as ex:
                logger.exception(ex)
                logger.info('Exception loading entity {} from {}'.format(name, file_name))

        logger.info('Data import finished')
        return 0
示例#3
0
    def _create(self, docs):
        for doc in docs:
            if doc.get("remove_first"):
                clean_dbs(app, force=True)

            app.init_indexes()
            app.data.init_elastic(app)

            get_resource_service("users").stop_updating_stage_visibility()

            user = get_resource_service("users").find_one(
                username=get_default_user()["username"], req=None)
            if not user:
                get_resource_service("users").post([get_default_user()])

            prepopulate_data(doc.get("profile") + ".json", get_default_user())

            get_resource_service("users").start_updating_stage_visibility()
            get_resource_service("users").update_stage_visibility_for_users()
    def run(self,
            entity_name=None,
            path=None,
            sample_data=False,
            force=False,
            init_index_only=False):
        """Run the initialization

        :param str,list,NoneType entity_name: entity(ies) to initialize
        :param str,NoneType path: path of the file to import
        :param bool sample_data: True if sample data need to be used
        :param bool force: if True, update item even if it has been modified by user
        :param bool init_index_only: if True, it only initializes index only
        """
        logger.info("Starting data initialization")
        logger.info("Config: %s", app.config["APP_ABSPATH"])

        # create indexes in mongo
        # We can safely ignore duplicate key errors as this only affects performance
        # As we want the rest of this command to still execute
        app.init_indexes(ignore_duplicate_keys=True)

        # put mapping to elastic
        try:
            app.data.init_elastic(app)
        except (elasticsearch.exceptions.TransportError) as err:
            logger.error(err)
            logger.warning(
                "Can't update the mapping, please run app:rebuild_elastic_index command."
            )

        if init_index_only:
            logger.info("Only indexes initialized.")
            return 0

        if sample_data:
            if not path:
                path = INIT_DATA_PATH.parent / "data_sample"
            else:
                raise ValueError(
                    "path and sample_data should not be set at the same time")

        if entity_name:
            if isinstance(entity_name, str):
                entity_name = [entity_name]
            for name in entity_name:
                (file_name, index_params, do_patch) = __entities__[name]
                self.import_file(name, path, file_name, index_params, do_patch,
                                 force)
            return 0

        for name, (file_name, index_params, do_patch) in __entities__.items():
            try:
                self.import_file(name, path, file_name, index_params, do_patch,
                                 force)
            except KeyError:
                continue
            except Exception as ex:
                logger.exception(ex)
                logger.info("Exception loading entity {} from {}".format(
                    name, file_name))

        logger.info("Data import finished")
        return 0