pylegend 0.4.0__tar.gz → 0.5.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 (155) hide show
  1. {pylegend-0.4.0 → pylegend-0.5.0}/PKG-INFO +1 -1
  2. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/__init__.py +9 -1
  3. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/database/sql_to_string/db_extension.py +3 -0
  4. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/__init__.py +2 -0
  5. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/functions.py +9 -0
  6. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/date_operation_expressions.py +124 -0
  7. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/primitive_operation_expressions.py +60 -0
  8. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/string_operation_expressions.py +25 -0
  9. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/date.py +37 -0
  10. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/primitive.py +16 -0
  11. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/sql/metamodel_extension.py +12 -0
  12. {pylegend-0.4.0 → pylegend-0.5.0}/pyproject.toml +1 -1
  13. {pylegend-0.4.0 → pylegend-0.5.0}/LICENSE +0 -0
  14. {pylegend-0.4.0 → pylegend-0.5.0}/LICENSE.spdx +0 -0
  15. {pylegend-0.4.0 → pylegend-0.5.0}/NOTICE +0 -0
  16. {pylegend-0.4.0 → pylegend-0.5.0}/README.md +0 -0
  17. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/_typing.py +0 -0
  18. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/__init__.py +0 -0
  19. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/database/__init__.py +0 -0
  20. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/database/sql_to_string/__init__.py +0 -0
  21. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/database/sql_to_string/config.py +0 -0
  22. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/database/sql_to_string/generator.py +0 -0
  23. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/legacy_api/__init__.py +0 -0
  24. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/legacy_api/aggregate_specification.py +0 -0
  25. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/legacy_api/legacy_api_tds_row.py +0 -0
  26. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/legendql_api/__init__.py +0 -0
  27. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/legendql_api/legendql_api_custom_expressions.py +0 -0
  28. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/legendql_api/legendql_api_tds_row.py +0 -0
  29. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/__init__.py +0 -0
  30. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/column_expressions.py +0 -0
  31. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/expression.py +0 -0
  32. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/helpers.py +0 -0
  33. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/literal_expressions.py +0 -0
  34. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/__init__.py +0 -0
  35. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/binary_expression.py +0 -0
  36. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/boolean_operation_expressions.py +0 -0
  37. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/collection_operation_expressions.py +0 -0
  38. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/float_operation_expressions.py +0 -0
  39. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/integer_operation_expressions.py +0 -0
  40. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/nullary_expression.py +0 -0
  41. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/number_operation_expressions.py +0 -0
  42. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/operations/unary_expression.py +0 -0
  43. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitive_collection.py +0 -0
  44. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/__init__.py +0 -0
  45. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/boolean.py +0 -0
  46. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/datetime.py +0 -0
  47. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/float.py +0 -0
  48. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/integer.py +0 -0
  49. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/number.py +0 -0
  50. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/strictdate.py +0 -0
  51. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/primitives/string.py +0 -0
  52. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/language/shared/tds_row.py +0 -0
  53. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/project_cooridnates.py +0 -0
  54. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/request/__init__.py +0 -0
  55. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/request/auth.py +0 -0
  56. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/request/legend_client.py +0 -0
  57. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/request/response_reader.py +0 -0
  58. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/request/service_client.py +0 -0
  59. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/sql/__init__.py +0 -0
  60. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/sql/metamodel.py +0 -0
  61. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/__init__.py +0 -0
  62. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/abstract/__init__.py +0 -0
  63. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/abstract/frames/__init__.py +0 -0
  64. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/abstract/frames/applied_function_tds_frame.py +0 -0
  65. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/abstract/frames/base_tds_frame.py +0 -0
  66. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/abstract/frames/input_tds_frame.py +0 -0
  67. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/abstract/function_helpers.py +0 -0
  68. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/__init__.py +0 -0
  69. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/__init__.py +0 -0
  70. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/__init__.py +0 -0
  71. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_concatenate_function.py +0 -0
  72. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_distinct_function.py +0 -0
  73. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_drop_function.py +0 -0
  74. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_extend_function.py +0 -0
  75. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_filter_function.py +0 -0
  76. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_group_by_function.py +0 -0
  77. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_head_function.py +0 -0
  78. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_join_by_columns_function.py +0 -0
  79. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_join_function.py +0 -0
  80. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_rename_columns_function.py +0 -0
  81. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_restrict_function.py +0 -0
  82. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_slice_function.py +0 -0
  83. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/functions/legacy_api_sort_function.py +0 -0
  84. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/legacy_api_applied_function_tds_frame.py +0 -0
  85. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/legacy_api_base_tds_frame.py +0 -0
  86. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/legacy_api_input_tds_frame.py +0 -0
  87. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legacy_api/frames/legacy_api_tds_frame.py +0 -0
  88. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/__init__.py +0 -0
  89. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/__init__.py +0 -0
  90. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/__init__.py +0 -0
  91. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_asofjoin_function.py +0 -0
  92. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_concatenate_function.py +0 -0
  93. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_distinct_function.py +0 -0
  94. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_drop_function.py +0 -0
  95. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_extend_function.py +0 -0
  96. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_filter_function.py +0 -0
  97. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_function_helpers.py +0 -0
  98. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_groupby_function.py +0 -0
  99. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_head_function.py +0 -0
  100. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_join_function.py +0 -0
  101. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_project_function.py +0 -0
  102. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_rename_function.py +0 -0
  103. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_select_function.py +0 -0
  104. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_slice_function.py +0 -0
  105. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_sort_function.py +0 -0
  106. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/functions/legendql_api_window_extend_function.py +0 -0
  107. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/legendql_api_applied_function_tds_frame.py +0 -0
  108. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/legendql_api_base_tds_frame.py +0 -0
  109. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/legendql_api_input_tds_frame.py +0 -0
  110. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/legendql_api/frames/legendql_api_tds_frame.py +0 -0
  111. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/__init__.py +0 -0
  112. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/frames/__init__.py +0 -0
  113. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/frames/functions/__init__.py +0 -0
  114. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/frames/functions/assign_function.py +0 -0
  115. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/frames/pandas_api_applied_function_tds_frame.py +0 -0
  116. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/frames/pandas_api_base_tds_frame.py +0 -0
  117. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/frames/pandas_api_input_tds_frame.py +0 -0
  118. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/pandas_api/frames/pandas_api_tds_frame.py +0 -0
  119. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/result_handler/__init__.py +0 -0
  120. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/result_handler/result_handler.py +0 -0
  121. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/result_handler/to_csv_file_result_handler.py +0 -0
  122. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/result_handler/to_json_file_result_handler.py +0 -0
  123. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/result_handler/to_string_result_handler.py +0 -0
  124. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/sql_query_helpers.py +0 -0
  125. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/tds_column.py +0 -0
  126. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/core/tds/tds_frame.py +0 -0
  127. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/__init__.py +0 -0
  128. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/database/__init__.py +0 -0
  129. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/database/vendors/__init__.py +0 -0
  130. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/database/vendors/postgres/__init__.py +0 -0
  131. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/database/vendors/postgres/postgres_sql_to_string.py +0 -0
  132. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/__init__.py +0 -0
  133. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/abstract/__init__.py +0 -0
  134. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/abstract/legend_function_input_frame.py +0 -0
  135. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/abstract/legend_service_input_frame.py +0 -0
  136. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/abstract/table_spec_input_frame.py +0 -0
  137. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legacy_api/__init__.py +0 -0
  138. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legacy_api/frames/__init__.py +0 -0
  139. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legacy_api/frames/legacy_api_legend_function_input_frame.py +0 -0
  140. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legacy_api/frames/legacy_api_legend_service_input_frame.py +0 -0
  141. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legacy_api/frames/legacy_api_table_spec_input_frame.py +0 -0
  142. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legendql_api/__init__.py +0 -0
  143. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legendql_api/frames/__init__.py +0 -0
  144. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legendql_api/frames/legendql_api_legend_service_input_frame.py +0 -0
  145. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/legendql_api/frames/legendql_api_table_spec_input_frame.py +0 -0
  146. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/pandas_api/__init__.py +0 -0
  147. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/pandas_api/frames/__init__.py +0 -0
  148. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/pandas_api/frames/pandas_api_legend_function_input_frame.py +0 -0
  149. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/pandas_api/frames/pandas_api_legend_service_input_frame.py +0 -0
  150. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/pandas_api/frames/pandas_api_table_spec_input_frame.py +0 -0
  151. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/result_handler/__init__.py +0 -0
  152. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/extensions/tds/result_handler/to_pandas_df_result_handler.py +0 -0
  153. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/legacy_api_tds_client.py +0 -0
  154. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/utils/__init__.py +0 -0
  155. {pylegend-0.4.0 → pylegend-0.5.0}/pylegend/utils/class_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pylegend
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Python language binding for Legend data management platform
5
5
  License: Apache-2.0
