Skip to content
Snippets Groups Projects
Select Git revision
  • 8ab3f95bcbf076bcd4a7604e0a6c38d3b420fbd6
  • master default protected
  • enxhi_issue460_remove_TOAR-I_access
  • michael_issue459_preprocess_german_stations
  • sh_pollutants
  • develop protected
  • release_v2.4.0
  • michael_issue450_feat_load-ifs-data
  • lukas_issue457_feat_set-config-paths-as-parameter
  • lukas_issue454_feat_use-toar-statistics-api-v2
  • lukas_issue453_refac_advanced-retry-strategy
  • lukas_issue452_bug_update-proj-version
  • lukas_issue449_refac_load-era5-data-from-toar-db
  • lukas_issue451_feat_robust-apriori-estimate-for-short-timeseries
  • lukas_issue448_feat_load-model-from-path
  • lukas_issue447_feat_store-and-load-local-clim-apriori-data
  • lukas_issue445_feat_data-insight-plot-monthly-distribution
  • lukas_issue442_feat_bias-free-evaluation
  • lukas_issue444_feat_choose-interp-method-cams
  • 414-include-crps-analysis-and-other-ens-verif-methods-or-plots
  • lukas_issue384_feat_aqw-data-handler
  • v2.4.0 protected
  • v2.3.0 protected
  • v2.2.0 protected
  • v2.1.0 protected
  • Kleinert_etal_2022_initial_submission
  • v2.0.0 protected
  • v1.5.0 protected
  • v1.4.0 protected
  • v1.3.0 protected
  • v1.2.1 protected
  • v1.2.0 protected
  • v1.1.0 protected
  • IntelliO3-ts-v1.0_R1-submit
  • v1.0.0 protected
  • v0.12.2 protected
  • v0.12.1 protected
  • v0.12.0 protected
  • v0.11.0 protected
  • v0.10.0 protected
  • IntelliO3-ts-v1.0_initial-submit
41 results

training.py

Blame
  • api_setup_tunnel.py 3.11 KiB
    import asyncio
    import datetime
    import json
    import os
    
    from jupyterhub.apihandlers import default_handlers
    from jupyterhub.apihandlers.base import APIHandler
    from jupyterhub.scopes import needs_scope
    from tornado import web
    from tornado.httpclient import HTTPRequest
    
    
    class SetupTunnelAPIHandler(APIHandler):
        @needs_scope("access:servers")
        async def post(self, user_name, server_name=""):
            self.set_header("Cache-Control", "no-cache")
            if server_name is None:
                server_name = ""
            user = self.find_user(user_name)
            if user is None:
                # no such user
                raise web.HTTPError(404)
            if server_name not in user.spawners:
                # user has no such server
                raise web.HTTPError(404)
            body = self.request.body.decode("utf8")
            json_body = json.loads(body) if body else {}
    
            user = self.find_user(user_name)
            spawner = user.spawners[server_name]
    
            if spawner._stop_pending:
                self.log.debug(
                    "APICall: SetupTunnel - but spawner is already stopping.",
                    extra={
                        "log_name": spawner._log_name,
                        "user": user_name,
                        "action": "setuptunnel",
                        "event": json_body,
                    },
                )
                self.set_header("Content-Type", "text/plain")
                self.write("Bad Request.")
                self.set_status(400)
                return
    
            if json_body:
                self.log.debug(
                    "APICall: SetupTunnel",
                    extra={
                        "log_name": spawner._log_name,
                        "user": user_name,
                        "action": "setuptunnel",
                        "event": json_body,
                    },
                )
                try:
                    spawner.port_forward_info = json_body
                    await spawner.run_ssh_forward()
                except Exception as e:
                    now = datetime.datetime.now().strftime("%Y_%m_%d %H:%M:%S.%f")[:-3]
                    failed_event = {
                        "progress": 100,
                        "failed": True,
                        "html_message": f"<details><summary>{now}: Could not setup tunnel</summary>{str(e)}</details>",
                    }
                    self.log.exception(
                        f"Could not setup tunnel for {user_name}:{server_name}",
                        extra={
                            "log_name": spawner._log_name,
                            "user": user_name,
                            "action": "tunnelfailed",
                            "event": failed_event,
                        },
                    )
                    asyncio.create_task(spawner.stop(cancel=True, event=failed_event))
                self.set_header("Content-Type", "text/plain")
                self.set_status(204)
                return
            else:
                self.set_header("Content-Type", "text/plain")
                self.write("Bad Request.")
                self.set_status(400)
                return
    
    
    default_handlers.append((r"/api/users/setuptunnel/([^/]+)", SetupTunnelAPIHandler))
    default_handlers.append(
        (r"/api/users/setuptunnel/([^/]+)/([^/]+)", SetupTunnelAPIHandler)
    )