perspective-python 3.0.1__tar.gz → 3.0.2__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.
Files changed (215) hide show
  1. {perspective_python-3.0.1 → perspective_python-3.0.2}/Cargo.lock +7 -7
  2. {perspective_python-3.0.1 → perspective_python-3.0.2}/PKG-INFO +1 -1
  3. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/__init__.py +5 -2
  4. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/psp_cffi.py +1 -1
  5. {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.2}/perspective/tests/core/test_async.py +0 -2
  6. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/server/test_server.py +6 -0
  7. {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.2}/perspective/tests/server/test_session.py +2 -2
  8. {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.2}/perspective/tests/table/test_table_pandas.py +7 -7
  9. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/viewer/viewer_traitlets.py +1 -1
  10. {perspective_python-3.0.1 → perspective_python-3.0.2}/pyproject.toml +1 -1
  11. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/Cargo.toml +1 -1
  12. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/Cargo.toml +3 -3
  13. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/__init__.py +5 -2
  14. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/psp_cffi.py +1 -1
  15. {perspective_python-3.0.1 → perspective_python-3.0.2/rust/perspective-python}/perspective/tests/core/test_async.py +0 -2
  16. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/server/test_server.py +6 -0
  17. {perspective_python-3.0.1 → perspective_python-3.0.2/rust/perspective-python}/perspective/tests/server/test_session.py +2 -2
  18. {perspective_python-3.0.1 → perspective_python-3.0.2/rust/perspective-python}/perspective/tests/table/test_table_pandas.py +7 -7
  19. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/viewer/viewer_traitlets.py +1 -1
  20. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/src/client/client_sync.rs +9 -4
  21. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/src/client/python.rs +10 -3
  22. {perspective_python-3.0.1.data → perspective_python-3.0.2.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/package.json +2 -2
  23. perspective_python-3.0.2.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.e467d3250ff509e7e58b.js +18 -0
  24. perspective_python-3.0.1.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/remoteEntry.2d479254617fc3abef25.js → perspective_python-3.0.2.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/remoteEntry.e6f57cf13491ae730f31.js +1 -1
  25. perspective_python-3.0.1.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.21bd87061737b28bdb5b.js +0 -18
  26. {perspective_python-3.0.1 → perspective_python-3.0.2}/Cargo.toml +0 -0
  27. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/extension/finos-perspective-nbextension.json +0 -0
  28. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/handlers/__init__.py +0 -0
  29. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/handlers/aiohttp.py +0 -0
  30. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/handlers/starlette.py +0 -0
  31. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/handlers/tornado.py +0 -0
  32. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/templates/exported_widget.html.jinja +0 -0
  33. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/__init__.py +0 -0
  34. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/conftest.py +0 -0
  35. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/core/__init__.py +0 -0
  36. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/core/test_threadpool.py +0 -0
  37. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/server/__init__.py +0 -0
  38. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/single_threaded/test_single_threaded.py +0 -0
  39. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/__init__.py +0 -0
  40. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/arrow/date32.arrow +0 -0
  41. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/arrow/date64.arrow +0 -0
  42. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/arrow/dict.arrow +0 -0
  43. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/arrow/dict_update.arrow +0 -0
  44. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/arrow/int_float_str.arrow +0 -0
  45. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/arrow/int_float_str_file.arrow +0 -0
  46. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/arrow/int_float_str_update.arrow +0 -0
  47. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/object_sequence.py +0 -0
  48. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_delete.py +0 -0
  49. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_exception.py +0 -0
  50. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_leaks.py +0 -0
  51. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_ports.py +0 -0
  52. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_remove.py +0 -0
  53. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_table.py +0 -0
  54. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_table_arrow.py +0 -0
  55. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_table_datetime.py +0 -0
  56. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_table_infer.py +0 -0
  57. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_table_limit.py +0 -0
  58. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_table_numpy.py +0 -0
  59. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_to_arrow.py +0 -0
  60. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_to_arrow_lz4.py +0 -0
  61. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_to_format.py +0 -0
  62. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_update.py +0 -0
  63. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_update_arrow.py +0 -0
  64. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_update_pandas.py +0 -0
  65. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_view.py +0 -0
  66. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/table/test_view_expression.py +0 -0
  67. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/viewer/__init__.py +0 -0
  68. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/viewer/test_validate.py +0 -0
  69. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/viewer/test_viewer.py +0 -0
  70. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/widget/__init__.py +0 -0
  71. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/widget/test_widget.py +0 -0
  72. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/tests/widget/test_widget_pandas.py +0 -0
  73. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/viewer/__init__.py +0 -0
  74. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/viewer/validate.py +0 -0
  75. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/viewer/viewer.py +0 -0
  76. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/widget/__init__.py +0 -0
  77. {perspective_python-3.0.1 → perspective_python-3.0.2}/perspective/widget/widget.py +0 -0
  78. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/build.rs +0 -0
  79. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/client/get_hosted_table_names.md +0 -0
  80. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/client/open_table.md +0 -0
  81. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/client/set_loop_callback.md +0 -0
  82. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/client/system_info.md +0 -0
  83. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/client/table.md +0 -0
  84. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/client/terminate.md +0 -0
  85. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/client.md +0 -0
  86. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/index.html +0 -0
  87. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/clear.md +0 -0
  88. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/columns.md +0 -0
  89. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/delete.md +0 -0
  90. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/get_client.md +0 -0
  91. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/get_features.md +0 -0
  92. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/get_index.md +0 -0
  93. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/get_limit.md +0 -0
  94. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/get_num_views.md +0 -0
  95. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/make_port.md +0 -0
  96. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/on_delete.md +0 -0
  97. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/remove.md +0 -0
  98. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/remove_delete.md +0 -0
  99. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/replace.md +0 -0
  100. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/schema.md +0 -0
  101. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/size.md +0 -0
  102. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/update.md +0 -0
  103. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/validate_expressions.md +0 -0
  104. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table/view.md +0 -0
  105. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/table.md +0 -0
  106. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/collapse.md +0 -0
  107. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/column_paths.md +0 -0
  108. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/delete.md +0 -0
  109. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/dimensions.md +0 -0
  110. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/expand.md +0 -0
  111. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/expression_schema.md +0 -0
  112. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/get_config.md +0 -0
  113. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/get_min_max.md +0 -0
  114. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/num_columns.md +0 -0
  115. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/num_rows.md +0 -0
  116. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/on_delete.md +0 -0
  117. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/on_update.md +0 -0
  118. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/remove_delete.md +0 -0
  119. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/remove_update.md +0 -0
  120. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/schema.md +0 -0
  121. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/set_depth.md +0 -0
  122. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/to_arrow.md +0 -0
  123. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/to_columns.md +0 -0
  124. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/to_columns_string.md +0 -0
  125. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/to_csv.md +0 -0
  126. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/to_json.md +0 -0
  127. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view/to_json_string.md +0 -0
  128. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/docs/view.md +0 -0
  129. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/client.rs +0 -0
  130. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/aggregates.rs +0 -0
  131. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/column_type.rs +0 -0
  132. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/expressions.rs +0 -0
  133. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/filters.rs +0 -0
  134. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/mod.rs +0 -0
  135. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/plugin.rs +0 -0
  136. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/sort.rs +0 -0
  137. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/config/view_config.rs +0 -0
  138. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/lib.rs +0 -0
  139. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/session.rs +0 -0
  140. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/table.rs +0 -0
  141. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/table_data.rs +0 -0
  142. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/utils/clone.rs +0 -0
  143. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/utils/logging.rs +0 -0
  144. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/utils/mod.rs +0 -0
  145. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/utils/tests/clone.rs +0 -0
  146. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/utils/tests/mod.rs +0 -0
  147. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-client/src/rust/view.rs +0 -0
  148. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/README.md +0 -0
  149. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/__init__.py +0 -0
  150. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/runtime/__init__.py +0 -0
  151. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/runtime/bench.py +0 -0
  152. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/runtime/perspective_benchmark.py +0 -0
  153. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/runtime/run_perspective_benchmark.py +0 -0
  154. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/tornado/__init__.py +0 -0
  155. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/tornado/async_server.py +0 -0
  156. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/tornado/bench.py +0 -0
  157. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/tornado/distributed_mode.py +0 -0
  158. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/tornado/server/new_api.py +0 -0
  159. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/tornado/server/old_api.py +0 -0
  160. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/bench/tornado/server_mode.py +0 -0
  161. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/build/main.rs +0 -0
  162. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/build/psp.rs +0 -0
  163. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/docs/index.html +0 -0
  164. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/docs/lib.md +0 -0
  165. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/handlers/__init__.py +0 -0
  166. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/handlers/aiohttp.py +0 -0
  167. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/handlers/starlette.py +0 -0
  168. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/handlers/tornado.py +0 -0
  169. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/__init__.py +0 -0
  170. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/conftest.py +0 -0
  171. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/core/__init__.py +0 -0
  172. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/core/test_threadpool.py +0 -0
  173. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/server/__init__.py +0 -0
  174. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/single_threaded/test_single_threaded.py +0 -0
  175. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/__init__.py +0 -0
  176. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/object_sequence.py +0 -0
  177. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_delete.py +0 -0
  178. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_exception.py +0 -0
  179. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_leaks.py +0 -0
  180. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_ports.py +0 -0
  181. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_remove.py +0 -0
  182. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_table.py +0 -0
  183. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_table_arrow.py +0 -0
  184. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_table_datetime.py +0 -0
  185. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_table_infer.py +0 -0
  186. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_table_limit.py +0 -0
  187. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_table_numpy.py +0 -0
  188. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_to_arrow.py +0 -0
  189. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_to_arrow_lz4.py +0 -0
  190. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_to_format.py +0 -0
  191. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_update.py +0 -0
  192. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_update_arrow.py +0 -0
  193. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_update_pandas.py +0 -0
  194. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_view.py +0 -0
  195. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/table/test_view_expression.py +0 -0
  196. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/viewer/__init__.py +0 -0
  197. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/viewer/test_validate.py +0 -0
  198. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/viewer/test_viewer.py +0 -0
  199. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/widget/__init__.py +0 -0
  200. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/widget/test_widget.py +0 -0
  201. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/tests/widget/test_widget_pandas.py +0 -0
  202. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/viewer/__init__.py +0 -0
  203. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/viewer/validate.py +0 -0
  204. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/viewer/viewer.py +0 -0
  205. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/widget/__init__.py +0 -0
  206. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/perspective/widget/widget.py +0 -0
  207. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/src/client/mod.rs +0 -0
  208. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/src/lib.rs +0 -0
  209. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/src/server/mod.rs +0 -0
  210. {perspective_python-3.0.1 → perspective_python-3.0.2}/rust/perspective-python/src/server/server_sync.rs +0 -0
  211. {perspective_python-3.0.1.data → perspective_python-3.0.2.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/install.json +0 -0
  212. /perspective_python-3.0.1.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.21bd87061737b28bdb5b.js.LICENSE.txt → /perspective_python-3.0.2.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.e467d3250ff509e7e58b.js.LICENSE.txt +0 -0
  213. {perspective_python-3.0.1.data → perspective_python-3.0.2.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/905.bda9d13f81bc1d4190ff.js +0 -0
  214. {perspective_python-3.0.1.data → perspective_python-3.0.2.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/style.js +0 -0
  215. {perspective_python-3.0.1.data → perspective_python-3.0.2.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/third-party-licenses.json +0 -0
@@ -1783,7 +1783,7 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
1783
1783
 
1784
1784
  [[package]]
1785
1785
  name = "perspective"
1786
- version = "3.0.1"
1786
+ version = "3.0.2"
1787
1787
  dependencies = [
1788
1788
  "async-lock",
1789
1789
  "axum",
@@ -1823,7 +1823,7 @@ dependencies = [
1823
1823
 
1824
1824
  [[package]]
1825
1825
  name = "perspective-client"
1826
- version = "3.0.1"
1826
+ version = "3.0.2"
1827
1827
  dependencies = [
1828
1828
  "async-lock",
1829
1829
  "futures",
@@ -1845,7 +1845,7 @@ dependencies = [
1845
1845
 
1846
1846
  [[package]]
1847
1847
  name = "perspective-js"
1848
- version = "3.0.1"
1848
+ version = "3.0.2"
1849
1849
  dependencies = [
1850
1850
  "anyhow",
1851
1851
  "base64 0.13.1",
@@ -1874,7 +1874,7 @@ dependencies = [
1874
1874
 
1875
1875
  [[package]]
1876
1876
  name = "perspective-lint"
1877
- version = "3.0.1"
1877
+ version = "3.0.2"
1878
1878
  dependencies = [
1879
1879
  "glob",
1880
1880
  "yew-fmt",
@@ -1882,7 +1882,7 @@ dependencies = [
1882
1882
 
1883
1883
  [[package]]
1884
1884
  name = "perspective-python"
1885
- version = "3.0.1"
1885
+ version = "3.0.2"
1886
1886
  dependencies = [
1887
1887
  "async-lock",
1888
1888
  "cmake",
@@ -1902,7 +1902,7 @@ dependencies = [
1902
1902
 
1903
1903
  [[package]]
1904
1904
  name = "perspective-server"
1905
- version = "3.0.1"
1905
+ version = "3.0.2"
1906
1906
  dependencies = [
1907
1907
  "async-lock",
1908
1908
  "base64 0.22.1",
@@ -1918,7 +1918,7 @@ dependencies = [
1918
1918
 
1919
1919
  [[package]]
1920
1920
  name = "perspective-viewer"
1921
- version = "3.0.1"
1921
+ version = "3.0.2"
1922
1922
  dependencies = [
1923
1923
  "anyhow",
1924
1924
  "async-lock",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: perspective-python
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: Programming Language :: Python :: Implementation :: CPython
@@ -10,7 +10,7 @@
10
10
  # ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
11
  # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
12
 
13
- __version__ = "3.0.1"
13
+ __version__ = "3.0.2"
14
14
  __all__ = [
15
15
  "_jupyter_labextension_paths",
16
16
  "PerspectiveError",
@@ -71,8 +71,11 @@ class Client(PySyncClient):
71
71
  def handle_response(bytes):
72
72
  client.handle_response(bytes)
73
73
 
74
+ def handle_close():
75
+ session.close()
76
+
74
77
  session = server.new_session(handle_response)
75
- client = Client(handle_request)
78
+ client = Client(handle_request, handle_close)
76
79
  return client
77
80
 
78
81
 
@@ -77,7 +77,7 @@ class Session:
77
77
  self._server: "ServerBase" = server
78
78
  self._session_id = lib.psp_new_session(server._server)
79
79
 
80
- def __del__(self):
80
+ def close(self):
81
81
  lib.psp_close_session(self._server._server, self._session_id)
82
82
 
83
83
  def handle_request(self, bytes_msg):
@@ -48,7 +48,6 @@ class TestAsync(object):
48
48
  @classmethod
49
49
  def setup_class(cls):
50
50
  cls.loop = tornado.ioloop.IOLoop()
51
- cls.loop.make_current()
52
51
  cls.thread = threading.Thread(target=cls.loop.start)
53
52
  cls.thread.daemon = True
54
53
  cls.thread.start()
@@ -56,7 +55,6 @@ class TestAsync(object):
56
55
  @classmethod
57
56
  def teardown_class(cls):
58
57
  cls.loop.add_callback(lambda: tornado.ioloop.IOLoop.current().stop())
59
- cls.loop.clear_current()
60
58
  cls.thread.join()
61
59
  cls.loop.close(all_fds=True)
62
60
 
@@ -43,6 +43,12 @@ class TestServer(object):
43
43
  table2 = client.open_table("table1")
44
44
  assert table2.schema() == {"a": "integer", "b": "string"}
45
45
 
46
+ def test_session_close(self):
47
+ server = Server()
48
+ client = Client.from_server(server)
49
+ client.table(data)
50
+ client.terminate()
51
+
46
52
  def test_server_host(self):
47
53
  server = Server()
48
54
  client = Client.from_server(server)
@@ -32,7 +32,7 @@ class TestProxySession(object):
32
32
  sub_client.handle_response(bytes)
33
33
 
34
34
  sub_session = ProxySession(client, handle_response)
35
- sub_client = Client(handle_request)
35
+ sub_client = Client(handle_request, sub_session.close)
36
36
  table = sub_client.table(data, name="table1")
37
37
  assert table.schema() == {"a": "integer", "b": "string"}
38
38
 
@@ -47,7 +47,7 @@ class TestProxySession(object):
47
47
  sub_client.handle_response(bytes)
48
48
 
49
49
  sub_session = ProxySession(client, handle_response)
50
- sub_client = Client(handle_request)
50
+ sub_client = Client(handle_request, sub_session.close)
51
51
  table = sub_client.table(data, name="table1")
52
52
  table2 = client.open_table("table1")
53
53
  assert table.size() == 3
@@ -117,7 +117,7 @@ class TestTablePandas(object):
117
117
 
118
118
  @mark.skip(reason="pyarrow dataframe does not support date inference")
119
119
  def test_table_dataframe_infer_date(self, util):
120
- data = util.make_dataframe(freq="M")
120
+ data = util.make_dataframe(freq="ME")
121
121
 
122
122
  tbl = Table(data)
123
123
  assert tbl.size() == 10
@@ -143,7 +143,7 @@ class TestTablePandas(object):
143
143
  ]
144
144
 
145
145
  def test_table_dataframe_infer_date_fixed(self, util):
146
- data = util.make_dataframe(freq="M")
146
+ data = util.make_dataframe(freq="ME")
147
147
 
148
148
  tbl = Table(data)
149
149
  assert tbl.size() == 10
@@ -169,7 +169,7 @@ class TestTablePandas(object):
169
169
  ]
170
170
 
171
171
  def test_table_dataframe_infer_time(self, util):
172
- data = util.make_dataframe(freq="H")
172
+ data = util.make_dataframe(freq="h")
173
173
 
174
174
  tbl = Table(data)
175
175
  assert tbl.size() == 10
@@ -196,7 +196,7 @@ class TestTablePandas(object):
196
196
 
197
197
  @mark.skip(reason="pyarrow dataframe does not support date inference")
198
198
  def test_table_dataframe_year_start_index(self, util):
199
- data = util.make_dataframe(freq="AS")
199
+ data = util.make_dataframe(freq="YS")
200
200
 
201
201
  tbl = Table(data)
202
202
  assert tbl.size() == 10
@@ -222,7 +222,7 @@ class TestTablePandas(object):
222
222
  ]
223
223
 
224
224
  def test_table_dataframe_year_start_index_fixed(self, util):
225
- data = util.make_dataframe(freq="AS")
225
+ data = util.make_dataframe(freq="YS")
226
226
 
227
227
  tbl = Table(data)
228
228
  assert tbl.size() == 10
@@ -249,7 +249,7 @@ class TestTablePandas(object):
249
249
 
250
250
  @mark.skip(reason="pyarrow dataframe does not support date inference")
251
251
  def test_table_dataframe_quarter_index(self, util):
252
- data = util.make_dataframe(size=4, freq="Q")
252
+ data = util.make_dataframe(size=4, freq="QE")
253
253
 
254
254
  tbl = Table(data)
255
255
  assert tbl.size() == 4
@@ -269,7 +269,7 @@ class TestTablePandas(object):
269
269
  ]
270
270
 
271
271
  def test_table_dataframe_quarter_index_fixed(self, util):
272
- data = util.make_dataframe(size=4, freq="Q")
272
+ data = util.make_dataframe(size=4, freq="QE")
273
273
 
274
274
  tbl = Table(data)
275
275
  assert tbl.size() == 4
@@ -52,7 +52,7 @@ class PerspectiveTraitlets(HasTraits):
52
52
  table_name = Unicode(None, allow_none=True).tag(sync=True)
53
53
 
54
54
  server = Bool(False).tag(sync=True)
55
- binding_mode = Enum(("server", "client-server"), default="server").tag(sync=True)
55
+ binding_mode = Enum(("server", "client-server")).tag(default="server", sync=True)
56
56
  title = Unicode(None, allow_none=True).tag(sync=True)
57
57
  version = Unicode(__version__).tag(sync=True)
58
58
 
@@ -37,7 +37,7 @@ dependencies = ["Jinja2>=2.0,<4", "ipywidgets>=7.5.1,<9"]
37
37
 
38
38
  [tool.maturin]
39
39
  module-name = "perspective"
40
- data = "perspective_python-3.0.1.data"
40
+ data = "perspective_python-3.0.2.data"
41
41
  features = ["pyo3/extension-module"]
42
42
  include = [
43
43
  { path = "perspective/*libpsp.so", format = "wheel" },
@@ -12,7 +12,7 @@
12
12
 
13
13
  [package]
14
14
  name = "perspective-client"
15
- version = "3.0.1"
15
+ version = "3.0.2"
16
16
  authors = ["Andrew Stein <steinlink@gmail.com>"]
17
17
  edition = "2021"
18
18
  description = "A data visualization and analytics component, especially well-suited for large and/or streaming datasets."
@@ -12,7 +12,7 @@
12
12
 
13
13
  [package]
14
14
  name = "perspective-python"
15
- version = "3.0.1"
15
+ version = "3.0.2"
16
16
  edition = "2021"
17
17
  description = "A data visualization and analytics component, especially well-suited for large and/or streaming datasets."
18
18
  repository = "https://github.com/finos/perspective"
@@ -54,8 +54,8 @@ python-config-rs = "0.1.2"
54
54
 
55
55
  [dependencies]
56
56
  async-lock = "2.5.0"
57
- perspective-client = { version = "3.0.1", path = "../perspective-client" }
58
- # perspective-server = { version = "3.0.1", path = "../perspective-server" }
57
+ perspective-client = { version = "3.0.2", path = "../perspective-client" }
58
+ # perspective-server = { version = "3.0.2", path = "../perspective-server" }
59
59
  pollster = "0.3.0"
60
60
  extend = "1.1.2"
61
61
  futures = "0.3.28"
@@ -10,7 +10,7 @@
10
10
  # ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
11
  # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
12
 
13
- __version__ = "3.0.1"
13
+ __version__ = "3.0.2"
14
14
  __all__ = [
15
15
  "_jupyter_labextension_paths",
16
16
  "PerspectiveError",
@@ -71,8 +71,11 @@ class Client(PySyncClient):
71
71
  def handle_response(bytes):
72
72
  client.handle_response(bytes)
73
73
 
74
+ def handle_close():
75
+ session.close()
76
+
74
77
  session = server.new_session(handle_response)
75
- client = Client(handle_request)
78
+ client = Client(handle_request, handle_close)
76
79
  return client
77
80
 
78
81
 
@@ -77,7 +77,7 @@ class Session:
77
77
  self._server: "ServerBase" = server
78
78
  self._session_id = lib.psp_new_session(server._server)
79
79
 
80
- def __del__(self):
80
+ def close(self):
81
81
  lib.psp_close_session(self._server._server, self._session_id)
82
82
 
83
83
  def handle_request(self, bytes_msg):
@@ -48,7 +48,6 @@ class TestAsync(object):
48
48
  @classmethod
49
49
  def setup_class(cls):
50
50
  cls.loop = tornado.ioloop.IOLoop()
51
- cls.loop.make_current()
52
51
  cls.thread = threading.Thread(target=cls.loop.start)
53
52
  cls.thread.daemon = True
54
53
  cls.thread.start()
@@ -56,7 +55,6 @@ class TestAsync(object):
56
55
  @classmethod
57
56
  def teardown_class(cls):
58
57
  cls.loop.add_callback(lambda: tornado.ioloop.IOLoop.current().stop())
59
- cls.loop.clear_current()
60
58
  cls.thread.join()
61
59
  cls.loop.close(all_fds=True)
62
60
 
@@ -43,6 +43,12 @@ class TestServer(object):
43
43
  table2 = client.open_table("table1")
44
44
  assert table2.schema() == {"a": "integer", "b": "string"}
45
45
 
46
+ def test_session_close(self):
47
+ server = Server()
48
+ client = Client.from_server(server)
49
+ client.table(data)
50
+ client.terminate()
51
+
46
52
  def test_server_host(self):
47
53
  server = Server()
48
54
  client = Client.from_server(server)
@@ -32,7 +32,7 @@ class TestProxySession(object):
32
32
  sub_client.handle_response(bytes)
33
33
 
34
34
  sub_session = ProxySession(client, handle_response)
35
- sub_client = Client(handle_request)
35
+ sub_client = Client(handle_request, sub_session.close)
36
36
  table = sub_client.table(data, name="table1")
37
37
  assert table.schema() == {"a": "integer", "b": "string"}
38
38
 
@@ -47,7 +47,7 @@ class TestProxySession(object):
47
47
  sub_client.handle_response(bytes)
48
48
 
49
49
  sub_session = ProxySession(client, handle_response)
50
- sub_client = Client(handle_request)
50
+ sub_client = Client(handle_request, sub_session.close)
51
51
  table = sub_client.table(data, name="table1")
52
52
  table2 = client.open_table("table1")
53
53
  assert table.size() == 3
@@ -117,7 +117,7 @@ class TestTablePandas(object):
117
117
 
118
118
  @mark.skip(reason="pyarrow dataframe does not support date inference")
119
119
  def test_table_dataframe_infer_date(self, util):
120
- data = util.make_dataframe(freq="M")
120
+ data = util.make_dataframe(freq="ME")
121
121
 
122
122
  tbl = Table(data)
123
123
  assert tbl.size() == 10
@@ -143,7 +143,7 @@ class TestTablePandas(object):
143
143
  ]
144
144
 
145
145
  def test_table_dataframe_infer_date_fixed(self, util):
146
- data = util.make_dataframe(freq="M")
146
+ data = util.make_dataframe(freq="ME")
147
147
 
148
148
  tbl = Table(data)
149
149
  assert tbl.size() == 10
@@ -169,7 +169,7 @@ class TestTablePandas(object):
169
169
  ]
170
170
 
171
171
  def test_table_dataframe_infer_time(self, util):
172
- data = util.make_dataframe(freq="H")
172
+ data = util.make_dataframe(freq="h")
173
173
 
174
174
  tbl = Table(data)
175
175
  assert tbl.size() == 10
@@ -196,7 +196,7 @@ class TestTablePandas(object):
196
196
 
197
197
  @mark.skip(reason="pyarrow dataframe does not support date inference")
198
198
  def test_table_dataframe_year_start_index(self, util):
199
- data = util.make_dataframe(freq="AS")
199
+ data = util.make_dataframe(freq="YS")
200
200
 
201
201
  tbl = Table(data)
202
202
  assert tbl.size() == 10
@@ -222,7 +222,7 @@ class TestTablePandas(object):
222
222
  ]
223
223
 
224
224
  def test_table_dataframe_year_start_index_fixed(self, util):
225
- data = util.make_dataframe(freq="AS")
225
+ data = util.make_dataframe(freq="YS")
226
226
 
227
227
  tbl = Table(data)
228
228
  assert tbl.size() == 10
@@ -249,7 +249,7 @@ class TestTablePandas(object):
249
249
 
250
250
  @mark.skip(reason="pyarrow dataframe does not support date inference")
251
251
  def test_table_dataframe_quarter_index(self, util):
252
- data = util.make_dataframe(size=4, freq="Q")
252
+ data = util.make_dataframe(size=4, freq="QE")
253
253
 
254
254
  tbl = Table(data)
255
255
  assert tbl.size() == 4
@@ -269,7 +269,7 @@ class TestTablePandas(object):
269
269
  ]
270
270
 
271
271
  def test_table_dataframe_quarter_index_fixed(self, util):
272
- data = util.make_dataframe(size=4, freq="Q")
272
+ data = util.make_dataframe(size=4, freq="QE")
273
273
 
274
274
  tbl = Table(data)
275
275
  assert tbl.size() == 4
@@ -52,7 +52,7 @@ class PerspectiveTraitlets(HasTraits):
52
52
  table_name = Unicode(None, allow_none=True).tag(sync=True)
53
53
 
54
54
  server = Bool(False).tag(sync=True)
55
- binding_mode = Enum(("server", "client-server"), default="server").tag(sync=True)
55
+ binding_mode = Enum(("server", "client-server")).tag(default="server", sync=True)
56
56
  title = Unicode(None, allow_none=True).tag(sync=True)
57
57
  version = Unicode(__version__).tag(sync=True)
58
58
 
@@ -84,8 +84,8 @@ pub struct Client(PyClient);
84
84
  #[pymethods]
85
85
  impl Client {
86
86
  #[new]
87
- pub fn new(callback: Py<PyAny>) -> PyResult<Self> {
88
- let client = PyClient::new(callback);
87
+ pub fn new(handle_request: Py<PyAny>, close_cb: Py<PyAny>) -> PyResult<Self> {
88
+ let client = PyClient::new(handle_request, close_cb);
89
89
  Ok(Client(client))
90
90
  }
91
91
 
@@ -124,6 +124,11 @@ impl Client {
124
124
  pub fn set_loop_callback(&self, loop_cb: Py<PyAny>) -> PyResult<()> {
125
125
  self.0.set_loop_cb(loop_cb).block_on()
126
126
  }
127
+
128
+ #[doc = crate::inherit_docs!("client/terminate.md")]
129
+ pub fn terminate(&self, py: Python<'_>) -> PyResult<Py<PyAny>> {
130
+ self.0.terminate(py).block_on()
131
+ }
127
132
  }
128
133
 
129
134
  #[doc = crate::inherit_docs!("table.md")]
@@ -140,8 +145,8 @@ impl Table {
140
145
  }
141
146
 
142
147
  #[doc = crate::inherit_docs!("table/get_client.md")]
143
- pub fn get_client(&self, loop_cb: Option<Py<PyAny>>) -> Client {
144
- Client(self.0.get_client(loop_cb).block_on())
148
+ pub fn get_client(&self) -> Client {
149
+ Client(self.0.get_client().block_on())
145
150
  }
146
151
 
147
152
  #[doc = crate::inherit_docs!("table/get_client.md")]
@@ -32,6 +32,7 @@ use pythonize::depythonize_bound;
32
32
  pub struct PyClient {
33
33
  pub(crate) client: Client,
34
34
  loop_cb: Arc<RwLock<Option<Py<PyAny>>>>,
35
+ close_cb: Py<PyAny>,
35
36
  }
36
37
 
37
38
  #[extend::ext]
@@ -263,7 +264,7 @@ fn pandas_to_arrow_bytes<'py>(
263
264
  }
264
265
 
265
266
  impl PyClient {
266
- pub fn new(handle_request: Py<PyAny>) -> Self {
267
+ pub fn new(handle_request: Py<PyAny>, handle_close: Py<PyAny>) -> Self {
267
268
  let client = Client::new_with_callback({
268
269
  move |msg| {
269
270
  clone!(handle_request);
@@ -280,6 +281,7 @@ impl PyClient {
280
281
  PyClient {
281
282
  client,
282
283
  loop_cb: Arc::default(),
284
+ close_cb: handle_close,
283
285
  }
284
286
  }
285
287
 
@@ -359,6 +361,10 @@ impl PyClient {
359
361
  *self.loop_cb.write().await = Some(loop_cb);
360
362
  Ok(())
361
363
  }
364
+
365
+ pub async fn terminate(&self, py: Python<'_>) -> PyResult<Py<PyAny>> {
366
+ self.close_cb.call0(py)
367
+ }
362
368
  }
363
369
 
364
370
  #[derive(Clone)]
@@ -374,10 +380,11 @@ impl PyTable {
374
380
  self.table.get_index()
375
381
  }
376
382
 
377
- pub async fn get_client(&self, loop_cb: Option<Py<PyAny>>) -> PyClient {
383
+ pub async fn get_client(&self) -> PyClient {
378
384
  PyClient {
379
385
  client: self.table.get_client(),
380
- loop_cb: Arc::new(RwLock::new(loop_cb)),
386
+ loop_cb: self.client.loop_cb.clone(),
387
+ close_cb: self.client.close_cb.clone(),
381
388
  }
382
389
  }
383
390
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/perspective-jupyterlab",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "description": "A Jupyterlab extension for the Perspective library, designed to be used with perspective-python.",
5
5
  "files": [
6
6
  "dist/**/*",
@@ -72,7 +72,7 @@
72
72
  }
73
73
  },
74
74
  "_build": {
75
- "load": "static/remoteEntry.2d479254617fc3abef25.js",
75
+ "load": "static/remoteEntry.e6f57cf13491ae730f31.js",
76
76
  "extension": "./extension",
77
77
  "style": "./style"
78
78
  }