test_array_dict_data_accessor.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. # Copyright 2021-2024 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. from importlib import util
  12. from taipy.gui import Gui
  13. from taipy.gui.data.array_dict_data_accessor import _ArrayDictDataAccessor
  14. from taipy.gui.data.data_format import _DataFormat
  15. from taipy.gui.utils import _MapDict
  16. an_array = [1, 2, 3]
  17. def test_simple_data(gui: Gui, helpers):
  18. accessor = _ArrayDictDataAccessor()
  19. ret_data = accessor.get_data(gui, "x", an_array, {"start": 0, "end": -1}, _DataFormat.JSON)
  20. assert ret_data
  21. value = ret_data["value"]
  22. assert value
  23. assert value["rowcount"] == 3
  24. data = value["data"]
  25. assert len(data) == 3
  26. def test_simple_data_with_arrow(gui: Gui, helpers):
  27. if util.find_spec("pyarrow"):
  28. accessor = _ArrayDictDataAccessor()
  29. ret_data = accessor.get_data(gui, "x", an_array, {"start": 0, "end": -1}, _DataFormat.APACHE_ARROW)
  30. assert ret_data
  31. value = ret_data["value"]
  32. assert value
  33. assert value["rowcount"] == 3
  34. data = value["data"]
  35. assert isinstance(data, bytes)
  36. def test_slice(gui: Gui, helpers):
  37. accessor = _ArrayDictDataAccessor()
  38. value = accessor.get_data(gui, "x", an_array, {"start": 0, "end": 1}, _DataFormat.JSON)["value"]
  39. assert value["rowcount"] == 3
  40. data = value["data"]
  41. assert len(data) == 2
  42. value = accessor.get_data(gui, "x", an_array, {"start": "0", "end": "1"}, _DataFormat.JSON)["value"]
  43. data = value["data"]
  44. assert len(data) == 2
  45. def test_sort(gui: Gui, helpers):
  46. accessor = _ArrayDictDataAccessor()
  47. a_dict = {"name": ["A", "B", "C"], "value": [3, 2, 1]}
  48. query = {"columns": ["name", "value"], "start": 0, "end": -1, "orderby": "name", "sort": "desc"}
  49. data = accessor.get_data(gui, "x", a_dict, query, _DataFormat.JSON)["value"]["data"]
  50. assert data[0]["name"] == "C"
  51. def test_aggregate(gui: Gui, helpers, small_dataframe):
  52. accessor = _ArrayDictDataAccessor()
  53. a_dict = {"name": ["A", "B", "C", "A"], "value": [3, 2, 1, 2]}
  54. query = {"columns": ["name", "value"], "start": 0, "end": -1, "aggregates": ["name"], "applies": {"value": "sum"}}
  55. value = accessor.get_data(gui, "x", a_dict, query, _DataFormat.JSON)["value"]
  56. assert value["rowcount"] == 3
  57. data = value["data"]
  58. agregValue = next(v.get("value") for v in data if v.get("name") == "A")
  59. assert agregValue == 5
  60. def test_array_of_array(gui: Gui, helpers, small_dataframe):
  61. accessor = _ArrayDictDataAccessor()
  62. an_array = [[1, 2, 3], [2, 4, 6]]
  63. ret_data = accessor.get_data(gui, "x", an_array, {"start": 0, "end": -1}, _DataFormat.JSON)
  64. assert ret_data
  65. value = ret_data["value"]
  66. assert value
  67. assert value["rowcount"] == 2
  68. data = value["data"]
  69. assert len(data) == 2
  70. assert len(data[0]) == 4 # including _tp_index
  71. def test_empty_array(gui: Gui, helpers, small_dataframe):
  72. accessor = _ArrayDictDataAccessor()
  73. an_array: list[str] = []
  74. ret_data = accessor.get_data(gui, "x", an_array, {"start": 0, "end": -1}, _DataFormat.JSON)
  75. assert ret_data
  76. value = ret_data["value"]
  77. assert value
  78. assert value["rowcount"] == 0
  79. data = value["data"]
  80. assert len(data) == 0
  81. def test_array_of_diff_array(gui: Gui, helpers, small_dataframe):
  82. accessor = _ArrayDictDataAccessor()
  83. an_array = [[1, 2, 3], [2, 4]]
  84. ret_data = accessor.get_data(gui, "x", an_array, {"start": 0, "end": -1, "alldata": True}, _DataFormat.JSON)
  85. assert ret_data
  86. value = ret_data["value"]
  87. assert value
  88. assert value["multi"] is True
  89. data = value["data"]
  90. assert len(data) == 2
  91. assert len(data[0]["0/0"]) == 3
  92. assert len(data[1]["1/0"]) == 2
  93. def test_array_of_dicts(gui: Gui, helpers, small_dataframe):
  94. accessor = _ArrayDictDataAccessor()
  95. an_array_of_dicts = [
  96. {
  97. "temperatures": [
  98. [17.2, 27.4, 28.6, 21.5],
  99. [5.6, 15.1, 20.2, 8.1],
  100. [26.6, 22.8, 21.8, 24.0],
  101. [22.3, 15.5, 13.4, 19.6],
  102. [3.9, 18.9, 25.7, 9.8],
  103. ],
  104. "cities": ["Hanoi", "Paris", "Rio de Janeiro", "Sydney", "Washington"],
  105. },
  106. {"seasons": ["Winter", "Summer", "Spring", "Autumn"]},
  107. ]
  108. ret_data = accessor.get_data(
  109. gui, "x", an_array_of_dicts, {"start": 0, "end": -1, "alldata": True}, _DataFormat.JSON
  110. )
  111. assert ret_data
  112. value = ret_data["value"]
  113. assert value
  114. assert value["multi"] is True
  115. data = value["data"]
  116. assert len(data) == 2
  117. assert len(data[0]["temperatures"]) == 5
  118. assert len(data[1]["seasons"]) == 4
  119. def test_array_of_Mapdicts(gui: Gui, helpers, small_dataframe):
  120. accessor = _ArrayDictDataAccessor()
  121. dict1 = _MapDict(
  122. {
  123. "temperatures": [
  124. [17.2, 27.4, 28.6, 21.5],
  125. [5.6, 15.1, 20.2, 8.1],
  126. [26.6, 22.8, 21.8, 24.0],
  127. [22.3, 15.5, 13.4, 19.6],
  128. [3.9, 18.9, 25.7, 9.8],
  129. ],
  130. "cities": ["Hanoi", "Paris", "Rio de Janeiro", "Sydney", "Washington"],
  131. }
  132. )
  133. dict2 = _MapDict({"seasons": ["Winter", "Summer", "Spring", "Autumn"]})
  134. ret_data = accessor.get_data(gui, "x", [dict1, dict2], {"start": 0, "end": -1, "alldata": True}, _DataFormat.JSON)
  135. assert ret_data
  136. value = ret_data["value"]
  137. assert value
  138. assert value["multi"] is True
  139. data = value["data"]
  140. assert len(data) == 2
  141. assert len(data[0]["temperatures"]) == 5
  142. assert len(data[1]["seasons"]) == 4