示例#1
0
    def test_url_pattern_fail(self):
        with self.assertRaises(ValueError) as cm:
            webapi.url_pattern('/open/{{ws/name}}')
        self.assertEqual(str(cm.exception), 'name in {{name}} must be a valid identifier, but got "ws/name"')

        with self.assertRaises(ValueError) as cm:
            webapi.url_pattern('/info/{{id}')
        self.assertEqual(str(cm.exception), 'no matching "}}" after "{{" in "/info/{{id}"')
示例#2
0
    def test_url_pattern_fail(self):
        with self.assertRaises(ValueError) as cm:
            webapi.url_pattern('/open/{{ws/name}}')
        self.assertEqual(str(cm.exception), 'name in {{name}} must be a valid identifier, but got "ws/name"')

        with self.assertRaises(ValueError) as cm:
            webapi.url_pattern('/info/{{id}')
        self.assertEqual(str(cm.exception), 'no matching "}}" after "{{" in "/info/{{id}"')
示例#3
0
 def test_url_pattern_ok(self):
     self.assertEqual(webapi.url_pattern('/version'),
                      '/version')
     self.assertEqual(webapi.url_pattern('{{num}}/get'),
                      '(?P<num>[^\;\/\?\:\@\&\=\+\$\,]+)/get')
     self.assertEqual(webapi.url_pattern('/open/{{ws_name}}'),
                      '/open/(?P<ws_name>[^\;\/\?\:\@\&\=\+\$\,]+)')
     self.assertEqual(webapi.url_pattern('/open/ws{{id1}}/wf{{id2}}'),
                      '/open/ws(?P<id1>[^\;\/\?\:\@\&\=\+\$\,]+)/wf(?P<id2>[^\;\/\?\:\@\&\=\+\$\,]+)')
示例#4
0
def create_application():
    application = Application([
        (url_pattern('/'), WebAPIVersionHandler),
        (url_pattern('/exit'), WebAPIExitHandler),
        (url_pattern('/app'), JsonRcpWebSocketHandler,
         dict(service_factory=service_factory,
              report_defer_period=WEBAPI_PROGRESS_DEFER_PERIOD)),
    ])
    application.workspace_manager = WorkspaceManager()
    return application
示例#5
0
 def test_url_pattern_ok(self):
     name_chars_pattern = "[^\\;\\/\\?\\:\\@\\&\\=\\+\\$\\,]+"
     self.assertEqual(webapi.url_pattern('/version'),
                      '/version')
     self.assertEqual(webapi.url_pattern('{{num}}/get'),
                      f'(?P<num>{name_chars_pattern})/get')
     self.assertEqual(webapi.url_pattern('/open/{{ws_name}}'),
                      f'/open/(?P<ws_name>{name_chars_pattern})')
     self.assertEqual(webapi.url_pattern('/open/ws{{id1}}/wf{{id2}}'),
                      f'/open/ws(?P<id1>{name_chars_pattern})/wf(?P<id2>{name_chars_pattern})')
示例#6
0
    def test_url_pattern_works(self):
        re_pattern = webapi.url_pattern('/open/{{id1}}ws/{{id2}}wf')
        matcher = re.fullmatch(re_pattern, '/open/34ws/a66wf')
        self.assertIsNotNone(matcher)
        self.assertEqual(matcher.groupdict(), {'id1': '34', 'id2': 'a66'})

        re_pattern = webapi.url_pattern('/open/ws{{id1}}/wf{{id2}}')
        matcher = re.fullmatch(re_pattern, '/open/ws34/wfa66')
        self.assertIsNotNone(matcher)
        self.assertEqual(matcher.groupdict(), {'id1': '34', 'id2': 'a66'})

        x = 'C%3A%5CUsers%5CNorman%5CIdeaProjects%5Cccitools%5Cect-core%5Ctest%5Cui%5CTEST_WS_3'
        re_pattern = webapi.url_pattern('/ws/{{base_dir}}/res/{{res_name}}/add')
        matcher = re.fullmatch(re_pattern, '/ws/%s/res/SST/add' % x)
        self.assertIsNotNone(matcher)
        self.assertEqual(matcher.groupdict(), {'base_dir': x, 'res_name': 'SST'})
示例#7
0
    def test_url_pattern_works(self):
        re_pattern = webapi.url_pattern('/open/{{id1}}ws/{{id2}}wf')
        matcher = re.fullmatch(re_pattern, '/open/34ws/a66wf')
        self.assertIsNotNone(matcher)
        self.assertEqual(matcher.groupdict(), {'id1': '34', 'id2': 'a66'})

        re_pattern = webapi.url_pattern('/open/ws{{id1}}/wf{{id2}}')
        matcher = re.fullmatch(re_pattern, '/open/ws34/wfa66')
        self.assertIsNotNone(matcher)
        self.assertEqual(matcher.groupdict(), {'id1': '34', 'id2': 'a66'})

        x = 'C%3A%5CUsers%5CNorman%5CIdeaProjects%5Cccitools%5Cect-core%5Ctest%5Cui%5CTEST_WS_3'
        re_pattern = webapi.url_pattern('/ws/{{base_dir}}/res/{{res_name}}/add')
        matcher = re.fullmatch(re_pattern, '/ws/%s/res/SST/add' % x)
        self.assertIsNotNone(matcher)
        self.assertEqual(matcher.groupdict(), {'base_dir': x, 'res_name': 'SST'})
示例#8
0
def create_application():
    application = Application([
        (url_pattern('/'), WebAPIVersionHandler),
        (url_pattern('/exit'), WebAPIExitHandler),
        (url_pattern('/app'), JsonRcpWebSocketHandler, dict(service_factory=service_factory,
                                                            report_defer_period=WEBAPI_PROGRESS_DEFER_PERIOD)),
        (url_pattern('/ws/new'), WorkspaceNewHandler),
        (url_pattern('/ws/get_open'), WorkspaceGetOpenHandler),
        (url_pattern('/ws/get/{{base_dir}}'), WorkspaceGetHandler),
        (url_pattern('/ws/open/{{base_dir}}'), WorkspaceOpenHandler),
        (url_pattern('/ws/close/{{base_dir}}'), WorkspaceCloseHandler),
        (url_pattern('/ws/close_all'), WorkspaceCloseAllHandler),
        (url_pattern('/ws/save/{{base_dir}}'), WorkspaceSaveHandler),
        (url_pattern('/ws/save_as/{{base_dir}}'), WorkspaceSaveAsHandler),
        (url_pattern('/ws/save_all'), WorkspaceSaveAllHandler),
        (url_pattern('/ws/del/{{base_dir}}'), WorkspaceDeleteHandler),
        (url_pattern('/ws/clean/{{base_dir}}'), WorkspaceCleanHandler),
        (url_pattern('/ws/run_op/{{base_dir}}'), WorkspaceRunOpHandler),
        (url_pattern('/ws/res/set/{{base_dir}}/{{res_name}}'), ResourceSetHandler),
        (url_pattern('/ws/res/del/{{base_dir}}/{{res_name}}'), ResourceDeleteHandler),
        (url_pattern('/ws/res/write/{{base_dir}}/{{res_name}}'), ResourceWriteHandler),
        (url_pattern('/ws/res/plot/{{base_dir}}/{{res_name}}'), ResourcePlotHandler),
        (url_pattern('/ws/res/print/{{base_dir}}'), ResourcePrintHandler),
        (url_pattern('/ws/countries/{{zoom}}'), CountriesGeoJSONHandler),
        (url_pattern('/ws/res/geojson/{{base_dir}}/{{res_name}}/{{zoom}}'), ResVarGeoJSONHandler),
        (url_pattern('/ws/res/tile/{{base_dir}}/{{res_name}}/{{z}}/{{y}}/{{x}}.png'), ResVarTileHandler),
        (url_pattern('/ws/ne2/tile/{{z}}/{{y}}/{{x}}.jpg'), NE2Handler),
    ])
    application.workspace_manager = FSWorkspaceManager()
    return application
示例#9
0
文件: start.py 项目: whigg/cate
def create_application(user_root_path: str = None):
    default_url_root = "/"
    # replace default url_root with /user/username/ if running in Cate Hub context.
    url_root = os.environ.get("JUPYTERHUB_SERVICE_PREFIX", default_url_root)
    if url_root is not default_url_root:
        print(f"warning: detected jupyterhub environment variable JUPYTERHUB_SERVICE_PREFIX "
              f"using {url_root} as default root url for the api.")

    application = Application([
        (url_root + '_static/(.*)', StaticFileHandler, {'path': FigureManagerWebAgg.get_static_file_path()}),
        (url_root + 'mpl.js', MplJavaScriptHandler),
        (url_pattern(url_root + 'mpl/download/{{base_dir}}/{{figure_id}}/{{format_name}}'), MplDownloadHandler),
        (url_pattern(url_root + 'mpl/figures/{{base_dir}}/{{figure_id}}'), MplWebSocketHandler),
        (url_pattern(url_root + 'files/upload'), FilesUploadHandler),
        (url_pattern(url_root + 'files/download'), FilesDownloadHandler),
        (url_pattern(url_root), WebAPIInfoHandler),
        (url_pattern(url_root + 'exit'), WebAPIExitHandler),
        (url_pattern(url_root + 'api'), JsonRpcWebSocketHandler, dict(
            service_factory=service_factory,
            validation_exception_class=ValidationError,
            report_defer_period=WEBAPI_PROGRESS_DEFER_PERIOD)
         ),
        (url_pattern(url_root + 'ws/res/plot/{{base_dir}}/{{res_name}}'), ResourcePlotHandler),
        (url_pattern(url_root + 'ws/res/geojson/{{base_dir}}/{{res_id}}'), ResFeatureCollectionHandler),
        (url_pattern(url_root + 'ws/res/geojson/{{base_dir}}/{{res_id}}/{{feature_index}}'), ResFeatureHandler),
        (url_pattern(url_root + 'ws/res/csv/{{base_dir}}/{{res_id}}'), ResVarCsvHandler),
        (url_pattern(url_root + 'ws/res/html/{{base_dir}}/{{res_id}}'), ResVarHtmlHandler),
        (url_pattern(url_root + 'ws/res/tile/{{base_dir}}/{{res_id}}/{{z}}/{{y}}/{{x}}.png'), ResVarTileHandler),
        (url_pattern(url_root + 'ws/ne2/tile/{{z}}/{{y}}/{{x}}.jpg'), NE2Handler),
        (url_pattern(url_root + 'ws/countries'), CountriesGeoJSONHandler),
    ])

    default_user_root_path = os.environ.get('CATE_USER_ROOT')
    if user_root_path is None:
        user_root_path = default_user_root_path
    elif default_user_root_path:
        print(f"warning: user root path given by environment variable CATE_USER_ROOT superseded by {user_root_path}")

    application.workspace_manager = FSWorkspaceManager(user_root_path)

    return application
