wbfdm 1.44.5__tar.gz → 1.45.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.

Potentially problematic release.


This version of wbfdm might be problematic. Click here for more details.

Files changed (355) hide show
  1. {wbfdm-1.44.5 → wbfdm-1.45.0}/PKG-INFO +1 -1
  2. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/classifications.py +1 -0
  3. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/esg.py +1 -0
  4. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/exchanges.py +1 -0
  5. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/instrument_lists.py +1 -0
  6. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/instrument_prices.py +1 -0
  7. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/instrument_requests.py +1 -0
  8. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/instruments.py +1 -0
  9. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/instruments_relationships.py +1 -0
  10. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/options.py +1 -0
  11. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/esg/enums.py +2 -3
  12. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/esg/esg_analysis.py +1 -0
  13. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/esg/utils.py +1 -0
  14. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/financial_analysis/financial_metric_analysis.py +1 -0
  15. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/financial_analysis/financial_ratio_analysis.py +1 -0
  16. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/financial_analysis/financial_statistics_analysis.py +4 -1
  17. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/financial_analysis/statement_with_estimates.py +3 -4
  18. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/financial_analysis/utils.py +1 -0
  19. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/technical_analysis/technical_analysis.py +1 -0
  20. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/dsws/client.py +17 -2
  21. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/internal/dataloaders/market_data.py +1 -0
  22. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/admin/instruments.py +1 -0
  23. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/backends/base.py +5 -4
  24. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/backends/performances.py +4 -3
  25. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/backends/statistics.py +1 -0
  26. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/factories.py +1 -0
  27. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/filters.py +1 -0
  28. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/serializers.py +1 -0
  29. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tasks.py +2 -1
  30. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/backends/test_performances.py +1 -0
  31. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/backends/test_statistics.py +1 -0
  32. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/test_models.py +1 -0
  33. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/test_viewsets.py +1 -0
  34. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/viewsets/configs/display.py +1 -0
  35. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/viewsets/mixins.py +1 -0
  36. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/viewsets/viewsets.py +1 -0
  37. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/dataloaders/esg.py +1 -0
  38. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/dataloaders/esg_controversies.py +1 -0
  39. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/sync.py +1 -0
  40. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/adjustments.py +5 -5
  41. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/financials.py +1 -0
  42. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/market_data.py +9 -7
  43. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/officers.py +8 -10
  44. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/reporting_dates.py +1 -0
  45. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/statements.py +1 -0
  46. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/dataloaders/proxies.py +1 -0
  47. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/classifications.py +1 -0
  48. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/controversies.py +1 -0
  49. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/exchanges.py +1 -0
  50. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/instrument_list.py +1 -0
  51. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/instrument_prices.py +1 -0
  52. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/instruments.py +1 -0
  53. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/instruments_relationships.py +1 -0
  54. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/options.py +1 -0
  55. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/figures/financials/financial_analysis_charts.py +1 -0
  56. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/figures/financials/financials_charts.py +1 -0
  57. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/classifications.py +1 -0
  58. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/exchanges.py +1 -0
  59. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/financials.py +1 -0
  60. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/financials_analysis.py +1 -0
  61. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/instrument_prices.py +1 -0
  62. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/instruments.py +1 -0
  63. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/utils.py +1 -0
  64. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/cbinsights/mixin.py +1 -0
  65. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/mixin.py +1 -0
  66. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/utils/controller.py +1 -0
  67. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/handlers/instrument.py +1 -0
  68. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/handlers/instrument_price.py +5 -0
  69. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/cbinsights/deals.py +1 -0
  70. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/cbinsights/equities.py +1 -0
  71. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/cbinsights/fundamentals.py +1 -0
  72. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/instrument.py +1 -0
  73. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/instrument_price.py +1 -0
  74. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/resources/classification.py +1 -0
  75. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/resources/instrument_prices.py +1 -0
  76. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/resources/instruments.py +1 -0
  77. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/esg/controversies.py +1 -0
  78. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/instrument_lists.py +1 -0
  79. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/instrument_prices.py +1 -0
  80. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/instrument_requests.py +1 -0
  81. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/instruments.py +12 -7
  82. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/llm/create_instrument_news_relationships.py +2 -2
  83. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/mixin/instruments.py +24 -19
  84. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/options.py +1 -0
  85. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/private_equities.py +1 -0
  86. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/utils.py +1 -0
  87. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/esg.py +1 -0
  88. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/exchanges.py +1 -0
  89. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/classifications.py +1 -0
  90. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/instrument_lists.py +1 -0
  91. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/instrument_prices.py +1 -0
  92. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/instrument_relationships.py +1 -0
  93. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/instrument_requests.py +1 -0
  94. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/instruments.py +1 -0
  95. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/signals.py +3 -0
  96. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tasks.py +45 -5
  97. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/analysis/financial_analysis/test_statement_with_estimates.py +1 -0
  98. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/analysis/financial_analysis/test_utils.py +1 -0
  99. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/analysis/test_esg.py +1 -0
  100. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/dataloaders/test_cache.py +1 -0
  101. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/test_classifications.py +1 -0
  102. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/test_instrument_list.py +1 -0
  103. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/test_instrument_prices.py +1 -0
  104. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/test_instruments.py +2 -1
  105. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/test_merge.py +14 -9
  106. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/test_options.py +1 -0
  107. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/urls.py +1 -0
  108. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/buttons/instruments.py +1 -0
  109. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/esg.py +1 -0
  110. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/instrument_lists.py +1 -0
  111. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/instrument_prices.py +1 -0
  112. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/instrument_requests.py +1 -0
  113. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/instruments.py +31 -4
  114. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/instrument_requests.py +1 -0
  115. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/classifications.py +1 -0
  116. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/financials_analysis.py +1 -0
  117. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/instrument_prices.py +1 -0
  118. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/market_data.py +1 -0
  119. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/esg.py +1 -0
  120. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/exchanges.py +1 -0
  121. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/financial_analysis/financial_metric_analysis.py +1 -0
  122. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/financial_analysis/financial_ratio_analysis.py +2 -1
  123. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/financial_analysis/financial_summary.py +4 -4
  124. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/financial_analysis/statement_with_estimates.py +1 -0
  125. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/classifications.py +1 -0
  126. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/financials_analysis.py +1 -0
  127. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/instrument_lists.py +1 -0
  128. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/instrument_prices.py +1 -0
  129. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/instrument_requests.py +1 -0
  130. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/instruments.py +1 -0
  131. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/instruments_relationships.py +1 -0
  132. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/market_data.py +3 -2
  133. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/mixins.py +1 -0
  134. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/officers.py +1 -0
  135. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/prices.py +1 -0
  136. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/statements/statements.py +1 -0
  137. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/technical_analysis/monthly_performances.py +1 -0
  138. {wbfdm-1.44.5 → wbfdm-1.45.0}/.gitignore +0 -0
  139. {wbfdm-1.44.5 → wbfdm-1.45.0}/pyproject.toml +0 -0
  140. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/__init__.py +0 -0
  141. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/admin/__init__.py +0 -0
  142. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/__init__.py +0 -0
  143. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/esg/__init__.py +0 -0
  144. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/financial_analysis/__init__.py +0 -0
  145. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/technical_analysis/__init__.py +0 -0
  146. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/technical_analysis/traces.py +0 -0
  147. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/analysis/utils.py +0 -0
  148. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/apps.py +0 -0
  149. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/backends/dto.py +0 -0
  150. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/__init__.py +0 -0
  151. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/dsws/__init__.py +0 -0
  152. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/dsws/dataloaders/market_data.py +0 -0
  153. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/internal/__init__.py +0 -0
  154. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/internal/dataloaders/__init__.py +0 -0
  155. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/__init__.py +0 -0
  156. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/admin/__init__.py +0 -0
  157. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/admin/metrics.py +0 -0
  158. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/apps.py +0 -0
  159. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/backends/__init__.py +0 -0
  160. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/decorators.py +0 -0
  161. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/dispatch.py +0 -0
  162. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/dto.py +0 -0
  163. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/exceptions.py +0 -0
  164. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/migrations/0001_initial.py +0 -0
  165. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/migrations/0002_remove_instrumentmetric_unique_instrument_metric_and_more.py +0 -0
  166. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/migrations/__init__.py +0 -0
  167. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/models.py +0 -0
  168. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/orchestrators.py +0 -0
  169. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/registry.py +0 -0
  170. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/__init__.py +0 -0
  171. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/backends/__init__.py +0 -0
  172. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/conftest.py +0 -0
  173. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/test_dto.py +0 -0
  174. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/tests/test_tasks.py +0 -0
  175. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/urls.py +0 -0
  176. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/viewsets/__init__.py +0 -0
  177. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/viewsets/configs/__init__.py +0 -0
  178. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/viewsets/configs/menus.py +0 -0
  179. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/metric/viewsets/configs/utils.py +0 -0
  180. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/__init__.py +0 -0
  181. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/client.py +0 -0
  182. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/dataloaders/__init__.py +0 -0
  183. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/tests/__init__.py +0 -0
  184. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/tests/conftest.py +0 -0
  185. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/msci/tests/test_client.py +0 -0
  186. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/__init__.py +0 -0
  187. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/apps.py +0 -0
  188. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/database_routers.py +0 -0
  189. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/__init__.py +0 -0
  190. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/corporate_actions.py +5 -5
  191. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/dataloaders/utils.py +2 -2
  192. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/companies.sql +0 -0
  193. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/base_estimates.sql +0 -0
  194. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/calendarized.sql +0 -0
  195. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/complete.sql +0 -0
  196. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/estimates.sql +0 -0
  197. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/financials.sql +0 -0
  198. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/instruments.sql +0 -0
  199. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/jinja2/qa/sql/quotes.sql +0 -0
  200. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/sync/exchanges.py +0 -0
  201. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/sync/instruments.py +0 -0
  202. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/sync/utils.py +0 -0
  203. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/contrib/qa/tasks.py +0 -0
  204. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/dataloaders/__init__.py +0 -0
  205. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/dataloaders/cache.py +0 -0
  206. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/dataloaders/protocols.py +0 -0
  207. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/dataloaders/types.py +0 -0
  208. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/dynamic_preferences_registry.py +0 -0
  209. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/enums.py +0 -0
  210. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/factories/__init__.py +0 -0
  211. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/figures/__init__.py +0 -0
  212. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/figures/financials/__init__.py +0 -0
  213. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/filters/__init__.py +0 -0
  214. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/__init__.py +0 -0
  215. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/__init__.py +0 -0
  216. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/cbinsights/__init__.py +0 -0
  217. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/cbinsights/deals.py +0 -0
  218. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/cbinsights/equities.py +0 -0
  219. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/cbinsights/utils/__init__.py +0 -0
  220. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/cbinsights/utils/classifications.py +0 -0
  221. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/cbinsights/utils/client.py +0 -0
  222. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/__init__.py +0 -0
  223. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/daily_fundamental.py +0 -0
  224. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/fiscal_period.py +0 -0
  225. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/forecast.py +0 -0
  226. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/fundamental.py +0 -0
  227. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/geographic_segment.py +0 -0
  228. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/instrument.py +0 -0
  229. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/instrument_price.py +0 -0
  230. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/backends/refinitiv/utils/__init__.py +0 -0
  231. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/handlers/__init__.py +0 -0
  232. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/handlers/instrument_list.py +0 -0
  233. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/handlers/option.py +0 -0
  234. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/handlers/private_equities.py +0 -0
  235. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/__init__.py +0 -0
  236. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/cbinsights/__init__.py +0 -0
  237. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/__init__.py +0 -0
  238. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/daily_fundamental.py +0 -0
  239. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/forecast.py +0 -0
  240. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/fundamental.py +0 -0
  241. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/geographic_segment.py +0 -0
  242. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/parsers/refinitiv/utils.py +0 -0
  243. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/import_export/resources/__init__.py +0 -0
  244. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/jinja2.py +0 -0
  245. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/management/__init__.py +0 -0
  246. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/menu.py +0 -0
  247. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0001_initial.py +0 -0
  248. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0002_rename_statements_instrumentlookup_financials_and_more.py +0 -0
  249. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0003_instrument_estimate_backend_and_more.py +0 -0
  250. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0004_rename_financials_instrumentlookup_statements_and_more.py +0 -0
  251. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0005_instrument_corporate_action_backend.py +0 -0
  252. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0006_instrument_officer_backend.py +0 -0
  253. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0007_instrument_country_instrument_currency_and_more.py +0 -0
  254. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0008_controversy.py +0 -0
  255. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0009_alter_controversy_flag_alter_controversy_initiated_and_more.py +0 -0
  256. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0010_classification_classificationgroup_deal_exchange_and_more.py +0 -0
  257. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0011_delete_instrumentlookup_instrument_corporate_actions_and_more.py +0 -0
  258. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0012_instrumentprice_created_instrumentprice_modified.py +0 -0
  259. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0013_instrument_is_investable_universe_and_more.py +0 -0
  260. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0014_alter_controversy_instrument.py +0 -0
  261. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0015_instrument_instrument_investible_index.py +0 -0
  262. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0016_instrumenttype_name_repr.py +0 -0
  263. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0017_instrument_instrument_security_index.py +0 -0
  264. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0018_instrument_instrument_level_index.py +0 -0
  265. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0019_alter_controversy_source.py +0 -0
  266. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0020_optionaggregate_option_and_more.py +0 -0
  267. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0021_delete_instrumentdailystatistics.py +0 -0
  268. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0022_instrument_cusip_option_open_interest_20d_and_more.py +0 -0
  269. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0023_instrument_unique_ric_instrument_unique_rmc_and_more.py +0 -0
  270. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0024_option_open_interest_10d_option_volume_10d_and_more.py +0 -0
  271. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0025_instrument_is_primary_and_more.py +0 -0
  272. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0026_instrument_is_cash_equivalent.py +0 -0
  273. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0027_remove_instrument_unique_ric_and_more.py +0 -0
  274. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0028_instrumentprice_annualized_daily_volatility.py +0 -0
  275. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/0029_alter_instrumentprice_volume.py +0 -0
  276. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/migrations/__init__.py +0 -0
  277. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/__init__.py +0 -0
  278. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/esg/__init__.py +0 -0
  279. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/exchanges/__init__.py +0 -0
  280. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/exchanges/exchanges.py +0 -0
  281. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/fields.py +0 -0
  282. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/fk_fields.py +0 -0
  283. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/indicators.py +0 -0
  284. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/__init__.py +0 -0
  285. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/classifications.py +0 -0
  286. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/instrument_relationships.py +0 -0
  287. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/llm/__init__.py +0 -0
  288. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/mixin/__init__.py +0 -0
  289. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/mixin/financials_computed.py +0 -0
  290. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/mixin/financials_serializer_fields.py +0 -0
  291. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/models/instruments/querysets.py +0 -0
  292. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/preferences.py +0 -0
  293. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/__init__.py +0 -0
  294. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/__init__.py +0 -0
  295. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/instruments/mixins.py +0 -0
  296. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/serializers/officers.py +0 -0
  297. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/sync/__init__.py +0 -0
  298. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/sync/abstract.py +0 -0
  299. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/sync/runner.py +0 -0
  300. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/__init__.py +0 -0
  301. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/analysis/__init__.py +0 -0
  302. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/analysis/financial_analysis/__init__.py +0 -0
  303. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/conftest.py +0 -0
  304. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/dataloaders/__init__.py +0 -0
  305. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/__init__.py +0 -0
  306. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/models/test_exchanges.py +0 -0
  307. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/test_tasks.py +0 -0
  308. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/tests/tests.py +0 -0
  309. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/utils.py +0 -0
  310. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/__init__.py +0 -0
  311. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/__init__.py +0 -0
  312. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/buttons/__init__.py +0 -0
  313. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/buttons/classifications.py +0 -0
  314. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/buttons/exchanges.py +0 -0
  315. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/buttons/instrument_prices.py +0 -0
  316. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/__init__.py +0 -0
  317. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/classifications.py +0 -0
  318. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/exchanges.py +0 -0
  319. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/financial_summary.py +0 -0
  320. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/instruments_relationships.py +0 -0
  321. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/monthly_performances.py +0 -0
  322. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/officers.py +0 -0
  323. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/prices.py +0 -0
  324. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/statement_with_estimates.py +0 -0
  325. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/display/statements.py +0 -0
  326. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/__init__.py +0 -0
  327. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/classifications.py +0 -0
  328. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/esg.py +0 -0
  329. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/exchanges.py +0 -0
  330. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/financials_analysis.py +0 -0
  331. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/instrument_lists.py +0 -0
  332. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/instrument_prices.py +0 -0
  333. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/instruments.py +0 -0
  334. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/instruments_relationships.py +0 -0
  335. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/endpoints/statements.py +0 -0
  336. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/menus/__init__.py +0 -0
  337. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/menus/classifications.py +0 -0
  338. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/menus/exchanges.py +0 -0
  339. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/menus/instrument_lists.py +0 -0
  340. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/menus/instruments.py +0 -0
  341. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/menus/instruments_relationships.py +0 -0
  342. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/__init__.py +0 -0
  343. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/esg.py +0 -0
  344. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/exchanges.py +0 -0
  345. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/financial_ratio_analysis.py +0 -0
  346. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/instrument_requests.py +0 -0
  347. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/instruments.py +0 -0
  348. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/instruments_relationships.py +0 -0
  349. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/prices.py +0 -0
  350. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/configs/titles/statement_with_estimates.py +0 -0
  351. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/financial_analysis/__init__.py +0 -0
  352. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/__init__.py +0 -0
  353. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/instruments/utils.py +0 -0
  354. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/statements/__init__.py +0 -0
  355. {wbfdm-1.44.5 → wbfdm-1.45.0}/wbfdm/viewsets/technical_analysis/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbfdm
3
- Version: 1.44.5
3
+ Version: 1.45.0
4
4
  Summary: The workbench module ensures rapid access to diverse financial data (market, fundamental, forecasts, ESG), with features for storing instruments, classifying them, and conducting financial analysis.
5
5
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
6
6
  Requires-Dist: roman==4.*
@@ -1,5 +1,6 @@
1
1
  from django.contrib import admin
2
2
  from reversion_compare.admin import CompareVersionAdmin
3
+
3
4
  from wbfdm.models import Classification, ClassificationGroup
4
5
 
5
6
 
@@ -1,4 +1,5 @@
1
1
  from django.contrib import admin
2
+
2
3
  from wbfdm.models import Controversy
3
4
 
4
5
 
@@ -1,5 +1,6 @@
1
1
  from django import forms
2
2
  from django.contrib import admin
3
+
3
4
  from wbfdm.models import Exchange
4
5
 
5
6
 
@@ -1,4 +1,5 @@
1
1
  from django.contrib import admin
2
+
2
3
  from wbfdm.models import InstrumentList, InstrumentListThroughModel
3
4
 
4
5
 
@@ -1,6 +1,7 @@
1
1
  import pandas as pd
2
2
  from django.contrib import admin
3
3
  from wbcore.admin import ExportCsvMixin, ImportCsvMixin
