Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: use embedded qt browser for jdaviz standalone #3188

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

maartenbreddels
Copy link
Collaborator

Description

This allows running jdaviz in its own browser (using qt) for the command line and the standalone version

Change log entry

  • Is a change log needed? If yes, is it added to CHANGES.rst? If you want to avoid merge conflicts,
    list the proposed change log here for review and add to CHANGES.rst before merge. If no, maintainer
    should add a no-changelog-entry-needed label.

Checklist for package maintainer(s)

This checklist is meant to remind the package maintainer(s) who will review this pull request of some common things to look for. This list is not exhaustive.

  • Are two approvals required? Branch protection rule does not check for the second approval. If a second approval is not necessary, please apply the trivial label.
  • Do the proposed changes actually accomplish desired goals? Also manually run the affected example notebooks, if necessary.
  • Do the proposed changes follow the STScI Style Guides?
  • Are tests added/updated as required? If so, do they follow the STScI Style Guides?
  • Are docs added/updated as required? If so, do they follow the STScI Style Guides?
  • Did the CI pass? If not, are the failures related?
  • Is a milestone set? Set this to bugfix milestone if this is a bug fix and needs to be released ASAP; otherwise, set this to the next major release milestone. Bugfix milestone also needs an accompanying backport label.
  • After merge, any internal documentations need updating (e.g., JIRA, Innerspace)?

@maartenbreddels maartenbreddels changed the title Feat solara standalone feat: use embedded qt browser for jdaviz standalone Sep 10, 2024
@kecnry kecnry added this to the 4.0 milestone Sep 10, 2024
@kecnry kecnry added UI/UX😍 Build standalone Additional pylons labels Sep 10, 2024
@pllim
Copy link
Contributor

pllim commented Sep 10, 2024

Nope... Error: Error: Timed out waiting for: tcp:8765 for Ubuntu

@pllim pllim added the no-changelog-entry-needed changelog bot directive label Sep 10, 2024
jdaviz/cli.py Show resolved Hide resolved
@kecnry kecnry removed the Build standalone Additional pylons label Sep 10, 2024
@camipacifici
Copy link
Contributor

Starting server on http://localhost:60717
INFO: Started server process [19275]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://localhost:60717 (Press CTRL+C to quit)
Traceback (most recent call last):
File "/Users/cpacifici/opt/miniconda3/envs/pr3188/bin/jdaviz", line 8, in
sys.exit(_main())
^^^^^^^
File "/Users/cpacifici/opt/miniconda3/envs/pr3188/lib/python3.11/site-packages/jdaviz/cli.py", line 149, in _main
main(filepaths=args.filepaths, layout=layout, instrument=args.instrument, browser=args.browser,
File "/Users/cpacifici/opt/miniconda3/envs/pr3188/lib/python3.11/site-packages/jdaviz/cli.py", line 78, in main
run_solara(host=host, port=port, theme=theme, browser=browser)
File "/Users/cpacifici/opt/miniconda3/envs/pr3188/lib/python3.11/site-packages/jdaviz/cli.py", line 93, in run_solara
from qtpy.QtWidgets import QApplication
File "/Users/cpacifici/opt/miniconda3/envs/pr3188/lib/python3.11/site-packages/qtpy/init.py", line 287, in
raise QtBindingsNotFoundError from None
qtpy.QtBindingsNotFoundError: No Qt bindings could be found

:(

This also restore the --browser feature that was previously broken.

app = QApplication([""])
web = QWebEngineView()
web.resize(1000, 1000)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure what we should do here.

@kecnry kecnry added the Build standalone Additional pylons label Sep 10, 2024
@maartenbreddels
Copy link
Collaborator Author

maartenbreddels commented Sep 10, 2024

I included optional dependencies now @camipacifici , so running

$ pip install -e ".[qt]"

Should get you the correct dependencies.

jdaviz/cli.py Outdated Show resolved Hide resolved
@camipacifici
Copy link
Contributor

camipacifici commented Sep 10, 2024

Thank you! I had to install also PyQtWebEngine. After that, it launched!

Copy link

codecov bot commented Sep 10, 2024

Codecov Report

Attention: Patch coverage is 3.84615% with 25 lines in your changes missing coverage. Please review.

Project coverage is 88.36%. Comparing base (88ff8da) to head (9bf74d6).

Files with missing lines Patch % Lines
jdaviz/cli.py 3.84% 25 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3188      +/-   ##
==========================================
- Coverage   88.45%   88.36%   -0.10%     
==========================================
  Files         124      124              
  Lines       18389    18409      +20     
==========================================
+ Hits        16266    16267       +1     
- Misses       2123     2142      +19     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@maartenbreddels
Copy link
Collaborator Author

ValueError: Key backend: 'module://matplotlib_inline.backend_inline' is not a valid value for backend; supported values are ['gtk3agg', 'gtk3cairo', 'gtk4agg', 'gtk4cairo', 'macosx', 'nbagg', 'notebook', 'qtagg', 'qtcairo', 'qt5agg', 'qt5cairo', 'tkagg', 'tkcairo', 'webagg', 'wx', 'wxagg', 'wxcairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template']
[PYI-12940:ERROR] Failed to execute script 'jdaviz-cli-entrypoint' due to unhandled exception!

Strange to see this error come back from #2944

@maartenbreddels maartenbreddels force-pushed the feat_solara_standalone branch 2 times, most recently from 9bf74d6 to 901b68c Compare September 12, 2024 13:33
jdaviz/cli.py Outdated
@@ -100,7 +121,7 @@ def _main(config=None):
parser.add_argument('--instrument', type=str, default='nirspec',
help='Manually specifies which instrument parser to use, for Mosviz')
parser.add_argument('--browser', type=str, default='default',
help='Browser to use for application.')
help='Browser to use for application (use qt for embedded qt browser).')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is an "embedded qt browser"? If you require it for standalone to work, then is Jdaviz turning into Qt app (again)?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also I think "Qt" has a capital "q".

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With embedded I try to communicate that it will not use the system browser, suggestions are welcome.

Not sure I understand what you mean by the second sentence exactly, but it's not a Qt app.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But we're installing Qt stack...

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it's using the Qt browser (chromiums based I think), but that could be any embeddable browser. We are not using any of the Qt widgets for the UI.

Comment on lines +26 to +28
if "--browser" not in args:
args.append("--browser")
args.append("qt")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since qt is an optional dependency (and we want to keep it that way), can this default to qt only if it is installed and otherwise use the system browser?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is only for the standalone, which is built in CI with qt installed. Or do you mean if people build in locally?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if anyone installs jdaviz (from pip for example) but not using the standalone installer, they still have access to the CLI, but may not have the qt optional dependencies.

Comment on lines +89 to +91
from qtpy.QtWidgets import QApplication
from qtpy.QtWebEngineWidgets import QWebEngineView
from qtpy import QtCore
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if these fail to import, should we throw an error with instructions to install the optional dependencies?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed, good idea.

@rosteen rosteen modified the milestones: 4.0, 4.1 Oct 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Build standalone Additional pylons no-changelog-entry-needed changelog bot directive UI/UX😍
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants