modelswrkpi 8.0.4__py3-none-any.whl → 8.1.0__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 modelswrkpi might be problematic. Click here for more details.

Files changed (24) hide show
  1. models/bro_clicks/initial_routes.cpython-310-x86_64-linux-gnu.so +0 -0
  2. models/bro_clicks/load_balancer/__init__.py +6 -0
  3. models/bro_clicks/load_balancer/compile.py +16 -0
  4. models/bro_clicks/load_balancer/v1.cpython-310-x86_64-linux-gnu.so +0 -0
  5. models/bro_clicks/load_balancer/v1.py +176 -0
  6. models/bro_clicks/load_balancer/v2.cpython-310-x86_64-linux-gnu.so +0 -0
  7. models/bro_clicks/load_balancer/v2.py +128 -0
  8. models/bro_clicks/load_balancer/v3.cpython-310-x86_64-linux-gnu.so +0 -0
  9. models/bro_clicks/load_balancer/v3.py +378 -0
  10. models/bro_clicks/load_balancer/v4.cpython-310-x86_64-linux-gnu.so +0 -0
  11. models/bro_clicks/load_balancer/v4.py +151 -0
  12. models/bro_clicks/load_balancer/v5.cpython-310-x86_64-linux-gnu.so +0 -0
  13. models/bro_clicks/load_balancer/v5.py +123 -0
  14. models/bro_clicks/load_balancer/v6.cpython-310-x86_64-linux-gnu.so +0 -0
  15. models/bro_clicks/load_balancer/v6.py +192 -0
  16. models/bro_clicks/load_balancer/v7.py +8 -0
  17. models/bro_clicks/load_balancer/v8.py +8 -0
  18. models/reports/table_reports/__init__.py +1 -1
  19. models/reports/table_reports/approval_report.cpython-310-x86_64-linux-gnu.so +0 -0
  20. {modelswrkpi-8.0.4.dist-info → modelswrkpi-8.1.0.dist-info}/METADATA +1 -1
  21. {modelswrkpi-8.0.4.dist-info → modelswrkpi-8.1.0.dist-info}/RECORD +23 -8
  22. models/bro_clicks/load_balancer.cpython-310-x86_64-linux-gnu.so +0 -0
  23. {modelswrkpi-8.0.4.dist-info → modelswrkpi-8.1.0.dist-info}/WHEEL +0 -0
  24. {modelswrkpi-8.0.4.dist-info → modelswrkpi-8.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,192 @@
1
+ from models.bro_clicks.load_balancer import LoadBalancerV5, LoadBalancerV3
2
+ from models.bro_clicks.initial_routes import ForeignInitialRoutesV2
3
+
4
+ from threading import Thread
5
+ import pandas as pd
6
+ from concurrent.futures import ThreadPoolExecutor, TimeoutError
7
+ import time
8
+
9
+ class LoadBalancerV6(LoadBalancerV5):
10
+ #LoadBalancerV3._route_schema = 'foreign_initial_route_v2'
11
+ def __init__(self, *args, **kw):
12
+ LoadBalancerV5.__init__(self, *args, rewrite_route='foreign_initial_route_v2', **kw)
13
+ self._model_class = ForeignInitialRoutesV2
14
+ self._iin_schema = 'foreign_bins'
15
+ self.version=6
16
+
17
+
18
+ def set_bin_info(self, cc_first_8):
19
+ def _exec():
20
+ nonlocal cc_first_8
21
+ self.iin_info = {'cc_first_8': cc_first_8}
22
+ try:
23
+ iini = pd.read_sql(f"select * from {self._iin_schema}.iin8_data where iin='{cc_first_8}'",
24
+ self.db_p.engine).astype(str).applymap(str.lower).replace({'none': None})
25
+ if len(iini):
26
+ self.iin_info = iini
27
+ self.is_iin_data = True
28
+ self.iin_info = self.iin_info.to_dict(orient='records')[0]
29
+ if self.iin_info['bank_map'] is not None:
30
+ self.iin_info['bank'] = self.iin_info['bank_map']
31
+ if 'level' not in self.iin_info:
32
+ self.iin_info['level'] = None
33
+ else:
34
+ self.iin_info = {}
35
+ except Exception as e:
36
+ print(f'SET BIN INFO ERROR: str(e)')
37
+
38
+ self.iin_info['cc_first_8'] = cc_first_8
39
+
40
+ with ThreadPoolExecutor(max_workers=1) as executor:
41
+ self._t_get_bin = executor.submit(_exec) # Task that takes 5 seconds
42
+
43
+
44
+
45
+
46
+ def next_gateway(self, crm_id, date, step, click_id='', processor=False, cc_type=None, cc_first_8=False, recurse=0,
47
+ decs=False, ignore_user_exclusions=None,
48
+ proc_excl=[], is_tds=None, is_prepaid=True, **kwargs):
49
+ # opt vals 1 = random gateway constrained only by cap, 2 = optimised gateway constrained only by cap, 3 = Hybrid approach not ignoring settings, 4 = over cap (over-rides to that if needed)
50
+ if is_prepaid is None:
51
+ raise TypeError('is_prepaid value must be pass as a boolean got NoneType')
52
+
53
+ if is_prepaid:
54
+ pp_campaign_class = 'prepaid'
55
+ else:
56
+ pp_campaign_class = 'post_paid'
57
+ if ignore_user_exclusions is None:
58
+ ignore_user_exclusions = self._opt_val < 2
59
+ if cc_first_8:
60
+ self.set_bin_info(cc_first_8)
61
+ try:
62
+ decs = self.exclude_list(crm_id, step, click_id, 'a.') if not decs else decs
63
+ except Exception as e:
64
+ return str(e)
65
+
66
+
67
+ try:
68
+ qry = self.gty_qry(crm_id, date, step, processor, cc_type, decs, proc_excl=proc_excl, is_tds=is_tds,
69
+ is_prepaid=is_prepaid, **kwargs)
70
+ res = pd.read_sql(qry, self.engine)
71
+ cc_type = cc_type.lower()
72
+ if 'master' in cc_type:
73
+ cc_type = 'master'
74
+ try:
75
+ result = self._t_get_bin.result(timeout=4) # Wait for 2 seconds
76
+ except TimeoutError:
77
+ print("IIN INFO timed out!")
78
+ except Exception as e:
79
+ print(f"An error occurred: {e}")
80
+ if self._opt_val > 1 and self._opt_val < 4 and self.routes is not None:
81
+
82
+ self._lock_model_replace.acquire()
83
+ mod = self.routes if self.is_iin_data else self.routes.loc[
84
+ self.routes.mod_type.isin(['cc_type_conversion', 'cc_type_mcc_conversion'])]
85
+ self._lock_model_replace.release()
86
+ mod = mod.loc[(mod.approved + mod.declined >= self._min_sample_count)
87
+ # & (mod.conversion_rate != 1) # take out dummy gateways
88
+ & ((mod.cc_first_8 == cc_first_8) | (mod.cc_first_8.isna()))
89
+ & (mod.campaign_class == pp_campaign_class)
90
+ & (((mod.cc_type == cc_type) | mod.cc_type.isna()) if 'cc_type' in mod.columns else (
91
+ True))
92
+ & (((mod.cc_level == str(self.iin_info['level'])) | (
93
+ mod.cc_level.isna())) if self.is_iin_data and 'level' in self.iin_info else (True))
94
+ & (((mod.bank == str(self.iin_info['bank'])) | (
95
+ mod.bank.isna())) if self.is_iin_data and 'bank' in self.iin_info else (True))
96
+ ]
97
+ if len(mod): #and 'conversion_rate' in mod.columns:
98
+ df_opt = mod.copy().sort_values('conversion_rate', ascending=False).reset_index(drop=True)
99
+ df_opt['r_rank'] = df_opt.index + 1
100
+
101
+ # Optimization Filters
102
+
103
+ res = res.merge(df_opt.loc[df_opt.mod_type.isin(
104
+ ['cc_type_mcc_conversion', 'bank_conversion'])],
105
+ on=['processor', 'mcc'],
106
+ how='left').append(res.merge(
107
+ df_opt.loc[df_opt.mod_type.isin(['cc_type_cc_level_conversion', 'cc_type_conversion', 'iin_conversion'])].drop('mcc',
108
+ axis=1),
109
+ on=['processor'],
110
+ how='left')).sort_values('r_rank')
111
+ else:
112
+ res['mod_type'] = 'undefined'
113
+ res['conversion_rate'] = 0
114
+ # r_rank is Highest to lowest in terms of strength same as priority
115
+ res.mod_type = res.mod_type.fillna('undefined').replace({'nan': 'undefined', '': 'undefined'})
116
+ res.conversion_rate = res.conversion_rate.fillna(0)
117
+ else:
118
+ res['conversion_rate'] = 0
119
+ res['mod_type'] = 'undefined'
120
+ res = res.sort_values(**self.sort_map[self._opt_val]).drop_duplicates('gateway_id', keep='first')
121
+ res['cc_type'] = cc_type
122
+ res['cc_first_8'] = cc_first_8
123
+ self.set_iin(cc_first_8=cc_first_8, cc_type=cc_type)
124
+ except Exception as e:
125
+ print('LBV4 error', str(e))
126
+ raise e
127
+
128
+ if res is None or not len(res):
129
+ if not decs:
130
+ if not recurse and is_tds is not None:
131
+ return self.next_gateway(crm_id, date, step, click_id, processor, cc_type, recurse=recurse + 1,
132
+ is_tds=not is_tds, is_prepaid=is_prepaid)
133
+ elif recurse == 1:
134
+ self.init_date(date, crm_id)
135
+ return self.next_gateway(crm_id, date, step, click_id, processor, cc_type, recurse=recurse + 1,
136
+ is_tds=is_tds, is_prepaid=is_prepaid)
137
+ elif recurse == 2 and is_tds is not None:
138
+ return self.next_gateway(crm_id, date, step, click_id, processor, cc_type, recurse=recurse + 1,
139
+ is_tds=not is_tds, is_prepaid=is_prepaid)
140
+ return 'out of processing'
141
+ else:
142
+ # if len(decs) < 4:
143
+ # return 'out of processing'
144
+ return 'declined due to too many attempts'
145
+ r = res.loc[res.fill_pct < 1]
146
+ if 'conversion_rate' not in res:
147
+ res['conversion_rate'] = 0
148
+ # HARD CAP
149
+ if not len(r):
150
+
151
+ res = res.sort_values(['dly_initial_cap', 'conversion_rate'], ascending=[True, False]).sort_values(
152
+ ['fill_pct'])
153
+
154
+ def _get_aft_sc():
155
+ nonlocal res
156
+ if not len(res):
157
+ return 'out of processing'
158
+ r2 = res.to_dict(orient='records')[0]
159
+ if r2['initial_count_mtd'] >= r2['monthly_initial_cap']:
160
+ self.alert_cb('hard_cap_alert', crm_id=crm_id, gateway_id=r2['gateway_id'])
161
+ self.disable(crm_id=crm_id, gateway_id=r2['gateway_id'])
162
+ res = res.loc[res.gateway_id != r2['gateway_id']]
163
+ return _get_aft_sc()
164
+ self.set_iin(**r2)
165
+ r2['is_tds'] = is_tds
166
+ return r2
167
+
168
+ # SOFT CAP
169
+ if ~res.soft_cap_alerted.any():
170
+ cnt = self.engine.execute(
171
+ f"""select count(*) from {self.schema}.{self.table}
172
+ where date = '{date}'::date and crm_id = '{crm_id}'
173
+ and router_id = '{step if step == 1 else 2}'
174
+ and enabled and enable_initials and fill_pct<1
175
+ """).scalar()
176
+ if cnt == 0 or cnt is None:
177
+ self.alert_cb('soft_cap_alert', crm_id=crm_id)
178
+ self.set_soft_cap_alerted(crm_id)
179
+ return _get_aft_sc()
180
+ r = r.to_dict(orient='records')[0]
181
+ if cc_type:
182
+ r['cc_type'] = cc_type
183
+ if cc_first_8:
184
+ r['cc_first_8'] = cc_first_8
185
+
186
+ self.set_iin(**r)
187
+ r['is_tds'] = is_tds
188
+ return r
189
+
190
+
191
+
192
+
@@ -0,0 +1,8 @@
1
+ import random
2
+ from models.db import Db, pd
3
+ from models.bro_clicks.initial_routes import InitialRoutes, ForeignInitialRoutes
4
+ from calendar import monthrange
5
+ import datetime as dt
6
+ from models import config
7
+ from threading import Thread, Lock
8
+ from copy import deepcopy
@@ -0,0 +1,8 @@
1
+ import random
2
+ from models.db import Db, pd
3
+ from models.bro_clicks.initial_routes import InitialRoutes, ForeignInitialRoutes
4
+ from calendar import monthrange
5
+ import datetime as dt
6
+ from models import config
7
+ from threading import Thread, Lock
8
+ from copy import deepcopy
@@ -1,4 +1,4 @@
1
- from models.reports.table_reports.approval_report import approval_report
1
+ from models.reports.table_reports.approval_report import approval_report, approval_report_2
2
2
  from models.reports.table_reports.bin_report import bin_report
3
3
  from models.reports.table_reports.affid_report import affid_report
4
4
  from models.reports.table_reports.mtd_report import mtd_report
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modelswrkpi
3
- Version: 8.0.4
3
+ Version: 8.1.0
4
4
  Author: Kelly Kapowski
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: psycopg2
@@ -62,10 +62,25 @@ models/bro_clicks/binrouter.cpython-310-x86_64-linux-gnu.so,sha256=3RU-R5hUed5yW
62
62
  models/bro_clicks/clicks.cpython-310-x86_64-linux-gnu.so,sha256=aj4yUIKZqUAtHxKXn0IIl0qQDSbOYrU3HeeF8ecXf0g,107184
63
63
  models/bro_clicks/conversions.cpython-310-x86_64-linux-gnu.so,sha256=yvvBXlDVd5GQG0AuATp7S6jctO0abLxElr72OcVDaH4,98896
64
64
  models/bro_clicks/error_log.cpython-310-x86_64-linux-gnu.so,sha256=I8fwpBrbxaB_A8JfIyHo0Z4A3ha3ejon9vkutq63op0,65936
65
- models/bro_clicks/initial_routes.cpython-310-x86_64-linux-gnu.so,sha256=-HgXizWxJs-kRMBLs1jgdeDZBHCUdsbNzFaVK2RvZaY,127952
66
- models/bro_clicks/load_balancer.cpython-310-x86_64-linux-gnu.so,sha256=pITO9cKQ5KH9OGbu42fRGsjJRbO6_2aTlh2unXhXAIw,549008
65
+ models/bro_clicks/initial_routes.cpython-310-x86_64-linux-gnu.so,sha256=JEM-67AUh3VsAJ9a_rH37jH4tCqdX-E6NMYgiLo9mHg,140368
67
66
  models/bro_clicks/scrub_settings.cpython-310-x86_64-linux-gnu.so,sha256=gKo6LHc-3OCQRl1SAg9XH6XMBJujLoB5F-6sYgKjTZ0,160592
68
67
  models/bro_clicks/splitter.cpython-310-x86_64-linux-gnu.so,sha256=27kzt-JDllwAXMFq8Xe2Av0RIDpwFK4h_t6BvytGsak,57712
68
+ models/bro_clicks/load_balancer/__init__.py,sha256=h0UIw3AFm-gdyK-3xR1NgFKC95sJW1hz2Pw2dMdkA3A,370
69
+ models/bro_clicks/load_balancer/compile.py,sha256=M1o0NKWcQe6b27e96PZlNUBBe8EFP5CnI3cWDamzquk,600
70
+ models/bro_clicks/load_balancer/v1.cpython-310-x86_64-linux-gnu.so,sha256=IJa5FkmwEsQXh8ULGGjoP_hPbxkXWw1KABwmVV1YDUc,160656
71
+ models/bro_clicks/load_balancer/v1.py,sha256=Df-LMtS0l0psJCyguSHtSIt_ofLwop55ogWDq3eFrig,8518
72
+ models/bro_clicks/load_balancer/v2.cpython-310-x86_64-linux-gnu.so,sha256=VCGHr8KSipO2E0IfJ0zSpdte-xw_xsSK5vRWujtumnU,140368
73
+ models/bro_clicks/load_balancer/v2.py,sha256=WSM6lKtyLrzx1xdhL3ncuH4QH-FBnS5Gm0uDFAtNHXo,7303
74
+ models/bro_clicks/load_balancer/v3.cpython-310-x86_64-linux-gnu.so,sha256=f03MbM9KyuKpctvJ-6g6pnhMbnsasPtTkFVeQlRXUeA,256496
75
+ models/bro_clicks/load_balancer/v3.py,sha256=-seP7t7dVO-O2q4I3wqgKrgTKxGPWVROHvSzVgwd_ug,16542
76
+ models/bro_clicks/load_balancer/v4.cpython-310-x86_64-linux-gnu.so,sha256=kbQws2ObO2BxOOxjCaB7_H8IA1allHZ-zsX2kYMvrJo,136208
77
+ models/bro_clicks/load_balancer/v4.py,sha256=wGe66SzYIa4qiPnA4ZZQ5tisvXv_j7XZZCVrsCG23Eg,7732
78
+ models/bro_clicks/load_balancer/v5.cpython-310-x86_64-linux-gnu.so,sha256=VkmSqG11rgZTOv5AzhhVga52Ay6rrRKqmrrFVj8gUl0,127568
79
+ models/bro_clicks/load_balancer/v5.py,sha256=GLRcbOUAI4n2m8wv7yGNhRZoPHQ8WO_Ra4FeAr3Yxsg,7755
80
+ models/bro_clicks/load_balancer/v6.cpython-310-x86_64-linux-gnu.so,sha256=aOxX26fPb0UvTrRrilI2a35ojbbaq4BoDrfPiNLsAk4,165360
81
+ models/bro_clicks/load_balancer/v6.py,sha256=G7kA18-PA5NA2WZMIRChPkFS-JbyZcqLzgFtu4mZxEs,9334
82
+ models/bro_clicks/load_balancer/v7.py,sha256=tkk6FpLgQvKCaFf2kmKsHhW_Pj4gJq4PcSe-DKcIUC4,264
83
+ models/bro_clicks/load_balancer/v8.py,sha256=tkk6FpLgQvKCaFf2kmKsHhW_Pj4gJq4PcSe-DKcIUC4,264
69
84
  models/cb911/__init__.py,sha256=Y3tX5WQYFUswdMMUpWqa9U_fNObUAhXcVrix3eXYP4k,64
70
85
  models/cb911/alerts.cpython-310-x86_64-linux-gnu.so,sha256=LCsUfaTzdQKS6ZaKQbfLCNTZbpZqaJmEsWDTUOdHUrI,61808
71
86
  models/cb911/cb_struc.cpython-310-x86_64-linux-gnu.so,sha256=X6UcgfU0Q7FPiiG-zzJcoefGj91RVRA1kR6ZMHu_1Gc,57744
@@ -110,9 +125,9 @@ models/reports/reporting_alerts.cpython-310-x86_64-linux-gnu.so,sha256=5VgOLNvpc
110
125
  models/reports/traffic.cpython-310-x86_64-linux-gnu.so,sha256=o4ugdePMlHQxlere5d9BJ54ZTxQqz72amT_jBzzsLQI,69968
111
126
  models/reports/traffic_reporting.cpython-310-x86_64-linux-gnu.so,sha256=Fu-CrJkD3RM2gfvxzjcO6IoRgpSmMiD6z8dW0JSznSs,131888
112
127
  models/reports/widgets.cpython-310-x86_64-linux-gnu.so,sha256=BglXB0vfh8GeQqZPrv4BsnV90YKJI9YdqOFbJv-RgwM,74160
113
- models/reports/table_reports/__init__.py,sha256=KTRAfLmbVaHS-RaKjlnxT4GCP3i0iR7Qn8JIOZl3ivQ,503
128
+ models/reports/table_reports/__init__.py,sha256=prIxlfuVxK30sTDk7VwF7h9E4rVOCq7yDwYr3f0IXWA,522
114
129
  models/reports/table_reports/affid_report.cpython-310-x86_64-linux-gnu.so,sha256=UpVBJQZHszViYsFNqMNUDN9Aeux-2GTRcgKB2L9IGP8,74032
115
- models/reports/table_reports/approval_report.cpython-310-x86_64-linux-gnu.so,sha256=ljCOcOIGvnVUTX5NnY23FB5Z_R9Gvp1J061tnhJSzl8,61744
130
+ models/reports/table_reports/approval_report.cpython-310-x86_64-linux-gnu.so,sha256=UVHzR-MaQjjVc0dMQHqmwJoy_hQa715h6sOVed6fXCY,69968
116
131
  models/reports/table_reports/bin_report.cpython-310-x86_64-linux-gnu.so,sha256=tZcFVieD_UbivTqm_t5XPZvbVi_lPrMnmODsP9woptQ,65840
117
132
  models/reports/table_reports/continuity_report.cpython-310-x86_64-linux-gnu.so,sha256=KU85x0U6Ud7coh3yQ50yEYiTiE-zdkG7tVoh-QuTUTg,61744
118
133
  models/reports/table_reports/impact_reports.cpython-310-x86_64-linux-gnu.so,sha256=NKozkFYR2vn5yE7uURfOY9b312BM-soBe2i83HbqSNM,82320
@@ -120,7 +135,7 @@ models/reports/table_reports/inactive_report.cpython-310-x86_64-linux-gnu.so,sha
120
135
  models/reports/table_reports/mtd_report.cpython-310-x86_64-linux-gnu.so,sha256=dHko7wWia9y9d-gIPC8uxycUnobII6hQgairSPRU168,74096
121
136
  models/vaultx/__init__.py,sha256=PwYMmWXQMojeyFnQuQW3wNlv9dLUmX_uiDfCOHJN7XI,46
122
137
  models/vaultx/ssc_cont.cpython-310-x86_64-linux-gnu.so,sha256=69kGuEko6oJEqxopS_4BxoX5S-Twq94eFwYJFEu_4B8,94992
123
- modelswrkpi-8.0.4.dist-info/METADATA,sha256=KkN0z2mk6ieh6gmBnClOPz9XzfNJ0YcfCl69B5h7liU,346
124
- modelswrkpi-8.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
- modelswrkpi-8.0.4.dist-info/top_level.txt,sha256=fOgLNy4xnMfp0ihe_kFhY_yH71kNkdEQG68z8FoLR4g,19
126
- modelswrkpi-8.0.4.dist-info/RECORD,,
138
+ modelswrkpi-8.1.0.dist-info/METADATA,sha256=9l-NtBxBaAB53Jlj9bYmW9gljG30M1epNLZ0uy8lSS0,346
139
+ modelswrkpi-8.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
140
+ modelswrkpi-8.1.0.dist-info/top_level.txt,sha256=fOgLNy4xnMfp0ihe_kFhY_yH71kNkdEQG68z8FoLR4g,19
141
+ modelswrkpi-8.1.0.dist-info/RECORD,,