4
+
4
5
  from wbfdm.models import Instrument, InstrumentPrice
5
6
 
6
7
 
@@ -1,4 +1,5 @@
1
1
  from django.contrib import admin
2
+
2
3
  from wbfdm.models import InstrumentRequest
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  from django.contrib import admin
2
+
2
3
  from wbfdm.models import Instrument, InstrumentType
3
4
  from wbfdm.models.instruments.instruments import import_prices_as_task
4
5
 
@@ -1,4 +1,5 @@
1
1
  from django.contrib import admin
2
+
2
3
  from wbfdm.models import (
3
4
  InstrumentClassificationThroughModel,
4
5
  InstrumentFavoriteGroup,
@@ -1,4 +1,5 @@
1
1
  from django.contrib import admin
2
+
2
3
  from wbfdm.models import Option, OptionAggregate
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  from wbcore.utils.enum import ChoiceEnum
2
+
2
3
  from wbfdm.enums import ESG
3
4
 
4
5
  from .utils import get_esg_df
@@ -52,9 +53,7 @@ class ESGAggregation(ChoiceEnum):
52
53
  "UNADJUSTED_GENDER_PAY_GAP": AggregationMethod.WEIGHTED_AVG_NORMALIZED,
53
54
  "BOARD_GENDER_DIVERSITY": AggregationMethod.WEIGHTED_AVG_NORMALIZED,
54
55
  "CONTROVERSIAL_WEAPONS_EXPOSURE": AggregationMethod.PERCENTAGE_SUM,
55
- }.get(
56
- self.name, AggregationMethod.WEIGHTED_AVG_NORMALIZED
57
- ) # default to weighted avg normalized
56
+ }.get(self.name, AggregationMethod.WEIGHTED_AVG_NORMALIZED) # default to weighted avg normalized
58
57
 
