MCPcopy
hub / github.com/cli/cli / Jupyter

Method Jupyter

pkg/cmd/codespace/jupyter.go:32–105  ·  view source on GitHub ↗
(ctx context.Context, selector *CodespaceSelector)

Source from the content-addressed store, hash-verified

30}
31
32func (a *App) Jupyter(ctx context.Context, selector *CodespaceSelector) (err error) {
33 // Ensure all child tasks (e.g. port forwarding) terminate before return.
34 ctx, cancel := context.WithCancel(ctx)
35 defer cancel()
36
37 codespace, err := selector.Select(ctx)
38 if err != nil {
39 return err
40 }
41
42 codespaceConnection, err := codespaces.GetCodespaceConnection(ctx, a, a.apiClient, codespace)
43 if err != nil {
44 return fmt.Errorf("error connecting to codespace: %w", err)
45 }
46
47 fwd, err := portforwarder.NewPortForwarder(ctx, codespaceConnection)
48 if err != nil {
49 return fmt.Errorf("failed to create port forwarder: %w", err)
50 }
51 defer safeClose(fwd, &err)
52
53 var (
54 invoker rpc.Invoker
55 serverPort int
56 serverUrl string
57 )
58 err = a.RunWithProgress("Starting JupyterLab on codespace", func() (err error) {
59 invoker, err = rpc.CreateInvoker(ctx, fwd)
60 if err != nil {
61 return
62 }
63
64 serverPort, serverUrl, err = invoker.StartJupyterServer(ctx)
65 return
66 })
67 if invoker != nil {
68 defer safeClose(invoker, &err)
69 }
70 if err != nil {
71 return err
72 }
73
74 // Pass 0 to pick a random port
75 listen, _, err := codespaces.ListenTCP(0, false)
76 if err != nil {
77 return err
78 }
79 defer listen.Close()
80 destPort := listen.Addr().(*net.TCPAddr).Port
81
82 tunnelClosed := make(chan error, 1)
83 go func() {
84 opts := portforwarder.ForwardPortOpts{
85 Port: serverPort,
86 }
87 tunnelClosed <- fwd.ForwardPortToListener(ctx, opts, listen)
88 }()
89

Callers 1

newJupyterCmdFunction · 0.80

Calls 14

RunWithProgressMethod · 0.95
ForwardPortToListenerMethod · 0.95
GetCodespaceConnectionFunction · 0.92
NewPortForwarderFunction · 0.92
CreateInvokerFunction · 0.92
ListenTCPFunction · 0.92
ReplaceMethod · 0.80
safeCloseFunction · 0.70
SelectMethod · 0.65
ErrorfMethod · 0.65
StartJupyterServerMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected