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.
- {perspective_python-3.0.1 → perspective_python-3.0.3}/Cargo.lock +11 -12
- {perspective_python-3.0.1 → perspective_python-3.0.3}/PKG-INFO +1 -1
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/__init__.py +8 -4
- {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3}/perspective/tests/core/test_async.py +0 -2
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/server/test_server.py +6 -0
- {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3}/perspective/tests/server/test_session.py +2 -2
- {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3}/perspective/tests/table/test_table_pandas.py +7 -7
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/viewer_traitlets.py +1 -1
- {perspective_python-3.0.1 → perspective_python-3.0.3}/pyproject.toml +1 -1
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/Cargo.toml +1 -1
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/plugin.rs +6 -4
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/session.rs +6 -6
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/table.rs +1 -3
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/Cargo.toml +9 -10
- perspective_python-3.0.3/rust/perspective-python/build.rs +31 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/__init__.py +8 -4
- {perspective_python-3.0.1 → perspective_python-3.0.3/rust/perspective-python}/perspective/tests/core/test_async.py +0 -2
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/server/test_server.py +6 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3/rust/perspective-python}/perspective/tests/server/test_session.py +2 -2
- {perspective_python-3.0.1 → perspective_python-3.0.3/rust/perspective-python}/perspective/tests/table/test_table_pandas.py +7 -7
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/viewer_traitlets.py +1 -1
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/client/client_sync.rs +9 -5
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/client/python.rs +10 -3
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/lib.rs +3 -3
- perspective_python-3.0.3/rust/perspective-server/Cargo.toml +57 -0
- perspective_python-3.0.3/rust/perspective-server/build/main.rs +41 -0
- {perspective_python-3.0.1/rust/perspective-python → perspective_python-3.0.3/rust/perspective-server}/build/psp.rs +3 -30
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.dot +197 -0
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub1.dot +66 -0
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub1.svg +60 -0
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub2.dot +66 -0
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub2.svg +67 -0
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub3.dot +97 -0
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.sub3.svg +97 -0
- perspective_python-3.0.3/rust/perspective-server/docs/architecture.svg +250 -0
- perspective_python-3.0.3/rust/perspective-server/docs/lib.md +167 -0
- perspective_python-3.0.3/rust/perspective-server/src/ffi.rs +147 -0
- perspective_python-3.0.3/rust/perspective-server/src/lib.rs +199 -0
- {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/package.json +2 -2
- perspective_python-3.0.3.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.672dd140fd7665c40d72.js +18 -0
- 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
- perspective_python-3.0.1/perspective/psp_cffi.py +0 -127
- perspective_python-3.0.1/rust/perspective-python/build/main.rs +0 -85
- perspective_python-3.0.1/rust/perspective-python/perspective/psp_cffi.py +0 -127
- perspective_python-3.0.1.data/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/253.21bd87061737b28bdb5b.js +0 -18
- {perspective_python-3.0.1 → perspective_python-3.0.3}/Cargo.toml +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/extension/finos-perspective-nbextension.json +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/aiohttp.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/starlette.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/handlers/tornado.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/templates/exported_widget.html.jinja +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/conftest.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/core/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/core/test_threadpool.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/server/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/single_threaded/test_single_threaded.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/date32.arrow +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/date64.arrow +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/dict.arrow +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/dict_update.arrow +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/int_float_str.arrow +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/int_float_str_file.arrow +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/arrow/int_float_str_update.arrow +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/object_sequence.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_delete.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_exception.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_leaks.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_ports.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_remove.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_arrow.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_datetime.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_infer.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_limit.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_table_numpy.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_to_arrow.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_to_arrow_lz4.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_to_format.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_update.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_update_arrow.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_update_pandas.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_view.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/table/test_view_expression.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/viewer/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/viewer/test_validate.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/viewer/test_viewer.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/widget/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/widget/test_widget.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/widget/test_widget_pandas.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/validate.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/viewer.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/widget/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/widget/widget.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/build.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/get_hosted_table_names.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/open_table.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/set_loop_callback.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/system_info.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/table.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client/terminate.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/client.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/index.html +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/clear.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/columns.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/delete.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_client.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_features.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_index.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_limit.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/get_num_views.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/make_port.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/on_delete.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/remove.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/remove_delete.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/replace.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/schema.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/size.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/update.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/validate_expressions.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table/view.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/table.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/collapse.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/column_paths.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/delete.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/dimensions.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/expand.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/expression_schema.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/get_config.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/get_min_max.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/num_columns.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/num_rows.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/on_delete.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/on_update.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/remove_delete.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/remove_update.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/schema.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/set_depth.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_arrow.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_columns.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_columns_string.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_csv.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_json.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view/to_json_string.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/docs/view.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/client.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/aggregates.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/column_type.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/expressions.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/filters.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/mod.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/sort.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/config/view_config.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/lib.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/table_data.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/clone.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/logging.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/mod.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/tests/clone.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/utils/tests/mod.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/view.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/README.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/bench.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/perspective_benchmark.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/runtime/run_perspective_benchmark.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/async_server.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/bench.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/distributed_mode.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/server/new_api.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/server/old_api.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/bench/tornado/server_mode.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/docs/index.html +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/docs/lib.md +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/aiohttp.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/starlette.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/handlers/tornado.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/conftest.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/core/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/core/test_threadpool.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/server/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/single_threaded/test_single_threaded.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/object_sequence.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_delete.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_exception.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_leaks.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_ports.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_remove.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_arrow.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_datetime.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_infer.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_limit.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_table_numpy.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_to_arrow.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_to_arrow_lz4.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_to_format.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_update.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_update_arrow.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_update_pandas.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_view.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/table/test_view_expression.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/viewer/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/viewer/test_validate.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/viewer/test_viewer.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/widget/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/widget/test_widget.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/tests/widget/test_widget_pandas.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/validate.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/viewer/viewer.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/widget/__init__.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/perspective/widget/widget.py +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/client/mod.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/server/mod.rs +0 -0
- {perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-python/src/server/server_sync.rs +0 -0
- {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/install.json +0 -0
- /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
- {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
- {perspective_python-3.0.1.data → perspective_python-3.0.3.data}/data/share/jupyter/labextensions/@finos/perspective-jupyterlab/static/style.js +0 -0
- {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.
|
|
281
|
+
version = "1.7.1"
|
|
282
282
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
283
|
-
checksum = "
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1920
|
+
version = "3.0.3"
|
|
1922
1921
|
dependencies = [
|
|
1923
1922
|
"anyhow",
|
|
1924
1923
|
"async-lock",
|
|
@@ -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.
|
|
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(
|
|
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
|
|
{perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/tests/server/test_server.py
RENAMED
|
@@ -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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
272
|
+
data = util.make_dataframe(size=4, freq="QE")
|
|
273
273
|
|
|
274
274
|
tbl = Table(data)
|
|
275
275
|
assert tbl.size() == 4
|
{perspective_python-3.0.1 → perspective_python-3.0.3}/perspective/viewer/viewer_traitlets.py
RENAMED
|
@@ -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")
|
|
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.
|
|
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.
|
|
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.
|
|
50
|
-
///
|
|
51
|
-
///
|
|
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
|
+
}
|
{perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/session.rs
RENAMED
|
@@ -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
|
-
///
|
|
27
|
-
/// wants to connect to a `perspective_server::Server`,
|
|
28
|
-
/// must be created. The [`Session`] handles routing
|
|
29
|
-
/// `perspective_server::Server`ve_server::Server`, as
|
|
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
|
{perspective_python-3.0.1 → perspective_python-3.0.3}/rust/perspective-client/src/rust/table.rs
RENAMED
|
@@ -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`]
|
|
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.
|
|
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
|
|
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
|
-
|
|
43
|
-
|
|
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.
|
|
58
|
-
|
|
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.
|
|
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(
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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")
|
|
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(
|
|
88
|
-
let client = PyClient::new(
|
|
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
|
|
144
|
-
Client(self.0.get_client(
|
|
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
|
|