59
58
  def get_esg_code(self) -> ESG:
60
59
  return {
@@ -5,6 +5,7 @@ import numpy as np
5
5
  import pandas as pd
6
6
  from django.utils.functional import cached_property
7
7
  from wbcore.contrib.currency.models import Currency, CurrencyFXRates
8
+
8
9
  from wbfdm.enums import ESG
9
10
  from wbfdm.models import Instrument
10
11
 
@@ -1,4 +1,5 @@
1
1
  import pandas as pd
2
+
2
3
  from wbfdm.enums import ESG
3
4
  from wbfdm.models.instruments.instruments import InstrumentQuerySet
4
5
 
@@ -1,6 +1,7 @@
1
1
  from datetime import date
2
2
 
3
3
  import pandas as pd
4
+
4
5
  from wbfdm.enums import Financial, PeriodType, SeriesType
5
6
  from wbfdm.models import Instrument
6
7
  from wbfdm.utils import rename_period_index_level_to_repr
@@ -3,6 +3,7 @@ from datetime import date
3
3
 
4
4
  import pandas as pd
5
5
  from django.db.models import TextChoices
6
+
6
7
  from wbfdm.enums import Financial, MarketData, PeriodType
7
8
  from wbfdm.models import Instrument
8
9
 
@@ -3,6 +3,7 @@ from math import pow
3
3
 
4
4
  import numpy as np
5
5
  import pandas as pd
6
+ from dateutil.relativedelta import relativedelta
6
7
 
7
8
 
8
9
  class FinancialStatistics:
@@ -241,7 +242,9 @@ class FinancialStatistics:
241
242
  def get_annualized_daily_volatility(self) -> float:
242
243
  """Computed the annualized volatility"""
243
244
  df = self.compute_performance(freq=1)
244
- df = df.loc[df.index[-1].replace(year=df.index[-1].year - 1) :]
245
+ last_date = df.index[-1]
246
+ last_year = last_date - relativedelta(months=12)
247
+ df = df.loc[df.index >= last_year]
245
248
  return df.std()
246
249
 
247
250
  def prepare_daily_returns_instrument_vs_benchmark(self, benchmark_prices_df: pd.Series) -> pd.DataFrame:
@@ -1,4 +1,5 @@
1
1
  import pandas as pd
2
+
2
3
  from wbfdm.enums import CalendarType, Financial, MarketData
3
4
  from wbfdm.models import Instrument
4
5
 
@@ -334,10 +335,8 @@ class StatementWithEstimates:
334
335
  * 100,
335
336
  quarterly_df.get(Financial.EBIT.value, quarterly_empty_series).rolling(4, min_periods=1).sum()
336
337
  / (
337
- (
338
- quarterly_df.get(Financial.TOTAL_ASSETS.value, quarterly_empty_series)
339
- - quarterly_df.get(Financial.CURRENT_LIABILITIES.value, quarterly_empty_series)
340
- )
338
+ quarterly_df.get(Financial.TOTAL_ASSETS.value, quarterly_empty_series)
339
+ - quarterly_df.get(Financial.CURRENT_LIABILITIES.value, quarterly_empty_series)
341
340
  )
342
341
  * 100,
343
342
  ],
