mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-09 21:16:26 +08:00
Update wording around dependencies and packages (#1151)
This commit is contained in:
parent
c85f11e0d1
commit
2a1d937189
17 changed files with 77 additions and 78 deletions
|
@ -339,8 +339,8 @@ const Session = {
|
||||||
this.toggleRuntimeInfo();
|
this.toggleRuntimeInfo();
|
||||||
} else if (keyBuffer.tryMatch(["s", "b"])) {
|
} else if (keyBuffer.tryMatch(["s", "b"])) {
|
||||||
this.showBin();
|
this.showBin();
|
||||||
} else if (keyBuffer.tryMatch(["s", "d"])) {
|
} else if (keyBuffer.tryMatch(["s", "p"])) {
|
||||||
this.showDependencySearch();
|
this.showPackageSearch();
|
||||||
} else if (keyBuffer.tryMatch(["e", "x"])) {
|
} else if (keyBuffer.tryMatch(["e", "x"])) {
|
||||||
this.cancelFocusedCellEvaluation();
|
this.cancelFocusedCellEvaluation();
|
||||||
} else if (keyBuffer.tryMatch(["0", "0"])) {
|
} else if (keyBuffer.tryMatch(["0", "0"])) {
|
||||||
|
@ -683,10 +683,10 @@ const Session = {
|
||||||
actionEl && actionEl.click();
|
actionEl && actionEl.click();
|
||||||
},
|
},
|
||||||
|
|
||||||
showDependencySearch() {
|
showPackageSearch() {
|
||||||
this.setFocusedEl("setup");
|
this.setFocusedEl("setup");
|
||||||
|
|
||||||
const actionEl = this.el.querySelector(`[data-btn-dependency-search]`);
|
const actionEl = this.el.querySelector(`[data-btn-package-search]`);
|
||||||
actionEl && actionEl.click();
|
actionEl && actionEl.click();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -19,12 +19,12 @@ defmodule Livebook do
|
||||||
|
|
||||||
### Embedded runtime dependencies
|
### Embedded runtime dependencies
|
||||||
|
|
||||||
In case you use the Embedded runtime and support installing dependencies
|
In case you use the Embedded runtime and support installing
|
||||||
with `Mix.install/2`, you can make those discoverable in the
|
dependencies with `Mix.install/2`, you can make those discoverable
|
||||||
dependency search, by configuring a loader function:
|
in the package search, by configuring a loader function:
|
||||||
|
|
||||||
config :livebook, Livebook.Runtime.Embedded,
|
config :livebook, Livebook.Runtime.Embedded,
|
||||||
load_dependency_entries: {Loader, :dependency_entries, []}
|
load_packages: {Loader, :packages, []}
|
||||||
|
|
||||||
The function should return a list of entries like this:
|
The function should return a list of entries like this:
|
||||||
|
|
||||||
|
|
|
@ -208,10 +208,9 @@ defprotocol Livebook.Runtime do
|
||||||
|
|
||||||
@type dependency :: term()
|
@type dependency :: term()
|
||||||
|
|
||||||
@type search_dependencies_response ::
|
@type search_packages_response :: {:ok, list(package())} | {:error, String.t()}
|
||||||
{:ok, list(search_dependencies_entry())} | {:error, String.t()}
|
|
||||||
|
|
||||||
@type search_dependencies_entry :: %{
|
@type package :: %{
|
||||||
name: String.t(),
|
name: String.t(),
|
||||||
version: String.t(),
|
version: String.t(),
|
||||||
description: String.t() | nil,
|
description: String.t() | nil,
|
||||||
|
@ -443,7 +442,7 @@ defprotocol Livebook.Runtime do
|
||||||
dependencies, the dependencies are not considered fixed.
|
dependencies, the dependencies are not considered fixed.
|
||||||
|
|
||||||
When dependencies are fixed, the following functions are allowed to
|
When dependencies are fixed, the following functions are allowed to
|
||||||
raise an implementation error: `add_dependencies/3`, `search_dependencies/3`.
|
raise an implementation error: `add_dependencies/3`, `search_packages/3`.
|
||||||
"""
|
"""
|
||||||
@spec fixed_dependencies?(t()) :: boolean()
|
@spec fixed_dependencies?(t()) :: boolean()
|
||||||
def fixed_dependencies?(runtime)
|
def fixed_dependencies?(runtime)
|
||||||
|
@ -460,8 +459,8 @@ defprotocol Livebook.Runtime do
|
||||||
|
|
||||||
The response is sent to the `send_to` process as
|
The response is sent to the `send_to` process as
|
||||||
|
|
||||||
* `{:runtime_search_dependencies_response, ref, response}`.
|
* `{:runtime_search_packages_response, ref, response}`.
|
||||||
"""
|
"""
|
||||||
@spec search_dependencies(t(), pid(), String.t()) :: reference()
|
@spec search_packages(t(), pid(), String.t()) :: reference()
|
||||||
def search_dependencies(runtime, send_to, search)
|
def search_packages(runtime, send_to, search)
|
||||||
end
|
end
|
||||||
|
|
|
@ -120,7 +120,7 @@ defimpl Livebook.Runtime, for: Livebook.Runtime.Attached do
|
||||||
raise "not supported"
|
raise "not supported"
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_dependencies(_runtime, _send_to, _search) do
|
def search_packages(_runtime, _send_to, _search) do
|
||||||
raise "not supported"
|
raise "not supported"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -157,45 +157,45 @@ defmodule Livebook.Runtime.Dependencies do
|
||||||
defp unescape_term(_node), do: :error
|
defp unescape_term(_node), do: :error
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Implements `Livebook.Runtime.search_dependencies/3` on top of
|
Implements `Livebook.Runtime.search_packages/3` on top of
|
||||||
`search_hex/2`.
|
`search_hex/2`.
|
||||||
"""
|
"""
|
||||||
@spec search_dependencies_on_hex(pid(), String.t()) :: reference()
|
@spec search_packages_on_hex(pid(), String.t()) :: reference()
|
||||||
def search_dependencies_on_hex(send_to, search) do
|
def search_packages_on_hex(send_to, search) do
|
||||||
ref = make_ref()
|
ref = make_ref()
|
||||||
|
|
||||||
Task.Supervisor.start_child(Livebook.TaskSupervisor, fn ->
|
Task.Supervisor.start_child(Livebook.TaskSupervisor, fn ->
|
||||||
response = search_hex(search)
|
response = search_hex(search)
|
||||||
send(send_to, {:runtime_search_dependencies_response, ref, response})
|
send(send_to, {:runtime_search_packages_response, ref, response})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
ref
|
ref
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Implements `Livebook.Runtime.search_dependencies/3` by searching
|
Implements `Livebook.Runtime.search_packages/3` by searching
|
||||||
through the given list of entries.
|
through the given list of packages.
|
||||||
"""
|
"""
|
||||||
@spec search_dependencies_in_entries(
|
@spec search_packages_in_list(
|
||||||
list(Livebook.Runtime.search_dependencies_entry()),
|
list(Livebook.Runtime.package()),
|
||||||
pid(),
|
pid(),
|
||||||
String.t()
|
String.t()
|
||||||
) :: reference()
|
) :: reference()
|
||||||
def search_dependencies_in_entries(entries, send_to, search) do
|
def search_packages_in_list(packages, send_to, search) do
|
||||||
ref = make_ref()
|
ref = make_ref()
|
||||||
entries = Enum.filter(entries, &String.starts_with?(&1.name, search))
|
packages = Enum.filter(packages, &String.starts_with?(&1.name, search))
|
||||||
send(send_to, {:runtime_search_dependencies_response, ref, {:ok, entries}})
|
send(send_to, {:runtime_search_packages_response, ref, {:ok, packages}})
|
||||||
ref
|
ref
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Searches for packages on Hex and returns them as dependency entries.
|
Searches for packages on Hex.
|
||||||
|
|
||||||
## Options
|
## Options
|
||||||
|
|
||||||
* `:api_url` - the base URL for Hex API requests. Optional
|
* `:api_url` - the base URL for Hex API requests. Optional
|
||||||
"""
|
"""
|
||||||
@spec search_hex(String.t(), keyword()) :: Livebook.Runtime.search_dependencies_response()
|
@spec search_hex(String.t(), keyword()) :: Livebook.Runtime.search_packages_response()
|
||||||
def search_hex(search, opts \\ [])
|
def search_hex(search, opts \\ [])
|
||||||
|
|
||||||
def search_hex("", _opts), do: {:ok, []}
|
def search_hex("", _opts), do: {:ok, []}
|
||||||
|
@ -209,8 +209,8 @@ defmodule Livebook.Runtime.Dependencies do
|
||||||
case Livebook.Utils.HTTP.request(:get, url) do
|
case Livebook.Utils.HTTP.request(:get, url) do
|
||||||
{:ok, status, _headers, body} ->
|
{:ok, status, _headers, body} ->
|
||||||
with 200 <- status, {:ok, packages} <- Jason.decode(body) do
|
with 200 <- status, {:ok, packages} <- Jason.decode(body) do
|
||||||
entries = Enum.map(packages, &package_to_entry/1)
|
packages = Enum.map(packages, &parse_package/1)
|
||||||
{:ok, entries}
|
{:ok, packages}
|
||||||
else
|
else
|
||||||
_ -> {:error, "unexpected response"}
|
_ -> {:error, "unexpected response"}
|
||||||
end
|
end
|
||||||
|
@ -220,7 +220,7 @@ defmodule Livebook.Runtime.Dependencies do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp package_to_entry(package) do
|
defp parse_package(package) do
|
||||||
{:ok, dependency} = parse_term(package["configs"]["mix.exs"])
|
{:ok, dependency} = parse_term(package["configs"]["mix.exs"])
|
||||||
|
|
||||||
%{
|
%{
|
||||||
|
|
|
@ -192,7 +192,7 @@ defimpl Livebook.Runtime, for: Livebook.Runtime.ElixirStandalone do
|
||||||
Livebook.Runtime.Dependencies.add_mix_deps(code, dependencies)
|
Livebook.Runtime.Dependencies.add_mix_deps(code, dependencies)
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_dependencies(_runtime, send_to, search) do
|
def search_packages(_runtime, send_to, search) do
|
||||||
Livebook.Runtime.Dependencies.search_dependencies_on_hex(send_to, search)
|
Livebook.Runtime.Dependencies.search_packages_on_hex(send_to, search)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -109,17 +109,17 @@ defimpl Livebook.Runtime, for: Livebook.Runtime.Embedded do
|
||||||
end
|
end
|
||||||
|
|
||||||
def fixed_dependencies?(_runtime) do
|
def fixed_dependencies?(_runtime) do
|
||||||
not Keyword.has_key?(config(), :load_dependency_entries)
|
not Keyword.has_key?(config(), :load_packages)
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_dependencies(_runtime, code, dependencies) do
|
def add_dependencies(_runtime, code, dependencies) do
|
||||||
Livebook.Runtime.Dependencies.add_mix_deps(code, dependencies)
|
Livebook.Runtime.Dependencies.add_mix_deps(code, dependencies)
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_dependencies(_runtime, send_to, search) do
|
def search_packages(_runtime, send_to, search) do
|
||||||
{mod, fun, args} = config()[:load_dependency_entries]
|
{mod, fun, args} = config()[:load_packages]
|
||||||
entries = apply(mod, fun, args)
|
packages = apply(mod, fun, args)
|
||||||
Livebook.Runtime.Dependencies.search_dependencies_in_entries(entries, send_to, search)
|
Livebook.Runtime.Dependencies.search_packages_in_list(packages, send_to, search)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp config() do
|
defp config() do
|
||||||
|
|
|
@ -209,7 +209,7 @@ defimpl Livebook.Runtime, for: Livebook.Runtime.MixStandalone do
|
||||||
raise "not supported"
|
raise "not supported"
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_dependencies(_runtime, _send_to, _search) do
|
def search_packages(_runtime, _send_to, _search) do
|
||||||
raise "not supported"
|
raise "not supported"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -317,10 +317,10 @@ defmodule LivebookWeb.SessionLive do
|
||||||
</.modal>
|
</.modal>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= if @live_action == :dependency_search do %>
|
<%= if @live_action == :package_search do %>
|
||||||
<.modal id="dependency-search-modal" show class="w-full max-w-xl" patch={@self_path}>
|
<.modal id="package-search-modal" show class="w-full max-w-xl" patch={@self_path}>
|
||||||
<%= live_render @socket, LivebookWeb.SessionLive.DependencySearchLive,
|
<%= live_render @socket, LivebookWeb.SessionLive.PackageSearchLive,
|
||||||
id: "dependency-search",
|
id: "package-search",
|
||||||
session: %{
|
session: %{
|
||||||
"session" => @session,
|
"session" => @session,
|
||||||
"runtime" => @data_view.runtime,
|
"runtime" => @data_view.runtime,
|
||||||
|
|
|
@ -104,7 +104,7 @@ defmodule LivebookWeb.SessionLive.CellComponent do
|
||||||
</:primary>
|
</:primary>
|
||||||
<:secondary>
|
<:secondary>
|
||||||
<.enable_insert_mode_button />
|
<.enable_insert_mode_button />
|
||||||
<.dependency_search_button session_id={@session_id} runtime={@runtime} socket={@socket} />
|
<.package_search_button session_id={@session_id} runtime={@runtime} socket={@socket} />
|
||||||
<.cell_link_button cell_id={@cell_view.id} />
|
<.cell_link_button cell_id={@cell_view.id} />
|
||||||
<.setup_cell_info />
|
<.setup_cell_info />
|
||||||
</:secondary>
|
</:secondary>
|
||||||
|
@ -362,7 +362,7 @@ defmodule LivebookWeb.SessionLive.CellComponent do
|
||||||
<span class="tooltip top" data-tooltip="Convert to Code cell">
|
<span class="tooltip top" data-tooltip="Convert to Code cell">
|
||||||
<button class="icon-button"
|
<button class="icon-button"
|
||||||
aria-label="toggle source"
|
aria-label="toggle source"
|
||||||
data-link-dependency-search
|
data-link-package-search
|
||||||
phx-click={
|
phx-click={
|
||||||
with_confirm(
|
with_confirm(
|
||||||
JS.push("convert_smart_cell", value: %{cell_id: @cell_id}),
|
JS.push("convert_smart_cell", value: %{cell_id: @cell_id}),
|
||||||
|
@ -379,7 +379,7 @@ defmodule LivebookWeb.SessionLive.CellComponent do
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
defp dependency_search_button(assigns) do
|
defp package_search_button(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<%= if Livebook.Runtime.fixed_dependencies?(@runtime) do %>
|
<%= if Livebook.Runtime.fixed_dependencies?(@runtime) do %>
|
||||||
<span class="tooltip top" data-tooltip="The current runtime does not support adding dependencies">
|
<span class="tooltip top" data-tooltip="The current runtime does not support adding dependencies">
|
||||||
|
@ -388,12 +388,12 @@ defmodule LivebookWeb.SessionLive.CellComponent do
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<% else %>
|
<% else %>
|
||||||
<span class="tooltip top" data-tooltip="Add dependency (sd)">
|
<span class="tooltip top" data-tooltip="Add dependency (sp)">
|
||||||
<%= live_patch to: Routes.session_path(@socket, :dependency_search, @session_id),
|
<%= live_patch to: Routes.session_path(@socket, :package_search, @session_id),
|
||||||
class: "icon-button",
|
class: "icon-button",
|
||||||
aria_label: "add dependency",
|
aria_label: "add dependency",
|
||||||
role: "button",
|
role: "button",
|
||||||
data_btn_dependency_search: true do %>
|
data_btn_package_search: true do %>
|
||||||
<.remix_icon icon="play-list-add-line" class="text-xl" />
|
<.remix_icon icon="play-list-add-line" class="text-xl" />
|
||||||
<% end %>
|
<% end %>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
defmodule LivebookWeb.SessionLive.PackageSearchLive do
|
||||||
use LivebookWeb, :live_view
|
use LivebookWeb, :live_view
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
@ -14,7 +14,7 @@ defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
||||||
return_to: return_to,
|
return_to: return_to,
|
||||||
search: "",
|
search: "",
|
||||||
search_ref: nil,
|
search_ref: nil,
|
||||||
entries: [],
|
packages: [],
|
||||||
error_message: nil
|
error_message: nil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
||||||
~H"""
|
~H"""
|
||||||
<div class="p-6 pb-4 flex flex-col space-y-8">
|
<div class="p-6 pb-4 flex flex-col space-y-8">
|
||||||
<h3 class="text-2xl font-semibold text-gray-800">
|
<h3 class="text-2xl font-semibold text-gray-800">
|
||||||
Dependency search
|
Search packages
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-gray-700">
|
<p class="text-gray-700">
|
||||||
Find external packages for your notebook
|
Find external packages for your notebook
|
||||||
|
@ -50,15 +50,15 @@ defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
||||||
<%= @error_message %>
|
<%= @error_message %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% @entries == [] -> %>
|
<% @packages == [] -> %>
|
||||||
<div class="flex h-full items-center justify-center text-gray-600">
|
<div class="flex h-full items-center justify-center text-gray-600">
|
||||||
<.remix_icon icon="windy-line" class="text-xl" />
|
<.remix_icon icon="windy-line" class="text-xl" />
|
||||||
<div class="ml-2">No results</div>
|
<div class="ml-2">No results</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% true -> %>
|
<% true -> %>
|
||||||
<%= for {entry, idx} <- Enum.with_index(@entries) do %>
|
<%= for {package, idx} <- Enum.with_index(@packages) do %>
|
||||||
<.dependency_entry entry={entry} idx={idx} />
|
<.package package={package} idx={idx} />
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -66,20 +66,20 @@ defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
defp dependency_entry(assigns) do
|
defp package(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="flex-grow p-2 flex flex-col text-sm">
|
<div class="flex-grow p-2 flex flex-col text-sm">
|
||||||
<div class="flex text-gray-700">
|
<div class="flex text-gray-700">
|
||||||
<%= if @entry[:url] do %>
|
<%= if @package[:url] do %>
|
||||||
<a class="font-semibold" href={@entry[:url]} target="_blank"><%= @entry.name %></a>
|
<a class="font-semibold" href={@package[:url]} target="_blank"><%= @package.name %></a>
|
||||||
<% else %>
|
<% else %>
|
||||||
<span class="font-semibold"><%= @entry.name %></span>
|
<span class="font-semibold"><%= @package.name %></span>
|
||||||
<% end %>
|
<% end %>
|
||||||
<span class="ml-1"><%= @entry.version %></span>
|
<span class="ml-1"><%= @package.version %></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-gray-600">
|
<div class="text-gray-600">
|
||||||
<%= @entry.description %>
|
<%= @package.description %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-2">
|
<div class="ml-2">
|
||||||
|
@ -102,7 +102,7 @@ defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("submit", %{}, socket) do
|
def handle_event("submit", %{}, socket) do
|
||||||
socket =
|
socket =
|
||||||
case socket.assigns.entries do
|
case socket.assigns.packages do
|
||||||
[] -> socket
|
[] -> socket
|
||||||
[first | _] -> add_dependency(socket, first.dependency)
|
[first | _] -> add_dependency(socket, first.dependency)
|
||||||
end
|
end
|
||||||
|
@ -112,20 +112,20 @@ defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("add", %{"idx" => idx}, socket) do
|
def handle_event("add", %{"idx" => idx}, socket) do
|
||||||
entry = Enum.fetch!(socket.assigns.entries, idx)
|
package = Enum.fetch!(socket.assigns.packages, idx)
|
||||||
socket = add_dependency(socket, entry.dependency)
|
socket = add_dependency(socket, package.dependency)
|
||||||
{:noreply, socket}
|
{:noreply, socket}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_info(
|
def handle_info(
|
||||||
{:runtime_search_dependencies_response, ref, response},
|
{:runtime_search_packages_response, ref, response},
|
||||||
%{assigns: %{search_ref: ref}} = socket
|
%{assigns: %{search_ref: ref}} = socket
|
||||||
) do
|
) do
|
||||||
socket =
|
socket =
|
||||||
case response do
|
case response do
|
||||||
{:ok, entries} ->
|
{:ok, packages} ->
|
||||||
assign(socket, entries: entries, error_message: nil)
|
assign(socket, packages: packages, error_message: nil)
|
||||||
|
|
||||||
{:error, message} ->
|
{:error, message} ->
|
||||||
assign(socket, error_message: Livebook.Utils.upcase_first(message))
|
assign(socket, error_message: Livebook.Utils.upcase_first(message))
|
||||||
|
@ -137,7 +137,7 @@ defmodule LivebookWeb.SessionLive.DependencySearchLive do
|
||||||
def handle_info(_message, socket), do: {:noreply, socket}
|
def handle_info(_message, socket), do: {:noreply, socket}
|
||||||
|
|
||||||
defp do_search(socket, search) do
|
defp do_search(socket, search) do
|
||||||
search_ref = Livebook.Runtime.search_dependencies(socket.assigns.runtime, self(), search)
|
search_ref = Livebook.Runtime.search_packages(socket.assigns.runtime, self(), search)
|
||||||
assign(socket, search_ref: search_ref, search: search)
|
assign(socket, search_ref: search_ref, search: search)
|
||||||
end
|
end
|
||||||
|
|
|
@ -101,7 +101,7 @@ defmodule LivebookWeb.SessionLive.ShortcutsComponent do
|
||||||
%{seq: ["s", "u"], desc: "Toggle users panel"},
|
%{seq: ["s", "u"], desc: "Toggle users panel"},
|
||||||
%{seq: ["s", "r"], desc: "Show runtime panel"},
|
%{seq: ["s", "r"], desc: "Show runtime panel"},
|
||||||
%{seq: ["s", "b"], desc: "Show bin"},
|
%{seq: ["s", "b"], desc: "Show bin"},
|
||||||
%{seq: ["s", "d"], desc: "Show dependency search"},
|
%{seq: ["s", "p"], desc: "Show package search"},
|
||||||
%{seq: ["0", "0"], desc: "Reconnect current runtime"}
|
%{seq: ["0", "0"], desc: "Reconnect current runtime"}
|
||||||
],
|
],
|
||||||
universal: [
|
universal: [
|
||||||
|
|
|
@ -65,7 +65,7 @@ defmodule LivebookWeb.Router do
|
||||||
live "/sessions/:id/cell-settings/:cell_id", SessionLive, :cell_settings
|
live "/sessions/:id/cell-settings/:cell_id", SessionLive, :cell_settings
|
||||||
live "/sessions/:id/cell-upload/:cell_id", SessionLive, :cell_upload
|
live "/sessions/:id/cell-upload/:cell_id", SessionLive, :cell_upload
|
||||||
live "/sessions/:id/delete-section/:section_id", SessionLive, :delete_section
|
live "/sessions/:id/delete-section/:section_id", SessionLive, :delete_section
|
||||||
live "/sessions/:id/dependency-search", SessionLive, :dependency_search
|
live "/sessions/:id/package-search", SessionLive, :package_search
|
||||||
get "/sessions/:id/images/:image", SessionController, :show_image
|
get "/sessions/:id/images/:image", SessionController, :show_image
|
||||||
live "/sessions/:id/*path_parts", SessionLive, :catch_all
|
live "/sessions/:id/*path_parts", SessionLive, :catch_all
|
||||||
end
|
end
|
||||||
|
|
|
@ -196,7 +196,7 @@ defmodule Livebook.Runtime.DependenciesTest do
|
||||||
{:ok, bypass: bypass}
|
{:ok, bypass: bypass}
|
||||||
end
|
end
|
||||||
|
|
||||||
test "parses the response into dependency entries", %{bypass: bypass} do
|
test "parses the response into a list of packages", %{bypass: bypass} do
|
||||||
Bypass.expect_once(bypass, "GET", "/api/packages", fn conn ->
|
Bypass.expect_once(bypass, "GET", "/api/packages", fn conn ->
|
||||||
conn
|
conn
|
||||||
|> Plug.Conn.put_resp_content_type("application/json")
|
|> Plug.Conn.put_resp_content_type("application/json")
|
||||||
|
|
|
@ -896,9 +896,9 @@ defmodule LivebookWeb.SessionLiveTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "dependency search" do
|
describe "package search" do
|
||||||
test "lists search entries", %{conn: conn, session: session} do
|
test "lists search entries", %{conn: conn, session: session} do
|
||||||
{:ok, view, _} = live(conn, "/sessions/#{session.id}/dependency-search")
|
{:ok, view, _} = live(conn, "/sessions/#{session.id}/package-search")
|
||||||
|
|
||||||
[search_view] = live_children(view)
|
[search_view] = live_children(view)
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,6 @@ defmodule Livebook.Runtime.NoopRuntime do
|
||||||
Livebook.Runtime.Dependencies.add_mix_deps(code, dependencies)
|
Livebook.Runtime.Dependencies.add_mix_deps(code, dependencies)
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_dependencies(_, _, _), do: make_ref()
|
def search_packages(_, _, _), do: make_ref()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,8 +18,8 @@ Application.put_env(:livebook, :runtime_modules, [
|
||||||
Livebook.Runtime.Embedded
|
Livebook.Runtime.Embedded
|
||||||
])
|
])
|
||||||
|
|
||||||
defmodule Livebook.Runtime.Embedded.Dependencies do
|
defmodule Livebook.Runtime.Embedded.Packages do
|
||||||
def entries() do
|
def list() do
|
||||||
[
|
[
|
||||||
%{
|
%{
|
||||||
dependency: {:jason, "~> 1.3.0"},
|
dependency: {:jason, "~> 1.3.0"},
|
||||||
|
@ -34,7 +34,7 @@ end
|
||||||
|
|
||||||
# Enable dependency saerch for the embedded runtime
|
# Enable dependency saerch for the embedded runtime
|
||||||
Application.put_env(:livebook, Livebook.Runtime.Embedded,
|
Application.put_env(:livebook, Livebook.Runtime.Embedded,
|
||||||
load_dependency_entries: {Livebook.Runtime.Embedded.Dependencies, :entries, []}
|
load_packages: {Livebook.Runtime.Embedded.Packages, :list, []}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Disable autosaving
|
# Disable autosaving
|
||||||
|
|
Loading…
Add table
Reference in a new issue