示例#10
0
文件: start.py 项目: glsaltfish/cate
def create_application():
    application = Application([
        ('/_static/(.*)', StaticFileHandler, {
            'path': FigureManagerWebAgg.get_static_file_path()
        }),
        ('/mpl.js', MplJavaScriptHandler),
        (url_pattern(
            '/mpl/download/{{base_dir}}/{{figure_id}}/{{format_name}}'),
         MplDownloadHandler),
        (url_pattern('/mpl/figures/{{base_dir}}/{{figure_id}}'),
         MplWebSocketHandler),
        (url_pattern('/'), WebAPIVersionHandler),
        (url_pattern('/exit'), WebAPIExitHandler),
        (url_pattern('/api'), JsonRpcWebSocketHandler,
         dict(service_factory=service_factory,
              validation_exception_class=ValidationError,
              report_defer_period=WEBAPI_PROGRESS_DEFER_PERIOD)),
        (url_pattern('/ws/res/plot/{{base_dir}}/{{res_name}}'),
         ResourcePlotHandler),
        (url_pattern('/ws/res/geojson/{{base_dir}}/{{res_id}}'),
         ResFeatureCollectionHandler),
        (url_pattern(
            '/ws/res/geojson/{{base_dir}}/{{res_id}}/{{feature_index}}'),
         ResFeatureHandler),
        (url_pattern('/ws/res/csv/{{base_dir}}/{{res_id}}'), ResVarCsvHandler),
        (url_pattern('/ws/res/html/{{base_dir}}/{{res_id}}'),
         ResVarHtmlHandler),
        (url_pattern(
            '/ws/res/tile/{{base_dir}}/{{res_id}}/{{z}}/{{y}}/{{x}}.png'),
         ResVarTileHandler),
        (url_pattern('/ws/ne2/tile/{{z}}/{{y}}/{{x}}.jpg'), NE2Handler),
        (url_pattern('/ws/countries'), CountriesGeoJSONHandler),
    ])
    application.workspace_manager = FSWorkspaceManager()
    return application
示例#11
0
def create_application():
    application = Application([
        ('/_static/(.*)', StaticFileHandler, {'path': FigureManagerWebAgg.get_static_file_path()}),
        ('/mpl.js', MplJavaScriptHandler),

        (url_pattern('/mpl/download/{{base_dir}}/{{figure_id}}/{{format_name}}'), MplDownloadHandler),
        (url_pattern('/mpl/figures/{{base_dir}}/{{figure_id}}'), MplWebSocketHandler),

        (url_pattern('/'), WebAPIVersionHandler),
        (url_pattern('/exit'), WebAPIExitHandler),
        (url_pattern('/api'), JsonRpcWebSocketHandler, dict(
            service_factory=service_factory,
            validation_exception_class=ValidationError,
            report_defer_period=WEBAPI_PROGRESS_DEFER_PERIOD)
         ),
        (url_pattern('/ws/res/plot/{{base_dir}}/{{res_name}}'), ResourcePlotHandler),
        (url_pattern('/ws/res/geojson/{{base_dir}}/{{res_id}}'), ResFeatureCollectionHandler),
        (url_pattern('/ws/res/geojson/{{base_dir}}/{{res_id}}/{{feature_index}}'), ResFeatureHandler),
        (url_pattern('/ws/res/csv/{{base_dir}}/{{res_id}}'), ResVarCsvHandler),
        (url_pattern('/ws/res/html/{{base_dir}}/{{res_id}}'), ResVarHtmlHandler),
        (url_pattern('/ws/res/tile/{{base_dir}}/{{res_id}}/{{z}}/{{y}}/{{x}}.png'), ResVarTileHandler),
        (url_pattern('/ws/ne2/tile/{{z}}/{{y}}/{{x}}.jpg'), NE2Handler),
        (url_pattern('/ws/countries'), CountriesGeoJSONHandler),
    ])
    application.workspace_manager = FSWorkspaceManager()
    return application