wbportfolio 1.50.5__py2.py3-none-any.whl → 1.50.7__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.
- wbportfolio/models/__init__.py +1 -0
- wbportfolio/models/indexes.py +0 -3
- wbportfolio/models/portfolio_relationship.py +0 -6
- wbportfolio/models/signals.py +20 -0
- wbportfolio/tests/models/test_products.py +6 -0
- {wbportfolio-1.50.5.dist-info → wbportfolio-1.50.7.dist-info}/METADATA +1 -1
- {wbportfolio-1.50.5.dist-info → wbportfolio-1.50.7.dist-info}/RECORD +9 -8
- {wbportfolio-1.50.5.dist-info → wbportfolio-1.50.7.dist-info}/WHEEL +0 -0
- {wbportfolio-1.50.5.dist-info → wbportfolio-1.50.7.dist-info}/licenses/LICENSE +0 -0
wbportfolio/models/__init__.py
CHANGED
wbportfolio/models/indexes.py
CHANGED
|
@@ -74,12 +74,6 @@ class InstrumentPortfolioThroughModel(models.Model):
|
|
|
74
74
|
return portfolio
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
@receiver(models.signals.class_prepared)
|
|
78
|
-
def add_to_instrument(sender, **kwargs):
|
|
79
|
-
Instrument.add_to_class("portfolio", property(InstrumentPortfolioThroughModel.get_portfolio))
|
|
80
|
-
Instrument.add_to_class("primary_portfolio", property(InstrumentPortfolioThroughModel.get_primary_portfolio))
|
|
81
|
-
|
|
82
|
-
|
|
83
77
|
class PortfolioInstrumentPreferredClassificationThroughModel(models.Model):
|
|
84
78
|
portfolio = models.ForeignKey(
|
|
85
79
|
"wbportfolio.Portfolio", on_delete=models.CASCADE, related_name="preferred_classification_instruments"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
from django.dispatch import receiver
|
|
3
|
+
from wbfdm.models import Instrument, InstrumentType
|
|
4
|
+
|
|
5
|
+
from wbportfolio.models import InstrumentPortfolioThroughModel, Product, ProductGroup
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def _compute_str(instrument):
|
|
9
|
+
if instrument.instrument_type == InstrumentType.PRODUCT_GROUP:
|
|
10
|
+
return ProductGroup.objects.get(id=instrument.id).compute_str()
|
|
11
|
+
elif instrument.instrument_type == InstrumentType.PRODUCT:
|
|
12
|
+
return Product.objects.get(id=instrument.id).compute_str()
|
|
13
|
+
return instrument.get_compute_str()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@receiver(models.signals.class_prepared)
|
|
17
|
+
def add_to_instrument(sender, **kwargs):
|
|
18
|
+
Instrument.add_to_class("portfolio", property(InstrumentPortfolioThroughModel.get_portfolio))
|
|
19
|
+
Instrument.add_to_class("primary_portfolio", property(InstrumentPortfolioThroughModel.get_primary_portfolio))
|
|
20
|
+
Instrument.add_to_class("compute_str", _compute_str)
|
|
@@ -117,6 +117,12 @@ class TestProductModel(PortfolioTestMixin):
|
|
|
117
117
|
def test_compute_str(self, product, user):
|
|
118
118
|
assert product.compute_str()
|
|
119
119
|
|
|
120
|
+
# test if we save the parent instrument, the computed str is the one from the product class
|
|
121
|
+
instrument = product.instrument_ptr
|
|
122
|
+
instrument.save()
|
|
123
|
+
product.refresh_from_db()
|
|
124
|
+
assert product.computed_str == product.compute_str()
|
|
125
|
+
|
|
120
126
|
def test_urlify_title(self, product):
|
|
121
127
|
assert product.name.lower() in product.urlify_title
|
|
122
128
|
|
|
@@ -243,21 +243,22 @@ wbportfolio/migrations/0074_alter_rebalancer_frequency_and_more.py,sha256=o01rBj
|
|
|
243
243
|
wbportfolio/migrations/0075_portfolio_initial_position_date_and_more.py,sha256=rXRpsraVlmueAlO2UpBZV4qMf7dtPuptrhfLblZcJDo,1099
|
|
244
244
|
wbportfolio/migrations/0076_alter_dividendtransaction_price_and_more.py,sha256=4g3ok79nw8mTAxHFAqBAdpGKetaPAjv06YSywywt4aU,6106
|
|
245
245
|
wbportfolio/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
246
|
-
wbportfolio/models/__init__.py,sha256=
|
|
246
|
+
wbportfolio/models/__init__.py,sha256=HSpa5xwh_MHQaBpNrq9E0CbdEE5Iq-pDLIsPzZ-TRTg,904
|
|
247
247
|
wbportfolio/models/adjustments.py,sha256=osXWkJZOiansPWYPyHtl7Z121zDWi7u1YMtrBQtbHVo,10272
|
|
248
248
|
wbportfolio/models/asset.py,sha256=wxV8rHogMAKzWE3qEtu9EiFmK_DKHd5cVAUSsGpUKbA,45353
|
|
249
249
|
wbportfolio/models/custodians.py,sha256=owTiS2Vm5CRKzh9M_P9GOVg-s-ndQ9UvRmw3yZP7cw0,3815
|
|
250
250
|
wbportfolio/models/exceptions.py,sha256=3ix0tWUO-O6jpz8f07XIwycw2x3JFRoWzjwil8FVA2Q,52
|
|
251
|
-
wbportfolio/models/indexes.py,sha256=
|
|
251
|
+
wbportfolio/models/indexes.py,sha256=gvW4K9U9Bj8BmVCqFYdWiXvDWhjHINRON8XhNsZUiQY,639
|
|
252
252
|
wbportfolio/models/portfolio.py,sha256=253Z9K4929UVNaoXmOdcLqWM8xutYwJHdiy0GAHheUM,55967
|
|
253
253
|
wbportfolio/models/portfolio_cash_flow.py,sha256=uElG7IJUBY8qvtrXftOoskX6EA-dKgEG1JJdvHeWV7g,7336
|
|
254
254
|
wbportfolio/models/portfolio_cash_targets.py,sha256=WmgG-etPisZsh2yaFQpz7EkpvAudKBEzqPsO715w52U,1498
|
|
255
|
-
wbportfolio/models/portfolio_relationship.py,sha256=
|
|
255
|
+
wbportfolio/models/portfolio_relationship.py,sha256=ZGECiPZiLdlk4uSamOrEfuzO0hduK6OMKJLUSnh5_kc,5190
|
|
256
256
|
wbportfolio/models/portfolio_swing_pricings.py,sha256=_LqYC1VRjnnFFmVqFPRdnbgYsVxocMVpClTk2dnooig,1778
|
|
257
257
|
wbportfolio/models/product_groups.py,sha256=qoT8qv6tRdD6zmNDxsHO6dtnWw1-TRnyS5NqOq_gwhI,7901
|
|
258
258
|
wbportfolio/models/products.py,sha256=5z9OMLVS0ps6aOJbG3JE7gKTf3PlbC4rXIPpv55dD1A,22863
|
|
259
259
|
wbportfolio/models/registers.py,sha256=qA6T33t4gxFYnabQFBMd90WGIr6wxxirDLKDFqjOfok,4667
|
|
260
260
|
wbportfolio/models/roles.py,sha256=wF5Atp0xsJxDrYjmFw9XHgEOe_4C-lm4pppeYdymOrA,7343
|
|
261
|
+
wbportfolio/models/signals.py,sha256=yDKg2ingDBFQY1oOFpDrMU2C2c0f2aIgRul5UEBqhIs,899
|
|
261
262
|
wbportfolio/models/utils.py,sha256=iBdMjRCvr6aOL0nLgfSCWUKe0h39h3IGmUbYo6l9t6w,394
|
|
262
263
|
wbportfolio/models/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
263
264
|
wbportfolio/models/graphs/portfolio.py,sha256=NwkehWvTcyTYrKO5ku3eNNaYLuBwuLdSbTEuugGuSIU,6541
|
|
@@ -376,7 +377,7 @@ wbportfolio/tests/models/test_portfolio_cash_targets.py,sha256=q8QWAwt-kKRkLC0E0
|
|
|
376
377
|
wbportfolio/tests/models/test_portfolio_swing_pricings.py,sha256=kr2AOcQkyg2pX3ULjU-o9ye-NVpjMrrfoe-DVbYCbjs,1656
|
|
377
378
|
wbportfolio/tests/models/test_portfolios.py,sha256=ECUAxE07KwmlHN1udMHVCmNDQrRcCbMfRQe8L3cHOX0,53111
|
|
378
379
|
wbportfolio/tests/models/test_product_groups.py,sha256=AcdxhurV-n_bBuUsfD1GqVtwLFcs7VI2CRrwzsIUWbU,3337
|
|
379
|
-
wbportfolio/tests/models/test_products.py,sha256=
|
|
380
|
+
wbportfolio/tests/models/test_products.py,sha256=IcBzw9hrGiWFMRwPBTMukCMWrhqnjOVA2hhb90xYOW8,9580
|
|
380
381
|
wbportfolio/tests/models/test_roles.py,sha256=4Cn7WyrA2ztJNeWLk5cy9kYo5XLWMbFSvo1O-9JYxeA,3323
|
|
381
382
|
wbportfolio/tests/models/test_splits.py,sha256=ytKcHsI_90kj1L4s8It-KEcc24rkDcElxwQ8q0QxEvk,9689
|
|
382
383
|
wbportfolio/tests/models/utils.py,sha256=ORNJq6NMo1Za22jGZXfTfKeNEnTRlfEt_8SJ6xLaQWg,325
|
|
@@ -521,7 +522,7 @@ wbportfolio/viewsets/transactions/rebalancing.py,sha256=6rIrdK0rtKL1afJ-tYfAGdQV
|
|
|
521
522
|
wbportfolio/viewsets/transactions/trade_proposals.py,sha256=iQpC_Thbj56SmM05vPRsF1JZguGBDaTUH3I-_iCHCV0,5958
|
|
522
523
|
wbportfolio/viewsets/transactions/trades.py,sha256=-yJ4j8NJTu2VWyhCq5BXGNND_925Ietoxx9k07SLVh0,21634
|
|
523
524
|
wbportfolio/viewsets/transactions/transactions.py,sha256=ixDp-nsNA8t_A06rBCT19hOMJHy0iRmdz1XKdV1OwAs,4450
|
|
524
|
-
wbportfolio-1.50.
|
|
525
|
-
wbportfolio-1.50.
|
|
526
|
-
wbportfolio-1.50.
|
|
527
|
-
wbportfolio-1.50.
|
|
525
|
+
wbportfolio-1.50.7.dist-info/METADATA,sha256=_3QdVIySIlzglfZnVOyVWrGDA7tv9HcUPA6Sy-iT4XY,702
|
|
526
|
+
wbportfolio-1.50.7.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
|
|
527
|
+
wbportfolio-1.50.7.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
|
|
528
|
+
wbportfolio-1.50.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|