wbportfolio 1.55.8__py2.py3-none-any.whl → 1.55.10rc0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. wbportfolio/admin/portfolio.py +11 -5
  2. wbportfolio/api_clients/ubs.py +11 -9
  3. wbportfolio/contrib/company_portfolio/configs/display.py +4 -4
  4. wbportfolio/contrib/company_portfolio/configs/previews.py +3 -3
  5. wbportfolio/contrib/company_portfolio/filters.py +10 -10
  6. wbportfolio/contrib/company_portfolio/scripts.py +7 -2
  7. wbportfolio/factories/product_groups.py +3 -3
  8. wbportfolio/factories/products.py +3 -3
  9. wbportfolio/import_export/handlers/asset_position.py +3 -3
  10. wbportfolio/import_export/handlers/dividend.py +1 -1
  11. wbportfolio/import_export/handlers/fees.py +2 -2
  12. wbportfolio/import_export/handlers/trade.py +3 -3
  13. wbportfolio/import_export/parsers/default_mapping.py +1 -1
  14. wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +2 -2
  15. wbportfolio/import_export/parsers/jpmorgan/fees.py +2 -2
  16. wbportfolio/import_export/parsers/jpmorgan/strategy.py +2 -2
  17. wbportfolio/import_export/parsers/jpmorgan/valuation.py +2 -2
  18. wbportfolio/import_export/parsers/leonteq/trade.py +2 -1
  19. wbportfolio/import_export/parsers/natixis/utils.py +6 -2
  20. wbportfolio/import_export/parsers/sg_lux/equity.py +4 -3
  21. wbportfolio/import_export/parsers/sg_lux/sylk.py +12 -11
  22. wbportfolio/import_export/parsers/sg_lux/valuation.py +4 -2
  23. wbportfolio/import_export/parsers/societe_generale/strategy.py +3 -3
  24. wbportfolio/import_export/parsers/tellco/customer_trade.py +2 -1
  25. wbportfolio/import_export/parsers/tellco/valuation.py +4 -3
  26. wbportfolio/import_export/parsers/ubs/equity.py +2 -1
  27. wbportfolio/import_export/parsers/ubs/valuation.py +2 -1
  28. wbportfolio/import_export/utils.py +3 -1
  29. wbportfolio/metric/backends/base.py +2 -2
  30. wbportfolio/migrations/0089_orderproposal_min_weighting.py +71 -0
  31. wbportfolio/models/asset.py +2 -1
  32. wbportfolio/models/custodians.py +3 -3
  33. wbportfolio/models/exceptions.py +1 -1
  34. wbportfolio/models/graphs/utils.py +11 -11
  35. wbportfolio/models/orders/order_proposals.py +20 -2
  36. wbportfolio/models/orders/orders.py +6 -0
  37. wbportfolio/models/portfolio.py +27 -7
  38. wbportfolio/models/portfolio_relationship.py +6 -0
  39. wbportfolio/models/products.py +3 -0
  40. wbportfolio/models/rebalancing.py +3 -0
  41. wbportfolio/models/roles.py +4 -10
  42. wbportfolio/models/transactions/claim.py +6 -5
  43. wbportfolio/pms/typing.py +1 -1
  44. wbportfolio/rebalancing/models/market_capitalization_weighted.py +1 -5
  45. wbportfolio/risk_management/backends/controversy_portfolio.py +1 -1
  46. wbportfolio/risk_management/backends/instrument_list_portfolio.py +1 -1
  47. wbportfolio/risk_management/tests/test_stop_loss_instrument.py +2 -2
  48. wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +1 -1
  49. wbportfolio/serializers/orders/order_proposals.py +1 -0
  50. wbportfolio/serializers/transactions/claim.py +2 -2
  51. wbportfolio/tasks.py +42 -4
  52. wbportfolio/tests/models/orders/test_order_proposals.py +32 -0
  53. wbportfolio/tests/models/test_portfolios.py +5 -5
  54. wbportfolio/tests/models/test_splits.py +1 -6
  55. wbportfolio/tests/viewsets/test_products.py +1 -0
  56. wbportfolio/viewsets/charts/assets.py +6 -4
  57. wbportfolio/viewsets/configs/buttons/mixins.py +2 -2
  58. wbportfolio/viewsets/configs/display/reconciliations.py +4 -4
  59. wbportfolio/viewsets/orders/configs/displays/order_proposals.py +5 -5
  60. {wbportfolio-1.55.8.dist-info → wbportfolio-1.55.10rc0.dist-info}/METADATA +1 -1
  61. {wbportfolio-1.55.8.dist-info → wbportfolio-1.55.10rc0.dist-info}/RECORD +63 -64
  62. wbportfolio/fdm/__init__.py +0 -0
  63. wbportfolio/fdm/tasks.py +0 -42
  64. {wbportfolio-1.55.8.dist-info → wbportfolio-1.55.10rc0.dist-info}/WHEEL +0 -0
  65. {wbportfolio-1.55.8.dist-info → wbportfolio-1.55.10rc0.dist-info}/licenses/LICENSE +0 -0
@@ -924,13 +924,13 @@ class TestPortfolioModel(PortfolioTestMixin):
924
924
 
925
925
  analytic_portfolio = portfolio.get_analytic_portfolio(weekday)
926
926
  assert analytic_portfolio.weights.tolist() == [float(a1.weighting), float(a2.weighting)]
927
- expected_X = pd.DataFrame(
927
+ expected_x = pd.DataFrame(
928
928
  [[float(p11.net_value / p10.net_value - Decimal(1)), float(p21.net_value / p20.net_value - Decimal(1))]],
929
929
  columns=[i1.id, i2.id],
930
930
  index=[(weekday + BDay(1)).date()],
931
931
  )
932
- expected_X.index = pd.to_datetime(expected_X.index)
933
- pd.testing.assert_frame_equal(analytic_portfolio.X, expected_X, check_names=False, check_freq=False)
932
+ expected_x.index = pd.to_datetime(expected_x.index)
933
+ pd.testing.assert_frame_equal(analytic_portfolio.X, expected_x, check_names=False, check_freq=False)
934
934
 
935
935
  def test_get_total_asset_value(self, weekday, portfolio, asset_position_factory):
936
936
  a1 = asset_position_factory.create(date=weekday, portfolio=portfolio)
@@ -1010,7 +1010,7 @@ class TestPortfolioModel(PortfolioTestMixin):
1010
1010
  assert len(res) == 1
1011
1011
  assert a.date == weekday
1012
1012
  assert a.underlying_quote == instrument
1013
- assert a.underlying_quote_price == None
1013
+ assert a.underlying_quote_price is None
1014
1014
  assert a.initial_price == p.net_value
1015
1015
  assert a.weighting == pytest.approx(weights[instrument.id], abs=Decimal(10e-6))
1016
1016
  assert a.currency_fx_rate_portfolio_to_usd == fx_portfolio
@@ -1053,7 +1053,7 @@ class TestPortfolioModel(PortfolioTestMixin):
1053
1053
  assert next(gen)[0] == middle_date, "Drifting weight with a non automatic rebalancer stops the iteration"
1054
1054
  try:
1055
1055
  next(gen)
1056
- assert False, "the next iteration should stop and return the rebalancing"
1056
+ raise AssertionError("the next iteration should stop and return the rebalancing")
1057
1057
  except StopIteration as e:
1058
1058
  rebalancing_order_proposal = e.value
1059
1059
  assert rebalancing_order_proposal.trade_date == rebalancing_date
@@ -14,10 +14,6 @@ fake = Faker()
14
14
 
15
15
  @pytest.mark.django_db
16
16
  class TestAdjustmentModel:
17
- @pytest.fixture()
18
- def applied_adjustment(self):
19
- return AdjustmentFactory.create(status=Adjustment.Status.APPLIED)
20
-
21
17
  @pytest.fixture()
22
18
  def old_adjustment(self):
23
19
  return AdjustmentFactory.create(status=Adjustment.Status.PENDING, date=fake.past_date())
@@ -205,7 +201,7 @@ class TestAdjustmentModel:
205
201
  post_adjustment_on_prices(adjustment.id)
206
202
  a1.refresh_from_db()
207
203
  adjustment.refresh_from_db()
208
- a1.applied_adjustment == adjustment
204
+ assert a1.applied_adjustment == adjustment
209
205
  assert adjustment.status == Adjustment.Status.APPLIED
210
206
 
211
207
  @patch("wbportfolio.models.adjustments.send_notification")
@@ -230,5 +226,4 @@ class TestAdjustmentModel:
230
226
  mock_check_fct.return_value = False
231
227
  post_adjustment_on_prices(adjustment.id)
232
228
  adjustment.refresh_from_db()
233
- mock_delay_fct.call_args[0] == user_porftolio_manager.id
234
229
  assert adjustment.status == Adjustment.Status.PENDING
@@ -23,6 +23,7 @@ class TestProductModelViewSet:
23
23
  portfolio_factory.create_batch(4, invested_timespan=DateRange(date.min, date.max))
24
24
  + portfolio_factory.create_batch(2, invested_timespan=DateRange(date.min, date.max)),
25
25
  product_factory.create_batch(6),
26
+ strict=False,
26
27
  ):
27
28
  InstrumentPortfolioThroughModel.objects.update_or_create(
28
29
  instrument=product, defaults={"portfolio": portfolio}
@@ -101,7 +101,9 @@ class AbstractDistributionMixin(UserPortfolioRequestPermissionMixin):
101
101
  columns = {}
102
102
  level_representations = self.classification_group.get_levels_representation()
103
103
  for key, label in zip(
104
- reversed(self.classification_group.get_fields_names(sep="_")), reversed(level_representations[1:])
104
+ reversed(self.classification_group.get_fields_names(sep="_")),
105
+ reversed(level_representations[1:]),
106
+ strict=False,
105
107
  ):
106
108
  columns[key] = label
107
109
  columns["label"] = "Classification"
@@ -169,8 +171,8 @@ class AbstractDistributionMixin(UserPortfolioRequestPermissionMixin):
169
171
  dict(Classification.objects.filter(id__in=df["classification"].dropna()).values_list("id", "name"))
170
172
  )
171
173
  elif self.group_by == AssetPositionGroupBy.CASH:
172
- df.loc[df["id"] == True, "label"] = "Cash"
173
- df.loc[df["id"] == False, "label"] = "Non-Cash"
174
+ df.loc[df["id"], "label"] = "Cash"
175
+ df.loc[~df["id"], "label"] = "Non-Cash"
174
176
  elif self.group_by == AssetPositionGroupBy.COUNTRY:
175
177
  df["label"] = df["id"].map(dict(Geography.objects.filter(id__in=df["id"]).values_list("id", "name")))
176
178
  elif self.group_by == AssetPositionGroupBy.CURRENCY:
@@ -307,7 +309,7 @@ class ContributorPortfolioChartView(UserPortfolioRequestPermissionMixin, viewset
307
309
 
308
310
  text_forex = df_forex.contribution_forex.apply(lambda x: f"{x:,.2%}")
309
311
  text_equity = contribution_equity.apply(lambda x: f"{x:,.2%}")
310
- setattr(self, "nb_rows", df.shape[0])
312
+ self.nb_rows = df.shape[0]
311
313
  fig.add_trace(
312
314
  go.Bar(
313
315
  y=df.instrument_id,
@@ -7,7 +7,7 @@ from wbfdm.models.instruments import Instrument
7
7
 
8
8
  class InstrumentButtonMixin:
9
9
  @classmethod
10
- def add_instrument_request_button(self, request=None, view=None, pk=None, **kwargs):
10
+ def add_instrument_request_button(cls, request=None, view=None, pk=None, **kwargs):
11
11
  buttons = [
12
12
  bt.WidgetButton(key="assets", label="Implemented Portfolios (Assets)"),
13
13
  # bt.WidgetButton(
@@ -44,7 +44,7 @@ class InstrumentButtonMixin:
44
44
  )
45
45
 
46
46
  @classmethod
47
- def add_transactions_request_button(self, request=None, view=None, pk=None, **kwargs):
47
+ def add_transactions_request_button(cls, request=None, view=None, pk=None, **kwargs):
48
48
  return bt.DropDownButton(
49
49
  label="Transactions",
50
50
  icon=WBIcon.UNFOLD.icon,
@@ -49,14 +49,14 @@ class AccountReconciliationLineDisplayViewConfig(DisplayViewConfig):
49
49
  ]
50
50
  editable = [dp.FormattingRule(style={"fontWeight": "bold"})]
51
51
  equal = [dp.FormattingRule(condition=("==", False, "is_equal"), style={"backgroundColor": "orange"})]
52
- borderLeft = [
52
+ border_left = [
53
53
  dp.FormattingRule(
54
54
  style={
55
55
  "borderLeft": "1px solid #bdc3c7",
56
56
  }
57
57
  )
58
58
  ]
59
- borderRight = [
59
+ border_right = [
60
60
  dp.FormattingRule(
61
61
  style={
62
62
  "borderRight": "1px solid #bdc3c7",
@@ -111,7 +111,7 @@ class AccountReconciliationLineDisplayViewConfig(DisplayViewConfig):
111
111
  key="shares_external",
112
112
  label="Shares",
113
113
  width=90,
114
- formatting_rules=[*equal, *editable, *borderLeft],
114
+ formatting_rules=[*equal, *editable, *border_left],
115
115
  ),
116
116
  dp.Field(
117
117
  key="nominal_value_external",
@@ -128,7 +128,7 @@ class AccountReconciliationLineDisplayViewConfig(DisplayViewConfig):
128
128
  key="assets_under_management_external",
129
129
  label="AuM",
130
130
  width=120,
131
- formatting_rules=[*equal, *borderRight],
131
+ formatting_rules=[*equal, *border_right],
132
132
  ),
133
133
  ],
134
134
  ),
@@ -132,12 +132,12 @@ class OrderProposalDisplayConfig(DisplayViewConfig):
132
132
  layouts={
133
133
  default(): Layout(
134
134
  grid_template_areas=[
135
- ["status", "status", "status"],
136
- ["trade_date", "total_cash_weight", "min_order_value"],
137
- ["rebalancing_model", "target_portfolio", "target_portfolio"]
135
+ ["status", "status", "status", "status"],
136
+ ["trade_date", "total_cash_weight", "min_order_value", "min_weighting"],
137
+ ["rebalancing_model", "rebalancing_model", "target_portfolio", "target_portfolio"]
138
138
  if self.view.new_mode
139
- else ["rebalancing_model", "creator", "approver"],
140
- ["comment", "comment", "comment"],
139
+ else ["rebalancing_model", "rebalancing_model", "creator", "approver"],
140
+ ["comment", "comment", "comment", "comment"],
141
141
  ],
142
142
  ),
143
143
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbportfolio
3
- Version: 1.55.8
3
+ Version: 1.55.10rc0
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
5
  License-File: LICENSE
6
6
  Requires-Dist: cryptography==3.4.*
@@ -4,14 +4,14 @@ wbportfolio/constants.py,sha256=86bfJ-xAyJQGv8DDxhVP_BM7Jr_lxQMhe4SkrxpfN_c,119
4
4
  wbportfolio/dynamic_preferences_registry.py,sha256=SV-4JWBZBYhXt5cNMglx-yRJhxpejP_jo157ghjq2q0,2294
5
5
  wbportfolio/permissions.py,sha256=F147DXfitbw6IdMQGEFfymCJkiG5YGkWKsLdVVliPyw,320
6
6
  wbportfolio/preferences.py,sha256=JpowIFTrnjfomogJNrYmmfv7V35bRZNNGL_zooKzEhc,465
7
- wbportfolio/tasks.py,sha256=619LS4AN1-5RqdtwwLODdXA-IJKs5OA93JyLEnIJy4g,1969
7
+ wbportfolio/tasks.py,sha256=fjmG0FrCkwoHKDk7re6-vjKpI0q_HFtYLF8cddZHvnw,3243
8
8
  wbportfolio/urls.py,sha256=PE9UwW2RR8FEUnPc3foaDIW7T49vTwO1TyBPYaSorw0,10539
9
9
  wbportfolio/utils.py,sha256=QZ4t0j2NwKYmgWJM77yvXSp-8wVcZmFvNi5_v7YA3ac,750
10
10
  wbportfolio/admin/__init__.py,sha256=oTmHrq_4H4OyEna3R_3tIh7pyCyNYVsMDD8y06IYMfQ,675
11
11
  wbportfolio/admin/asset.py,sha256=Nukw4axCnctQFlAtPkPJyalEga7RtTp7jr138MOdWSM,1254
12
12
  wbportfolio/admin/custodians.py,sha256=rJ9wFdiFM5t3WrmAfNXWzjxDAWrbnlSstfNjQxSmTNE,332
13
13
  wbportfolio/admin/indexes.py,sha256=XPiVGBRDD7SV7YvSDv9pAo513IjIbEOBS_pcvVP_UfQ,440
14
- wbportfolio/admin/portfolio.py,sha256=ihAYlvx7vvRbFMIKobo-VokYfvlTowGDzcSmlXHCJDY,3873
14
+ wbportfolio/admin/portfolio.py,sha256=OiUFpxqK7V0iL8dO6LxE_LOepvr20b2CIDRiKPkdEns,4063
15
15
  wbportfolio/admin/portfolio_relationships.py,sha256=mLRQUvezcUQfEls0p6pe0P1qVf335zD5pX4eRVf119M,711
16
16
  wbportfolio/admin/product_groups.py,sha256=0iXpoj-gGwLeF6BmCohX7d5qrVhCgIxNWUQmJcM67q0,1391
17
17
  wbportfolio/admin/products.py,sha256=vEtUpSlnCLLCs4SXkI5UFO7iPsXhRUk7PsNvfD7FS40,2550
@@ -30,7 +30,7 @@ wbportfolio/admin/transactions/trades.py,sha256=LanpSm6iaR9cmNvSJwpRFPkOgN46K_Y9
30
30
  wbportfolio/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  wbportfolio/analysis/claims.py,sha256=wcTniEVdDnmME8LHrYbo-WWpQ5EzNPgAT2KJIGQ0IIA,10688
32
32
  wbportfolio/api_clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- wbportfolio/api_clients/ubs.py,sha256=pB_urTr8x8YCW28c_hK7DeCzAx07VeLZ27TamrZln2k,6598
33
+ wbportfolio/api_clients/ubs.py,sha256=DezqTcZ_TJnMsTRQnnHisWCu_Vxx-CtE0pwr_SYQBi0,6742
34
34
  wbportfolio/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  wbportfolio/contrib/company_portfolio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  wbportfolio/contrib/company_portfolio/admin.py,sha256=roUsuOjYDWX0OGWVBjCcW3MAcwJHJYHnqZ_pLpwakmQ,549
@@ -38,18 +38,18 @@ wbportfolio/contrib/company_portfolio/apps.py,sha256=0oNM07ecjGE4nU0zzUWuQI_LPq4
38
38
  wbportfolio/contrib/company_portfolio/constants.py,sha256=5twPBUq9MlNzepwkmleA0pm_eeTlg2e3VqLP8OFfKVE,62
39
39
  wbportfolio/contrib/company_portfolio/dynamic_preferences_registry.py,sha256=k69EVXR2n9Ovzy4rmXCFCQRt0YampqniG7tlkcc9dN0,2700
40
40
  wbportfolio/contrib/company_portfolio/factories.py,sha256=LvEYhBURUz3aK5KtTshBZpU66ph_DbLXKKDzf3Sw4Vo,1243
41
- wbportfolio/contrib/company_portfolio/filters.py,sha256=dSFPojkTJaHlXyi8CTLii64ilBEV14Z8uKPlHOIOhDY,4850
41
+ wbportfolio/contrib/company_portfolio/filters.py,sha256=jLDo3PRhofuqR2EA7G2R2aiAd_pTCZO4BvUZh0AN1HQ,4995
42
42
  wbportfolio/contrib/company_portfolio/management.py,sha256=CofBifGGGKfA06uWRDWXY_9y7y-PGNRz3VhsVaDeAz8,857
43
43
  wbportfolio/contrib/company_portfolio/models.py,sha256=dfrIR6sI3He1TIHCjdAP3yIZ0cPvc97ZUX_ZzkkhzGg,12943
44
- wbportfolio/contrib/company_portfolio/scripts.py,sha256=THDWK967NdEOD9gtAjIgtJzZAvu1FAQjp58VIZLyQpo,2304
44
+ wbportfolio/contrib/company_portfolio/scripts.py,sha256=wFfc1L-it0UTaBwNFs8hhGARbJoaNzmnlsXh6KEbslU,2497
45
45
  wbportfolio/contrib/company_portfolio/serializers.py,sha256=Y4Osxp0M7m_wy7DSbOt7ESfbob8KrfPBCnbzAuEsmmk,12160
46
46
  wbportfolio/contrib/company_portfolio/tasks.py,sha256=ZXezolvlj8_b5hvfcjH5IO5tXvwb8goNG8xPfk6YFNA,835
47
47
  wbportfolio/contrib/company_portfolio/urls.py,sha256=eyq6IpaDPG1oL8-AqPS5nC5BeFewKPA1BN_HI7M3i1c,1118
48
48
  wbportfolio/contrib/company_portfolio/viewsets.py,sha256=o-_D_bEt283xngDbsMwdRQxFyuK7rfSChI8u5dGYyLM,8312
49
49
  wbportfolio/contrib/company_portfolio/configs/__init__.py,sha256=AVH0v-uOJBPRKggz7fO7IpRyVJ1YlQiF-if_cMsOvvM,72
50
- wbportfolio/contrib/company_portfolio/configs/display.py,sha256=D_OxIGlNivNIKqNlvIB4YeBS6fyrDqM77FoccmZJ9-o,6294
50
+ wbportfolio/contrib/company_portfolio/configs/display.py,sha256=wuscS82RDL5uTfXOmpAp_4EyTUyDAgmvUlEHg4ro7_Q,6372
51
51
  wbportfolio/contrib/company_portfolio/configs/endpoints.py,sha256=QWkxvGOjCyPtB9cIc9hQHcqkeZv_KEvfGue-JgAn2p4,1662
52
- wbportfolio/contrib/company_portfolio/configs/previews.py,sha256=UwJ2kMEkV2bszlmSPZAN_DrCCVEUFhF9_dLn7u5c9mY,1384
52
+ wbportfolio/contrib/company_portfolio/configs/previews.py,sha256=pSZTESST-s8yBhKDcnpB_eGjufrp4NYAqlIGxEN8TOM,1395
53
53
  wbportfolio/contrib/company_portfolio/migrations/0001_initial.py,sha256=WAB7FJL4PdMhQAB-k_tZcMZ2SjAOmqHKj86NrzxWbXE,9856
54
54
  wbportfolio/contrib/company_portfolio/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  wbportfolio/contrib/company_portfolio/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -70,8 +70,8 @@ wbportfolio/factories/portfolio_cash_flow.py,sha256=e8LWkk5Gy0FU4HoCL9xPseCtLlVI
70
70
  wbportfolio/factories/portfolio_cash_targets.py,sha256=6bYaKjV56yRbjRaQzime218Dho652pcpkAqwhq63D3g,678
71
71
  wbportfolio/factories/portfolio_swing_pricings.py,sha256=CLT9AgZKPwChfPDATl-r2r8IVsM5U6S5gDJ8BzsweyI,828
72
72
  wbportfolio/factories/portfolios.py,sha256=kZDuBXnGiMrliQ67UfXHQElv5y1nVLXN_7Au3RnZr-8,1553
73
- wbportfolio/factories/product_groups.py,sha256=JMtG301j5XehB3qmNSbXt6af56Y9uvG3fgbCMf9FCSc,1987
74
- wbportfolio/factories/products.py,sha256=N0V6sM_98sC6l8qN78wgfmtpYq7O2c5rW5hT5ZM5gsA,2880
73
+ wbportfolio/factories/product_groups.py,sha256=0vo3wjHBST3kmkXYt3llSUFN8QEomAQLDpt2hSBkkvw,1951
74
+ wbportfolio/factories/products.py,sha256=yNGCCqKFNhTI76Qb046s8I34V26cuyMtJ64Ugxpznnc,2868
75
75
  wbportfolio/factories/rebalancing.py,sha256=I6_c_gDuhBYsmDPOU_b8e9W-Aa8I95gWXS_K8N5-xiQ,719
76
76
  wbportfolio/factories/reconciliations.py,sha256=Ne3rBZ_yvjlAtWW7qDLprHrLhNCtLL_RXU3yDHc3s3c,916
77
77
  wbportfolio/factories/roles.py,sha256=tot54YX70sNqZrAg5zGJTHd7_PFjZed_mny4lGlnwEA,857
@@ -79,8 +79,6 @@ wbportfolio/factories/trades.py,sha256=ZHfj20KjeTu57sNaZzfSw2JqCoI9q4BjfPp5qRMVs
79
79
  wbportfolio/factories/orders/__init__.py,sha256=QG7on_F9GiuJgvGbM0BNDVdfGwwBz_WGbmCFNbKPZzc,83
80
80
  wbportfolio/factories/orders/order_proposals.py,sha256=3QGG6eI2sWYGJenn17gz37A2PJgjZLlPqAsqci1lFXI,702
81
81
  wbportfolio/factories/orders/orders.py,sha256=tTw2U-xvUsFpG4zad3KCHZPQx1FVg-zPjwEN73XEOjg,907
82
- wbportfolio/fdm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
- wbportfolio/fdm/tasks.py,sha256=v7UmrQhHAgJOQ3AC3VRvJ4YIKveqsqyWnvM33UQOUDI,1367
84
82
  wbportfolio/filters/__init__.py,sha256=m44CdyYMtku8rMGyiX8KSmMdvyqaElKW4UMkEqOC1VM,1374
85
83
  wbportfolio/filters/assets.py,sha256=rvBNtQ8OcvYXSmaVdgjH7IITvaBZ558Y9sCj0B_WDpw,18866
86
84
  wbportfolio/filters/assets_and_net_new_money_progression.py,sha256=IYl_qMFO9QKhXhCTtz2JrOjlAKdEkykNlu4DO_H7HkQ,1403
@@ -105,7 +103,7 @@ wbportfolio/fixtures/product_factsheets.yaml,sha256=z5o-viDbgwWkssDJXZYayasFgw1n
105
103
  wbportfolio/fixtures/wbportfolio.yaml.gz,sha256=902nxQZM6VcVcc0wI9AYaSedcJIfsK5letLF31j1Jdg,1479453
106
104
  wbportfolio/fixtures/wbrisk_management.yaml.gz,sha256=alFDRu8S9R6IsaIkpJe_v36B2GvHgHeNJVumUB5m_NQ,155413
107
105
  wbportfolio/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
- wbportfolio/import_export/utils.py,sha256=mzybnwU2y-NOk43QDNDlOCaSPO-0BFlSX_X8uxplNiY,1083
106
+ wbportfolio/import_export/utils.py,sha256=Za6gycrXxXIupqn5EJdgEWaee7FPtk0R33kJm4uogos,1145
109
107
  wbportfolio/import_export/backends/__init__.py,sha256=Ki5jE95usAbxfV3zeZMkAmjh7G8TodBkKTDBPa_HJX0,40
110
108
  wbportfolio/import_export/backends/utils.py,sha256=nM0i5rhQ66Vgm7WH3jIiNvNGuC-Cy_vtXkSzrUiGc0Q,1355
111
109
  wbportfolio/import_export/backends/refinitiv/adjustment.py,sha256=ahVjWMHY1FuuDnMeascAlVUa3Mys6rvROG1uKDq6QeA,1554
@@ -120,25 +118,25 @@ wbportfolio/import_export/backends/wbfdm/dividend.py,sha256=iAQXnYPXmtG_Jrc8THAJ
120
118
  wbportfolio/import_export/backends/wbfdm/mixin.py,sha256=JNtjgqGLson1nu_Chqb8MWyuiF3Ws8ox2vapxIRBYKE,400
121
119
  wbportfolio/import_export/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
120
  wbportfolio/import_export/handlers/adjustment.py,sha256=6bdTIYFmc8_HFxcdwtnYwglMyCfAD8XrTIrEb2zWY0g,1757
123
- wbportfolio/import_export/handlers/asset_position.py,sha256=LcJaHwxqoRWclBDOhaxTI7_MFqUXtUt99EJsV45ZqSo,9125
124
- wbportfolio/import_export/handlers/dividend.py,sha256=F0oLfNt2B_QQAjHBCRpxa5HSkfkAYdal_NjLJGtVckY,4408
125
- wbportfolio/import_export/handlers/fees.py,sha256=BOFHAvSTlvVLaxnm6KD_fcza1TlPc02HOR9J0_jjswI,2495
121
+ wbportfolio/import_export/handlers/asset_position.py,sha256=VNfPOmUta5f4YO_nRFvsiVeGaDwzLF1QDhXFQd0fCX4,9137
122
+ wbportfolio/import_export/handlers/dividend.py,sha256=34iu1SfnyCVSObklo9eiF-ECTQhSvkiZn2pUmrWOaV4,4408
123
+ wbportfolio/import_export/handlers/fees.py,sha256=RoOaBwnIMzCx5q7qSzCQbS3L_eOa9Y-RSZ_ZG3QHbNo,2507
126
124
  wbportfolio/import_export/handlers/orders.py,sha256=GU3_tIy-tAw9aU-ifsnmMZPBB9sqfkFC_S1d9VziTwg,3136
127
125
  wbportfolio/import_export/handlers/portfolio_cash_flow.py,sha256=W7QPNqEvvsq0RS016EAFBp1ezvc6G9Rk-hviRZh8o6Y,2737
128
126
  wbportfolio/import_export/handlers/register.py,sha256=sYyXkE8b1DPZ5monxylZn0kjxLVdNYYZR-p61dwEoDM,2271
129
- wbportfolio/import_export/handlers/trade.py,sha256=xHg_4LMuMFRN49vEguIBDujM7vZxuhnEYMj95ZJ3s0E,11175
127
+ wbportfolio/import_export/handlers/trade.py,sha256=TvnL0IhEzoEXxyr7o3a4id6fkB4InJfScUZC1YPfNq0,11187
130
128
  wbportfolio/import_export/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
- wbportfolio/import_export/parsers/default_mapping.py,sha256=KrO-X5CvQCeQoBYzFDxavoQGriyUSeI2QDx5ar_zo7A,1405
129
+ wbportfolio/import_export/parsers/default_mapping.py,sha256=YdqvoRNo4CbMnMpeYA5DSHSj9fc7rZA4_q9Zeojg344,1393
132
130
  wbportfolio/import_export/parsers/jpmorgan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
- wbportfolio/import_export/parsers/jpmorgan/customer_trade.py,sha256=fj80hTkNxMR8boz1FzNoIJcwL1WuoVxX4_HV5o4CHL0,2812
134
- wbportfolio/import_export/parsers/jpmorgan/fees.py,sha256=_I3WdPcu5Z0cblOVnkDgOVm9tmH2YhgXdJqRwpkkcwA,2075
135
- wbportfolio/import_export/parsers/jpmorgan/strategy.py,sha256=OAIKv9NyKj8WiWLXsVIj7ujjfxBl5OLCNNXlx0oJIiE,4463
136
- wbportfolio/import_export/parsers/jpmorgan/valuation.py,sha256=GjOi5sztimefGNI2EgMtyTsdm_pwqR-Cyv_rEwwrr6Y,1214
131
+ wbportfolio/import_export/parsers/jpmorgan/customer_trade.py,sha256=yv01rA9KNzjqe24Ho647fSoPl34jG9Z-QFe0iaKRZKA,2868
132
+ wbportfolio/import_export/parsers/jpmorgan/fees.py,sha256=9F5fZP3rUwUZFq4UPQZRo1zdKsT-E9AHfr12DLFUB-g,2096
133
+ wbportfolio/import_export/parsers/jpmorgan/strategy.py,sha256=ROjZmmkQxxgzKSljyJsEsibWgUcDg5dxS5WonCbppKw,4484
134
+ wbportfolio/import_export/parsers/jpmorgan/valuation.py,sha256=exNIIyxRwdGw-FWjbGUeqeIiXPkSmHWVrUDAdwD7H4g,1235
137
135
  wbportfolio/import_export/parsers/leonteq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
136
  wbportfolio/import_export/parsers/leonteq/customer_trade.py,sha256=GdqCRWx-D-Z8yvBQU41MWj4j-X2BAnbJ6oAL6sdTnIQ,1896
139
137
  wbportfolio/import_export/parsers/leonteq/equity.py,sha256=Lr3nRPBa9Vg3_CQnuwpzyY0W8fG_pba0spASec9fYeU,3758
140
138
  wbportfolio/import_export/parsers/leonteq/fees.py,sha256=SJaYGURhSdBCf4jFaQAN9t5noT_nU9XpQbaLIs2nNQo,2652
141
- wbportfolio/import_export/parsers/leonteq/trade.py,sha256=C52EbtkdNoezIxqhSXAKmMZjOvqAzryu1HbgFOemTxI,3349
139
+ wbportfolio/import_export/parsers/leonteq/trade.py,sha256=pKtUT7kcZ6YkSS_eYAUsWjGiTpf-ODU3YhZRUS8O828,3371
142
140
  wbportfolio/import_export/parsers/leonteq/valuation.py,sha256=s9ovRv4Cx4cFQhjElPCTrguy4Q3iCzbt22TS7Kc3Jl0,1259
143
141
  wbportfolio/import_export/parsers/natixis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
142
  wbportfolio/import_export/parsers/natixis/customer_trade.py,sha256=YFqneuhkwGEF5NSZ6r2Fgf8xnOUCgVN2Vjv0oyPDlIY,2498
@@ -151,7 +149,7 @@ wbportfolio/import_export/parsers/natixis/dividend.py,sha256=qx8DXu6NXMy1M_iunA4
151
149
  wbportfolio/import_export/parsers/natixis/equity.py,sha256=GSObiFxvhlbGuSZnJq-D8yRgLlsAxJ4oMxYeR6GmFNE,2501
152
150
  wbportfolio/import_export/parsers/natixis/fees.py,sha256=oIC9moGm4s-6525q4_Syt4Yexj3SDgB5kYSfcsdzLcY,1666
153
151
  wbportfolio/import_export/parsers/natixis/trade.py,sha256=BJum1W0fYe9emHU7RgL-AjHkiclrckQYkG8VkyCnfvM,2579
154
- wbportfolio/import_export/parsers/natixis/utils.py,sha256=oa9ENQDfOp2dWfg-ohA5TanCCMx56BnZkQ-U6XlVaBs,2782
152
+ wbportfolio/import_export/parsers/natixis/utils.py,sha256=oy0Qq_f7lqOcAoK5sKZ3s_sdfiouJMRtajdy_Q_-8Gc,2828
155
153
  wbportfolio/import_export/parsers/natixis/valuation.py,sha256=qk5eDz-b9bIttDGnZxQZnm9pDIalb-LCGxmeTyMKRmQ,1523
156
154
  wbportfolio/import_export/parsers/refinitiv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
155
  wbportfolio/import_export/parsers/refinitiv/adjustment.py,sha256=64AQoLOZQWn5HCLpflJ4OgQB3gCB3w_6Y4YLhcmuClg,819
@@ -161,28 +159,28 @@ wbportfolio/import_export/parsers/sg_lux/customer_trade.py,sha256=gTEUIaxlZvXXCg
161
159
  wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py,sha256=WyRpKXkNhpK4H9aNjW7_ggcCGlN_-9ETlR1QsE9xl_k,5068
162
160
  wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py,sha256=D_1c0v6lTXkopjZzr9pQb575HxrMFe91tKk8xT1X3Ns,3604
163
161
  wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py,sha256=nMYV9-OwY_TagU36Ab0dOweZYzVriFWHXPYjauBg2Yk,2034
164
- wbportfolio/import_export/parsers/sg_lux/equity.py,sha256=IRwjeQmNFGuALUCWpWXWtflUEjl5qKyJumlQIAHmOPk,6076
162
+ wbportfolio/import_export/parsers/sg_lux/equity.py,sha256=ABDvdVmpGE13RUkKpC6OpgrrQ91U45lbmG_r3JRx4b4,6119
165
163
  wbportfolio/import_export/parsers/sg_lux/fees.py,sha256=AK2TGOjI3JrOjtACEQd-4ffuedtIus-_gWug6wN6RQs,1846
166
164
  wbportfolio/import_export/parsers/sg_lux/perf_fees.py,sha256=6HAV3Pu2aaYARjMQvN24Op2rru_YdjeI9J9ADDQVH8s,1513
167
165
  wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py,sha256=ftLKWukUl9AcGWHQmJZnShVZpkO4rOl04PGlLcalDdQ,889
168
166
  wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py,sha256=2kkEOwZz1hwiPB9rlMp_vkv5azMrJUfyWl7GMaAwGUc,1074
169
167
  wbportfolio/import_export/parsers/sg_lux/registers.py,sha256=NPkIAY5vJ40_EweQNjgiDVpi-HBK2OFFjwxXhWp85d0,6288
170
- wbportfolio/import_export/parsers/sg_lux/sylk.py,sha256=1ThyjneFFe_gNLDHeXQFdWIyanyktxm62P-Ta5Sm1v4,7656
168
+ wbportfolio/import_export/parsers/sg_lux/sylk.py,sha256=vwOjvOUulrFIxB8C47eu2y9vBgN8BzT6KaXeLtVR1bI,7707
171
169
  wbportfolio/import_export/parsers/sg_lux/utils.py,sha256=xrtEkdz_ypGFRTWn3-Kz6GzqhxY9mexSdWImBEc9xT8,1307
172
- wbportfolio/import_export/parsers/sg_lux/valuation.py,sha256=tmc-KHcRUHjTZVck8vzUIoN4Fcb-_zevmET4ZkkRlak,1788
170
+ wbportfolio/import_export/parsers/sg_lux/valuation.py,sha256=Y2SUBsswsWf9uUUkiO7SMSBQHGTJj4qu9aL7AfvH4-o,1832
173
171
  wbportfolio/import_export/parsers/societe_generale/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
172
  wbportfolio/import_export/parsers/societe_generale/customer_trade.py,sha256=eUgd_ZwK8WZh8-oXTLH4t_F9fXE6SCSOreIqXwVwT0w,2110
175
- wbportfolio/import_export/parsers/societe_generale/strategy.py,sha256=b0U3ZU1pyi5dbE678lD2M636v8mw6KjVBFUwJbP6yqk,4503
173
+ wbportfolio/import_export/parsers/societe_generale/strategy.py,sha256=pY80JDCa0ITVHNZkM2VYY_75elSCV7zlo1qh1ZXVEW0,4513
176
174
  wbportfolio/import_export/parsers/societe_generale/valuation.py,sha256=mxaV2cL5WKg2omrwLxcYkeLnb95S-NpG15FTGAJRy58,1225
177
175
  wbportfolio/import_export/parsers/tellco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
178
- wbportfolio/import_export/parsers/tellco/customer_trade.py,sha256=U04YVJHxQLWxpN8z4DkcK4p0lK1YpA8iDnRsjgNoprY,2126
176
+ wbportfolio/import_export/parsers/tellco/customer_trade.py,sha256=UAVcEC7Ff2Qa2-vnL2-NaRxFrqxA9HW0erMBm2RzrbQ,2157
179
177
  wbportfolio/import_export/parsers/tellco/equity.py,sha256=3mPqh-kridsNCy5K4sa43SRsZIzNnRCr_3qGYlm356Q,3353
180
- wbportfolio/import_export/parsers/tellco/valuation.py,sha256=QM8fYYOESGocACSbJnqD-1TtSYxOXOkkT7oLY6XY10Y,1642
178
+ wbportfolio/import_export/parsers/tellco/valuation.py,sha256=LwZLY1sy2sIjZXMezfZkBzvc6MeluM8xnuuDn4QGDQs,1685
181
179
  wbportfolio/import_export/parsers/ubs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
182
180
  wbportfolio/import_export/parsers/ubs/customer_trade.py,sha256=PYXVZRBoI0B6NJGhHoTboBzfA-U16hrIDDdPu--RLNs,2089
183
- wbportfolio/import_export/parsers/ubs/equity.py,sha256=a3Hv6kjE__VUSdkE2TJ4NBCyVvnt34bPO-uZPR7pcEM,3471
181
+ wbportfolio/import_export/parsers/ubs/equity.py,sha256=_QMvNbwPCT20rbPtobGhG5vXLHglh8Bu45taDXIIBhs,3493
184
182
  wbportfolio/import_export/parsers/ubs/historical_customer_trade.py,sha256=1IggU7Ogg8-gdwLqBtz-FZ6l-UKsjbtM-KomM8u6QpA,1746
185
- wbportfolio/import_export/parsers/ubs/valuation.py,sha256=6P71APM4xGoAadCywO6DBz42xL1bClacf242pb25w_s,1597
183
+ wbportfolio/import_export/parsers/ubs/valuation.py,sha256=Mz1uq7ftQgcBFVEfp3E0NfeTPQLj4i07HUTRF3jqCds,1619
186
184
  wbportfolio/import_export/parsers/ubs/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
185
  wbportfolio/import_export/parsers/ubs/api/asset_position.py,sha256=vDpGuHDvn0c-x72WVQtIqUc15UxoAQL-XFOsKzNoBjk,4136
188
186
  wbportfolio/import_export/parsers/ubs/api/fees.py,sha256=W6KfZn185nwXePwxL90Jp3Y_HCtkEzivuSSv2IfT2qs,1068
@@ -212,7 +210,7 @@ wbportfolio/locale/fr/LC_MESSAGES/django.mo,sha256=t4lh3zX7kshbDAFzXa5HU_YGPXkPz
212
210
  wbportfolio/locale/fr/LC_MESSAGES/django.po,sha256=EdY0xnTQG8al2Fi_Ml2rxEZ7cr-YhRkAT2G3ABjhAZI,5266
213
211
  wbportfolio/metric/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
212
  wbportfolio/metric/backends/__init__.py,sha256=jfim5By5KqXfraENRFlhXy3i3gIzmElD6sfwL3qK2KM,108
215
- wbportfolio/metric/backends/base.py,sha256=Dv9uTAPizUJtGraTPMaSnrqWpJJSr-ftPid4wttQhkI,2787
213
+ wbportfolio/metric/backends/base.py,sha256=y4bwa7DW5GmTjSmdHgtOnz3BmMlMi_xuoyB0zk_p86Y,2789
216
214
  wbportfolio/metric/backends/constants.py,sha256=NU5BlMb_HIiN9NWtw_hSfWK0y0q4W9-HQG7eJoZqI_g,7373
217
215
  wbportfolio/metric/backends/portfolio_base.py,sha256=9gC2RhBVt9R38rEIvBmWdgUC6mEOP5vFqEEew_sWIeU,10012
218
216
  wbportfolio/metric/backends/portfolio_esg.py,sha256=MSiki-ZN-7YF0gev1kGFDrbfBi8Nfw6yJeLZlSRy6tw,2442
@@ -271,43 +269,44 @@ wbportfolio/migrations/0085_order_desired_target_weight.py,sha256=L8p5t4PqjWIwqw
271
269
  wbportfolio/migrations/0086_orderproposal_total_cash_weight.py,sha256=IE65OYYBOSQjj6znl9jmsMalxDmKdnHV1DbVz_ZX_M4,689
272
270
  wbportfolio/migrations/0087_product_order_routing_custodian_adapter.py,sha256=4OHTjdXNwJ-My8EgUGYWM_vRBccjYgghjN4fLV0n1yQ,4564
273
271
  wbportfolio/migrations/0088_orderproposal_total_effective_portfolio_contribution.py,sha256=6Q41GSbWg_L8r6FUcQ9MrdpRazOdUlc7tD8_bmg8a3Y,521
272
+ wbportfolio/migrations/0089_orderproposal_min_weighting.py,sha256=DgJdIRka1eZSrEZqkUBHiVPpCfOvChWPrWdx-ZExO6Q,3906
274
273
  wbportfolio/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
275
274
  wbportfolio/models/__init__.py,sha256=qU4e7HKyh8NL_0Mg92PcbHTewCv7Ya2gei1DMGe1LWE,980
276
275
  wbportfolio/models/adjustments.py,sha256=osXWkJZOiansPWYPyHtl7Z121zDWi7u1YMtrBQtbHVo,10272
277
- wbportfolio/models/asset.py,sha256=K0cvK-g1dUmQLjVAboUm3zDb4YGW_Wu9eRMdhfEMSck,39123
276
+ wbportfolio/models/asset.py,sha256=EBq_pse5mmV3gQ-7yjfMBYmm8de9LS1wIiq2Dw_JF_Y,39196
278
277
  wbportfolio/models/builder.py,sha256=txZE_gEDgkPgSxSF0AlvZiRyhRQixD4Ame0wEF6Fjoo,14028
279
- wbportfolio/models/custodians.py,sha256=owTiS2Vm5CRKzh9M_P9GOVg-s-ndQ9UvRmw3yZP7cw0,3815
280
- wbportfolio/models/exceptions.py,sha256=3ix0tWUO-O6jpz8f07XIwycw2x3JFRoWzjwil8FVA2Q,52
278
+ wbportfolio/models/custodians.py,sha256=QhSC3mfd6rSPp8wizabLbKmFDrrskZTSkxNdBJMdtCk,3815
279
+ wbportfolio/models/exceptions.py,sha256=EZnqSr5PxikiS4oDknRakEmlninJh_c-tOHRYv3IMjE,57
281
280
  wbportfolio/models/indexes.py,sha256=gvW4K9U9Bj8BmVCqFYdWiXvDWhjHINRON8XhNsZUiQY,639
282
- wbportfolio/models/portfolio.py,sha256=fuYvHx4D3GqHjO0cBqe09M-t-t6jUzuOMh2ikTbykMo,54640
281
+ wbportfolio/models/portfolio.py,sha256=DUuHV7SWFEbKpfcZn-vXSj9SdD7-GULpoadzxnCdggI,55532
283
282
  wbportfolio/models/portfolio_cash_flow.py,sha256=uElG7IJUBY8qvtrXftOoskX6EA-dKgEG1JJdvHeWV7g,7336
284
283
  wbportfolio/models/portfolio_cash_targets.py,sha256=WmgG-etPisZsh2yaFQpz7EkpvAudKBEzqPsO715w52U,1498
285
- wbportfolio/models/portfolio_relationship.py,sha256=ZGECiPZiLdlk4uSamOrEfuzO0hduK6OMKJLUSnh5_kc,5190
284
+ wbportfolio/models/portfolio_relationship.py,sha256=sJaEghyMPcPThUR5s7a2h8f78YyjvaV22xJFl5-i_tU,5387
286
285
  wbportfolio/models/portfolio_swing_pricings.py,sha256=_LqYC1VRjnnFFmVqFPRdnbgYsVxocMVpClTk2dnooig,1778
287
286
  wbportfolio/models/product_groups.py,sha256=qoT8qv6tRdD6zmNDxsHO6dtnWw1-TRnyS5NqOq_gwhI,7901
288
- wbportfolio/models/products.py,sha256=8XXx6sN3cUCls_TlwAc8-vL1bNn0JQRAxeCeyLJlmG8,23177
289
- wbportfolio/models/rebalancing.py,sha256=Mw24JO4C8jRA6U7dgsNR8usgIO1VqMgsVs94HdC07cE,7729
287
+ wbportfolio/models/products.py,sha256=EBU6zBMPhT3GYhwQIQt3VAAehlFs3szbJRUytg8aY_c,23260
288
+ wbportfolio/models/rebalancing.py,sha256=8FKVyDvpO35_TyEtq8dhk4f_toroBaGXTuiCByejkHs,7827
290
289
  wbportfolio/models/registers.py,sha256=qA6T33t4gxFYnabQFBMd90WGIr6wxxirDLKDFqjOfok,4667
291
- wbportfolio/models/roles.py,sha256=wF5Atp0xsJxDrYjmFw9XHgEOe_4C-lm4pppeYdymOrA,7343
290
+ wbportfolio/models/roles.py,sha256=3tuQAQ3Bw5AVWAwiaukHTgGq1_bcod7p5cttS3uQnU0,7193
292
291
  wbportfolio/models/signals.py,sha256=jZKC43nIqVdLapwo3getIMSqPUwbK5M36MmvA50jY24,1041
293
292
  wbportfolio/models/utils.py,sha256=iBdMjRCvr6aOL0nLgfSCWUKe0h39h3IGmUbYo6l9t6w,394
294
293
  wbportfolio/models/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
295
294
  wbportfolio/models/graphs/portfolio.py,sha256=NwkehWvTcyTYrKO5ku3eNNaYLuBwuLdSbTEuugGuSIU,6541
296
- wbportfolio/models/graphs/utils.py,sha256=1AMpEE9mDuUZ82XgN2irxjCW1-LmziROhKevEBo0mJE,2347
295
+ wbportfolio/models/graphs/utils.py,sha256=4QlUkRaTToXwkHBWEPj_eWABntpgl-8gkTqEEfwuiys,2347
297
296
  wbportfolio/models/llm/wbcrm/analyze_relationship.py,sha256=etKdmt9m6Ra5u7EA9t98RVSqFKpbFd4iwBVaH9T26M8,2320
298
297
  wbportfolio/models/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
299
298
  wbportfolio/models/mixins/instruments.py,sha256=SuMPquQ93D4pZMK-4hQbJtV58_NOyf3wVOctQq7LNXQ,7054
300
299
  wbportfolio/models/mixins/liquidity_stress_test.py,sha256=iQVzT3QM7VtHnqfj9gT6KUIe4wC4MJXery-AXJHUYns,58820
301
300
  wbportfolio/models/orders/__init__.py,sha256=EH9UacGR3npBMje5FGTeLOh1xqFBh9kc24WbGmBIA3g,69
302
- wbportfolio/models/orders/order_proposals.py,sha256=1ce97DXjzZ4MsUAgA_GlnofnztAf0Y6zR1etZs-LrFI,57120
303
- wbportfolio/models/orders/orders.py,sha256=kiVmVeW2D1bAuT983nSeIug6uoZ78IZovuAgls-CO8w,10150
301
+ wbportfolio/models/orders/order_proposals.py,sha256=JmSZXYqaQtS9tV-iHYgIulG_G5_6bKZqTqsmJK9iY0w,58198
302
+ wbportfolio/models/orders/orders.py,sha256=OpUbKzY2g6XA3n8hyU-FTauEQE5UKLEdOPQkdi4rktU,10520
304
303
  wbportfolio/models/orders/routing.py,sha256=OpeP-rfMm1UN7a3vbNxBEQxqtGfE57AeGWnbTZa1fRQ,2223
305
304
  wbportfolio/models/reconciliations/__init__.py,sha256=MXH5fZIPGDRBgJkO6wVu_NLRs8fkP1im7G6d-h36lQY,127
306
305
  wbportfolio/models/reconciliations/account_reconciliation_lines.py,sha256=QP6M7hMcyFbuXBa55Y-azui6Dl_WgbzMntEqWzQkbfM,7394
307
306
  wbportfolio/models/reconciliations/account_reconciliations.py,sha256=rofSxetFfEJov6mPyoTvGxELA16HILyJZtQvm_kwYU0,4405
308
307
  wbportfolio/models/reconciliations/reconciliations.py,sha256=kF-BNhUoT4TCn1RIgPSkdEk1iX4NQeZlGGFd_ZulAZU,686
309
308
  wbportfolio/models/transactions/__init__.py,sha256=NrnVHxcpi0Kc6SkTiSlWn4JMWoelvkE9bNouClcvqGA,133
310
- wbportfolio/models/transactions/claim.py,sha256=SF2FlwG6SRVmA_hT0NbXah5-fYejccWKAE6AY6YOYTs,25875
309
+ wbportfolio/models/transactions/claim.py,sha256=A_1OBULlkOWCNr-d-g9ySSTeqCdao4_7BDwChBpB7io,25900
311
310
  wbportfolio/models/transactions/dividends.py,sha256=mmOdGWR35yndUMoCuG24Y6BdtxDhSk2gMQ-8LVguqzg,1890
312
311
  wbportfolio/models/transactions/fees.py,sha256=wJtlzbBCAq1UHvv0wqWTE2BEjCF5RMtoaSDS3kODFRo,7112
313
312
  wbportfolio/models/transactions/trades.py,sha256=2cDNjf1hJwFwrDT1SLacUU-Nkt5kU62zjI3WIj_Q0vQ,16340
@@ -316,7 +315,7 @@ wbportfolio/order_routing/__init__.py,sha256=kYloUGytPBNB8KVy5ysm9PlEEU_sGPk5c3c
316
315
  wbportfolio/order_routing/adapters/__init__.py,sha256=YiM5FFvLucDTBgIn3mCBjKNSRU7K2pokHdbWBoaZA94,1549
317
316
  wbportfolio/order_routing/adapters/ubs.py,sha256=_Z9-j1a6_F08VlNIjLLn5XmhoKSZQTTH14lGeTgbu9A,6328
318
317
  wbportfolio/pms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
319
- wbportfolio/pms/typing.py,sha256=kNesj7e-SA9lKgmdInJ94R60-pXNKm6guSj_cD3CQUE,10638
318
+ wbportfolio/pms/typing.py,sha256=zhFHlYgO9oC5sxBz0oWkXfEVw-Oez_Ex4ojyQSHC0Oo,10627
320
319
  wbportfolio/pms/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
321
320
  wbportfolio/pms/analytics/portfolio.py,sha256=u_S-e6HUQwAyq90gweDmxyTHWrIc5nd84sLuUF2iJzA,2031
322
321
  wbportfolio/pms/analytics/utils.py,sha256=EfhKdo9B2ABaUPppb8DgZSqpNkSze8Rjej1xDjv-XcQ,282
@@ -329,16 +328,16 @@ wbportfolio/rebalancing/decorators.py,sha256=162ZmXV2YQGI830LWvEnJ95RexMzHvaCGfc
329
328
  wbportfolio/rebalancing/models/__init__.py,sha256=AQjG7Tu5vlmhqncVoYOjpBKU2UIvgo9FuP2_jD2w-UI,232
330
329
  wbportfolio/rebalancing/models/composite.py,sha256=kDa4-Q3aMOrBGrrfIwTyjik14vF8cjfD-ArIm8FCR9A,1671
331
330
  wbportfolio/rebalancing/models/equally_weighted.py,sha256=iv6FiICGQX1mPnkK2L4oDeCH_-4yF8SL8YUBzjXBZsI,1306
332
- wbportfolio/rebalancing/models/market_capitalization_weighted.py,sha256=3Lm3A4yBj_QEBw0EjTvn39f1vFzjLz_ITDUQCAXuxJg,5642
331
+ wbportfolio/rebalancing/models/market_capitalization_weighted.py,sha256=sNu3DYPlX19stqZO4c5CLubsMJJhnj3m7zYbabR05rg,5536
333
332
  wbportfolio/rebalancing/models/model_portfolio.py,sha256=_j892V6YCrXLzNZdpxuKmaNu_VYfamStwb6Z-4sECPA,1326
334
333
  wbportfolio/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
334
  wbportfolio/reports/monthly_position_report.py,sha256=e7BzjDd6eseUOwLwQJXKvWErQ58YnCsznHU2VtR6izM,2981
336
335
  wbportfolio/risk_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
337
336
  wbportfolio/risk_management/backends/__init__.py,sha256=4N3GYcIb0XgZUQWEHxCejOCRabUtLM6ha9UdOWJKUfI,368
338
337
  wbportfolio/risk_management/backends/accounts.py,sha256=VMHwhzeFV2bzobb1RlEJadTVix1lkbbfdpo-zG3YN5c,7988
339
- wbportfolio/risk_management/backends/controversy_portfolio.py,sha256=ncEHyJMVomv0ehx7LoWcux1YHLV6KYYmiOkIBzJ0P1M,2852
338
+ wbportfolio/risk_management/backends/controversy_portfolio.py,sha256=aoRt29QGFNWPf_7yr0Dpjv2AwsA0SJpZdNf8NCfe7JY,2843
340
339
  wbportfolio/risk_management/backends/exposure_portfolio.py,sha256=8T97J0pbnGdme_Ji9ntA5FV9MCouSxDz5grMvRvpl70,10760
341
- wbportfolio/risk_management/backends/instrument_list_portfolio.py,sha256=Sh8PZHHKFAl4Aw8fOlu17fUSiEFYYemb-B0iltAXc10,4186
340
+ wbportfolio/risk_management/backends/instrument_list_portfolio.py,sha256=PS-OtT0ReFnZ-bsOCtAQhPjhE0Nc5AyEqy4gLya3fhk,4177
342
341
  wbportfolio/risk_management/backends/liquidity_risk.py,sha256=OnuUypmN86RDnch1JOb8UJo5j1z1_X7sjazqAo7cbwM,3694
343
342
  wbportfolio/risk_management/backends/liquidity_stress_instrument.py,sha256=oitzsaZu-HhYn9Avku3322GtDmf6QGsfyRzGPGZoM1Y,3612
344
343
  wbportfolio/risk_management/backends/mixins.py,sha256=g0hkQRjn3-S6vMIai6t2_tf6uWoG_D3WdamQwDTlMu0,10052
@@ -354,8 +353,8 @@ wbportfolio/risk_management/tests/test_exposure_portfolio.py,sha256=hKTygdBdZB-Z
354
353
  wbportfolio/risk_management/tests/test_instrument_list_portfolio.py,sha256=1pAsuMhxOWZHxQnVlTnRuzq8qIe6_86EYbkTnPlWRjE,2763
355
354
  wbportfolio/risk_management/tests/test_liquidity_risk.py,sha256=UtzBrW7LeY0Z0ARX9pg4CUjgdw8u5Hfrdkddro5EEZ8,1713
356
355
  wbportfolio/risk_management/tests/test_product_integrity.py,sha256=wqJ4b5DO2BrEVQF4eVX2B9AvfrRMAyC_lppGrgKc_ug,1959
357
- wbportfolio/risk_management/tests/test_stop_loss_instrument.py,sha256=ZueuA9qQOv6JdKuRiPLGV3auOLRnoUCZzfqcQzGJGig,4197
358
- wbportfolio/risk_management/tests/test_stop_loss_portfolio.py,sha256=_CLyC4mWPCP92LuERk6gnrr-JG78WCB83ezl5fPugLo,5195
356
+ wbportfolio/risk_management/tests/test_stop_loss_instrument.py,sha256=OczeyM32uPtND4_Tk4Y1saPqI3XURTQKDKydv_-FRF0,4175
357
+ wbportfolio/risk_management/tests/test_stop_loss_portfolio.py,sha256=O30YW4NMV0Ja2AGA-EQsu17--9H_Yz66r5IAM6xDM94,5184
359
358
  wbportfolio/risk_management/tests/test_ucits_portfolio.py,sha256=UcZLhatl8iU9AhNNYv6OBs_cjILZKaws2nvUen6orkc,1807
360
359
  wbportfolio/serializers/__init__.py,sha256=l05IdXIG5POdXDRy3mk5ZlFJknE-FVla64tGB9TigW0,1817
361
360
  wbportfolio/serializers/adjustments.py,sha256=0yTPgDjGRyzSa-ecCklENKtLJXZhq1dryMI3nTRsQRo,783
@@ -375,10 +374,10 @@ wbportfolio/serializers/registers.py,sha256=zhdKH_mHEBE0VOhm6xpY54bTMtcSaY5BskEa
375
374
  wbportfolio/serializers/roles.py,sha256=T-9NqTldpvaEMFy-Bib5MB6MeboygEOqcMP61mzzD3Q,2146
376
375
  wbportfolio/serializers/signals.py,sha256=hD6R4oFtwhvnsJPteytPKy2JwEelmxrapdfoLSnluaE,7053
377
376
  wbportfolio/serializers/orders/__init__.py,sha256=PKJRksA1pWsh8nVfGASoB0m3LyUzVRnq1m9VPp90J7k,271
378
- wbportfolio/serializers/orders/order_proposals.py,sha256=wIxnTY35dn7gH1kj9wGHnl2lOrR6ikRdqxXrSf85tT0,4762
377
+ wbportfolio/serializers/orders/order_proposals.py,sha256=Jxea2-Ze8Id5URv4UV-vTfCQGt11tjR27vRRfCs0gXU,4791
379
378
  wbportfolio/serializers/orders/orders.py,sha256=7zIl5lwt7RatSVcrmNmLpWX2r2VkND33HQOUkryGjYo,7582
380
379
  wbportfolio/serializers/transactions/__init__.py,sha256=-7Pan4n7YI3iDvGXff6okzk4ycEURRxp5n_SHCY_g_I,493
381
- wbportfolio/serializers/transactions/claim.py,sha256=kC4E2RZRrpd9i8tGfoiV-gpWDk3ikR5F1Wf0v_IGIvw,11599
380
+ wbportfolio/serializers/transactions/claim.py,sha256=mEt67F2v8HC6roemDT3S0dD0cZIVl1U9sASbLW3Vpyo,11611
382
381
  wbportfolio/serializers/transactions/dividends.py,sha256=ADXf9cXe8rq55lC_a8vIzViGLmQ-yDXkgR54k2m-N0w,1814
383
382
  wbportfolio/serializers/transactions/fees.py,sha256=3mBzs6vdfST9roeQB-bmLJhipY7i5jBtAXjoTTE-GOg,2388
384
383
  wbportfolio/serializers/transactions/trades.py,sha256=4Q7LhSlkGzd2UlTJFHcHufj6U9LLOKzr-POM9_IQ3Sc,9741
@@ -413,14 +412,14 @@ wbportfolio/tests/models/test_merge.py,sha256=sdsjiZsmR6vsUKwTa5kkvL6QTeAZqtd_EP
413
412
  wbportfolio/tests/models/test_portfolio_cash_flow.py,sha256=X8dsXexsb1b0lBiuGzu40ps_Az_1UmmKT0eo1vbXH94,5792
414
413
  wbportfolio/tests/models/test_portfolio_cash_targets.py,sha256=q8QWAwt-kKRkLC0E05GyRhF_TTQXIi8bdHjXVU0fCV0,965
415
414
  wbportfolio/tests/models/test_portfolio_swing_pricings.py,sha256=kr2AOcQkyg2pX3ULjU-o9ye-NVpjMrrfoe-DVbYCbjs,1656
416
- wbportfolio/tests/models/test_portfolios.py,sha256=qaNTgvtxSROpjPtzSffLMrnsOJYjftN8gNhqmAm8fLE,53819
415
+ wbportfolio/tests/models/test_portfolios.py,sha256=PTaJUmNI5acpB2p--GyrDha5PRr6tqXSGZRLoNkoIjE,53827
417
416
  wbportfolio/tests/models/test_product_groups.py,sha256=AcdxhurV-n_bBuUsfD1GqVtwLFcs7VI2CRrwzsIUWbU,3337
418
417
  wbportfolio/tests/models/test_products.py,sha256=zB3xDGk7k7omI61hU9cnU96oBc3ICiMaYtFC9pidars,9965
419
418
  wbportfolio/tests/models/test_roles.py,sha256=4Cn7WyrA2ztJNeWLk5cy9kYo5XLWMbFSvo1O-9JYxeA,3323
420
- wbportfolio/tests/models/test_splits.py,sha256=ytKcHsI_90kj1L4s8It-KEcc24rkDcElxwQ8q0QxEvk,9689
419
+ wbportfolio/tests/models/test_splits.py,sha256=0PvW6WunBByDYRhtFV2LbK-DV92q-1s3kn45NvBL5Es,9500
421
420
  wbportfolio/tests/models/utils.py,sha256=ORNJq6NMo1Za22jGZXfTfKeNEnTRlfEt_8SJ6xLaQWg,325
422
421
  wbportfolio/tests/models/orders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
423
- wbportfolio/tests/models/orders/test_order_proposals.py,sha256=WxZgoN0J7rF5TVa_hmXZdYnUXtrU0eH-U9CW1NWNBIM,34123
422
+ wbportfolio/tests/models/orders/test_order_proposals.py,sha256=N_l7wgFgd-1uFCE6ZbWCzXEOmOgWaiee-w1VCqKxLnw,35401
424
423
  wbportfolio/tests/models/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
425
424
  wbportfolio/tests/models/transactions/test_claim.py,sha256=NG3BKB-FVcIDgHSJHCjImxgMM3ISVUMl24xUPmEcPec,5570
426
425
  wbportfolio/tests/models/transactions/test_fees.py,sha256=tAp18x2wCNQr11LUnLtHNbBDbbX0v1DZnmW7i-cEi5Q,2423
@@ -435,7 +434,7 @@ wbportfolio/tests/serializers/test_claims.py,sha256=vQrg73xQXRFEgvx3KI9ivFre_wpB
435
434
  wbportfolio/tests/viewsets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
436
435
  wbportfolio/tests/viewsets/test_assets.py,sha256=-RKdU23dxXEW8f3ZQu3a15U9ljTej3FflGtDEahENsI,2568
437
436
  wbportfolio/tests/viewsets/test_performances.py,sha256=Cx5FqPO4K8G7F6-rqiiSDmFNYJPyv999pvR-KCO1FYY,3877
438
- wbportfolio/tests/viewsets/test_products.py,sha256=VsLW5iazAGch8yxH0jTgcc2fn4L7iZ2gPw7PmqQL60g,4270
437
+ wbportfolio/tests/viewsets/test_products.py,sha256=4w2Pn4rApWjolKVL9VuTGgz-bv-jF8GFVT9x5D5MbTk,4296
439
438
  wbportfolio/tests/viewsets/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
440
439
  wbportfolio/tests/viewsets/transactions/test_claims.py,sha256=QEZfMAW07dyoZ63t2umSwGOqvaTULfYfbN_F4ZoSAcw,6368
441
440
  wbportfolio/viewsets/__init__.py,sha256=nmWLARDxraY09h4-dpfbOWlx1OylZz3_DpGk_gvJv-o,2475
@@ -459,7 +458,7 @@ wbportfolio/viewsets/reconciliations.py,sha256=tRS7UBDtMn-07uA9QqYvnCtp_mZGVeULF
459
458
  wbportfolio/viewsets/registers.py,sha256=eOuEhW2McHsOapCKue7M4eazrJnVpCBVxImpFccq0z0,2401
460
459
  wbportfolio/viewsets/roles.py,sha256=vnzS1mlJMZS3GObrss6SfXOr3KRb-OHB1s4Msvtn7xQ,1556
461
460
  wbportfolio/viewsets/charts/__init__.py,sha256=zE3bxS0V-nM_yZ610M7qsaToNOJXvTjwFLhH1it3h4M,169
462
- wbportfolio/viewsets/charts/assets.py,sha256=P5ZQ7Kihw3Eab7n7CKxMLdkdWGyiF-qpntw_x9iRJuc,17906
461
+ wbportfolio/viewsets/charts/assets.py,sha256=OcxLOmlrGj2EMp-Id0R356vjGdGlIHmUaRHcz_zXZkI,17926
463
462
  wbportfolio/viewsets/configs/__init__.py,sha256=K5opfVQvgGwSyw3XwDGkv3lo5i9jBxOJXYhLqyCdfeQ,137
464
463
  wbportfolio/viewsets/configs/buttons/__init__.py,sha256=hyvpxwh9ss8Q0xcE006qsTLuSsJeWt9saHRcU4g96tA,791
465
464
  wbportfolio/viewsets/configs/buttons/adjustments.py,sha256=sUY_3vxqP0kuqs8i5hklfboZI6QiAOrmu30eb29Xupo,492
@@ -467,7 +466,7 @@ wbportfolio/viewsets/configs/buttons/assets.py,sha256=6HqSyUpczK66iL0Jg8BbvAJuci
467
466
  wbportfolio/viewsets/configs/buttons/claims.py,sha256=G1GFK1jQyR9M0dyXthYA6krG2JFvHhc3D7pFh6IUQ30,3684
468
467
  wbportfolio/viewsets/configs/buttons/custodians.py,sha256=AE-VFahGreSlg5nejqQVvOy2JvpclXbgSD6bxsyqI_U,3317
469
468
  wbportfolio/viewsets/configs/buttons/fees.py,sha256=8z-qo5krw4x_9ujp0s8iR8iY8_5m-wusPNaQkjMxFSA,443
470
- wbportfolio/viewsets/configs/buttons/mixins.py,sha256=d2W3IOgmi3icTMeoO_ckec2oCXA_kiG6nOriMG7YHTI,3169
469
+ wbportfolio/viewsets/configs/buttons/mixins.py,sha256=mTn6EikAU4Sob8qNquhPOdhVTA9NjUanWaye7Bz7NHo,3167
471
470
  wbportfolio/viewsets/configs/buttons/portfolios.py,sha256=y1sqYJwhQG9M0AgUEY8yEE3VTdhhVxoup3YBc2IRm-U,5267
472
471
  wbportfolio/viewsets/configs/buttons/products.py,sha256=4xH19uYTDL55hKrV24eeeOFrmO1vV5MAwPw5IxNKosQ,3301
473
472
  wbportfolio/viewsets/configs/buttons/reconciliations.py,sha256=lw4r22GHpqKPUF1MrB6P9dOkL-FHe5iiBJ0--f8D74E,3145
@@ -489,7 +488,7 @@ wbportfolio/viewsets/configs/display/product_groups.py,sha256=PwI-A0_ofShT2pub9-
489
488
  wbportfolio/viewsets/configs/display/product_performance.py,sha256=6Mme48JBn_okwClR44dBK2OK26ejvdasDvBa5DI33_0,10070
490
489
  wbportfolio/viewsets/configs/display/products.py,sha256=8Ssmb4IjqXwTX81aKmLVbmWZcD_8uHa08vieO6cgjoM,10686
491
490
  wbportfolio/viewsets/configs/display/rebalancing.py,sha256=3A5JFy6-lMcsyoUCW5qPBpwfKqVQRXUA2qDrDz4Yjlc,1108
492
- wbportfolio/viewsets/configs/display/reconciliations.py,sha256=YvMAuwmpX0HExvGsuf5UvcRQxe4eMo1iyNJX68GGC_k,6021
491
+ wbportfolio/viewsets/configs/display/reconciliations.py,sha256=E_Jab4cUMd7hhCQrdgev2ymkIqIbUh0B8TNvXiDqEWs,6025
493
492
  wbportfolio/viewsets/configs/display/registers.py,sha256=1np75exIk5rfct6UkVN_RnfJ9ozvIkcWJgFV4_4rJns,3182
494
493
  wbportfolio/viewsets/configs/display/roles.py,sha256=SFUyCdxSlHZ3NsMrJmpVBSlg-XKGaEFteV89nyLMMAQ,1815
495
494
  wbportfolio/viewsets/configs/display/trades.py,sha256=NDmv2aShfshpO1SjzPzsXvn4BswEo4JP6I_aIm9LvP0,9564
@@ -555,7 +554,7 @@ wbportfolio/viewsets/orders/configs/buttons/__init__.py,sha256=EHzNmAfa0UQFITEF-
555
554
  wbportfolio/viewsets/orders/configs/buttons/order_proposals.py,sha256=1BPkIYv0-K2DDGa4Gua2_Pxsx7fNurTZ2tYNdL66On0,6495
556
555
  wbportfolio/viewsets/orders/configs/buttons/orders.py,sha256=GDO4Y33wkjhDxzpf7B1d_rKzAixegLv5rHam1DV3WkM,290
557
556
  wbportfolio/viewsets/orders/configs/displays/__init__.py,sha256=__YJBbz_ZnKpE8WMMDR2PC9Nng-EVlRpGTEQucdrhRA,108
558
- wbportfolio/viewsets/orders/configs/displays/order_proposals.py,sha256=1HnQGR8WFSWHfugEhbTrCaxZ5pabzH8iaLKVBb_Fowc,7282
557
+ wbportfolio/viewsets/orders/configs/displays/order_proposals.py,sha256=zLoLEw4N1i_LD0e3hJnxzO8ORN2byFZoCxWnAz8DBx0,7362
559
558
  wbportfolio/viewsets/orders/configs/displays/orders.py,sha256=R1oaDTGosL430xnYZpJz7ihnCOCO6eAFhDQz-wGYT24,7611
560
559
  wbportfolio/viewsets/orders/configs/endpoints/__init__.py,sha256=IB8GEadiEtBDclhkgpcJGXWfCF6qRK_42hxJ4pcdZDU,148
561
560
  wbportfolio/viewsets/orders/configs/endpoints/order_proposals.py,sha256=fY3y2YWR9nY-KE8k078NszDsnwOgqOIjHUgLvQjDivU,822
@@ -567,7 +566,7 @@ wbportfolio/viewsets/transactions/claim.py,sha256=Pb1WftoO-w-ZSTbLRhmQubhy7hgd68
567
566
  wbportfolio/viewsets/transactions/fees.py,sha256=WT2bWWfgozz4_rpyTKX7dgBBTXD-gu0nlsd2Nk2Zh1Q,7028
568
567
  wbportfolio/viewsets/transactions/mixins.py,sha256=WipvJoi5hylkpD0y9VATe30WAcwIHUIroVkK10FYw7k,636
569
568
  wbportfolio/viewsets/transactions/trades.py,sha256=xBgOGaJ8aEg-2RxEJ4FDaBs4SGwuLasun3nhpis0WQY,12363
570
- wbportfolio-1.55.8.dist-info/METADATA,sha256=JBgCNHH4seDymSNEd6z5o49vq2VI66Pg0v3tLoxJ41w,751
571
- wbportfolio-1.55.8.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
572
- wbportfolio-1.55.8.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
573
- wbportfolio-1.55.8.dist-info/RECORD,,
569
+ wbportfolio-1.55.10rc0.dist-info/METADATA,sha256=6GizbbXgUlDYAtWJbLypIw1ijtGXI58Zke9yPWQnIO8,755
570
+ wbportfolio-1.55.10rc0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
571
+ wbportfolio-1.55.10rc0.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
572
+ wbportfolio-1.55.10rc0.dist-info/RECORD,,
File without changes
wbportfolio/fdm/tasks.py DELETED
@@ -1,42 +0,0 @@
1
- from celery import shared_task
2
- from wbfdm.models import Controversy, Instrument
3
-
4
- from wbportfolio.models import AssetPosition, Portfolio
5
-
6
-
7
- @shared_task(queue="portfolio")
8
- def synchronize_portfolio_controversies():
9
- active_portfolios = Portfolio.objects.filter_active_and_tracked()
10
- qs = (
11
- AssetPosition.objects.filter(portfolio__in=active_portfolios)
12
- .values("underlying_instrument")
13
- .distinct("underlying_instrument")
14
- )
15
- objs = {}
16
- securities = Instrument.objects.filter(id__in=qs.values("underlying_instrument"))
17
- securities_mapping = {security.id: security.get_root() for security in securities}
18
- for controversy in securities.dl.esg_controversies():
19
- instrument = securities_mapping[controversy["instrument_id"]]
20
- obj = Controversy.dict_to_model(controversy, instrument)
21
- objs[obj.external_id] = obj
22
-
23
- Controversy.objects.bulk_create(
24
- objs.values(),
25
- update_fields=[
26
- "instrument",
27
- "headline",
28
- "description",
29
- "source",
30
- "direct_involvement",
31
- "company_response",
32
- "review",
33
- "initiated",
34
- "flag",
35
- "status",
36
- "type",
37
- "severity",
38
- ],
39
- unique_fields=["external_id"],
40
- update_conflicts=True,
41
- batch_size=10000,
42
- )