onetick-py 1.165.0__tar.gz → 1.167.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. {onetick_py-1.165.0 → onetick_py-1.167.0}/PKG-INFO +3 -2
  2. {onetick_py-1.165.0 → onetick_py-1.167.0}/pyproject.toml +2 -1
  3. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/_version.py +1 -1
  4. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/_docs.py +11 -0
  5. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/order_book.py +38 -5
  6. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/compatibility.py +8 -0
  7. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/db/_inspection.py +28 -12
  8. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/misc.py +7 -6
  9. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/session.py +5 -2
  10. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/render.py +39 -26
  11. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick_py.egg-info/PKG-INFO +3 -2
  12. {onetick_py-1.165.0 → onetick_py-1.167.0}/LICENSE +0 -0
  13. {onetick_py-1.165.0 → onetick_py-1.167.0}/README.md +0 -0
  14. {onetick_py-1.165.0 → onetick_py-1.167.0}/requirements.strict.txt +0 -0
  15. {onetick_py-1.165.0 → onetick_py-1.167.0}/requirements.txt +0 -0
  16. {onetick_py-1.165.0 → onetick_py-1.167.0}/setup.cfg +0 -0
  17. {onetick_py-1.165.0 → onetick_py-1.167.0}/setup.py +0 -0
  18. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/locator_parser/__init__.py +0 -0
  19. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/locator_parser/acl.py +0 -0
  20. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/locator_parser/actions.py +0 -0
  21. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/locator_parser/common.py +0 -0
  22. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/locator_parser/io.py +0 -0
  23. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/locator_parser/locator.py +0 -0
  24. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/__init__.py +0 -0
  25. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/doc_utilities/__init__.py +0 -0
  26. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/doc_utilities/napoleon.py +0 -0
  27. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/doc_utilities/ot_doctest.py +0 -0
  28. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/doc_utilities/snippets.py +0 -0
  29. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/lib/__init__.py +0 -0
  30. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/lib/instance.py +0 -0
  31. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/__init__.py +0 -0
  32. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/_stack_info.py +0 -0
  33. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/__init__.py +0 -0
  34. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/_base.py +0 -0
  35. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/compute.py +0 -0
  36. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/functions.py +0 -0
  37. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/generic.py +0 -0
  38. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/high_low.py +0 -0
  39. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/num_distinct.py +0 -0
  40. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/aggregations/other.py +0 -0
  41. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/backports.py +0 -0
  42. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/cache.py +0 -0
  43. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/callback/__init__.py +0 -0
  44. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/callback/callback.py +0 -0
  45. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/callback/callbacks.py +0 -0
  46. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/configuration.py +0 -0
  47. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/__init__.py +0 -0
  48. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_csv_inspector.py +0 -0
  49. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/__init__.py +0 -0
  50. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_manually_bound_value.py +0 -0
  51. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_nodes_history.py +0 -0
  52. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_op_utils/__init__.py +0 -0
  53. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_op_utils/every_operand.py +0 -0
  54. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_op_utils/is_const.py +0 -0
  55. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_per_tick_scripts/tick_list_sort_template.script +0 -0
  56. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_proxy_node.py +0 -0
  57. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_state_objects.py +0 -0
  58. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_internal/_state_vars.py +0 -0
  59. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/__init__.py +0 -0
  60. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/_symbol_param.py +0 -0
  61. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/schema.py +0 -0
  62. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/__init__.py +0 -0
  63. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/aggregations.py +0 -0
  64. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/applyers.py +0 -0
  65. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/columns.py +0 -0
  66. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/data_quality.py +0 -0
  67. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/debugs.py +0 -0
  68. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/drops.py +0 -0
  69. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/fields.py +0 -0
  70. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/filters.py +0 -0
  71. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/joins.py +0 -0
  72. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/merges.py +0 -0
  73. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/misc.py +0 -0
  74. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/pandases.py +0 -0
  75. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/renames.py +0 -0
  76. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/sorts.py +0 -0
  77. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/switches.py +0 -0
  78. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/symbols.py +0 -0
  79. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/times.py +0 -0
  80. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/source_methods/writes.py +0 -0
  81. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/symbol.py +0 -0
  82. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/_source/tmp_otq.py +0 -0
  83. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column.py +0 -0
  84. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/__init__.py +0 -0
  85. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/_methods/__init__.py +0 -0
  86. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/_methods/_internal.py +0 -0
  87. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/_methods/conversions.py +0 -0
  88. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/_methods/methods.py +0 -0
  89. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/_methods/op_types.py +0 -0
  90. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/accessors/__init__.py +0 -0
  91. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/accessors/_accessor.py +0 -0
  92. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/accessors/decimal_accessor.py +0 -0
  93. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/accessors/dt_accessor.py +0 -0
  94. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/accessors/float_accessor.py +0 -0
  95. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/accessors/str_accessor.py +0 -0
  96. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/column_operations/base.py +0 -0
  97. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/cut_builder.py +0 -0
  98. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/db_constants.py +0 -0
  99. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/eval_query.py +0 -0
  100. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/lambda_object.py +0 -0
  101. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/multi_output_source.py +0 -0
  102. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/per_tick_script.py +0 -0
  103. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/query_inspector.py +0 -0
  104. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/core/source.py +0 -0
  105. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/db/__init__.py +0 -0
  106. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/db/db.py +0 -0
  107. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/db/utils.py +0 -0
  108. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/docs/__init__.py +0 -0
  109. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/docs/docstring_parser.py +0 -0
  110. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/docs/utils.py +0 -0
  111. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/functions.py +0 -0
  112. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/license.py +0 -0
  113. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/log.py +0 -0
  114. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/math.py +0 -0
  115. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/oqd/__init__.py +0 -0
  116. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/oqd/eps.py +0 -0
  117. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/oqd/sources.py +0 -0
  118. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/otq.py +0 -0
  119. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/pyomd_mock.py +0 -0
  120. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/run.py +0 -0
  121. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/servers.py +0 -0
  122. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/__init__.py +0 -0
  123. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/cache.py +0 -0
  124. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/common.py +0 -0
  125. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/csv.py +0 -0
  126. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/custom.py +0 -0
  127. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/data_file.py +0 -0
  128. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/data_source.py +0 -0
  129. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/empty.py +0 -0
  130. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/odbc.py +0 -0
  131. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/order_book.py +0 -0
  132. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/parquet.py +0 -0
  133. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/pit.py +0 -0
  134. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/query.py +0 -0
  135. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/snapshots.py +0 -0
  136. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/split_query_output_by_symbol.py +0 -0
  137. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/symbology_mapping.py +0 -0
  138. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/symbols.py +0 -0
  139. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sources/ticks.py +0 -0
  140. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/sql.py +0 -0
  141. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/state.py +0 -0
  142. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/types.py +0 -0
  143. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/__init__.py +0 -0
  144. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/acl.py +0 -0
  145. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/config.py +0 -0
  146. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/default.py +0 -0
  147. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/file.py +0 -0
  148. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/helpers.py +0 -0
  149. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/locator.py +0 -0
  150. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/perf.py +0 -0
  151. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/query.py +0 -0
  152. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/script.py +0 -0
  153. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/temp.py +0 -0
  154. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/types.py +0 -0
  155. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick/py/utils/tz.py +0 -0
  156. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick_py.egg-info/SOURCES.txt +0 -0
  157. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick_py.egg-info/dependency_links.txt +0 -0
  158. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick_py.egg-info/entry_points.txt +0 -0
  159. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick_py.egg-info/requires.txt +0 -0
  160. {onetick_py-1.165.0 → onetick_py-1.167.0}/src/onetick_py.egg-info/top_level.txt +0 -0
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onetick-py
3
- Version: 1.165.0
3
+ Version: 1.167.0
4
4
  Summary: Python package that allows you to work with OneTick