6
6
  Author: PyLegend Maintainers
@@ -32,7 +32,12 @@ from pylegend.core.project_cooridnates import (
32
32
  PersonalWorkspaceProjectCoordinates,
33
33
  GroupWorkspaceProjectCoordinates,
34
34
  )
35
- from pylegend.core.language import agg
35
+ from pylegend.core.language import (
36
+ agg,
37
+ now,
38
+ today,
39
+ current_user,
40
+ )
36
41
 
37
42
 
38
43
  __all__: PyLegendSequence[str] = [
@@ -53,6 +58,9 @@ __all__: PyLegendSequence[str] = [
53
58
  "GroupWorkspaceProjectCoordinates",
54
59
 
55
60
  "agg",
61
+ "now",
62
+ "today",
63
+ "current_user",
56
64
  ]
57
65
 
58
66
 
@@ -131,6 +131,7 @@ from pylegend.core.sql.metamodel_extension import (
131
131
  SecondExpression,
132
132
  EpochExpression,
133
133
  WindowExpression,
134
+ ConstantExpression,
134
135
  )
135
136
 
136
137
 
@@ -451,6 +452,8 @@ def expression_processor(
451
452
  return extension.process_epoch_expression(expression, config)
452
453
  elif isinstance(expression, WindowExpression):
453
454
  return extension.process_window_expression(expression, config)
455
+ elif isinstance(expression, ConstantExpression):
456
+ return expression.name
454
457
 
455
458
  else:
456
459
  raise ValueError("Unsupported expression type: " + str(type(expression))) # pragma: no cover
@@ -74,6 +74,7 @@ from pylegend.core.language.shared.primitive_collection import (
74
74
  from pylegend.core.language.shared.functions import (
75
75
  today,
76
76
  now,
77
+ current_user,
77
78
  )
78
79
 
79
80
  __all__: PyLegendSequence[str] = [
@@ -132,4 +133,5 @@ __all__: PyLegendSequence[str] = [
132
133
 
133
134
  "today",
134
135
  "now",
136
+ "current_user",
135
137
  ]
@@ -18,15 +18,20 @@ from pylegend._typing import (
18
18
  )
19
19
  from pylegend.core.language.shared.primitives.strictdate import PyLegendStrictDate
20
20
  from pylegend.core.language.shared.primitives.datetime import PyLegendDateTime
21
+ from pylegend.core.language.shared.primitives.string import PyLegendString
21
22
  from pylegend.core.language.shared.operations.date_operation_expressions import (
22
23
  PyLegendTodayExpression,
23
24
  PyLegendNowExpression,
24
25
  )
26
+ from pylegend.core.language.shared.operations.string_operation_expressions import (
27
+ PyLegendCurrentUserExpression,
28
+ )
25
29
 
26
30
 
27
31
  __all__: PyLegendSequence[str] = [
28
32
  "today",
29
33
  "now",
34
+ "current_user",
30
35
  ]
31
36
 
32
37
 
@@ -36,3 +41,7 @@ def today() -> PyLegendStrictDate:
36
41
 
37
42
  def now() -> PyLegendDateTime:
38
43
  return PyLegendDateTime(PyLegendNowExpression())
44
+
45
+
46
+ def current_user() -> PyLegendString:
47
+ return PyLegendString(PyLegendCurrentUserExpression())
@@ -21,7 +21,9 @@ from pylegend.core.language.shared.expression import (
21
21
  PyLegendExpressionDateTimeReturn,
22
22
  PyLegendExpressionStrictDateReturn,
23
23
  PyLegendExpressionIntegerReturn,
24
+ PyLegendExpressionBooleanReturn,
24
25
  )
26
+ from pylegend.core.language.shared.operations.binary_expression import PyLegendBinaryExpression
25
27
  from pylegend.core.language.shared.operations.nullary_expression import PyLegendNullaryExpression
26
28
  from pylegend.core.language.shared.operations.unary_expression import PyLegendUnaryExpression
27
29
  from pylegend.core.language.shared.helpers import generate_pure_functional_call
@@ -36,6 +38,8 @@ from pylegend.core.sql.metamodel import (
36
38
  CurrentTimeType,
37
39
  Cast,
38
40
  ColumnType,
41
+ ComparisonExpression,
42
+ ComparisonOperator,
39
43
  )
40
44
  from pylegend.core.sql.metamodel_extension import (
41
45
  FirstDayOfYearExpression,
@@ -83,6 +87,10 @@ __all__: PyLegendSequence[str] = [
83
87
  "PyLegendTodayExpression",
84
88
  "PyLegendNowExpression",
85
89
  "PyLegendDatePartExpression",
90
+ "PyLegendDateLessThanExpression",
91
+ "PyLegendDateLessThanEqualExpression",
92
+ "PyLegendDateGreaterThanExpression",
93
+ "PyLegendDateGreaterThanEqualExpression",
86
94
  ]
87
95
 
88
96
 
@@ -614,3 +622,119 @@ class PyLegendDatePartExpression(PyLegendUnaryExpression, PyLegendExpressionStri
614
622
  PyLegendDatePartExpression.__to_sql_func,
615
623
  PyLegendDatePartExpression.__to_pure_func
616
624
  )
625
+
626
+
627
+ class PyLegendDateLessThanExpression(PyLegendBinaryExpression, PyLegendExpressionBooleanReturn):
628
+
629
+ @staticmethod
630
+ def __to_sql_func(
631
+ expression1: Expression,
632
+ expression2: Expression,
633
+ frame_name_to_base_query_map: PyLegendDict[str, QuerySpecification],
634
+ config: FrameToSqlConfig
635
+ ) -> Expression:
636
+ return ComparisonExpression(expression1, expression2, ComparisonOperator.LESS_THAN)
637
+
638
+ @staticmethod
639
+ def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
640
+ return f"({op1_expr} < {op2_expr})"
641
+
642
+ def __init__(self, operand1: PyLegendExpressionDateReturn, operand2: PyLegendExpressionDateReturn) -> None:
643
+ PyLegendExpressionBooleanReturn.__init__(self)
644
+ PyLegendBinaryExpression.__init__(
645
+ self,
646
+ operand1,
647
+ operand2,
648
+ PyLegendDateLessThanExpression.__to_sql_func,
649
+ PyLegendDateLessThanExpression.__to_pure_func
650
+ )
651
+
652
+ def is_non_nullable(self) -> bool:
653
+ return True
654
+
655
+
656
+ class PyLegendDateLessThanEqualExpression(PyLegendBinaryExpression, PyLegendExpressionBooleanReturn):
657
+
658
+ @staticmethod
659
+ def __to_sql_func(
660
+ expression1: Expression,
661
+ expression2: Expression,
662
+ frame_name_to_base_query_map: PyLegendDict[str, QuerySpecification],
663
+ config: FrameToSqlConfig
664
+ ) -> Expression:
665
+ return ComparisonExpression(expression1, expression2, ComparisonOperator.LESS_THAN_OR_EQUAL)
666
+
667
+ @staticmethod
668
+ def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
669
+ return f"({op1_expr} <= {op2_expr})"
670
+
671
+ def __init__(self, operand1: PyLegendExpressionDateReturn, operand2: PyLegendExpressionDateReturn) -> None:
672
+ PyLegendExpressionBooleanReturn.__init__(self)
673
+ PyLegendBinaryExpression.__init__(
674
+ self,
675
+ operand1,
676
+ operand2,
677
+ PyLegendDateLessThanEqualExpression.__to_sql_func,
678
+ PyLegendDateLessThanEqualExpression.__to_pure_func
679
+ )
680
+
681
+ def is_non_nullable(self) -> bool:
682
+ return True
683
+
684
+
685
+ class PyLegendDateGreaterThanExpression(PyLegendBinaryExpression, PyLegendExpressionBooleanReturn):
686
+
687
+ @staticmethod
688
+ def __to_sql_func(
689
+ expression1: Expression,
690
+ expression2: Expression,
691
+ frame_name_to_base_query_map: PyLegendDict[str, QuerySpecification],
692
+ config: FrameToSqlConfig
693
+ ) -> Expression:
694
+ return ComparisonExpression(expression1, expression2, ComparisonOperator.GREATER_THAN)
695
+
696
+ @staticmethod
697
+ def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
698
+ return f"({op1_expr} > {op2_expr})"
699
+
700
+ def __init__(self, operand1: PyLegendExpressionDateReturn, operand2: PyLegendExpressionDateReturn) -> None:
701
+ PyLegendExpressionBooleanReturn.__init__(self)
702
+ PyLegendBinaryExpression.__init__(
703
+ self,
704
+ operand1,
705
+ operand2,
706
+ PyLegendDateGreaterThanExpression.__to_sql_func,
707
+ PyLegendDateGreaterThanExpression.__to_pure_func
708
+ )
709
+
710
+ def is_non_nullable(self) -> bool:
711
+ return True
712
+
713
+
714
+ class PyLegendDateGreaterThanEqualExpression(PyLegendBinaryExpression, PyLegendExpressionBooleanReturn):
715
+
716
+ @staticmethod
717
+ def __to_sql_func(
718
+ expression1: Expression,
719
+ expression2: Expression,
720
+ frame_name_to_base_query_map: PyLegendDict[str, QuerySpecification],
721
+ config: FrameToSqlConfig
722
+ ) -> Expression:
723
+ return ComparisonExpression(expression1, expression2, ComparisonOperator.GREATER_THAN_OR_EQUAL)
724
+
725
+ @staticmethod
726
+ def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
727
+ return f"({op1_expr} >= {op2_expr})"
728
+
729
+ def __init__(self, operand1: PyLegendExpressionDateReturn, operand2: PyLegendExpressionDateReturn) -> None:
730
+ PyLegendExpressionBooleanReturn.__init__(self)
731
+ PyLegendBinaryExpression.__init__(
732
+ self,
733
+ operand1,
734
+ operand2,
735
+ PyLegendDateGreaterThanEqualExpression.__to_sql_func,
736
+ PyLegendDateGreaterThanEqualExpression.__to_pure_func
737
+ )
738
+
739
+ def is_non_nullable(self) -> bool:
740
+ return True
@@ -20,12 +20,16 @@ from pylegend.core.language.shared.expression import (
20
20
  PyLegendExpression,
21
21
  PyLegendExpressionBooleanReturn,
22
22
  )
23
+ from pylegend.core.language.shared.helpers import generate_pure_functional_call
23
24
  from pylegend.core.language.shared.operations.binary_expression import PyLegendBinaryExpression
25
+ from pylegend.core.language.shared.operations.unary_expression import PyLegendUnaryExpression
24
26
  from pylegend.core.sql.metamodel import (
25
27
  Expression,
26
28
  QuerySpecification,
27
29
  ComparisonExpression,
28
30
  ComparisonOperator,
31
+ IsNullPredicate,
32
+ IsNotNullPredicate,
29
33
  )
30
34
  from pylegend.core.tds.tds_frame import FrameToSqlConfig
31
35
  from pylegend.core.tds.tds_frame import FrameToPureConfig
@@ -34,6 +38,8 @@ from pylegend.core.tds.tds_frame import FrameToPureConfig
34
38
  __all__: PyLegendSequence[str] = [
35
39
  "PyLegendPrimitiveEqualsExpression",
36
40
  "PyLegendPrimitiveNotEqualsExpression",
41
+ "PyLegendIsEmptyExpression",
42
+ "PyLegendIsNotEmptyExpression",
37
43
  ]
38
44
 
39
45
 
@@ -93,3 +99,57 @@ class PyLegendPrimitiveNotEqualsExpression(PyLegendBinaryExpression, PyLegendExp
93
99
 
94
100
  def is_non_nullable(self) -> bool:
95
101
  return True
102
+
103
+
104
+ class PyLegendIsEmptyExpression(PyLegendUnaryExpression, PyLegendExpressionBooleanReturn):
105
+
106
+ @staticmethod
107
+ def __to_sql_func(
108
+ expression: Expression,
109
+ frame_name_to_base_query_map: PyLegendDict[str, QuerySpecification],
110
+ config: FrameToSqlConfig
111
+ ) -> Expression:
112
+ return IsNullPredicate(expression)
113
+
114
+ @staticmethod
115
+ def __to_pure_func(op_expr: str, config: FrameToPureConfig) -> str:
116
+ return generate_pure_functional_call("isEmpty", [op_expr])
117
+
118
+ def __init__(self, operand: PyLegendExpression) -> None:
119
+ PyLegendExpressionBooleanReturn.__init__(self)
120
+ PyLegendUnaryExpression.__init__(
121
+ self,
122
+ operand,
123
+ PyLegendIsEmptyExpression.__to_sql_func,
124
+ PyLegendIsEmptyExpression.__to_pure_func
125
+ )
126
+
127
+ def is_non_nullable(self) -> bool:
128
+ return True
129
+
130
+
131
+ class PyLegendIsNotEmptyExpression(PyLegendUnaryExpression, PyLegendExpressionBooleanReturn):
132
+
133
+ @staticmethod
134
+ def __to_sql_func(
135
+ expression: Expression,
136
+ frame_name_to_base_query_map: PyLegendDict[str, QuerySpecification],
137
+ config: FrameToSqlConfig
138
+ ) -> Expression:
139
+ return IsNotNullPredicate(expression)
140
+
141
+ @staticmethod
142
+ def __to_pure_func(op_expr: str, config: FrameToPureConfig) -> str:
143
+ return generate_pure_functional_call("isNotEmpty", [op_expr])
144
+
145
+ def __init__(self, operand: PyLegendExpression) -> None:
146
+ PyLegendExpressionBooleanReturn.__init__(self)
147
+ PyLegendUnaryExpression.__init__(
148
+ self,
149
+ operand,
150
+ PyLegendIsNotEmptyExpression.__to_sql_func,
151
+ PyLegendIsNotEmptyExpression.__to_pure_func
152
+ )
153
+
154
+ def is_non_nullable(self) -> bool:
155
+ return True
@@ -23,6 +23,7 @@ from pylegend.core.language.shared.expression import (
23
23
  PyLegendExpressionBooleanReturn,
24
24
  )
25
25
  from pylegend.core.language.shared.operations.binary_expression import PyLegendBinaryExpression
26
+ from pylegend.core.language.shared.operations.nullary_expression import PyLegendNullaryExpression
26
27
  from pylegend.core.language.shared.operations.unary_expression import PyLegendUnaryExpression
27
28
  from pylegend.core.language.shared.helpers import generate_pure_functional_call
28
29
  from pylegend.core.sql.metamodel import (
@@ -43,6 +44,7 @@ from pylegend.core.sql.metamodel_extension import (
43
44
  StringTrimExpression,
44
45
  StringPosExpression,
45
46
  StringConcatExpression,
47
+ ConstantExpression,
46
48
  )
47
49
  from pylegend.core.tds.tds_frame import FrameToSqlConfig
48
50
  from pylegend.core.tds.tds_frame import FrameToPureConfig
@@ -66,6 +68,7 @@ __all__: PyLegendSequence[str] = [
66
68
  "PyLegendStringLessThanEqualExpression",
67
69
  "PyLegendStringGreaterThanExpression",
68
70
  "PyLegendStringGreaterThanEqualExpression",
71
+ "PyLegendCurrentUserExpression",
69
72
  ]
70
73
 
71
74
 
@@ -507,5 +510,27 @@ class PyLegendStringGreaterThanEqualExpression(PyLegendBinaryExpression, PyLegen
507
510
  )
508
511
 
509
512
 
513
+ class PyLegendCurrentUserExpression(PyLegendNullaryExpression, PyLegendExpressionStringReturn):
514
+
515
+ @staticmethod
516
+ def __to_sql_func(
517
+ frame_name_to_base_query_map: PyLegendDict[str, QuerySpecification],
518
+ config: FrameToSqlConfig
519
+ ) -> Expression:
520
+ return ConstantExpression('CURRENT_USER')
521
+
522
+ @staticmethod
523
+ def __to_pure_func(config: FrameToPureConfig) -> str:
524
+ return "currentUserId()"
525
+
526
+ def __init__(self) -> None:
527
+ PyLegendExpressionStringReturn.__init__(self)
528
+ PyLegendNullaryExpression.__init__(
529
+ self,
530
+ PyLegendCurrentUserExpression.__to_sql_func,
531
+ PyLegendCurrentUserExpression.__to_pure_func
532
+ )
533
+
534
+
510
535
  def _escape_like_param(param: str) -> str:
511
536
  return param.replace("_", "\\_").replace("%", "\\%")
@@ -21,6 +21,7 @@ from pylegend._typing import (
21
21
  )
22
22
  from pylegend.core.language.shared.primitives.primitive import PyLegendPrimitive
23
23
  from pylegend.core.language.shared.primitives.integer import PyLegendInteger
24
+ from pylegend.core.language.shared.primitives.boolean import PyLegendBoolean
24
25
  from pylegend.core.language.shared.expression import (
25
26
  PyLegendExpressionDateReturn,
26
27
  )
@@ -49,6 +50,10 @@ from pylegend.core.language.shared.operations.date_operation_expressions import
49
50
  PyLegendSecondExpression,
50
51
  PyLegendEpochExpression,
51
52
  PyLegendDatePartExpression,
53
+ PyLegendDateLessThanExpression,
54
+ PyLegendDateLessThanEqualExpression,
55
+ PyLegendDateGreaterThanExpression,
56
+ PyLegendDateGreaterThanEqualExpression,
52
57
  )
53
58
  from pylegend.core.sql.metamodel import (
54
59
  Expression,
@@ -153,6 +158,38 @@ class PyLegendDate(PyLegendPrimitive):
153
158
  from pylegend.core.language.shared.primitives.strictdate import PyLegendStrictDate
154
159
  return PyLegendStrictDate(PyLegendDatePartExpression(self.__value))
155
160
 
161
+ def __lt__(
162
+ self,
163
+ other: PyLegendUnion[date, datetime, "PyLegendStrictDate", "PyLegendDateTime", "PyLegendDate"]
164
+ ) -> "PyLegendBoolean":
165
+ PyLegendDate.validate_param_to_be_date(other, "Date less than (<) parameter")
166
+ other_op = PyLegendDate.__convert_to_date_expr(other)
167
+ return PyLegendBoolean(PyLegendDateLessThanExpression(self.__value, other_op))
168
+
169
+ def __le__(
170
+ self,
171
+ other: PyLegendUnion[date, datetime, "PyLegendStrictDate", "PyLegendDateTime", "PyLegendDate"]
172
+ ) -> "PyLegendBoolean":
173
+ PyLegendDate.validate_param_to_be_date(other, "Date less than equal (<=) parameter")
174
+ other_op = PyLegendDate.__convert_to_date_expr(other)
175
+ return PyLegendBoolean(PyLegendDateLessThanEqualExpression(self.__value, other_op))
176
+
177
+ def __gt__(
178
+ self,
179
+ other: PyLegendUnion[date, datetime, "PyLegendStrictDate", "PyLegendDateTime", "PyLegendDate"]
180
+ ) -> "PyLegendBoolean":
181
+ PyLegendDate.validate_param_to_be_date(other, "Date greater than (>) parameter")
182
+ other_op = PyLegendDate.__convert_to_date_expr(other)
183
+ return PyLegendBoolean(PyLegendDateGreaterThanExpression(self.__value, other_op))
184
+
185
+ def __ge__(
186
+ self,
187
+ other: PyLegendUnion[date, datetime, "PyLegendStrictDate", "PyLegendDateTime", "PyLegendDate"]
188
+ ) -> "PyLegendBoolean":
189
+ PyLegendDate.validate_param_to_be_date(other, "Date greater than equal (>=) parameter")
190
+ other_op = PyLegendDate.__convert_to_date_expr(other)
191
+ return PyLegendBoolean(PyLegendDateGreaterThanEqualExpression(self.__value, other_op))
192
+
156
193
  @staticmethod
157
194
  def __convert_to_date_expr(
158
195
  val: PyLegendUnion[date, datetime, "PyLegendDateTime", "PyLegendStrictDate", "PyLegendDate"]
@@ -30,6 +30,8 @@ from pylegend.core.language.shared.literal_expressions import convert_literal_to
30
30
  from pylegend.core.language.shared.operations.primitive_operation_expressions import (
31
31
  PyLegendPrimitiveEqualsExpression,
32
32
  PyLegendPrimitiveNotEqualsExpression,
33
+ PyLegendIsEmptyExpression,
34
+ PyLegendIsNotEmptyExpression,
33
35
  )
34
36
  from pylegend.core.tds.tds_frame import FrameToSqlConfig
35
37
  from pylegend.core.tds.tds_frame import FrameToPureConfig
@@ -84,6 +86,20 @@ class PyLegendPrimitive(metaclass=ABCMeta):
84
86
  from pylegend.core.language.shared.primitives.boolean import PyLegendBoolean
85
87
  return PyLegendBoolean(PyLegendPrimitiveNotEqualsExpression(self.value(), other_op))
86
88
 
89
+ def is_empty(self) -> "PyLegendBoolean":
90
+ from pylegend.core.language.shared.primitives.boolean import PyLegendBoolean
91
+ return PyLegendBoolean(PyLegendIsEmptyExpression(self.value()))
92
+
93
+ def is_null(self) -> "PyLegendBoolean":
94
+ return self.is_empty()
95
+
96
+ def is_not_empty(self) -> "PyLegendBoolean":
97
+ from pylegend.core.language.shared.primitives.boolean import PyLegendBoolean
98
+ return PyLegendBoolean(PyLegendIsNotEmptyExpression(self.value()))
99
+
100
+ def is_not_null(self) -> "PyLegendBoolean":
101
+ return self.is_not_empty()
102
+
87
103
  @staticmethod
88
104
  def __validate_param_to_be_primitive(
89
105
  param: "PyLegendUnion[int, float, bool, str, date, datetime, PyLegendPrimitive]",
@@ -80,6 +80,7 @@ __all__: PyLegendSequence[str] = [
80
80
  "SecondExpression",
81
81
  "EpochExpression",
82
82
  "WindowExpression",
83
+ "ConstantExpression",
83
84
  ]
84
85
 
85
86
 
@@ -733,3 +734,14 @@ class WindowExpression(Expression):
733
734
  super().__init__(_type="windowExpression")
734
735
  self.nested = nested
735
736
  self.window = window
737
+
738
+
739
+ class ConstantExpression(Expression):
740
+ name: str
741
+
742
+ def __init__(
743
+ self,
744
+ name: str
745
+ ) -> None:
746
+ super().__init__(_type="constantExpression")
747
+ self.name = name
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pylegend"
3
- version = "0.4.0"
3
+ version = "0.5.0"
4
4
  description = "Python language binding for Legend data management platform"
5
5
  authors = ["PyLegend Maintainers <legend@finos.org>"]
6
6
  license = "Apache-2.0"
File without changes
File without changes
File without changes
File without changes
File without changes