plotly / plotly/plotly.rs

`Plot::show()` panics when no opener binary exists, and silently no-ops when it fails

Ouverte
#435 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Rust
Étoiles
1.5k
Forks
128
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Plot::show() offers no way for a caller to handle a failed browser handoff.
Running it on a headless server causes a panic, but the panic message is misleading.

How to reproduce

use plotly::{Plot, Scatter};

fn main() {
    let mut plot = Plot::new();
    plot.add_trace(Scatter::new(vec![0, 1, 2], vec![0.0, 1.5, 3.0]));
    plot.show();
}

Run on a headless Linux host with no xdg-open on PATH 👍

thread 'main' panicked at .../plotly-0.14.1/src/plot.rs:789:14:
Could not find default application for HTML files.
[...]
: Os { code: 2, kind: NotFound, message: "No such file or directory" }

Environment

  • plotly 0.14.1
  • rustc 1.98.0
  • AlmaLinux 9.8

Expected

A library call should not abort the process over a missing external binary. The caller should have
some way to detect this and potentially fall back to write_html() or write_image() on its own or
show a clear error message.

Cause

https://github.com/plotly/plotly.rs/blob/00fe0512e9f924bd0fc2edfc6cc617a1604f4e0d/plotly/src/plot.rs#L793-L800

There are two problems with it:

  1. Missing binary panics: .output() returns Err only when the process cannot be
    spawned, i.e. xdg-open is not on PATH. .expect() turns that into a panic, and
    show() returns (), so a caller has nothing to match on.
    The resulting error message is very misleading here: https://github.com/plotly/plotly.rs/blob/00fe0512e9f924bd0fc2edfc6cc617a1604f4e0d/plotly/src/plot.rs#L57-L65

  2. Return code of the xdg-open is ignored: If xdg-open is installed but exits non-zero
    (e.g. when no application is registered for HTML) it still returns Ok, carrying
    the failure inside Output::status, but status is never read.

The macOS and Windows variants have a similar shape.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez dans plotly/src/plot.rs, au niveau de l’implémentation référencée de Plot::show(), et examinez les branches Linux, macOS et Windows, y compris les définitions d’erreurs vers les lignes 57-65. Reproduisez le cas Linux headless, puis vérifiez que les binaires opener manquants et les statuts opener non nuls sont signalés aux appelants au lieu de provoquer un panic ou d’être ignorés silencieusement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
rust
Domaine
data-visualization
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Active
Clarté
Plutôt claire
Accessibilité débutants
62/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.