From e259e9250a157e8ef9b727863115e3d5fccd4277 Mon Sep 17 00:00:00 2001 From: Balaji7077 Date: Thu, 5 Sep 2024 15:58:24 +0530 Subject: [PATCH] hii --- sample_project.zip | Bin 25570 -> 0 bytes sample_project/.DS_Store | Bin 0 -> 6148 bytes sample_project/.idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 + sample_project/.idea/misc.xml | 7 ++ sample_project/.idea/modules.xml | 8 ++ sample_project/.idea/sample_project.iml | 8 ++ .../__pycache__/config.cpython-312.pyc | Bin 0 -> 410 bytes .../__pycache__/server.cpython-312.pyc | Bin 0 -> 355 bytes sample_project/app/__init__.py | 5 + sample_project/app/__init__.pyc | Bin 0 -> 315 bytes .../app/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 397 bytes .../__pycache__/app_config.cpython-312.pyc | Bin 0 -> 951 bytes .../__pycache__/common_utils.cpython-312.pyc | Bin 0 -> 1843 bytes .../__pycache__/connections.cpython-312.pyc | Bin 0 -> 5074 bytes .../__pycache__/decorators.cpython-312.pyc | Bin 0 -> 1061 bytes sample_project/app/app_config.py | 20 +++ sample_project/app/app_config.pyc | Bin 0 -> 866 bytes sample_project/app/base_coordinator.py | 0 sample_project/app/common_utils.py | 40 ++++++ sample_project/app/common_utils.pyc | Bin 0 -> 1548 bytes sample_project/app/connections.py | 75 +++++++++++ sample_project/app/decorators.py | 17 +++ sample_project/app/decorators.pyc | Bin 0 -> 1004 bytes sample_project/app/exceptions.py | 0 sample_project/app/v1/__init__.py | 0 sample_project/app/v1/__init__.pyc | Bin 0 -> 141 bytes .../v1/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 187 bytes .../app/v1/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1225 bytes sample_project/app/v1/urls.py | 32 +++++ sample_project/app/v1/urls.pyc | Bin 0 -> 485 bytes sample_project/app/v1/users/__init__.py | 0 sample_project/app/v1/users/__init__.pyc | Bin 0 -> 147 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 193 bytes .../users/__pycache__/service.cpython-312.pyc | Bin 0 -> 762 bytes .../users/__pycache__/views.cpython-312.pyc | Bin 0 -> 4830 bytes .../users/__pycache__/views1.cpython-312.pyc | Bin 0 -> 4757 bytes sample_project/app/v1/users/coordinator.py | 0 sample_project/app/v1/users/service.py | 8 ++ sample_project/app/v1/users/service.pyc | Bin 0 -> 775 bytes sample_project/app/v1/users/views.py | 119 ++++++++++++++++++ sample_project/app/v1/users/views.pyc | Bin 0 -> 940 bytes sample_project/app/v1/users/views1.py | 113 +++++++++++++++++ sample_project/config.py | 3 + sample_project/config.pyc | Bin 0 -> 357 bytes sample_project/server.py | 5 + 46 files changed, 469 insertions(+) delete mode 100644 sample_project.zip create mode 100644 sample_project/.DS_Store create mode 100644 sample_project/.idea/.gitignore create mode 100644 sample_project/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 sample_project/.idea/misc.xml create mode 100644 sample_project/.idea/modules.xml create mode 100644 sample_project/.idea/sample_project.iml create mode 100644 sample_project/__pycache__/config.cpython-312.pyc create mode 100644 sample_project/__pycache__/server.cpython-312.pyc create mode 100644 sample_project/app/__init__.py create mode 100644 sample_project/app/__init__.pyc create mode 100644 sample_project/app/__pycache__/__init__.cpython-312.pyc create mode 100644 sample_project/app/__pycache__/app_config.cpython-312.pyc create mode 100644 sample_project/app/__pycache__/common_utils.cpython-312.pyc create mode 100644 sample_project/app/__pycache__/connections.cpython-312.pyc create mode 100644 sample_project/app/__pycache__/decorators.cpython-312.pyc create mode 100644 sample_project/app/app_config.py create mode 100644 sample_project/app/app_config.pyc create mode 100644 sample_project/app/base_coordinator.py create mode 100644 sample_project/app/common_utils.py create mode 100644 sample_project/app/common_utils.pyc create mode 100644 sample_project/app/connections.py create mode 100644 sample_project/app/decorators.py create mode 100644 sample_project/app/decorators.pyc create mode 100644 sample_project/app/exceptions.py create mode 100644 sample_project/app/v1/__init__.py create mode 100644 sample_project/app/v1/__init__.pyc create mode 100644 sample_project/app/v1/__pycache__/__init__.cpython-312.pyc create mode 100644 sample_project/app/v1/__pycache__/urls.cpython-312.pyc create mode 100644 sample_project/app/v1/urls.py create mode 100644 sample_project/app/v1/urls.pyc create mode 100644 sample_project/app/v1/users/__init__.py create mode 100644 sample_project/app/v1/users/__init__.pyc create mode 100644 sample_project/app/v1/users/__pycache__/__init__.cpython-312.pyc create mode 100644 sample_project/app/v1/users/__pycache__/service.cpython-312.pyc create mode 100644 sample_project/app/v1/users/__pycache__/views.cpython-312.pyc create mode 100644 sample_project/app/v1/users/__pycache__/views1.cpython-312.pyc create mode 100644 sample_project/app/v1/users/coordinator.py create mode 100644 sample_project/app/v1/users/service.py create mode 100644 sample_project/app/v1/users/service.pyc create mode 100644 sample_project/app/v1/users/views.py create mode 100644 sample_project/app/v1/users/views.pyc create mode 100644 sample_project/app/v1/users/views1.py create mode 100644 sample_project/config.py create mode 100644 sample_project/config.pyc create mode 100644 sample_project/server.py diff --git a/sample_project.zip b/sample_project.zip deleted file mode 100644 index 2421391739db3aac4d808272a13f16134290f474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25570 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 Y!I2shc;pfdO&0j?DzM}ut_XhnKQ?02OaK4? diff --git a/sample_project/.DS_Store b/sample_project/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7a8505540de1231f32c9a3e93adbe3adbb17201b GIT binary patch literal 6148 zcmeHK!EO^V5FIBec!Ll*Acf;zkT_H*0Yp_*NUO9x^oFzu4uIO-CbTOp>nOWvRMMdR zjPeQmN&ldq1JCwQk+xhTKr_<#jmI;#{JgSvh)4~l!#+`mh&0qHM}Z^5lmTw-Js?XXThr`63 zRMLnhbmH1uGF10k2D&1`fG{8ote6455B0qjuPe(51H!=H&w#xjLa4=vvG(Y$4m7R= z0Jh+E0^9xk14HWoMvS#bcp%EB0)49D5<_wApnN*UBaW{<`gBrmWz54XE3Qx!mmVr~ z;iMvu(h38@z%m0(-|g7 + + + \ No newline at end of file diff --git a/sample_project/.idea/misc.xml b/sample_project/.idea/misc.xml new file mode 100644 index 0000000..a5223d8 --- /dev/null +++ b/sample_project/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/sample_project/.idea/modules.xml b/sample_project/.idea/modules.xml new file mode 100644 index 0000000..22bdbf5 --- /dev/null +++ b/sample_project/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/sample_project/.idea/sample_project.iml b/sample_project/.idea/sample_project.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/sample_project/.idea/sample_project.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/sample_project/__pycache__/config.cpython-312.pyc b/sample_project/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf470aed2ac66e693ee1feb6726dbd7658797997 GIT binary patch literal 410 zcmX@j%ge<81bp{p5_Ev{V-N=hSfGs05&SrZc26L@}l?L@}i>rZYw{gH+#QbI#98%S^w;Xy~WOa*HEAJ})shH9r0p zSA2YKeoAQ$h|LopUs#%$1C6qn zpiOBxiN)FRi3J5Pfr6s^tkmQZbZ#=($$ABqMa)2Z!34;o#h|cjVR#@RJ)!g>i%1cO y3zqcLWQ3^X1c`u!xq+--95xUy+7kNlV-N=hSfPy1Za~I#h7^Vr#vF!RhA0L`hE&EBrfdxch9WU0 zhE#?u7MKv%<0Xiz$#{!7v7q1-a%nQyVCq$ZW7-(tzgFD|*oQjlL%;-|@61TqYyD=#rOH9r0pb5UvDN`}uM zBYy=tTg8MHrxq2*K-B=m_FS$2 literal 0 HcmV?d00001 diff --git a/sample_project/app/__init__.py b/sample_project/app/__init__.py new file mode 100644 index 0000000..a0bda8d --- /dev/null +++ b/sample_project/app/__init__.py @@ -0,0 +1,5 @@ +from config import Config +from app.app_config import register_versions, app + + +register_versions(Config.VERSIONS_ALLOWED) diff --git a/sample_project/app/__init__.pyc b/sample_project/app/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3eee4109defc5716662f6019fdc9f71161b9a6a5 GIT binary patch literal 315 zcmYLE!Ab)$5S?sRDFvloJoy1RH3tv9h$yxPp|r4zE$k(h?O0Pbo3NP*p8Zfi!Vl2N zTIi6x%zHC$hRC0b;rsW^YYoT9_Sqw!b literal 0 HcmV?d00001 diff --git a/sample_project/app/__pycache__/__init__.cpython-312.pyc b/sample_project/app/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53aced5a8a553dc250e3d16af175f4b94ab50f08 GIT binary patch literal 397 zcmZ8dy-Ncz6i+VaA!0?li4IP}ITTz)gwiXtP2(yfz8KNcS(zmNCw@_4U>!UixgnC#zX2EVLW1zM76V8|2bf-dABhHVHf zceoRyHj3T03xNYDqHs9xwR*n57q~zOGUU78R`@XYDkABzzVGBaiuRdKsUl;lG!u!= zQAf(A@8w=JFH&}ne9M?6bI8(kjj7gbX8XE&(W-~d7AZFx;Y~Go22QO2rK5vAVmD)kMjwKgqG{CJ$F_~(tJF(=H^ms>)i1~D7NF|0e zO8-k+K?qA&N=Qj&v-Q(hbniGlQ=4WEy8yjst{(&;`~(i;Iwu z=z)WGj(Rol2bjpgyB7!tOat-Y$=kxl3n%9-TNEdG)9=kp=f^kiTU%QzpxpX#ZTAFBt3tIg>MsSZr%gY}&W%o{My52+c7yyYZ8py=FYqR-Xf2Z$r z@ypF!rGHpX%@q-_jdssL*w!26jjo|76`kmy*1SIJd`0ngKr zRT9y?O}2zH8-e!&F{pwnWRS(yzkRE*P{hH)E=G%%A5f+**k$T5s}zLYFUFtEPGvKC z_Tl64(K-F;$n^A7W}-1FuBOAVZFiZPdbAV9pR3O+rczA7PuO{$^*rV>+BRiGF+xEs07?u6LvdN(s; z2*^ZKid0wap-7dClpHwp0HuFM4^?|H2@z;(sgc?XHyY=}sc#m4m69j#o3G!S8UKE7 z-~Jv7wIZ;ePA=bFP!Re{3~DA-JC$qDDIxMD-;k45|ryV&nK%h&&Ca9LG%SDW0~oV;N>= zcO_S4JjHX&ZPV>6Ct054s}70DRBYrb0_6IPoaL~X;s$8#|Hu|wq#+M-*EUv}xY{MK z(=R5*wRuJ;(@fi5TGOVpWRj+ri8e{t61N>~=CkR!iJO;he5yI7&Gq|QT&HP=GmWJz z$0SLI+8LsA4X&!`wq@DbWR9mz_MWrq_EC~G2u-q_t`o+Rwd>Fb952{pqu@5s%TV`G zD0~!({Nq>J)Q!p4t*EW%hsolt&0AaidC$mBy!7$s2f^8rGFyQFq}K!&gSskT!T`hv zO&V(K2?UrSfl5+C8!nb-mGbz1Dp7Gb6;U)OTpKvxS~1c(_f()AVmd6Q zW!feBf_T~ujtP~3cG?528>!MmD79&WoB>#C7vM2)f}D0BryT11cHvF*ER;T(I|$B~ zlzG|eJj zP#5gAjA)>NIE!h>mkHFbTkq5)tzzr*8LvLnhhAqLalyT3^*G#^%cGjm86ny^t3^zr zJ2w#0fUk84UiHozEH85*uV;HzHt9fKrhR#w5h;GopkT;`BIHfu+PN5gH}+=qe{d5D z%44rkxXR3Qd~WS>b9s0;y0Wq|de5fTXpWjBtJ?-K*1D~n$&`VBEkW;YqKMC@H$gXunwUr8%*f+nQ$SEL5PZPF%%IGw!N62R0?} z2B>gM3NRsP88MR8p}a&^U3ocW){D+r_P3LVoThYM#ZgE+)CUjy4crDQ``f>M^wp!S z-e>-ya|I(W17g6{b#FQMk7dI%z@e!#^$_zBRrNztA|W!+q zl$Q6uxmlR_zPsEpur>UYA9RfDb{~ZY55pt-;gM~9=lafr-4C|!ya-=^**v?QcoDvK z(gNY)ZiA&j)O#c0+k%co;g9*f>frkBnJKn(RxX4NUPYuLH9Q`6kr(C>bsG54vW=Wc nKBA&pid|R~+=+}a{sRU7M8g$T#c}+qOT`Pg($$Fvz36`d`|^(Z literal 0 HcmV?d00001 diff --git a/sample_project/app/__pycache__/connections.cpython-312.pyc b/sample_project/app/__pycache__/connections.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d18d5c35af8783e7838e6a109521c874bc68058 GIT binary patch literal 5074 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 B(H{T+ literal 0 HcmV?d00001 diff --git a/sample_project/app/__pycache__/decorators.cpython-312.pyc b/sample_project/app/__pycache__/decorators.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18ed9543f1838e9e0cb557a902ce7054ed0ce77e GIT binary patch literal 1061 zcmZ`&O=uHA6rS0?#Qvpet)OCmup%pxgA^4hMQua{NrYCxxDeOfsZFz+S!Xt_EfE41 zntBifr5-$buoT3jSI=H5J$12o(2FOF+k^Jxn{ATPiUae_dvD&p_suu6pW5475R7*} z2kw8w2z?VyV@P!)JOjoOvXPA)G#m2+}r%Z}ozIn~v28u-dQ%Ee|?UHc&l z=s1Wm@~}*}zl;NQhM6AMrJ#qAl1*5iFh*IP5$@3vCqV~!qzD0ac}nJ5;-CW#3rb4cD}bc$HMVS1in6N@s_r;Mk( z*&xwStKM=>pEjL>ZTbWhjU-PEJJd2AK9bs(8V71T2~b5}65TJZE@hu**Aj!P@j=!O z(LEYz5a@#$4g_cHiYrNIQE7TIcxnYzq>60g*HQ()!Ow*FQUfgc5S@*kqzw%U9FUN>aj}FHD+oAM2xto`5>DmtAw@!qYj2_r{=&NsMYN~# zKlu^-0C=+rRGh)`jNj~zXWpA#@5gZP;QO5qDQzDQ-zP9Lh0E{?%83d=b3uaR4&@yx zJeqqXlpy8PB{sXHfj!DRdNl7*=F>N#d7rYb13Q%UXcqKQQ~$&h2q4>qd!8re<0kAN zTu&@-O;Yx3KI{NyZoz@f%27blIdS7l60?9gM=l{uY8|e>u2o}nRm!q0PE~VZuOs2_ zwSb%19^9g8io{y3VQjNu!aTS60U$YN9s-4L3~Gla(cxj0wuLG!M@5}0SvS>6r4}4& zHknrCLNCYl7uSEOtZbVcS!$urhNxwj0|_UUA+vE(?*p9OV}*zB@6v@JOSFRT(7B-7 z7y{S=v3w!Kr#`*I!OWbb$PV!HRiA+8=fr`Ly@{YvOKq%ba)t^b~Ywv%Kv3TH&Eygv)|=;(QpeAL(vma zunXvJ&4O=D%sciP9JGzslQCqQ*xjrhEJ|4>g_1JnzhX{vYGNM!73Y6FTJE%8R9Ty= T$K2ZN!HvYo+w(jz@OS-R#ge|$ literal 0 HcmV?d00001 diff --git a/sample_project/app/base_coordinator.py b/sample_project/app/base_coordinator.py new file mode 100644 index 0000000..e69de29 diff --git a/sample_project/app/common_utils.py b/sample_project/app/common_utils.py new file mode 100644 index 0000000..bd7c7d8 --- /dev/null +++ b/sample_project/app/common_utils.py @@ -0,0 +1,40 @@ +import json +from flask import Response, request + + +def render_success_response(response, msg='', status=1): + body = { + 's': status, + 'm': msg, + 'd': response + } + return Response(json.dumps(body), status=200, content_type='application/json') + + +def render_error_response(msg, status): + body = { + 's': 0, + 'm': msg, + 'd': dict() + } + return Response(json.dumps(body), status=status, content_type='application/json') + + +def extract_params(): + if request.method == 'POST': + if request.content_type == 'application/x-www-form-urlencoded': + params = request.form + elif 'multipart/form-data' in request.content_type: + params = request + else: + params = request.get_json() + return params + else: + params = request.args + parsed_params = dict() + for key, val in dict(params).items(): + if isinstance(val, list) and val: + parsed_params.update({key: val[0]}) + else: + parsed_params.update({key: val}) + return parsed_params diff --git a/sample_project/app/common_utils.pyc b/sample_project/app/common_utils.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f854f560ea803d85c4903d37099d70da06e9c595 GIT binary patch literal 1548 zcmb_cU279T6umQ>q)kk%AoT+kDfkeCnzss~BDUaLEgMBBO4#mSch)Z; zsO&*)o%e7lQ7|#%XrQ&wHqhJ?m?WSh%}cHyDKZ)_;0kE{I3P^*ibk4_0-B;zKmiVb zOqHHN*un^`BsLRkJg@J3h1$LK;d z@{EyFz6rsTsvr&Q{@jxg^F`u+*F}TUAAM#@AJJT;OX-$4H3|`8*rk{~ZSOj6i{+ zeN9y;A!Ml~d?;Z+$3*!9RwoZeSBt8b>~p>=$p&+b5F#G%pe6?pBxe;J8url#%100} z(dLJ3dansL!g^n1rTaEb0pTnAY%#RM1%wcncN@jBj_K-Pe4*=H`W>bW3;^`_fLkKY z?bm}hZWZBq*&nWr$K$n+MU}19RciCNFxI&17?stjPs*tBed#rkk3hVx8-%)Xs?et(YAOOg^JwTHfnVn5%A%hBD1A+?OBi`Ld%)zEF#R`=D4 zx}$HY9@m6uU5@!NjokiB|4diN=)+|;_h9}&74N@37K>Q#X;zpzwa?{S$ce7H5iGac F?cWx)M9u&J literal 0 HcmV?d00001 diff --git a/sample_project/app/connections.py b/sample_project/app/connections.py new file mode 100644 index 0000000..e9cf59d --- /dev/null +++ b/sample_project/app/connections.py @@ -0,0 +1,75 @@ +from decimal import Decimal +from datetime import datetime +import pymysql as PYMYSQL + + +class SqlConnection(object): + + def __init__(self, db_config): + self.db_config = db_config + try: + self.connection = PYMYSQL.connect(**self.db_config) + self.cursor = self.connection.cursor(dictionary=True) + except Exception as e: + self.connection.close() + + @staticmethod + def parsed_db_result(db_data) -> dict: + parsed_db_data = dict() + for key, val in db_data.items(): + if isinstance(val, Decimal): + parsed_db_data.update({key: float(val)}) + elif isinstance(val, datetime): + parsed_db_data.update({key: val.strftime('%Y-%m-%d %H:%M:%S')}) + elif isinstance(val, str) and val == 'NULL': + parsed_db_data.update({key: None}) + else: + parsed_db_data.update({key: val}) + return parsed_db_data + + def reconnect_db(self): + self.connection = PYMYSQL.connect(**self.db_config) + self.cursor = self.connection.cursor(dictionary=True) + + def query_db(self, query, params=None) -> list: + try: + if params: + self.cursor.execute(query, params) + else: + self.cursor.execute(query) + except Exception as e: + self.reconnect_db() + self.cursor.execute(query) + result = self.cursor.fetchall() + return list(map(lambda row: self.parsed_db_result(row), result)) if result else list() + + def query_db_one(self, query, params=None, parsed=True) -> dict: + try: + if params: + self.cursor.execute(query, params) + else: + self.cursor.execute(query) + except Exception as e: + self.reconnect_db() + self.cursor.execute(query) + result = self.cursor.fetchone() + if not result: + return dict() + return self.parsed_db_result(result) if parsed else result + + def write_db(self, query, params=None) -> int: + try: + if params: + self.cursor.execute(query, params) + else: + self.cursor.execute(query) + self.connection.commit() + except Exception as e: + self.reconnect_db() + self.cursor.execute(query) + self.connection.commit() + return self.cursor.lastrowid + + def __del__(self): + self.cursor.close() + self.connection.close() diff --git a/sample_project/app/decorators.py b/sample_project/app/decorators.py new file mode 100644 index 0000000..a0f0998 --- /dev/null +++ b/sample_project/app/decorators.py @@ -0,0 +1,17 @@ +from flask import request +from functools import wraps +from app.common_utils import render_error_response, extract_params + + +def validate_request(func): + + def extract_headers(): + return dict(request.headers) + + @wraps(func) + def decorated_function(*args, **kwargs): + params = extract_params() + headers = extract_headers() + return func(params=params, headers=headers, *args, **kwargs) + + return decorated_function diff --git a/sample_project/app/decorators.pyc b/sample_project/app/decorators.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e2100137a864d1e20bc60b23787cff80399c564 GIT binary patch literal 1004 zcmbtS!EV$r5PeQ|w``%XLV_cRTO_3B#0?=NIPW1VF1bV|@j}`-4z@!<+MbGNd+D$6 zX&m?fn6Xn3=Z#`}W;~vGZ)Vb8M~6RtK6_td`Vu-{({gWUYv>o~04-1o2-XvH33Q4w zje3f120cePhhCsukadP{KzV>>j!m|pIPGuxGC`6*pv|gJqjEkP=43dta&Q@^_K(7S z-zZxtYmKd}a)are^7rXReeqV-z8a*J+SMG9U!~J>&q*M}l>VAx0apSS0++z0z&2s< z-@%r1ft?_5{BZpr_YGOx5pDF^3!EhEz6ns*!QIa|M_c=X&dBGZl7!b~Z1}gi7o_Iz z9Npwjw)tCAk6QJfH9d5y8mu`{wa?`+?I2K%yjDrWB(tdEk@AQnt zf-^>EhEi~Z;I|$7IxydZ^g{|Zl|eNXNA#`f?~>JV9wbY#6cHr%J&a3nNK(N*vF?9S zg^NAFtSIDX*|m-IibgQZE2FrDl0I3iGwzA!(rr8GPUAc*S!L|Tbgl>^&#|b-$F{vg0MO9XRsaA1 literal 0 HcmV?d00001 diff --git a/sample_project/app/exceptions.py b/sample_project/app/exceptions.py new file mode 100644 index 0000000..e69de29 diff --git a/sample_project/app/v1/__init__.py b/sample_project/app/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sample_project/app/v1/__init__.pyc b/sample_project/app/v1/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22a983c571e03eb277e55322edbca22e14864262 GIT binary patch literal 141 zcmZSn%*$1JPbMLm0SXv_v;z&ryk0?N2?tQCO>TZlX-=vg K$bu3eW&i*p10Jye literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/__pycache__/__init__.cpython-312.pyc b/sample_project/app/v1/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fe0e77501cf3d298df155d4ead4d81c93762031 GIT binary patch literal 187 zcmX@j%ge<81SR)m5hzaoV4{`QTaP*8R$jL8B&WH(4F3Kz@DUK;l%q_@C zjV~z5&q_@$iAgLdh$%CSiI30B%PfhH*DI*}#bJ}1pHiBWYFESxw2Bdki$RQ!%#4hT IMa)1J0P^56cK`qY literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/__pycache__/urls.cpython-312.pyc b/sample_project/app/v1/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8753fdc313fa2ba503870dd3c0f6a73a8ec12d7 GIT binary patch literal 1225 zcma)5O-mb56n$?pnS7W`QnjtEB3il$*u)5e6%nFItzb3KC~cTJ#>|VEILQq25jBfq zS9RH4w{DBBy7DIo-DF51c0ed})lEsU-MH#|lMJSyrEf8F-o5vnbMIy5Q!wZU_za^j zg_m9czLAS_m=3u32myEx1Ry{OlwlS^f+>kAyRx*6U6Q-ZWElu3fS^Dl&k@z;X1#(t z>qFksZAbL#jeG)A!&gL??p#G3RJ!M&tGD1e!kv(F>~$OFuWLQYu{={Zr-x+*8EAd%uXiF{5Gu{432g%qH+OfFmCgon9ui)``UL_y8)&DnJQBgtM#WsS#8>+;shJ>u1 zg|4-Da+>X7v7M;11)n`RvHAcmur#<_o1f;$IyFwhOQ>-x6_ixPD&mqz+ty`;OE0Zt z=AVuv7CA+d^?Z?go>xUh*SJnoiYk{-Ugz*ITs6+&hP0@%cj=ue%K~m}RvpGR!Q&}RQE%l!A^?-&_znm=z;p+m`RVFv7=3P++@d_?3Bq)oeVYDCoMOC z;a|W7sg@rE9~?Yu21d=m=wYl8nArDqneCe4*vaElqrS$S%EVy(y5#Ds`tmx-@||p# W`Q5W%@4-ULgAIQJ8dB;I9{CSA@Hf){ literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/urls.py b/sample_project/app/v1/urls.py new file mode 100644 index 0000000..cfffca3 --- /dev/null +++ b/sample_project/app/v1/urls.py @@ -0,0 +1,32 @@ +from flask import Blueprint +from app.v1.users import views as sample_subapp_views +from app.v1.users.views1 import User_Book_API + + +v1 = Blueprint('v1', __name__) + + +# subapp1 urls +sample_subapp_prefix = '/users' + +v1.add_url_rule(sample_subapp_prefix + '/getUserName', view_func=sample_subapp_views.GetUserName.as_view('endpoint_1')) + + +v1.add_url_rule( + sample_subapp_prefix + '/getUserDetails', + view_func=sample_subapp_views.GetUserDetails.as_view('endpoint_2') +) + +user_view = User_Book_API.as_view('user_book_api') + +v1.add_url_rule(sample_subapp_prefix + '/books', view_func=user_view, methods=['GET', "POST"]) + +v1.add_url_rule(sample_subapp_prefix + '/books', view_func=user_view, methods=['PUT','DELETE']) + +v1.add_url_rule( + sample_subapp_prefix + '/books/', + view_func=user_view, + methods=['GET'] +) + + diff --git a/sample_project/app/v1/urls.pyc b/sample_project/app/v1/urls.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f66f57a7cdb109a8ec4bff2761679e51eedea34 GIT binary patch literal 485 zcmZWk%SyyR5bQ~^*@ub?3ZA{?v>~2FL)wkz(Y8-c&u>u4vr8Bw4lv zzLN62H->@ zvv#pf7K7$$$Z^6|%4%Dorhd(Ry^k>Ay4DR_X}yv>?)2YH+u^2o+Y1|``>xVmU!fEC zyFXdS%rhEm`k}?CMaBBXiJAH? z`N^fZsd*(JUT#57YJ5RaepYI7iGE^1fqt2xekoXGe0*kJW=VX!UO{CE2haeU-29Z% NoK!oIH6=jI006%GAfEsL literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/users/__pycache__/__init__.cpython-312.pyc b/sample_project/app/v1/users/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59b5b136a40e32cb1b25b98648f4da9ad608dbf3 GIT binary patch literal 193 zcmX@j%ge<81UAzYlR)%i5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!N^rJ{2`x@7Dvrs? z&(E%k@y|hzaoV4{`QTaP*8R$jL8B&WH(4F3Kz@DUK;l%q_@C zjV~z5&q_@$iAgLdh$%CSDFvGqAD@|*SrQ+wS5Wzj!zMRBr8Fniu80+AAtMkMgBTx~ L85tRin1L(+3F0)8 literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/users/__pycache__/service.cpython-312.pyc b/sample_project/app/v1/users/__pycache__/service.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5600a9550db04db83f0c840ec33ca7e6cea04ccf GIT binary patch literal 762 zcmZ`%L2DCH5T5sT)2uZyRl#_Wx*i(XOQF{yh0=l+Bo(3{;lX3O`)aq{WS{Tt29oCB zA%_Zz$NCqB5kDRxsxqPiD!iM?jZ^(4`@nK-UT>qCK=cJHOS*_BN$l z>j*W70ufk$i5PX0PhEsl7?Uw@j7l3*%;vAa5IoZMXucqQ<@a=6JrI5#4iB!(^PK!2#<8 zDw3&Y+V9C&aH*0*5v0tQk`2~aR%juZJyzu~cQ}vwQOfzK`R|ge^MV;gFCn~z^Lr0Y z?Dsd%o69HmhuRdsL2$JlCRevu#sqHxhlX;^Lb6Xg;L&zo)mab-tvym~j;@MaZ4_PQ zAm+{2BIP>u(wgXN{FJXGNJmsqIzF z0s4MVaGo!6-b=y^kH+&F=WjAUE-UH=a#bDSGZcNraLOE}05h_Nhg4c6 o(Qw+hSiv=e{OP}R9+%H;s5@9FL>d_Uv@k(Hxttro_fyA{&{g7wJ()& zVb7dyjQw1QgFalL&H*8hlh8 zlw~;PJfnE$8O5ivk6ey95wfj*um+l}Z8K6N_#IY>u$K3-YK|MqrO>;yj3f#fZ}9i`PI({Pb9BGmo%vx#*IR9WKta> z+LW3cQt1uT$R$6yG%`APK|VX2%;|=i8BfMDM9Y~pNz>V!uBLLtn1D@5rgORE)Zrvf zk0z(!Ea*UP#tJxtSGSGqghBoAqwj&3W7hplxVO^QRq5DW>Dc+gBZS4d;g@a9j$JE# z_xsku?>syXV(wza*IDAbHlPi&Y2#}fy3q?ID~!q{ScOS&s!L(#nHsPX{0tXyS-$hC zi3^RTvudV_F6@xu;TMA6#wduDrt>PYMeb2`h>7MFP!CgWfF#tJ6=p@V=08kPD2la~ zaHec5;vyonu)43SW{R3=Q_G~%Ijs&vf=wfCi>InSW{J5pNoT3$9#_)`Y`7S)%hsF*SZ(Vw{uoLc zXN)JDaH+h)HJ!8oc~?_jggoDrch3kB(F#_#Wk@yCnocuy2ZaIZt_=6qCNR_v8{Kp( zFqpV{J5At8x1*u(Q;E^egvT*M)L$xa1zTF}(?32ow9ZnQsBu zR_staJb;I50vFek6t;Fmv;2RkQ9s04!Ngs(Q@vlYC{B24*2cG9?p9p0QjsqTW8AE# z=-v{dQqfbp>i}fpb|8gv_e8KUPEAwz8wcQu2sA-ZP(-c1x;VB&+_a?HJneC}E#K6$ zySe9x6tg%@v3R`23hxfb;?XOk@^EZ)qz-ZUfTkRhu{&%^a7_aa9I_oYE9kk%xy0yO4q83{fFIQRHekGM3l%nJ>Kr z?+8l*e5No0ac)v1OdIP2854ZS$YwRul87;#fniMBGsyc;1|6V#kT+5Eqd0`(7>W;3 ze1HPoh8zK5i4Z42ctkNAbeIFB!ybGNf{#Lbi|3#bXF>k}0w^TZ^(54{7V0a9-dx}- zf$-Aji=QtmcYm?KRYL7cw-#@$isew>0{?BO_wFyDM!0jO=YG$x_biC(A`||YT@Wfe zI+m5?-3#J#DYz6|3@+za$G(yFRV4qCZ_#%z@Z1+(I=y&$HT_p#-_!QptHY)JKP&ZI zDz{%Q`7dJ||Dyk15UYC^z4!buqg797@2OJv>2l~yNjmf6a6h5Q|ES%sfziVLtDg*= z9gQ|TFCHDW9q;5mDt~q%dL=4r3g`{DBgX-ZRlmyTFz(;%SL6hg6Aa9^M7k@NH(#R& zunl8_KZ5u#aQ;$c+V*UL^b-j5u2t^;1N7St&%jcgv=z_%0Ji}9&`^Ut@NLt$K@|XJ zoH6SxQoECZk@&6nqFyd25HlBDW9+QEC~U|9DNCZ7cMtOfS0D&@f5 z1@0fAaP@{iR_gh%+m8%rw$L;&-VccQt*!<&YM-RJ9gk>hbSSZ zi`w5pC_&%1!+JZ=cbu*f))T`hT@j3yI7We#`Hg9e)5bt@{D=+ x8MDj&ANe~I{9X#O-7nr?*x-EVB`2^amJhyU;PW#08OxqymlOYDY{lM-e*;(w>68Ef literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/users/__pycache__/views1.cpython-312.pyc b/sample_project/app/v1/users/__pycache__/views1.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20ea4aa8e29340bf96b4c380022c055fe5029463 GIT binary patch literal 4757 zcmc&&-E$My72j{IzGcgiF%I!M#>7g%!6{8b3U-Mt2U8<6$WW@PXoPkJGApgPyE3(A zJ@o?*a^k7+&>6ckdElWB&F~NOk(bWU_GPJn}kS+q)g<++~#=vODLAd#o}qd*fcwd5ehqC_?hx zt4&H06!8fmx^5AoTO#k#wmR-#;=`V2xDqB!*I7xsrid4_(oLuZ7E^LoOleXQNjHj; zs)4Q-NqJF1Nwt_xOR5SjYC*}X5;XZ@#Ve-@g|V1~7PD!raV)4xKATy>#pV#+*bRA7 z$>*iCmR0i6bZvds7d|1pvh8sYa6+U=!5=L$pEJvZMp`x?7N~lu`7N?pLMQ$}{+3)O zbuvbTxv1%sm2^tJrl^|9AVtwkO1u(gOvcs}RSB7VA*HG}6(pKGY&CTyrAl8AVajwA zmU2t#4cT<0?X`l=DPBoJEt9=!x@ub3fr=L+2rn*Aew4TXL#hc`QLdK~b9reBWf!Hy zl%!tQltSX%?A-k1Y2nmNq97|;`dT8EM%jXqg-Q>rx+vKTpGtqQ?6g)fwAL~s9;H_=8yt}$TE>k+SfGu`BjdofmR}Sm+LLD_N zb|QJN<_jbN7LJytTCp(-qdDuXI#cfz!@W9Ddxpzzk@RgbCzS6T)K!<1(^=%*HXHuNhY6>z~xf1jPPmI zs!Co8b0(uoa>k^xqRC*dMg!P@wcHQ+p{#Ns1nWV)xQ)IlX{D~Vmp=-ser&q}Vug6@ zfBm!Hl$mPRYn%NW{dW$OxvJY+{^+Tvdp)`uHTsV}@{ED6Zq9AYReFZYk;lRPTR*-t zZg>X2;RtWgHX6U*eV={gnXU%=HYYYFD#3&0sj5F%)*tu2ao1_QbHW%nS?L|WPaD0H zMqm<;aqP}X!y}+RSVX$P7Eo#MN_mGjc4Cso`vo59=p~JJ3_jf1f~vpkWm=~YrPHcc zYj|n9pS1c&V`fHY7WVW!kzM9=b^#*H&PV5Tm@h-McrmkpU*nFaJ{Nd7yAasX2-Rf= z=!3iUE&Z6i+goBHdE-<>9%CcyjGC;L)nv)!QbhWreqAV|kDQiyCf!#fs6`%bDRuFa}9==Q-oH~hP7mA&935UZKMf;jWwnK z(W}(m4mPYi45sQIL146nzVr_~^bb`0g8;ff&nCaYZ}nCJgJl*&aNowht&vLCP?`J6 z-}C!v43rt;t!bnGlS=Tk;W_>FZnOqIhOWGC-M8wyUEC_(y||Ts#2=~ho^|)Cd(B%7 zz5ZqB(8JK7vKw1@Ry}Jz+~`_$t$Duohm4_#2S0n*d#U38h4IVFhX1m`U*3(%MvMpn z|#{{bpHnz;s|dP9mJ4n zBFN^5dCVIxx=`E|mO(WEmg>Jj>>>(p*ZQT^OSi?(E|;nA$r=xajNn)@bSjqyNK7@c5s8WCS5U7{^2HqMI$JF*I)UPE`Cqy+365BL*MYgKhr$ zL+1cg8%w}_rNxVxm#_p48R%XS9=HaWgvyW*=b4TS!RlNKL(s2a2&N-La5aW_MI?u{ z?#Uo63_*#Gmfc%%9@f8S@9#DGF8&F-YYbuWLeN6!%#@H-8yN$7ADq85Fa`NGut781 z?f`rA0hqR8U6f>LC)Ux2*yuQju%n4v(}A-LNFkab-a;(;2^gw4`K!Uzj_aH~a;c|1 zvfJ8U;Vw86*#+6|(B{a-2;{k=Wye?kPz@s|jQ*3AAkKt?lZI!qGbrD~nC!c~|NjTa zFd2ngBcDv>Q#mP_G+oJLP7#Z6^-Y?dWb#HaCEG1Fc^-oUKqs)k6o$I7z?r>ufC%3< zEU_O7D%Rg3wkaPw`25W-Hc37|)Xz?n+b8-!+P!dxaKLnDAXU3QYTc_5zJHoNxNwh( zQd&VNO+hMRurh#^IJr~u$)c8(RfO*lW)D^`j*a4kO&tY+f9gQ^f@HGRz;>31^ElIQ z4^jW6Lq(Xg5r%@DMOr&(-_;BLgnc68Xa?-?6-LF5_6<#vb%7 literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/users/coordinator.py b/sample_project/app/v1/users/coordinator.py new file mode 100644 index 0000000..e69de29 diff --git a/sample_project/app/v1/users/service.py b/sample_project/app/v1/users/service.py new file mode 100644 index 0000000..23a6947 --- /dev/null +++ b/sample_project/app/v1/users/service.py @@ -0,0 +1,8 @@ +class SubApp1Service: + + def __init__(self, params, headers): + self.params = params + self.headers = headers + + def get_static_api_response(self): + return self.params, 'success' diff --git a/sample_project/app/v1/users/service.pyc b/sample_project/app/v1/users/service.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2549365db65e1dc1805c61f79d62a4d5afcfe154 GIT binary patch literal 775 zcmb_Z%}&EG40hUSuu0;NPMkqq1mi*KA$siLKYm}P?Ro^4yUN<^tsbRV_L^qV>d?H zzFQmZQe|zrou@-M87928AMTXyOIf$Ilakqx*+5K$W;V9NBr{5Aj5Wz7V8zODDf12E zptV8tBl$i<#E3_1mbdt3oJ6Nwt);TH>Bg_X8p)Q+Huz{gO; zlO01d13!miKG`#967UNs7Glo<4Qvfm3H$`O1Nd4TLA8KQdL-%VKk}qTG(Hw_hJ4vp zUuwLWe5c|YT~k+%(f0U#K;kL#LLxoxE9@-|Wr;)*r>@--P6wXJfz5F7zUx*S?8mx9 zek!g{$e#)Owe$GUa3uZ@vPhF6XrCBq=L%Tbjv?QKq@_}`kfr;%EJ{T%z`?*Fg1ZQ= zjJEhKg4;RVCcqIK=5R$>`(hg>nGT8d{P2%9Y@qI9lz zo>&8y=%jlJao6uC#IJ9Hs?`3YBOLZZklUfcg&^p)Xqi$$8M!+9*p`FGJ*(xr25r~3 zS6Fi9x-J`6*$_^SG8tNSKUnb#^e3{B0)*(LNmXGjZS7w8wKmMuTHjWKWVE@?IX@Bc zAIBqr$+fOBLP}Z^ty6^+roC+(T`vRbTztTKE2N`kg=O12ZhH!#STCCT%hvmLZwIa$ o3Nzs6_mOe63>++l2)#{VgrW4KHWT=JGcop7`64Cs)Py(w3+jK=l>h($ literal 0 HcmV?d00001 diff --git a/sample_project/app/v1/users/views1.py b/sample_project/app/v1/users/views1.py new file mode 100644 index 0000000..2c1284b --- /dev/null +++ b/sample_project/app/v1/users/views1.py @@ -0,0 +1,113 @@ +from flask.views import MethodView +from app.decorators import validate_request +from app.common_utils import render_success_response +from app.v1.users.service import SubApp1Service +from flask import jsonify +from flask import request +from app.connections import SqlConnection +import pymysql + + + + +# Database connection +def db_connection(): + db_config = { + 'host': 'localhost', + 'user': 'root', + 'password': 'root', + 'database': 'db' + } + connection = pymysql.connect(**db_config) + return(connection) +db_connection() + + +class User_Book_API(MethodView): + def get(self, id=None): + conn = db_connection() + cursor = conn.cursor() + if id is None: + cursor.execute("SELECT * FROM books") + users = cursor.fetchall() + return jsonify(users) + else: + cursor.execute("SELECT * FROM books WHERE id = %s", (id,)) + user = cursor.fetchone() + if user is None: + return jsonify({"message": "books not found"}) + return jsonify(user) + + + def post(self): + data = request.get_json() + title = data.get('title') + author = data.get('author') + + if not title or not author: + return jsonify({"message": "title and author are required"}) + + conn = db_connection() + cursor = conn.cursor() + query = "INSERT INTO books (title,author) VALUES (%s, %s)" + cursor.execute(query, (title,author)) + conn.commit() + new_user_id = cursor.lastrowid + cursor.close() + conn.close() + + return jsonify({"message": "books created successfully", "user_id": new_user_id}) + + def put(self): + data = request.get_json() + id = data.get('id') + title = data.get('title') + author = data.get('author') + + if not title or not author: + return jsonify({"message": "Title and author are required"}) + + conn = db_connection() + cursor = conn.cursor() + query = "UPDATE books SET title = %s, author = %s WHERE id = %s" + values = (title, author, id) + cursor.execute(query, values) + conn.commit() + + if cursor.rowcount == 0: + cursor.close() + conn.close() + return jsonify({"message": "Book not found"}) + + cursor.close() + conn.close() + + return jsonify({"message": "Book updated successfully"}) + + def delete(self): + data = request.get_json() + book_id = data.get('id') + + if not book_id: + return jsonify({"message": "Book ID is required"}) + + conn = db_connection() + cursor = conn.cursor() + + query = "DELETE FROM books WHERE id = %s" + values = (book_id,) + + cursor.execute(query, values) + conn.commit() + + if cursor.rowcount == 0: + cursor.close() + conn.close() + return jsonify({"message": "Book not found"}) + + cursor.close() + conn.close() + + return jsonify({"message": "Book deleted successfully"}), 200 + + diff --git a/sample_project/config.py b/sample_project/config.py new file mode 100644 index 0000000..e10ce3d --- /dev/null +++ b/sample_project/config.py @@ -0,0 +1,3 @@ +class Config: + + VERSIONS_ALLOWED = ['1'] diff --git a/sample_project/config.pyc b/sample_project/config.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee7d4f584114e59009871d4ddffc8845727b6f80 GIT binary patch literal 357 zcmZSn%*(}hUnU`$0ScIbv;zQaAnHYjKSb%aRY(T;} zKQApa9j=)XDC7jh#ezU0m4P9O5oAO7;1p5Dd7MT@$q?yxvBB- zC0t-mZhlH>4u~rN