@@ -8,6 +8,7 @@ from wbcore.pandas.utils import (
8
8
  override_number_to_x,
9
9
  override_number_with_currency,
10
10
  )
11
+
11
12
  from wbfdm.enums import CalendarType, Financial, MarketData, PeriodType
12
13
  from wbfdm.models import Instrument
13
14
  from wbfdm.utils import rename_period_index_level_to_repr
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Literal
4
4
  import pandas as pd
5
5
  from pandas.tseries.offsets import BDay
6
6
  from stockstats import StockDataFrame
7
+
7
8
  from wbfdm.analysis.technical_analysis.traces import TechnicalAnalysisTraceFactory
8
9
  from wbfdm.enums import MarketData
9
10
 
@@ -1,14 +1,29 @@
1
1
  import math
2
2
  import re
3
- from datetime import date
3
+ from datetime import date, datetime
4
4
  from typing import Generator, List, Optional
5
5
 
6
6
  import DatastreamPy as dsweb
7
7
  import numpy as np
8
8
  import pandas as pd
9
+ import pytz
10
+ from django.core.cache import cache
11
+ from django.utils import timezone
9
12
  from wbcore.contrib.currency.models import Currency, CurrencyFXRates
10
13
 
11
14
 
15
+ class CachedTokenDataClient(dsweb.DataClient):
16
+ def _get_token(self, isProxy=False):
17
+ if (token := cache.get("dsws_token")) and (token_expiry := cache.get("dsws_token_expiry")):
18
+ self.token = token
19
+ self.tokenExpiry = timezone.make_aware(datetime.fromtimestamp(token_expiry), timezone=pytz.UTC)
20
+ else:
21
+ super()._get_token()
22
+ expiry_elapse = (self.tokenExpiry - timezone.now()).seconds
23
+ cache.set("dsws_token", self.token, timeout=expiry_elapse)
24
+ cache.set("dsws_token_expiry", datetime.timestamp(self.tokenExpiry), timeout=expiry_elapse)
25
+
26
+
12
27
  class Client:
13
28
  MAXIMUM_ITEMS_PER_BUNDLE: int = 500
14
29
  MAXIMUM_REQUESTS_PER_BUNDLE: int = 20
@@ -19,7 +34,7 @@ class Client:
19
34
  IBUNIT_DEFAULT_UNIT: float = 1e6
20
35
 
21
36
  def __init__(self, username: Optional[str] = None, password: Optional[str] = None):
22
- self.connection = dsweb.DataClient(None, username, password)
37
+ self.connection = CachedTokenDataClient(None, username, password)
23
38
  super().__init__()
24
39
 
25
40
  @classmethod
@@ -3,6 +3,7 @@ from decimal import Decimal
3
3
  from typing import Iterator
4
4
 
5
5
  from wbcore.contrib.dataloader.dataloaders import Dataloader
6
+
6
7
  from wbfdm.dataloaders.protocols import MarketDataProtocol
7
8
  from wbfdm.dataloaders.types import MarketDataDict
8
9
  from wbfdm.enums import MarketData
@@ -1,4 +1,5 @@
1
1
  from django.contrib import admin
2
+
2
3
  from wbfdm.admin.instruments import InstrumentModelAdmin as BaseInstrumentModelAdmin
3
4
  from wbfdm.models.instruments import Instrument
