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}"')
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>[^\;\/\?\:\@\&\=\+\$\,]+)')
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
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})')
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'})
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
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
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
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