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.

Files changed (191) hide show
  1. {matlab_proxy-0.25.1/matlab_proxy.egg-info → matlab_proxy-0.26.0}/PKG-INFO +3 -1
  2. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/package-lock.json +20 -17
  3. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/app.py +66 -12
  4. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/constants.py +1 -0
  5. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/settings.py +22 -1
  6. matlab_proxy-0.26.0/matlab_proxy/util/cookie_jar.py +72 -0
  7. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/environment_variables.py +10 -0
  8. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0/matlab_proxy.egg-info}/PKG-INFO +3 -1
  9. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/SOURCES.txt +3 -0
  10. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/requires.txt +2 -0
  11. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/lib/api.py +156 -114
  12. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/server.py +5 -2
  13. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/constants.py +2 -1
  14. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/environment_variables.py +6 -1
  15. matlab_proxy-0.26.0/matlab_proxy_manager/utils/exceptions.py +45 -0
  16. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/helpers.py +2 -2
  17. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/logger.py +4 -1
  18. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/app.py +71 -19
  19. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/setup.py +5 -2
  20. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_app.py +116 -17
  21. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_settings.py +26 -6
  22. matlab_proxy-0.26.0/tests/unit/util/test_cookie_jar.py +252 -0
  23. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/LICENSE.md +0 -0
  24. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/MANIFEST.in +0 -0
  25. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/README.md +0 -0
  26. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/.eslintrc.json +0 -0
  27. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/.gitignore +0 -0
  28. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/README.md +0 -0
  29. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/eslint.config.js +0 -0
  30. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/index.css +0 -0
  31. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/index.html +0 -0
  32. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/package.json +0 -0
  33. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/public/favicon.ico +0 -0
  34. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/public/manifest.json +0 -0
  35. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/public/robots.txt +0 -0
  36. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/actionCreators/actionCreators.spec.js +0 -0
  37. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/actionCreators/index.js +0 -0
  38. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/actions/index.js +0 -0
  39. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/css/bootstrap.min.css +0 -0
  40. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/css/site7.min.css +0 -0
  41. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.eot +0 -0
  42. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.svg +0 -0
  43. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.ttf +0 -0
  44. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.woff +0 -0
  45. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/glyphicons-halflings-regular.woff2 +0 -0
  46. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-eps.svg +0 -0
  47. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-eps.ttf +0 -0
  48. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-eps.woff +0 -0
  49. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-pictograms.svg +0 -0
  50. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-pictograms.ttf +0 -0
  51. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks-pictograms.woff +0 -0
  52. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks.svg +0 -0
  53. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks.ttf +0 -0
  54. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/fonts/mathworks.woff +0 -0
  55. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/bug_reports/workaround.gif +0 -0
  56. {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
  57. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-header-account.svg +0 -0
  58. {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
  59. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-header-contact.svg +0 -0
  60. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/3p/images/responsive/global/ico-sprite.png +0 -0
  61. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/App.css +0 -0
  62. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/App.spec.jsx +0 -0
  63. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/IdleBufferTimeouts.spec.jsx +0 -0
  64. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/MATLAB-env-blur.png +0 -0
  65. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/App/index.jsx +0 -0
  66. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Confirmation/Confirmation.spec.jsx +0 -0
  67. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Confirmation/index.jsx +0 -0
  68. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/Controls.css +0 -0
  69. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/Controls.spec.jsx +0 -0
  70. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/feedback.svg +0 -0
  71. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/help.svg +0 -0
  72. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/index.jsx +0 -0
  73. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/restart.svg +0 -0
  74. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/sign-out.svg +0 -0
  75. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/start.svg +0 -0
  76. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/stop.svg +0 -0
  77. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Controls/terminate.svg +0 -0
  78. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/EntitlementSelector/EntitlementSelector.spec.jsx +0 -0
  79. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/EntitlementSelector/index.jsx +0 -0
  80. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Error/Error.css +0 -0
  81. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Error/Error.spec.jsx +0 -0
  82. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Error/index.jsx +0 -0
  83. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Help/Help.css +0 -0
  84. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Help/Help.spec.jsx +0 -0
  85. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Help/index.jsx +0 -0
  86. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Information/Information.css +0 -0
  87. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Information/Information.spec.jsx +0 -0
  88. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Information/index.jsx +0 -0
  89. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/ExistingLicense.css +0 -0
  90. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/ExistingLicense.jsx +0 -0
  91. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/LicenseGatherer.spec.jsx +0 -0
  92. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/LicensingGatherer.css +0 -0
  93. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/MHLM.jsx +0 -0
  94. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/NLM.jsx +0 -0
  95. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/LicensingGatherer/index.jsx +0 -0
  96. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/MatlabJsd/MatlabJsd.css +0 -0
  97. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/MatlabJsd/MatlabJsd.spec.jsx +0 -0
  98. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/MatlabJsd/index.jsx +0 -0
  99. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Overlay/Overlay.css +0 -0
  100. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Overlay/Overlay.spec.jsx +0 -0
  101. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/Overlay/index.jsx +0 -0
  102. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/OverlayTrigger.css +0 -0
  103. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/OverlayTrigger.spec.jsx +0 -0
  104. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/ResizeOverlayTrigger.spec.jsx +0 -0
  105. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/arrow.svg +0 -0
  106. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/gripper.svg +0 -0
  107. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/index.jsx +0 -0
  108. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/trigger-error.svg +0 -0
  109. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/OverlayTrigger/trigger-ok.svg +0 -0
  110. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/ShutdownWarning/ShutdownWarning.css +0 -0
  111. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/components/ShutdownWarning/index.jsx +0 -0
  112. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/constants.js +0 -0
  113. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/main.jsx +0 -0
  114. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/reducers/index.js +0 -0
  115. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/reducers/reducers.spec.js +0 -0
  116. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/selectors/index.js +0 -0
  117. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/selectors/selectors.spec.js +0 -0
  118. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/setupTests.js +0 -0
  119. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/test/utils/react-test.jsx +0 -0
  120. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/test/utils/responses.js +0 -0
  121. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/src/test/utils/state.js +0 -0
  122. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/gui/vite.config.js +0 -0
  123. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/__init__.py +0 -0
  124. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/app_state.py +0 -0
  125. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/default_configuration.py +0 -0
  126. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/devel.py +0 -0
  127. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/icons/matlab.svg +0 -0
  128. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/matlab/evaluateUserMatlabCode.m +0 -0
  129. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/matlab/startup.m +0 -0
  130. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/__init__.py +0 -0
  131. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/event_loop.py +0 -0
  132. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/list_servers.py +0 -0
  133. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mw.py +0 -0
  134. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/__init__.py +0 -0
  135. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/custom_http_headers.py +0 -0
  136. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/download.py +0 -0
  137. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/embedded_connector/__init__.py +0 -0
  138. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/embedded_connector/helpers.py +0 -0
  139. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/embedded_connector/request.py +0 -0
  140. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/exceptions.py +0 -0
  141. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/logger.py +0 -0
  142. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/token_auth.py +0 -0
  143. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/mwi/validators.py +0 -0
  144. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/system.py +0 -0
  145. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy/util/windows.py +0 -0
  146. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/dependency_links.txt +0 -0
  147. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/entry_points.txt +0 -0
  148. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/not-zip-safe +0 -0
  149. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy.egg-info/top_level.txt +0 -0
  150. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/__init__.py +0 -0
  151. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/lib/__init__.py +0 -0
  152. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/__init__.py +0 -0
  153. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/file_repository.py +0 -0
  154. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/storage/interface.py +0 -0
  155. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/__init__.py +0 -0
  156. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/utils/auth.py +0 -0
  157. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/__init__.py +0 -0
  158. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/monitor.py +0 -0
  159. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/matlab_proxy_manager/web/watcher.py +0 -0
  160. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/setup.cfg +0 -0
  161. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/__init__.py +0 -0
  162. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_with_license/__init__.py +0 -0
  163. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_with_license/conftest.py +0 -0
  164. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_with_license/test_http_end_points.py +0 -0
  165. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_without_license/__init__.py +0 -0
  166. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/integration_tests_without_license/conftest.py +0 -0
  167. {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
  168. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/utils/__init__.py +0 -0
  169. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/utils/integration_tests_utils.py +0 -0
  170. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/integration/utils/licensing.py +0 -0
  171. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/__init__.py +0 -0
  172. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/conftest.py +0 -0
  173. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_app_state.py +0 -0
  174. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_constants.py +0 -0
  175. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_ddux.py +0 -0
  176. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_devel.py +0 -0
  177. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/test_non_dev_mode.py +0 -0
  178. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/__init__.py +0 -0
  179. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/__init__.py +0 -0
  180. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/embedded_connector/__init__.py +0 -0
  181. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/embedded_connector/test_helpers.py +0 -0
  182. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/embedded_connector/test_request.py +0 -0
  183. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_custom_http_headers.py +0 -0
  184. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_download.py +0 -0
  185. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_logger.py +0 -0
  186. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_token_auth.py +0 -0
  187. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/mwi/test_validators.py +0 -0
  188. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/test_mw.py +0 -0
  189. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/unit/util/test_util.py +0 -0
  190. {matlab_proxy-0.25.1 → matlab_proxy-0.26.0}/tests/utils/__init__.py +0 -0
  191. {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.25.1
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
  [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/mathworks/matlab-proxy/run-tests.yml?branch=main&logo=github)](https://github.com/mathworks/matlab-proxy/actions)   [![PyPI badge](https://img.shields.io/pypi/v/matlab-proxy.svg?logo=pypi)](https://pypi.python.org/pypi/matlab-proxy)   [![codecov](https://codecov.io/gh/mathworks/matlab-proxy/branch/main/graph/badge.svg?token=ZW3SESKCSS)](https://codecov.io/gh/mathworks/matlab-proxy)   [![Downloads](https://static.pepy.tech/personalized-badge/matlab-proxy?period=month&units=international_system&left_color=grey&right_color=blue&left_text=PyPI%20downloads/month)](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.11",
3885
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
3886
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
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.3",
4674
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
4675
- "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
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
- "get-intrinsic": "^1.2.4",
4679
+ "es-errors": "^1.3.0",
4680
+ "get-intrinsic": "^1.2.6",
4680
4681
  "has-tostringtag": "^1.0.2",
4681
- "hasown": "^2.0.1"
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.1",
5099
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
5100
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
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.1",
5527
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
5528
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
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.1",
8922
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
8923
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
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 as e:
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 css, js, media
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(wsforward(ws_server, ws_client)),
626
- asyncio.create_task(wsforward(ws_client, ws_server)),
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
- headers.update(req.app["settings"]["mwi_custom_http_headers"])
673
- return web.Response(headers=headers, status=res.status, body=body)
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' with base_url: {app["settings"]["base_url"]} and app_port:{app["settings"]["app_port"]}.'
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 '' }Using the folder: {config_folder_path} for storing all matlab-proxy related session information"
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.25.1
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
  [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/mathworks/matlab-proxy/run-tests.yml?branch=main&logo=github)](https://github.com/mathworks/matlab-proxy/actions)   [![PyPI badge](https://img.shields.io/pypi/v/matlab-proxy.svg?logo=pypi)](https://pypi.python.org/pypi/matlab-proxy)   [![codecov](https://codecov.io/gh/mathworks/matlab-proxy/branch/main/graph/badge.svg?token=ZW3SESKCSS)](https://codecov.io/gh/mathworks/matlab-proxy)   [![Downloads](https://static.pepy.tech/personalized-badge/matlab-proxy?period=month&units=international_system&left_color=grey&right_color=blue&left_text=PyPI%20downloads/month)](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
@@ -9,6 +9,7 @@ requests
9
9
  [dev]
10
10
  aiohttp-devtools
11
11
  black
12
+ ruff
12
13
  pytest
13
14
  pytest-env
14
15
  pytest-cov
@@ -18,3 +19,4 @@ pytest-aiohttp
18
19
  psutil
19
20
  urllib3
20
21
  pytest-playwright
22
+ pytest-asyncio==0.24.0