matlab-proxy 0.25.1__tar.gz → 0.26.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of matlab-proxy might be problematic. Click here for more details.
- {matlab_proxy-0.25.1/matlab_proxy.egg-info → matlab_proxy-0.26.0}/PKG-INFO +3 -1
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/package-lock.json +20 -17
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/app.py +66 -12
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/constants.py +1 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/settings.py +22 -1
- matlab_proxy-0.26.0/matlab_proxy/util/cookie_jar.py +72 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/environment_variables.py +10 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0/matlab_proxy.egg-info}/PKG-INFO +3 -1
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/SOURCES.txt +3 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/requires.txt +2 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/lib/api.py +156 -114
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/server.py +5 -2
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/constants.py +2 -1
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/environment_variables.py +6 -1
- matlab_proxy-0.26.0/matlab_proxy_manager/utils/exceptions.py +45 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/helpers.py +2 -2
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/logger.py +4 -1
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/app.py +71 -19
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/setup.py +5 -2
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_app.py +116 -17
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_settings.py +26 -6
- matlab_proxy-0.26.0/tests/unit/util/test_cookie_jar.py +252 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/LICENSE.md +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/MANIFEST.in +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/README.md +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/.eslintrc.json +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/.gitignore +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/README.md +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/eslint.config.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/index.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/index.html +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/package.json +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/public/favicon.ico +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/public/manifest.json +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/public/robots.txt +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/actionCreators/actionCreators.spec.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/actionCreators/index.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/actions/index.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/css/bootstrap.min.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/css/site7.min.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.eot +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.ttf +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.woff +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-eps.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-eps.ttf +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-eps.woff +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-pictograms.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-pictograms.ttf +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-pictograms.woff +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks.ttf +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks.woff +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/bug_reports/workaround.gif +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-header-account-hover.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-header-account.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-header-contact-hover.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-header-contact.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-sprite.png +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/App.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/App.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/IdleBufferTimeouts.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/MATLAB-env-blur.png +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Confirmation/Confirmation.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Confirmation/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/Controls.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/Controls.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/feedback.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/help.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/restart.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/sign-out.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/start.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/stop.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/terminate.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/EntitlementSelector/EntitlementSelector.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/EntitlementSelector/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Error/Error.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Error/Error.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Error/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Help/Help.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Help/Help.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Help/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Information/Information.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Information/Information.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Information/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/ExistingLicense.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/ExistingLicense.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/LicenseGatherer.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/LicensingGatherer.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/MHLM.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/NLM.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/MatlabJsd/MatlabJsd.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/MatlabJsd/MatlabJsd.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/MatlabJsd/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Overlay/Overlay.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Overlay/Overlay.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Overlay/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/OverlayTrigger.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/OverlayTrigger.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/ResizeOverlayTrigger.spec.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/arrow.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/gripper.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/trigger-error.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/trigger-ok.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/ShutdownWarning/ShutdownWarning.css +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/ShutdownWarning/index.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/constants.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/main.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/reducers/index.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/reducers/reducers.spec.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/selectors/index.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/selectors/selectors.spec.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/setupTests.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/test/utils/react-test.jsx +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/test/utils/responses.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/test/utils/state.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/vite.config.js +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/app_state.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/default_configuration.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/devel.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/icons/matlab.svg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/matlab/evaluateUserMatlabCode.m +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/matlab/startup.m +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/event_loop.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/list_servers.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mw.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/custom_http_headers.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/download.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/embedded_connector/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/embedded_connector/helpers.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/embedded_connector/request.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/exceptions.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/logger.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/token_auth.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/validators.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/system.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/windows.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/dependency_links.txt +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/entry_points.txt +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/not-zip-safe +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/top_level.txt +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/lib/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/file_repository.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/interface.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/auth.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/monitor.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/watcher.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/setup.cfg +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_with_license/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_with_license/conftest.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_with_license/test_http_end_points.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_without_license/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_without_license/conftest.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_without_license/test_matlab_is_down_if_unlicensed.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/utils/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/utils/integration_tests_utils.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/utils/licensing.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/conftest.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_app_state.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_constants.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_ddux.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_devel.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_non_dev_mode.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/embedded_connector/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/embedded_connector/test_helpers.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/embedded_connector/test_request.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_custom_http_headers.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_download.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_logger.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_token_auth.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_validators.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/test_mw.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/test_util.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/utils/__init__.py +0 -0
- {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/utils/logging_util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: matlab-proxy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Python® package enables you to launch MATLAB® and access it from a web browser.
|
|
5
5
|
Home-page: https://github.com/mathworks/matlab-proxy/
|
|
6
6
|
Author: The MathWorks, Inc.
|
|
@@ -27,6 +27,7 @@ Requires-Dist: requests
|
|
|
27
27
|
Provides-Extra: dev
|
|
28
28
|
Requires-Dist: aiohttp-devtools; extra == "dev"
|
|
29
29
|
Requires-Dist: black; extra == "dev"
|
|
30
|
+
Requires-Dist: ruff; extra == "dev"
|
|
30
31
|
Requires-Dist: pytest; extra == "dev"
|
|
31
32
|
Requires-Dist: pytest-env; extra == "dev"
|
|
32
33
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
@@ -37,6 +38,7 @@ Requires-Dist: pytest-timeout; extra == "dev"
|
|
|
37
38
|
Requires-Dist: psutil; extra == "dev"
|
|
38
39
|
Requires-Dist: urllib3; extra == "dev"
|
|
39
40
|
Requires-Dist: pytest-playwright; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-asyncio==0.24.0; extra == "dev"
|
|
40
42
|
|
|
41
43
|
# MATLAB Proxy
|
|
42
44
|
[](https://github.com/mathworks/matlab-proxy/actions) [](https://pypi.python.org/pypi/matlab-proxy) [](https://codecov.io/gh/mathworks/matlab-proxy) [](https://pepy.tech/project/matlab-proxy)
|
|
@@ -3881,9 +3881,9 @@
|
|
|
3881
3881
|
"license": "MIT"
|
|
3882
3882
|
},
|
|
3883
3883
|
"node_modules/brace-expansion": {
|
|
3884
|
-
"version": "1.1.
|
|
3885
|
-
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.
|
|
3886
|
-
"integrity": "sha512-
|
|
3884
|
+
"version": "1.1.12",
|
|
3885
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
|
3886
|
+
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
|
3887
3887
|
"dev": true,
|
|
3888
3888
|
"license": "MIT",
|
|
3889
3889
|
"dependencies": {
|
|
@@ -4670,15 +4670,16 @@
|
|
|
4670
4670
|
}
|
|
4671
4671
|
},
|
|
4672
4672
|
"node_modules/es-set-tostringtag": {
|
|
4673
|
-
"version": "2.0
|
|
4674
|
-
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.
|
|
4675
|
-
"integrity": "sha512-
|
|
4673
|
+
"version": "2.1.0",
|
|
4674
|
+
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
|
4675
|
+
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
|
4676
4676
|
"dev": true,
|
|
4677
4677
|
"license": "MIT",
|
|
4678
4678
|
"dependencies": {
|
|
4679
|
-
"
|
|
4679
|
+
"es-errors": "^1.3.0",
|
|
4680
|
+
"get-intrinsic": "^1.2.6",
|
|
4680
4681
|
"has-tostringtag": "^1.0.2",
|
|
4681
|
-
"hasown": "^2.0.
|
|
4682
|
+
"hasown": "^2.0.2"
|
|
4682
4683
|
},
|
|
4683
4684
|
"engines": {
|
|
4684
4685
|
"node": ">= 0.4"
|
|
@@ -5095,9 +5096,9 @@
|
|
|
5095
5096
|
}
|
|
5096
5097
|
},
|
|
5097
5098
|
"node_modules/eslint-plugin-vitest/node_modules/brace-expansion": {
|
|
5098
|
-
"version": "2.0.
|
|
5099
|
-
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.
|
|
5100
|
-
"integrity": "sha512-
|
|
5099
|
+
"version": "2.0.2",
|
|
5100
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
|
5101
|
+
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
|
5101
5102
|
"dev": true,
|
|
5102
5103
|
"license": "MIT",
|
|
5103
5104
|
"dependencies": {
|
|
@@ -5523,14 +5524,16 @@
|
|
|
5523
5524
|
}
|
|
5524
5525
|
},
|
|
5525
5526
|
"node_modules/form-data": {
|
|
5526
|
-
"version": "4.0.
|
|
5527
|
-
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.
|
|
5528
|
-
"integrity": "sha512-
|
|
5527
|
+
"version": "4.0.4",
|
|
5528
|
+
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
|
|
5529
|
+
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
|
|
5529
5530
|
"dev": true,
|
|
5530
5531
|
"license": "MIT",
|
|
5531
5532
|
"dependencies": {
|
|
5532
5533
|
"asynckit": "^0.4.0",
|
|
5533
5534
|
"combined-stream": "^1.0.8",
|
|
5535
|
+
"es-set-tostringtag": "^2.1.0",
|
|
5536
|
+
"hasown": "^2.0.2",
|
|
5534
5537
|
"mime-types": "^2.1.12"
|
|
5535
5538
|
},
|
|
5536
5539
|
"engines": {
|
|
@@ -8918,9 +8921,9 @@
|
|
|
8918
8921
|
}
|
|
8919
8922
|
},
|
|
8920
8923
|
"node_modules/test-exclude/node_modules/brace-expansion": {
|
|
8921
|
-
"version": "2.0.
|
|
8922
|
-
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.
|
|
8923
|
-
"integrity": "sha512-
|
|
8924
|
+
"version": "2.0.2",
|
|
8925
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
|
8926
|
+
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
|
8924
8927
|
"dev": true,
|
|
8925
8928
|
"license": "MIT",
|
|
8926
8929
|
"dependencies": {
|
|
@@ -283,6 +283,10 @@ async def start_matlab(req):
|
|
|
283
283
|
JSONResponse: JSONResponse object containing updated information on the state of MATLAB among other information.
|
|
284
284
|
"""
|
|
285
285
|
state = req.app["state"]
|
|
286
|
+
cookie_jar = req.app["settings"]["cookie_jar"]
|
|
287
|
+
|
|
288
|
+
if cookie_jar:
|
|
289
|
+
cookie_jar.clear()
|
|
286
290
|
|
|
287
291
|
# Start MATLAB
|
|
288
292
|
await state.start_matlab(restart_matlab=True)
|
|
@@ -349,7 +353,7 @@ async def set_licensing_info(req):
|
|
|
349
353
|
raise Exception(
|
|
350
354
|
'License type must be "NLM" or "MHLM" or "ExistingLicense"!'
|
|
351
355
|
)
|
|
352
|
-
except Exception
|
|
356
|
+
except Exception:
|
|
353
357
|
raise web.HTTPBadRequest(text="Error with licensing!")
|
|
354
358
|
|
|
355
359
|
# This is true for a user who has only one license associated with their account
|
|
@@ -495,9 +499,13 @@ def make_static_route_table(app):
|
|
|
495
499
|
"""
|
|
496
500
|
import importlib_resources
|
|
497
501
|
|
|
498
|
-
from matlab_proxy import gui
|
|
499
|
-
from matlab_proxy.gui import static
|
|
500
|
-
from matlab_proxy.gui.static import
|
|
502
|
+
from matlab_proxy import gui # noqa: F401
|
|
503
|
+
from matlab_proxy.gui import static # noqa: F401
|
|
504
|
+
from matlab_proxy.gui.static import (
|
|
505
|
+
css, # noqa: F401
|
|
506
|
+
js, # noqa: F401
|
|
507
|
+
media, # noqa: F401
|
|
508
|
+
)
|
|
501
509
|
|
|
502
510
|
base_url = app["settings"]["base_url"]
|
|
503
511
|
|
|
@@ -557,6 +565,9 @@ async def matlab_view(req):
|
|
|
557
565
|
matlab_protocol = req.app["settings"]["matlab_protocol"]
|
|
558
566
|
mwapikey = req.app["settings"]["mwapikey"]
|
|
559
567
|
matlab_base_url = f"{matlab_protocol}://127.0.0.1:{matlab_port}"
|
|
568
|
+
cookie_jar = req.app["settings"]["cookie_jar"]
|
|
569
|
+
|
|
570
|
+
cookies_from_jar = cookie_jar.get_dict() if cookie_jar else None
|
|
560
571
|
|
|
561
572
|
# If we are trying to send request to matlab while the matlab_port is still not assigned
|
|
562
573
|
# by embedded connector, return service not available and log a message
|
|
@@ -575,17 +586,23 @@ async def matlab_view(req):
|
|
|
575
586
|
and reqH.get(UPGRADE, "").lower() == "websocket"
|
|
576
587
|
and req.method == "GET"
|
|
577
588
|
):
|
|
578
|
-
ws_server = web.WebSocketResponse(
|
|
589
|
+
ws_server = web.WebSocketResponse(
|
|
590
|
+
max_msg_size=constants.MAX_WEBSOCKET_MESSAGE_SIZE_IN_MB, compress=True
|
|
591
|
+
)
|
|
579
592
|
await ws_server.prepare(req)
|
|
580
593
|
|
|
581
594
|
async with aiohttp.ClientSession(
|
|
595
|
+
cookies=(
|
|
596
|
+
cookies_from_jar if cookie_jar else req.cookies
|
|
597
|
+
), # If cookie jar is not provided, use the cookies from the incoming request
|
|
582
598
|
trust_env=True,
|
|
583
|
-
cookies=req.cookies,
|
|
584
599
|
connector=aiohttp.TCPConnector(ssl=False),
|
|
585
600
|
) as client_session:
|
|
586
601
|
try:
|
|
587
602
|
async with client_session.ws_connect(
|
|
588
603
|
matlab_base_url + req.path_qs,
|
|
604
|
+
max_msg_size=constants.MAX_WEBSOCKET_MESSAGE_SIZE_IN_MB, # max websocket message size from MATLAB to browser
|
|
605
|
+
compress=12, # enable websocket messages compression
|
|
589
606
|
) as ws_client:
|
|
590
607
|
|
|
591
608
|
async def wsforward(ws_from, ws_to):
|
|
@@ -617,16 +634,28 @@ async def matlab_view(req):
|
|
|
617
634
|
await ws_to.close(
|
|
618
635
|
code=ws_to.close_code, message=msg.extra
|
|
619
636
|
)
|
|
637
|
+
elif mt == aiohttp.WSMsgType.ERROR:
|
|
638
|
+
logger.error(f"WebSocket error received: {msg}")
|
|
639
|
+
if "exceeds limit" in str(msg.data):
|
|
640
|
+
logger.error(
|
|
641
|
+
f"Message too large: {msg.data}. Please refresh browser tab to reconnect."
|
|
642
|
+
)
|
|
643
|
+
break
|
|
620
644
|
else:
|
|
621
645
|
raise ValueError(f"Unexpected message type: {msg}")
|
|
622
646
|
|
|
623
647
|
await asyncio.wait(
|
|
624
648
|
[
|
|
625
|
-
asyncio.create_task(
|
|
626
|
-
|
|
649
|
+
asyncio.create_task(
|
|
650
|
+
wsforward(ws_server, ws_client)
|
|
651
|
+
), # browser to MATLAB
|
|
652
|
+
asyncio.create_task(
|
|
653
|
+
wsforward(ws_client, ws_server)
|
|
654
|
+
), # MATLAB to browser
|
|
627
655
|
],
|
|
628
656
|
return_when=asyncio.FIRST_COMPLETED,
|
|
629
657
|
)
|
|
658
|
+
|
|
630
659
|
return ws_server
|
|
631
660
|
|
|
632
661
|
except Exception as err:
|
|
@@ -666,11 +695,37 @@ async def matlab_view(req):
|
|
|
666
695
|
allow_redirects=False,
|
|
667
696
|
data=req_body,
|
|
668
697
|
params=None,
|
|
698
|
+
cookies=cookies_from_jar, # Pass cookies from cookie_jar for HTTP requests to MATLAB. This value will
|
|
699
|
+
# be none if cookie jar is not enabled
|
|
669
700
|
) as res:
|
|
670
701
|
headers = res.headers.copy()
|
|
671
702
|
body = await res.read()
|
|
672
|
-
|
|
673
|
-
|
|
703
|
+
|
|
704
|
+
response = web.Response(
|
|
705
|
+
status=res.status, headers=headers, body=body
|
|
706
|
+
)
|
|
707
|
+
|
|
708
|
+
# Purpose of the cookie-jar in matlab-proxy is to:
|
|
709
|
+
# 1) Update the cookies within it when the Embedded Connector sends back Set-Cookie headers in the response.
|
|
710
|
+
# 2) Read these cookies from the cookie jar and insert them into subsequent requests to the Embedded Connector.
|
|
711
|
+
|
|
712
|
+
# Due to matlab-proxy's PING requests to EC, the number cookies present in the cookie-jar and their
|
|
713
|
+
# value will be more than the ones present on the browser side.
|
|
714
|
+
# Example: The JSESSIONID cookie will be present in the cookie-jar but not on the browser side.
|
|
715
|
+
# This inconsistency of cookies between the browser and matlab-proxy's cookie-jar is expected and okay
|
|
716
|
+
# as these cookies are HttpOnly cookies.
|
|
717
|
+
|
|
718
|
+
# Incase the Embedded Connector sends cookies which are not HttpOnly, then additional logic needs to be written
|
|
719
|
+
# to update the response with cookies from the cookie jar before it is forwarded to the browser.
|
|
720
|
+
if cookie_jar:
|
|
721
|
+
# Update the cookies in the cookie jar with the Set-Cookie headers in the response.
|
|
722
|
+
cookie_jar.update_from_response_headers(headers)
|
|
723
|
+
|
|
724
|
+
response.headers.update(
|
|
725
|
+
req.app["settings"]["mwi_custom_http_headers"]
|
|
726
|
+
)
|
|
727
|
+
|
|
728
|
+
return response
|
|
674
729
|
|
|
675
730
|
# Handles any pending HTTP requests from the browser when the MATLAB process is terminated before responding to them.
|
|
676
731
|
except (
|
|
@@ -852,7 +907,7 @@ def configure_and_start(app):
|
|
|
852
907
|
|
|
853
908
|
logger.debug("Starting MATLAB proxy app")
|
|
854
909
|
logger.debug(
|
|
855
|
-
f
|
|
910
|
+
f" with base_url: {app['settings']['base_url']} and app_port:{app['settings']['app_port']}."
|
|
856
911
|
)
|
|
857
912
|
|
|
858
913
|
app["state"].create_server_info_file()
|
|
@@ -987,7 +1042,6 @@ def print_version_and_exit():
|
|
|
987
1042
|
|
|
988
1043
|
def main():
|
|
989
1044
|
"""Starting point of the integration. Creates the web app and runs indefinitely."""
|
|
990
|
-
|
|
991
1045
|
if util.parse_cli_args()["version"]:
|
|
992
1046
|
print_version_and_exit()
|
|
993
1047
|
|
|
@@ -6,6 +6,7 @@ from typing import Final, List
|
|
|
6
6
|
CONNECTOR_SECUREPORT_FILENAME: Final[str] = "connector.securePort"
|
|
7
7
|
VERSION_INFO_FILE_NAME: Final[str] = "VersionInfo.xml"
|
|
8
8
|
MAX_HTTP_REQUEST_SIZE: Final[int] = 500_000_000 # 500MB
|
|
9
|
+
MAX_WEBSOCKET_MESSAGE_SIZE_IN_MB: Final[int] = 500_000_000 # 500MB
|
|
9
10
|
MATLAB_LOGS_FILE_NAME: Final[str] = "matlab_logs.txt"
|
|
10
11
|
USER_CODE_OUTPUT_FILE_NAME: Final[str] = "startup_code_output.txt"
|
|
11
12
|
|
|
@@ -19,6 +19,7 @@ import matlab_proxy
|
|
|
19
19
|
from matlab_proxy import constants
|
|
20
20
|
from matlab_proxy.constants import MWI_AUTH_TOKEN_NAME_FOR_HTTP
|
|
21
21
|
from matlab_proxy.util import mwi, system
|
|
22
|
+
from matlab_proxy.util.cookie_jar import HttpOnlyCookieJar
|
|
22
23
|
from matlab_proxy.util.mwi import environment_variables as mwi_env
|
|
23
24
|
from matlab_proxy.util.mwi import token_auth
|
|
24
25
|
from matlab_proxy.util.mwi.exceptions import (
|
|
@@ -159,7 +160,7 @@ def get_mwi_config_folder(dev=False):
|
|
|
159
160
|
config_folder_path = config_folder_path / "hosts" / hostname
|
|
160
161
|
|
|
161
162
|
logger.debug(
|
|
162
|
-
f"{'Hostname could not be determined. ' if not hostname else ''
|
|
163
|
+
f"{'Hostname could not be determined. ' if not hostname else ''}Using the folder: {config_folder_path} for storing all matlab-proxy related session information"
|
|
163
164
|
)
|
|
164
165
|
|
|
165
166
|
return config_folder_path
|
|
@@ -220,6 +221,7 @@ def get_dev_settings(config):
|
|
|
220
221
|
"is_xvfb_available": False,
|
|
221
222
|
"is_windowmanager_available": False,
|
|
222
223
|
"mwi_idle_timeout": None,
|
|
224
|
+
"cookie_jar": _get_cookie_jar(),
|
|
223
225
|
}
|
|
224
226
|
|
|
225
227
|
|
|
@@ -321,6 +323,8 @@ def get_server_settings(config_name):
|
|
|
321
323
|
else f"{short_desc} - MATLAB Integration"
|
|
322
324
|
)
|
|
323
325
|
|
|
326
|
+
cookie_jar = _get_cookie_jar()
|
|
327
|
+
|
|
324
328
|
return {
|
|
325
329
|
"create_xvfb_cmd": create_xvfb_cmd,
|
|
326
330
|
"base_url": mwi.validators.validate_base_url(
|
|
@@ -359,6 +363,7 @@ def get_server_settings(config_name):
|
|
|
359
363
|
"mwi_idle_timeout": mwi.validators.validate_idle_timeout(
|
|
360
364
|
os.getenv(mwi_env.get_env_name_shutdown_on_idle_timeout())
|
|
361
365
|
),
|
|
366
|
+
"cookie_jar": cookie_jar,
|
|
362
367
|
}
|
|
363
368
|
|
|
364
369
|
|
|
@@ -700,3 +705,19 @@ def _get_matlab_cmd(matlab_executable_path, code_to_execute, nlm_conn_str):
|
|
|
700
705
|
"-r",
|
|
701
706
|
code_to_execute,
|
|
702
707
|
]
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
def _get_cookie_jar():
|
|
711
|
+
"""Returns an instance of HttpOnly cookie jar if MWI_USE_COOKIE_CACHE environment variable is set to True
|
|
712
|
+
|
|
713
|
+
Returns:
|
|
714
|
+
HttpOnlyCookieJar: An instance of HttpOnly cookie jar if MWI_USE_COOKIE_CACHE environment variable is set to True, otherwise None.
|
|
715
|
+
"""
|
|
716
|
+
cookie_jar = None
|
|
717
|
+
if mwi_env.Experimental.should_use_cookie_cache():
|
|
718
|
+
logger.info(
|
|
719
|
+
f"Environment variable {mwi_env.Experimental.get_env_name_use_cookie_cache()} is set. matlab-proxy server will cache cookies from MATLAB"
|
|
720
|
+
)
|
|
721
|
+
cookie_jar = HttpOnlyCookieJar()
|
|
722
|
+
|
|
723
|
+
return cookie_jar
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Copyright 2025 The MathWorks, Inc.
|
|
2
|
+
|
|
3
|
+
from http.cookies import Morsel, SimpleCookie
|
|
4
|
+
from typing import Dict
|
|
5
|
+
|
|
6
|
+
from matlab_proxy.util import mwi
|
|
7
|
+
|
|
8
|
+
logger = mwi.logger.get()
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# For more information about HttpOnly attribute
|
|
12
|
+
# of a cookie, check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie#httponly
|
|
13
|
+
class HttpOnlyCookieJar:
|
|
14
|
+
"""
|
|
15
|
+
A lightweight, HttpOnly, in-memory cookie store.
|
|
16
|
+
|
|
17
|
+
Its sole responsibility is to parse and store 'Set-Cookie' headers as Morsel objects and
|
|
18
|
+
store them in the cookie-jar only if they are marked as HttpOnly.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
def __init__(self):
|
|
22
|
+
self._cookie_jar: Dict[str, Morsel] = {}
|
|
23
|
+
logger.debug("Cookie Jar Initialized")
|
|
24
|
+
|
|
25
|
+
def _get_cookie_name(self, cookie: SimpleCookie) -> str:
|
|
26
|
+
"""
|
|
27
|
+
Returns the name of the cookie.
|
|
28
|
+
"""
|
|
29
|
+
return list(cookie.keys())[0]
|
|
30
|
+
|
|
31
|
+
def update_from_response_headers(self, headers) -> None:
|
|
32
|
+
"""
|
|
33
|
+
Parses 'Set-Cookie' headers from a response and stores the resulting
|
|
34
|
+
cookie objects (Morsels) only if they are HttpOnly cookies.
|
|
35
|
+
"""
|
|
36
|
+
for set_cookie_val in headers.getall("Set-Cookie", []):
|
|
37
|
+
cookie = SimpleCookie()
|
|
38
|
+
cookie.load(set_cookie_val)
|
|
39
|
+
cookie_name = self._get_cookie_name(cookie)
|
|
40
|
+
morsel = cookie[cookie_name]
|
|
41
|
+
|
|
42
|
+
if morsel["httponly"]:
|
|
43
|
+
self._cookie_jar[cookie_name] = morsel
|
|
44
|
+
logger.debug(
|
|
45
|
+
f"Stored cookie object for key '{cookie_name}'. Value: '{cookie[cookie_name]}'"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
else:
|
|
49
|
+
logger.warning(
|
|
50
|
+
f"Cookie {cookie_name} is not a HttpOnly cookie. Skipping it."
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
def get_cookies(self):
|
|
54
|
+
"""
|
|
55
|
+
Returns a copy of the internal dictionary of stored cookie Morsels.
|
|
56
|
+
"""
|
|
57
|
+
return list(self._cookie_jar.values())
|
|
58
|
+
|
|
59
|
+
def get_dict(self) -> Dict[str, str]:
|
|
60
|
+
"""
|
|
61
|
+
Returns the stored cookies as a simple dictionary of name-to-value strings,
|
|
62
|
+
which is compatible with aiohttp's 'LooseCookies' type.
|
|
63
|
+
"""
|
|
64
|
+
loose_cookies = {
|
|
65
|
+
name: morsel.value for name, morsel in self._cookie_jar.items()
|
|
66
|
+
}
|
|
67
|
+
return loose_cookies
|
|
68
|
+
|
|
69
|
+
def clear(self):
|
|
70
|
+
"""Clears all stored cookies."""
|
|
71
|
+
logger.info("Cookie Jar Cleared")
|
|
72
|
+
self._cookie_jar.clear()
|
|
@@ -198,3 +198,13 @@ class Experimental:
|
|
|
198
198
|
def is_matlab_startup_profiling_enabled():
|
|
199
199
|
"""Returns true if the startup profiling is enabled."""
|
|
200
200
|
return _is_env_set_to_true(Experimental.get_env_name_profile_matlab_startup())
|
|
201
|
+
|
|
202
|
+
@staticmethod
|
|
203
|
+
def get_env_name_use_cookie_cache():
|
|
204
|
+
"""Returns the environment variable name used to enable cookie jar support for matlab-proxy"""
|
|
205
|
+
return "MWI_USE_COOKIE_CACHE"
|
|
206
|
+
|
|
207
|
+
@staticmethod
|
|
208
|
+
def should_use_cookie_cache():
|
|
209
|
+
"""Returns true if the cookie jar support is enabled."""
|
|
210
|
+
return _is_env_set_to_true(Experimental.get_env_name_use_cookie_cache())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: matlab-proxy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Python® package enables you to launch MATLAB® and access it from a web browser.
|
|
5
5
|
Home-page: https://github.com/mathworks/matlab-proxy/
|
|
6
6
|
Author: The MathWorks, Inc.
|
|
@@ -27,6 +27,7 @@ Requires-Dist: requests
|
|
|
27
27
|
Provides-Extra: dev
|
|
28
28
|
Requires-Dist: aiohttp-devtools; extra == "dev"
|
|
29
29
|
Requires-Dist: black; extra == "dev"
|
|
30
|
+
Requires-Dist: ruff; extra == "dev"
|
|
30
31
|
Requires-Dist: pytest; extra == "dev"
|
|
31
32
|
Requires-Dist: pytest-env; extra == "dev"
|
|
32
33
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
@@ -37,6 +38,7 @@ Requires-Dist: pytest-timeout; extra == "dev"
|
|
|
37
38
|
Requires-Dist: psutil; extra == "dev"
|
|
38
39
|
Requires-Dist: urllib3; extra == "dev"
|
|
39
40
|
Requires-Dist: pytest-playwright; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-asyncio==0.24.0; extra == "dev"
|
|
40
42
|
|
|
41
43
|
# MATLAB Proxy
|
|
42
44
|
[](https://github.com/mathworks/matlab-proxy/actions) [](https://pypi.python.org/pypi/matlab-proxy) [](https://codecov.io/gh/mathworks/matlab-proxy) [](https://pepy.tech/project/matlab-proxy)
|
|
@@ -119,6 +119,7 @@ matlab_proxy/icons/matlab.svg
|
|
|
119
119
|
matlab_proxy/matlab/evaluateUserMatlabCode.m
|
|
120
120
|
matlab_proxy/matlab/startup.m
|
|
121
121
|
matlab_proxy/util/__init__.py
|
|
122
|
+
matlab_proxy/util/cookie_jar.py
|
|
122
123
|
matlab_proxy/util/event_loop.py
|
|
123
124
|
matlab_proxy/util/list_servers.py
|
|
124
125
|
matlab_proxy/util/mw.py
|
|
@@ -146,6 +147,7 @@ matlab_proxy_manager/utils/__init__.py
|
|
|
146
147
|
matlab_proxy_manager/utils/auth.py
|
|
147
148
|
matlab_proxy_manager/utils/constants.py
|
|
148
149
|
matlab_proxy_manager/utils/environment_variables.py
|
|
150
|
+
matlab_proxy_manager/utils/exceptions.py
|
|
149
151
|
matlab_proxy_manager/utils/helpers.py
|
|
150
152
|
matlab_proxy_manager/utils/logger.py
|
|
151
153
|
matlab_proxy_manager/web/__init__.py
|
|
@@ -172,6 +174,7 @@ tests/unit/test_devel.py
|
|
|
172
174
|
tests/unit/test_non_dev_mode.py
|
|
173
175
|
tests/unit/test_settings.py
|
|
174
176
|
tests/unit/util/__init__.py
|
|
177
|
+
tests/unit/util/test_cookie_jar.py
|
|
175
178
|
tests/unit/util/test_mw.py
|
|
176
179
|
tests/unit/util/test_util.py
|
|
177
180
|
tests/unit/util/mwi/__init__.py
|