wbfdm 1.46.4__py2.py3-none-any.whl → 1.46.5__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 wbfdm might be problematic. Click here for more details.

@@ -114,7 +114,19 @@ def convert_data(data, parent_source: str | None = None) -> dict:
114
114
  def get_instrument_from_data(data, parent_source: str | None = None) -> Instrument | None:
115
115
  if len(data.keys()) == 0:
116
116
  return None
117
- instrument = Instrument(**convert_data(data, parent_source))
117
+
118
+ defaults = convert_data(data, parent_source)
119
+ try:
120
+ instrument = Instrument.objects.get(source=defaults["source"], source_id=defaults["source_id"])
121
+ instrument.dl_parameters.update(
122
+ defaults.pop("dl_parameters")
123
+ ) # we need to update the existing dl parameters to not override its existing value
124
+ for k, v in defaults.items():
125
+ setattr(instrument, k, v)
126
+
127
+ except Instrument.DoesNotExist:
128
+ instrument = Instrument(**defaults)
129
+
118
130
  instrument.pre_save()
119
131
  instrument.computed_str = instrument.compute_str()
120
132
  if (
@@ -198,10 +210,7 @@ def update_or_create_item(
198
210
  source_id=external_id,
199
211
  defaults=defaults,
200
212
  )
201
-
202
- for key, value in dl_parameters.items():
203
- instrument.dl_parameters[key] = value
204
-
213
+ instrument.dl_parameters.update(dl_parameters)
205
214
  instrument.save()
206
215
 
207
216
  return instrument
@@ -1,5 +1,6 @@
1
1
  from wbcore import filters as wb_filters
2
2
 
3
+ from wbfdm.filters.utils import _get_default_classification_group_id
3
4
  from wbfdm.models import (
4
5
  Classification,
5
6
  ClassificationGroup,
@@ -88,6 +89,7 @@ class InstrumentClassificationThroughModelViewFilterSet(wb_filters.FilterSet):
88
89
  endpoint=ClassificationGroup.get_representation_endpoint(),
89
90
  value_key=ClassificationGroup.get_representation_value_key(),
90
91
  label_key=ClassificationGroup.get_representation_label_key(),
92
+ default=_get_default_classification_group_id,
91
93
  )
92
94
 
93
95
  class Meta:
@@ -5,7 +5,7 @@ from psycopg.types.range import DateRange
5
5
  from wbcore import filters as wb_filters
6
6
  from wbcore.contrib.tags.filters import TagFilterMixin
7
7
 
8
- from wbfdm.filters.utils import get_earliest_date, get_latest_date
8
+ from wbfdm.filters.utils import _get_default_classification_group_id, get_earliest_date, get_latest_date
9
9
  from wbfdm.models.instruments import (
10
10
  ClassificationGroup,
11
11
  Instrument,
@@ -13,7 +13,6 @@ from wbfdm.models.instruments import (
13
13
  InstrumentFavoriteGroup,
14
14
  )
15
15
  from wbfdm.models.instruments.classifications import Classification
16
- from wbfdm.preferences import get_default_classification_group
17
16
 
18
17
 
19
18
  def get_default_favorite_group(field, request, view):
@@ -156,12 +155,6 @@ class InstrumentFilterSet(TagFilterMixin, InstrumentFavoriteGroupFilterSet):
156
155
  hidden_fields = ["id__in", "is_managed", "is_security", "level"]
157
156
 
158
157
 
159
- def _get_default_classification_group_id(*args, **kwargs):
160
- if group := get_default_classification_group():
161
- return group.id
162
- return None
163
-
164
-
165
158
  class BaseClassifiedInstrumentFilterSet(TagFilterMixin, wb_filters.FilterSet):
166
159
  classification_group = wb_filters.ModelChoiceFilter(
167
160
  label="Classification Group",
@@ -169,7 +162,7 @@ class BaseClassifiedInstrumentFilterSet(TagFilterMixin, wb_filters.FilterSet):
169
162
  endpoint=ClassificationGroup.get_representation_endpoint(),
170
163
  value_key=ClassificationGroup.get_representation_value_key(),
171
164
  label_key=ClassificationGroup.get_representation_label_key(),
172
- default=_get_default_classification_group_id(),
165
+ default=_get_default_classification_group_id,
173
166
  method="fake_filter",
174
167
  required=True,
175
168
  )
wbfdm/filters/utils.py CHANGED
@@ -4,7 +4,16 @@ from pandas.tseries.offsets import BDay, BMonthBegin, BMonthEnd
4
4
  from psycopg.types.range import DateRange
5
5
  from wbcore.utils.date import current_quarter_date_start
6
6
 
7
- from wbfdm.models import Instrument
7
+ from wbfdm.models import Classification, Instrument
8
+ from wbfdm.preferences import get_default_classification_group
9
+
10
+
11
+ def _get_default_classification_group_id(field, request, view, **kwargs):
12
+ if classification_id := view.kwargs.get("classification_id", None):
13
+ return Classification.objects.get(id=classification_id).group.id
14
+ if group := get_default_classification_group():
15
+ return group.id
16
+ return None
8
17
 
9
18
 
10
19
  def get_earliest_date(field, request, view):
wbfdm/tasks.py CHANGED
@@ -55,8 +55,8 @@ def update_of_investable_universe_data(
55
55
  for instrument in tqdm(instruments, total=instruments.count()):
56
56
  try:
57
57
  prices.extend(list(instrument.get_price_objects(start=start, end=end, clear=clear)))
58
- except ConnectionError:
59
- print(f"Connection error while processing instrument {instrument}") # noqa
58
+ except Exception as e:
59
+ print(f"Connection error while processing instrument {instrument}: {str(e)}") # noqa
60
60
  Instrument.bulk_save_instrument_prices(prices)
61
61
  investable_universe_updated.send(sender=Instrument, end_date=end)
62
62
  if with_background_tasks:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbfdm
3
- Version: 1.46.4
3
+ Version: 1.46.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.*
@@ -6,7 +6,7 @@ wbfdm/jinja2.py,sha256=pkIC1U-0rf6vn0DDEUzZ8dPYiTGEPY8LBTRMi9wYiuc,199
6
6
  wbfdm/menu.py,sha256=c_uP0wIxboHvY0BfHbYPI9GI4F41UxSgREqbzcaxzHM,399
7
7
  wbfdm/preferences.py,sha256=8ghDcaapOMso1kjtNfKbSFykPUTxzqI5R77gM3BgiMs,927
8
8
  wbfdm/signals.py,sha256=PhAsFpQZF1YVe5UpedaRelUD_TVjemqRYm1HzV-bhmY,597
9
- wbfdm/tasks.py,sha256=Dmtk_DpXXniuXipob6G6d39PzFjML0s23mEqNH4ScCw,4202
9
+ wbfdm/tasks.py,sha256=pYoBj2VQp5y2rZRDmWtd044UjVvp9Px4lwQwM4Nson4,4211
10
10
  wbfdm/urls.py,sha256=pDp9I0kktxicad8sXXEUT7402jZPMJNcE5R1doTlcMw,8887
11
11
  wbfdm/utils.py,sha256=4cWrCpqXxHIjtSlt4DDPFvmtaqXw_H0nqhM6sGuXx0o,1938
12
12
  wbfdm/admin/__init__.py,sha256=Z1VtH_gjD71K79KcD-2Q2Lu_p_7j0akMZj7gNxdz1CQ,1398
@@ -114,7 +114,7 @@ wbfdm/contrib/qa/jinja2/qa/sql/ibes/estimates.sql,sha256=OWgeogSFj7-OdXvJTvNsThN
114
114
  wbfdm/contrib/qa/jinja2/qa/sql/ibes/financials.sql,sha256=0jXNMdX8ixVRJ8YyvtoJRQ510pHFYEioMy7NTp5ecck,2582
115
115
  wbfdm/contrib/qa/sync/exchanges.py,sha256=831-0bqxq4LaHEkyvMGfEBkNFm5LyLCSpjZbPdTEF0A,3079
116
116
  wbfdm/contrib/qa/sync/instruments.py,sha256=8aTQVJ_cw1phe4FWikn79pjCfUijaTcwkdhQCtSXKH0,3156
117
- wbfdm/contrib/qa/sync/utils.py,sha256=TYZY3QB75POUmme1U71yo6WPzf4AXs4pWpFdI1Hq2GY,8936
117
+ wbfdm/contrib/qa/sync/utils.py,sha256=1diZFEMQwjdGhfL6jv2xX7N_-TyO0Fwtnqw_3K5ykYI,9326
118
118
  wbfdm/dataloaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
119
  wbfdm/dataloaders/cache.py,sha256=K9BeVxT7p-BMvjurINt18bfrUDccp840uIjfDBLJRNk,4841
120
120
  wbfdm/dataloaders/protocols.py,sha256=8ibd-jAdlwu-JvRL2LqJMi5mOcWyWYh1Ll_wD4nPJxE,2994
@@ -134,13 +134,13 @@ wbfdm/figures/financials/__init__.py,sha256=6PcHUFJeTEtz9BweUlLANHHOshiNgqX1Wj3K
134
134
  wbfdm/figures/financials/financial_analysis_charts.py,sha256=YJ3JW8WiuP53Ow9YGT_TGpMGQtCyGMzORb5EEn86XSo,18396
135
135
  wbfdm/figures/financials/financials_charts.py,sha256=tKqBWvkLkDB2GGsPe5g4GR6d3tgnBY2LgRYdXamzBWQ,32717
136
136
  wbfdm/filters/__init__.py,sha256=skWeFdAcemysUeGEvIJ_cIxn-SXuJsUxAroTxq0N8Qo,926
137
- wbfdm/filters/classifications.py,sha256=80Ju6KiKsina1eIgeoafkHaL8xl9MS03q2U0Fo1X0Bc,3502
137
+ wbfdm/filters/classifications.py,sha256=ylmYzP2ZYiEei5vr8BCn_8JNd-Bv7uYnyDhWLa_VrHM,3625
138
138
  wbfdm/filters/exchanges.py,sha256=84N4AQoCwgdnxTxmhMob5Yndfr5gy_DRQ_-m2ilVLVM,835
139
139
  wbfdm/filters/financials.py,sha256=mYb2nvZo3UWtN7pWQQcug0YMgQ6uEIlDR5GhwID_Um0,2539
140
140
  wbfdm/filters/financials_analysis.py,sha256=EiWMWZ9cc3Pm7ySTKRHlM2XmB2NDFBIGKdAWNwDhJ3A,4087
141
141
  wbfdm/filters/instrument_prices.py,sha256=_yDyKWwaUIVvsSCJAitILtLdhzschVpkuyi8X8QHpAs,3647
142
- wbfdm/filters/instruments.py,sha256=EKJDhkgGvwXbu8ejxJgbGn0rma64cwltZhRT1t7pZnM,7695
143
- wbfdm/filters/utils.py,sha256=p5UsDWaJiHYKxm4WCu2EPfyqK4j2_lZte1uDCbPcxQg,1478
142
+ wbfdm/filters/instruments.py,sha256=aRVzy8wtrmIXjmvDrMdpcfUYwb51c9TL-d3XbhLWqF4,7515
143
+ wbfdm/filters/utils.py,sha256=6IpNoZ_yjRUCdpVXrj3kriTceAX-VGrS5NpZA2NgSmY,1870
144
144
  wbfdm/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  wbfdm/import_export/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
146
  wbfdm/import_export/backends/cbinsights/__init__.py,sha256=PuBZjIZ4pZixX8QH7lVavhjjmlv4yV3Bp7zDW6NoZPc,45
@@ -350,6 +350,6 @@ wbfdm/viewsets/statements/__init__.py,sha256=odxtFYUDICPmz8WCE3nx93EvKZLSPBEI4d7
350
350
  wbfdm/viewsets/statements/statements.py,sha256=kmtM0uZ3f7eJJe5gVmd-iVra9dHwTB9x12p7f5qTEx8,4084
351
351
  wbfdm/viewsets/technical_analysis/__init__.py,sha256=qtCIBg0uSiZeJq_1tEQFilnorMBkMe6uCMfqar6-cLE,77
352
352
  wbfdm/viewsets/technical_analysis/monthly_performances.py,sha256=O1j8CGfOranL74LqVvcf7jERaDIboEJZiBf_AbbVDQ8,3974
353
- wbfdm-1.46.4.dist-info/METADATA,sha256=5QHL84TqQw5pxZUdkOAREiwMOlinELQGGbdMFAVNfpY,737
354
- wbfdm-1.46.4.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
355
- wbfdm-1.46.4.dist-info/RECORD,,
353
+ wbfdm-1.46.5.dist-info/METADATA,sha256=d1__-NmqB3TXTjth9FRHfME4qX7hLSkse3XwBN5Ahmw,737
354
+ wbfdm-1.46.5.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
355
+ wbfdm-1.46.5.dist-info/RECORD,,
File without changes