コード例 #1
0
def get_data_adaptor(url_dataroot=None, dataset=None):
    config = current_app.app_config
    server_config = config.server_config
    dataset_key = None

    if dataset is None:
        datapath = server_config.single_dataset__datapath
    else:
        dataroot = None
        for key, dataroot_dict in server_config.multi_dataset__dataroot.items(
        ):
            if dataroot_dict["base_url"] == url_dataroot:
                dataroot = dataroot_dict["dataroot"]
                dataset_key = key
                break

        if dataroot is None:
            raise DatasetAccessError(
                f"Invalid dataset {url_dataroot}/{dataset}")
        datapath = path_join(dataroot, dataset)
        # path_join returns a normalized path.  Therefore it is
        # sufficient to check that the datapath starts with the
        # dataroot to determine that the datapath is under the dataroot.
        if not datapath.startswith(dataroot):
            raise DatasetAccessError(
                f"Invalid dataset {url_dataroot}/{dataset}")

    if datapath is None:
        return common_rest.abort_and_log(HTTPStatus.BAD_REQUEST,
                                         "Invalid dataset NONE",
                                         loglevel=logging.INFO)

    cache_manager = current_app.matrix_data_cache_manager
    return cache_manager.data_adaptor(dataset_key, datapath, config)
コード例 #2
0
ファイル: app.py プロジェクト: chanzuckerberg/cellxgene
 def wrapped_function(self):
     try:
         return func(self, current_app.data_adaptor)
     except DatasetAccessError as e:
         return common_rest.abort_and_log(e.status_code,
                                          f"Invalid dataset: {e.message}",
                                          loglevel=logging.INFO,
                                          include_exc_info=True)
コード例 #3
0
ファイル: app.py プロジェクト: lzlgboy/cellxgene
 def wrapped_function(self, dataset=None):
     try:
         with get_data_adaptor(dataset) as data_adaptor:
             return func(self, data_adaptor)
     except DatasetAccessError:
         return common_rest.abort_and_log(HTTPStatus.BAD_REQUEST,
                                          f"Invalid dataset {dataset}",
                                          loglevel=logging.INFO,
                                          include_exc_info=True)
コード例 #4
0
ファイル: app.py プロジェクト: saeedseyyedi/cellxgene
 def wrapped_function(self, dataset=None):
     try:
         with get_data_adaptor(self.url_dataroot, dataset) as data_adaptor:
             return func(self, data_adaptor)
     except DatasetAccessError as e:
         return common_rest.abort_and_log(
             e.status_code,
             f"Invalid dataset {dataset}: {e.message}",
             loglevel=logging.INFO,
             include_exc_info=True)
コード例 #5
0
ファイル: app.py プロジェクト: chanzuckerberg/cellxgene
def dataset_index():
    app_config = current_app.app_config

    dataset_config = app_config.get_dataset_config()
    scripts = dataset_config.app__scripts
    inline_scripts = dataset_config.app__inline_scripts

    try:
        args = {"SCRIPTS": scripts, "INLINE_SCRIPTS": inline_scripts}
        return render_template("index.html", **args)

    except DatasetAccessError as e:
        return common_rest.abort_and_log(e.status_code,
                                         f"Invalid dataset: {e.message}",
                                         loglevel=logging.INFO,
                                         include_exc_info=True)
コード例 #6
0
ファイル: app.py プロジェクト: lzlgboy/cellxgene
def get_data_adaptor(dataset=None):
    config = current_app.app_config

    if dataset is None:
        datapath = config.single_dataset__datapath
    else:
        datapath = path_join(config.multi_dataset__dataroot, dataset)
        # path_join returns a normalized path.  Therefore it is
        # sufficient to check that the datapath starts with the
        # dataroot to determine that the datapath is under the dataroot.
        if not datapath.startswith(config.multi_dataset__dataroot):
            raise DatasetAccessError("Invalid dataset {dataset}")

    if datapath is None:
        return common_rest.abort_and_log(HTTPStatus.BAD_REQUEST,
                                         f"Invalid dataset NONE",
                                         loglevel=logging.INFO)

    cache_manager = current_app.matrix_data_cache_manager
    return cache_manager.data_adaptor(datapath, config)
コード例 #7
0
ファイル: app.py プロジェクト: ElucidataInc/cellxgene
def dataset_index(url_dataroot=None, dataset=None):
    app_config = current_app.app_config
    server_config = app_config.server_config
    if dataset is None:
        if app_config.is_multi_dataset():
            return dataroot_index()
        else:
            location = server_config.single_dataset__datapath
    else:
        dataroot = None
        for key, dataroot_dict in server_config.multi_dataset__dataroot.items(
        ):
            if dataroot_dict["base_url"] == url_dataroot:
                dataroot = dataroot_dict["dataroot"]
                break
        if dataroot is None:
            abort(HTTPStatus.NOT_FOUND)
        location = path_join(dataroot, dataset)

    dataset_config = app_config.get_dataset_config(url_dataroot)
    scripts = dataset_config.app__scripts
    inline_scripts = dataset_config.app__inline_scripts

    try:
        cache_manager = current_app.matrix_data_cache_manager
        with cache_manager.data_adaptor(url_dataroot, location,
                                        app_config) as data_adaptor:
            data_adaptor.set_uri_path(f"{url_dataroot}/{dataset}")
            dataset_title = app_config.get_title(data_adaptor)
            return render_template("index.html",
                                   datasetTitle=dataset_title,
                                   SCRIPTS=scripts,
                                   INLINE_SCRIPTS=inline_scripts)
    except DatasetAccessError as e:
        return common_rest.abort_and_log(
            e.status_code,
            f"Invalid dataset {dataset}: {e.message}",
            loglevel=logging.INFO,
            include_exc_info=True)
コード例 #8
0
ファイル: app.py プロジェクト: lzlgboy/cellxgene
def dataset_index(dataset=None):
    config = current_app.app_config
    if dataset is None:
        if config.single_dataset__datapath:
            location = config.single_dataset__datapath
        else:
            return dataroot_index()
    else:
        location = path_join(config.multi_dataset__dataroot, dataset)

    scripts = config.server__scripts

    try:
        cache_manager = current_app.matrix_data_cache_manager
        with cache_manager.data_adaptor(location, config) as data_adaptor:
            dataset_title = config.get_title(data_adaptor)
            return render_template("index.html",
                                   datasetTitle=dataset_title,
                                   SCRIPTS=scripts)
    except DatasetAccessError:
        return common_rest.abort_and_log(HTTPStatus.BAD_REQUEST,
                                         f"Invalid dataset {dataset}",
                                         loglevel=logging.INFO,
                                         include_exc_info=True)
コード例 #9
0
def handle_request_exception(error):
    return common_rest.abort_and_log(error.status_code,
                                     error.message,
                                     loglevel=logging.INFO,
                                     include_exc_info=True)