From 6421a07f2be1c18206d13c0332a38816f20d52be Mon Sep 17 00:00:00 2001 From: Bishwajeet Kumar Rajak Date: Thu, 11 Jun 2026 00:43:44 +0530 Subject: [PATCH] first commit --- __pycache__/config.cpython-314.pyc | Bin 0 -> 2584 bytes __pycache__/logging_config.cpython-314.pyc | Bin 0 -> 1532 bytes api/api_client.py | 38 ++++++++ config.py | 32 ++++++ .../oracle_connector.cpython-314.pyc | Bin 0 -> 1460 bytes db/db.py | 87 +++++++++++++++++ db/oracle_connector.py | 23 +++++ logging_config.py | 29 ++++++ main.py | 27 ++++++ models/bank_mapping.py | 7 ++ models/outward_log_model.py | 22 +++++ processor/processor.py | 91 ++++++++++++++++++ repository/repository.py | 50 ++++++++++ requirements.txt | 2 + scheduler/scheduler.py | 29 ++++++ 15 files changed, 437 insertions(+) create mode 100644 __pycache__/config.cpython-314.pyc create mode 100644 __pycache__/logging_config.cpython-314.pyc create mode 100644 api/api_client.py create mode 100644 config.py create mode 100644 db/__pycache__/oracle_connector.cpython-314.pyc create mode 100644 db/db.py create mode 100644 db/oracle_connector.py create mode 100644 logging_config.py create mode 100644 main.py create mode 100644 models/bank_mapping.py create mode 100644 models/outward_log_model.py create mode 100644 processor/processor.py create mode 100644 repository/repository.py create mode 100644 requirements.txt create mode 100644 scheduler/scheduler.py diff --git a/__pycache__/config.cpython-314.pyc b/__pycache__/config.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fdca69318c6c9e89c492680dc65621b20ced1fe GIT binary patch literal 2584 zcmah~O-vg{7@b|O|4mE?*q9`QKp=6OfY&w{NYuoDp%h}AG0+Ri%Ge9p#;l#)HEp6C zxRpcIpQtLRm(o*{wo8Ylsz*{s3Yv0=)E?TK8xCo2{btwe1S*vkym|A@o1fk9 zedE`U)VUBmjo$~~+29cRjdsij`ueli4$TU>fiN?UG}MGnBh2~{wnSM&pfQ-~Ktb+L z+D&GSpn;ZZXKw>Y23EO_K#er^hDEdZPyzM8s+gT;umy8~R%`>bV+WuUy8zwT16YTT z0D5sf;8ENFcnmiJHeny2A2$OAa0}pZd;;(!ZUsDr+W=4F_IXC*aEE5aXZ%RB;Z8t1 z?gDh+vzl`jX)b&Y-XKV9!v%RkS|rQ>;X)z4m#}(d!e zn3yh$5XOjv31f(2AkxReA;R#wC=8*H&gh^K>nDu9We8R<_K6avUtheBF!~w7{M}18 zHLa))_Vh#}-QjR=H^t~+G#cp{PfetSYbCKH3S*)yDj7{G$UO_9mc1Fz=kzx}B)mvJjI46q>ngAoqq9SPT$wE;nWJOh-%j#v& zUA#ja0&Fg6f-

>fY)#lYtS8`n37 z%Ex1?+!IIhuCIAbx-V@w9<-Nz7eM6xz4P3+4c`U64s1u>`gx=ryjJeSRNB7N()zR| z^tdHdZV9h)AA0v_2KKqu3IW})YfE2o>Kh9Q%7U47}&_oMDv+V!rlkCKKgq)}qRxh$0fTwgOp`eAhhT_QyVR&jJ zk-j?(Hw=FsAWR`bAxfc_LLY?~g#iGbN_Z;asf4Ezo=SKs;rju?AqsFioey$KH=J4N z0U%bjn3ptYG({=~ElNKPI(0t@5F<=hrIp&%)}{>5NxgKu*)+mI3;JPH9R~nMH2T)Y z?~m_zns+?&dsa)6Yt>nCpfeY~y8Pwk&B&9ESlOF++!0&PY{hc^BGlaGs>uB+`(;2lB!DbViGbCf`t{H zLKuK}a7osrB{88W1x1NL$f#WXqZ0=dzLd*oVyy(tKr2}1eQ zD__nmiBS12L0Br}N_omXf^fT($yZ0bg0LVds+N~zQ7*vn(VByWtMOE7JUK?ZqlxL^ zH-&36iJ62jgC~_ix+!&%G6q1J1h5+XN@azN1~#0h_ZwYF5VCo=5_3{k%ZhLZ3PFa{ zy%L0J^m@BuIFqJKp+H@s{sHj!`|w#RoGoD6aky7!D;CO{0_%MS>p1(sXE45Zb6IE4 z9G=yMiWPLvd@bvv20KG_dW?^58lx2(a(ZAzJ1BvJw$J3CwwWB(T`;%a+d@C9OE1 literal 0 HcmV?d00001 diff --git a/__pycache__/logging_config.cpython-314.pyc b/__pycache__/logging_config.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4e4f52faf6f7dc0e00c02b3a922256c8e71db7a GIT binary patch literal 1532 zcmbVMPjA~c6sKg`R^r5QY{yPAH;E&-h%n48iWDx2VuyCf8Z5{Rt;@-%q1ueAMV17L zDbk({^s%WlEk(=OYiEam@c58xx;zaJmT$M1CS4QYhAw&dnK%**5J@g#u(k5c#Sqf%(Q+^s_v1O#kiilwy1CQ&HinRD&B6M4m zIIbJ)Wh(#*Spw!5jL|=mz-<5@laAKIbzRu6kS^(REwnGA29C^ifp>+?z+d0 z6k!Fq7H{y7&pj^ecGIaAu1D)wPd<<9@mlyIZfqy^Kl3;{HPlN2YDD4Kays5KC=!Jn zm>z37dvESm)(o%3%r4QqmCBk$UJ=VSLMdE)28J&2Jfj0nZ}I}<5ZJP+aL)tVI=i%}0UfZNR2@xIB?(m5YVOy{!lq()A z#qJz$Zf|_em6wLywg~ljyk!xC@`(+Hb`8eBclsMfiP3#J_TW}a(;Wsm z+MNy4BB4^lJVhOcHANBtHnDq#n`}9@=U9YK?Sg+Z%0QI<3J`z%?r_Fk8Eo^q( zx6e@bfP5pBDnd^cC(iu0bgk;;*o^`8=pj&^@L^Jd=6yqS6XUUp#) zkn%s9Uw*3s{7J%uv@tW>L8b?Fu#{a8^i_A2TdGi3;Xqx3gT$6HvJ_eY*1$?!1WVgO zZ$u(#DeGV+{~}@ERODRC70eG?EtfmAHleW(7;fN-jqwgZC>98{u8YJngc$uI2+dLv zlU73Lw?U*VjeN`8=iGLD_eK~5t|LP3jDyF%iBA9+!!j~GxU(3<%LEqOhF}sHC3L3j zKUJmfghA75Nv$1*zNtzra{VSZa7RSmDi!(JjgM+yL@tkN?{9y&xwZX4?WP-jCBk+s zaGQdm=4+QTaX(;f9y)Fm)f$JjFwT;p^HG}D+g)ie<^`T$OcrMjaebnR<7P2#4+hJZ z9%Tmk;<5I9dWb9FOtVKJjcBUHN9nwxI)7d!=?#{2!Wnvl<>HJPigl%)tSgqXJ zc~LC)iyOZbHwJ~$le>@a_6yfe3)cpv%RjCBxY93eo|ZOoD4*;--s|Tpr}@etU!dph zmA@BKrR?#|N4sZ>u$VvTKJ4~$<?0R%!W?5qVWZ;{ zKhM~`j_r>%ImVhEkA&|9ZV)oYDRq7YK^7Q`ge^RW*+Ovdup`_E_g`Sl@v%1z&k>I6 z`;6f~XyHGLxQ#0JXb-*?r;-Tlt8qKaF$RM 0 + + def insert_outward_log(self, d): + logger.debug("Insert data: %s", d) + + self.db.execute(""" + INSERT INTO outward_neft_api_log( + BANKCODE,TXNCODE,TXNIND,JRNL_ID,REF_NO,TRAN_DATE, + TXN_AMT,RECVR_ACCT_NO,SENDER_ACCT_NO, + RECIEVER_IFSC,SENDER_NAME,RECIEVER_NAME, + BENEFICIARY_ADDRESS,SENDER_TO_RECIVER_INFO,MSG_TYPE + ) + VALUES ( + :bankcode,'OUTWARD NEFT','DR',:jrnl_id,:ref_no,:tran_date, + :txn_amt,:recv_ac,:send_ac, + :ifsc,:sender_name,:receiver_name, + :beneficiary_address,:sender_info,'N06') + """, d) + + def call_proc(self): + return self.db.call_procedure("neft_api_txn_post") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0e3667f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +oracledb==2.0.0 +requests \ No newline at end of file diff --git a/scheduler/scheduler.py b/scheduler/scheduler.py new file mode 100644 index 0000000..e7320c5 --- /dev/null +++ b/scheduler/scheduler.py @@ -0,0 +1,29 @@ +import time +from logging_config import get_logger + +logger = get_logger(__name__) + +class Scheduler: + + def __init__(self, processor, config): + self.processor = processor + self.config = config + + def run(self): + logger.info("Scheduler started") + + while True: + try: + count = self.processor.process() + + logger.info("Inserted count %s", count) + + if count > 0: + logger.info("Calling procedure") + self.processor.repo.call_proc() + + except Exception: + logger.exception("Scheduler error") + + logger.info("Sleeping for next cycle") + time.sleep(self.config.poll_interval_minutes * 60)