plotly / plotly/plotly.rs

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

Đang mở
#435 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
Rust
Star
1.5k
Fork
128
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu trong plotly/src/plot.rs, tại phần triển khai Plot::show() được tham chiếu, và kiểm tra các nhánh Linux, macOS và Windows, bao gồm cả các định nghĩa lỗi gần dòng 57-65. Tái hiện trường hợp Linux headless, sau đó xác minh rằng các binary opener bị thiếu và các trạng thái opener khác không được báo cáo cho bên gọi thay vì gây ra panic hoặc bị âm thầm bỏ qua.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
rust
Lĩnh vực
data-visualization
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Sôi nổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
62/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.