wbportfolio 1.46.10__py2.py3-none-any.whl → 1.46.12__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.

Potentially problematic release.


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

@@ -675,7 +675,7 @@ class Portfolio(DeleteToDisableMixin, WBModel):
675
675
  asset.save()
676
676
 
677
677
  # We check if there is an instrument attached to the portfolio with calculated NAV and price computation method
678
- self.estimate_net_asset_values(val_date)
678
+ self.estimate_net_asset_values((val_date + BDay(1)).date()) # updating weighting in t0 influence nav in t+1
679
679
  if evaluate_rebalancer:
680
680
  self.evaluate_rebalancing(val_date)
681
681
 
@@ -1217,13 +1217,17 @@ class Portfolio(DeleteToDisableMixin, WBModel):
1217
1217
 
1218
1218
  def default_estimate_net_value(val_date: date, instrument: Instrument) -> float | None:
1219
1219
  portfolio = instrument.portfolio
1220
+ previous_val_date = (val_date - BDay(1)).date()
1221
+
1220
1222
  if (
1221
- previous_date := portfolio.get_latest_asset_position_date(val_date - BDay(1), with_estimated=True)
1222
- ) and portfolio.assets.filter(date=val_date).exists():
1223
- with suppress(IndexError):
1224
- if last_price := instrument.get_latest_price(previous_date):
1225
- analytic_portfolio, _ = portfolio.get_analytic_portfolio(previous_date)
1226
- return analytic_portfolio.get_estimate_net_value(float(last_price.net_value))
1223
+ portfolio.assets.filter(date=previous_val_date).exists()
1224
+ and ( # we assume that in t-1 we will have a portfolio (with at least estimate position). If we use the latest position date before val_date, we run into the problem of being able to compute nav at every date
1225
+ last_price := instrument.get_latest_price(previous_val_date)
1226
+ )
1227
+ ):
1228
+ with suppress(IndexError): # we silent any indexerror introduced by no returns for the past days
1229
+ analytic_portfolio, _ = portfolio.get_analytic_portfolio(previous_val_date)
1230
+ return analytic_portfolio.get_estimate_net_value(float(last_price.net_value))
1227
1231
 
1228
1232
 
1229
1233
  @receiver(post_save, sender="wbportfolio.Product")
@@ -46,7 +46,7 @@ class TradeProposalModelSerializer(wb_serializers.ModelSerializer):
46
46
  obj.reset_trades(target_portfolio=target_portfolio_dto)
47
47
  except ValidationError as e:
48
48
  if request := self.context.get("request"):
49
- warning(request, str(e))
49
+ warning(request, str(e), extra_tags="auto_close=0")
50
50
  return obj
51
51
 
52
52
  @wb_serializers.register_only_instance_resource()
@@ -266,7 +266,7 @@ class TestPortfolioModel(PortfolioTestMixin):
266
266
  for pos in AssetPosition.objects.all():
267
267
  assert float(pos.weighting) == pytest.approx(float(pos.total_value_fx_portfolio / total_value), rel=1e-2)
268
268
 
269
- mock_estimate_net_asset_values.assert_called_once_with(portfolio, weekday)
269
+ mock_estimate_net_asset_values.assert_called_once_with(portfolio, (weekday + BDay(1)).date())
270
270
  mock_compute_metrics.assert_called_once_with(
271
271
  weekday, basket_id=portfolio.id, basket_content_type_id=ContentType.objects.get_for_model(Portfolio).id
272
272
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbportfolio
3
- Version: 1.46.10
3
+ Version: 1.46.12
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
5
  License-File: LICENSE
6
6
  Requires-Dist: cryptography==3.4.*
@@ -246,7 +246,7 @@ wbportfolio/models/adjustments.py,sha256=osXWkJZOiansPWYPyHtl7Z121zDWi7u1YMtrBQt
246
246
  wbportfolio/models/asset.py,sha256=TEOsSlbog6Yw0PZiMxjnCccp6ApXAAJNd3BIx_wU7D8,37749
247
247
  wbportfolio/models/custodians.py,sha256=owTiS2Vm5CRKzh9M_P9GOVg-s-ndQ9UvRmw3yZP7cw0,3815
248
248
  wbportfolio/models/indexes.py,sha256=iLYF2gzNzX4GLj_Nh3fybUcAQ1TslnT0wgQ6mN164QI,728
249
- wbportfolio/models/portfolio.py,sha256=d4cWfv_mJpqvdYLYW-DFoT5wDHjCGf7UO_0QsM5NoME,57187
249
+ wbportfolio/models/portfolio.py,sha256=eGWhPlkIMYwK10__3jU1Gy1JwpwkJWzCyv7ov17mRRI,57509
250
250
  wbportfolio/models/portfolio_cash_flow.py,sha256=2blPiXSw7dbhUVd-7LcxDBb4v0SheNOdvRK3MFYiChA,7273
251
251
  wbportfolio/models/portfolio_cash_targets.py,sha256=WmgG-etPisZsh2yaFQpz7EkpvAudKBEzqPsO715w52U,1498
252
252
  wbportfolio/models/portfolio_relationship.py,sha256=mMb18UMRWg9kx_9uIPkMktwORuXXLjKdgRPQQvB6fVE,5486
@@ -339,7 +339,7 @@ wbportfolio/serializers/transactions/claim.py,sha256=kC4E2RZRrpd9i8tGfoiV-gpWDk3
339
339
  wbportfolio/serializers/transactions/dividends.py,sha256=EULwKDumHBv4r2HsdEGZMZGFaye4dRUNNyXg6-wZXzc,520
340
340
  wbportfolio/serializers/transactions/expiry.py,sha256=K3XOSbCyef-xRzOjCr4Qg_YFJ_JuuiJ9u6tDS86l0hg,477
341
341
  wbportfolio/serializers/transactions/fees.py,sha256=uPmSWuCeoV2bwVS6RmEz3a0VRBWJHIQr0WhklYc1UAI,1068
342
- wbportfolio/serializers/transactions/trade_proposals.py,sha256=2-GLD70swYlLVEIiWWTNcgN83EbPtLyFSO9wKBwjUm4,3644
342
+ wbportfolio/serializers/transactions/trade_proposals.py,sha256=n8TpI_JwVSIFhf7mhniWIehCQ7Xc3WgpjUujQbeiM0Y,3671
343
343
  wbportfolio/serializers/transactions/trades.py,sha256=pONV5NSqrXUnoTEoAxovnnQqu37cZGuB33TYvIOK3rE,10009
344
344
  wbportfolio/serializers/transactions/transactions.py,sha256=O137zeCndK-nxIWSRLEj7bXbBZDGa4d6qK6pJIIYK3g,4170
345
345
  wbportfolio/static/wbportfolio/css/macro_review.css,sha256=FAVVO8nModxwPXcTKpcfzVxBGPZGJVK1Xn-0dkSfGyc,233
@@ -371,7 +371,7 @@ wbportfolio/tests/models/test_merge.py,sha256=sdsjiZsmR6vsUKwTa5kkvL6QTeAZqtd_EP
371
371
  wbportfolio/tests/models/test_portfolio_cash_flow.py,sha256=X8dsXexsb1b0lBiuGzu40ps_Az_1UmmKT0eo1vbXH94,5792
372
372
  wbportfolio/tests/models/test_portfolio_cash_targets.py,sha256=q8QWAwt-kKRkLC0E05GyRhF_TTQXIi8bdHjXVU0fCV0,965
373
373
  wbportfolio/tests/models/test_portfolio_swing_pricings.py,sha256=kr2AOcQkyg2pX3ULjU-o9ye-NVpjMrrfoe-DVbYCbjs,1656
374
- wbportfolio/tests/models/test_portfolios.py,sha256=_LtxyTIZqQUB_sJ4DpdE1BNkoSssGeYPgjGaOYciW2E,52059
374
+ wbportfolio/tests/models/test_portfolios.py,sha256=Yd3aTeg8-bKCIJHL4jy14yWVNMEwyb3lzsFyu-Br_mM,52078
375
375
  wbportfolio/tests/models/test_product_groups.py,sha256=AcdxhurV-n_bBuUsfD1GqVtwLFcs7VI2CRrwzsIUWbU,3337
376
376
  wbportfolio/tests/models/test_products.py,sha256=5YYmQreFnaKLbWmrSib103wgLalqn8u01Fnh3A0XMz8,8217
377
377
  wbportfolio/tests/models/test_roles.py,sha256=4Cn7WyrA2ztJNeWLk5cy9kYo5XLWMbFSvo1O-9JYxeA,3323
@@ -517,7 +517,7 @@ wbportfolio/viewsets/transactions/rebalancing.py,sha256=6rIrdK0rtKL1afJ-tYfAGdQV
517
517
  wbportfolio/viewsets/transactions/trade_proposals.py,sha256=gXdJJ00D6UavZfBczvZQb5cYPQlU6-xOg_-TnMBzEO0,4742
518
518
  wbportfolio/viewsets/transactions/trades.py,sha256=mo5b1wFm0twvGVp-CYnzpGLYMqPcHN8GjH4G_WwFFwc,16237
519
519
  wbportfolio/viewsets/transactions/transactions.py,sha256=ixDp-nsNA8t_A06rBCT19hOMJHy0iRmdz1XKdV1OwAs,4450
520
- wbportfolio-1.46.10.dist-info/METADATA,sha256=ROqtFk4aUYi22kAtL59XSN67K2FQ_81K07XqnNfugRE,735
521
- wbportfolio-1.46.10.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
522
- wbportfolio-1.46.10.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
523
- wbportfolio-1.46.10.dist-info/RECORD,,
520
+ wbportfolio-1.46.12.dist-info/METADATA,sha256=7Jdv2fopJVYlVfZ7aigzy_f_wdEQD4BjpcsmKdL3CZE,735
521
+ wbportfolio-1.46.12.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
522
+ wbportfolio-1.46.12.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
523
+ wbportfolio-1.46.12.dist-info/RECORD,,