wbfdm 1.51.2rc1__tar.gz → 1.51.5__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.51.2rc1 → wbfdm-1.51.5}/PKG-INFO +1 -1
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/statement_with_estimates.py +0 -1
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/utils.py +6 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/backends/statistics.py +1 -1
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/sync/utils.py +48 -5
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tasks.py +6 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/statements/statements.py +5 -1
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/.gitignore +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/pyproject.toml +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/instrument_lists.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/instrument_requests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/instruments_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/admin/options.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/esg/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/esg/enums.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/esg/esg_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/esg/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/financial_metric_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/financial_ratio_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/financial_statistics_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/technical_analysis/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/technical_analysis/technical_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/technical_analysis/traces.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/apps.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/backends/dto.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/dsws/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/dsws/client.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/dsws/dataloaders/market_data.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/internal/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/internal/dataloaders/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/internal/dataloaders/market_data.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/admin/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/admin/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/admin/metrics.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/apps.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/backends/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/backends/base.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/backends/performances.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/backends/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/decorators.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/dispatch.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/dto.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/exceptions.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/factories.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/filters.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/migrations/0001_initial.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/migrations/0002_remove_instrumentmetric_unique_instrument_metric_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/migrations/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/models.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/orchestrators.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/registry.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/serializers.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tasks.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/backends/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/backends/test_performances.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/backends/test_statistics.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/conftest.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/test_dto.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/test_models.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/test_tasks.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/tests/test_viewsets.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/urls.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/viewsets/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/viewsets/configs/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/viewsets/configs/display.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/viewsets/configs/menus.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/viewsets/configs/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/viewsets/mixins.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/metric/viewsets/viewsets.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/client.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/dataloaders/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/dataloaders/esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/dataloaders/esg_controversies.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/sync.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/tests/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/tests/conftest.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/msci/tests/test_client.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/apps.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/database_routers.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/adjustments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/corporate_actions.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/financials.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/market_data.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/officers.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/reporting_dates.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/statements.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/dataloaders/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/companies.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/base_estimates.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/calendarized.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/complete.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/estimates.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/ibes/financials.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/instruments.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/jinja2/qa/sql/quotes.sql +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/sync/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/sync/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/contrib/qa/tasks.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/dataloaders/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/dataloaders/cache.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/dataloaders/protocols.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/dataloaders/proxies.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/dataloaders/types.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/dynamic_preferences_registry.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/enums.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/controversies.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/instrument_list.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/instruments_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/factories/options.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/figures/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/figures/financials/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/figures/financials/financial_analysis_charts.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/figures/financials/financials_charts.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/financials.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/financials_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/filters/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/deals.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/equities.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/mixin.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/utils/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/utils/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/utils/client.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/daily_fundamental.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/fiscal_period.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/forecast.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/fundamental.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/geographic_segment.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/instrument.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/instrument_price.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/mixin.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/utils/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/utils/controller.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/handlers/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/handlers/instrument.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/handlers/instrument_list.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/handlers/instrument_price.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/handlers/option.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/handlers/private_equities.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/cbinsights/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/cbinsights/deals.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/cbinsights/equities.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/cbinsights/fundamentals.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/daily_fundamental.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/forecast.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/fundamental.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/geographic_segment.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/instrument.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/instrument_price.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/parsers/refinitiv/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/resources/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/resources/classification.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/resources/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/resources/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/jinja2.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/locale/de/LC_MESSAGES/django.mo +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/locale/de/LC_MESSAGES/django.po +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/locale/en/LC_MESSAGES/django.mo +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/locale/en/LC_MESSAGES/django.po +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/locale/fr/LC_MESSAGES/django.mo +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/locale/fr/LC_MESSAGES/django.po +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/management/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0001_initial.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0002_rename_statements_instrumentlookup_financials_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0003_instrument_estimate_backend_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0004_rename_financials_instrumentlookup_statements_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0005_instrument_corporate_action_backend.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0006_instrument_officer_backend.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0007_instrument_country_instrument_currency_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0008_controversy.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0009_alter_controversy_flag_alter_controversy_initiated_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0010_classification_classificationgroup_deal_exchange_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0011_delete_instrumentlookup_instrument_corporate_actions_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0012_instrumentprice_created_instrumentprice_modified.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0013_instrument_is_investable_universe_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0014_alter_controversy_instrument.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0015_instrument_instrument_investible_index.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0016_instrumenttype_name_repr.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0017_instrument_instrument_security_index.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0018_instrument_instrument_level_index.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0019_alter_controversy_source.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0020_optionaggregate_option_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0021_delete_instrumentdailystatistics.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0022_instrument_cusip_option_open_interest_20d_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0023_instrument_unique_ric_instrument_unique_rmc_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0024_option_open_interest_10d_option_volume_10d_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0025_instrument_is_primary_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0026_instrument_is_cash_equivalent.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0027_remove_instrument_unique_ric_and_more.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0028_instrumentprice_annualized_daily_volatility.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0029_alter_instrumentprice_volume.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/0030_alter_relatedinstrumentthroughmodel_related_type.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/migrations/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/esg/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/esg/controversies.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/exchanges/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/exchanges/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/fields.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/fk_fields.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/indicators.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/instrument_lists.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/instrument_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/instrument_requests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/llm/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/llm/create_instrument_news_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/mixin/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/mixin/financials_computed.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/mixin/financials_serializer_fields.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/mixin/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/options.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/private_equities.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/querysets.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/models/instruments/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/preferences.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/instrument_lists.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/instrument_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/instrument_requests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/instruments/mixins.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/serializers/officers.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/signals.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/sync/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/sync/abstract.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/sync/runner.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/analysis/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/analysis/financial_analysis/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/analysis/financial_analysis/test_statement_with_estimates.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/analysis/financial_analysis/test_utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/analysis/test_esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/conftest.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/dataloaders/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/dataloaders/test_cache.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/test_classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/test_exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/test_instrument_list.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/test_instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/test_instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/test_merge.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/models/test_options.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/test_tasks.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/tests/tests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/urls.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/buttons/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/buttons/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/buttons/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/buttons/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/buttons/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/financial_summary.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/instrument_lists.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/instrument_requests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/instruments_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/monthly_performances.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/officers.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/statement_with_estimates.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/display/statements.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/financials_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/instrument_lists.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/instrument_requests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/instruments_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/endpoints/statements.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/menus/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/menus/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/menus/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/menus/instrument_lists.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/menus/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/menus/instruments_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/financial_ratio_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/financials_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/instrument_requests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/instruments_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/market_data.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/configs/titles/statement_with_estimates.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/esg.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/exchanges.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/financial_analysis/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/financial_analysis/financial_metric_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/financial_analysis/financial_ratio_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/financial_analysis/financial_summary.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/financial_analysis/statement_with_estimates.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/classifications.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/financials_analysis.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/instrument_lists.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/instrument_prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/instrument_requests.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/instruments.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/instruments_relationships.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/instruments/utils.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/market_data.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/mixins.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/officers.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/prices.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/statements/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/viewsets/technical_analysis/__init__.py +0 -0
- {wbfdm-1.51.2rc1 → wbfdm-1.51.5}/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.51.
|
|
3
|
+
Version: 1.51.5
|
|
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.*
|
{wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/statement_with_estimates.py
RENAMED
|
@@ -404,7 +404,6 @@ class StatementWithEstimates:
|
|
|
404
404
|
"stock_compensation_employee_ratio",
|
|
405
405
|
Financial.CAPEX.value,
|
|
406
406
|
Financial.SHARES_OUTSTANDING.value,
|
|
407
|
-
MarketData.MARKET_CAPITALIZATION.value,
|
|
408
407
|
MarketData.CLOSE.value,
|
|
409
408
|
MarketData.MARKET_CAPITALIZATION.value,
|
|
410
409
|
"net_cash",
|
|
@@ -133,6 +133,12 @@ class Loader:
|
|
|
133
133
|
self.errors["missing_data"].append(
|
|
134
134
|
"We could not find any market data covering the financial statement period"
|
|
135
135
|
)
|
|
136
|
+
## TODO We might want to still exclude them from the final df but keep them for the estimate that used these
|
|
137
|
+
## we actually want to keep the market data in the forecast column, because they are used for other statistic computation
|
|
138
|
+
# df.loc[df.index.get_level_values("estimate"), market_data_df.columns.difference(["period_end_date"])] = (
|
|
139
|
+
# None
|
|
140
|
+
# )
|
|
141
|
+
|
|
136
142
|
return df.rename_axis("financial", axis="columns")
|
|
137
143
|
|
|
138
144
|
def _annotate_statement_data(self, df: pd.DataFrame, statement_values: list[Financial]) -> pd.DataFrame:
|
|
@@ -171,7 +171,7 @@ class Dataloader(BaseDataloader):
|
|
|
171
171
|
)
|
|
172
172
|
fx_rate = df_price["fx_rate"]
|
|
173
173
|
df = pd.concat([df_revenue, df_price.drop("fx_rate", axis=1)], axis=1)
|
|
174
|
-
for key in ["revenue_y_1", "revenue_y0", "revenue_y1", "market_capitalization"
|
|
174
|
+
for key in ["revenue_y_1", "revenue_y0", "revenue_y1", "market_capitalization"]:
|
|
175
175
|
if key in df.columns:
|
|
176
176
|
df[key] = df[key] / fx_rate
|
|
177
177
|
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from contextlib import suppress
|
|
3
|
+
from datetime import date, timedelta
|
|
2
4
|
from typing import Callable
|
|
3
5
|
|
|
4
6
|
import pytz
|
|
5
7
|
from django.conf import settings
|
|
6
|
-
from django.db import connections
|
|
8
|
+
from django.db import IntegrityError, connections
|
|
7
9
|
from django.db.models import Max, QuerySet
|
|
8
10
|
from django.template.loader import get_template
|
|
9
11
|
from jinjasql import JinjaSql # type: ignore
|
|
12
|
+
from psycopg.errors import UniqueViolation
|
|
10
13
|
from tqdm import tqdm
|
|
11
14
|
from wbcore.contrib.currency.models import Currency
|
|
12
15
|
from wbcore.contrib.dataloader.utils import dictfetchall, dictfetchone
|
|
@@ -15,6 +18,8 @@ from wbcore.utils.cache import mapping
|
|
|
15
18
|
from wbfdm.models.exchanges.exchanges import Exchange
|
|
16
19
|
from wbfdm.models.instruments.instruments import Instrument, InstrumentType
|
|
17
20
|
|
|
21
|
+
logger = logging.getLogger("pms")
|
|
22
|
+
|
|
18
23
|
BATCH_SIZE: int = 10000
|
|
19
24
|
instrument_type_map = {
|
|
20
25
|
"ADR": "american_depository_receipt",
|
|
@@ -135,6 +140,36 @@ def get_instrument_from_data(data, parent_source: str | None = None) -> Instrume
|
|
|
135
140
|
return instrument
|
|
136
141
|
|
|
137
142
|
|
|
143
|
+
def _delist_existing_duplicates(instrument: Instrument) -> None:
|
|
144
|
+
"""Handle duplicate instruments by delisting existing entries"""
|
|
145
|
+
unique_identifiers = ["refinitiv_identifier_code", "refinitiv_mnemonic_code", "isin", "sedol", "valoren", "cusip"]
|
|
146
|
+
|
|
147
|
+
for identifier_field in unique_identifiers:
|
|
148
|
+
if identifier := getattr(instrument, identifier_field):
|
|
149
|
+
with suppress(Instrument.DoesNotExist):
|
|
150
|
+
duplicate = Instrument.objects.get(
|
|
151
|
+
is_security=True, delisted_date__isnull=True, **{identifier_field: identifier}
|
|
152
|
+
)
|
|
153
|
+
duplicate.delisted_date = date.today() - timedelta(days=1)
|
|
154
|
+
duplicate.save()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _save_single_instrument(instrument: Instrument) -> None:
|
|
158
|
+
"""Attempt to save an instrument with duplicate handling"""
|
|
159
|
+
try:
|
|
160
|
+
instrument.save()
|
|
161
|
+
except (UniqueViolation, IntegrityError) as e:
|
|
162
|
+
if instrument.is_security:
|
|
163
|
+
_delist_existing_duplicates(instrument)
|
|
164
|
+
try:
|
|
165
|
+
instrument.save()
|
|
166
|
+
logger.info(f"{instrument} successfully saved after automatic delisting")
|
|
167
|
+
except (UniqueViolation, IntegrityError) as e:
|
|
168
|
+
logger.error(f"Persistent integrity error: {e}")
|
|
169
|
+
else:
|
|
170
|
+
logger.error(f"Non-security instrument error: {e}")
|
|
171
|
+
|
|
172
|
+
|
|
138
173
|
def _bulk_create_instruments_chunk(instruments: list[Instrument], update_unique_identifiers: bool = False):
|
|
139
174
|
update_fields = [
|
|
140
175
|
"name",
|
|
@@ -168,9 +203,17 @@ def _bulk_create_instruments_chunk(instruments: list[Instrument], update_unique_
|
|
|
168
203
|
]
|
|
169
204
|
)
|
|
170
205
|
bulk_update_kwargs = {"ignore_conflicts": True}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
206
|
+
try:
|
|
207
|
+
Instrument.objects.bulk_create(
|
|
208
|
+
instruments, update_fields=update_fields, unique_fields=["source", "source_id"], **bulk_update_kwargs
|
|
209
|
+
)
|
|
210
|
+
except IntegrityError:
|
|
211
|
+
# we caught an integrity error on the bulk save, so we try to save one by one
|
|
212
|
+
logger.info(
|
|
213
|
+
"we detected an integrity error while bulk saving instruments. We save them one by one and delist the already existing instrument from the db if we can. "
|
|
214
|
+
)
|
|
215
|
+
for instrument in instruments:
|
|
216
|
+
_save_single_instrument(instrument)
|
|
174
217
|
|
|
175
218
|
|
|
176
219
|
def update_instruments(sql_name: str, parent_source: str | None = None, context=None, debug: bool = False, **kwargs):
|
|
@@ -211,7 +254,7 @@ def update_or_create_item(
|
|
|
211
254
|
defaults=defaults,
|
|
212
255
|
)
|
|
213
256
|
instrument.dl_parameters.update(dl_parameters)
|
|
214
|
-
instrument
|
|
257
|
+
_save_single_instrument(instrument)
|
|
215
258
|
|
|
216
259
|
return instrument
|
|
217
260
|
|
|
@@ -84,6 +84,12 @@ def synchronize_exchanges_as_task():
|
|
|
84
84
|
|
|
85
85
|
@shared_task(queue="portfolio")
|
|
86
86
|
def full_synchronization_as_task():
|
|
87
|
+
# we get all instrument without name or where we would expect a parent and consider them for clean up.
|
|
88
|
+
qs = Instrument.objects.filter(prices__isnull=True).filter(
|
|
89
|
+
(Q(name="") & Q(name_repr="")) | (Q(source__in=["qa-ds2-security", "qa-ds2-quote"]) & Q(parent__isnull=True))
|
|
90
|
+
)
|
|
91
|
+
for instrument in qs:
|
|
92
|
+
instrument.delete()
|
|
87
93
|
initialize_exchanges()
|
|
88
94
|
initialize_instruments()
|
|
89
95
|
with transaction.atomic():
|
|
@@ -54,7 +54,11 @@ class StatementPandasViewSet(InstrumentMixin, ExportPandasAPIViewSet):
|
|
|
54
54
|
pf.CharField(key="external_code", label="Code"),
|
|
55
55
|
pf.CharField(key="external_description", label="Description"),
|
|
56
56
|
pf.SparklineField(key="progress", label="Yearly Trend", dimension="double"),
|
|
57
|
-
*[
|
|
57
|
+
*[
|
|
58
|
+
pf.FloatField(key=field, label=field, display_mode=DisplayMode.SHORTENED)
|
|
59
|
+
for field in self.columns
|
|
60
|
+
if field not in ["external_ordering", "external_code", "external_description", "progress"]
|
|
61
|
+
],
|
|
58
62
|
]
|
|
59
63
|
)
|
|
60
64
|
|
|
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.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/financial_metric_analysis.py
RENAMED
|
File without changes
|
{wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/financial_ratio_analysis.py
RENAMED
|
File without changes
|
{wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/analysis/financial_analysis/financial_statistics_analysis.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
|
|
File without changes
|
{wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/cbinsights/utils/classifications.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbfdm-1.51.2rc1 → wbfdm-1.51.5}/wbfdm/import_export/backends/refinitiv/daily_fundamental.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbfdm-1.51.2rc1 → wbfdm-1.51.5}/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
|