wbfdm 1.52.5__py2.py3-none-any.whl → 1.53.0__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.
- wbfdm/admin/exchanges.py +1 -1
- wbfdm/admin/instruments.py +3 -2
- wbfdm/import_export/handlers/instrument.py +10 -3
- wbfdm/migrations/0031_exchange_apply_round_lot_size_and_more.py +23 -0
- wbfdm/models/exchanges/exchanges.py +5 -1
- wbfdm/models/instruments/instruments.py +5 -0
- wbfdm/serializers/exchanges.py +1 -0
- wbfdm/viewsets/configs/display/exchanges.py +1 -1
- {wbfdm-1.52.5.dist-info → wbfdm-1.53.0.dist-info}/METADATA +1 -1
- {wbfdm-1.52.5.dist-info → wbfdm-1.53.0.dist-info}/RECORD +11 -10
- {wbfdm-1.52.5.dist-info → wbfdm-1.53.0.dist-info}/WHEEL +0 -0
wbfdm/admin/exchanges.py
CHANGED
|
@@ -43,7 +43,7 @@ class ExchangeModelAdmin(admin.ModelAdmin):
|
|
|
43
43
|
("operating_mic_code", "operating_mic_name"),
|
|
44
44
|
("bbg_exchange_codes", "bbg_composite_primary", "bbg_composite"),
|
|
45
45
|
("refinitiv_identifier_code", "refinitiv_mnemonic"),
|
|
46
|
-
("country", "website"),
|
|
46
|
+
("country", "website", "apply_round_lot_size"),
|
|
47
47
|
("comments",),
|
|
48
48
|
)
|
|
49
49
|
},
|
wbfdm/admin/instruments.py
CHANGED
|
@@ -50,8 +50,8 @@ class InstrumentModelAdmin(admin.ModelAdmin):
|
|
|
50
50
|
{
|
|
51
51
|
"fields": (
|
|
52
52
|
("name", "name_repr", "computed_str"),
|
|
53
|
-
("parent", "instrument_type"),
|
|
54
|
-
("is_cash", "is_security", "is_managed", "
|
|
53
|
+
("parent", "instrument_type", "is_primary"),
|
|
54
|
+
("is_cash", "is_security", "is_managed", "is_cash_equivalent", "is_investable_universe"),
|
|
55
55
|
("inception_date", "delisted_date"),
|
|
56
56
|
("primary_url", "additional_urls"),
|
|
57
57
|
(
|
|
@@ -69,6 +69,7 @@ class InstrumentModelAdmin(admin.ModelAdmin):
|
|
|
69
69
|
("currency", "country", "headquarter_city", "headquarter_address"),
|
|
70
70
|
(
|
|
71
71
|
"exchange",
|
|
72
|
+
"round_lot_size",
|
|
72
73
|
"import_source",
|
|
73
74
|
"base_color",
|
|
74
75
|
),
|
|
@@ -55,8 +55,10 @@ class InstrumentLookup:
|
|
|
55
55
|
instrument = None
|
|
56
56
|
|
|
57
57
|
# We need to lookup ticker because some provider gives us ticker with or without space in it
|
|
58
|
+
exchange_lookup = {}
|
|
58
59
|
if only_investable_universe:
|
|
59
60
|
instruments = self.model.objects.filter(is_investable_universe=True)
|
|
61
|
+
exchange_lookup = {"exchange": exchange} if exchange else {"is_primary": True}
|
|
60
62
|
else:
|
|
61
63
|
instruments = self.model.objects.filter(is_security=True)
|
|
62
64
|
|
|
@@ -76,8 +78,14 @@ class InstrumentLookup:
|
|
|
76
78
|
identifier_key != "refinitiv_identifier_code"
|
|
77
79
|
): # RIC cannot be uppercased because its symbology implies meaning for lowercase characters
|
|
78
80
|
identifier = identifier.upper()
|
|
79
|
-
instrument
|
|
80
|
-
|
|
81
|
+
# we try to lookup the instrument with the unique identifier
|
|
82
|
+
try:
|
|
83
|
+
instrument = instruments.get(**{identifier_key: identifier})
|
|
84
|
+
break
|
|
85
|
+
# if this return a multiple object exception, we assume there is at least one with the exchange provided or primary
|
|
86
|
+
except MultipleObjectsReturned:
|
|
87
|
+
instrument = instruments.get(**{identifier_key: identifier}, **exchange_lookup)
|
|
88
|
+
break
|
|
81
89
|
if not instrument and not exact_lookup:
|
|
82
90
|
if instrument_type:
|
|
83
91
|
if isinstance(instrument_type, str): # in case we receive a key as instrument type
|
|
@@ -109,7 +117,6 @@ class InstrumentLookup:
|
|
|
109
117
|
instruments_tmp = instruments.filter(exchange=exchange)
|
|
110
118
|
if instruments_tmp.exists():
|
|
111
119
|
instruments = instruments_tmp
|
|
112
|
-
|
|
113
120
|
# last chance
|
|
114
121
|
if name and instruments.count() > 1:
|
|
115
122
|
instruments = instruments.annotate(similarity_score=TrigramSimilarity("name", name))
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated by Django 5.0.14 on 2025-07-02 07:50
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('wbfdm', '0030_alter_relatedinstrumentthroughmodel_related_type'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name='exchange',
|
|
15
|
+
name='apply_round_lot_size',
|
|
16
|
+
field=models.BooleanField(default=True, help_text='If False, the quotes linked to this instrument will ignore their round lot size (will be considered 1).', verbose_name='Apply Round Lot Size'),
|
|
17
|
+
),
|
|
18
|
+
migrations.AddField(
|
|
19
|
+
model_name='instrument',
|
|
20
|
+
name='round_lot_size',
|
|
21
|
+
field=models.IntegerField(default=1, help_text='A round lot (or board lot) is the normal unit of trading of a security.', verbose_name='Round Lot Size'),
|
|
22
|
+
),
|
|
23
|
+
]
|
|
@@ -152,7 +152,11 @@ class Exchange(WBModel):
|
|
|
152
152
|
verbose_name="Comments",
|
|
153
153
|
help_text="Any comments for this exchange",
|
|
154
154
|
)
|
|
155
|
-
|
|
155
|
+
apply_round_lot_size = models.BooleanField(
|
|
156
|
+
default=True,
|
|
157
|
+
verbose_name="Apply Round Lot Size",
|
|
158
|
+
help_text="If False, the quotes linked to this instrument will ignore their round lot size (will be considered 1).",
|
|
159
|
+
)
|
|
156
160
|
last_updated = models.DateTimeField(auto_now=True)
|
|
157
161
|
|
|
158
162
|
objects = ExchangeManager()
|
|
@@ -312,6 +312,11 @@ class Instrument(ComplexToStringMixin, TagModelMixin, ImportMixin, InstrumentPMS
|
|
|
312
312
|
exchange = models.ForeignKey(
|
|
313
313
|
to="wbfdm.Exchange", null=True, blank=True, on_delete=models.PROTECT, related_name="instruments"
|
|
314
314
|
)
|
|
315
|
+
round_lot_size = models.IntegerField(
|
|
316
|
+
default=1,
|
|
317
|
+
verbose_name="Round Lot Size",
|
|
318
|
+
help_text="A round lot (or board lot) is the normal unit of trading of a security.",
|
|
319
|
+
)
|
|
315
320
|
|
|
316
321
|
source_id = models.CharField(max_length=64, null=True, blank=True)
|
|
317
322
|
source = models.CharField(max_length=64, null=True, blank=True)
|
wbfdm/serializers/exchanges.py
CHANGED
|
@@ -35,7 +35,7 @@ class ExchangeDisplayConfig(DisplayViewConfig):
|
|
|
35
35
|
[
|
|
36
36
|
["name", "mic_code", "operating_mic_code", "refinitiv_identifier_code"],
|
|
37
37
|
[".", "bbg_exchange_codes", "bbg_composite_primary", "bbg_composite"],
|
|
38
|
-
[
|
|
38
|
+
["country", "city", "website", "apply_round_lot_size"],
|
|
39
39
|
[repeat_field(2, "opening_time"), repeat_field(2, "closing_time")],
|
|
40
40
|
[repeat_field(4, "comments")],
|
|
41
41
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wbfdm
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.53.0
|
|
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.*
|
|
@@ -11,11 +11,11 @@ wbfdm/utils.py,sha256=4cWrCpqXxHIjtSlt4DDPFvmtaqXw_H0nqhM6sGuXx0o,1938
|
|
|
11
11
|
wbfdm/admin/__init__.py,sha256=Z1VtH_gjD71K79KcD-2Q2Lu_p_7j0akMZj7gNxdz1CQ,1398
|
|
12
12
|
wbfdm/admin/classifications.py,sha256=g3z7v891I2km4T1DnY9HOlJhkI37UxevzwDsB4ufzqc,1141
|
|
13
13
|
wbfdm/admin/esg.py,sha256=955cnYDPxYNTkhS5uiFTrf4EaxtpWrKbB1hBmcNMcvI,482
|
|
14
|
-
wbfdm/admin/exchanges.py,sha256=
|
|
14
|
+
wbfdm/admin/exchanges.py,sha256=ZrAfs8nuFqhLlg0pZMGKhKbVM_Nfv_AFen1EteZeyUU,1442
|
|
15
15
|
wbfdm/admin/instrument_lists.py,sha256=GhdMhvclyXdpvlTaHxzsGaUjO9X2CQGk_N3pgJd2NCo,719
|
|
16
16
|
wbfdm/admin/instrument_prices.py,sha256=dCiCALJAVOfIlM6KitytLJzq_9L-PYch-pu1fj7oftE,1894
|
|
17
17
|
wbfdm/admin/instrument_requests.py,sha256=uOi6g2MwDVodwlJH5yGrLXxRMQ235007CvHFTMH4Flg,846
|
|
18
|
-
wbfdm/admin/instruments.py,sha256=
|
|
18
|
+
wbfdm/admin/instruments.py,sha256=eXMRPGeVkjvn_5UdwalTCIKFVbD4p5c8UDXwUQm5fpU,3951
|
|
19
19
|
wbfdm/admin/instruments_relationships.py,sha256=i-F2y_w28R8mh4-Aex9mIh7K6qbjFNfg0VqwjQ-Mk9A,815
|
|
20
20
|
wbfdm/admin/options.py,sha256=fWj3sFddVlpNshUWV6LDatZoyg6i5AqPFpuLJcs3lKA,2838
|
|
21
21
|
wbfdm/analysis/__init__.py,sha256=ouAO2P5Y8i80tl0z3kUf2oyeO2-LsDwZUQ3SQ9evI5U,68
|
|
@@ -163,7 +163,7 @@ wbfdm/import_export/backends/refinitiv/mixin.py,sha256=DlNHOWOO71PgY0umaZd0Nbbjs
|
|
|
163
163
|
wbfdm/import_export/backends/refinitiv/utils/__init__.py,sha256=Rz38xsLAHEyEwIuJksejYExEznlPJb9tRzwJ7JG9L1s,35
|
|
164
164
|
wbfdm/import_export/backends/refinitiv/utils/controller.py,sha256=yG8V4C2TGhJdKwTeuMfaG1lzJ3MjNaV632KTe0nuym8,7348
|
|
165
165
|
wbfdm/import_export/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
166
|
-
wbfdm/import_export/handlers/instrument.py,sha256=
|
|
166
|
+
wbfdm/import_export/handlers/instrument.py,sha256=ZtXwqoCh--_Bgn7mB_A7U2w1S6HfMr9MqFCc4VMw7ls,12071
|
|
167
167
|
wbfdm/import_export/handlers/instrument_list.py,sha256=mZRfpJFi6BhhrjH2qaFEPqqCK2ybg-DQm43Uck7G9_w,4864
|
|
168
168
|
wbfdm/import_export/handlers/instrument_price.py,sha256=RbNTo78zZuttzlVFKxJrHcW7DRfcsta7QDEI8OiiDrA,3498
|
|
169
169
|
wbfdm/import_export/handlers/option.py,sha256=DtqqdOMEA-u3jWVjmxRPKJ8miENj_t1k2DzAZEoOtXU,2384
|
|
@@ -222,6 +222,7 @@ wbfdm/migrations/0027_remove_instrument_unique_ric_and_more.py,sha256=xO8pftdONz
|
|
|
222
222
|
wbfdm/migrations/0028_instrumentprice_annualized_daily_volatility.py,sha256=pO5MKIH9sIduCj44n_13yy_OgwutTuCIiNzXwKrvqQ4,477
|
|
223
223
|
wbfdm/migrations/0029_alter_instrumentprice_volume.py,sha256=0UFUwEaBcqiWjKw6un1gf8sluKCRRh9snDM4z4THDw8,510
|
|
224
224
|
wbfdm/migrations/0030_alter_relatedinstrumentthroughmodel_related_type.py,sha256=10-89NB7-T7t3xFPpd4fYQkKejNR36UewIhe5_20QCo,565
|
|
225
|
+
wbfdm/migrations/0031_exchange_apply_round_lot_size_and_more.py,sha256=MqcHxgJIt67BEuEYK8vnJHhx_cGFw9Ca9Az2EvsDy1o,863
|
|
225
226
|
wbfdm/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
226
227
|
wbfdm/models/__init__.py,sha256=PWsLtlKJFDYycCohPbjsRLeWi1xaxEkZbaoUKo0yOBU,96
|
|
227
228
|
wbfdm/models/fields.py,sha256=eQ_6EnDBMy0U7WzE2DsdXIXOJH5dFiIN2VbO2Svw4R0,3942
|
|
@@ -230,14 +231,14 @@ wbfdm/models/indicators.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
230
231
|
wbfdm/models/esg/__init__.py,sha256=FEYbRFSdfoWRsfKVxM-h6TLobj5P8bYQlZPG1iD9RMQ,29
|
|
231
232
|
wbfdm/models/esg/controversies.py,sha256=OnswX0ZXdO37h-AWpr5aTJXhyT3MTwAOwt5ZV25t5BY,2950
|
|
232
233
|
wbfdm/models/exchanges/__init__.py,sha256=sScz2KX9fxhhmi4CEUssC8HCL4ENvrIqSSwk0_J7v-g,32
|
|
233
|
-
wbfdm/models/exchanges/exchanges.py,sha256=
|
|
234
|
+
wbfdm/models/exchanges/exchanges.py,sha256=RmM5shyyuxEGN2Y3JmeSWyU-SbpVARrvVFW72HtHwfg,7502
|
|
234
235
|
wbfdm/models/instruments/__init__.py,sha256=OvEkECJaCubBQC7B9yUrx15V982labvegeGXyEASVno,636
|
|
235
236
|
wbfdm/models/instruments/classifications.py,sha256=EeZ_P8f1F1NfjUmLf9fDMF0iPM73qxQoArUfvjuCwHg,10906
|
|
236
237
|
wbfdm/models/instruments/instrument_lists.py,sha256=GxfFyfYxEcJS36LAarHja49TOM8ffhIivpZX2-tPtZg,4234
|
|
237
238
|
wbfdm/models/instruments/instrument_prices.py,sha256=4xDZ2ulwQ1grVuznchz3m3920LTmHkxWfiSLy-c2u0g,22306
|
|
238
239
|
wbfdm/models/instruments/instrument_relationships.py,sha256=zpCZCnt5CqIg5bd6le_6TyirsSwGV2NaqTVKw3bd5vM,10660
|
|
239
240
|
wbfdm/models/instruments/instrument_requests.py,sha256=XbpofRS8WHadHlTFjvXJyd0o7K9r2pzJtnpjVQZOLdI,7832
|
|
240
|
-
wbfdm/models/instruments/instruments.py,sha256=
|
|
241
|
+
wbfdm/models/instruments/instruments.py,sha256=3I7s5hHcIQcBKjVjF4go9SSTw3Kr1RX9vImYYctjszQ,44035
|
|
241
242
|
wbfdm/models/instruments/options.py,sha256=hFprq7B5t4ctz8nVqzFsBEzftq_KDUSsSXl1zJyh7tE,7094
|
|
242
243
|
wbfdm/models/instruments/private_equities.py,sha256=uzwZi8IkmCKAHVTxnuFya9tehx7kh57sTlTEi1ieDaM,2198
|
|
243
244
|
wbfdm/models/instruments/querysets.py,sha256=zBY3lX_l0_gqIGjX4vkfn7DQ5QyF_okmIYZ6SV1Y6I4,7729
|
|
@@ -250,7 +251,7 @@ wbfdm/models/instruments/mixin/financials_serializer_fields.py,sha256=-OkpcUt1rZ
|
|
|
250
251
|
wbfdm/models/instruments/mixin/instruments.py,sha256=W9v29cjST-5MAMMuXVnlH4ItdRTdoA_vMCkLUhQgW2s,9888
|
|
251
252
|
wbfdm/serializers/__init__.py,sha256=AXb03RKHo6B0ts_IQOvx89n9wKG8pxiumYv9cr4EhvA,197
|
|
252
253
|
wbfdm/serializers/esg.py,sha256=epoX8cjkPuVv45aW-Jf85-rSO_ZrSnXcTxMcadKdC-I,1086
|
|
253
|
-
wbfdm/serializers/exchanges.py,sha256=
|
|
254
|
+
wbfdm/serializers/exchanges.py,sha256=wYvy0XBS9tRFHqin23gABQ_pj3Rmsx1B075SZ5GqwDo,1211
|
|
254
255
|
wbfdm/serializers/officers.py,sha256=yrBJqnwxS5Eq0aGcRKe0FbEYEvDFpZlb8gzgfU9pRyk,473
|
|
255
256
|
wbfdm/serializers/instruments/__init__.py,sha256=bLgyuwpGN5Vq2PO5ueErXWHDInPy_191kieaV0_MAI4,1699
|
|
256
257
|
wbfdm/serializers/instruments/classifications.py,sha256=DsrKkF0lFBTtNrVs0vhjkjjlK8mDSbGfvQODarYPbDA,5669
|
|
@@ -298,7 +299,7 @@ wbfdm/viewsets/configs/buttons/instruments.py,sha256=EhNxOu4WNMLwGGnThUjgu8uQa-o
|
|
|
298
299
|
wbfdm/viewsets/configs/display/__init__.py,sha256=9ogNTPHvsuxPf53snrEGFhEPFqcO1sth5PkPBrqAfng,1024
|
|
299
300
|
wbfdm/viewsets/configs/display/classifications.py,sha256=xolaLg6WDG7Dtwd3gQXWElmyH10GgaT03tL3a3PhKfE,5206
|
|
300
301
|
wbfdm/viewsets/configs/display/esg.py,sha256=NcBZDxkIsGd-APYt4yJRNJjfmbmkC0O-H1q7fg_bBcU,3640
|
|
301
|
-
wbfdm/viewsets/configs/display/exchanges.py,sha256=
|
|
302
|
+
wbfdm/viewsets/configs/display/exchanges.py,sha256=ZzUxIjItwsp6K66XlGbPcqLtij8ebqmjwAFR-rsF-0I,1953
|
|
302
303
|
wbfdm/viewsets/configs/display/financial_summary.py,sha256=K8CPV9uy0wsK-yLQIDTqMAXTb-W1-pUp6OCMwii7jYo,4738
|
|
303
304
|
wbfdm/viewsets/configs/display/instrument_lists.py,sha256=UF_M41sBDDxGLDlKxLdAHqo8S1iHJfvIwZbLuoeaGuA,5239
|
|
304
305
|
wbfdm/viewsets/configs/display/instrument_prices.py,sha256=CdZg-Fwd__DP0Ym8TBsupbVZzhoMbNfOJQKCmgKvwCc,4908
|
|
@@ -358,6 +359,6 @@ wbfdm/viewsets/statements/__init__.py,sha256=odxtFYUDICPmz8WCE3nx93EvKZLSPBEI4d7
|
|
|
358
359
|
wbfdm/viewsets/statements/statements.py,sha256=gA6RCI8-B__JwjEb6OZxpn8Y-9aF-YQ3HIQ7e1vfJMw,4304
|
|
359
360
|
wbfdm/viewsets/technical_analysis/__init__.py,sha256=qtCIBg0uSiZeJq_1tEQFilnorMBkMe6uCMfqar6-cLE,77
|
|
360
361
|
wbfdm/viewsets/technical_analysis/monthly_performances.py,sha256=O1j8CGfOranL74LqVvcf7jERaDIboEJZiBf_AbbVDQ8,3974
|
|
361
|
-
wbfdm-1.
|
|
362
|
-
wbfdm-1.
|
|
363
|
-
wbfdm-1.
|
|
362
|
+
wbfdm-1.53.0.dist-info/METADATA,sha256=bAcTLsii-aqrW8Ld2i86YX_H6CpaywPEX2vVt9K720Y,768
|
|
363
|
+
wbfdm-1.53.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
|
|
364
|
+
wbfdm-1.53.0.dist-info/RECORD,,
|
|
File without changes
|