wbfdm 1.46.12__tar.gz → 1.46.14__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.
- {wbfdm-1.46.12 → wbfdm-1.46.14}/PKG-INFO +1 -1
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/backends/base.py +8 -2
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/backends/performances.py +2 -1
- wbfdm-1.46.14/wbfdm/contrib/metric/backends/utils.py +5 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/backends/test_performances.py +7 -1
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/querysets.py +16 -20
- {wbfdm-1.46.12 → wbfdm-1.46.14}/.gitignore +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/pyproject.toml +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/instrument_lists.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/instrument_requests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/instruments_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/admin/options.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/esg/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/esg/enums.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/esg/esg_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/esg/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/financial_metric_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/financial_ratio_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/financial_statistics_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/statement_with_estimates.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/technical_analysis/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/technical_analysis/technical_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/technical_analysis/traces.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/apps.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/backends/dto.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/dsws/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/dsws/client.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/dsws/dataloaders/market_data.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/internal/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/internal/dataloaders/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/internal/dataloaders/market_data.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/admin/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/admin/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/admin/metrics.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/apps.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/backends/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/backends/statistics.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/decorators.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/dispatch.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/dto.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/exceptions.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/factories.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/filters.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/migrations/0001_initial.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/migrations/0002_remove_instrumentmetric_unique_instrument_metric_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/migrations/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/models.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/orchestrators.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/registry.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/serializers.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tasks.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/backends/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/backends/test_statistics.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/conftest.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/test_dto.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/test_models.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/test_tasks.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/tests/test_viewsets.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/urls.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/viewsets/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/viewsets/configs/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/viewsets/configs/display.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/viewsets/configs/menus.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/viewsets/configs/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/viewsets/mixins.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/metric/viewsets/viewsets.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/client.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/dataloaders/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/dataloaders/esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/dataloaders/esg_controversies.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/sync.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/tests/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/tests/conftest.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/msci/tests/test_client.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/apps.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/database_routers.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/adjustments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/corporate_actions.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/financials.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/market_data.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/officers.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/reporting_dates.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/statements.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/dataloaders/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/companies.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/base_estimates.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/calendarized.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/complete.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/estimates.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/financials.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/instruments.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/jinja2/qa/sql/quotes.sql +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/sync/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/sync/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/sync/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/contrib/qa/tasks.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/dataloaders/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/dataloaders/cache.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/dataloaders/protocols.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/dataloaders/proxies.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/dataloaders/types.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/dynamic_preferences_registry.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/enums.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/controversies.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/instrument_list.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/instruments_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/factories/options.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/figures/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/figures/financials/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/figures/financials/financial_analysis_charts.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/figures/financials/financials_charts.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/financials.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/financials_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/filters/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/deals.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/equities.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/mixin.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/utils/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/utils/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/utils/client.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/daily_fundamental.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/fiscal_period.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/forecast.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/fundamental.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/geographic_segment.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/instrument.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/instrument_price.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/mixin.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/utils/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/utils/controller.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/handlers/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/handlers/instrument.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/handlers/instrument_list.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/handlers/instrument_price.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/handlers/option.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/handlers/private_equities.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/cbinsights/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/cbinsights/deals.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/cbinsights/equities.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/cbinsights/fundamentals.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/daily_fundamental.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/forecast.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/fundamental.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/geographic_segment.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/instrument.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/instrument_price.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/parsers/refinitiv/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/resources/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/resources/classification.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/resources/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/resources/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/jinja2.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/management/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/menu.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0001_initial.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0002_rename_statements_instrumentlookup_financials_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0003_instrument_estimate_backend_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0004_rename_financials_instrumentlookup_statements_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0005_instrument_corporate_action_backend.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0006_instrument_officer_backend.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0007_instrument_country_instrument_currency_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0008_controversy.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0009_alter_controversy_flag_alter_controversy_initiated_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0010_classification_classificationgroup_deal_exchange_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0011_delete_instrumentlookup_instrument_corporate_actions_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0012_instrumentprice_created_instrumentprice_modified.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0013_instrument_is_investable_universe_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0014_alter_controversy_instrument.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0015_instrument_instrument_investible_index.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0016_instrumenttype_name_repr.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0017_instrument_instrument_security_index.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0018_instrument_instrument_level_index.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0019_alter_controversy_source.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0020_optionaggregate_option_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0021_delete_instrumentdailystatistics.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0022_instrument_cusip_option_open_interest_20d_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0023_instrument_unique_ric_instrument_unique_rmc_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0024_option_open_interest_10d_option_volume_10d_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0025_instrument_is_primary_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0026_instrument_is_cash_equivalent.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0027_remove_instrument_unique_ric_and_more.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0028_instrumentprice_annualized_daily_volatility.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0029_alter_instrumentprice_volume.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/0030_alter_relatedinstrumentthroughmodel_related_type.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/migrations/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/esg/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/esg/controversies.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/exchanges/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/exchanges/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/fields.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/fk_fields.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/indicators.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/instrument_lists.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/instrument_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/instrument_requests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/llm/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/llm/create_instrument_news_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/mixin/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/mixin/financials_computed.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/mixin/financials_serializer_fields.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/mixin/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/options.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/private_equities.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/models/instruments/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/preferences.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/instrument_lists.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/instrument_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/instrument_requests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/instruments/mixins.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/serializers/officers.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/signals.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/sync/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/sync/abstract.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/sync/runner.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tasks.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/analysis/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/analysis/financial_analysis/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/analysis/financial_analysis/test_statement_with_estimates.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/analysis/financial_analysis/test_utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/analysis/test_esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/conftest.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/dataloaders/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/dataloaders/test_cache.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/test_classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/test_exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/test_instrument_list.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/test_instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/test_instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/test_merge.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/models/test_options.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/test_tasks.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/tests/tests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/urls.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/buttons/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/buttons/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/buttons/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/buttons/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/buttons/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/financial_summary.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/instrument_lists.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/instrument_requests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/instruments_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/monthly_performances.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/officers.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/statement_with_estimates.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/display/statements.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/financials_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/instrument_lists.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/instrument_requests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/instruments_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/endpoints/statements.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/menus/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/menus/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/menus/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/menus/instrument_lists.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/menus/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/menus/instruments_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/financial_ratio_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/financials_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/instrument_requests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/instruments_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/market_data.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/configs/titles/statement_with_estimates.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/esg.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/exchanges.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/financial_analysis/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/financial_analysis/financial_metric_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/financial_analysis/financial_ratio_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/financial_analysis/financial_summary.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/financial_analysis/statement_with_estimates.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/classifications.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/financials_analysis.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/instrument_lists.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/instrument_prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/instrument_requests.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/instruments.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/instruments_relationships.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/instruments/utils.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/market_data.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/mixins.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/officers.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/prices.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/statements/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/statements/statements.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/technical_analysis/__init__.py +0 -0
- {wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/viewsets/technical_analysis/monthly_performances.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wbfdm
|
|
3
|
-
Version: 1.46.
|
|
3
|
+
Version: 1.46.14
|
|
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.*
|
|
@@ -14,6 +14,7 @@ from wbfdm.models import Instrument, InstrumentPrice
|
|
|
14
14
|
|
|
15
15
|
from ..dto import Metric, MetricField, MetricKey
|
|
16
16
|
from ..exceptions import MetricInvalidParameterException
|
|
17
|
+
from .utils import get_today
|
|
17
18
|
|
|
18
19
|
T = TypeVar("T", bound=Model)
|
|
19
20
|
|
|
@@ -82,11 +83,16 @@ class InstrumentMetricBaseBackend(AbstractBackend[Instrument]):
|
|
|
82
83
|
return super().get_queryset().filter(is_investable_universe=True)
|
|
83
84
|
|
|
84
85
|
def _get_valid_date(self, instrument: Instrument) -> date:
|
|
86
|
+
val_date = None
|
|
85
87
|
if self.val_date is None and instrument.last_price_date:
|
|
86
|
-
|
|
88
|
+
val_date = instrument.last_price_date
|
|
87
89
|
elif self.val_date:
|
|
88
90
|
with suppress(InstrumentPrice.DoesNotExist):
|
|
89
|
-
|
|
91
|
+
val_date = instrument.prices.filter(date__lte=self.val_date).latest("date").date
|
|
92
|
+
if val_date:
|
|
93
|
+
return min(
|
|
94
|
+
[val_date, (get_today() - pd.tseries.offsets.BDay(1)).date()]
|
|
95
|
+
) # ensure that value date is at least lower than today (otherwise, we might compute performance for intraday, which we do not want yet
|
|
90
96
|
else:
|
|
91
97
|
raise MetricInvalidParameterException()
|
|
92
98
|
|
|
@@ -12,6 +12,7 @@ from wbfdm.models import Instrument, InstrumentPrice, RelatedInstrumentThroughMo
|
|
|
12
12
|
from ..decorators import register
|
|
13
13
|
from ..dto import Metric, MetricField, MetricKey
|
|
14
14
|
from .base import BaseDataloader, InstrumentMetricBaseBackend
|
|
15
|
+
from .utils import get_today
|
|
15
16
|
|
|
16
17
|
PERFORMANCE_METRIC = MetricKey(
|
|
17
18
|
key="performance",
|
|
@@ -247,7 +248,7 @@ class InstrumentPerformanceMetricBackend(InstrumentMetricBaseBackend):
|
|
|
247
248
|
attrs = super().get_serializer_field_attr(metric_field)
|
|
248
249
|
pivot_date = self.val_date
|
|
249
250
|
if not pivot_date:
|
|
250
|
-
pivot_date = (
|
|
251
|
+
pivot_date = (get_today() - pd.tseries.offsets.BDay(1)).date()
|
|
251
252
|
if "previous" in metric_field.key:
|
|
252
253
|
pivot_date = Dataloader.get_performance_date_map(pivot_date)[metric_field.key.replace("previous_", "")]
|
|
253
254
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from datetime import timedelta
|
|
2
2
|
from decimal import Decimal
|
|
3
|
+
from unittest.mock import patch
|
|
3
4
|
|
|
4
5
|
import pandas as pd
|
|
5
6
|
import pytest
|
|
@@ -14,13 +15,18 @@ fake = Faker()
|
|
|
14
15
|
|
|
15
16
|
@pytest.mark.django_db
|
|
16
17
|
class TestInstrumentPerformanceMetricBackend:
|
|
17
|
-
|
|
18
|
+
@patch("wbfdm.contrib.metric.backends.performances.get_today")
|
|
19
|
+
def test_compute_metrics(self, mock_fct, weekday, instrument, instrument_price_factory):
|
|
18
20
|
from wbfdm.contrib.metric.backends.performances import ( # we import locally to avoid database access pytest error
|
|
19
21
|
InstrumentPerformanceMetricBackend,
|
|
20
22
|
)
|
|
21
23
|
|
|
24
|
+
# mock_fct.return_value = weekday # return weekday as date.today
|
|
22
25
|
backend = InstrumentPerformanceMetricBackend(weekday)
|
|
23
26
|
|
|
27
|
+
price_intraday = instrument_price_factory( # noqa
|
|
28
|
+
instrument=instrument, calculated=False, date=(weekday + BDay(1)).date()
|
|
29
|
+
)
|
|
24
30
|
price_today = instrument_price_factory.create(instrument=instrument, calculated=False, date=weekday)
|
|
25
31
|
price_yesterday = instrument_price_factory.create(
|
|
26
32
|
instrument=instrument, calculated=False, date=weekday - BDay(1)
|
|
@@ -128,28 +128,24 @@ class InstrumentQuerySet(QuerySet):
|
|
|
128
128
|
)
|
|
129
129
|
if not df.empty:
|
|
130
130
|
df["valuation_date"] = pd.to_datetime(df["valuation_date"])
|
|
131
|
-
df = df.rename(columns={"valuation_date": "date"})
|
|
132
|
-
df = df.drop(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
df.index.levels[0],
|
|
137
|
-
pd.date_range(
|
|
138
|
-
df.index.get_level_values("date").min(), df.index.get_level_values("date").max(), freq="B"
|
|
139
|
-
),
|
|
140
|
-
],
|
|
141
|
-
names=["instrument_id", "date"],
|
|
131
|
+
df = df.rename(columns={"valuation_date": "date"})
|
|
132
|
+
df = df.drop(
|
|
133
|
+
columns=df.columns.difference(
|
|
134
|
+
["calculated", "close", "market_capitalization", "volume", "instrument_id", "date"]
|
|
135
|
+
)
|
|
142
136
|
)
|
|
143
|
-
df =
|
|
144
|
-
df[["close", "market_capitalization"]] = df[["close", "market_capitalization"]].astype(float).ffill()
|
|
145
|
-
df.volume = df.volume.astype(float).fillna(0)
|
|
146
|
-
df.calculated = df.calculated.astype(bool).fillna(
|
|
147
|
-
True
|
|
148
|
-
) # we do not ffill calculated but set the to True to mark them as "estimated"/"not real"
|
|
149
|
-
df = df.reset_index("date").dropna(subset=["close"])
|
|
150
|
-
df = df.replace([np.inf, -np.inf, np.nan], None)
|
|
137
|
+
df["calculated"] = False
|
|
151
138
|
|
|
152
|
-
for instrument_id, dff in df.groupby(
|
|
139
|
+
for instrument_id, dff in df.groupby("instrument_id", group_keys=False, as_index=False):
|
|
140
|
+
dff = dff.drop(columns=["instrument_id"]).set_index("date").sort_index()
|
|
141
|
+
dff = dff.reindex(pd.date_range(dff.index.min(), dff.index.max(), freq="B"))
|
|
142
|
+
dff[["close", "market_capitalization"]] = dff[["close", "market_capitalization"]].astype(float).ffill()
|
|
143
|
+
dff.volume = dff.volume.astype(float).fillna(0)
|
|
144
|
+
dff.calculated = dff.calculated.astype(bool).fillna(
|
|
145
|
+
True
|
|
146
|
+
) # we do not ffill calculated but set the to True to mark them as "estimated"/"not real"
|
|
147
|
+
dff = dff.reset_index(names="date").dropna(subset=["close"])
|
|
148
|
+
dff = dff.replace([np.inf, -np.inf, np.nan], None)
|
|
153
149
|
instrument = self.get(id=instrument_id)
|
|
154
150
|
yield from filter(
|
|
155
151
|
lambda x: x, map(lambda row: _dict_to_object(instrument, row), dff.to_dict("records"))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/financial_metric_analysis.py
RENAMED
|
File without changes
|
{wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/financial_ratio_analysis.py
RENAMED
|
File without changes
|
{wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/financial_statistics_analysis.py
RENAMED
|
File without changes
|
{wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/analysis/financial_analysis/statement_with_estimates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/cbinsights/utils/classifications.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbfdm-1.46.12 → wbfdm-1.46.14}/wbfdm/import_export/backends/refinitiv/geographic_segment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|