perspective-python 3.0.1__tar.gz → 3.0.3__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 (229) hide show
  1. {perspective_python-3.0.1 → perspective_python-3.0.3}/Cargo.lock +11 -12
  2. {perspective_python-3.0.1 → perspective_python-3.0.3}/PKG-INFO +1 -1
  3. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/__init__.py +8 -4
  4. {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3}/perspective/tests/core/test_async.py +0 -2
  5. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/server/test_server.py +6 -0
  6. {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3}/perspective/tests/server/test_session.py +2 -2
  7. {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3}/perspective/tests/table/test_table_pandas.py +7 -7
  8. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/viewer_traitlets.py +1 -1
  9. {perspective_python-3.0.1 → perspective_python-3.0.3}/pyproject.toml +1 -1
  10. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/Cargo.toml +1 -1
  11. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/plugin.rs +6 -4
  12. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/session.rs +6 -6
  13. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/table.rs +1 -3
  14. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/Cargo.toml +9 -10
  15. perspective_python-3.0.3/rust/perspective-python/build.rs +31 -0
  16. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/__init__.py +8 -4
  17. {perspective_python-3.0.1 → perspective_python-3.0.3/rust/perspective-python}/perspective/tests/core/test_async.py +0 -2
  18. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/server/test_server.py +6 -0
  19. {perspective_python-3.0.1 → perspective_python-3.0.3/rust/perspective-python}/perspective/tests/server/test_session.py +2 -2
  20. {perspective_python-3.0.1 → perspective_python-3.0.3/rust/perspective-python}/perspective/tests/table/test_table_pandas.py +7 -7
  21. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/viewer_traitlets.py +1 -1
  22. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/client/client_sync.rs +9 -5
  23. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/client/python.rs +10 -3
  24. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/lib.rs +3 -3
  25. perspective_python-3.0.3/rust/perspective-server/Cargo.toml +57 -0
  26. perspective_python-3.0.3/rust/perspective-server/build/main.rs +41 -0
  27. {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3/rust/perspective-server}/build/psp.rs +3 -30
  28. perspective_python-3.0.3/rust/perspective-server/docs/architecture.dot +197 -0
  29. perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub1.dot +66 -0
  30. perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub1.svg +60 -0
  31. perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub2.dot +66 -0
  32. perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub2.svg +67 -0
  33. perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub3.dot +97 -0
  34. perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub3.svg +97 -0
  35. perspective_python-3.0.3/rust/perspective-server/docs/architecture.svg +250 -0
  36. perspective_python-3.0.3/rust/perspective-server/docs/lib.md +167 -0
  37. perspective_python-3.0.3/rust/perspective-server/src/ffi.rs +147 -0
  38. perspective_python-3.0.3/rust/perspective-server/src/lib.rs +199 -0
  39. {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/package.json +2 -2
  40. perspective_python-3.0.3.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.672dd140fd7665c40d72.js +18 -0
  41. perspective_python-3.0.1.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/remoteEntry.2d479254617fc3abef25.js → perspective_python-3.0.3.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/remoteEntry.306cf9fefef20080ad54.js +1 -1
  42. perspective_python-3.0.1/perspective/psp_cffi.py +0 -127
  43. perspective_python-3.0.1/rust/perspective-python/build/main.rs +0 -85
  44. perspective_python-3.0.1/rust/perspective-python/perspective/psp_cffi.py +0 -127
  45. perspective_python-3.0.1.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.21bd87061737b28bdb5b.js +0 -18
  46. {perspective_python-3.0.1 → perspective_python-3.0.3}/Cargo.toml +0 -0
  47. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/extension/finos-perspective-nbextension.json +0 -0
  48. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/__init__.py +0 -0
  49. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/aiohttp.py +0 -0
  50. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/starlette.py +0 -0
  51. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/tornado.py +0 -0
  52. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/templates/exported_widget.html.jinja +0 -0
  53. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/__init__.py +0 -0
  54. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/conftest.py +0 -0
  55. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/core/__init__.py +0 -0
  56. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/core/test_threadpool.py +0 -0
  57. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/server/__init__.py +0 -0
  58. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/single_threaded/test_single_threaded.py +0 -0
  59. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/__init__.py +0 -0
  60. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/date32.arrow +0 -0
  61. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/date64.arrow +0 -0
  62. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/dict.arrow +0 -0
  63. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/dict_update.arrow +0 -0
  64. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/int_float_str.arrow +0 -0
  65. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/int_float_str_file.arrow +0 -0
  66. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/int_float_str_update.arrow +0 -0
  67. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/object_sequence.py +0 -0
  68. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_delete.py +0 -0
  69. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_exception.py +0 -0
  70. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_leaks.py +0 -0
  71. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_ports.py +0 -0
  72. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_remove.py +0 -0
  73. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table.py +0 -0
  74. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_arrow.py +0 -0
  75. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_datetime.py +0 -0
  76. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_infer.py +0 -0
  77. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_limit.py +0 -0
  78. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_numpy.py +0 -0
  79. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_to_arrow.py +0 -0
  80. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_to_arrow_lz4.py +0 -0
  81. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_to_format.py +0 -0
  82. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_update.py +0 -0
  83. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_update_arrow.py +0 -0
  84. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_update_pandas.py +0 -0
  85. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_view.py +0 -0
  86. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_view_expression.py +0 -0
  87. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/viewer/__init__.py +0 -0
  88. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/viewer/test_validate.py +0 -0
  89. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/viewer/test_viewer.py +0 -0
  90. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/widget/__init__.py +0 -0
  91. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/widget/test_widget.py +0 -0
  92. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/widget/test_widget_pandas.py +0 -0
  93. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/__init__.py +0 -0
  94. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/validate.py +0 -0
  95. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/viewer.py +0 -0
  96. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/widget/__init__.py +0 -0
  97. {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/widget/widget.py +0 -0
  98. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/build.rs +0 -0
  99. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/get_hosted_table_names.md +0 -0
  100. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/open_table.md +0 -0
  101. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/set_loop_callback.md +0 -0
  102. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/system_info.md +0 -0
  103. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/table.md +0 -0
  104. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/terminate.md +0 -0
  105. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client.md +0 -0
  106. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/index.html +0 -0
  107. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/clear.md +0 -0
  108. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/columns.md +0 -0
  109. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/delete.md +0 -0
  110. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_client.md +0 -0
  111. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_features.md +0 -0
  112. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_index.md +0 -0
  113. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_limit.md +0 -0
  114. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_num_views.md +0 -0
  115. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/make_port.md +0 -0
  116. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/on_delete.md +0 -0
  117. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/remove.md +0 -0
  118. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/remove_delete.md +0 -0
  119. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/replace.md +0 -0
  120. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/schema.md +0 -0
  121. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/size.md +0 -0
  122. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/update.md +0 -0
  123. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/validate_expressions.md +0 -0
  124. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/view.md +0 -0
  125. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table.md +0 -0
  126. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/collapse.md +0 -0
  127. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/column_paths.md +0 -0
  128. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/delete.md +0 -0
  129. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/dimensions.md +0 -0
  130. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/expand.md +0 -0
  131. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/expression_schema.md +0 -0
  132. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/get_config.md +0 -0
  133. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/get_min_max.md +0 -0
  134. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/num_columns.md +0 -0
  135. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/num_rows.md +0 -0
  136. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/on_delete.md +0 -0
  137. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/on_update.md +0 -0
  138. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/remove_delete.md +0 -0
  139. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/remove_update.md +0 -0
  140. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/schema.md +0 -0
  141. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/set_depth.md +0 -0
  142. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_arrow.md +0 -0
  143. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_columns.md +0 -0
  144. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_columns_string.md +0 -0
  145. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_csv.md +0 -0
  146. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_json.md +0 -0
  147. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_json_string.md +0 -0
  148. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view.md +0 -0
  149. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/client.rs +0 -0
  150. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/aggregates.rs +0 -0
  151. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/column_type.rs +0 -0
  152. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/expressions.rs +0 -0
  153. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/filters.rs +0 -0
  154. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/mod.rs +0 -0
  155. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/sort.rs +0 -0
  156. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/view_config.rs +0 -0
  157. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/lib.rs +0 -0
  158. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/table_data.rs +0 -0
  159. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/clone.rs +0 -0
  160. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/logging.rs +0 -0
  161. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/mod.rs +0 -0
  162. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/tests/clone.rs +0 -0
  163. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/tests/mod.rs +0 -0
  164. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/view.rs +0 -0
  165. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/README.md +0 -0
  166. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/__init__.py +0 -0
  167. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/__init__.py +0 -0
  168. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/bench.py +0 -0
  169. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/perspective_benchmark.py +0 -0
  170. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/run_perspective_benchmark.py +0 -0
  171. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/__init__.py +0 -0
  172. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/async_server.py +0 -0
  173. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/bench.py +0 -0
  174. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/distributed_mode.py +0 -0
  175. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/server/new_api.py +0 -0
  176. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/server/old_api.py +0 -0
  177. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/server_mode.py +0 -0
  178. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/docs/index.html +0 -0
  179. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/docs/lib.md +0 -0
  180. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/__init__.py +0 -0
  181. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/aiohttp.py +0 -0
  182. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/starlette.py +0 -0
  183. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/tornado.py +0 -0
  184. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/__init__.py +0 -0
  185. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/conftest.py +0 -0
  186. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/core/__init__.py +0 -0
  187. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/core/test_threadpool.py +0 -0
  188. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/server/__init__.py +0 -0
  189. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/single_threaded/test_single_threaded.py +0 -0
  190. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/__init__.py +0 -0
  191. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/object_sequence.py +0 -0
  192. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_delete.py +0 -0
  193. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_exception.py +0 -0
  194. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_leaks.py +0 -0
  195. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_ports.py +0 -0
  196. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_remove.py +0 -0
  197. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table.py +0 -0
  198. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_arrow.py +0 -0
  199. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_datetime.py +0 -0
  200. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_infer.py +0 -0
  201. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_limit.py +0 -0
  202. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_numpy.py +0 -0
  203. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_to_arrow.py +0 -0
  204. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_to_arrow_lz4.py +0 -0
  205. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_to_format.py +0 -0
  206. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_update.py +0 -0
  207. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_update_arrow.py +0 -0
  208. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_update_pandas.py +0 -0
  209. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_view.py +0 -0
  210. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_view_expression.py +0 -0
  211. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/viewer/__init__.py +0 -0
  212. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/viewer/test_validate.py +0 -0
  213. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/viewer/test_viewer.py +0 -0
  214. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/widget/__init__.py +0 -0
  215. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/widget/test_widget.py +0 -0
  216. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/widget/test_widget_pandas.py +0 -0
  217. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/__init__.py +0 -0
  218. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/validate.py +0 -0
  219. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/viewer.py +0 -0
  220. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/widget/__init__.py +0 -0
  221. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/widget/widget.py +0 -0
  222. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/client/mod.rs +0 -0
  223. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/server/mod.rs +0 -0
  224. {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/server/server_sync.rs +0 -0
  225. {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/install.json +0 -0
  226. /perspective_python-3.0.1.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.21bd87061737b28bdb5b.js.LICENSE.txt → /perspective_python-3.0.3.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.672dd140fd7665c40d72.js.LICENSE.txt +0 -0
  227. {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/905.bda9d13f81bc1d4190ff.js +0 -0
  228. {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/style.js +0 -0
  229. {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/third-party-licenses.json +0 -0
@@ -278,9 +278,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
278
278
 
279
279
  [[package]]
280
280
  name = "bytes"
281
- version = "1.6.0"
281
+ version = "1.7.1"
282
282
  source = "registry+https://github.com/rust-lang/crates.io-index"
283
- checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
283
+ checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
284
284
 
285
285
  [[package]]
286
286
  name = "cc"
@@ -1783,7 +1783,7 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
1783
1783
 
1784
1784
  [[package]]
1785
1785
  name = "perspective"
1786
- version = "3.0.1"
1786
+ version = "3.0.3"
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.3"
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.3"
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.3"
1878
1878
  dependencies = [
1879
1879
  "glob",
1880
1880
  "yew-fmt",
@@ -1882,15 +1882,15 @@ dependencies = [
1882
1882
 
1883
1883
  [[package]]
1884
1884
  name = "perspective-python"
1885
- version = "3.0.1"
1885
+ version = "3.0.3"
1886
1886
  dependencies = [
1887
1887
  "async-lock",
1888
1888
  "cmake",
1889
- "cxx-build",
1890
1889
  "extend",
1891
1890
  "futures",
1892
1891
  "num_cpus",
1893
1892
  "perspective-client",
1893
+ "perspective-server",
1894
1894
  "pollster",
1895
1895
  "pyo3",
1896
1896
  "pyo3-build-config 0.20.3",
@@ -1902,14 +1902,13 @@ dependencies = [
1902
1902
 
1903
1903
  [[package]]
1904
1904
  name = "perspective-server"
1905
- version = "3.0.1"
1905
+ version = "3.0.3"
1906
1906
  dependencies = [
1907
1907
  "async-lock",
1908
1908
  "base64 0.22.1",
1909
1909
  "cmake",
1910
- "cxx",
1911
- "cxx-build",
1912
1910
  "futures",
1911
+ "link-cplusplus",
1913
1912
  "num_cpus",
1914
1913
  "perspective-client",
1915
1914
  "regex",
@@ -1918,7 +1917,7 @@ dependencies = [
1918
1917
 
1919
1918
  [[package]]
1920
1919
  name = "perspective-viewer"
1921
- version = "3.0.1"
1920
+ version = "3.0.3"
1922
1921
  dependencies = [
1923
1922
  "anyhow",
1924
1923
  "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.3
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.3"
14
14
  __all__ = [
15
15
  "_jupyter_labextension_paths",
16
16
  "PerspectiveError",
@@ -30,12 +30,13 @@ from .perspective import (
30
30
  Table,
31
31
  View,
32
32
  ProxySession,
33
+ PySyncServer,
33
34
  )
34
35
 
35
36
  from .widget import PerspectiveWidget
36
37
  from .viewer import PerspectiveViewer
37
38
 
38
- from .psp_cffi import ServerBase
39
+ # from .psp_cffi import ServerBase
39
40
 
40
41
  try:
41
42
  from .handlers import PerspectiveTornadoHandler
@@ -47,7 +48,7 @@ def default_loop_cb(fn, *args, **kwargs):
47
48
  return fn(*args, **kwargs)
48
49
 
49
50
 
50
- class Server(ServerBase):
51
+ class Server(PySyncServer):
51
52
  def set_threadpool_size(self, n_cpus):
52
53
  pass
53
54
 
@@ -71,8 +72,11 @@ class Client(PySyncClient):
71
72
  def handle_response(bytes):
72
73
  client.handle_response(bytes)
73
74
 
75
+ def handle_close():
76
+ session.close()
77
+
74
78
  session = server.new_session(handle_response)
75
- client = Client(handle_request)
79
+ client = Client(handle_request, handle_close)
76
80
  return client
77
81
 
78
82
 
@@ -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.3.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.3"
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."
@@ -46,9 +46,11 @@ pub struct DefaultStyleAttributes {
46
46
  pub bool: serde_json::Value,
47
47
  }
48
48
 
49
- /// The data needed to populate a column's settings. These are typically default
50
- /// values, a listing of possible values, or other basic configuration settings
51
- /// for the plugin. This is the result of calling plugin.plugin_attributes
49
+ /// The data needed to populate a column's settings.
50
+ ///
51
+ /// These are typically default values, a listing of possible values, or other
52
+ /// basic configuration settings for the plugin. This is the result of calling
53
+ /// plugin.plugin_attributes
52
54
  #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
53
55
  pub struct PluginAttributes {
54
56
  pub symbol: Option<SymbolAttributes>,
@@ -64,4 +66,4 @@ pub struct PluginConfig {
64
66
  /// Refers to the currently active columns. Maps name to configuration.
65
67
  #[serde(default)]
66
68
  pub columns: HashMap<String, serde_json::Value>,
67
- }
69
+ }
@@ -22,12 +22,12 @@ use crate::{Client, ClientError};
22
22
  #[cfg(doc)]
23
23
  use crate::{Table, View};
24
24
 
25
- /// The server-side representation of a connection to a
26
- /// [`Client`]. For each [`Client`] that
27
- /// wants to connect to a `perspective_server::Server`, a dedicated [`Session`]
28
- /// must be created. The [`Session`] handles routing messages emitted by the
29
- /// `perspective_server::Server`ve_server::Server`, as well as owning any
30
- /// resources the [`Client`] may request.
25
+ /// The server-side representation of a connection to a [`Client`].
26
+ ///
27
+ /// For each [`Client`] that wants to connect to a `perspective_server::Server`,
28
+ /// a dedicated [`Session`] must be created. The [`Session`] handles routing
29
+ /// messages emitted by the `perspective_server::Server`ve_server::Server`, as
30
+ /// well as owning any resources the [`Client`] may request.
31
31
  pub trait Session<E> {
32
32
  /// Handle an incoming request from the [`Client`]. Calling
33
33
  /// [`Session::handle_request`] will result in the `send_response` parameter
@@ -32,9 +32,7 @@ use crate::view::View;
32
32
  pub type Schema = HashMap<String, ColumnType>;
33
33
 
34
34
  /// Options which impact the behavior of [`Client::table`], as well as
35
- /// subsequent calls to [`Table::update`], even though this latter method
36
- /// itself does not take [`TableInitOptions`] as an argument, since this
37
- /// parameter is fixed at creation.
35
+ /// subsequent calls to [`Table::update`].
38
36
  #[derive(Clone, Debug, Default, Serialize, Deserialize, TS)]
39
37
  pub struct TableInitOptions {
40
38
  #[serde(default)]
@@ -12,7 +12,7 @@
12
12
 
13
13
  [package]
14
14
  name = "perspective-python"
15
- version = "3.0.1"
15
+ version = "3.0.3"
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"
@@ -20,18 +20,16 @@ license = "Apache-2.0"
20
20
  homepage = "https://perspective.finos.org"
21
21
  authors = ["Andrew Stein <steinlink@gmail.com>"]
22
22
  keywords = []
23
- build = "build/main.rs"
23
+ build = "build.rs"
24
24
  include = [
25
25
  "bench/**/*.py",
26
- "build/**/*",
26
+ "build.rs",
27
27
  "./Cargo.toml",
28
28
  "./package.json",
29
29
  "perspective/**/*.py",
30
30
  "./pyproject.toml",
31
31
  "src/**/*.rs",
32
32
  "docs/**/*",
33
- "cpp/**/*",
34
- "cmake/**/*",
35
33
  ]
36
34
 
37
35
  [package.metadata.docs.rs]
@@ -39,14 +37,15 @@ rustdoc-args = ["--html-in-header", "docs/index.html"]
39
37
 
40
38
  [features]
41
39
  default = []
42
- sdist = []
43
- external-cpp = ["perspective-client/external-proto"]
40
+ external-cpp = [
41
+ "perspective-client/external-proto",
42
+ "perspective-server/external-cpp",
43
+ ]
44
44
 
45
45
  [lib]
46
46
  crate-type = ["cdylib"]
47
47
 
48
48
  [build-dependencies]
49
- cxx-build = "1.0.115"
50
49
  cmake = "0.1.50"
51
50
  num_cpus = "^1.16.0"
52
51
  pyo3-build-config = "0.20.2"
@@ -54,8 +53,8 @@ python-config-rs = "0.1.2"
54
53
 
55
54
  [dependencies]
56
55
  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" }
56
+ perspective-client = { version = "3.0.3", path = "../perspective-client" }
57
+ perspective-server = { version = "3.0.3", path = "../perspective-server" }
59
58
  pollster = "0.3.0"
60
59
  extend = "1.1.2"
61
60
  futures = "0.3.28"
@@ -0,0 +1,31 @@
1
+ // ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
2
+ // ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
3
+ // ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
4
+ // ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
5
+ // ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
6
+ // ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
7
+ // ┃ Copyright (c) 2017, the Perspective Authors. ┃
8
+ // ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
9
+ // ┃ This file is part of the Perspective library, distributed under the terms ┃
10
+ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
11
+ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
12
+
13
+ use std::error::Error;
14
+
15
+ fn main() -> Result<(), Box<dyn Error>> {
16
+ pyo3_build_config::add_extension_module_link_args();
17
+
18
+ // Pass the `perspective_client` links metadata flag so that the `inherit_docs`
19
+ // macro can find the path to the docs.
20
+ println!(
21
+ "cargo:rustc-env=PERSPECTIVE_CLIENT_DOCS_PATH={}",
22
+ std::env::var("DEP_PERSPECTIVE_CLIENT_DOCS_PATH").unwrap()
23
+ );
24
+
25
+ if std::option_env!("PSP_DISABLE_CPP").is_some() {
26
+ return Ok(());
27
+ }
28
+
29
+ std::env::set_var("CARGO_FEATURE_PYTHON", "1");
30
+ Ok(())
31
+ }
@@ -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.3"
14
14
  __all__ = [
15
15
  "_jupyter_labextension_paths",
16
16
  "PerspectiveError",
@@ -30,12 +30,13 @@ from .perspective import (
30
30
  Table,
31
31
  View,
32
32
  ProxySession,
33
+ PySyncServer,
33
34
  )
34
35
 
35
36
  from .widget import PerspectiveWidget
36
37
  from .viewer import PerspectiveViewer
37
38
 
38
- from .psp_cffi import ServerBase
39
+ # from .psp_cffi import ServerBase
39
40
 
40
41
  try:
41
42
  from .handlers import PerspectiveTornadoHandler
@@ -47,7 +48,7 @@ def default_loop_cb(fn, *args, **kwargs):
47
48
  return fn(*args, **kwargs)
48
49
 
49
50
 
50
- class Server(ServerBase):
51
+ class Server(PySyncServer):
51
52
  def set_threadpool_size(self, n_cpus):
52
53
  pass
53
54
 
@@ -71,8 +72,11 @@ class Client(PySyncClient):
71
72
  def handle_response(bytes):
72
73
  client.handle_response(bytes)
73
74
 
75
+ def handle_close():
76
+ session.close()
77
+
74
78
  session = server.new_session(handle_response)
75
- client = Client(handle_request)
79
+ client = Client(handle_request, handle_close)
76
80
  return client
77
81
 
78
82
 
@@ -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")]
@@ -212,7 +217,6 @@ impl Table {
212
217
 
213
218
  #[doc = crate::inherit_docs!("table/size.md")]
214
219
  pub fn size(&self, py: Python<'_>) -> PyResult<usize> {
215
- tracing::error!("WIP");
216
220
  self.0.size().py_block_on(py)
217
221
  }
218
222