{% extends layout|default('base.html', true) %} {% block style %} {% endblock %} {% block content %} Plexora - Settings {# The rail is rendered from settings_routes.SECTIONS and the panels are written by hand below, keyed by the same id. That split is deliberate: a section's NAME and ORDER are one line of Python, so adding one never means editing three places to keep a list in step, while its CONTENT is markup and belongs in a template rather than in a string in a route module. Panels are all present in the DOM and shown one at a time. With one section that is indistinguishable from rendering only the active one; with six it is what keeps switching tabs instant, and it is the arrangement the CSS and the JS below are written for. #}

Settings

Preferences for this copy of Plexora.

Data directory

Every project you import, and every figure you build, is written here. Plexora reads this once when it starts, so a change takes effect the next time it is launched.

{# Filled by settingsPage.js from /settings/data. Rendered empty rather than server-side because the same markup has to be redrawn after a save, and one renderer beats a Jinja copy and a JS copy that drift. #}
Current location
Loading…
{# Shown only when the settings file and the running process disagree -- i.e. a change was saved and nothing has restarted yet. Both paths are named, because "pending" is meaningless without saying pending FROM what. #} {# An environment variable beats the settings file (see paths._candidate_data_root), so when one is set the form is not merely disabled -- the server refuses the write too. Two places, because a disabled control is a hint and the 409 is the rule. #}
{% if not data.notebook_mode %} {# Opens a picker on the SERVER's machine, which is why it is not offered in notebook/hosted mode -- /browse_path refuses it there for the same reason. #} {% endif %}

Existing projects stay where they are unless you choose to bring them along on the next step.

{# The review step. Nothing is written until the button in here is pressed, so this is the only place the consequences of the choice are stated -- what is already in the target, whether a move would be a rename or an hour of copying, and what would collide. #} {# Migration progress. Counted in projects rather than bytes -- see data_migration's module docstring for why a byte total would cost a full tree walk before anything visibly starts. #}
{# Remote servers. The same job `plexora connect` does, with the ssh command lines replaced by a saved profile and a button. The form is deliberately front-loaded: address and name are the two answers everybody has, and everything that only some sites need -- a scheduler, a conda-shaped launch command, extra forwards -- is behind one disclosure so it is not four questions a first-time user has to decide they do not have. #}

Remote servers

Save an SSH server once, then connect by name. Plexora handles the port and tunnel automatically.

To run Plexora itself on a cluster, launch it there using plexora connect you@login.cluster.edu, Open OnDemand, or Jupyter.

Loading…
{# The card is one column and three questions deep, because three is how many a person adding a workstation has: what to call it, where it is, and where their data sits on it. Everything a CLUSTER needs -- a scheduler, a conda-shaped launch command, a second forwarded port -- is real and is behind one disclosure, so that the common case does not have to read past it to reach Save. "Use preset" is a secondary control in the title row rather than a button of its own weight above the form. It opens the shared connection dialog on its catalogue page -- an ellipsis rather than a chevron, because that is a dialog and not a menu. The catalogue stays there because a preset has things to say that this form has nowhere to put: an untested site carries a warning, and one that knows the host still cannot know the username, which the dialog asks for outright. #}
Add a server
Advanced options
{# The switch rides the group's own title row rather than taking a row of its own: it is the same question as the box below it -- which environment -- asked as "and keep Plexora current in it". A dedicated row would put an uppercase section label and a lone toggle on two lines that both say "environment". #}
Plexora environment
{# The examples are behind a disclosure because they are two long paths that answer a question most people do not have, and left on screen they were the widest thing in the form. #}
Examples
  • /home/you/miniconda3/envs/plexora
  • conda run -n plexora plexora
Cluster execution
{# Hidden until the switch is on, and FILLED IN when it goes on (settingsPage.js), because a default nobody can see is a default nobody can correct. The numbers are recipes.DEFAULT_* -- four hours, sixteen cores, 128 GB -- which is what a multiplexed pyramid needs rather than what merely lets the process start. #}
Networking
Additional port forwarding {# One port at a time into a list, rather than a textarea of them. A textarea asks somebody to know the format before they can type, and accepts anything -- including the thing they meant to delete last time. #}
Only needed when another service must be reachable through the SSH connection.
{# What used to be here: two textareas naming the files to serve from each end, as `kind:id=path`, and an "open project" box beside the address. They are gone because they asked the question at the wrong moment -- to fill them in you had to know, before opening Plexora, the path of a file you were about to go looking for. Every data field now has a Local/Remote switch that asks the same question when it actually comes up, and opens the connection then. A saved profile is a connection again, not an inventory. #}
{# Data nodes: what is CURRENTLY reachable, which is a different question from which servers are saved next door. Most entries here now appear and disappear on their own -- a data field's Remote option opens one, `plexora connect` opens one on the user's laptop -- so this section reads as a status board first and an address book second. The manual form stays because a node somebody started by hand is still a thing that exists, but it is behind a disclosure: it is now the exception. #}

Data nodes

Machines that are handing this Plexora data right now. Most of them arrive by themselves: choosing Remote on a data field opens one on a saved server, and plexora connect opens one on your own computer. Nothing here needs setting up before you import.

Which files a project reads from a node is chosen on that project’s own page. This is only the address book.

Loading…
Add a node by hand

For a node you started yourself with plexora node serve on a machine this one can already reach. A node opened from a data field or by plexora connect registers itself.

{# remoteState.js is loaded by base.html, above and deferred, so it is parsed before this file runs -- the Remote servers section is one of its subscribers rather than a poller of its own. #} {% endblock %}