4
5
 
@@ -9,6 +9,7 @@ from django.db.models import F, Model, QuerySet, Value
9
9
  from rest_framework.serializers import Field
10
10
  from wbcore import serializers as wb_serializers
11
11
  from wbcore.contrib.currency.models import CurrencyFXRates
12
+
12
13
  from wbfdm.models import Instrument, InstrumentPrice
13
14
 
14
15
  from ..dto import Metric, MetricField, MetricKey
@@ -65,10 +66,10 @@ class AbstractBackend(Generic[T]):
65
66
  }
66
67
  )
67
68
  for extra_subfield in metric_key.extra_subfields:
68
- fields[
69
- f"{metric_key.key}_{extra_subfield.key}"
70
- ] = wb_serializers.ModelSerializer.serializer_field_mapping[extra_subfield.field_type](
71
- read_only=True, label=extra_subfield.label, **self.get_serializer_field_attr(extra_subfield)
69
+ fields[f"{metric_key.key}_{extra_subfield.key}"] = (
70
+ wb_serializers.ModelSerializer.serializer_field_mapping[
71
+ extra_subfield.field_type
72
+ ](read_only=True, label=extra_subfield.label, **self.get_serializer_field_attr(extra_subfield))
72
73
  )
73
74
  return fields
74
75
 
@@ -6,6 +6,7 @@ import numpy as np
6
6
  import pandas as pd
7
7
  from dateutil.relativedelta import relativedelta
8
8
  from django.db.models import Avg, BooleanField, DateField, F, QuerySet
9
+
9
10
  from wbfdm.models import Instrument, InstrumentPrice, RelatedInstrumentThroughModel
10
11
 
11
12
  from ..decorators import register
@@ -252,9 +253,9 @@ class InstrumentPerformanceMetricBackend(InstrumentMetricBaseBackend):
252
253
 
253
254
  with suppress(KeyError):
254
255
  start_date = Dataloader.get_performance_date_map(pivot_date)[metric_field.key.replace("previous_", "")]
255
- attrs[
256
- "help_text"
257
- ] = f"The {metric_field.label} performance is computed from {start_date:%Y-%m-%d} to {pivot_date:%Y-%m-%d}"
256
+ attrs["help_text"] = (
257
+ f"The {metric_field.label} performance is computed from {start_date:%Y-%m-%d} to {pivot_date:%Y-%m-%d}"
258
+ )
258
259
  return attrs
259
260
 
260
261
 
@@ -5,6 +5,7 @@ from typing import Generator
5
5
  import pandas as pd
6
6
  from django.db.models import Avg, Sum
7
7
  from wbcore.serializers.fields.number import DisplayMode
8
+
8
9
  from wbfdm.enums import Financial, PeriodType, SeriesType
9
10
  from wbfdm.models import Instrument, InstrumentPrice
10
11
 
@@ -1,6 +1,7 @@
1
1
  import factory
2
2
  from django.contrib.contenttypes.models import ContentType
3
3
  from faker import Faker
4
+
4
5
  from wbfdm.contrib.metric.models import InstrumentMetric
5
6
  from wbfdm.factories import InstrumentFactory
6
7
  from wbfdm.models import Instrument
@@ -1,6 +1,7 @@
1
1
  from django.contrib.contenttypes.models import ContentType
2
2
  from django.utils.translation import gettext as _
3
3
  from wbcore import filters
4
+
4
5
  from wbfdm.contrib.metric.models import InstrumentMetric
5
6
 
6
7
  from .registry import backend_registry
@@ -1,6 +1,7 @@
1
1
  from rest_framework.reverse import reverse
2
2
  from wbcore import serializers as wb_serializers
3
3
  from wbcore.content_type.serializers import ContentTypeRepresentationSerializer
4
+
4
5
  from wbfdm.contrib.metric.models import InstrumentMetric
5
6
  from wbfdm.serializers.instruments import InstrumentRepresentationSerializer
6
7
 
@@ -2,6 +2,7 @@ from datetime import date
2
2
 
3
3
  from celery import shared_task
4
4
  from django.contrib.contenttypes.models import ContentType
5
+
5
6
  from wbfdm.contrib.metric.orchestrators import MetricOrchestrator
6
7
 
7
8
 
@@ -11,7 +12,7 @@ def compute_metrics_as_task(
11
12
  key: str | None = None,
12
13
  basket_content_type_id: int | None = None,
13
14
  basket_id: int | None = None,
14
- **kwargs
15
+ **kwargs,
15
16
  ):
16
17
  """
17
18
  Run the orchestrator as a async task periodically for all keys and baskets
@@ -6,6 +6,7 @@ import pytest
6
6
  from django.contrib.contenttypes.models import ContentType
7
7
  from faker import Faker
8
8
  from pandas.tseries.offsets import BDay
9
+
9
10
  from wbfdm.models import Instrument, RelatedInstrumentThroughModel
10
11
 
11
12
  fake = Faker()
@@ -3,6 +3,7 @@ from unittest.mock import patch
3
3
 
4
4
  import pytest
5
5
  from faker import Faker
6
+
6
7
  from wbfdm.dataloaders.proxies import InstrumentDataloaderProxy
7
8
 
8
9
  fake = Faker()
@@ -1,5 +1,6 @@
1
1
  import pytest
2
2
  from django.contrib.contenttypes.models import ContentType
3
+
3
4
  from wbfdm.models import Instrument
4
5
 
5
6
  from ..dto import Metric
@@ -5,6 +5,7 @@ from faker import Faker
5
5
  from rest_framework.test import APIRequestFactory
6
6
  from wbcore import viewsets
7
7
  from wbcore.utils.strings import get_aggregate_symbol
8
+
8
9
  from wbfdm.contrib.metric.backends.performances import (
9
10
  PERFORMANCE_METRIC,
10
11
  InstrumentPerformanceMetricBackend,
@@ -9,6 +9,7 @@ from wbcore.metadata.configs.display.instance_display.shortcuts import (
9
9
  )
10
10
  from wbcore.metadata.configs.display.instance_display.utils import repeat_field
11
11
  from wbcore.metadata.configs.display.view_config import DisplayViewConfig
12
+
12
13
  from wbfdm.contrib.metric.dto import MetricField
13
14
 
14
15
 
@@ -6,6 +6,7 @@ from django.utils.functional import cached_property
6
6
  from wbcore import filters
7
7
  from wbcore.metadata.metadata import WBCoreMetadata
8
8
  from wbcore.utils.strings import get_aggregate_symbol
9
+
9
10
  from wbfdm.contrib.metric.models import InstrumentMetric
10
11
  from wbfdm.contrib.metric.registry import backend_registry
11
12
  from wbfdm.contrib.metric.viewsets.configs.display import (
@@ -1,5 +1,6 @@
1
1
  from django.db.models import Case, Exists, F, IntegerField, OuterRef, When
2
2
  from wbcore import viewsets
3
+
3
4
  from wbfdm.contrib.metric.filters import InstrumentMetricFilterSet
4
5
  from wbfdm.contrib.metric.models import InstrumentMetric
5
6
  from wbfdm.contrib.metric.serializers import (
@@ -3,6 +3,7 @@ from typing import Iterator
3
3
 
4
4
  from django.conf import settings
5
5
  from wbcore.contrib.dataloader.dataloaders import Dataloader
6
+
6
7
  from wbfdm.dataloaders.protocols import ESGProtocol
7
8
  from wbfdm.dataloaders.types import ESGDataDict
8
9
  from wbfdm.enums import ESG
@@ -3,6 +3,7 @@ from typing import Iterator
3
3
 
4
4
  from django.conf import settings
5
5
  from wbcore.contrib.dataloader.dataloaders import Dataloader
6
+
6
7
  from wbfdm.dataloaders.protocols import ESGControversyProtocol
7
8
  from wbfdm.dataloaders.types import ESGControversyDataDict
8
9
 
@@ -1,4 +1,5 @@
1
1
  from django.db.models import Q, QuerySet
2
+
2
3
  from wbfdm.models import Instrument
3
4
  from wbfdm.sync.abstract import Sync
4
5
 
@@ -3,18 +3,18 @@ from datetime import date
3
3
  from itertools import batched
4
4
  from typing import Iterator
5
5
 
6
+ import pypika as pk
6
7
  from django.db import ProgrammingError, connections
8
+ from pypika import functions as fn
9
+ from pypika.enums import Order, SqlTypes
10
+ from pypika.terms import LiteralValue
7
11
  from wbcore.contrib.dataloader.dataloaders import Dataloader
8
12
  from wbcore.contrib.dataloader.utils import dictfetchall
13
+
9
14
  from wbfdm.contrib.qa.dataloaders.utils import SOURCE_DS2
10
15
  from wbfdm.dataloaders.protocols import AdjustmentsProtocol
11
16
  from wbfdm.dataloaders.types import AdjustmentDataDict
12
17
 
13
- import pypika as pk
14
- from pypika import functions as fn
15
- from pypika.enums import SqlTypes, Order
16
- from pypika.terms import LiteralValue
17
-
18
18
 
19
19
  class DatastreamAdjustmentsDataloader(AdjustmentsProtocol, Dataloader):
20
20
  def adjustments(self, from_date: date | None = None, to_date: date | None = None) -> Iterator[AdjustmentDataDict]:
@@ -7,6 +7,7 @@ from django.template.loader import get_template
7
7
  from jinjasql import JinjaSql # type: ignore
8
8
  from wbcore.contrib.dataloader.dataloaders import Dataloader
9
9
  from wbcore.contrib.dataloader.utils import dictfetchall
10
+
10
11
  from wbfdm.dataloaders.protocols import FinancialsProtocol
11
12
  from wbfdm.dataloaders.types import FinancialDataDict
12
13
  from wbfdm.enums import (
@@ -1,19 +1,21 @@
1
1
  from contextlib import suppress
2
- from functools import reduce
3
- from itertools import batched
4
2
  from datetime import date
5
3
  from enum import Enum
4
+ from functools import reduce
5
+ from itertools import batched
6
6
  from typing import Iterator
7
- import pypika as pk
8
- from pypika import Column, MSSQLQuery, functions as fn
9
- from pypika.enums import SqlTypes, Order
10
- from pypika.terms import ValueWrapper, LiteralValue
11
7
 
8
+ import pypika as pk
12
9
  from django.db import ProgrammingError, connections
10
+ from pypika import Column, MSSQLQuery
11
+ from pypika import functions as fn
12
+ from pypika.enums import Order, SqlTypes
13
+ from pypika.terms import LiteralValue, ValueWrapper
13
14
  from wbcore.contrib.dataloader.dataloaders import Dataloader
14
15
  from wbcore.contrib.dataloader.utils import dictfetchall
15
- from wbfdm.dataloaders.protocols import MarketDataProtocol
16
+
16
17
  from wbfdm.contrib.qa.dataloaders.utils import create_table
18
+ from wbfdm.dataloaders.protocols import MarketDataProtocol
17
19
  from wbfdm.dataloaders.types import MarketDataDict
18
20
  from wbfdm.enums import Frequency, MarketData
19
21
 
@@ -1,20 +1,18 @@
1
- from typing import Iterator
2
-
3
- from django.db import connections, ProgrammingError
4
- from wbcore.contrib.dataloader.dataloaders import Dataloader
5
- from wbcore.contrib.dataloader.utils import dictfetchall
6
- from wbfdm.dataloaders.protocols import OfficersProtocol
7
- from wbfdm.dataloaders.types import OfficerDataDict
8
- from itertools import batched
9
1
  from contextlib import suppress
2
+ from itertools import batched
3
+ from typing import Iterator
10
4
 
11
5
  import pypika as pk
6
+ from django.db import ProgrammingError, connections
12
7
  from pypika import functions as fn
8
+ from pypika.analytics import RowNumber
13
9
  from pypika.enums import SqlTypes
14
10
  from pypika.terms import LiteralValue
11
+ from wbcore.contrib.dataloader.dataloaders import Dataloader
12
+ from wbcore.contrib.dataloader.utils import dictfetchall
15
13
 
16
-
17
- from pypika.analytics import RowNumber
14
+ from wbfdm.dataloaders.protocols import OfficersProtocol
15
+ from wbfdm.dataloaders.types import OfficerDataDict
18
16
 
19
17
 
20
18
  class RKDOfficersDataloader(OfficersProtocol, Dataloader):
@@ -4,6 +4,7 @@ from django.db import connections
4
4
  from jinjasql import JinjaSql
5
5
  from wbcore.contrib.dataloader.dataloaders import Dataloader
6
6
  from wbcore.contrib.dataloader.utils import dictfetchall
7
+
7
8
  from wbfdm.dataloaders.protocols import ReportDateProtocol
8
9
  from wbfdm.dataloaders.types import ReportDateDataDict
9
10
 
@@ -6,6 +6,7 @@ from django.db import connections
6
6
  from jinjasql import JinjaSql # type: ignore
7
7
  from wbcore.contrib.dataloader.dataloaders import Dataloader
8
8
  from wbcore.contrib.dataloader.utils import dictfetchall
9
+
9
10
  from wbfdm.dataloaders.protocols import StatementsProtocol
10
11
  from wbfdm.dataloaders.types import StatementDataDict
11
12
  from wbfdm.enums import DataType, Financial, PeriodType, StatementType
@@ -2,6 +2,7 @@ from datetime import date
2
2
  from typing import Iterator
3
3
 
4
4
  from wbcore.contrib.dataloader.dataloaders import DataloaderProxy
5
+
5
6
  from wbfdm.dataloaders.protocols import (
6
7
  AdjustmentsProtocol,
7
8
  CorporateActionsProtocol,
@@ -1,5 +1,6 @@
1
1
  import factory
2
2
  import rstr
3
+
3
4
  from wbfdm.models import (
4
5
  Classification,
5
6
  ClassificationGroup,
@@ -1,4 +1,5 @@
1
1
  import factory
2
+
2
3
  from wbfdm.enums import (
3
4
  ESGControveryFlag,
4
5
  ESGControverySeverity,
@@ -1,5 +1,6 @@
1
1
  import factory
2
2
  import rstr
3
+
3
4
  from wbfdm.models import Exchange
4
5
 
5
6
 
@@ -1,5 +1,6 @@
1
1
  import factory
2
2
  from slugify import slugify
3
+
3
4
  from wbfdm.models import InstrumentList, InstrumentListThroughModel
4
5
 
5
6
 
@@ -5,6 +5,7 @@ from decimal import Decimal
5
5
  import factory
6
6
  from pandas.tseries.offsets import BDay
7
7
  from wbcore.contrib.currency.models import CurrencyFXRates
8
+
8
9
  from wbfdm.models import InstrumentPrice
9
10
 
10
11
 
@@ -1,6 +1,7 @@
1
1
  import factory
2
2
  import rstr
3
3
  from slugify import slugify
4
+
4
5
  from wbfdm.models import Instrument, InstrumentType
5
6
 
6
7
 
@@ -1,4 +1,5 @@
1
1
  import factory
2
+
2
3
  from wbfdm.models import InstrumentFavoriteGroup, RelatedInstrumentThroughModel
3
4
 
4
5
 
@@ -3,6 +3,7 @@ from datetime import timedelta
3
3
  import factory
4
4
  from faker import Faker
5
5
  from pandas.tseries.offsets import BDay
6
+
6
7
  from wbfdm.models import Option, OptionAggregate
7
8
 
8
9
  fake = Faker()
@@ -6,6 +6,7 @@ import numpy as np
6
6
  import pandas as pd
7
7
  from django.db import models
8
8
  from wbcore.contrib.currency.models import CurrencyFXRates
9
+
9
10
  from wbfdm.models import Instrument
10
11
 
11
12
 
@@ -11,6 +11,7 @@ from django.db.models import ExpressionWrapper, F, FloatField, QuerySet
11
11
  from pandas.tseries.offsets import BYearEnd
12
12
  from plotly.subplots import make_subplots
13
13
  from wbcore.contrib.currency.models import CurrencyFXRates
14
+
14
15
  from wbfdm.enums import MarketData
15
16
  from wbfdm.models import Instrument, InstrumentPrice
16
17
 
@@ -1,4 +1,5 @@
1
1
  from wbcore import filters as wb_filters
2
+
2
3
  from wbfdm.models import (
3
4
  Classification,
4
5
  ClassificationGroup,