5
5
  Author-email: solutions <solutions@onetick.com>
6
6
  License-Expression: MIT
7
7
  Project-URL: Documentation, https://docs.pip.distribution.sol.onetick.com
8
- Project-URL: OneTick, https://onetick.com/
8
+ Project-URL: OneTick, https://onetick.com
9
+ Project-URL: GitHub, https://github.com/onemarketdata/onetick-py
9
10
  Classifier: Topic :: Database :: Front-Ends
10
11
  Classifier: Topic :: Scientific/Engineering
11
12
  Classifier: Programming Language :: Python :: 3.9
@@ -34,7 +34,8 @@ classifiers = [
34
34
 
35
35
  [project.urls]
36
36
  Documentation = "https://docs.pip.distribution.sol.onetick.com"
37
- OneTick = "https://onetick.com/"
37
+ OneTick = "https://onetick.com"
38
+ GitHub = "https://github.com/onemarketdata/onetick-py"
38
39
 
39
40
  [tool.setuptools.packages.find]
40
41
  where = ["src"]
@@ -1,2 +1,2 @@
1
1
  # This file was generated automatically. DO NOT CHANGE.
2
- VERSION = '1.165.0'
2
+ VERSION = '1.167.0'
@@ -522,6 +522,17 @@ _size_max_fractional_digits_doc = param_doc(
522
522
  annotation=int,
523
523
  default=0,
524
524
  )
525
+ _include_market_order_ticks_doc = param_doc(
526
+ name='include_market_order_ticks',
527
+ desc="""
528
+ If set, market order ticks (they have price NaN) are included into the order book,
529
+ and are at the order book's top level.
530
+
531
+ Default is False.
532
+ """,
533
+ annotation=bool,
534
+ default=None,
535
+ )
525
536
  _query_fun_doc = param_doc(
526
537
  name='query_fun',
527
538
  desc="""
@@ -36,7 +36,8 @@ from ._docs import (_running_doc,
36
36
  _book_delimiters_doc,
37
37
  _max_initialization_days_doc,
38
38
  _state_key_max_inactivity_sec_doc,
39
- _size_max_fractional_digits_doc)
39
+ _size_max_fractional_digits_doc,
40
+ _include_market_order_ticks_doc)
40
41
 
41
42
 
42
43
  OB_SNAPSHOT_DOC_PARAMS = [
@@ -47,7 +48,8 @@ OB_SNAPSHOT_DOC_PARAMS = [
47
48
  _book_uncross_method_doc, _dq_events_that_clear_book_doc, _identify_source_doc,
48
49
  _show_full_detail_doc, _show_only_changes_doc, _book_delimiters_doc,
49
50
  _max_initialization_days_doc, _state_key_max_inactivity_sec_doc,
50
- _size_max_fractional_digits_doc
51
+ _size_max_fractional_digits_doc,
52
+ _include_market_order_ticks_doc,
51
53
  ]
52
54
  OB_SNAPSHOT_WIDE_DOC_PARAMS = [
53
55
  _running_doc,
@@ -57,7 +59,8 @@ OB_SNAPSHOT_WIDE_DOC_PARAMS = [
57
59
  _book_uncross_method_doc, _dq_events_that_clear_book_doc,
58
60
  _book_delimiters_doc,
59
61
  _max_initialization_days_doc, _state_key_max_inactivity_sec_doc,
60
- _size_max_fractional_digits_doc
62
+ _size_max_fractional_digits_doc,
63
+ _include_market_order_ticks_doc,
61
64
  ]
62
65
  OB_SNAPSHOT_FLAT_DOC_PARAMS = [
63
66
  _running_doc,
@@ -67,7 +70,8 @@ OB_SNAPSHOT_FLAT_DOC_PARAMS = [
67
70
  _book_uncross_method_doc, _dq_events_that_clear_book_doc,
68
71
  _show_full_detail_doc,
69
72
  _max_initialization_days_doc, _state_key_max_inactivity_sec_doc,
70
- _size_max_fractional_digits_doc
73
+ _size_max_fractional_digits_doc,
74
+ _include_market_order_ticks_doc,
71
75
  ]
72
76
  OB_SUMMARY_DOC_PARAMS = [
73
77
  _running_doc,
@@ -75,7 +79,8 @@ OB_SUMMARY_DOC_PARAMS = [
75
79
  _bucket_end_condition_doc, _end_condition_per_group_doc, _group_by_doc, _groups_to_display_doc,
76
80
  _side_doc, _max_levels_doc, _min_levels_doc, _max_depth_shares_doc, _max_depth_for_price_doc,
77
81
  _book_uncross_method_doc, _dq_events_that_clear_book_doc, _max_initialization_days_doc,
78
- _state_key_max_inactivity_sec_doc, _size_max_fractional_digits_doc
82
+ _state_key_max_inactivity_sec_doc, _size_max_fractional_digits_doc,
83
+ _include_market_order_ticks_doc,
79
84
  ]
80
85
 
81
86
  OB_SIZE_DOC_PARAMS = [
@@ -177,6 +182,7 @@ class ObSnapshot(_OrderBookAggregation):
177
182
  'book_delimiters': 'BOOK_DELIMITERS',
178
183
  'state_key_max_inactivity_sec': 'STATE_KEY_MAX_INACTIVITY_SEC',
179
184
  'size_max_fractional_digits': 'SIZE_MAX_FRACTIONAL_DIGITS',
185
+ 'include_market_order_ticks': 'INCLUDE_MARKET_ORDER_TICKS',
180
186
  })
181
187
  FIELDS_DEFAULT = dict(_OrderBookAggregation.FIELDS_DEFAULT, **{
182
188
  'identify_source': False,
@@ -185,6 +191,7 @@ class ObSnapshot(_OrderBookAggregation):
185
191
  'book_delimiters': None,
186
192
  'state_key_max_inactivity_sec': None,
187
193
  'size_max_fractional_digits': 0,
194
+ 'include_market_order_ticks': None,
188
195
  })
189
196
 
190
197
  def __init__(self,
@@ -195,6 +202,7 @@ class ObSnapshot(_OrderBookAggregation):
195
202
  book_delimiters: Optional[Literal['D']] = None,
196
203
  state_key_max_inactivity_sec: Optional[int] = None,
197
204
  size_max_fractional_digits: int = 0,
205
+ include_market_order_ticks: Optional[bool] = None,
198
206
  **kwargs):
199
207
  self.identify_source = identify_source
200
208
  self.show_full_detail = show_full_detail
@@ -202,11 +210,22 @@ class ObSnapshot(_OrderBookAggregation):
202
210
  self.book_delimiters = book_delimiters
203
211
  self.state_key_max_inactivity_sec = state_key_max_inactivity_sec
204
212
  self.size_max_fractional_digits = size_max_fractional_digits
213
+ self.include_market_order_ticks = include_market_order_ticks
205
214
  # we don't want to set hard limit on the output of order book aggregations
206
215
  if self.show_full_detail:
207
216
  kwargs['all_fields'] = True
208
217
  super().__init__(*args, **kwargs)
209
218
 
219
+ def _param_validation(self):
220
+ super()._param_validation()
221
+ if self.include_market_order_ticks is not None:
222
+ if 'include_market_order_ticks' not in self.EP.Parameters.list_parameters():
223
+ raise ValueError("Parameter 'include_market_order_ticks' is not supported on this OneTick API version")
224
+ otp.compatibility.is_include_market_order_ticks_supported(
225
+ throw_warning=True,
226
+ feature_name="parameter 'include_market_order_ticks'",
227
+ )
228
+
210
229
  def _get_output_schema(self, src: 'Source', name: Optional[str] = None) -> dict:
211
230
  schema = {
212
231
  'PRICE': float,
@@ -284,11 +303,13 @@ class ObSummary(_OrderBookAggregation):
284
303
  'min_levels': 'MIN_LEVELS',
285
304
  'state_key_max_inactivity_sec': 'STATE_KEY_MAX_INACTIVITY_SEC',
286
305
  'size_max_fractional_digits': 'SIZE_MAX_FRACTIONAL_DIGITS',
306
+ 'include_market_order_ticks': 'INCLUDE_MARKET_ORDER_TICKS',
287
307
  })
288
308
  FIELDS_DEFAULT = dict(_OrderBookAggregation.FIELDS_DEFAULT, **{
289
309
  'min_levels': None,
290
310
  'state_key_max_inactivity_sec': None,
291
311
  'size_max_fractional_digits': 0,
312
+ 'include_market_order_ticks': None,
292
313
  })
293
314
 
294
315
  def __init__(self,
@@ -296,6 +317,7 @@ class ObSummary(_OrderBookAggregation):
296
317
  min_levels: Optional[int] = None,
297
318
  state_key_max_inactivity_sec: Optional[int] = None,
298
319
  size_max_fractional_digits: int = 0,
320
+ include_market_order_ticks: Optional[bool] = None,
299
321
  **kwargs):
300
322
  if is_supported_otq_ob_summary():
301
323
  self.EP = otq.ObSummary
@@ -305,8 +327,19 @@ class ObSummary(_OrderBookAggregation):
305
327
  self.min_levels = min_levels
306
328
  self.state_key_max_inactivity_sec = state_key_max_inactivity_sec
307
329
  self.size_max_fractional_digits = size_max_fractional_digits
330
+ self.include_market_order_ticks = include_market_order_ticks
308
331
  super().__init__(*args, **kwargs)
309
332
 
333
+ def _param_validation(self):
334
+ super()._param_validation()
335
+ if self.include_market_order_ticks is not None:
336
+ if 'include_market_order_ticks' not in self.EP.Parameters.list_parameters():
337
+ raise ValueError("Parameter 'include_market_order_ticks' is not supported on this OneTick API version")
338
+ otp.compatibility.is_include_market_order_ticks_supported(
339
+ throw_warning=True,
340
+ feature_name="parameter 'include_market_order_ticks'",
341
+ )
342
+
310
343
  def _get_output_schema(self, src: 'Source', name: Optional[str] = None) -> dict:
311
344
  schema = {
312
345
  'BID_SIZE': int,
@@ -750,3 +750,11 @@ def is_ilike_supported():
750
750
  # 20250423: Implemented 0035413: Add support of ILIKE in SQL
751
751
  return _is_min_build_or_version(None, None,
752
752
  20250510120000)
753
+
754
+
755
+ def is_include_market_order_ticks_supported(**kwargs):
756
+ # Implemented 0031478: OB_SNAPSHOT... and OB_SUMMARY EPs
757
+ # should support parameter INCLUDE_MARKET_ORDER_TICKS (false by default)
758
+ return _is_min_build_or_version(1.25, 20241229055942,
759
+ 20240812120000, min_update_number=2,
760
+ **kwargs)
@@ -1,5 +1,5 @@
1
1
  import warnings
2
- from typing import Dict, List, Union, Iterable, Tuple, Optional, Any, Literal
2
+ from typing import Union, Iterable, Tuple, Optional, Any, Literal
3
3
  from datetime import date as dt_date, datetime, timedelta
4
4
 
5
5
  import pandas as pd
@@ -502,7 +502,7 @@ class DB:
502
502
  return last_date
503
503
  return date
504
504
 
505
- def tick_types(self, date=None, timezone=None) -> List[str]:
505
+ def tick_types(self, date=None, timezone=None) -> list[str]:
506
506
  """
507
507
  Returns list of tick types for the ``date``.
508
508
 
@@ -527,7 +527,7 @@ class DB:
527
527
  date = self.last_date if date is None else date
528
528
  if timezone is None:
529
529
  timezone = configuration.config.tz
530
- time_params: Dict[str, Any] = {}
530
+ time_params: dict[str, Any] = {}
531
531
 
532
532
  if date is not None:
533
533
  time_params['start'], time_params['end'] = self._fit_date_in_acl(date, timezone=timezone)
@@ -551,7 +551,7 @@ class DB:
551
551
  min_date = min(obj[0] for obj in self._locator_date_ranges)
552
552
  return _datetime2date(min_date)
553
553
 
554
- def schema(self, date=None, tick_type=None, timezone=None, check_index_file=utils.adaptive) -> Dict[str, type]:
554
+ def schema(self, date=None, tick_type=None, timezone=None, check_index_file=utils.adaptive) -> dict[str, type]:
555
555
  """
556
556
  Gets the schema of the database.
557
557
 
@@ -696,7 +696,7 @@ class DB:
696
696
 
697
697
  return schema
698
698
 
699
- def symbols(self, date=None, timezone=None, tick_type=None, pattern='.*') -> List[str]:
699
+ def symbols(self, date=None, timezone=None, tick_type=None, pattern='.*') -> list[str]:
700
700
  """
701
701
  Finds a list of available symbols in the database
702
702
 
@@ -907,7 +907,7 @@ class DB:
907
907
  return df
908
908
 
909
909
 
910
- def databases(context=utils.default, derived=False) -> Dict[str, DB]:
910
+ def databases(context=utils.default, derived=False, readable_only: bool = True) -> dict[str, DB]:
911
911
  """
912
912
  Gets all available databases in the ``context``
913
913
 
@@ -918,13 +918,18 @@ def databases(context=utils.default, derived=False) -> Dict[str, DB]:
918
918
  If not set then default :py:attr:`context<onetick.py.configuration.Config.context>` is used.
919
919
  See :ref:`guide about switching contexts <switching contexts>` for examples.
920
920
  derived: bool, dict
921
- If False then derived databases are not returned.
922
- If dict then its items used as parameters to :py:func:`~onetick.py.derived_databases`
923
- If True then default parameters for :py:func:`~onetick.py.derived_databases` are used.
921
+ If False (default) then derived databases are not returned.
922
+ Otherwise derived databases names are added to the result after the non-derived databases.
923
+ If set to dict then its items used as parameters to :py:func:`~onetick.py.derived_databases`.
924
+ If set to True then default parameters for :py:func:`~onetick.py.derived_databases` are used.
925
+ readable_only: bool
926
+ If set to True (default), then return only the databases with read-access for the current user.
927
+ Otherwise return all databases visible from the current process.
924
928
 
925
929
  See also
926
930
  --------
927
931
  | **SHOW_DB_LIST** OneTick event processor
932
+ | **ACCESS_INFO** OneTick event processor
928
933
  | :py:func:`derived_databases`
929
934
 
930
935
  Returns
@@ -933,7 +938,18 @@ def databases(context=utils.default, derived=False) -> Dict[str, DB]:
933
938
  Dict where keys are database names and values are :class:`DB <onetick.py.db._inspection.DB>` objects
934
939
  with ``context`` specified.
935
940
  """
936
- dbs = otp.run(otq.ShowDbList().tick_type("ANY"),
941
+ if readable_only:
942
+ node = (
943
+ otq.AccessInfo(info_type='DATABASES', show_for_all_users=False, deep_scan=True).tick_type('ANY')
944
+ >> otq.Passthrough('DB_NAME,READ_ACCESS')
945
+ >> otq.WhereClause(where='READ_ACCESS = 1')
946
+ )
947
+ else:
948
+ node = (
949
+ otq.ShowDbList().tick_type('ANY')
950
+ >> otq.Passthrough('DATABASE_NAME')
951
+ )
952
+ dbs = otp.run(node,
937
953
  symbols='LOCAL::',
938
954
  # start and end times don't matter for this query, use some constants
939
955
  start=db_constants.DEFAULT_START_DATE,
@@ -944,7 +960,7 @@ def databases(context=utils.default, derived=False) -> Dict[str, DB]:
944
960
  if len(dbs) == 0:
945
961
  return {}
946
962
 
947
- db_list = list(dbs['DATABASE_NAME'])
963
+ db_list = list(dbs['DB_NAME'] if readable_only else dbs['DATABASE_NAME'])
948
964
  db_dict = {db_name: DB(db_name, context=context) for db_name in db_list}
949
965
  if derived:
950
966
  kwargs = derived if isinstance(derived, dict) else {}
@@ -961,7 +977,7 @@ def derived_databases(
961
977
  selection_criteria='all',
962
978
  db=None,
963
979
  db_discovery_scope='query_host_only',
964
- ) -> Dict[str, DB]:
980
+ ) -> dict[str, DB]:
965
981
  """
966
982
  Gets available derived databases.
967
983
 
@@ -404,19 +404,20 @@ def get_symbology_mapping(dest_symbology, src_symbology=None, symbol=None, times
404
404
  Time A SYMBOLOGY_MAPPING
405
405
  0 2022-01-03 1 9706
406
406
 
407
- Override source symbology, symbol and symbol date:
407
+ Override source symbology, symbol and symbol date
408
+ (Also note that parameters can be set from columns):
408
409
 
409
- >>> data = otp.Tick(A=1, db=None)
410
- >>> data['SYMBOLOGY_MAPPING'] = otp.get_symbology_mapping('OID', 'TDEQ', 'MSFT', otp.dt(2022, 1, 3))
410
+ >>> data = otp.Tick(A=1, db=None, SYMBOL='MSFT')
411
+ >>> data['SYMBOLOGY_MAPPING'] = otp.get_symbology_mapping('OID', 'TDEQ', data['SYMBOL'], otp.dt(2022, 1, 3))
411
412
  >>> otp.run(data, symbols='US_COMP::AAPL', # doctest: +SKIP
412
413
  ... date=otp.dt(2022, 1, 3))
413
414
  Time A SYMBOLOGY_MAPPING
414
415
  0 2022-01-03 1 109037
415
416
  """
416
417
  params_correct = (
417
- all([src_symbology, symbol, timestamp])
418
- or all([src_symbology, symbol])
419
- or not any([src_symbology, symbol, timestamp])
418
+ all(v is not None for v in [src_symbology, symbol, timestamp])
419
+ or all(v is not None for v in [src_symbology, symbol])
420
+ or not any(v is not None for v in [src_symbology, symbol, timestamp])
420
421
  )
421
422
  if not params_correct:
422
423
  raise ValueError("Parameters 'src_symbology' and 'symbol' or"
@@ -1115,8 +1115,6 @@ class Session:
1115
1115
  # TODO: rollback, but need to wait BDS-91
1116
1116
  raise
1117
1117
 
1118
- Session._instance = self
1119
-
1120
1118
  # force reload cfg/locator/acl, because it is not reloaded after each time session if re-created
1121
1119
  if os.getenv('OTP_WEBAPI_TEST_MODE'):
1122
1120
  utils.reload_config(None, config_type='MAIN_CONFIG')
@@ -1125,6 +1123,11 @@ class Session:
1125
1123
 
1126
1124
  self._ts_dbs = {}
1127
1125
 
1126
+ # PY-1352: this line must be the last
1127
+ # in case we get exception anywhere before, we shouldn't set Session class variable,
1128
+ # because it will affect the creation of all the future Session objects
1129
+ Session._instance = self
1130
+
1128
1131
  def use(self, *items):
1129
1132
  """
1130
1133
  Makes DB or TS available inside the session.
@@ -342,7 +342,10 @@ def _parse_function_params(func_params: str) -> Tuple[list, dict]:
342
342
 
343
343
 
344
344
  def _parse_function(expression: str) -> Tuple[Optional[str], list, dict]:
345
- m = re.search(r"^(\w*)\s*\(([\s\S]*)\)\s*$", expression)
345
+ # EP_NAME(PARAM_NAME=PARAM_VALUE,...)
346
+ # [a-zA-Z_:] is EP_NAME, can contain letters, underscore and colon
347
+ # [\s\S] is any symbol including newline (because . doesn't include newline by default)
348
+ m = re.search(r"^([a-zA-Z_:]*)\s*\(([\s\S]*)\)\s*$", expression)
346
349
 
347
350
  if not m:
348
351
  return None, [], {}
@@ -501,20 +504,24 @@ def _build_query_tree(query: Query):
501
504
  node.labels["OUT"] = node.config["NESTED_OUTPUT"]
502
505
 
503
506
  if "SOURCE_DESCRIPTION" in node.config:
504
- description = node.config["SOURCE_DESCRIPTION"].strip().split(" ")
505
- if len(description) > 1:
506
- desc_node = description[0].split(".")[0]
507
- labels = description[1].split(".")
508
-
509
- if labels and desc_node in query.nodes:
510
- if labels[0]:
511
- query.nodes[desc_node].labels["IN"] = labels[0]
512
-
513
- if labels[1]:
514
- query.nodes[desc_node].labels["OUT"] = labels[1]
507
+ descriptions = node.config["SOURCE_DESCRIPTION"]
508
+ if isinstance(descriptions, str):
509
+ descriptions = [descriptions]
510
+ for description in descriptions:
511
+ description = description.strip().split(" ")
512
+ if len(description) > 1:
513
+ desc_node = description[0].split(".")[0]
514
+ labels = description[1].split(".")
515
+
516
+ if labels and desc_node in query.nodes:
517
+ if labels[0]:
518
+ query.nodes[desc_node].labels["IN"] = labels[0]
519
+
520
+ if labels[1]:
521
+ query.nodes[desc_node].labels["OUT"] = labels[1]
515
522
 
516
523
  if "SINK_DESCRIPTION" in node.config:
517
- description_path = node.config["SOURCE_DESCRIPTION"].strip().split(".")
524
+ description_path = node.config["SINK_DESCRIPTION"].strip().split(".")
518
525
  if len(description_path) > 1:
519
526
  desc_node = description_path[0]
520
527
  label = description_path[-1]
@@ -527,7 +534,7 @@ def _build_query_tree(query: Query):
527
534
  if "SINK" in node.config:
528
535
  sink_nodes = [(sink, True) for sink in node.config["SINK"].strip().split()]
529
536
  if sink_nodes:
530
- leaves.remove(node_id)
537
+ leaves.discard(node_id)
531
538
 
532
539
  nodes += sink_nodes
533
540
  del node.config["SINK"]
@@ -535,7 +542,7 @@ def _build_query_tree(query: Query):
535
542
  if "SOURCE" in node.config:
536
543
  source_nodes = [(sink, False) for sink in node.config["SOURCE"].strip().split()]
537
544
  if source_nodes:
538
- roots.remove(node_id)
545
+ roots.discard(node_id)
539
546
 
540
547
  nodes += source_nodes
541
548
  del node.config["SOURCE"]
@@ -546,10 +553,10 @@ def _build_query_tree(query: Query):
546
553
  source_node_id = source_node_path[0]
547
554
 
548
555
  if not is_sink_node and source_node_id in leaves:
549
- leaves.remove(source_node_id)
556
+ leaves.discard(source_node_id)
550
557
 
551
558
  if is_sink_node and source_node_id in roots:
552
- roots.remove(source_node_id)
559
+ roots.discard(source_node_id)
553
560
 
554
561
  if source_node_id not in query.nodes:
555
562
  raise RuntimeError(f"Malformed otq file passed: node {source_node_id} not found in {query.name}")
@@ -690,21 +697,25 @@ def read_otq(path: str, parse_eval_from_params: bool = False) -> Optional[Graph]
690
697
  return graph
691
698
 
692
699
 
693
- def filter_nodes(ep: Any, param, value, line_limit: Optional[Tuple[int, int]] = None):
694
- if line_limit is not None and (line_limit[0] < 0 or line_limit[1] < 0):
700
+ def truncate_param_value(ep: Any, param, value, line_limit: Optional[Tuple[int, int]] = None):
701
+ if line_limit is None:
702
+ return value
703
+
704
+ height, width = line_limit
705
+ if height < 0 or width < 0:
695
706
  raise ValueError("line_limit values should not be negative")
696
707
 
697
- if isinstance(ep, EP) and line_limit is not None and (
708
+ if isinstance(ep, EP) and (
698
709
  ep.name == "PER_TICK_SCRIPT" and param.lower() == "script" or
699
710
  ep.name == "CSV_FILE_LISTING" and param.lower() == "file_contents"
700
711
  ):
701
712
  lines = [
702
- line if len(line) <= line_limit[1] or not line_limit[1] else line[:line_limit[1]] + "..."
713
+ line if len(line) <= width or not width else line[:width] + "..."
703
714
  for line in value.split("\n")
704
715
  ]
705
716
 
706
- if line_limit[0] and len(lines) > line_limit[0]:
707
- lines = lines[:line_limit[0]] + ["..."]
717
+ if height and len(lines) > height:
718
+ lines = lines[:height] + ["..."]
708
719
 
709
720
  return "\n".join(lines)
710
721
 
@@ -791,11 +802,13 @@ def build_node(graphs: GraphStorage, node: Node, line_limit: Optional[Tuple[int,
791
802
  attrs["sides"] = "LR"
792
803
 
793
804
  if isinstance(v, NestedQuery):
794
- param_value = html.escape(v.raw_string)
805
+ param_value = v.raw_string
795
806
  else:
796
- param_value = html.escape(v).replace("\t", "&nbsp;" * 4)
807
+ param_value = v
797
808
 
798
- param_lines = filter_nodes(node.ep, k, param_value, line_limit).split("\n")
809
+ param_value = truncate_param_value(node.ep, k, param_value, line_limit)
810
+ param_value = html.escape(param_value).replace("\t", "&nbsp;" * 4)
811
+ param_lines = param_value.split("\n")
799
812
 
800
813
  if k:
801
814
  if len(param_lines) == 1:
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onetick-py
3
- Version: 1.165.0
3
+ Version: 1.167.0
4
4
  Summary: Python package that allows you to work with OneTick
5
5
  Author-email: solutions <solutions@onetick.com>
6
6
  License-Expression: MIT
7
7
  Project-URL: Documentation, https://docs.pip.distribution.sol.onetick.com
8
- Project-URL: OneTick, https://onetick.com/
8
+ Project-URL: OneTick, https://onetick.com
9
+ Project-URL: GitHub, https://github.com/onemarketdata/onetick-py
9
10
  Classifier: Topic :: Database :: Front-Ends
10
11
  Classifier: Topic :: Scientific/Engineering
11
12
  Classifier: Programming Language :: Python :: 3.9
File without changes
File without changes
File without changes
File without changes