From 67b84e194ce2f050743491533cc9941aeb38eb38 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 26 Apr 2022 11:19:01 +0900 Subject: [PATCH 001/236] first commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 최초 코드 등록 --- .DS_Store | Bin 0 -> 6148 bytes API-ROUTER/.vscode/settings.json | 24 +++++++ API-ROUTER/ApiRoute.py | 68 ++++++++++++++++++ API-ROUTER/ConnectManager/DataBaseUtil.py | 37 ++++++++++ API-ROUTER/ConnectManager/PostgreManager.py | 68 ++++++++++++++++++ API-ROUTER/ConnectManager/RemoteCmd.py | 22 ++++++ API-ROUTER/ConnectManager/__init__.py | 3 + .../__pycache__/DataBaseUtil.cpython-36.pyc | Bin 0 -> 2134 bytes .../__pycache__/DataBaseUtil.cpython-38.pyc | Bin 0 -> 2157 bytes .../__pycache__/PostgreManager.cpython-36.pyc | Bin 0 -> 3223 bytes .../__pycache__/PostgreManager.cpython-38.pyc | Bin 0 -> 3310 bytes .../__pycache__/RemoteCmd.cpython-36.pyc | Bin 0 -> 1229 bytes .../__pycache__/RemoteCmd.cpython-38.pyc | Bin 0 -> 1259 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 220 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 228 bytes API-ROUTER/Utils/CommonUtil.py | 18 +++++ API-ROUTER/Utils/__init__.py | 1 + .../__pycache__/CommonUtil.cpython-36.pyc | Bin 0 -> 613 bytes .../__pycache__/CommonUtil.cpython-38.pyc | Bin 0 -> 630 bytes .../Utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 162 bytes .../Utils/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 170 bytes .../__pycache__/ApiRoute.cpython-36.pyc | Bin 0 -> 2996 bytes API-ROUTER/__pycache__/main.cpython-36.pyc | Bin 0 -> 819 bytes API-ROUTER/__pycache__/server.cpython-36.pyc | Bin 0 -> 813 bytes API-ROUTER/conf/config.ini | 16 +++++ API-ROUTER/conf/logging.conf | 36 ++++++++++ API-ROUTER/server.py | 27 +++++++ API-SERVICE/README.md | 1 + 28 files changed, 321 insertions(+) create mode 100644 .DS_Store create mode 100644 API-ROUTER/.vscode/settings.json create mode 100644 API-ROUTER/ApiRoute.py create mode 100644 API-ROUTER/ConnectManager/DataBaseUtil.py create mode 100644 API-ROUTER/ConnectManager/PostgreManager.py create mode 100644 API-ROUTER/ConnectManager/RemoteCmd.py create mode 100644 API-ROUTER/ConnectManager/__init__.py create mode 100644 API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc create mode 100644 API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-38.pyc create mode 100644 API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc create mode 100644 API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-38.pyc create mode 100644 API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-36.pyc create mode 100644 API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-38.pyc create mode 100644 API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc create mode 100644 API-ROUTER/ConnectManager/__pycache__/__init__.cpython-38.pyc create mode 100644 API-ROUTER/Utils/CommonUtil.py create mode 100644 API-ROUTER/Utils/__init__.py create mode 100644 API-ROUTER/Utils/__pycache__/CommonUtil.cpython-36.pyc create mode 100644 API-ROUTER/Utils/__pycache__/CommonUtil.cpython-38.pyc create mode 100644 API-ROUTER/Utils/__pycache__/__init__.cpython-36.pyc create mode 100644 API-ROUTER/Utils/__pycache__/__init__.cpython-38.pyc create mode 100644 API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc create mode 100644 API-ROUTER/__pycache__/main.cpython-36.pyc create mode 100644 API-ROUTER/__pycache__/server.cpython-36.pyc create mode 100644 API-ROUTER/conf/config.ini create mode 100644 API-ROUTER/conf/logging.conf create mode 100644 API-ROUTER/server.py create mode 100644 API-SERVICE/README.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8d4cdb0392b595db7cee330e2e5d97616b1a2335 GIT binary patch literal 6148 zcmeHKO-lnY5Pi{tr3LXQp7syus;GF}>Q)f^!d0);t)(h$w`^NMPy6G<-{qSmElBOb z9z=8oW?nKMN%ldK4FGd6y59m;0FtO#++suYhLyM-S6 zvhIdoS%a(3IHJsuGdBO4&-|L_`ex2sop6=dlkkSz9-`i9ZzavF+h@jDW@L7=I8HlR z%Cz$G)9%rG^{vMC%89DNKN1|@>n=zgkoGN(Ulti#4xU${=nx&9t(%A9L7IBjGx)~7mBg7 zbNs-j!$c0%Dg(;EX9gBscSY|1`t0}r=OXPX1IoakV!)K*BtGCL`MY)M None: + self.db_type = db_type + self.db_info = db_info + + self.router = APIRouter() + self.set_route() + + def set_route(self) -> None: + self.router.add_api_route("/api/get_all_info", self.get_all_api_info, methods=["GET"]) + self.router.add_api_route("/api/get_info", self.get_api_info, methods=["GET"]) + self.router.add_api_route("/api/set_info", self.set_api_info, methods=["POST"]) + self.router.add_api_route("/api/del_info", self.del_api_info, methods=["POST"]) + self.router.add_api_route("/api/route/{api_name}", self.route_api, methods=["POST"]) + + def get_all_api_info(self) -> Dict: + return "" + + def get_api_info(self, api_name:str) -> Dict: + postgres = PostgreManager(host=self.db_info["host"], port=self.db_info["port"], + user=self.db_info["user"], password=self.db_info["password"], + database=self.db_info["database"], schema=self.db_info["schema"]) + + info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + api_info = postgres.select(info_query) + + + params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]} WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + api_params = postgres.select(params_query) + + return api_info + + def set_api_info(self, api_info:ApiInfo) -> Dict: + return "" + + def del_api_info(self, api_name:str) -> Dict: + return "" + + def route_api(self, api_name:str) -> Dict: + return "" + diff --git a/API-ROUTER/ConnectManager/DataBaseUtil.py b/API-ROUTER/ConnectManager/DataBaseUtil.py new file mode 100644 index 00000000..5a2e872a --- /dev/null +++ b/API-ROUTER/ConnectManager/DataBaseUtil.py @@ -0,0 +1,37 @@ +import logging +from typing import List, Dict + +logger = logging.getLogger() + + +def convert_data(data) -> str: + return f'\'{str(data)}\'' + + +def make_table_info_query(db: str, table: str) -> str: + sql = f'SELECT * FROM information_schema.columns WHERE table_schema = {convert_data(db)} AND table_name = {convert_data(table)}' + return sql + + +def make_insert_query(table: str, into_info: List[Dict]) -> str: + columns = into_info[0].keys() + values = [ + f'( {",".join(map(convert_data, info.values()))} )' for info in into_info] + sql = f'INSERT INTO {table} ( {",".join(columns)} ) VALUES {",".join(values)};' + return sql + + +def make_update_query(table: str, set_info: Dict, where_info: Dict) -> str: + set_list = [ + f'{column} = {convert_data(value)}' for column, value in set_info.items()] + where_list = [ + f'{column} = {convert_data(value)}' for column, value in where_info.items()] + sql = f'UPDATE {table} SET {",".join(set_list)} WHERE {",".join(where_list)};' + return sql + + +def make_delete_query(table, where_info: Dict) -> str: + where_list = [ + f'{column} = {convert_data(value)}' for column, value in where_info.items()] + sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' + return sql diff --git a/API-ROUTER/ConnectManager/PostgreManager.py b/API-ROUTER/ConnectManager/PostgreManager.py new file mode 100644 index 00000000..449ab377 --- /dev/null +++ b/API-ROUTER/ConnectManager/PostgreManager.py @@ -0,0 +1,68 @@ +import logging +from typing import List, Dict +import psycopg2 + +from .DataBaseUtil import make_insert_query, make_update_query, make_delete_query + +logger = logging.getLogger() + + +class PostgreManager: + def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: + self.host = host + self.port = port + self.user = user + self.password = password + self.database = database + self.schema = schema + self.conn = self.connect() + self.cursor = self.conn.cursor() + + def connect(self): + conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, + password=self.password, database=self.database) + logger.info("PostgreManager Connect.") + return conn + + def execute(self, sql: str) -> None: + print(sql) + result = self.cursor.execute(sql) + self.conn.commit() + logger.info(f'PostgreManager Execute Result. (row count : {result})') + + def select(self, sql: str, count: int = None) -> List[Dict]: + self.execute(sql) + column_names = [desc[0] for desc in self.cursor.description] + if count == None: + rows = self.cursor.fetchall() + else: + rows = self.cursor.fetchmany(count) + logger.debug(f'PostgreManager Select Execute. ({sql})') + + result = [] + for row in rows: + result.append(dict(zip(column_names, row))) + return result + + def insert(self, table: str, into_info: List[Dict]) -> None: + sql = make_insert_query(f"{self.schema}.{table}", into_info) + self.execute(sql) + logger.info(f'PostgreManager Insert Execute. ({sql})') + + def update(self, table: str, set_info: Dict, where_info: Dict) -> None: + sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) + self.execute(sql) + logger.debug(f'PostgreManager Update Execute. ({sql})') + + def delete(self, table: str, where_info: Dict) -> None: + sql = make_delete_query(f"{self.schema}.{table}", where_info) + self.execute(sql) + + logger.debug(f'PostgreManager Delete Execute. ({sql})') + + def commit(self): + self.conn.commit() + + def __del__(self) -> None: + self.cursor.close() + self.conn.close() diff --git a/API-ROUTER/ConnectManager/RemoteCmd.py b/API-ROUTER/ConnectManager/RemoteCmd.py new file mode 100644 index 00000000..23c0ee53 --- /dev/null +++ b/API-ROUTER/ConnectManager/RemoteCmd.py @@ -0,0 +1,22 @@ +import paramiko + + +class RemoteCmd: + def __init__(self, ip: str, port: int, id: str, password: str) -> None: + self.ssh = self.remote_connect(ip, port, id, password) + + def remote_connect(self, ip: str, port: int, id: str, password: str) -> paramiko.SSHClient: + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(ip, port=port, username=id, password=password) + return ssh + + def cmd_exec(self, cmd: str) -> str: + _, stdout, _ = self.ssh.exec_command(cmd) + lines = stdout.readlines() + resultData = ''.join(lines) + + return resultData + + def __del__(self): + self.ssh.close() diff --git a/API-ROUTER/ConnectManager/__init__.py b/API-ROUTER/ConnectManager/__init__.py new file mode 100644 index 00000000..34c7045d --- /dev/null +++ b/API-ROUTER/ConnectManager/__init__.py @@ -0,0 +1,3 @@ +from .DataBaseUtil import * +from .PostgreManager import * +from .RemoteCmd import * diff --git a/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b61b034d74b255db88587fdedb0608bc5bb9c3a GIT binary patch literal 2134 zcmcgtTW=dh6rRiO`VuEiLMd&zEd@jtL5#!`B1E{c5tR}b#ZD_(plGu*xa;o4nOzrU zW%J_x0iKC}0Doy;c|!0D^29l_jtum1T(#1Q9eKJsep;L)K#Z?B^8D+pBufBwD2daOD;;H44N{` zndEl}Xe*$tiZ#$yK+EB0iQ1(h*2M?SCD2LZer~#`VpMuNvdElgqym*5mko0 zSB?5fB2`lN&b)fF^{9RnpZR?m)p5_K!&s$mP(O&HNP6j!8@YX{>P=X>?Ru1sr}DJ85bd6xkEFW5GYP(l z(A!jP!07Pej*1_p@u~K3<<0nB43U2GeGtY}&^u&6rewkd6Z|=7ngHH}3u83~nkw78Yc z_%G}nZ{iu-v9IVS8M7V7$c;hlM>!AOp@uTIp1HwDCcsFx`&n-2*CC1iiPKeeF95E3 zaX8$64b7u37Rf%;;qxP)T3Uo|cQ1%NH%RtDxIU599<)2HCcVA*gJe3!T+JZI5)B#sFK+a2Z{1w_(>)5UOmv6n`2pULm7ojz_K|i4C zF365i;8;#%s$tBlKRuC3ES2T#mG_LnR(74|Ho=qs^2&OxMtkIY*5Ty{sWtQKBW4Tp?DK|Bq{|b@11zRu# ztJsZ(klpg-*!|~Ts<*)h^$vEc7-|QxTwFU?I{B{I=(g<4v^%ZtoHC_(4Nz~uPGF4b zr!t&V#wsZDCf?4g?v{tW09ixh+q5*8Bu&fjiS_m|EtFYliUQ#J6 zNWCO~py%3veDq)9wWp%}1-`U1OWKiRB$omu!R74ia(DLoz8Q8G7pnxWzrJi7{B02O z2X^K!6FOhRll%&eAc6*@hi?|pko8!|dz=zUX2vP$nbH#cmjr*csbmbs2v+(Q7nP4s{1#NnOGJp&|eU=L!8w=AqLWRSZ3__ zNtzi=-%A~uSxTlO6?qhgiwkWI&o(^CGBkpwWI~?N-@!WJuo`Qh)4T9BPf`UhL%6AX zMpPN*o;T{rs6-KJW)Js^gr`hp|fCpuQbPk@V7CH*yD3)tfMM-%VsU z^@EM!QC9Qf=&4j`AHOMK6bu?d72@sijERHHOx=S(D!`q1dK72Cg@GgRI{0_MmIS@pW5H-J>0eZ=%-kPZtBNTKk**R(B1IjU=&7){r$JC zy_T)_Er#rS_ITB9w3~%DazhEevx`X80tBFH&;V42fd(jVD(Jfvx=&<3Ul8~0AC9Ct z!fz5h7ooSQx&d#8=WA5_D2@9%!fWToGb8@`-1otlP(jzojGU4w6HM^u;AsMhQ!b1N z0V+*l&FF-kBCREDb8VMTN>gKE06LYnLM>bo2V#xEci>6Zp&5WQezd0)1wJDwP1%Ib z_$hgougp&PZ|o3P<72jNpVQCA%yt|jGk%W!DC40!)U;;SQ#TmN1Qg0PzQ_!HN<7dU zUe(P2wCly;aBCH}M-VK^$oP&1(vLuRX%6DXW)ORBkZgf*@y)pQpxtTh?b{F9`w#6g zx7Tg80!xgmwqrkP>~vcli0>=RktgyfQMiX=YUmZFK~^f1pl(7>En)Lgge%tq!4DHu z0HHMs!Tw{hkEwba`i_yaT25rDNzJOiJeEq%5sYHKxGXR(3EqK@pn@T(NO3_d*B*B1 zF|JUZ)0UnVQ>|z*29*lr?w?9<2)=M?=Va`Dz~jYozKu*i^@<-bd>yhdM0e=S5hh z?sv_`e#;)4cBi$Ui{`vk)B|-J=AN<4^ivrYqOo$(VEIw+LetY6qYy7RM*B4inuh?_ z*JYT1ek{;W-hzrgff0x49j+Hbog6Sh7laKkuIUAef-VH`&$%oF)`>ag6Rh#2_Wyu0 zO6vvAc^V5D$k)+7t~H@z10A|vD_laSu_i)&1l=ODa$xS@_^Weuezy-W8vRc%kcRqu z7uTz0r63**{AiF_>Cq703hSW4G|4IhneM=-RGEddq*9nVx~l2&t+QQ|rB|ENn^vCw e6_hu_Sd0R>g#|akaLaU=mHCpfYQ9mvS@{<*B*=FF literal 0 HcmV?d00001 diff --git a/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fa8ae388c601da35d3cd8f338a7ef62a703d384 GIT binary patch literal 3223 zcmb_eTW=dh6rS0e*N$^(nx;w1#Rwr`(b}a21Sl${4MLTQsah(~N|oj8OdPvwuQR(= zo5+50UU}fT={x)(9_E#&{)ImAomsnyFXf4~=J@QH*|~h@J7>kWPJI%e-JY)Z` zbB_)E4q8%!5KQoh1@v!4ykiAc#|~_s*`2@v_Koff2G{XgIj_JKrV1pMNEAsdlURY!xiIc_Wr*F9qP?)Ml33A6 z5*h9P_s4%RwShU_>{burj;snPdsUqDS<-8SvKsD%)$bqPzy9dwC%^pgsCqA3XN*;K z8oEmFNc(m0sFl|1w9RABKyF275;1bq|a{vvv>{{7<=ZR+*FO3gWDd*wiq$Cs?jIZ$(j^l669DnROM5dh_Mrsv9LqdQa$_NgcLE;N2 zDb8q43PgYh^r1ne?Ti>_soVAhA6PGuGhW#=&Jf719bcPXwDiLZ8TM0IdL)y6lvYZg zs`z;+jQicR^lj-4FM~R6Pqn(KTF0t7C$sV9n4nkO>9kU{g)X%XQMNM>uFzP71I;-L z#{1~IiZ%wr=fy=}jMu@0W-ixkDZ_-Ypof^@p&3kGKmi-Zs35+r6M6?WyA0Ua152=H zmbzhV_J|FgZqew@0E`(r1~GfUftZsa)?`EXMQPydvZq@^Z{W6bsh{Q%w#cO;gZ<%e zzp{Y~rn$8#%95iVqa{RxCbsdkIOGGQ!EN@3b?8teE26kT2JW^hH?$*U63#&Nrmzzs zMFZsC?T=|bVuQzy%hNurAhZ$km7ORK8&Pr_%H*r#()7^MV>5K(b#gbkqFhkqmCVIU zW+$y)+KRh@zc179pbC*(jtDGo_i$B-Tk1`TrQP7=m3> zB`tt}ve!Zg&U513r_ZXdZ_Z8+PFQoC$VR3mbB4@^;#-N`iPqRnW3 VCp-FW@=HS7@==!f)`sQV{{o9##E$>~ literal 0 HcmV?d00001 diff --git a/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-38.pyc b/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..176a8d5af5527be9fe9f385ab4c11325d8a6277f GIT binary patch literal 3310 zcmb`K&uZ*`XimJ9k6hTmhRHBLq4lALRvojcnwbz+l zizZs1l4}n=6C~$W{-wG0#J|9${k~Z{KkU#`C)(%PH?#BOGw;25c{V#+VugiPd-YSDa{H#Zad{AF79jA^Qq#mCEiJlS6ml7(Eb(31A?pWwne zsL;0dX?tezp(}0ZD+iYFMHPBaT*Vg^>C5V6CTa(^m=X1TH>^Qh>bRJNc21l_?-^*T zvWgMr4;*n`EI?N$9W)ov>!MhMW>zeTOZzOGgLe6Vi_78)wC4=6YkKatG|O8`K52HF zEveRnigsQ>rJY`?Ao~EO{a!Q6-lR%sAF!I6%}i=9i(ko3Q+rD0ebtRC*!Q?l-NN$_ zPj(NY;023VVL|f3hO`O?(k@&`r|=+A8+wNfwMxOZDnsAYeZe-^d%hl26&aVBAyFqW zOJa`1IS5^e({5MBSTR+!7xz_`D%wpZlb8Sf@q4D0FviD+tIx38Y&G7DSJxgrUwx8p zwp+5hN_)OZIGV}o!*ZGtuGQ1@R(dP)%c5;Y;|0S zA8|AcZ=jO1El}J7!z~cp0>3RV+wuhe!yWJ(#DsOoIatFN?DfF?xPM%iST^6xLfrn0Gdj zAzK2O-5aMTZan&3#{FD2p31DB*5!$7$u%3ZqsM!SvHK(N3 zVgt8u*4T^XfmgW0O77=X_%Pz`o|$9&dEtVqyFO*U4%V`PCnIbvEaOFezzami%j{2U z+rdX%k;xl6ICg9079yj};t5>3b~iyl2k73tuV_3P*h7Tb4Njlr3Vak$plwtqckPwC zp>{)%!A2IyR;)T-upHEu`0nEAZH)*7wsy^xrK>R8)LdNChC>*S9O`?#z@gwuIC`AY zTlNmdvS-0$7@W&EP;L($fjWBFCtS)|*L-CP@MCk=P62imO=*I5iTc=aoDvrWJ9U!; znf(-%@(y1`Q|3W1P=N1DawvNRj-t`DpUK=n(6u+Oq$+Rn5(q&U7h2g7kRR|e4WzL5 z>;YmgkT~RFBP7lg619Twr=UDD*~S@AXe*OYu0w|~ZbGYpa*H~BOX5s2Wh!$A?ISYF zXOSs;A*h%k&1fdno(w7fpJkklVa;S%XJDW>b|!|Cw()5KW#;zdF#*_yHDw!RuT$ZQ z!q8F1LRkeIfeks`BXn!1^HAZIGZ$O~_4m9ymWj)bntsNUnR{#6D$Bb9Vb2h!Nyp{X z0+yjYUI1#=?P;`nS zU5lblD*DKKBVCV>_coJJi=E|4(IU$vfg+~1>3*bbD>5YY4GD5mb(_R@BpM_r&YW1L z0ca8h{L8>7$IB>V@cEUR@6CJ5b4%_;cfs>*MeV_?u2AC9?jqjiJ3aiKnDa7v==vJ6 zwFk&hpXKeOj5Wr$jAhYvtE(-U|7x!GwS1$HCGo zTY2001JMG1=px(Ko(M$;zB{5T)~-n0b#L};=TMflk)u+KqriIE#QKw38L)&6CyCZy zYb9(;Ni$Vd8bBGia7P(|=uJ=!$w@;SuVIZp^BcmUQouyVk!RPHdxEERRms#?ru8Yj z+R>QDHuXfPWIT2HW4A;Rh|19;V0XaR2qk;X!?zoyck^5|cc~B9me`n&&)7 zs^mnf;SHDiIQ95ZWZ3nBDkunJio-=MpgU>K6q8MzFaAosv#Gcu!; zz?Z+oD(H6~J%H64N6aCy;S}nwl2ST202PQ-NtvD1wsUm!c2s1tGV!*ShL@SvS#`os zYi;fiwqH&;EhLQp6g6`>(rrvrMi zwc_AzYoJ*yErn`BaOwyH0~x_CIaZ#6fxXUYLud38yYwzW8kT#&lP_qF{in#7W5mK( zyTan0{3cTvfwD|0VLM7DqR1+#t)JIfwZt`m^pJU7SX1IEy$CoZBwvWi6%!+C9#{Op{`9!n9GAWtCBVNT(j4+CYWPQ;$(? sqgvJAEZ1mk7XC$!fsk&pt=2|cp*Qm8nb5xPstsSw>)Am*9Egzp16Ab}SO5S3 literal 0 HcmV?d00001 diff --git a/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-38.pyc b/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1682f401a54a993766a97d7aa041d98b56864fcb GIT binary patch literal 1259 zcmZux&2AGh5VqI5$tF#zwuq_%9)L(dUI10CQUsR<)TkU*NY-|3+HLnI*p8sp_C&AT zIQEbn`v|;>ubg-VPRuyjrbQjelNozFp6{F49Co{H0`l`cKlx_NPT<{85VGh>;*W6OzDhV230Wi zz-BWtqm)#^sbAw2^oNf-&`WRFV-AfCCs2D4=h8s}xIn0i^YpB=tFkC(@BOS6y^lph8$0 z6`>(rr5p5OYstg?_CUi}k_**@;KY%J*FcaJ?3U~Kb1*7$3fxq5MnADj?-EwUrXFzR z3p&L)pvanI#lo1o;-ZfHCKDKiJdX=uTS~?vOAD#3e_EzRjqMSnx0Kt4Hlmyu8@QOL zt)!l0W)BA7Ka@6vnmOiPg{upw8vwTL-EDatlu(GO1#JZCfZ_Eyuo-mQ0Q(rf literal 0 HcmV?d00001 diff --git a/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9cb8c6c01b4e77bcb8df598287678df844f0731 GIT binary patch literal 220 zcmXr!<>mS$ot6~Lz`*brh~a<<$Z`PUVi_Qj!jQt4!w>?Y8KE>2kY);I&}4qe2vnlU zc#BcXPm?){$0e~O(J8SwHMAr%CyFm1zqlm5DAhMHFEKr}=oV*CYHof>s&j72N`@j9 zpgu71%T_njK h%)HE!_;|g7%3B;Zx%nxjIjMFamlT7Hg`kf=|+ENx?w+F^Gc7nLOD=sV}<<)tQPf}3kV7}1f*uyBtO|nEQZ0pmENNyoO}d*&XHu*sdrGf< z1HXV@X|96cSMcPU#KX?;e)Ha&-}^W7YqDq#Ep&C&7w}5^9+mhD?s!zN3kVB0UOdl zNjlijmX@?(B`<>(%XU;!$-Ywp*9Ukr>fjB0dA?xd+TVhxKXKeR9naWjE&ppFBN iybn)i8`DShy=}psj})`DmRBqF%Kx$z2m-4JD(FAl2cD$> literal 0 HcmV?d00001 diff --git a/API-ROUTER/Utils/__pycache__/CommonUtil.cpython-38.pyc b/API-ROUTER/Utils/__pycache__/CommonUtil.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d425ebae7a06189314c6964ff8937be3b290503c GIT binary patch literal 630 zcmYjPv5wO~5S<-6_Fl*#aWp~V2P|X}C#Spi z{vj^;rERIG>1bfq2I)qcxASIZXGXKTK0TcR$@Xor`NaT!IC5W*$ZOK(8G!)7DoDnY zC2ZiBpv0rsL*fe*-Yp~(!9GFc|D+pmnLGS1J{g>JMcNnw1qW#1$a*-ij%~5^w*GN4 zU@&0V@}BifupV9YJ7mzY<4F$}@a6dd6?D+y()p$x_KdvqgGcN^hn?4>i#~zQTf)`H zt7QjnuFIRV#UjpiT@0Ygg{sxf+iGntM#{9)ixB$)Y(p2PT^_@@H8z{CDSzFjm%r6>&Aw9KN?;s+sIGCtk!8> zlr|VU+VEeh4aUsxU>?!Fe!qy@aF^ErO6H>#9%EV4E`-)qxmRlIIh)x;~k z+v(cbi~Tn{r9SCcJ9NvR69Ds(v!@LIAZdUz#@RzQNAs9sQD6c(j7MO@N|zorMmzC literal 0 HcmV?d00001 diff --git a/API-ROUTER/Utils/__pycache__/__init__.cpython-36.pyc b/API-ROUTER/Utils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49c373d1f5f94cd41c506f2ecc9328ee35360b48 GIT binary patch literal 162 zcmXr!<>ji9PfLc; literal 0 HcmV?d00001 diff --git a/API-ROUTER/Utils/__pycache__/__init__.cpython-38.pyc b/API-ROUTER/Utils/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf34a64269782e7ce78f01b712bdbf6916562705 GIT binary patch literal 170 zcmWIL<>g`kf-3p6Bq<>M7{oyaOhAqU5Et_Ri4=wu#vFzah7_h?22JLdj6fkx##@Y9 zewvI?T+aEqx%qjaC7C%Z8H$*JQefhjiGFBtYEiL%a#FIsi))y^Z+=o{dTO42N@7W( rZb5!gNn(yZNK>(Xe0*kJW=VX!UP0w84x8Nkl+v73JCGfpftUdRNK+?n literal 0 HcmV?d00001 diff --git a/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc b/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..997eb7278b3ffc209515741c8346faf4a2924291 GIT binary patch literal 2996 zcmb_eTW=dh6yDjp9ou!%v{DdIQxL+1##|&GfTDyn6h!Jqxd>@qRvXX6ak}euXV*nB zj{4xf_76b$0Z9C!edUS2&?mk#Yde<)!2`DD%$zebd*+<;ojLPawOYRQL-$~{WEg)M z=YBTEYiQ{&Ai@wVGC1{S#A1`1tdLpUg3OBS*x`j z$T-R5MlAB$c9LdYB_D?Uuq#zwxgTaB?cC3LQHONQehh;(wDb)SX>cYCZtfe>dS;_J zXs$k)nfvR5-gcOVMOCf5Ih-%(R9X2GnL!K@RET3AUhez z+!OLJ97fsihFXM5OcEL6ib8EEdbC9cTgMFU#rL|%_D`8wlTL51HU!B_RLGSnd!=&A; zDN?B_M5;t;Ah{n7dfFMe-w89>P1H$l4OPVbIPGei6&*5nW0@T#BKHR>$&yYIaj%oa zao897l~(g8ETeQZn!M1R5M z^F$kAX6ABfNn0>szO;lT?B_Ojz&S6OaD@lX#Vm2YD1r0z>heodr-{vdS;Bl3d`(=# zJVFGX=Ide+{KA}H64$|3bl8?PTs2(UNDWUM%+Plb^bkz4H5;mahg?NJ>IpB}Z4C^@ za9UuDO;DDZ69c_9HjeEHJS+@2lC_(TdK)X%Eh6**d{yUZUP@&a=rNSrsf-TKt(?PN zY4;+Pdi`D&1oWBI2Qiq-T+?Tx#X00>Ynn_ou;4am*;<$EGm5Ojs{0 zHj~2jQZnaC`V+*%zwhGXmr_98hU|T`lWK_gKlcv9Gy{NiJp%AfMA*-I9Yq%q zcku$l=HjIEDB-n@q~8Z-rw>I%mq!6|!gpQ*jJBW=Ip~sRsq|Z=u!xGkKG#*oSf>l8fgc5Zzrn{z#m(1ZYY6UAP2^^uP@vL{))=grF)^NPDrIc;c>Ed##NFl&gOY ze`&9r_y-7aVAhR9z4FYPH#@U$XP@@_-R)=Dtm6>!lid0|#4qt*{za3LluA-iPN~IA zGR|7>aHsWd>mAuCJnpr7TDxK9<6)zc^`ZDa!_pW4N71G zSiaeihURzp5S;vOeh-=Z`4$Y*pkWPaKz6$!`~i&8@H5lDA%I~+`54A&cSO?Oi0~a4 z!w&l0H5Vb?TjM_BeF$L(c3}?=V85Y_%MT&Ko=0$$AH!k((4LdB4`edjQi;@J1 z-E{jw^ntCk=1(|1v9q04*Cu#gsB|Ua1;xbjF`9@5cCm=swTU=l1Ga^X%B6VGeDQ$!gAX zw1VTBpUGtli2e6z(;lCGMChER?c(MDjl;7q=ilC)MJ6K>GS7LH9~najNm8b~N)qie zn5Rq8YKzUZvye@zom#5)CTu`mf_jzK_0&=W>_CMmrq8q`8||;l>CxS~Jl9+2Ef>wv zi7ZQ58LTXmirXaGpJS70&6U$z%S)a~RcXJ*h6SG~vtsQb$Lxw}uTB+ItsW>T+r(Va z-io>o=Ul)^KL%{pM4UqMN)Isg6Ve2wJ<}FyBwD2hSiiws8P@#H&m!8LSIvZ&gU!YFTNUSM5)to*SM<{5y;mvV@2M)X|kx7fqdJ x5M{G0y0etkc#rC99lS0jTMBqXF}ZnxBB17M_6M~+qGK9ZD_>xt-wLUR(f`*+<}d&N literal 0 HcmV?d00001 diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini new file mode 100644 index 00000000..7bbbe895 --- /dev/null +++ b/API-ROUTER/conf/config.ini @@ -0,0 +1,16 @@ +[default] +db = postgresql +host = 192.168.101.43 +port = 18000 + +[postgresql] +host = 192.168.101.43 +port = 5432 +user = dhub +password = dhub.12# +database = dhub +schema = api +api_info_table = api_info +api_params_table = api_params + +[mariadb] \ No newline at end of file diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf new file mode 100644 index 00000000..9ffc671e --- /dev/null +++ b/API-ROUTER/conf/logging.conf @@ -0,0 +1,36 @@ +[loggers] +keys=root + +[logger_root] +level=INFO +handlers=console,rotatingFileHandler + +[formatters] +keys=default + +[formatter_default] +format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s + +[handlers] +keys=console,file,rotatingFileHandler + +[handler_console] +class=StreamHandler +args=(sys.stdout,) +formatter=default +level=INFO + +[handler_rotatingFileHandler] +class=handlers.RotatingFileHandler +formatter=default +args=('API_Router.log', 'a', 20000000, 10) +level=INFO + +[handler_file] +class=FileHandler +args=("API_Router.log",) +formatter=default +level=INFO + + + diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py new file mode 100644 index 00000000..bbb3f3f9 --- /dev/null +++ b/API-ROUTER/server.py @@ -0,0 +1,27 @@ +import os +import logging +import logging.config +from Utils.CommonUtil import get_config +from ApiRoute import ApiRoute +from fastapi import FastAPI +import uvicorn +from pathlib import Path + + +root_path = Path(os.getcwd()).parent +logging.config.fileConfig(os.path.join(root_path, "API-ROUTER/conf/logging.conf")) +logger = logging.getLogger() + +if __name__ == '__main__': + api_router_cfg = get_config(root_path) + db_type = api_router_cfg["default"]["db"] + db_info = api_router_cfg[db_type] + + host = api_router_cfg["default"]["host"] + port = api_router_cfg["default"]["port"] + + api_router = ApiRoute(db_type, db_info) + app = FastAPI() + app.include_router(api_router.router) + #uvicorn.run("server:app", host=host, port=int(port))#, reload=True) + uvicorn.run(app, host=host, port=int(port))#, reload=True) diff --git a/API-SERVICE/README.md b/API-SERVICE/README.md new file mode 100644 index 00000000..ed7349ba --- /dev/null +++ b/API-SERVICE/README.md @@ -0,0 +1 @@ +# API-SERVICE From fdda12da6d62cb83268245f6639b9c8503c9386d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 26 Apr 2022 14:50:17 +0900 Subject: [PATCH 002/236] =?UTF-8?q?feat:=20api=20=EC=A1=B0=ED=9A=8C,=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D,=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit api 조회, 등록, 삭제 기능 추가 --- .DS_Store | Bin 6148 -> 6148 bytes API-ROUTER/API-Router.log | 61 ++++++++++++ API-ROUTER/ApiRoute.py | 88 ++++++++++++++---- API-ROUTER/ConnectManager/PostgreManager.py | 2 +- .../__pycache__/DataBaseUtil.cpython-36.pyc | Bin 2134 -> 2167 bytes .../__pycache__/PostgreManager.cpython-36.pyc | Bin 3223 -> 3227 bytes .../__pycache__/RemoteCmd.cpython-36.pyc | Bin 1229 -> 1230 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 220 -> 221 bytes .../__pycache__/CommonUtil.cpython-36.pyc | Bin 613 -> 613 bytes .../Utils/__pycache__/__init__.cpython-36.pyc | Bin 162 -> 163 bytes .../__pycache__/ApiRoute.cpython-36.pyc | Bin 2996 -> 4183 bytes API-ROUTER/conf/logging.conf | 4 +- 12 files changed, 134 insertions(+), 21 deletions(-) create mode 100644 API-ROUTER/API-Router.log diff --git a/.DS_Store b/.DS_Store index 8d4cdb0392b595db7cee330e2e5d97616b1a2335..d4f251b052df9650aeef4f88448a30865498ccf3 100644 GIT binary patch delta 67 zcmZoMXfc=|#>B)qu~2NHo+2aj#(>?7jLe&PSb`Zhi*N|DOl+9CnVo~51E^%PAjfy+ V$^0UY91K9f$iTp|IYML&GXO2-4*CE9 delta 235 zcmZoMXfc=|#>B!ku~2NHo+2ar#(>?7iwl^U7}+=TFa : [{'api_name': 'api_name_0', 'category': 'dev', 'url': 'http://url_0', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_0'}] +2022-04-26 13:19:17,765 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 13:19:17,765 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'param_name': 'api_name_0_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_1_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_2_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_3_param_0', 'type': 'data_type_0', 'default_value': ''}] +2022-04-26 13:27:05,806 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:27:05,813 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 13:27:05,814 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'category': 'dev', 'url': 'http://url_0', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_0'}] +2022-04-26 13:27:05,816 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 13:27:05,816 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'param_name': 'api_name_0_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_1_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_2_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_3_param_0', 'type': 'data_type_0', 'default_value': ''}] +2022-04-26 13:27:43,197 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:27:43,202 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 13:27:43,202 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'category': 'dev', 'url': 'http://url_0', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_0'}, {'api_name': 'api_name_1', 'category': 'dev', 'url': 'http://url_1', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_1'}, {'api_name': 'api_name_2', 'category': 'dev', 'url': 'http://url_2', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_2'}, {'api_name': 'api_name_3', 'category': 'dev', 'url': 'http://url_3', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_3'}] +2022-04-26 13:27:43,204 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 13:27:43,204 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'param_name': 'api_name_0_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_0_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_0_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_0_param_3', 'type': 'data_type_3', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_1_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_1_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_1_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_1_param_3', 'type': 'data_type_3', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_2_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_2_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_2_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_2_param_3', 'type': 'data_type_3', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_3_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_3_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_3_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_3_param_3', 'type': 'data_type_3', 'default_value': ''}] +2022-04-26 13:34:14,173 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:34:14,174 INFO [ApiRoute.py:86] - INPUT : api_name='string' category='string' url='string' msg_type='string' method=['string'] protocol='string' command='string' params=[ApiParam(name='string', data_type='string', default='string'), ApiParam(name='string', data_type='string', default='string')] +2022-04-26 13:36:58,377 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:36:59,936 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:37:00,655 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:37:54,056 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:39:51,870 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:40:49,163 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:42:34,397 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:52:07,689 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:56:38,683 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 13:58:06,151 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:15:33,095 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:16:05,875 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:17:49,907 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:18:56,098 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:19:33,639 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:19:59,572 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:22:16,197 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:22:16,201 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 14:22:16,201 INFO [PostgreManager.py:50] - PostgreManager Insert Execute. (INSERT INTO api.api_info ( api_name,category,url,msg_type,method,protocol,command,bypass ) VALUES ( 'string','string','string','string','string','string','string','string' );) +2022-04-26 14:27:47,645 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:27:47,649 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 14:27:47,649 INFO [PostgreManager.py:50] - PostgreManager Insert Execute. (INSERT INTO api.api_info ( api_name,category,url,msg_type,method,protocol,command,bypass ) VALUES ( 'string','string','string','string','string','string','string','string' );) +2022-04-26 14:31:21,932 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:32:18,029 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:33:04,397 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:33:37,299 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:33:37,303 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 14:33:37,304 INFO [PostgreManager.py:50] - PostgreManager Insert Execute. (INSERT INTO api.api_params ( api_name,param_name,data_type,default_value ) VALUES ( 'string','string','string','string' );) +2022-04-26 14:40:40,751 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:41:35,081 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:42:31,202 INFO [PostgreManager.py:24] - PostgreManager Connect. +2022-04-26 14:42:31,209 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) +2022-04-26 14:42:31,211 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) diff --git a/API-ROUTER/ApiRoute.py b/API-ROUTER/ApiRoute.py index 2f0d508c..355bbd98 100644 --- a/API-ROUTER/ApiRoute.py +++ b/API-ROUTER/ApiRoute.py @@ -2,28 +2,38 @@ from fastapi import APIRouter from pydantic import BaseModel from typing import Dict, List + +from regex import D from ConnectManager import RemoteCmd, PostgreManager, DataBaseUtil +import traceback + logger = logging.getLogger() class ApiParam(BaseModel): - name: str + api_name: str + param_name: str data_type: str - default: str + default_value: str class ApiInfo(BaseModel): api_name: str category: str url: str msg_type: str - method: List[str] + method: str protocol: str command: str + bypass: str params: List[ApiParam] -def make_res_msg(result): - print("RESULT : ", result) - return "" +def make_res_msg(result, errorMessage, data, column_names): + header_list = [] + for column_name in column_names: + header = {"column_name" : column_name} + header_list.append(header) + + return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} class ApiRoute: def __init__(self, db_type:str, db_info: Dict) -> None: @@ -40,29 +50,71 @@ def set_route(self) -> None: self.router.add_api_route("/api/del_info", self.del_api_info, methods=["POST"]) self.router.add_api_route("/api/route/{api_name}", self.route_api, methods=["POST"]) + def connect_db(self): + if self.db_type == "postgresql": + db = PostgreManager(host=self.db_info["host"], port=self.db_info["port"], + user=self.db_info["user"], password=self.db_info["password"], + database=self.db_info["database"], schema=self.db_info["schema"]) + else: + logger.error(f"Not Implemented. {self.db_type}") + return db + def get_all_api_info(self) -> Dict: - return "" + db = self.connect_db() + + info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]};' + api_info, column_names = db.select(info_query) + api_info = make_res_msg("", "", api_info, column_names) + + params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]};' + api_params, column_names = db.select(params_query) + api_params = make_res_msg("", "", api_params, column_names) + return {"api_info" : api_info, "api_params" : api_params} + def get_api_info(self, api_name:str) -> Dict: - postgres = PostgreManager(host=self.db_info["host"], port=self.db_info["port"], - user=self.db_info["user"], password=self.db_info["password"], - database=self.db_info["database"], schema=self.db_info["schema"]) + db = self.connect_db() - info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} WHERE api_name = {DataBaseUtil.convert_data(api_name)};' - api_info = postgres.select(info_query) - + info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} \ + WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + + api_info, column_names = db.select(info_query) + api_info = make_res_msg("", "", api_info, column_names) - params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]} WHERE api_name = {DataBaseUtil.convert_data(api_name)};' - api_params = postgres.select(params_query) + params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]} \ + WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + + api_params, column_names = db.select(params_query) + api_params = make_res_msg("", "", api_params, column_names) - return api_info + return {"api_info" : api_info, "api_params" : api_params} def set_api_info(self, api_info:ApiInfo) -> Dict: - return "" - + db = self.connect_db() + + insert_api_info = {} + insert_api_params = [] + for key, value in api_info.__dict__.items(): + if key == "params": + for param in value: + insert_api_params.append(param.__dict__) + else: + insert_api_info[key] = value + + db.insert(self.db_info["api_info_table"], [insert_api_info]) + db.insert(self.db_info["api_params_table"], insert_api_params) + + return "" + def del_api_info(self, api_name:str) -> Dict: + db = self.connect_db() + + db.delete(self.db_info["api_info_table"], {"api_name" : api_name}) + db.delete(self.db_info["api_params_table"], {"api_name" : api_name}) + return "" def route_api(self, api_name:str) -> Dict: + # db search return "" diff --git a/API-ROUTER/ConnectManager/PostgreManager.py b/API-ROUTER/ConnectManager/PostgreManager.py index 449ab377..7bcf2948 100644 --- a/API-ROUTER/ConnectManager/PostgreManager.py +++ b/API-ROUTER/ConnectManager/PostgreManager.py @@ -42,7 +42,7 @@ def select(self, sql: str, count: int = None) -> List[Dict]: result = [] for row in rows: result.append(dict(zip(column_names, row))) - return result + return result, column_names def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) diff --git a/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc index 5b61b034d74b255db88587fdedb0608bc5bb9c3a..1fb26828c6598f6936a4f83cb6fd65d8bdf546bb 100644 GIT binary patch delta 355 zcmYj~y-or_6ov1d+1*)IAV5eEkspx;6WzktSgB}11Bg)2Da@i`6f%&Qn59}1A7Da7 zD189K3z+x&w+it}Ca1cvp?%nXwbGhe@+~=Wq z7>{mxp4;p8+|x#Nzgcg$E}F{&?BI0+04BiE$2lxWfCxTvl7;~WFeRLF<5g|WA;2l+ zrVn%A7H0$EtE^&s&2-J71)CbaaRp_k_QI;QR=sdskSj97r0mmAn3tF9wWVXy8afAOt6fB?cs9CO=_yW|IbSWhU#gIY>zWnZ;nk zn1q;wK!zy-MKqa!((P2Cdn6c(lqP>n&Bs_38ToJVBq3SzO0p-Pq8X8@<;I`=jW8>=EdhF=B5_k+Wd=c GAu9lRgAmmK diff --git a/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-36.pyc index b663ca43e2db174a6d87c26a2a1be68610c9a472..b9886175bed4d404d9ca27e280f3b5acdecbc167 100644 GIT binary patch delta 58 zcmX@hd5)9an3tDpPk8!9c5g-%d;N_3+*JLP)YJm~^8BLg;)2BFRQ=?nWPQf~Pu(E@ N&=A+4&83VH%m5vh5`q8# delta 57 zcmX@dd6tvin3tDpihuk@c5g;yJN?k&)S_bjh+lU48Tq-X m`YEZY1^VUrMcKs#iOH$@$w|rjjsc#!LH?m3u0a!5836!oi5o}& delta 83 zcmcc1c!!bQn3tF9lXTidb}#-Y9+$+DM5n~!)XdVo9QIL4Hw5 JV$Q@mRRE{P5jg+= diff --git a/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc b/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc index 997eb7278b3ffc209515741c8346faf4a2924291..26a8a2a5601cb1f0ac3346ab97d7710ffe34f75e 100644 GIT binary patch literal 4183 zcmZ`+TXP$?6$bWBilivna;-FV*`zmm8q-bEcA7Y;Y)ef%W6K`d9;Z8PcUA;UliKCd z*p(}(WHVEG@|IsvJMVqz55jAo`WN!l?_f!aQXFz{7C5*p@SStMgZ-dhuYUAZZ-27J z*nip5&p~|)CI1hEV1g$sET25&Xj_Su+M&%!XD3eThOVhQiI@7JZ|ZImq?NFeR>P`k zd&x>#3u~tCC-t-uHqzB_HEo7XqvOe1xF*?PeagZMpD_`L%1b6H(x2MlMYOA81??5n z-VilWf62m2&^N>?^s7@V{DI&PS-bf^?3wMhxvt!NaAz+&ETlridy({qGAH$|IG6V_ zA(OVHo$Y?N(9Yd{UZ9I_w{2b7lWA7S+o{lv2U%Y9l)M)YoJq|mkx@H;-UCvhn5a*j`|N`6{oxHKnGDYj8hp!x*A1kCJqy- z*P`h8VVul*?7UDqh(~=hG^~zja#^nk>?taaM>4Dn`7}OEis(h09Lj$)1-q8w+fL_M zmdcKha@6@-rVjE^+?Ac~ezyaV-rKwX_|eW@2fH$OT^k*%6--^F0|gLO?wG&Po;kOL z-YpvTTZr#JH_jfQR8XoYE3zi*o9xTR3=bb~zB7E9?Y37{4GXC{i3SPUgK9$Ppc@ym zm#JfIAF3n_(!6Jmt-Vwh&oZHdk;;m!nsaCJX(d0q&)*&ehN)l zTc-gRAU05PYR%7Fo}8rV?^0~g&qr}lZlmPyL-g3hIl3~ox7lAVOJ{wwFdZ6OwjJ#$nZts*CY8$6J(=flywKUt#Ig3C z$yk)m9FInFDB8Yy3olkbgwPK8fvznrmxn9mj3|M7t4$jEHi?B>C_1RFrSXA`@Zt!N zwxG$Y5DX`-@_;uiMY=OqU+}{}(KENYw520BPG$>RI4_+L7zp_7_vU{@D z0TXq4ICPvOCBXJ)JC8u1ei@4SNqsSd@SimaCSwlg!TpDiW=im|QJ!p=DF(*Q-|+$y z5)=6N&v4MN9t#nX)(p_i`P)fl)~p%LqDAjI?W310S{1VdwcA|%0*jvu2=#O5uA|K2 z;1VzYC+j!o1i3Ky!ZhR%M3u&)LR0`966b-Xwu_m0Hc4j*d-il@Pj~k8W>0?;$?t1# z!iVdH4O3NUrGK&47Lmx9Qe1Tx8KBHe`SV0O&rsLSC{vJ!Ir3CMqz9S@ClV{{BV%bV z?>>`h-1gM3u{%YKr9L3>A&K9RAPzrS+s%sBophAQR1OO%uC?ZlU!gJN{n|^i9_2&V zuvFVJC~8aWpF>htyV-CkyG11Se}{=Vkvjvetn((nY_0Q?3kyh3M=mfuL$P0BCLu9p zlhWZqHJiXiP@HlBG*Ne7yAx~72i6#9{n?t>6Q{62K;GCMJ5y(3n@~AB6L`;Nx@M+p zW_pX6pm5Bj6+mIHEZ~n2Xgu7xyL0uT$dd-w0P40M`b(~Y^8MSwk#-|~+&(@j#A zd8bt4;$f1xaop-@Z`)BH;g~a!K_r0AurH#(IO^}wtE)5(w*#q;)fNr^F==bF7nJ&& zq(4hN>Q~Thq2!cK84s*0ya9SI<;mv466Zq;_N5sm6_KCQk9?i%WBmOaRA#oZ-hlAT zHib2?$9&3xw)fhf*kfzpjBSIqGjR)7_`)AMV;5*6kr=BkTR14~bZ!;Ttbzm!Yx|2; ze6tFz=8KB4S@q2}Qy*jN>ITHg)zjs(RHl#NlSe~vpyy92M7SPMRful z@wG6aqC6TRB@bUng&066s#`R$MFWGg_HC%bf%9LDS%dy?#QwuCM*AW*wq!Dx-a(C5b z?82DC0BazgAxigTfy+AX#%{lmX|8^RvD)ho!FYuUnK`6evIR*Ib!H*XYg%&NVFcSCsq`1O*P=1~1}n1R}F))A30Y;f1IEWwQ)t^IDY5~!y_6Zxd99Gx|RrLkOb%3+NDcpfKWd#18*wFf70VO$g z8Mx%5C6vB#PVFHdN_-c+iw<4cIqJ$$(a(n39jX4X(3L{r>tH|b9_Z@ROr>!V$)j%D zKJT#S_@#r@GL)Py?tqC~NStqhW6r>{oQfCl5KMHrG4PN}mLCSYWsK2#W=WL(Di zhzZDmulo%@s5I)$HT)~4w|!arlr#Ioo^}Q~p!T1}c>zi>H_31f7>|;yNc#Ku_@bI3 zj|qd(v51F7zpDt8(8FgQmQZHf9%)=9d-6yT6Nio4WwM=pttz5uWs)}WkRr;^6_EQ~ yle`rrWb;i_p0h@qRvXX6ak}euXV*nB zj{4xf_76b$0Z9C!edUS2&?mk#Yde<)!2`DD%$zebd*+<;ojLPawOYRQL-$~{WEg)M z=YBTEYiQ{&Ai@wVGC1{S#A1`1tdLpUg3OBS*x`j z$T-R5MlAB$c9LdYB_D?Uuq#zwxgTaB?cC3LQHONQehh;(wDb)SX>cYCZtfe>dS;_J zXs$k)nfvR5-gcOVMOCf5Ih-%(R9X2GnL!K@RET3AUhez z+!OLJ97fsihFXM5OcEL6ib8EEdbC9cTgMFU#rL|%_D`8wlTL51HU!B_RLGSnd!=&A; zDN?B_M5;t;Ah{n7dfFMe-w89>P1H$l4OPVbIPGei6&*5nW0@T#BKHR>$&yYIaj%oa zao897l~(g8ETeQZn!M1R5M z^F$kAX6ABfNn0>szO;lT?B_Ojz&S6OaD@lX#Vm2YD1r0z>heodr-{vdS;Bl3d`(=# zJVFGX=Ide+{KA}H64$|3bl8?PTs2(UNDWUM%+Plb^bkz4H5;mahg?NJ>IpB}Z4C^@ za9UuDO;DDZ69c_9HjeEHJS+@2lC_(TdK)X%Eh6**d{yUZUP@&a=rNSrsf-TKt(?PN zY4;+Pdi`D&1oWBI2Qiq-T+?Tx#X00>Ynn_ou;4am*;<$EGm5Ojs{0 zHj~2jQZnaC`V+*%zwhGXmr_98hU|T`lWK_gKlcv9Gy{NiJp%AfMA*-I9Yq%q zcku$l=HjIEDB-n@q~8Z-rw>I%mq!6|!gpQ*jJBW=Ip~sRsq|Z=u!xGkKG#*oSf>l8 Date: Tue, 26 Apr 2022 15:50:06 +0900 Subject: [PATCH 003/236] =?UTF-8?q?feat:=20API-SERVICE=20=EC=83=98?= =?UTF-8?q?=ED=94=8C=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit API-SERVICE 샘플코드 추가 --- .../__pycache__/DataBaseUtil.cpython-36.pyc | Bin 2167 -> 2161 bytes .../__pycache__/PostgreManager.cpython-36.pyc | Bin 3227 -> 3253 bytes .../__pycache__/RemoteCmd.cpython-36.pyc | Bin 1230 -> 1256 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 221 -> 247 bytes API-ROUTER/Utils/CommonUtil.py | 2 +- .../__pycache__/CommonUtil.cpython-36.pyc | Bin 613 -> 653 bytes .../Utils/__pycache__/__init__.cpython-36.pyc | Bin 163 -> 189 bytes .../__pycache__/ApiRoute.cpython-36.pyc | Bin 4183 -> 4066 bytes API-ROUTER/server.py | 2 +- API-SERVICE/ApiService.py | 43 +++++++++++ API-SERVICE/ApiServiceMsg.py | 13 ++++ API-SERVICE/ConnectManager/DataBaseUtil.py | 37 ++++++++++ API-SERVICE/ConnectManager/PostgreManager.py | 68 ++++++++++++++++++ API-SERVICE/ConnectManager/__init__.py | 3 + API-SERVICE/Utils/CommonUtil.py | 18 +++++ API-SERVICE/Utils/__init__.py | 1 + .../__pycache__/CommonUtil.cpython-36.pyc | Bin 0 -> 653 bytes .../__pycache__/CommonUtil.cpython-38.pyc | Bin 0 -> 630 bytes .../Utils/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 189 bytes .../Utils/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 170 bytes API-SERVICE/conf/config.ini | 16 +++++ API-SERVICE/conf/logging.conf | 36 ++++++++++ API-SERVICE/server.py | 24 +++++++ 23 files changed, 261 insertions(+), 2 deletions(-) create mode 100644 API-SERVICE/ApiService.py create mode 100644 API-SERVICE/ApiServiceMsg.py create mode 100644 API-SERVICE/ConnectManager/DataBaseUtil.py create mode 100644 API-SERVICE/ConnectManager/PostgreManager.py create mode 100644 API-SERVICE/ConnectManager/__init__.py create mode 100644 API-SERVICE/Utils/CommonUtil.py create mode 100644 API-SERVICE/Utils/__init__.py create mode 100644 API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc create mode 100644 API-SERVICE/Utils/__pycache__/CommonUtil.cpython-38.pyc create mode 100644 API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc create mode 100644 API-SERVICE/Utils/__pycache__/__init__.cpython-38.pyc create mode 100644 API-SERVICE/conf/config.ini create mode 100644 API-SERVICE/conf/logging.conf create mode 100644 API-SERVICE/server.py diff --git a/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc index 1fb26828c6598f6936a4f83cb6fd65d8bdf546bb..3748d4782fcf8a67b426a81a9f065fbc6c9678a0 100644 GIT binary patch delta 366 zcmew^@KJ!vn3tEUdO~{A8*$gSHDQsDcHB8Nn zKsGy=%?xI9%w?}-sbL9b(B$-+{DNsJqwwT9=14}S$@iH9`8a?kGcfWn@iD3}7D;V( zU}0ipl$z|!+AJpvlqiw|5g;`Xf)m6N0}?WmpRhW!NrSjDlXck~q$GgMVz6OMLQFy+ z!xVucnoL0HcDAMX4O5=%#U3gy4>C*;q=}`72gH^E5ekzTS>$9>Qgc#EQsWCtQ;RA= j<`%O72?n4&5{yMklRvUMb4!5~gQS3bdk#}(4iQcO4cumlas6Wb#Qb!eD|Jn&;5>mB7Y|g{paHDCbZvuL_E>~#?u45#p_c57=pwM z$1q_9B4j983_UC$XOc_ni8dW5Fz3?FU<}fcqQ^4I61#KebM_`8w=(M-ntu0D9Ct5H z>aDt-u@|iB5x;Wzhy9@L`$PT7&my1x0+ujfC2XKdrY(yhCVJm4YBjRdni2O;JVT2l zss6It&Z-$xz2zLP#DoJA1Xf`cQ?^0eWMq$=*Z<2Jx+5-^>XcVyb7ZN&aB5^-zlrU# c=^8jB)Q-!jHuX%j7ZMXN7R`I^F88Y5FVPl2^#A|> diff --git a/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc index 18758c2576d62e13186fd96e7a2ade2cddd81da7..1afa5b2f4798e63a3bbdad15a943736782db33b3 100644 GIT binary patch delta 72 zcmbO&xmA+Qn3tEUdcsDwiA=_E`WgATsro6YsRjDw`9;~q1&PV2`pHSj`Yw(kj=BN< cK_QMl`i=qdjsc$WLHVU6sYRPNFumpk07^+1IsgCw delta 46 zcmdlgIa`v=n3tE!sdyvXL?%fW{fzwFRQ;6H)B^qT{G#mQg2d!h{p6(N&8L`Na{>TI CUk|AO diff --git a/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-36.pyc index b9886175bed4d404d9ca27e280f3b5acdecbc167..48c6f9b786020948ed8bdbdece12e0f9e1157fe1 100644 GIT binary patch delta 72 zcmX@d`GS+pn3tEUdcsCFA4cOy{fzwFRQ;6H)B^qT{G#mQg2d!h{p6%%eHX_NN8JGb bpb$qNeaC=!#{kdxp#0L3)S}JVjLFOZN^KWm delta 46 zcmaFCd5)9Kn3tDpPxwYQA4W-g{fzwFRQ;6H)B^qT{G#mQg2d!h{p6(N&8>{d%m7ul B4=w-z diff --git a/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc index d8a0c56c2f9da6021b6990eb9b527e84769982cf..dc12785293d253157a8cb9970156e367f36a6d4c 100644 GIT binary patch delta 69 zcmcc1_??l>n3tEUdcs7uM&k(mjQreG{gl+y0{!y*qU_>=#N<@{=#N<@{~eC8QBu;yF~m_f Rz&|L&(MKOe&E%boYXEvi83OC)lC()vZOKR5kkXP8c4<)?C2gY+5V9&6@7i5CwRe|i z2NAwX|P}G2ay+UymEbM5Q$1i#?I!a}zW$K;dQdzlI72u#d=tl} z91r`JZ$D(t3FOOu1^LQ>;*9wG4OXxIh6350I?s&e=GsD;98KrG#L!)}G8O_uO}P1K5LC$(>4*+4+$i@(tquT>^LkxmEGRxU5xa zc3NC8f2b{!`7*%@!UyNYkTou5t&#m}#JxhWihvuDsTyQ!aHJ9pBpe&}@?HSA7ccdo ziBzsy&sEEGBpqHOIMNK)Y1kkbkUGZ-jIE1rtxKBpo)%B6uhz%OlVnOsQrw}I43F0j zv6ybAhG~E|^Eq_Ow6L3?EO|2ZLoqVm74fsZGBS{K9+%t`^W{@q5$oldQTj}f!i1!M z#CF&L`&bd5mgfS$h|Q_q$+gJcQH^pz1zDU-^YQesUFlNP3xjnS$h?3~F}|`L8P}CD zKBkDB%GLAo0Lc6BCV|X0uzV5ccg6RW)9(NEE^PzO5zw8^kB+Va%n?wN0__|~1W>4B zhanTmuAah)S#i5MzOMt>_0g2Y1jrlL*{7dULT!6 z%AhZZqe9RL-Up5B%JsYpZhKu1+XhNVg6t-`SecQ6*A7}<`$1-Of^-8DzKvd&$&0=P tx%^48rU;%E=16&_UyFPGZWOF?^hm}KbZ+BQQ*1uM^@6U{w3?;se*+FpDHZ?# delta 1669 zcmZux&2Jk;6rb7e4}ZoRpQ8>hu3Y0?H#r7gv6K`nw*2o97Hs#$wC);hauGrOsh zipof?xWoJb2nliI(hL6pS2!ZAgoNmcThE+$Z(Q0C;?e&6zUIwu-prdnPyN;yuNRBX zm9P5UM^!?ek^?^tkzzY+Q=VtQ=QZMH*>TWz~QTW+sHyZWG_~?Z?Eo19PIXSKeUoL}&Zj|n>l_L5%)dwHU;d7pknT9vSu znt>ut&5e=Ay*QO=55Not)Bxs0RXss#VnzMNSU}?m@w2*gu8!g>2ro!+oRb$~Zzt&R zAnn9yzagqxjW(VvX%;okVDzF`*PDw|@rc=0rxPY&*6FmwL;WmmKKV{pC|wfY8=uzC z{Xd?c1>2gaoB6^;^j<<(M|d6K4TKF*wCb*0(MEkyT(stzm@HTP?qT{)ZtPB+9I`_5-q7nq(KCJ-TX#8EkFw%-%36=xvH+=hw;xidPY?0X#e}s%}j*Tuq#DXUA`%{W`*104-&@9OiBr z`~_3)fPocYKMw*9`|&c5-^57`478@q<&sFB-$H03AaDLQ!clZrh)T$o_{qIw$mphc z=6?I$aSTVQl9D9%oJ$Tz>W5I!POgVp05|Obyb;sfND8Z3wnLaQkWI`$V zge1y6;%m@)`rRpGSp%%(l(s2Lm>WKvGc+R-%}8!`uh&xfro0g^>w0J>tB`I8Uy2<`s6`cej4sd;ouQ&y+B`3h73aXQzRYwe z$r||gL{>UIKB~iY@bXs?usfy~0xua~L8u{MJvmb0nCifdlncq;KMf8{lHyh@I%Aeh z%PtiwRTwr$Z|itIHlty`A13`=8>CPibK6TZZxnI`{HzL98AZb^3cD9Z`zUd^JA_%I zecwy6u*dP~W=6I@f)rfx#)paNJm?2|+(fx_Yub=oUgGrw&heS!vXS9_?-0HPdT#fF z?0sMY{>$jcmu~Gs7>b9wRq_7M!|Io5h*@z792@Ij*3#Cv(!>8rD9ZE%lZe` CbUs1= diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index bbb3f3f9..d2565a44 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -9,7 +9,7 @@ root_path = Path(os.getcwd()).parent -logging.config.fileConfig(os.path.join(root_path, "API-ROUTER/conf/logging.conf")) +logging.config.fileConfig(os.path.join(root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) logger = logging.getLogger() if __name__ == '__main__': diff --git a/API-SERVICE/ApiService.py b/API-SERVICE/ApiService.py new file mode 100644 index 00000000..86faa8d7 --- /dev/null +++ b/API-SERVICE/ApiService.py @@ -0,0 +1,43 @@ +import logging +from fastapi import APIRouter +from pydantic import BaseModel +from typing import Dict, List + +from regex import D +from ConnectManager import PostgreManager, DataBaseUtil +import traceback + + +logger = logging.getLogger() + +def make_res_msg(result, errorMessage, data, column_names): + header_list = [] + for column_name in column_names: + header = {"column_name" : column_name} + header_list.append(header) + + return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} + +class ApiService: + def __init__(self, db_type:str, db_info: Dict) -> None: + self.db_type = db_type + self.db_info = db_info + + self.router = APIRouter() + self.set_route() + + def set_route(self) -> None: + self.router.add_api_route("/api/get_all_info", self.get_all_api_info, methods=["GET"]) + + + def connect_db(self): + if self.db_type == "postgresql": + db = PostgreManager(host=self.db_info["host"], port=self.db_info["port"], + user=self.db_info["user"], password=self.db_info["password"], + database=self.db_info["database"], schema=self.db_info["schema"]) + else: + logger.error(f"Not Implemented. {self.db_type}") + return db + + + diff --git a/API-SERVICE/ApiServiceMsg.py b/API-SERVICE/ApiServiceMsg.py new file mode 100644 index 00000000..c173e63f --- /dev/null +++ b/API-SERVICE/ApiServiceMsg.py @@ -0,0 +1,13 @@ +from pydantic import BaseModel +from typing import Dict, List + +class TEST(BaseModel): + api_name: str + category: str + url: str + msg_type: str + method: str + protocol: str + command: str + bypass: str + params: List[Dict] \ No newline at end of file diff --git a/API-SERVICE/ConnectManager/DataBaseUtil.py b/API-SERVICE/ConnectManager/DataBaseUtil.py new file mode 100644 index 00000000..5a2e872a --- /dev/null +++ b/API-SERVICE/ConnectManager/DataBaseUtil.py @@ -0,0 +1,37 @@ +import logging +from typing import List, Dict + +logger = logging.getLogger() + + +def convert_data(data) -> str: + return f'\'{str(data)}\'' + + +def make_table_info_query(db: str, table: str) -> str: + sql = f'SELECT * FROM information_schema.columns WHERE table_schema = {convert_data(db)} AND table_name = {convert_data(table)}' + return sql + + +def make_insert_query(table: str, into_info: List[Dict]) -> str: + columns = into_info[0].keys() + values = [ + f'( {",".join(map(convert_data, info.values()))} )' for info in into_info] + sql = f'INSERT INTO {table} ( {",".join(columns)} ) VALUES {",".join(values)};' + return sql + + +def make_update_query(table: str, set_info: Dict, where_info: Dict) -> str: + set_list = [ + f'{column} = {convert_data(value)}' for column, value in set_info.items()] + where_list = [ + f'{column} = {convert_data(value)}' for column, value in where_info.items()] + sql = f'UPDATE {table} SET {",".join(set_list)} WHERE {",".join(where_list)};' + return sql + + +def make_delete_query(table, where_info: Dict) -> str: + where_list = [ + f'{column} = {convert_data(value)}' for column, value in where_info.items()] + sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' + return sql diff --git a/API-SERVICE/ConnectManager/PostgreManager.py b/API-SERVICE/ConnectManager/PostgreManager.py new file mode 100644 index 00000000..7bcf2948 --- /dev/null +++ b/API-SERVICE/ConnectManager/PostgreManager.py @@ -0,0 +1,68 @@ +import logging +from typing import List, Dict +import psycopg2 + +from .DataBaseUtil import make_insert_query, make_update_query, make_delete_query + +logger = logging.getLogger() + + +class PostgreManager: + def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: + self.host = host + self.port = port + self.user = user + self.password = password + self.database = database + self.schema = schema + self.conn = self.connect() + self.cursor = self.conn.cursor() + + def connect(self): + conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, + password=self.password, database=self.database) + logger.info("PostgreManager Connect.") + return conn + + def execute(self, sql: str) -> None: + print(sql) + result = self.cursor.execute(sql) + self.conn.commit() + logger.info(f'PostgreManager Execute Result. (row count : {result})') + + def select(self, sql: str, count: int = None) -> List[Dict]: + self.execute(sql) + column_names = [desc[0] for desc in self.cursor.description] + if count == None: + rows = self.cursor.fetchall() + else: + rows = self.cursor.fetchmany(count) + logger.debug(f'PostgreManager Select Execute. ({sql})') + + result = [] + for row in rows: + result.append(dict(zip(column_names, row))) + return result, column_names + + def insert(self, table: str, into_info: List[Dict]) -> None: + sql = make_insert_query(f"{self.schema}.{table}", into_info) + self.execute(sql) + logger.info(f'PostgreManager Insert Execute. ({sql})') + + def update(self, table: str, set_info: Dict, where_info: Dict) -> None: + sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) + self.execute(sql) + logger.debug(f'PostgreManager Update Execute. ({sql})') + + def delete(self, table: str, where_info: Dict) -> None: + sql = make_delete_query(f"{self.schema}.{table}", where_info) + self.execute(sql) + + logger.debug(f'PostgreManager Delete Execute. ({sql})') + + def commit(self): + self.conn.commit() + + def __del__(self) -> None: + self.cursor.close() + self.conn.close() diff --git a/API-SERVICE/ConnectManager/__init__.py b/API-SERVICE/ConnectManager/__init__.py new file mode 100644 index 00000000..34c7045d --- /dev/null +++ b/API-SERVICE/ConnectManager/__init__.py @@ -0,0 +1,3 @@ +from .DataBaseUtil import * +from .PostgreManager import * +from .RemoteCmd import * diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py new file mode 100644 index 00000000..690a8ad3 --- /dev/null +++ b/API-SERVICE/Utils/CommonUtil.py @@ -0,0 +1,18 @@ +import os +import configparser +import logging + +logger = logging.getLogger() + +def get_config(root_path:str): + ano_cfg = {} + + config = configparser.ConfigParser() + config.read(os.path.join(root_path, + "AP_API_Router/API-SERVICE/conf/config.ini"), encoding='utf-8') + for section in config.sections(): + ano_cfg[section] = {} + for option in config.options(section): + ano_cfg[section][option] = config.get(section, option) + + return ano_cfg diff --git a/API-SERVICE/Utils/__init__.py b/API-SERVICE/Utils/__init__.py new file mode 100644 index 00000000..3b5ce1cc --- /dev/null +++ b/API-SERVICE/Utils/__init__.py @@ -0,0 +1 @@ +from .CommonUtil import * diff --git a/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc b/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47468aa11dafdd44df621167b46f31d9c53931d6 GIT binary patch literal 653 zcmZ`%J&)5s5S{&S?3|JVQGrB_aFJL73W^Awl>-UsbQeNSCs{(4&%5#2BwpXz5y#1? zOiMw}AK))-OGQsb#n`5}hF#6unc110dAs|3JU+<3C6~Vmz)!d{80tqTjhnLTqJ@Qf3G# z>`4U~X<$!ln$e17JhN&n+fYFT`$`Gi9O2HOfn)gaV$V{jNzG<(^8~$i%^HIKhkK5e zQ?r^kwB3IMHJ`!tn+v#}USI|`#!qjb`iszCybYIXS4r)mI$55buU;>`Smo;u(qx+E z>8-V^){~b=!jXBbM4Bh=(2UxsG$|roN^M5-&RX;q*D?}@s?zY5vEi9Y^S~)(T%{^6 z16viHVpt+8*U}Wp2X>UJFkUBS(4TDVfAPVf5B~vrjDdgNc~@#HJt1Y`eNy^kSwyk) z;>*}O_E-L7akgCfC&=eN?9QunQ+ji?-KxCRr^RP;fPI90S-X9W2M9nob;tpp?2Sqiybm+P15QxKs~EICTv=J^E~D%E4ji_b&TOm1ZX;i{zoB#x K9IWC{hyDc(#H$nl literal 0 HcmV?d00001 diff --git a/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-38.pyc b/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d425ebae7a06189314c6964ff8937be3b290503c GIT binary patch literal 630 zcmYjPv5wO~5S<-6_Fl*#aWp~V2P|X}C#Spi z{vj^;rERIG>1bfq2I)qcxASIZXGXKTK0TcR$@Xor`NaT!IC5W*$ZOK(8G!)7DoDnY zC2ZiBpv0rsL*fe*-Yp~(!9GFc|D+pmnLGS1J{g>JMcNnw1qW#1$a*-ij%~5^w*GN4 zU@&0V@}BifupV9YJ7mzY<4F$}@a6dd6?D+y()p$x_KdvqgGcN^hn?4>i#~zQTf)`H zt7QjnuFIRV#UjpiT@0Ygg{sxf+iGntM#{9)ixB$)Y(p2PT^_@@H8z{CDSzFjm%r6>&Aw9KN?;s+sIGCtk!8> zlr|VU+VEeh4aUsxU>?!Fe!qy@aF^ErO6H>#9%EV4E`-)qxmRlIIh)x;~k z+v(cbi~Tn{r9SCcJ9NvR69Ds(v!@LIAZdUz#@RzQNAs9sQD6c(j7MO@N|zorMmzC literal 0 HcmV?d00001 diff --git a/API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc b/API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3574bfb7653446f41186d1dab51851948c08a4a2 GIT binary patch literal 189 zcmXr!<>jiLke(#Pz`*brh~a<<$Z`PUVjduo!jQt4!w|xd!W7J)$^4QLD5S}Fi&4u@ zlQD|RIX^cyKQFW-GiN135i?KlIYq;;_lh PPbtkwwF6mS48#lo4bv}f literal 0 HcmV?d00001 diff --git a/API-SERVICE/Utils/__pycache__/__init__.cpython-38.pyc b/API-SERVICE/Utils/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf34a64269782e7ce78f01b712bdbf6916562705 GIT binary patch literal 170 zcmWIL<>g`kf-3p6Bq<>M7{oyaOhAqU5Et_Ri4=wu#vFzah7_h?22JLdj6fkx##@Y9 zewvI?T+aEqx%qjaC7C%Z8H$*JQefhjiGFBtYEiL%a#FIsi))y^Z+=o{dTO42N@7W( rZb5!gNn(yZNK>(Xe0*kJW=VX!UP0w84x8Nkl+v73JCGfpftUdRNK+?n literal 0 HcmV?d00001 diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/config.ini new file mode 100644 index 00000000..512818c3 --- /dev/null +++ b/API-SERVICE/conf/config.ini @@ -0,0 +1,16 @@ +[default] +db = postgresql +host = 192.168.101.43 +port = 16000 + +[postgresql] +host = 192.168.101.43 +port = 5432 +user = dhub +password = dhub.12# +database = dhub +schema = api +api_info_table = api_info +api_params_table = api_params + +[mariadb] \ No newline at end of file diff --git a/API-SERVICE/conf/logging.conf b/API-SERVICE/conf/logging.conf new file mode 100644 index 00000000..ae8125a5 --- /dev/null +++ b/API-SERVICE/conf/logging.conf @@ -0,0 +1,36 @@ +[loggers] +keys=root + +[logger_root] +level=INFO +handlers=console,rotatingFileHandler + +[formatters] +keys=default + +[formatter_default] +format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s + +[handlers] +keys=console,file,rotatingFileHandler + +[handler_console] +class=StreamHandler +args=(sys.stdout,) +formatter=default +level=INFO + +[handler_rotatingFileHandler] +class=handlers.RotatingFileHandler +formatter=default +args=('API-Service.log', 'a', 20000000, 10) +level=INFO + +[handler_file] +class=FileHandler +args=("API-Service.log",) +formatter=default +level=INFO + + + diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py new file mode 100644 index 00000000..ff59452b --- /dev/null +++ b/API-SERVICE/server.py @@ -0,0 +1,24 @@ +import os +import logging +import logging.config +from Utils.CommonUtil import get_config +from fastapi import FastAPI +import uvicorn +from pathlib import Path + + +root_path = Path(os.getcwd()).parent +logging.config.fileConfig(os.path.join(root_path, "AP_API_Router/API-SERVICE/conf/logging.conf")) +logger = logging.getLogger() + +if __name__ == '__main__': + api_router_cfg = get_config(root_path) + db_type = api_router_cfg["default"]["db"] + db_info = api_router_cfg[db_type] + + host = api_router_cfg["default"]["host"] + port = api_router_cfg["default"]["port"] + + app = FastAPI() + #uvicorn.run("server:app", host=host, port=int(port))#, reload=True) + uvicorn.run(app, host=host, port=int(port))#, reload=True) From a95b0d30eea411f77b8d25ffc146f8c28fa2520a Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 26 Apr 2022 16:25:59 +0900 Subject: [PATCH 004/236] =?UTF-8?q?feat:=20route=20api=20=EC=83=98?= =?UTF-8?q?=ED=94=8C=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit route api 샘플 코드 작성 --- API-ROUTER/ApiRoute.py | 18 +++++++++++++++--- .../__pycache__/ApiRoute.cpython-36.pyc | Bin 4066 -> 4491 bytes API-ROUTER/conf/config.ini | 6 ++++++ API-ROUTER/server.py | 3 ++- .../__pycache__/CommonUtil.cpython-36.pyc | Bin 653 -> 655 bytes .../Utils/__pycache__/__init__.cpython-36.pyc | Bin 189 -> 190 bytes 6 files changed, 23 insertions(+), 4 deletions(-) diff --git a/API-ROUTER/ApiRoute.py b/API-ROUTER/ApiRoute.py index 355bbd98..ea0430ca 100644 --- a/API-ROUTER/ApiRoute.py +++ b/API-ROUTER/ApiRoute.py @@ -36,9 +36,10 @@ def make_res_msg(result, errorMessage, data, column_names): return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} class ApiRoute: - def __init__(self, db_type:str, db_info: Dict) -> None: + def __init__(self, db_type:str, db_info: Dict, remote_info: Dict) -> None: self.db_type = db_type self.db_info = db_info + self.remote_info = remote_info self.router = APIRouter() self.set_route() @@ -115,6 +116,17 @@ def del_api_info(self, api_name:str) -> Dict: return "" def route_api(self, api_name:str) -> Dict: - # db search - return "" + # db search api + db = self.connect_db() + search_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} \ + WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + api_info, _ = db.select(search_query) + + if len(api_info) == 0: + return {"result" : 0, "errorMessage" : "This is an unregistered API."} + + remote_cmd = RemoteCmd(self.remote_info["host"], self.remote_info["port"], self.remote_info["id"], self.remote_info["password"]) + return eval(remote_cmd.cmd_exec(api_info[0]["command"])) + + diff --git a/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc b/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc index d13d8625b6b25d2b32b0c826b071b51ee8e50468..da4adde0d50340c33404c01fb1314bc724268bc4 100644 GIT binary patch delta 1323 zcmZ8h&2Jnv6t}&zGqW?hlcZ?{TY@r4*wBd}P1BE{7HHCv5TGBZi8!pNM%%U9PDnQ4 z%_O4H(j1msZ}?h-K>P!UOD`O`aN)$o5|m*L-g=bRHi$#*_Eb;?bV6Le{yzYeG;vyM;<^#|2gFL#OSa7b?^Wtk<#T zvj|<@Whv_lMBXhSilWqG*g9RdRqip)B->yKzm>Q!jrK4@@D_n!31h~E-Tgv=spP6i zt(-W<$<_A#m+kf4@>C$J#%`ImOW2!f#4#+C4wbg^XsAI=Tm=1pYu=Q^pE{%eo1fn|L`TfURhti zVh0h7iwsq}fEYW82WM#DG7SWDZt2(i3Le1Cm-mqSzhnrz*T)*xxyRz zo#3z0C9-~>-~)uiIXxDR>o|1uba-;>L(*R*SVl-h-}g0=T^Q1W3Mx#sz1ulZP^7X| zw17g@r|I`;j*x=5!bb!{lCVnMKDT)kZ|G;?qHBj6`Z)aYv)5^yxLFRC&0ulkr>V@^ z7y?ty3bm8Nn`ma-tdk=T8}nqay7hNio9d_KvuJZyC$%RRty9ZuncUMplak$*aU~u! zCJ5yX>g+-HcVG{30o5JNqlL&riK(P5jOXIDJGXDf@M_fJ z|BIdo{TBf|vH|4C?{H%CVV1}Ew>t5D2h@Ws$Nec8uYCT=JVv&E!_g9k`D#Qa`|0`` z>XYD=h{GCL)5c9{TXler!QL_BsDsva({JxcnW}G8`$eh_bD&wxRSVh=U&>g+(`GPu z1aKmZk~a%uB%MPzz?w%0O!#7sN21CDG0XMiXki{NH3PbHeUg;rK2f vl!7=pg?)NVa$3dbC;iCtD^YE93_l;HbTo2w>OGo6FF@ZWw~U)MvcUz}*EqJbHV>s(h1erPT2`;S`f&?`BP z-}FPru{jh!eAX1suZdHAgO7<%iA&lj?kS1+cr;X|1EvV331$dp2`Zvw435b2=?Eww zMEY)Pd)tFZ^8i|4D=;RW8Uor24p4xF3qre%Us|^v1WeFR499%U;*Lqx|mAzi)tdfbBBC)2^JAh zn5kLy1EjLuEbt)kWRQya3K)r>7c9Y2GUjWJu$7z za8X#vcdJ>7lP;-2syRPAG91VC8~7ZN=7-*10K=FT>3%an9kR9d`RTIWocNPm(QabS zhFD1*S7cGCi*DDgtjcRex{FN?y>1Ql{~KTfvwTk!(&Y&nJdP%Zk0#pXIAF?pw__P} z&{N_9z0~&JNu+JGfHpEkjAzRBI5MEQ>9&(z2B;0tM?hMkL@+5{X9jY4q*O4V;s)=F jr{hLXI+d~THy|%QW?o&sg&{BrWQiQHJnqhlP0Kz5H1xc1 diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 7bbbe895..45fead5b 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -3,6 +3,12 @@ db = postgresql host = 192.168.101.43 port = 18000 +[remote] +host = 192.168.101.44 +port = 10022 +id = deep +password = !deep@win#human$5 + [postgresql] host = 192.168.101.43 port = 5432 diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index d2565a44..3dcdc976 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -16,11 +16,12 @@ api_router_cfg = get_config(root_path) db_type = api_router_cfg["default"]["db"] db_info = api_router_cfg[db_type] + remote_info = api_router_cfg["remote"] host = api_router_cfg["default"]["host"] port = api_router_cfg["default"]["port"] - api_router = ApiRoute(db_type, db_info) + api_router = ApiRoute(db_type, db_info, remote_info) app = FastAPI() app.include_router(api_router.router) #uvicorn.run("server:app", host=host, port=int(port))#, reload=True) diff --git a/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc b/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc index 47468aa11dafdd44df621167b46f31d9c53931d6..178fca0d7aacadfe34a480c91612ff971d6f7c3c 100644 GIT binary patch delta 66 zcmeBW?PujQ=H=!3G%-Et>qO2sQksqd@s0tW@j>~eC8;3} O8yL;mpaSn07Xko~>=fky diff --git a/API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc b/API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc index 3574bfb7653446f41186d1dab51851948c08a4a2..4876212ffe82f53de8653bdc187a085f84008728 100644 GIT binary patch delta 30 mcmdnXxQ~&|n3tF9&cumqA&dbNqs`faU4z0ron0r+Pz3;pAqfot delta 29 lcmdnTxR;U5n3tEUdcs7u5Jvxr(dKMH{-GhRK@(@H0sweW2zmej From 14cba278c6414c3e300ad8e4540457b5a3e0eb73 Mon Sep 17 00:00:00 2001 From: swish1995 Date: Wed, 27 Apr 2022 13:49:01 +0900 Subject: [PATCH 005/236] =?UTF-8?q?feat:=20gitIgnore=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0fa3eae8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/API-ROUTER/.vscode/ +/.idea/ +/venv/ From c021b592a7b4b7b7a3dc7ca0dc15ede2ce215f8a Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 27 Apr 2022 15:17:59 +0900 Subject: [PATCH 006/236] =?UTF-8?q?feat:=20gitignore=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EB=B0=8F=20=EB=B6=88=ED=95=84=EC=9A=94=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 2 + API-ROUTER/.vscode/settings.json | 24 ----- API-ROUTER/ApiRoute.py | 1 - .../__pycache__/DataBaseUtil.cpython-36.pyc | Bin 2161 -> 0 bytes .../__pycache__/DataBaseUtil.cpython-38.pyc | Bin 2157 -> 0 bytes .../__pycache__/PostgreManager.cpython-36.pyc | Bin 3253 -> 0 bytes .../__pycache__/PostgreManager.cpython-38.pyc | Bin 3310 -> 0 bytes .../__pycache__/RemoteCmd.cpython-36.pyc | Bin 1256 -> 0 bytes .../__pycache__/RemoteCmd.cpython-38.pyc | Bin 1259 -> 0 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 247 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 228 -> 0 bytes .../__pycache__/CommonUtil.cpython-36.pyc | Bin 653 -> 0 bytes .../__pycache__/CommonUtil.cpython-38.pyc | Bin 630 -> 0 bytes .../Utils/__pycache__/__init__.cpython-36.pyc | Bin 189 -> 0 bytes .../Utils/__pycache__/__init__.cpython-38.pyc | Bin 170 -> 0 bytes .../__pycache__/ApiRoute.cpython-36.pyc | Bin 4491 -> 0 bytes API-ROUTER/__pycache__/main.cpython-36.pyc | Bin 819 -> 0 bytes API-ROUTER/__pycache__/server.cpython-36.pyc | Bin 813 -> 0 bytes API-SERVICE/ApiService.py | 70 +++++++++++- API-SERVICE/ConnectManager/PostgreManager.py | 10 +- API-SERVICE/ConnectManager/__init__.py | 1 - API-SERVICE/Utils/CommonUtil.py | 4 +- .../__pycache__/CommonUtil.cpython-36.pyc | Bin 655 -> 0 bytes .../__pycache__/CommonUtil.cpython-38.pyc | Bin 630 -> 0 bytes .../Utils/__pycache__/__init__.cpython-36.pyc | Bin 190 -> 0 bytes .../Utils/__pycache__/__init__.cpython-38.pyc | Bin 170 -> 0 bytes API-SERVICE/conf/config.ini | 100 ++++++++++++++++-- API-SERVICE/server.py | 28 ++--- 29 files changed, 187 insertions(+), 53 deletions(-) delete mode 100644 .DS_Store delete mode 100644 API-ROUTER/.vscode/settings.json delete mode 100644 API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc delete mode 100644 API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-38.pyc delete mode 100644 API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc delete mode 100644 API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-38.pyc delete mode 100644 API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-36.pyc delete mode 100644 API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-38.pyc delete mode 100644 API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc delete mode 100644 API-ROUTER/ConnectManager/__pycache__/__init__.cpython-38.pyc delete mode 100644 API-ROUTER/Utils/__pycache__/CommonUtil.cpython-36.pyc delete mode 100644 API-ROUTER/Utils/__pycache__/CommonUtil.cpython-38.pyc delete mode 100644 API-ROUTER/Utils/__pycache__/__init__.cpython-36.pyc delete mode 100644 API-ROUTER/Utils/__pycache__/__init__.cpython-38.pyc delete mode 100644 API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc delete mode 100644 API-ROUTER/__pycache__/main.cpython-36.pyc delete mode 100644 API-ROUTER/__pycache__/server.cpython-36.pyc delete mode 100644 API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc delete mode 100644 API-SERVICE/Utils/__pycache__/CommonUtil.cpython-38.pyc delete mode 100644 API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc delete mode 100644 API-SERVICE/Utils/__pycache__/__init__.cpython-38.pyc diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index d4f251b052df9650aeef4f88448a30865498ccf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO-sW-5Pe&FsCwy9Jmn8)R75<+(jElAXw_>pH58$?lB9y3^3#2@I|QWl(t{M4 zftk0Ro!O7KVYdUo^%gJ3Ko>xVD%jelSs~Idx+E?2Y!RIwV~ATk;2r}Em!i$Fi44fu z?cf4;xWoZZtvSDsQ8Am&XA}1GY_Y#81}RQ(L=}5Vdxk?)ct$~-;Oo80t`=ogF#jAQ ze4=D;jyJ@3#2iyB*v{#V(Px%q#{7Ot`U>wIBg5GD4ww<+npqiMId+a2f6Ka4U0KT2 z&pD#ZP_S?PHQ(r(*V;4ZH8BQ^0b^j(8IXIO(%B7Y))+7bjDdy$xgR2`V4_$D^j8Os zF9C>cy1lS1wS?qEiiu(!kUbO^Qi&neX^G)NI{lHxC5m;xkPfHChtrvzRw&NT&haB3 z4wnQpYYZ3zKN*nPkJ6R*fAD+#?}N-31IEDrWWcriqkfNj)3 Dict: return "" def route_api(self, api_name:str) -> Dict: - # db search api db = self.connect_db() search_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} \ WHERE api_name = {DataBaseUtil.convert_data(api_name)};' diff --git a/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-36.pyc deleted file mode 100644 index 3748d4782fcf8a67b426a81a9f065fbc6c9678a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2161 zcmcgtTW=dh6rRiO`VuEiLMd&zEd@jt(HMzGLWCO|5y^ET+bNP&WNmf^$If1y*>$Td zHZSQ9fM=2)z+c)|o{;zjdE%V0W9(M#6Jo8IJ#%Ju&gJ{g@mH&>#h-ue9sg|*@+Vn% zOpw2Y5&r^{AcFd&gKy^3fOS~FJDd_p2F3;Hn9>sbk_tnZFN{u3TKE&zB^No72TdN< zO!9jKv<1)>#R_N(pylwhMCsBHt6~jwMZLat$;7(Yfc1)?E#hqc1wN35!!o1ZkCV)( z_PxZRnWbbhQlUq28y)6d{b9w!Q3hHw-252EsL z_WEi0Bno6%NI5J&kJM>AbUj)2j=gfV(ylx_JZQEn^>XE~TRGhCHltA@6|D9jHV=;4 zwPtxQ3Pb57kKNGi!A=!!e&ojTDCzs#!}F}thY-Bzt$+iTmO+ut=09^3u!r$_~E z(vQM!?48KK-S#4X6oj$;!}qmj&DJ(&TlP10x@lJ$)tNSQ0|`3k#!IyV4yY1Lkij!w z=WRL_Q1^D=p33g@LbTgG8%cGJ-^3Ubp?9fTgSW${cNF?z5_PqQOEF`-m?9nXBM`<^ z(0gP+F35xlCin}`Q~}os7si+Xx~8xObj&o;IW2Q7=dW@TV{AZX3Jrzym~#d5i#A#? z;w_kZz?2{D2}Q0CNJ0}frUQOKE~dA#EB+fh!<%@@w(M*AMapc)F*0Ki^}~z@?odOS zS-$L`~i$&5;b^7{Yj5N`y+urdb&-LS7 z5N^ImOZ$yht=YEs8|?!-<@T1Xkn3sDcI+pW`cbU~-hGY5aw^YbwE=sMsS~blft=-L z_$#!nR&iSPFWY#<5i}6vDMCwZjebJaeUKevieo;OiH0#NK0lF4E1jd;CL6WZXqh zG=JD8+eH3+q%G>3mm3~-f_cN+hQ%vPfd-(99{z6TMQ>f16F$ZkpKJWjS^gMfTPk58 zefcIDq@^nKXaGZZ=yZ+(R@n>+^&!f-cBe%)&6JJW*O%;~VN7t0l|Ufj(0H*HoKlwa zqh7Bc_A)CuAHrLq=L)MPEA(Vihh3>M3r|U<@O$0Xbl=uRuaVQYEl^IAPyYwxcY;Wa Ye7TF=HpXtBr|T@w*Njc`PX2b`AE>a*P5=M^ diff --git a/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-38.pyc b/API-ROUTER/ConnectManager/__pycache__/DataBaseUtil.cpython-38.pyc deleted file mode 100644 index 9c42b4a03aad74e13bd200d7c4dfec412aca431d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2157 zcmcgtOK;mo5Z(t#JuEx6k+gB2>?4g?v{tW09ixh+q5*8Bu&fjiS_m|EtFYliUQ#J6 zNWCO~py%3veDq)9wWp%}1-`U1OWKiRB$omu!R74ia(DLoz8Q8G7pnxWzrJi7{B02O z2X^K!6FOhRll%&eAc6*@hi?|pko8!|dz=zUX2vP$nbH#cmjr*csbmbs2v+(Q7nP4s{1#NnOGJp&|eU=L!8w=AqLWRSZ3__ zNtzi=-%A~uSxTlO6?qhgiwkWI&o(^CGBkpwWI~?N-@!WJuo`Qh)4T9BPf`UhL%6AX zMpPN*o;T{rs6-KJW)Js^gr`hp|fCpuQbPk@V7CH*yD3)tfMM-%VsU z^@EM!QC9Qf=&4j`AHOMK6bu?d72@sijERHHOx=S(D!`q1dK72Cg@GgRI{0_MmIS@pW5H-J>0eZ=%-kPZtBNTKk**R(B1IjU=&7){r$JC zy_T)_Er#rS_ITB9w3~%DazhEevx`X80tBFH&;V42fd(jVD(Jfvx=&<3Ul8~0AC9Ct z!fz5h7ooSQx&d#8=WA5_D2@9%!fWToGb8@`-1otlP(jzojGU4w6HM^u;AsMhQ!b1N z0V+*l&FF-kBCREDb8VMTN>gKE06LYnLM>bo2V#xEci>6Zp&5WQezd0)1wJDwP1%Ib z_$hgougp&PZ|o3P<72jNpVQCA%yt|jGk%W!DC40!)U;;SQ#TmN1Qg0PzQ_!HN<7dU zUe(P2wCly;aBCH}M-VK^$oP&1(vLuRX%6DXW)ORBkZgf*@y)pQpxtTh?b{F9`w#6g zx7Tg80!xgmwqrkP>~vcli0>=RktgyfQMiX=YUmZFK~^f1pl(7>En)Lgge%tq!4DHu z0HHMs!Tw{hkEwba`i_yaT25rDNzJOiJeEq%5sYHKxGXR(3EqK@pn@T(NO3_d*B*B1 zF|JUZ)0UnVQ>|z*29*lr?w?9<2)=M?=Va`Dz~jYozKu*i^@<-bd>yhdM0e=S5hh z?sv_`e#;)4cBi$Ui{`vk)B|-J=AN<4^ivrYqOo$(VEIw+LetY6qYy7RM*B4inuh?_ z*JYT1ek{;W-hzrgff0x49j+Hbog6Sh7laKkuIUAef-VH`&$%oF)`>ag6Rh#2_Wyu0 zO6vvAc^V5D$k)+7t~H@z10A|vD_laSu_i)&1l=ODa$xS@_^Weuezy-W8vRc%kcRqu z7uTz0r63**{AiF_>Cq703hSW4G|4IhneM=-RGEddq*9nVx~l2&t+QQ|rB|ENn^vCw e6_hu_Sd0R>g#|akaLaU=mHCpfYQ9mvS@{<*B*=FF diff --git a/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-36.pyc deleted file mode 100644 index 1afa5b2f4798e63a3bbdad15a943736782db33b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3253 zcmb_eTW=Fb6rS0e*NziH2qA&ex~eMGD%cd-s;v+ukg7tWCJLZdE76s+GjVLzUT1bK zNNPVhua(+o!h8Fd_O(y^1)lnyS)0Tc`qZ`N`0Sb4xqRn4XU?s~#lmlYGm+Xm|^PKW63J8_daSWh1p7Hsd6-q^78{#so=QJ)Kq)XdToHUgDsotqKq^gy3skIMNYIP$8*#j!6+pWj( zi%5yo1tRs`dMr~X4)$fco;pe2nhT;%M+Vp}DXA0mR2(Tf zNi4&?|Ni)IrdBb>+h42uQCn7pl-(*$`aJH|16d7rgX-4ilg;bfk9MAHKCEtT`h9XeKr0f zAfD1guoAo)+G|h})&jUKK-&VaEx_8+PzwILJ>Us|6vmKqxBx(!wX*$QET$JPjSf^P z=i&YMFo?R1n~Jvm-YHTij2fU&YBf81QQ1%zX!Lm!gm5MwDHzRZ_6j=wf_ z{E<@;vu1n{s&g0`5CZg2uCUNF5??||a7KMnAObv~4>T$*YsffD?3N>V-*|;=^4g?v znp$S<=-T9>r5|3(0KP5l$ha3KmC|P_dQl3ZUMDGiS9;6KAeG%!%}%0Luxgr<*?4_S z5HD)Cn~7RSm)d|Rn;8g~X)FST=9~uOD*CRVjlghuaUK|>bugix%hp@UFd;1HA!aye z8k0U0uwjG>BHuWscVM%{fQ{KV1bc3%8`@?L*}&=)wQlvnn1Q7cGy5EfSs7vtHn3lo z`qmbEwmxwBb}N^-Nge@>EIZWLAN=w&Lr|N02H0lTCTL5}dW;qm6&l#ev*LjFkt8?R zpT>bjajuBw8XdUYsN6^`A>&{QuD6BTArd%%?%w%?<|9Tp?5I5H#|i=;388X3jDmU? z-+?mz>Zmk1wDedH9ebW!PVOid6nQ3d^Mc+CSC zcYBT0sdu}wBd~v5GO2mg?3Qz`L!NmTN?+pzp#-A9 z@$kN*J`{0t)5ZCyoIOq^$YjiP26gKSjUQZ!rY#xl_Wq=gszQqh$^27>^ghj#T2jBoHV z3kEYGJXEq#NF{noJ)2Ih<3#fRF=9RhTe^mt0|8~Qxe%P?#QRU5)n?zGo*tYqW;l_J zdY7Ci=}^;Ild1`L7WAiEV_be1*(LTNI+3NcGo~&y>iQl{XCpSt!|Yzb#~No^j-H97 zDF9BFCVEY7!pt&}9fT1oGP+gg?Zye1AzU#_D;R9!7oZ9;j-_tS#! zwSDS~U4FUXI?K-b(we<$uQ;x$sJ~oHb5vL~JIJibVHf{r*1UufX>kih={*#s vPm^YtWfmPx#HTdhkjX<`m}K`d%{gx~se3y+`W^C1Oxto%nz+WQ;hO&fYLm^p diff --git a/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-38.pyc b/API-ROUTER/ConnectManager/__pycache__/PostgreManager.cpython-38.pyc deleted file mode 100644 index 176a8d5af5527be9fe9f385ab4c11325d8a6277f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3310 zcmb`K&uZ*`XimJ9k6hTmhRHBLq4lALRvojcnwbz+l zizZs1l4}n=6C~$W{-wG0#J|9${k~Z{KkU#`C)(%PH?#BOGw;25c{V#+VugiPd-YSDa{H#Zad{AF79jA^Qq#mCEiJlS6ml7(Eb(31A?pWwne zsL;0dX?tezp(}0ZD+iYFMHPBaT*Vg^>C5V6CTa(^m=X1TH>^Qh>bRJNc21l_?-^*T zvWgMr4;*n`EI?N$9W)ov>!MhMW>zeTOZzOGgLe6Vi_78)wC4=6YkKatG|O8`K52HF zEveRnigsQ>rJY`?Ao~EO{a!Q6-lR%sAF!I6%}i=9i(ko3Q+rD0ebtRC*!Q?l-NN$_ zPj(NY;023VVL|f3hO`O?(k@&`r|=+A8+wNfwMxOZDnsAYeZe-^d%hl26&aVBAyFqW zOJa`1IS5^e({5MBSTR+!7xz_`D%wpZlb8Sf@q4D0FviD+tIx38Y&G7DSJxgrUwx8p zwp+5hN_)OZIGV}o!*ZGtuGQ1@R(dP)%c5;Y;|0S zA8|AcZ=jO1El}J7!z~cp0>3RV+wuhe!yWJ(#DsOoIatFN?DfF?xPM%iST^6xLfrn0Gdj zAzK2O-5aMTZan&3#{FD2p31DB*5!$7$u%3ZqsM!SvHK(N3 zVgt8u*4T^XfmgW0O77=X_%Pz`o|$9&dEtVqyFO*U4%V`PCnIbvEaOFezzami%j{2U z+rdX%k;xl6ICg9079yj};t5>3b~iyl2k73tuV_3P*h7Tb4Njlr3Vak$plwtqckPwC zp>{)%!A2IyR;)T-upHEu`0nEAZH)*7wsy^xrK>R8)LdNChC>*S9O`?#z@gwuIC`AY zTlNmdvS-0$7@W&EP;L($fjWBFCtS)|*L-CP@MCk=P62imO=*I5iTc=aoDvrWJ9U!; znf(-%@(y1`Q|3W1P=N1DawvNRj-t`DpUK=n(6u+Oq$+Rn5(q&U7h2g7kRR|e4WzL5 z>;YmgkT~RFBP7lg619Twr=UDD*~S@AXe*OYu0w|~ZbGYpa*H~BOX5s2Wh!$A?ISYF zXOSs;A*h%k&1fdno(w7fpJkklVa;S%XJDW>b|!|Cw()5KW#;zdF#*_yHDw!RuT$ZQ z!q8F1LRkeIfeks`BXn!1^HAZIGZ$O~_4m9ymWj)bntsNUnR{#6D$Bb9Vb2h!Nyp{X z0+yjYUI1#=?P;`nS zU5lblD*DKKBVCV>_coJJi=E|4(IU$vfg+~1>3*bbD>5YY4GD5mb(_R@BpM_r&YW1L z0ca8h{L8>7$IB>V@cEUR@6CJ5b4%_;cfs>*MeV_?u2AC9?jqjiJ3aiKnDa7v==vJ6 zwFk&hpXKeOj5Wr$jAhYvtE(-U|7xkxaTEOi&iaCqax2`R2ruB z3B2WMnSN5pj&f09K81jP614`~-w(Z$B9lEK<)jByoa#v!$zF66^>+J*{imb-@nQdM zuRr4b(HjaE4uGK^lLmrOLxhTBN`N zaIC^CJ}pe+;NZ<5jb&a2+gg@9i?xpPV}4TTlAp>mJ}J^TIt$wUX<77z7}=w#FKF%7 zR1@mDi%``-2XZ=BEwp@4C>j-^K3%6BdcL*d;C9!bk1WcBszY#O2?GNe!3J7Z9)p2n zkkE?G=tp+pT!2(8aeyaR&;&<=B4d^j0~2ox3tIB4j9@ylEX;*zC>e@0&ZRbPQpEWZ zR|nD?%1up|0(xyc8xu5@)YG)w4a@L9gvN(@Ip$u6PZuyd0JQ1cZ1plIq7a1(cN7Z> zKb?b`!R7T#+ro_(rG=JVIw$@%zoyQ)kSXU6Aj5LP?yuNgc)M#ji#QORnSb6d8yivPTfPbfeM?a9-`VtwW`5dw$a!u{J|^(KHX$nwT-&M+paUu Tg!WyZ8vn(-o|njn1>v)Q@Aw_J diff --git a/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-38.pyc b/API-ROUTER/ConnectManager/__pycache__/RemoteCmd.cpython-38.pyc deleted file mode 100644 index 1682f401a54a993766a97d7aa041d98b56864fcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1259 zcmZux&2AGh5VqI5$tF#zwuq_%9)L(dUI10CQUsR<)TkU*NY-|3+HLnI*p8sp_C&AT zIQEbn`v|;>ubg-VPRuyjrbQjelNozFp6{F49Co{H0`l`cKlx_NPT<{85VGh>;*W6OzDhV230Wi zz-BWtqm)#^sbAw2^oNf-&`WRFV-AfCCs2D4=h8s}xIn0i^YpB=tFkC(@BOS6y^lph8$0 z6`>(rr5p5OYstg?_CUi}k_**@;KY%J*FcaJ?3U~Kb1*7$3fxq5MnADj?-EwUrXFzR z3p&L)pvanI#lo1o;-ZfHCKDKiJdX=uTS~?vOAD#3e_EzRjqMSnx0Kt4Hlmyu8@QOL zt)!l0W)BA7Ka@6vnmOiPg{upw8vwTL-EDatlu(GO1#JZCfZ_Eyuo-mQ0Q(rf diff --git a/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc b/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index dc12785293d253157a8cb9970156e367f36a6d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmXr!<>jiLke(FGz`*brh~a<<$Z`PUVi_Qj!jQt4!w>?Y8KE>2kY);I&}4qe2vnlU zc#BcXPm}o;k4s`nqEljVYG_Gj&Mm%x{Nj@IqEz3+yu|d>qFbCnsk!+jsm{46D;bK| zfcn71uL%8&{M=Oil+@G${qp>x?BasN;#}G%|0RNy6M<0F1fOy9M&-kGH z(vs97AkR}b$Uij1HAvq%KQAvexddv7etdjpUS>&ryk0@&Ee@O9{FKt1R6CF(i&=mK I2O|d~0Kx7;UjP6A diff --git a/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-38.pyc b/API-ROUTER/ConnectManager/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 3d7c7d192a7cbdb336f655624c49607d4d47d41d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmWIL<>g`kf=|+ENx?w+F^Gc7nLOD=sV}<<)tQ-UsbQeNSCs{(4&%5#2BwpXz5y#1? zOiMw}AK))-OGQsb#n`5}hF#6unc110dAs|3JU+<3C6~Vmz)!d{80tqTjhnLTqJ@Qf3G# z>`4U~X<$!ln$e17JhN&n+fYFT`$`Gi9O2HOfn)gaV$V{jNzG<(^8~$i%^HIKhkK5e zQ?r^kwB3IMHJ`!tn+v#}USI|`#!qjb`iszCybYIXS4r)mI$55buU;>`Smo;u(qx+E z>8-V^){~b=!jXBbM4Bh=(2UxsG$|roN^M5-&RX;q*D?}@s?zY5vEi9Y^S~)(T%{^6 z16viHVpt+8*U}Wp2X>UJFkUBS(4TDVfAPVf5B~vrjDdgNc~@#HJt1Y`eNy^kSwyk) z;>*}O_E-L7akgCfC&=eN?9QunQ+ji?-KxCRr^RP;fPI90S-X9W2M9nob;tpp?2Sqiybm+P15QxKs~EICTv=J^E~D%E4ji_b&TOm1ZX;i{zoB#x K9IWC{hyDc(#H$nl diff --git a/API-ROUTER/Utils/__pycache__/CommonUtil.cpython-38.pyc b/API-ROUTER/Utils/__pycache__/CommonUtil.cpython-38.pyc deleted file mode 100644 index d425ebae7a06189314c6964ff8937be3b290503c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmYjPv5wO~5S<-6_Fl*#aWp~V2P|X}C#Spi z{vj^;rERIG>1bfq2I)qcxASIZXGXKTK0TcR$@Xor`NaT!IC5W*$ZOK(8G!)7DoDnY zC2ZiBpv0rsL*fe*-Yp~(!9GFc|D+pmnLGS1J{g>JMcNnw1qW#1$a*-ij%~5^w*GN4 zU@&0V@}BifupV9YJ7mzY<4F$}@a6dd6?D+y()p$x_KdvqgGcN^hn?4>i#~zQTf)`H zt7QjnuFIRV#UjpiT@0Ygg{sxf+iGntM#{9)ixB$)Y(p2PT^_@@H8z{CDSzFjm%r6>&Aw9KN?;s+sIGCtk!8> zlr|VU+VEeh4aUsxU>?!Fe!qy@aF^ErO6H>#9%EV4E`-)qxmRlIIh)x;~k z+v(cbi~Tn{r9SCcJ9NvR69Ds(v!@LIAZdUz#@RzQNAs9sQD6c(j7MO@N|zorMmzC diff --git a/API-ROUTER/Utils/__pycache__/__init__.cpython-36.pyc b/API-ROUTER/Utils/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 3574bfb7653446f41186d1dab51851948c08a4a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmXr!<>jiLke(#Pz`*brh~a<<$Z`PUVjduo!jQt4!w|xd!W7J)$^4QLD5S}Fi&4u@ zlQD|RIX^cyKQFW-GiN135i?KlIYq;;_lh PPbtkwwF6mS48#lo4bv}f diff --git a/API-ROUTER/Utils/__pycache__/__init__.cpython-38.pyc b/API-ROUTER/Utils/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index cf34a64269782e7ce78f01b712bdbf6916562705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmWIL<>g`kf-3p6Bq<>M7{oyaOhAqU5Et_Ri4=wu#vFzah7_h?22JLdj6fkx##@Y9 zewvI?T+aEqx%qjaC7C%Z8H$*JQefhjiGFBtYEiL%a#FIsi))y^Z+=o{dTO42N@7W( rZb5!gNn(yZNK>(Xe0*kJW=VX!UP0w84x8Nkl+v73JCGfpftUdRNK+?n diff --git a/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc b/API-ROUTER/__pycache__/ApiRoute.cpython-36.pyc deleted file mode 100644 index da4adde0d50340c33404c01fb1314bc724268bc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4491 zcmb_fTXWmS6~^Mut0?)>D0N*nX_L}3HrphsZ_jn!-3*nHxdtbAx-_e`RoA*mEmb#kj(&7+3Xpjn{bnl@VNm zzQLQ&H|J(>nX^YmXXQV5KVzrERAqDb-rndq6OsmZqEtK>aS?Y+Wp537nX>N>(hRrQ zR>xA6J&}wuaW~42Mx7!cbMiFd6aVnELfFe106o#T_fnr1GQj zKu-;-V_KZ|D;)0>W+!72G`M&g9miStB8rd2H->ECWwiMAUiWa6h%Ogm-2Kx?K1;_@ zPjq_+z3$fL{^rfyhkN^*_q&_BA&?4ls4%*BbMN8f{q4Oj-d8JcjZb71n>OgEK17w- z`cG@mAY$U~22J}l#P=ftRD84wS{1D(>Y}l3eAO(F^6=z)!>6O2&WfyIBUvXwkC#mn zD-g=>MVaW2*vY&K%CB z&VbF_seNQj-8o~%^Xe00YE0SGoZ8%cZNql09aY2o9w$T1a>rJ#6e+k>bs^PhrWgm`cWNXfEOLdw92tITIjQ?@ZW!#bUN11)_8v0zjE$jm0`fF2rwjERie4ejh+~TXaUn}pg@k=Uc zp{v^4wDs-)Mvoulwn3c%EKAj-_V;`Ml(SSlK3eJ+6Of1IHW46$U@!6OWCQ2pPrw7jthi|!Elg; z;rrO8;K611GkrE$Egf_*tHb2aFtJC0iGFk~jZ$KO*ENn9jL|qUx!Gsj`r2X(Egi=C zj@E(J=I*(<9<7o?`U1j;-WNmX1K}+6CYRE1qmTDUd&;fMFs?SWhl@;`? zlg{K;akY!9Q(WER>a8PBe(lcKa4oYyRfTr?hw;XwC^My;SlvPL$dg+7JXZE0`pO=U zB;;|56z5Y^M20}nq_A;-WT)J;cPNqw7ERGien{dY62Brr@m>A~VzRn3%G&pmaV!!s z%mlyH?l`$s)A6(?C^sJUDU~`pjCD+nqB8lxIV4rJHyRE_FAMnrJt3vQZy@fhu@-yF zTw{|z`I!K=#`FM>6R-IZun_V@ZqoE0leS(wAlKg^{n_9nZ$kHbw3PG)^Udq5iTIz($$H7edDjBJl%exb zM0QR;G6v#D+xtJ!DY!8&K)B#0Gmoq(n=_#8zVT+()I74MmPXs2IhlhR(VN;+2WTVD zXjYdQ_H&-j?c(ZPkb%LrSMK8JU1&FtS2SnUi#e0G@#^vuh{=ui_x+xHvAwt5CYq>{ zYk$&~pVBJAQf@#1Ak71T4*x1Cloco_XAfTp2_JwfO2R9r)Xyo^&=Rk5i$qDN+@|40 zJl?{M`)CUuts5qI%%wTGa+b#;ATC}}r;}w4DK}~k|ANkf!+|lgbiH#29szHf8>o6d z0>Tdb09hYV?TeT1OkHSOGoTD!y(2J-D(HhJ#`9}a@)qYddZ>wrWlApKa%%P29N!kD zj$)xr8cy|+vm@WaTWC5ouo~h5Q7W-H>U@;d&L9&>Du0Bz${h?5@iOf)odQygAwe3f zg{@*ZIoa6$R{U044CcwA{qxu7VCgu*C zx!Bj^Rh<+)UMsHk;)>4;3d)&3b&o12xG8Bip@R{^kXHWx&dzYs$+i8%LE6TDG;ALa zrRbyZ7E6kI zo73W`dEv(zS+VSpc%Ot0c9dBpg(dwBCCOhT8JDC-F1?1fKm9HC6WpM>PRB5xUG|%v zUuia4tN8OJ-R)da9+eq`VPAPqqclVO)zx?4k570s%mzJ4UKP0bY{n$1UyQ2bzyUMj zrF5y^yqi}b#n*ohFxh(^oGY2cH}pZ&d!{PLd-ru+BgsMa_hf#aHVx^WE;@?xZ|C3p apOT5_5aF{r{#w8mLBjIQmfNcN{(k}L3hgrh diff --git a/API-ROUTER/__pycache__/main.cpython-36.pyc b/API-ROUTER/__pycache__/main.cpython-36.pyc deleted file mode 100644 index 64573f8f7a7c1287efbda6e0d5c10abe7ddf1d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmYjOO>fgc5Zzrn{z#m(1ZYY6UAP2^^uP@vL{))=grF)^NPDrIc;c>Ed##NFl&gOY ze`&9r_y-7aVAhR9z4FYPH#@U$XP@@_-R)=Dtm6>!lid0|#4qt*{za3LluA-iPN~IA zGR|7>aHsWd>mAuCJnpr7TDxK9<6)zc^`ZDa!_pW4N71G zSiaeihURzp5S;vOeh-=Z`4$Y*pkWPaKz6$!`~i&8@H5lDA%I~+`54A&cSO?Oi0~a4 z!w&l0H5Vb?TjM_BeF$L(c3}?=V85Y_%MT&Ko=0$$AH!k((4LdB4`edjQi;@J1 z-E{jw^ntCk=1(|1v9q04*Cu#gsB|Ua1;xbjF`9@5cCm=swTU=l1Ga^X%B6VGeDQ$!gAX zw1VTBpUGtli2e6z(;lCGMChER?c(MDjl;7q=ilC)MJ6K>GS7LH9~najNm8b~N)qie zn5Rq8YKzUZvye@zom#5)CTu`mf_jzK_0&=W>_CMmrq8q`8||;l>CxS~Jl9+2Ef>wv zi7ZQ58LTXmirXaGpJS70&6U$z%S)a~RcXJ*h6SG~vtsQb$Lxw}uTB+ItsW>T+r(Va z-io>o=Ul)^KL%{pM4UqMN)Isg6Ve2wJ<}FyBwD2hSiiws8P@#H&m!8LSIvZ&gU!YFTNUSM5)to*SM<{5y;mvV@2M)X|kx7fqdJ x5M{G0y0etkc#rC99lS0jTMBqXF}ZnxBB17M_6M~+qGK9ZD_>xt-wLUR(f`*+<}d&N diff --git a/API-SERVICE/ApiService.py b/API-SERVICE/ApiService.py index 86faa8d7..107a6977 100644 --- a/API-SERVICE/ApiService.py +++ b/API-SERVICE/ApiService.py @@ -1,9 +1,10 @@ import logging + from fastapi import APIRouter from pydantic import BaseModel from typing import Dict, List -from regex import D +import re from ConnectManager import PostgreManager, DataBaseUtil import traceback @@ -19,16 +20,28 @@ def make_res_msg(result, errorMessage, data, column_names): return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} class ApiService: - def __init__(self, db_type:str, db_info: Dict) -> None: + def __init__(self, db_type:str, db_info: Dict, query_info: Dict) -> None: self.db_type = db_type self.db_info = db_info + self.query_info = query_info self.router = APIRouter() self.set_route() def set_route(self) -> None: - self.router.add_api_route("/api/get_all_info", self.get_all_api_info, methods=["GET"]) - + self.router.add_api_route("/api/meta/metaNameList", self.get_biz_meta_name_list, methods=["GET"]) + self.router.add_api_route("/api/meta/getMetaName", self.get_meta_name_detail, methods=["GET"]) + #self.router.add_api_route("/api/meta/insertMetaName", self., methods=["POST"]) + #self.router.add_api_route("/api/meta/updateMetaName", self., methods=["PUT"]) + self.router.add_api_route("/api/meta/metaMapList", self.get_meta_map_list, methods=["GET"]) + self.router.add_api_route("/api/meta/useMetaNameList", self.get_use_meta_name_list, methods=["GET"]) + #self.router.add_api_route("/api/meta/insertMetaMap", self., methods=["POST"]) + self.router.add_api_route("/api/meta/getBizMetaList", self.get_biz_meta_list, methods=["GET"]) + self.router.add_api_route("/api/meta/getBizMetaDetail", self.get_biz_meta_detail, methods=["GET"]) + #self.router.add_api_route("/api/meta/insertBizMeta", self., methods=["POST"]) + #self.router.add_api_route("/api/meta/updateBizMeta", self., methods=["PUT"]) + self.router.add_api_route("/api/meta/getCategoryList", self.get_categor_list, methods=["GET"]) + #self.router.add_api_route("/api/meta/updateCategory", self., methods=["PUT", "POST"]) def connect_db(self): if self.db_type == "postgresql": @@ -39,5 +52,54 @@ def connect_db(self): logger.error(f"Not Implemented. {self.db_type}") return db + def get_biz_meta_name_list(self): + db = self.connect_db() + + body_query = f'SELECT * FROM {self.db_info["biz_meta_name_table"]};' + body_info, _ = db.select(body_query) + + header_query = f'SELECT * FROM {self.db_info["biz_meta_name_table"].replace("tb", "v")};' + header_info, _ = db.select(header_query) + + return {"result" : "", "errorMessage" : "", "data" : {"body" : body_info, "header" : header_info}} + + def get_meta_name_detail(self, name_id:str): + db = self.connect_db() + query = re.sub(f'#name_id#', DataBaseUtil.convert_data(name_id), self.query_info["getMetaNameDetail"]) + + data, _ = db.select(query) + + return {"result" : "", "errorMessage" : "", "data" : data[0]} + + def get_meta_map_list(self): + db = self.connect_db() + + body_info, _ = db.select(self.query_info["getMetaMapList"]) + + header_query = f'SELECT * FROM {self.db_info["biz_meta_map_table"].replace("tb", "v")};' + header_info, _ = db.select(header_query) + + return {"result" : "", "errorMessage" : "", "data" : {"body" : body_info, "header" : header_info}} + + def get_use_meta_name_list(self): + db = self.connect_db() + + data, _ = db.select(self.query_info["getUseMetaNameList"]) + + return {"result" : "", "errorMessage" : "", "data" : data} + + def get_biz_meta_list(self): + db = self.connect_db() + + body_info, _ = db.select(self.query_info["getBizMetaList"]) + header_info, _ = db.select(f'SELECT * FROM v_biz_meta;') + + return {"result" : "", "errorMessage" : "", "data" : {"body" : body_info, "header" : header_info}} + def get_biz_meta_detail(self, data_base_id:str): + return "" + def get_categor_list(self): + db = self.connect_db() + data, _ = db.select(self.query_info["getCategoryList"]) + return {"result" : "", "errorMessage" : "", "data" : data} diff --git a/API-SERVICE/ConnectManager/PostgreManager.py b/API-SERVICE/ConnectManager/PostgreManager.py index 7bcf2948..941e2a58 100644 --- a/API-SERVICE/ConnectManager/PostgreManager.py +++ b/API-SERVICE/ConnectManager/PostgreManager.py @@ -1,6 +1,7 @@ import logging from typing import List, Dict import psycopg2 +from requests import options from .DataBaseUtil import make_insert_query, make_update_query, make_delete_query @@ -20,7 +21,8 @@ def __init__(self, host: str, port: str, user: str, password: str, database: str def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, - password=self.password, database=self.database) + password=self.password, database=self.database, + options=f"-c search_path={self.schema}") logger.info("PostgreManager Connect.") return conn @@ -45,17 +47,17 @@ def select(self, sql: str, count: int = None) -> List[Dict]: return result, column_names def insert(self, table: str, into_info: List[Dict]) -> None: - sql = make_insert_query(f"{self.schema}.{table}", into_info) + sql = make_insert_query(f"{table}", into_info) self.execute(sql) logger.info(f'PostgreManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: - sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) + sql = make_update_query(f"{table}", set_info, where_info) self.execute(sql) logger.debug(f'PostgreManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: - sql = make_delete_query(f"{self.schema}.{table}", where_info) + sql = make_delete_query(f"{table}", where_info) self.execute(sql) logger.debug(f'PostgreManager Delete Execute. ({sql})') diff --git a/API-SERVICE/ConnectManager/__init__.py b/API-SERVICE/ConnectManager/__init__.py index 34c7045d..080d56f0 100644 --- a/API-SERVICE/ConnectManager/__init__.py +++ b/API-SERVICE/ConnectManager/__init__.py @@ -1,3 +1,2 @@ from .DataBaseUtil import * from .PostgreManager import * -from .RemoteCmd import * diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 690a8ad3..41c822a9 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -8,8 +8,10 @@ def get_config(root_path:str): ano_cfg = {} config = configparser.ConfigParser() + config.optionxform = str + config.read(os.path.join(root_path, - "AP_API_Router/API-SERVICE/conf/config.ini"), encoding='utf-8') + "AP_API_Router/API-SERVICE/conf/config.ini"))#, encoding='utf-8') for section in config.sections(): ano_cfg[section] = {} for option in config.options(section): diff --git a/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc b/API-SERVICE/Utils/__pycache__/CommonUtil.cpython-36.pyc deleted file mode 100644 index 178fca0d7aacadfe34a480c91612ff971d6f7c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmZ`%J#W-N5S{(-*%#e~hzcZXBo}v_T=FaP^eIi7@ z%Cr>p`~m*bwp6r8G*pajiZtwM-pO)-q_b&2CCyj^0hgAb--uv>f9AnJkaKXYpO^<{E-^!`R23Fcbsb}oZdiz|%u&h= zA%z{OAR`UzXiYO(v5aR{jb$4us9;|xf!jme88mPN?_ca#3N@+O3~ryI*REMZ(En)1 z(Q;~5^MxOsgEH`7bZz{dF5o$D_`e{m8n)wYt_Lv?a~ynJ^uKlWmkuR2JR zX_}{Z*0x$rULp%e=CKlKp14CZYNOJmh;%8n8O=Lu(OX>0NEoV0!&}ORXDZDDr<8G( zs=N$rRdkABiL6{pQ)D05QLe&xm6$<)va$cg2ZKKRJLoY6{#kn0Y9l=%W#N5P`a@Yn zvGn4r*gNts{K?|Y^1?qwLjR-pwo2EfH&>gD%3FO}d@_63NZ8l4+xK{g0EAPAjBxG~ zha8Y6R6jtkYwI>da|C0rRg&O^m?0i;iaOrKp!MO(%1U<`UEB9yzs+=J8zr`D`KtX7 MrGwyL6^AX}C#Spi z{vj^;rERIG>1bfq2I)qcxASIZXGXKTK0TcR$@Xor`NaT!IC5W*$ZOK(8G!)7DoDnY zC2ZiBpv0rsL*fe*-Yp~(!9GFc|D+pmnLGS1J{g>JMcNnw1qW#1$a*-ij%~5^w*GN4 zU@&0V@}BifupV9YJ7mzY<4F$}@a6dd6?D+y()p$x_KdvqgGcN^hn?4>i#~zQTf)`H zt7QjnuFIRV#UjpiT@0Ygg{sxf+iGntM#{9)ixB$)Y(p2PT^_@@H8z{CDSzFjm%r6>&Aw9KN?;s+sIGCtk!8> zlr|VU+VEeh4aUsxU>?!Fe!qy@aF^ErO6H>#9%EV4E`-)qxmRlIIh)x;~k z+v(cbi~Tn{r9SCcJ9NvR69Ds(v!@LIAZdUz#@RzQNAs9sQD6c(j7MO@N|zorMmzC diff --git a/API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc b/API-SERVICE/Utils/__pycache__/__init__.cpython-36.pyc deleted file mode 100644 index 4876212ffe82f53de8653bdc187a085f84008728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmXr!<>k6FF+E9&fq~&M5W@izkmUfx#XLYFg&~D8harR^g(;XplldhhP)L*U7NeG* zCSw$rbAE1aeqLxvX3k26B4(fznD`Z-pOK%Ns-KdYTA*K^UzA;3keHmRpPZDe@8THZ zs2kuP6yoTk?-&s87~mNnlwVqsS_I^I>IS<8g?T!=>Vpg{){l?R%*!l^kJl@xyv1RY Qo1apelWGUDzZi%a0D!YF0RR91 diff --git a/API-SERVICE/Utils/__pycache__/__init__.cpython-38.pyc b/API-SERVICE/Utils/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index cf34a64269782e7ce78f01b712bdbf6916562705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmWIL<>g`kf-3p6Bq<>M7{oyaOhAqU5Et_Ri4=wu#vFzah7_h?22JLdj6fkx##@Y9 zewvI?T+aEqx%qjaC7C%Z8H$*JQefhjiGFBtYEiL%a#FIsi))y^Z+=o{dTO42N@7W( rZb5!gNn(yZNK>(Xe0*kJW=VX!UP0w84x8Nkl+v73JCGfpftUdRNK+?n diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/config.ini index 512818c3..8d170733 100644 --- a/API-SERVICE/conf/config.ini +++ b/API-SERVICE/conf/config.ini @@ -4,13 +4,101 @@ host = 192.168.101.43 port = 16000 [postgresql] -host = 192.168.101.43 -port = 5432 +host = 192.168.106.24 +port = 25432 user = dhub password = dhub.12# database = dhub -schema = api -api_info_table = api_info -api_params_table = api_params +schema = metasch +biz_meta_name_table = tb_biz_meta_name +biz_meta_map_table = tb_biz_meta_map +biz_meta_table = tb_biz_meta +category_table = tb_category + +[mariadb] + +[select_query] +getMetaNameDetail = select kor_name, + eng_name, + show_order, + name_id, + (case + when type = 0 then 'text' + when type = 1 then 'int' + when type = 2 then 'binary' + end + ) as type + from tb_biz_meta_name + where name_id = #name_id#; + +getMetaNameList = SELECT kor_name, + eng_name, + show_order, + name_id, + (case + when type = 0 then 'text' + when type = 1 then 'int' + when type = 2 then 'binary' + end + ) as type + FROM tb_biz_meta_name + order by name_id; + +getUseMetaNameList = select tbmn.kor_name, + tbmn.eng_name, + tbmn.show_order, + tbmn.name_id, + case + when tbmn.type = 0 then 'text' + when tbmn.type = 1 then 'int' + when tbmn.type = 2 then 'binary' + end as type, + case + when (select tbmm.name_id from tb_biz_meta_map tbmm where tbmn.name_id = tbmm.name_id) is null then 0 + else 1 + end as use_meta + from tb_biz_meta_name tbmn + order by tbmn.name_id; + +getBizMetaForm = select item_id, kor_name, eng_name, tbmm.name_id, type as value_type + from tb_biz_meta_map tbmm + left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id + order by item_id; + +getBizMetaDetail = select T.biz_dataset_id as rowId, + array_agg(T.kor_name) as kor_name, + array_agg(T.eng_name) as eng_name, + array_agg(T.type) as type, + array_agg(T.item_val) as data, + array_agg(T.item_id) as columnKey + from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name, type + from tb_biz_meta tbm + right join tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id + left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id + where biz_dataset_id = #database_id# + order by biz_dataset_id, item_id) T + group by biz_dataset_id + order by biz_dataset_id; + +getBizMetaList = select T.biz_dataset_id as rowId, + array_agg(T.item_val) as data, + array_agg(T.item_id) as columnKey + from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name + from tb_biz_meta tbm + right join tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id + left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id + order by biz_dataset_id, item_id) T + group by biz_dataset_id + order by biz_dataset_id; + +getMetaName = select * from tb_biz_meta_name tbmn where name_id = #name_id#; + +getMetaMapList = select tbmn.kor_name, tbmn.eng_name, tbmm.item_id, tbmm.name_id + from tb_biz_meta_name tbmn + join tb_biz_meta_map tbmm on tbmn.name_id = tbmm.name_id; + +getCategoryList = select * from tb_category order by parent_id, node_id; -[mariadb] \ No newline at end of file +getMetaNameForView = select tbmm.item_id, tbmn.kor_name, tbmn.eng_name + from tb_biz_meta_map tbmm + left join tb_biz_meta_name tbmn on tbmn.name_id = tbmm.name_id; \ No newline at end of file diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index ff59452b..18a315e6 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -4,21 +4,25 @@ from Utils.CommonUtil import get_config from fastapi import FastAPI import uvicorn +from ApiService import ApiService from pathlib import Path - +import uvicorn root_path = Path(os.getcwd()).parent logging.config.fileConfig(os.path.join(root_path, "AP_API_Router/API-SERVICE/conf/logging.conf")) logger = logging.getLogger() +api_service_cfg = get_config(root_path) + +db_type = api_service_cfg["default"]["db"] +db_info = api_service_cfg[db_type] +qury_info = api_service_cfg["select_query"] + +app = FastAPI() +api_service = ApiService(db_type, db_info, qury_info) +app.include_router(api_service.router) + +if __name__ == '__main__': + host = api_service_cfg["default"]["host"] + port = api_service_cfg["default"]["port"] -if __name__ == '__main__': - api_router_cfg = get_config(root_path) - db_type = api_router_cfg["default"]["db"] - db_info = api_router_cfg[db_type] - - host = api_router_cfg["default"]["host"] - port = api_router_cfg["default"]["port"] - - app = FastAPI() - #uvicorn.run("server:app", host=host, port=int(port))#, reload=True) - uvicorn.run(app, host=host, port=int(port))#, reload=True) + uvicorn.run("server:app", host=host, port=int(port), reload=True) From 66fdc47393b48227a57cef924b0cd5c3faaa5c83 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:03:39 +0900 Subject: [PATCH 007/236] =?UTF-8?q?faet:=20route=20=EB=93=B1=EB=A1=9D=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-211 --- API-ROUTER/API-Router.log | 61 -------- API-ROUTER/ApiList/delApi.py | 11 ++ API-ROUTER/ApiList/getApi.py | 23 +++ API-ROUTER/ApiList/getApiList.py | 19 +++ API-ROUTER/ApiList/setApi.py | 40 ++++++ API-ROUTER/ApiRoute.py | 131 ------------------ API-ROUTER/ApiRoute/ApiRoute.py | 44 ++++++ API-ROUTER/ApiRoute/ApiRouteInfo.py | 21 +++ API-ROUTER/ApiRoute/__init__.py | 2 + API-ROUTER/ConnectManager/PostgreManager.py | 5 +- API-ROUTER/ConnectManager/__init__.py | 1 - API-ROUTER/Utils/CommonUtil.py | 34 ++++- .../{ConnectManager => Utils}/DataBaseUtil.py | 2 + API-ROUTER/Utils/__init__.py | 1 + API-ROUTER/conf/api_config.ini | 15 ++ API-ROUTER/conf/config.ini | 4 - API-ROUTER/server.py | 29 ++-- 17 files changed, 223 insertions(+), 220 deletions(-) delete mode 100644 API-ROUTER/API-Router.log create mode 100644 API-ROUTER/ApiList/delApi.py create mode 100644 API-ROUTER/ApiList/getApi.py create mode 100644 API-ROUTER/ApiList/getApiList.py create mode 100644 API-ROUTER/ApiList/setApi.py delete mode 100644 API-ROUTER/ApiRoute.py create mode 100644 API-ROUTER/ApiRoute/ApiRoute.py create mode 100644 API-ROUTER/ApiRoute/ApiRouteInfo.py create mode 100644 API-ROUTER/ApiRoute/__init__.py rename API-ROUTER/{ConnectManager => Utils}/DataBaseUtil.py (99%) create mode 100644 API-ROUTER/conf/api_config.ini diff --git a/API-ROUTER/API-Router.log b/API-ROUTER/API-Router.log deleted file mode 100644 index c223165f..00000000 --- a/API-ROUTER/API-Router.log +++ /dev/null @@ -1,61 +0,0 @@ -2022-04-26 13:11:50,897 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:12:53,682 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:14:06,575 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:14:06,582 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:14:06,611 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:15:09,259 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:15:09,267 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:15:09,275 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:15:21,784 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:15:21,792 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:15:21,796 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:19:17,755 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:19:17,762 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:19:17,763 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'category': 'dev', 'url': 'http://url_0', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_0'}] -2022-04-26 13:19:17,765 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:19:17,765 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'param_name': 'api_name_0_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_1_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_2_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_3_param_0', 'type': 'data_type_0', 'default_value': ''}] -2022-04-26 13:27:05,806 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:27:05,813 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:27:05,814 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'category': 'dev', 'url': 'http://url_0', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_0'}] -2022-04-26 13:27:05,816 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:27:05,816 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'param_name': 'api_name_0_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_1_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_2_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_3_param_0', 'type': 'data_type_0', 'default_value': ''}] -2022-04-26 13:27:43,197 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:27:43,202 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:27:43,202 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'category': 'dev', 'url': 'http://url_0', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_0'}, {'api_name': 'api_name_1', 'category': 'dev', 'url': 'http://url_1', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_1'}, {'api_name': 'api_name_2', 'category': 'dev', 'url': 'http://url_2', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_2'}, {'api_name': 'api_name_3', 'category': 'dev', 'url': 'http://url_3', 'type': 'REST', 'method': 'POST', 'protocol': 'HTTPS', 'cmd': 'run cmd_3'}] -2022-04-26 13:27:43,204 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 13:27:43,204 INFO [ApiRoute.py:25] - RESULT : [{'api_name': 'api_name_0', 'param_name': 'api_name_0_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_0_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_0_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_0_param_3', 'type': 'data_type_3', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_1_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_1_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_1_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_1_param_3', 'type': 'data_type_3', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_2_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_2_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_2_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_2_param_3', 'type': 'data_type_3', 'default_value': ''}, {'api_name': 'api_name_0', 'param_name': 'api_name_3_param_0', 'type': 'data_type_0', 'default_value': ''}, {'api_name': 'api_name_1', 'param_name': 'api_name_3_param_1', 'type': 'data_type_1', 'default_value': ''}, {'api_name': 'api_name_2', 'param_name': 'api_name_3_param_2', 'type': 'data_type_2', 'default_value': ''}, {'api_name': 'api_name_3', 'param_name': 'api_name_3_param_3', 'type': 'data_type_3', 'default_value': ''}] -2022-04-26 13:34:14,173 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:34:14,174 INFO [ApiRoute.py:86] - INPUT : api_name='string' category='string' url='string' msg_type='string' method=['string'] protocol='string' command='string' params=[ApiParam(name='string', data_type='string', default='string'), ApiParam(name='string', data_type='string', default='string')] -2022-04-26 13:36:58,377 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:36:59,936 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:37:00,655 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:37:54,056 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:39:51,870 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:40:49,163 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:42:34,397 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:52:07,689 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:56:38,683 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 13:58:06,151 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:15:33,095 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:16:05,875 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:17:49,907 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:18:56,098 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:19:33,639 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:19:59,572 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:22:16,197 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:22:16,201 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 14:22:16,201 INFO [PostgreManager.py:50] - PostgreManager Insert Execute. (INSERT INTO api.api_info ( api_name,category,url,msg_type,method,protocol,command,bypass ) VALUES ( 'string','string','string','string','string','string','string','string' );) -2022-04-26 14:27:47,645 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:27:47,649 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 14:27:47,649 INFO [PostgreManager.py:50] - PostgreManager Insert Execute. (INSERT INTO api.api_info ( api_name,category,url,msg_type,method,protocol,command,bypass ) VALUES ( 'string','string','string','string','string','string','string','string' );) -2022-04-26 14:31:21,932 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:32:18,029 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:33:04,397 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:33:37,299 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:33:37,303 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 14:33:37,304 INFO [PostgreManager.py:50] - PostgreManager Insert Execute. (INSERT INTO api.api_params ( api_name,param_name,data_type,default_value ) VALUES ( 'string','string','string','string' );) -2022-04-26 14:40:40,751 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:41:35,081 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:42:31,202 INFO [PostgreManager.py:24] - PostgreManager Connect. -2022-04-26 14:42:31,209 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) -2022-04-26 14:42:31,211 INFO [PostgreManager.py:31] - PostgreManager Execute Result. (row count : None) diff --git a/API-ROUTER/ApiList/delApi.py b/API-ROUTER/ApiList/delApi.py new file mode 100644 index 00000000..b5be1ddd --- /dev/null +++ b/API-ROUTER/ApiList/delApi.py @@ -0,0 +1,11 @@ +from typing import Dict +from ApiRoute.ApiRouteInfo import config +from Utils.CommonUtil import connect_db + +def api(api_name:str) -> Dict: + db = connect_db(config.db_type, config.db_info) + + db.delete(config.db_info["api_info_table"], {"api_name" : api_name}) + db.delete(config.db_info["api_params_table"], {"api_name" : api_name}) + + return {"API_NAME" : "delApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiList/getApi.py b/API-ROUTER/ApiList/getApi.py new file mode 100644 index 00000000..522f7df6 --- /dev/null +++ b/API-ROUTER/ApiList/getApi.py @@ -0,0 +1,23 @@ +from typing import Dict +from ApiRoute.ApiRouteInfo import config +from Utils.CommonUtil import connect_db + +def api(api_name:str) -> Dict: + ''' + db = self.connect_db() + + info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} \ + WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + + api_info, column_names = db.select(info_query) + api_info = make_res_msg("", "", api_info, column_names) + + params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]} \ + WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + + api_params, column_names = db.select(params_query) + api_params = make_res_msg("", "", api_params, column_names) + + return {"api_info" : api_info, "api_params" : api_params} + ''' + return {"API_NAME" : "getApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiList/getApiList.py b/API-ROUTER/ApiList/getApiList.py new file mode 100644 index 00000000..6113166c --- /dev/null +++ b/API-ROUTER/ApiList/getApiList.py @@ -0,0 +1,19 @@ +from typing import Dict +from ApiRoute.ApiRouteInfo import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + ''' + db = self.connect_db() + + info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]};' + api_info, column_names = db.select(info_query) + api_info = make_res_msg("", "", api_info, column_names) + + params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]};' + api_params, column_names = db.select(params_query) + api_params = make_res_msg("", "", api_params, column_names) + + return {"api_info" : api_info, "api_params" : api_params} + ''' + return {"API_NAME" : "getApiList"} \ No newline at end of file diff --git a/API-ROUTER/ApiList/setApi.py b/API-ROUTER/ApiList/setApi.py new file mode 100644 index 00000000..74ee02ca --- /dev/null +++ b/API-ROUTER/ApiList/setApi.py @@ -0,0 +1,40 @@ +from typing import Dict, List +from pydantic import BaseModel +from ApiRoute.ApiRouteInfo import config +from Utils.CommonUtil import connect_db + + +class ApiParam(BaseModel): + api_name: str + param_name: str + data_type: str + default_value: str + +class ApiInfo(BaseModel): + api_name: str + category: str + url: str + msg_type: str + method: str + protocol: str + command: str + bypass: str + params: List[ApiParam] + +def api(api_info:ApiInfo) -> Dict: + ''' + db = self.connect_db() + + insert_api_info = {} + insert_api_params = [] + for key, value in api_info.__dict__.items(): + if key == "params": + for param in value: + insert_api_params.append(param.__dict__) + else: + insert_api_info[key] = value + + db.insert(self.db_info["api_info_table"], [insert_api_info]) + db.insert(self.db_info["api_params_table"], insert_api_params) + ''' + return {"API_NAME" : "setApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiRoute.py b/API-ROUTER/ApiRoute.py deleted file mode 100644 index 22511b9e..00000000 --- a/API-ROUTER/ApiRoute.py +++ /dev/null @@ -1,131 +0,0 @@ -import logging -from fastapi import APIRouter -from pydantic import BaseModel -from typing import Dict, List - -from regex import D -from ConnectManager import RemoteCmd, PostgreManager, DataBaseUtil -import traceback - - -logger = logging.getLogger() - -class ApiParam(BaseModel): - api_name: str - param_name: str - data_type: str - default_value: str - -class ApiInfo(BaseModel): - api_name: str - category: str - url: str - msg_type: str - method: str - protocol: str - command: str - bypass: str - params: List[ApiParam] - -def make_res_msg(result, errorMessage, data, column_names): - header_list = [] - for column_name in column_names: - header = {"column_name" : column_name} - header_list.append(header) - - return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} - -class ApiRoute: - def __init__(self, db_type:str, db_info: Dict, remote_info: Dict) -> None: - self.db_type = db_type - self.db_info = db_info - self.remote_info = remote_info - - self.router = APIRouter() - self.set_route() - - def set_route(self) -> None: - self.router.add_api_route("/api/get_all_info", self.get_all_api_info, methods=["GET"]) - self.router.add_api_route("/api/get_info", self.get_api_info, methods=["GET"]) - self.router.add_api_route("/api/set_info", self.set_api_info, methods=["POST"]) - self.router.add_api_route("/api/del_info", self.del_api_info, methods=["POST"]) - self.router.add_api_route("/api/route/{api_name}", self.route_api, methods=["POST"]) - - def connect_db(self): - if self.db_type == "postgresql": - db = PostgreManager(host=self.db_info["host"], port=self.db_info["port"], - user=self.db_info["user"], password=self.db_info["password"], - database=self.db_info["database"], schema=self.db_info["schema"]) - else: - logger.error(f"Not Implemented. {self.db_type}") - return db - - def get_all_api_info(self) -> Dict: - db = self.connect_db() - - info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]};' - api_info, column_names = db.select(info_query) - api_info = make_res_msg("", "", api_info, column_names) - - params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]};' - api_params, column_names = db.select(params_query) - api_params = make_res_msg("", "", api_params, column_names) - - return {"api_info" : api_info, "api_params" : api_params} - - def get_api_info(self, api_name:str) -> Dict: - db = self.connect_db() - - info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} \ - WHERE api_name = {DataBaseUtil.convert_data(api_name)};' - - api_info, column_names = db.select(info_query) - api_info = make_res_msg("", "", api_info, column_names) - - params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]} \ - WHERE api_name = {DataBaseUtil.convert_data(api_name)};' - - api_params, column_names = db.select(params_query) - api_params = make_res_msg("", "", api_params, column_names) - - return {"api_info" : api_info, "api_params" : api_params} - - def set_api_info(self, api_info:ApiInfo) -> Dict: - db = self.connect_db() - - insert_api_info = {} - insert_api_params = [] - for key, value in api_info.__dict__.items(): - if key == "params": - for param in value: - insert_api_params.append(param.__dict__) - else: - insert_api_info[key] = value - - db.insert(self.db_info["api_info_table"], [insert_api_info]) - db.insert(self.db_info["api_params_table"], insert_api_params) - - return "" - - def del_api_info(self, api_name:str) -> Dict: - db = self.connect_db() - - db.delete(self.db_info["api_info_table"], {"api_name" : api_name}) - db.delete(self.db_info["api_params_table"], {"api_name" : api_name}) - - return "" - - def route_api(self, api_name:str) -> Dict: - db = self.connect_db() - search_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} \ - WHERE api_name = {DataBaseUtil.convert_data(api_name)};' - api_info, _ = db.select(search_query) - - if len(api_info) == 0: - return {"result" : 0, "errorMessage" : "This is an unregistered API."} - - remote_cmd = RemoteCmd(self.remote_info["host"], self.remote_info["port"], self.remote_info["id"], self.remote_info["password"]) - return eval(remote_cmd.cmd_exec(api_info[0]["command"])) - - - diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py new file mode 100644 index 00000000..3c4fad07 --- /dev/null +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -0,0 +1,44 @@ +import logging +from typing import Dict, List +import importlib.util +import traceback +from fastapi import APIRouter +from ApiRoute.ApiRouteInfo import config +from ConnectManager import RemoteCmd +from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data + +logger = logging.getLogger() + +class ApiRoute: + def __init__(self, db_type:str, db_info: Dict, remote_info: Dict) -> None: + self.db_type = db_type + self.db_info = db_info + self.remote_info = remote_info + + self.router = APIRouter() + self.set_route() + + def set_route(self) -> None: + for api_name, api_info in config.api_config.items(): + module_path = f'{config.root_path}/AP_API_Router/API-ROUTER/ApiList/{api_name}.py' + module_name = "api" + spec = importlib.util.spec_from_file_location(module_name, module_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + self.router.add_api_route(f'{api_info["url_prefix"]}/{api_name}', module.api, methods=[api_info["method"]]) + + + def route_api(self, api_name:str) -> Dict: + db = connect_db() + search_query = f'SELECT * FROM {config.db_info["schema"]}.{config.db_info["api_info_table"]} \ + WHERE api_name = {convert_data(api_name)};' + api_info, _ = db.select(search_query) + + if len(api_info) == 0: + return {"result" : 0, "errorMessage" : "This is an unregistered API."} + + remote_cmd = RemoteCmd(self.remote_info["host"], self.remote_info["port"], self.remote_info["id"], self.remote_info["password"]) + return eval(remote_cmd.cmd_exec(api_info[0]["command"])) + + diff --git a/API-ROUTER/ApiRoute/ApiRouteInfo.py b/API-ROUTER/ApiRoute/ApiRouteInfo.py new file mode 100644 index 00000000..87c17792 --- /dev/null +++ b/API-ROUTER/ApiRoute/ApiRouteInfo.py @@ -0,0 +1,21 @@ + +from typing import Dict + +from typing import Dict, List + + +class ApiRouteInfo: + root_path : str + + db_type : str + db_info : Dict + + remote_info : Dict + + server_host : str + server_port : int + + api_config : Dict + + +config = ApiRouteInfo \ No newline at end of file diff --git a/API-ROUTER/ApiRoute/__init__.py b/API-ROUTER/ApiRoute/__init__.py new file mode 100644 index 00000000..f23ca0fa --- /dev/null +++ b/API-ROUTER/ApiRoute/__init__.py @@ -0,0 +1,2 @@ +from .ApiRouteInfo import * +from .ApiRoute import * diff --git a/API-ROUTER/ConnectManager/PostgreManager.py b/API-ROUTER/ConnectManager/PostgreManager.py index 7bcf2948..3e5026dc 100644 --- a/API-ROUTER/ConnectManager/PostgreManager.py +++ b/API-ROUTER/ConnectManager/PostgreManager.py @@ -2,7 +2,7 @@ from typing import List, Dict import psycopg2 -from .DataBaseUtil import make_insert_query, make_update_query, make_delete_query +from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query logger = logging.getLogger() @@ -20,7 +20,8 @@ def __init__(self, host: str, port: str, user: str, password: str, database: str def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, - password=self.password, database=self.database) + password=self.password, database=self.database, + options=f"-c search_path={self.schema}") logger.info("PostgreManager Connect.") return conn diff --git a/API-ROUTER/ConnectManager/__init__.py b/API-ROUTER/ConnectManager/__init__.py index 34c7045d..949aab10 100644 --- a/API-ROUTER/ConnectManager/__init__.py +++ b/API-ROUTER/ConnectManager/__init__.py @@ -1,3 +1,2 @@ -from .DataBaseUtil import * from .PostgreManager import * from .RemoteCmd import * diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index fe371700..d3ab3ab2 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -1,18 +1,48 @@ import os import configparser import logging +from pathlib import Path +from ConnectManager import PostgreManager +from ApiRoute.ApiRouteInfo import config logger = logging.getLogger() -def get_config(root_path:str): +def get_config(root_path:str, config_name:str): ano_cfg = {} config = configparser.ConfigParser() config.read(os.path.join(root_path, - "AP_API_Router/API-ROUTER/conf/config.ini"), encoding='utf-8') + f"AP_API_Router/API-ROUTER/conf/{config_name}"), encoding='utf-8') for section in config.sections(): ano_cfg[section] = {} for option in config.options(section): ano_cfg[section][option] = config.get(section, option) return ano_cfg + +def prepare_config(): + config.root_path = Path(os.getcwd()).parent + api_router_cfg = get_config(config.root_path, "config.ini") + config.api_config = get_config(config.root_path, "api_config.ini") + config.db_type = api_router_cfg["default"]["db"] + config.db_info = api_router_cfg[config.db_type] + config.remote_info = api_router_cfg["remote"] + config.server_host = api_router_cfg["default"]["host"] + config.server_port = int(api_router_cfg["default"]["port"]) + +def connect_db(db_type, db_info): + if db_type == "postgresql": + db = PostgreManager(host=db_info["host"], port=db_info["port"], + user=db_info["user"], password=db_info["password"], + database=db_info["database"], schema=db_info["schema"]) + else: + logger.error(f"Not Implemented. {db_type}") + return db + +def make_res_msg(result, errorMessage, data, column_names): + header_list = [] + for column_name in column_names: + header = {"column_name" : column_name} + header_list.append(header) + + return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} \ No newline at end of file diff --git a/API-ROUTER/ConnectManager/DataBaseUtil.py b/API-ROUTER/Utils/DataBaseUtil.py similarity index 99% rename from API-ROUTER/ConnectManager/DataBaseUtil.py rename to API-ROUTER/Utils/DataBaseUtil.py index 5a2e872a..2226fd54 100644 --- a/API-ROUTER/ConnectManager/DataBaseUtil.py +++ b/API-ROUTER/Utils/DataBaseUtil.py @@ -35,3 +35,5 @@ def make_delete_query(table, where_info: Dict) -> str: f'{column} = {convert_data(value)}' for column, value in where_info.items()] sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' return sql + + diff --git a/API-ROUTER/Utils/__init__.py b/API-ROUTER/Utils/__init__.py index 3b5ce1cc..71791818 100644 --- a/API-ROUTER/Utils/__init__.py +++ b/API-ROUTER/Utils/__init__.py @@ -1 +1,2 @@ from .CommonUtil import * +from .DataBaseUtil import * \ No newline at end of file diff --git a/API-ROUTER/conf/api_config.ini b/API-ROUTER/conf/api_config.ini new file mode 100644 index 00000000..84118f47 --- /dev/null +++ b/API-ROUTER/conf/api_config.ini @@ -0,0 +1,15 @@ +[getApiList] +method = GET +url_prefix = /api + +[getApi] +method = GET +url_prefix = /api + +[setApi] +method = POST +url_prefix = /api + +[delApi] +method = POST +url_prefix = /api diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 45fead5b..c956d579 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -16,7 +16,3 @@ user = dhub password = dhub.12# database = dhub schema = api -api_info_table = api_info -api_params_table = api_params - -[mariadb] \ No newline at end of file diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index 3dcdc976..4efc4ad6 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -1,28 +1,19 @@ import os import logging import logging.config -from Utils.CommonUtil import get_config -from ApiRoute import ApiRoute from fastapi import FastAPI import uvicorn -from pathlib import Path - +from ApiRoute.ApiRouteInfo import config +from Utils.CommonUtil import prepare_config +from ApiRoute import ApiRoute -root_path = Path(os.getcwd()).parent -logging.config.fileConfig(os.path.join(root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) +prepare_config() +logging.config.fileConfig(os.path.join(config.root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) logger = logging.getLogger() +api_router = ApiRoute(config.db_type, config.db_info, config.remote_info) +app = FastAPI() +app.include_router(api_router.router) + if __name__ == '__main__': - api_router_cfg = get_config(root_path) - db_type = api_router_cfg["default"]["db"] - db_info = api_router_cfg[db_type] - remote_info = api_router_cfg["remote"] - - host = api_router_cfg["default"]["host"] - port = api_router_cfg["default"]["port"] - - api_router = ApiRoute(db_type, db_info, remote_info) - app = FastAPI() - app.include_router(api_router.router) - #uvicorn.run("server:app", host=host, port=int(port))#, reload=True) - uvicorn.run(app, host=host, port=int(port))#, reload=True) + uvicorn.run("server:app", host=config.server_host, port=config.server_port, reload=True) From bdd8b032d7ce92c233c1467dd2fb7cf75c710296 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 28 Apr 2022 16:09:55 +0900 Subject: [PATCH 008/236] =?UTF-8?q?feat:=20route=20api=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-211 api 명으로만 routing 되도록 수정 --- API-ROUTER/ApiList/delApi.py | 6 +- API-ROUTER/ApiList/getApi.py | 20 ++-- API-ROUTER/ApiList/getApiList.py | 31 +++--- API-ROUTER/ApiList/setApi.py | 29 +++--- API-ROUTER/ApiRoute/ApiRoute.py | 97 ++++++++++++++++--- .../{ApiRouteInfo.py => ApiRouteConfig.py} | 11 +-- API-ROUTER/ApiRoute/__init__.py | 2 +- API-ROUTER/Utils/CommonUtil.py | 24 +++-- API-ROUTER/server.py | 2 +- 9 files changed, 146 insertions(+), 76 deletions(-) rename API-ROUTER/ApiRoute/{ApiRouteInfo.py => ApiRouteConfig.py} (70%) diff --git a/API-ROUTER/ApiList/delApi.py b/API-ROUTER/ApiList/delApi.py index b5be1ddd..d536ed91 100644 --- a/API-ROUTER/ApiList/delApi.py +++ b/API-ROUTER/ApiList/delApi.py @@ -1,11 +1,11 @@ from typing import Dict -from ApiRoute.ApiRouteInfo import config +from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import connect_db def api(api_name:str) -> Dict: db = connect_db(config.db_type, config.db_info) - db.delete(config.db_info["api_info_table"], {"api_name" : api_name}) - db.delete(config.db_info["api_params_table"], {"api_name" : api_name}) + db.delete("api_info", {"api_name" : api_name}) + db.delete("api_params", {"api_name" : api_name}) return {"API_NAME" : "delApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiList/getApi.py b/API-ROUTER/ApiList/getApi.py index 522f7df6..a3b1880f 100644 --- a/API-ROUTER/ApiList/getApi.py +++ b/API-ROUTER/ApiList/getApi.py @@ -1,23 +1,19 @@ from typing import Dict -from ApiRoute.ApiRouteInfo import config -from Utils.CommonUtil import connect_db +from ApiRoute.ApiRouteConfig import config +from Utils.CommonUtil import connect_db, make_res_msg +from Utils.DataBaseUtil import convert_data def api(api_name:str) -> Dict: - ''' - db = self.connect_db() + db = connect_db(config.db_type, config.db_info) - info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]} \ - WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' - api_info, column_names = db.select(info_query) + api_info, column_names = db.select(api_info_query) api_info = make_res_msg("", "", api_info, column_names) - params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]} \ - WHERE api_name = {DataBaseUtil.convert_data(api_name)};' + api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' - api_params, column_names = db.select(params_query) + api_params, column_names = db.select(api_params_query) api_params = make_res_msg("", "", api_params, column_names) return {"api_info" : api_info, "api_params" : api_params} - ''' - return {"API_NAME" : "getApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiList/getApiList.py b/API-ROUTER/ApiList/getApiList.py index 6113166c..a916fb2d 100644 --- a/API-ROUTER/ApiList/getApiList.py +++ b/API-ROUTER/ApiList/getApiList.py @@ -1,19 +1,18 @@ from typing import Dict -from ApiRoute.ApiRouteInfo import config -from Utils.CommonUtil import connect_db +from ApiRoute.ApiRouteConfig import config +from Utils.CommonUtil import connect_db, make_res_msg +import traceback + +api_info_query = f'SELECT * FROM api_info;' +api_params_query = f'SELECT * FROM api_params;' def api() -> Dict: - ''' - db = self.connect_db() - - info_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_info_table"]};' - api_info, column_names = db.select(info_query) - api_info = make_res_msg("", "", api_info, column_names) - - params_query = f'SELECT * FROM {self.db_info["schema"]}.{self.db_info["api_params_table"]};' - api_params, column_names = db.select(params_query) - api_params = make_res_msg("", "", api_params, column_names) - - return {"api_info" : api_info, "api_params" : api_params} - ''' - return {"API_NAME" : "getApiList"} \ No newline at end of file + db = connect_db(config.db_type, config.db_info) + + api_info, column_names = db.select(api_info_query) + api_info = make_res_msg("", "", api_info, column_names) + + api_params, column_names = db.select(api_params_query) + api_params = make_res_msg("", "", api_params, column_names) + + return {"api_info" : api_info, "api_params" : api_params} diff --git a/API-ROUTER/ApiList/setApi.py b/API-ROUTER/ApiList/setApi.py index 74ee02ca..22f0f038 100644 --- a/API-ROUTER/ApiList/setApi.py +++ b/API-ROUTER/ApiList/setApi.py @@ -1,8 +1,8 @@ from typing import Dict, List from pydantic import BaseModel -from ApiRoute.ApiRouteInfo import config +from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import connect_db - +import traceback class ApiParam(BaseModel): api_name: str @@ -22,19 +22,18 @@ class ApiInfo(BaseModel): params: List[ApiParam] def api(api_info:ApiInfo) -> Dict: - ''' - db = self.connect_db() + db = connect_db(config.db_type, config.db_info) - insert_api_info = {} - insert_api_params = [] - for key, value in api_info.__dict__.items(): - if key == "params": - for param in value: - insert_api_params.append(param.__dict__) - else: - insert_api_info[key] = value + insert_api_info = {} + insert_api_params = [] + for key, value in api_info.__dict__.items(): + if key == "params": + for param in value: + insert_api_params.append(param.__dict__) + else: + insert_api_info[key] = value + + db.insert("api_info", [insert_api_info]) + db.insert("api_params", insert_api_params) - db.insert(self.db_info["api_info_table"], [insert_api_info]) - db.insert(self.db_info["api_params_table"], insert_api_params) - ''' return {"API_NAME" : "setApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 3c4fad07..8cde798c 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,23 +3,52 @@ import importlib.util import traceback from fastapi import APIRouter -from ApiRoute.ApiRouteInfo import config +from ApiRoute.ApiRouteConfig import config from ConnectManager import RemoteCmd -from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data +from Utils.CommonUtil import connect_db, make_res_msg +from pydantic import BaseModel +from starlette.requests import Request logger = logging.getLogger() +class ApiParam(BaseModel): + api_name: str + param_name: str + data_type: str + default_value: str + +class ApiInfo(BaseModel): + api_name: str + category: str + url: str + msg_type: str + method: str + protocol: str + command: str + bypass: str + params: List[ApiParam] + class ApiRoute: def __init__(self, db_type:str, db_info: Dict, remote_info: Dict) -> None: - self.db_type = db_type - self.db_info = db_info - self.remote_info = remote_info + #self.db_type = db_type + #self.db_info = db_info + #self.remote_info = remote_info self.router = APIRouter() self.set_route() def set_route(self) -> None: + self.router.add_api_route("/api/getApiList", self.get_api_list, methods=["GET"]) + self.router.add_api_route("/api/setApi", self.set_api, methods=["POST"]) + + api_info_query = 'SELECT * FROM api_info;' + db = connect_db(config.db_type, config.db_info) + api_info, _ = db.select(api_info_query) + for api in api_info: + self.router.add_api_route(f'/api/{api["api_name"]}', self.route_api, methods=["POST"]) + + ''' for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/AP_API_Router/API-ROUTER/ApiList/{api_name}.py' module_name = "api" @@ -27,18 +56,56 @@ def set_route(self) -> None: module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) self.router.add_api_route(f'{api_info["url_prefix"]}/{api_name}', module.api, methods=[api_info["method"]]) + ''' + + def set_api(self, api_info:ApiInfo) -> Dict: + db = connect_db(config.db_type, config.db_info) + + insert_api_info = {} + insert_api_params = [] + for key, value in api_info.__dict__.items(): + if key == "params": + for param in value: + insert_api_params.append(param.__dict__) + else: + insert_api_info[key] = value - - def route_api(self, api_name:str) -> Dict: - db = connect_db() - search_query = f'SELECT * FROM {config.db_info["schema"]}.{config.db_info["api_info_table"]} \ - WHERE api_name = {convert_data(api_name)};' - api_info, _ = db.select(search_query) + db.insert("api_info", [insert_api_info]) + db.insert("api_params", insert_api_params) + + self.router.add_api_route(f'/api/{insert_api_info["api_name"]}', self.route_api, methods=[{insert_api_info["method"]}]) + + return {"API_NAME" : "setApi"} + + def get_api_list(self) -> Dict: + api_info_query = f'SELECT * FROM api_info;' + api_params_query = f'SELECT * FROM api_params;' + + db = connect_db(config.db_type, config.db_info) + + api_info, column_names = db.select(api_info_query) + api_info = make_res_msg("", "", api_info, column_names) + + api_params, column_names = db.select(api_params_query) + api_params = make_res_msg("", "", api_params, column_names) + + return {"api_info" : api_info, "api_params" : api_params} - if len(api_info) == 0: - return {"result" : 0, "errorMessage" : "This is an unregistered API."} + def route_api(self, request:Request) -> Dict: + print("API : ", request.url.path) + ''' + try: + db = connect_db(config.db_type, config.db_info) - remote_cmd = RemoteCmd(self.remote_info["host"], self.remote_info["port"], self.remote_info["id"], self.remote_info["password"]) - return eval(remote_cmd.cmd_exec(api_info[0]["command"])) + #search_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' + #api_info, _ = db.select(search_query) + except Exception: + print(traceback.format_exc()) + if len(api_info) == 0: + return {"result" : 0, "errorMessage" : "This is an unregistered API."} + ''' + #remote_cmd = RemoteCmd(self.remote_info["host"], self.remote_info["port"], self.remote_info["id"], self.remote_info["password"]) + #return eval(remote_cmd.cmd_exec(api_info[0]["command"])) + return {"API_NAME" : "Router"} diff --git a/API-ROUTER/ApiRoute/ApiRouteInfo.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py similarity index 70% rename from API-ROUTER/ApiRoute/ApiRouteInfo.py rename to API-ROUTER/ApiRoute/ApiRouteConfig.py index 87c17792..18343077 100644 --- a/API-ROUTER/ApiRoute/ApiRouteInfo.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -1,10 +1,7 @@ - -from typing import Dict - +from starlette import routing from typing import Dict, List - -class ApiRouteInfo: +class ApiRouteConfig: root_path : str db_type : str @@ -16,6 +13,6 @@ class ApiRouteInfo: server_port : int api_config : Dict - + -config = ApiRouteInfo \ No newline at end of file +config = ApiRouteConfig \ No newline at end of file diff --git a/API-ROUTER/ApiRoute/__init__.py b/API-ROUTER/ApiRoute/__init__.py index f23ca0fa..c1dfef31 100644 --- a/API-ROUTER/ApiRoute/__init__.py +++ b/API-ROUTER/ApiRoute/__init__.py @@ -1,2 +1,2 @@ -from .ApiRouteInfo import * +from .ApiRouteConfig import * from .ApiRoute import * diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index d3ab3ab2..0984ea12 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -1,9 +1,12 @@ import os import configparser +import argparse import logging from pathlib import Path +from tkinter.messagebox import NO +from typing import Any +from ApiRoute.ApiRouteConfig import config from ConnectManager import PostgreManager -from ApiRoute.ApiRouteInfo import config logger = logging.getLogger() @@ -20,19 +23,28 @@ def get_config(root_path:str, config_name:str): return ano_cfg -def prepare_config(): +def parser_params() -> Any: + parser = argparse.ArgumentParser() + parser.add_argument("--host", type=str, default="192.168.101.43") + parser.add_argument("--port", type=int, default=18000) + parser.add_argument("--db_type", default="postgresql") + + return parser.parse_args() + +def prepare_config() -> None: + args = parser_params() config.root_path = Path(os.getcwd()).parent api_router_cfg = get_config(config.root_path, "config.ini") config.api_config = get_config(config.root_path, "api_config.ini") - config.db_type = api_router_cfg["default"]["db"] + config.db_type = args.db_type + config.server_host = args.host + config.server_port = args.port config.db_info = api_router_cfg[config.db_type] config.remote_info = api_router_cfg["remote"] - config.server_host = api_router_cfg["default"]["host"] - config.server_port = int(api_router_cfg["default"]["port"]) def connect_db(db_type, db_info): if db_type == "postgresql": - db = PostgreManager(host=db_info["host"], port=db_info["port"], + db = PostgreManager.PostgreManager(host=db_info["host"], port=db_info["port"], user=db_info["user"], password=db_info["password"], database=db_info["database"], schema=db_info["schema"]) else: diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index 4efc4ad6..ec929b07 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -3,7 +3,7 @@ import logging.config from fastapi import FastAPI import uvicorn -from ApiRoute.ApiRouteInfo import config +from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import prepare_config from ApiRoute import ApiRoute From 6ba0c6f3832965e4637052fa05cf7f0f150e073b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 29 Apr 2022 14:16:37 +0900 Subject: [PATCH 009/236] =?UTF-8?q?feat:=20api=20route=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20=EB=A6=AC?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-211 --- API-ROUTER/ApiList/TEST_1.py | 8 ++ API-ROUTER/ApiList/TEST_2.py | 8 ++ API-ROUTER/ApiRoute/ApiRoute.py | 127 +++++++++++++------- API-ROUTER/ConnectManager/PostgreManager.py | 15 ++- API-ROUTER/Utils/CommonUtil.py | 17 ++- API-ROUTER/Utils/DataBaseUtil.py | 2 +- API-ROUTER/conf/api_config.ini | 12 +- API-ROUTER/conf/logging.conf | 4 +- API-ROUTER/server.py | 9 +- 9 files changed, 130 insertions(+), 72 deletions(-) create mode 100644 API-ROUTER/ApiList/TEST_1.py create mode 100644 API-ROUTER/ApiList/TEST_2.py diff --git a/API-ROUTER/ApiList/TEST_1.py b/API-ROUTER/ApiList/TEST_1.py new file mode 100644 index 00000000..8191be65 --- /dev/null +++ b/API-ROUTER/ApiList/TEST_1.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiRoute.ApiRouteConfig import config +from Utils.CommonUtil import connect_db + +def api(api_name:str) -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST_1"} \ No newline at end of file diff --git a/API-ROUTER/ApiList/TEST_2.py b/API-ROUTER/ApiList/TEST_2.py new file mode 100644 index 00000000..8191be65 --- /dev/null +++ b/API-ROUTER/ApiList/TEST_2.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiRoute.ApiRouteConfig import config +from Utils.CommonUtil import connect_db + +def api(api_name:str) -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST_1"} \ No newline at end of file diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 8cde798c..f2c31dd5 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -1,16 +1,16 @@ import logging from typing import Dict, List import importlib.util -import traceback from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config from ConnectManager import RemoteCmd from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, save_file_for_reload from pydantic import BaseModel from starlette.requests import Request +import traceback -logger = logging.getLogger() +#logger = logging.getLogger() class ApiParam(BaseModel): api_name: str @@ -30,33 +30,60 @@ class ApiInfo(BaseModel): params: List[ApiParam] class ApiRoute: - def __init__(self, db_type:str, db_info: Dict, remote_info: Dict) -> None: - #self.db_type = db_type - #self.db_info = db_info - #self.remote_info = remote_info - + def __init__(self) -> None: self.router = APIRouter() self.set_route() def set_route(self) -> None: self.router.add_api_route("/api/getApiList", self.get_api_list, methods=["GET"]) + self.router.add_api_route("/api/getApi", self.get_api, methods=["GET"]) self.router.add_api_route("/api/setApi", self.set_api, methods=["POST"]) - - api_info_query = 'SELECT * FROM api_info;' + self.router.add_api_route("/api/delApi", self.del_api, methods=["POST"]) + db = connect_db(config.db_type, config.db_info) - api_info, _ = db.select(api_info_query) + api_info, _ = db.select('SELECT * FROM api_info;') + for api in api_info: - self.router.add_api_route(f'/api/{api["api_name"]}', self.route_api, methods=["POST"]) - - ''' + self.router.add_api_route(f'/api/{api["api_name"]}', self.route_api, methods=["POST"], tags=["route"]) + for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/AP_API_Router/API-ROUTER/ApiList/{api_name}.py' module_name = "api" spec = importlib.util.spec_from_file_location(module_name, module_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url_prefix"]}/{api_name}', module.api, methods=[api_info["method"]]) - ''' + self.router.add_api_route(f'{api_info["url_prefix"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) + + + def get_api_list(self) -> Dict: + api_info_query = f'SELECT * FROM api_info;' + api_params_query = f'SELECT * FROM api_params;' + + db = connect_db(config.db_type, config.db_info) + + api_info, column_names = db.select(api_info_query) + api_info = make_res_msg("", "", api_info, column_names) + + api_params, column_names = db.select(api_params_query) + api_params = make_res_msg("", "", api_params, column_names) + + return {"api_info" : api_info, "api_params" : api_params} + + + def get_api(self, api_name:str) -> Dict: + api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' + api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' + + db = connect_db(config.db_type, config.db_info) + + api_info, column_names = db.select(api_info_query) + api_info = make_res_msg("", "", api_info, column_names) + + api_params, column_names = db.select(api_params_query) + api_params = make_res_msg("", "", api_params, column_names) + + return {"api_info" : api_info, "api_params" : api_params} + def set_api(self, api_info:ApiInfo) -> Dict: db = connect_db(config.db_type, config.db_info) @@ -72,40 +99,54 @@ def set_api(self, api_info:ApiInfo) -> Dict: db.insert("api_info", [insert_api_info]) db.insert("api_params", insert_api_params) - - self.router.add_api_route(f'/api/{insert_api_info["api_name"]}', self.route_api, methods=[{insert_api_info["method"]}]) - - return {"API_NAME" : "setApi"} - - def get_api_list(self) -> Dict: - api_info_query = f'SELECT * FROM api_info;' - api_params_query = f'SELECT * FROM api_params;' + save_file_for_reload() + + return {"API_NAME : set_api"} + + def del_api(self, api_name:str) -> Dict: db = connect_db(config.db_type, config.db_info) - api_info, column_names = db.select(api_info_query) - api_info = make_res_msg("", "", api_info, column_names) - - api_params, column_names = db.select(api_params_query) - api_params = make_res_msg("", "", api_params, column_names) + db.delete("api_info", {"api_name" : api_name}) + db.delete("api_params", {"api_name" : api_name}) - return {"api_info" : api_info, "api_params" : api_params} + save_file_for_reload() - def route_api(self, request:Request) -> Dict: - print("API : ", request.url.path) - ''' - try: - db = connect_db(config.db_type, config.db_info) + return {"API_NAME : del_api"} + async def route_api(self, request:Request) -> Dict: + try: + api_name = request.url.path.split("/")[-1] + api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' + api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' - #search_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' - #api_info, _ = db.select(search_query) - except Exception: - print(traceback.format_exc()) + db = connect_db(config.db_type, config.db_info) + api_info, _ = db.select(api_info_query) + api_params, _ = db.select(api_params_query) + if len(api_info) == 0: return {"result" : 0, "errorMessage" : "This is an unregistered API."} - ''' - #remote_cmd = RemoteCmd(self.remote_info["host"], self.remote_info["port"], self.remote_info["id"], self.remote_info["password"]) - #return eval(remote_cmd.cmd_exec(api_info[0]["command"])) - return {"API_NAME" : "Router"} + + api_info = api_info[0] + msg_type = api_info["msg_type"] + if msg_type == "JSON": + request_body = await request.json() + elif msg_type == "BINARY": + request_body = await request.form() #request.body() + else: + # Unknown Type + pass + + if api_info["bypass"] == "ON": + #send req + method = api_info["method"] + else: + #call remote func + remote_cmd = RemoteCmd(config.remote_info["host"], config.remote_info["port"], config.remote_info["id"], config.remote_info["password"]) + #make command (use params + body) + remote_cmd.cmd_exec(api_info["command"]) + except Exception: + print(traceback.format_exc()) + return eval(remote_cmd.cmd_exec(api_info["command"])) + \ No newline at end of file diff --git a/API-ROUTER/ConnectManager/PostgreManager.py b/API-ROUTER/ConnectManager/PostgreManager.py index 3e5026dc..e7c64191 100644 --- a/API-ROUTER/ConnectManager/PostgreManager.py +++ b/API-ROUTER/ConnectManager/PostgreManager.py @@ -4,8 +4,7 @@ from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query -logger = logging.getLogger() - +#logger = logging.getLogger() class PostgreManager: def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: @@ -22,14 +21,14 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - logger.info("PostgreManager Connect.") + print("PostgreManager Connect.") return conn def execute(self, sql: str) -> None: print(sql) result = self.cursor.execute(sql) self.conn.commit() - logger.info(f'PostgreManager Execute Result. (row count : {result})') + #print(f'PostgreManager Execute Result. (row count : {result})') def select(self, sql: str, count: int = None) -> List[Dict]: self.execute(sql) @@ -38,7 +37,7 @@ def select(self, sql: str, count: int = None) -> List[Dict]: rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.debug(f'PostgreManager Select Execute. ({sql})') + print(f'PostgreManager Select Execute. ({sql})') result = [] for row in rows: @@ -48,18 +47,18 @@ def select(self, sql: str, count: int = None) -> List[Dict]: def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - logger.info(f'PostgreManager Insert Execute. ({sql})') + print(f'PostgreManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - logger.debug(f'PostgreManager Update Execute. ({sql})') + print(f'PostgreManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - logger.debug(f'PostgreManager Delete Execute. ({sql})') + print(f'PostgreManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 0984ea12..cc999787 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -8,7 +8,7 @@ from ApiRoute.ApiRouteConfig import config from ConnectManager import PostgreManager -logger = logging.getLogger() +#logger = logging.getLogger() def get_config(root_path:str, config_name:str): ano_cfg = {} @@ -48,13 +48,22 @@ def connect_db(db_type, db_info): user=db_info["user"], password=db_info["password"], database=db_info["database"], schema=db_info["schema"]) else: - logger.error(f"Not Implemented. {db_type}") + print(f"Not Implemented. {db_type}") return db -def make_res_msg(result, errorMessage, data, column_names): +def save_file_for_reload(): + with open(__file__, "a") as fd: + fd.write(" ") + +def make_res_msg(result, errorMessage, data=None, column_names=None): header_list = [] for column_name in column_names: header = {"column_name" : column_name} header_list.append(header) - return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} \ No newline at end of file + result = None + if data == None or column_names == None: + result = {"result" : result, "errorMessage" : errorMessage} + else: + result = {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} + return result \ No newline at end of file diff --git a/API-ROUTER/Utils/DataBaseUtil.py b/API-ROUTER/Utils/DataBaseUtil.py index 2226fd54..8ac48edc 100644 --- a/API-ROUTER/Utils/DataBaseUtil.py +++ b/API-ROUTER/Utils/DataBaseUtil.py @@ -1,7 +1,7 @@ import logging from typing import List, Dict -logger = logging.getLogger() +#logger = logging.getLogger() def convert_data(data) -> str: diff --git a/API-ROUTER/conf/api_config.ini b/API-ROUTER/conf/api_config.ini index 84118f47..0b8ffa64 100644 --- a/API-ROUTER/conf/api_config.ini +++ b/API-ROUTER/conf/api_config.ini @@ -1,15 +1,7 @@ -[getApiList] +[TEST_1] method = GET url_prefix = /api -[getApi] +[TEST_2] method = GET url_prefix = /api - -[setApi] -method = POST -url_prefix = /api - -[delApi] -method = POST -url_prefix = /api diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf index cf72678e..d4c04f8f 100644 --- a/API-ROUTER/conf/logging.conf +++ b/API-ROUTER/conf/logging.conf @@ -23,12 +23,12 @@ level=INFO [handler_rotatingFileHandler] class=handlers.RotatingFileHandler formatter=default -args=('API-Router.log', 'a', 20000000, 10) +args=('API-ROUTER/log/API-Router.log', 'a', 20000000, 10) level=INFO [handler_file] class=FileHandler -args=("API-Router.log",) +args=("API-ROUTER/log/API-Router.log",) formatter=default level=INFO diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index ec929b07..69b1ad31 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -1,17 +1,18 @@ import os import logging import logging.config +import traceback from fastapi import FastAPI import uvicorn from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import prepare_config from ApiRoute import ApiRoute +import pdb prepare_config() -logging.config.fileConfig(os.path.join(config.root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) -logger = logging.getLogger() - -api_router = ApiRoute(config.db_type, config.db_info, config.remote_info) +#logging.config.fileConfig(os.path.join(config.root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) +#logger = logging.getLogger() +api_router = ApiRoute() app = FastAPI() app.include_router(api_router.router) From a3f32436cd65ca90375ff0a66672beeccfab3649 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 29 Apr 2022 14:58:16 +0900 Subject: [PATCH 010/236] =?UTF-8?q?feat:=20api=20service=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 단일파일(단일 api) 및 설정 추가 시, 동적으로 api에 등록되도록 개선 AIPLATFORM-211 --- API-ROUTER/ApiList/delApi.py | 11 -- API-ROUTER/ApiList/getApi.py | 19 ---- API-ROUTER/ApiList/getApiList.py | 18 --- API-ROUTER/ApiList/setApi.py | 39 ------- API-ROUTER/ApiRoute/ApiRoute.py | 2 +- API-ROUTER/ConnectManager/__init__.py | 2 +- API-ROUTER/Utils/CommonUtil.py | 1 - API-SERVICE/ApiList/TEST_1.py | 8 ++ API-SERVICE/ApiList/TEST_2.py | 8 ++ API-SERVICE/ApiService.py | 105 ------------------ API-SERVICE/ApiService/ApiService.py | 26 +++++ API-SERVICE/ApiService/ApiServiceConfig.py | 17 +++ API-SERVICE/ApiService/__init__.py | 2 + API-SERVICE/ApiServiceMsg.py | 13 --- API-SERVICE/ConnectManager/PostgreManager.py | 24 ++-- API-SERVICE/ConnectManager/__init__.py | 1 - API-SERVICE/README.md | 1 - API-SERVICE/Utils/CommonUtil.py | 58 +++++++++- .../{ConnectManager => Utils}/DataBaseUtil.py | 4 +- API-SERVICE/Utils/__init__.py | 1 + API-SERVICE/conf/api_config.ini | 7 ++ API-SERVICE/conf/config.ini | 100 +---------------- API-SERVICE/conf/logging.conf | 4 +- API-SERVICE/server.py | 31 ++---- 24 files changed, 155 insertions(+), 347 deletions(-) delete mode 100644 API-ROUTER/ApiList/delApi.py delete mode 100644 API-ROUTER/ApiList/getApi.py delete mode 100644 API-ROUTER/ApiList/getApiList.py delete mode 100644 API-ROUTER/ApiList/setApi.py create mode 100644 API-SERVICE/ApiList/TEST_1.py create mode 100644 API-SERVICE/ApiList/TEST_2.py delete mode 100644 API-SERVICE/ApiService.py create mode 100644 API-SERVICE/ApiService/ApiService.py create mode 100644 API-SERVICE/ApiService/ApiServiceConfig.py create mode 100644 API-SERVICE/ApiService/__init__.py delete mode 100644 API-SERVICE/ApiServiceMsg.py delete mode 100644 API-SERVICE/README.md rename API-SERVICE/{ConnectManager => Utils}/DataBaseUtil.py (97%) create mode 100644 API-SERVICE/conf/api_config.ini diff --git a/API-ROUTER/ApiList/delApi.py b/API-ROUTER/ApiList/delApi.py deleted file mode 100644 index d536ed91..00000000 --- a/API-ROUTER/ApiList/delApi.py +++ /dev/null @@ -1,11 +0,0 @@ -from typing import Dict -from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db - -def api(api_name:str) -> Dict: - db = connect_db(config.db_type, config.db_info) - - db.delete("api_info", {"api_name" : api_name}) - db.delete("api_params", {"api_name" : api_name}) - - return {"API_NAME" : "delApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiList/getApi.py b/API-ROUTER/ApiList/getApi.py deleted file mode 100644 index a3b1880f..00000000 --- a/API-ROUTER/ApiList/getApi.py +++ /dev/null @@ -1,19 +0,0 @@ -from typing import Dict -from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db, make_res_msg -from Utils.DataBaseUtil import convert_data - -def api(api_name:str) -> Dict: - db = connect_db(config.db_type, config.db_info) - - api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' - - api_info, column_names = db.select(api_info_query) - api_info = make_res_msg("", "", api_info, column_names) - - api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' - - api_params, column_names = db.select(api_params_query) - api_params = make_res_msg("", "", api_params, column_names) - - return {"api_info" : api_info, "api_params" : api_params} diff --git a/API-ROUTER/ApiList/getApiList.py b/API-ROUTER/ApiList/getApiList.py deleted file mode 100644 index a916fb2d..00000000 --- a/API-ROUTER/ApiList/getApiList.py +++ /dev/null @@ -1,18 +0,0 @@ -from typing import Dict -from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db, make_res_msg -import traceback - -api_info_query = f'SELECT * FROM api_info;' -api_params_query = f'SELECT * FROM api_params;' - -def api() -> Dict: - db = connect_db(config.db_type, config.db_info) - - api_info, column_names = db.select(api_info_query) - api_info = make_res_msg("", "", api_info, column_names) - - api_params, column_names = db.select(api_params_query) - api_params = make_res_msg("", "", api_params, column_names) - - return {"api_info" : api_info, "api_params" : api_params} diff --git a/API-ROUTER/ApiList/setApi.py b/API-ROUTER/ApiList/setApi.py deleted file mode 100644 index 22f0f038..00000000 --- a/API-ROUTER/ApiList/setApi.py +++ /dev/null @@ -1,39 +0,0 @@ -from typing import Dict, List -from pydantic import BaseModel -from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db -import traceback - -class ApiParam(BaseModel): - api_name: str - param_name: str - data_type: str - default_value: str - -class ApiInfo(BaseModel): - api_name: str - category: str - url: str - msg_type: str - method: str - protocol: str - command: str - bypass: str - params: List[ApiParam] - -def api(api_info:ApiInfo) -> Dict: - db = connect_db(config.db_type, config.db_info) - - insert_api_info = {} - insert_api_params = [] - for key, value in api_info.__dict__.items(): - if key == "params": - for param in value: - insert_api_params.append(param.__dict__) - else: - insert_api_info[key] = value - - db.insert("api_info", [insert_api_info]) - db.insert("api_params", insert_api_params) - - return {"API_NAME" : "setApi"} \ No newline at end of file diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index f2c31dd5..b7920a9b 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -42,7 +42,7 @@ def set_route(self) -> None: db = connect_db(config.db_type, config.db_info) api_info, _ = db.select('SELECT * FROM api_info;') - + for api in api_info: self.router.add_api_route(f'/api/{api["api_name"]}', self.route_api, methods=["POST"], tags=["route"]) diff --git a/API-ROUTER/ConnectManager/__init__.py b/API-ROUTER/ConnectManager/__init__.py index 949aab10..3269347b 100644 --- a/API-ROUTER/ConnectManager/__init__.py +++ b/API-ROUTER/ConnectManager/__init__.py @@ -1,2 +1,2 @@ -from .PostgreManager import * from .RemoteCmd import * +from .PostgreManager import * diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index cc999787..8450d88e 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -3,7 +3,6 @@ import argparse import logging from pathlib import Path -from tkinter.messagebox import NO from typing import Any from ApiRoute.ApiRouteConfig import config from ConnectManager import PostgreManager diff --git a/API-SERVICE/ApiList/TEST_1.py b/API-SERVICE/ApiList/TEST_1.py new file mode 100644 index 00000000..6718a9be --- /dev/null +++ b/API-SERVICE/ApiList/TEST_1.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api(api_name:str) -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST_1"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/TEST_2.py b/API-SERVICE/ApiList/TEST_2.py new file mode 100644 index 00000000..3a7e0212 --- /dev/null +++ b/API-SERVICE/ApiList/TEST_2.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api(api_name:str) -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST_2"} \ No newline at end of file diff --git a/API-SERVICE/ApiService.py b/API-SERVICE/ApiService.py deleted file mode 100644 index 107a6977..00000000 --- a/API-SERVICE/ApiService.py +++ /dev/null @@ -1,105 +0,0 @@ -import logging - -from fastapi import APIRouter -from pydantic import BaseModel -from typing import Dict, List - -import re -from ConnectManager import PostgreManager, DataBaseUtil -import traceback - - -logger = logging.getLogger() - -def make_res_msg(result, errorMessage, data, column_names): - header_list = [] - for column_name in column_names: - header = {"column_name" : column_name} - header_list.append(header) - - return {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} - -class ApiService: - def __init__(self, db_type:str, db_info: Dict, query_info: Dict) -> None: - self.db_type = db_type - self.db_info = db_info - self.query_info = query_info - - self.router = APIRouter() - self.set_route() - - def set_route(self) -> None: - self.router.add_api_route("/api/meta/metaNameList", self.get_biz_meta_name_list, methods=["GET"]) - self.router.add_api_route("/api/meta/getMetaName", self.get_meta_name_detail, methods=["GET"]) - #self.router.add_api_route("/api/meta/insertMetaName", self., methods=["POST"]) - #self.router.add_api_route("/api/meta/updateMetaName", self., methods=["PUT"]) - self.router.add_api_route("/api/meta/metaMapList", self.get_meta_map_list, methods=["GET"]) - self.router.add_api_route("/api/meta/useMetaNameList", self.get_use_meta_name_list, methods=["GET"]) - #self.router.add_api_route("/api/meta/insertMetaMap", self., methods=["POST"]) - self.router.add_api_route("/api/meta/getBizMetaList", self.get_biz_meta_list, methods=["GET"]) - self.router.add_api_route("/api/meta/getBizMetaDetail", self.get_biz_meta_detail, methods=["GET"]) - #self.router.add_api_route("/api/meta/insertBizMeta", self., methods=["POST"]) - #self.router.add_api_route("/api/meta/updateBizMeta", self., methods=["PUT"]) - self.router.add_api_route("/api/meta/getCategoryList", self.get_categor_list, methods=["GET"]) - #self.router.add_api_route("/api/meta/updateCategory", self., methods=["PUT", "POST"]) - - def connect_db(self): - if self.db_type == "postgresql": - db = PostgreManager(host=self.db_info["host"], port=self.db_info["port"], - user=self.db_info["user"], password=self.db_info["password"], - database=self.db_info["database"], schema=self.db_info["schema"]) - else: - logger.error(f"Not Implemented. {self.db_type}") - return db - - def get_biz_meta_name_list(self): - db = self.connect_db() - - body_query = f'SELECT * FROM {self.db_info["biz_meta_name_table"]};' - body_info, _ = db.select(body_query) - - header_query = f'SELECT * FROM {self.db_info["biz_meta_name_table"].replace("tb", "v")};' - header_info, _ = db.select(header_query) - - return {"result" : "", "errorMessage" : "", "data" : {"body" : body_info, "header" : header_info}} - - def get_meta_name_detail(self, name_id:str): - db = self.connect_db() - query = re.sub(f'#name_id#', DataBaseUtil.convert_data(name_id), self.query_info["getMetaNameDetail"]) - - data, _ = db.select(query) - - return {"result" : "", "errorMessage" : "", "data" : data[0]} - - def get_meta_map_list(self): - db = self.connect_db() - - body_info, _ = db.select(self.query_info["getMetaMapList"]) - - header_query = f'SELECT * FROM {self.db_info["biz_meta_map_table"].replace("tb", "v")};' - header_info, _ = db.select(header_query) - - return {"result" : "", "errorMessage" : "", "data" : {"body" : body_info, "header" : header_info}} - - def get_use_meta_name_list(self): - db = self.connect_db() - - data, _ = db.select(self.query_info["getUseMetaNameList"]) - - return {"result" : "", "errorMessage" : "", "data" : data} - - def get_biz_meta_list(self): - db = self.connect_db() - - body_info, _ = db.select(self.query_info["getBizMetaList"]) - header_info, _ = db.select(f'SELECT * FROM v_biz_meta;') - - return {"result" : "", "errorMessage" : "", "data" : {"body" : body_info, "header" : header_info}} - - def get_biz_meta_detail(self, data_base_id:str): - return "" - - def get_categor_list(self): - db = self.connect_db() - data, _ = db.select(self.query_info["getCategoryList"]) - return {"result" : "", "errorMessage" : "", "data" : data} diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py new file mode 100644 index 00000000..1ba8e220 --- /dev/null +++ b/API-SERVICE/ApiService/ApiService.py @@ -0,0 +1,26 @@ +import logging +from typing import Dict, List +import importlib.util +from fastapi import APIRouter +from ApiService.ApiServiceConfig import config +from Utils.DataBaseUtil import convert_data +import traceback + +#logger = logging.getLogger() + +class ApiService: + def __init__(self) -> None: + self.router = APIRouter() + self.set_route() + + def set_route(self) -> None: + for api_name, api_info in config.api_config.items(): + module_path = f'{config.root_path}/AP_API_Router/API-SERVICE/ApiList/{api_name}.py' + module_name = "api" + spec = importlib.util.spec_from_file_location(module_name, module_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + self.router.add_api_route(f'{api_info["url_prefix"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) + + + \ No newline at end of file diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py new file mode 100644 index 00000000..7019a964 --- /dev/null +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -0,0 +1,17 @@ +from typing import Dict, List + +class ApiServiceConfig: + root_path : str + + db_type : str + db_info : Dict + + remote_info : Dict + + server_host : str + server_port : int + + api_config : Dict + + +config = ApiServiceConfig \ No newline at end of file diff --git a/API-SERVICE/ApiService/__init__.py b/API-SERVICE/ApiService/__init__.py new file mode 100644 index 00000000..9213060d --- /dev/null +++ b/API-SERVICE/ApiService/__init__.py @@ -0,0 +1,2 @@ +from .ApiService import * +from .ApiServiceConfig import * diff --git a/API-SERVICE/ApiServiceMsg.py b/API-SERVICE/ApiServiceMsg.py deleted file mode 100644 index c173e63f..00000000 --- a/API-SERVICE/ApiServiceMsg.py +++ /dev/null @@ -1,13 +0,0 @@ -from pydantic import BaseModel -from typing import Dict, List - -class TEST(BaseModel): - api_name: str - category: str - url: str - msg_type: str - method: str - protocol: str - command: str - bypass: str - params: List[Dict] \ No newline at end of file diff --git a/API-SERVICE/ConnectManager/PostgreManager.py b/API-SERVICE/ConnectManager/PostgreManager.py index 941e2a58..e7c64191 100644 --- a/API-SERVICE/ConnectManager/PostgreManager.py +++ b/API-SERVICE/ConnectManager/PostgreManager.py @@ -1,12 +1,10 @@ import logging from typing import List, Dict import psycopg2 -from requests import options -from .DataBaseUtil import make_insert_query, make_update_query, make_delete_query - -logger = logging.getLogger() +from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query +#logger = logging.getLogger() class PostgreManager: def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: @@ -23,14 +21,14 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - logger.info("PostgreManager Connect.") + print("PostgreManager Connect.") return conn def execute(self, sql: str) -> None: print(sql) result = self.cursor.execute(sql) self.conn.commit() - logger.info(f'PostgreManager Execute Result. (row count : {result})') + #print(f'PostgreManager Execute Result. (row count : {result})') def select(self, sql: str, count: int = None) -> List[Dict]: self.execute(sql) @@ -39,7 +37,7 @@ def select(self, sql: str, count: int = None) -> List[Dict]: rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.debug(f'PostgreManager Select Execute. ({sql})') + print(f'PostgreManager Select Execute. ({sql})') result = [] for row in rows: @@ -47,20 +45,20 @@ def select(self, sql: str, count: int = None) -> List[Dict]: return result, column_names def insert(self, table: str, into_info: List[Dict]) -> None: - sql = make_insert_query(f"{table}", into_info) + sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - logger.info(f'PostgreManager Insert Execute. ({sql})') + print(f'PostgreManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: - sql = make_update_query(f"{table}", set_info, where_info) + sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - logger.debug(f'PostgreManager Update Execute. ({sql})') + print(f'PostgreManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: - sql = make_delete_query(f"{table}", where_info) + sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - logger.debug(f'PostgreManager Delete Execute. ({sql})') + print(f'PostgreManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-SERVICE/ConnectManager/__init__.py b/API-SERVICE/ConnectManager/__init__.py index 080d56f0..7b9b6ae1 100644 --- a/API-SERVICE/ConnectManager/__init__.py +++ b/API-SERVICE/ConnectManager/__init__.py @@ -1,2 +1 @@ -from .DataBaseUtil import * from .PostgreManager import * diff --git a/API-SERVICE/README.md b/API-SERVICE/README.md deleted file mode 100644 index ed7349ba..00000000 --- a/API-SERVICE/README.md +++ /dev/null @@ -1 +0,0 @@ -# API-SERVICE diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 41c822a9..70c2c270 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,20 +1,68 @@ import os import configparser +import argparse import logging +from pathlib import Path +from tkinter.messagebox import NO +from typing import Any +from ApiService.ApiServiceConfig import config +from ConnectManager import PostgreManager -logger = logging.getLogger() +#logger = logging.getLogger() -def get_config(root_path:str): +def get_config(root_path:str, config_name:str): ano_cfg = {} config = configparser.ConfigParser() - config.optionxform = str - config.read(os.path.join(root_path, - "AP_API_Router/API-SERVICE/conf/config.ini"))#, encoding='utf-8') + f"AP_API_Router/API-SERVICE/conf/{config_name}"), encoding='utf-8') for section in config.sections(): ano_cfg[section] = {} for option in config.options(section): ano_cfg[section][option] = config.get(section, option) return ano_cfg + +def parser_params() -> Any: + parser = argparse.ArgumentParser() + parser.add_argument("--host", type=str, default="192.168.101.43") + parser.add_argument("--port", type=int, default=19000) + parser.add_argument("--db_type", default="postgresql") + + return parser.parse_args() + +def prepare_config() -> None: + args = parser_params() + config.root_path = Path(os.getcwd()).parent + api_router_cfg = get_config(config.root_path, "config.ini") + config.api_config = get_config(config.root_path, "api_config.ini") + config.db_type = args.db_type + config.server_host = args.host + config.server_port = args.port + config.db_info = api_router_cfg[config.db_type] + +def connect_db(db_type, db_info): + if db_type == "postgresql": + db = PostgreManager(host=db_info["host"], port=db_info["port"], + user=db_info["user"], password=db_info["password"], + database=db_info["database"], schema=db_info["schema"]) + else: + print(f"Not Implemented. {db_type}") + return db + +def save_file_for_reload(): + with open(__file__, "a") as fd: + fd.write(" ") + +def make_res_msg(result, errorMessage, data=None, column_names=None): + header_list = [] + for column_name in column_names: + header = {"column_name" : column_name} + header_list.append(header) + + result = None + if data == None or column_names == None: + result = {"result" : result, "errorMessage" : errorMessage} + else: + result = {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} + return result \ No newline at end of file diff --git a/API-SERVICE/ConnectManager/DataBaseUtil.py b/API-SERVICE/Utils/DataBaseUtil.py similarity index 97% rename from API-SERVICE/ConnectManager/DataBaseUtil.py rename to API-SERVICE/Utils/DataBaseUtil.py index 5a2e872a..8ac48edc 100644 --- a/API-SERVICE/ConnectManager/DataBaseUtil.py +++ b/API-SERVICE/Utils/DataBaseUtil.py @@ -1,7 +1,7 @@ import logging from typing import List, Dict -logger = logging.getLogger() +#logger = logging.getLogger() def convert_data(data) -> str: @@ -35,3 +35,5 @@ def make_delete_query(table, where_info: Dict) -> str: f'{column} = {convert_data(value)}' for column, value in where_info.items()] sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' return sql + + diff --git a/API-SERVICE/Utils/__init__.py b/API-SERVICE/Utils/__init__.py index 3b5ce1cc..71791818 100644 --- a/API-SERVICE/Utils/__init__.py +++ b/API-SERVICE/Utils/__init__.py @@ -1 +1,2 @@ from .CommonUtil import * +from .DataBaseUtil import * \ No newline at end of file diff --git a/API-SERVICE/conf/api_config.ini b/API-SERVICE/conf/api_config.ini new file mode 100644 index 00000000..0b8ffa64 --- /dev/null +++ b/API-SERVICE/conf/api_config.ini @@ -0,0 +1,7 @@ +[TEST_1] +method = GET +url_prefix = /api + +[TEST_2] +method = GET +url_prefix = /api diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/config.ini index 8d170733..0ef36ff2 100644 --- a/API-SERVICE/conf/config.ini +++ b/API-SERVICE/conf/config.ini @@ -1,104 +1,12 @@ [default] db = postgresql host = 192.168.101.43 -port = 16000 +port = 17000 [postgresql] -host = 192.168.106.24 -port = 25432 +host = 192.168.101.43 +port = 5432 user = dhub password = dhub.12# database = dhub -schema = metasch -biz_meta_name_table = tb_biz_meta_name -biz_meta_map_table = tb_biz_meta_map -biz_meta_table = tb_biz_meta -category_table = tb_category - -[mariadb] - -[select_query] -getMetaNameDetail = select kor_name, - eng_name, - show_order, - name_id, - (case - when type = 0 then 'text' - when type = 1 then 'int' - when type = 2 then 'binary' - end - ) as type - from tb_biz_meta_name - where name_id = #name_id#; - -getMetaNameList = SELECT kor_name, - eng_name, - show_order, - name_id, - (case - when type = 0 then 'text' - when type = 1 then 'int' - when type = 2 then 'binary' - end - ) as type - FROM tb_biz_meta_name - order by name_id; - -getUseMetaNameList = select tbmn.kor_name, - tbmn.eng_name, - tbmn.show_order, - tbmn.name_id, - case - when tbmn.type = 0 then 'text' - when tbmn.type = 1 then 'int' - when tbmn.type = 2 then 'binary' - end as type, - case - when (select tbmm.name_id from tb_biz_meta_map tbmm where tbmn.name_id = tbmm.name_id) is null then 0 - else 1 - end as use_meta - from tb_biz_meta_name tbmn - order by tbmn.name_id; - -getBizMetaForm = select item_id, kor_name, eng_name, tbmm.name_id, type as value_type - from tb_biz_meta_map tbmm - left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id - order by item_id; - -getBizMetaDetail = select T.biz_dataset_id as rowId, - array_agg(T.kor_name) as kor_name, - array_agg(T.eng_name) as eng_name, - array_agg(T.type) as type, - array_agg(T.item_val) as data, - array_agg(T.item_id) as columnKey - from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name, type - from tb_biz_meta tbm - right join tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id - left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id - where biz_dataset_id = #database_id# - order by biz_dataset_id, item_id) T - group by biz_dataset_id - order by biz_dataset_id; - -getBizMetaList = select T.biz_dataset_id as rowId, - array_agg(T.item_val) as data, - array_agg(T.item_id) as columnKey - from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name - from tb_biz_meta tbm - right join tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id - left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id - order by biz_dataset_id, item_id) T - group by biz_dataset_id - order by biz_dataset_id; - -getMetaName = select * from tb_biz_meta_name tbmn where name_id = #name_id#; - -getMetaMapList = select tbmn.kor_name, tbmn.eng_name, tbmm.item_id, tbmm.name_id - from tb_biz_meta_name tbmn - join tb_biz_meta_map tbmm on tbmn.name_id = tbmm.name_id; - -getCategoryList = select * from tb_category order by parent_id, node_id; - -getMetaNameForView = select tbmm.item_id, tbmn.kor_name, tbmn.eng_name - from tb_biz_meta_map tbmm - left join tb_biz_meta_name tbmn on tbmn.name_id = tbmm.name_id; \ No newline at end of file +schema = api diff --git a/API-SERVICE/conf/logging.conf b/API-SERVICE/conf/logging.conf index ae8125a5..a26cabf9 100644 --- a/API-SERVICE/conf/logging.conf +++ b/API-SERVICE/conf/logging.conf @@ -23,12 +23,12 @@ level=INFO [handler_rotatingFileHandler] class=handlers.RotatingFileHandler formatter=default -args=('API-Service.log', 'a', 20000000, 10) +args=('API-SERVICE/log/API-Service.log', 'a', 20000000, 10) level=INFO [handler_file] class=FileHandler -args=("API-Service.log",) +args=("API-SERVICE/log/API-Service.log",) formatter=default level=INFO diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 18a315e6..fe4d367f 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -1,28 +1,19 @@ import os import logging import logging.config -from Utils.CommonUtil import get_config +import traceback from fastapi import FastAPI import uvicorn +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import prepare_config from ApiService import ApiService -from pathlib import Path -import uvicorn - -root_path = Path(os.getcwd()).parent -logging.config.fileConfig(os.path.join(root_path, "AP_API_Router/API-SERVICE/conf/logging.conf")) -logger = logging.getLogger() -api_service_cfg = get_config(root_path) - -db_type = api_service_cfg["default"]["db"] -db_info = api_service_cfg[db_type] -qury_info = api_service_cfg["select_query"] +import pdb +prepare_config() +#logging.config.fileConfig(os.path.join(config.root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) +#logger = logging.getLogger() +api_router = ApiService() app = FastAPI() -api_service = ApiService(db_type, db_info, qury_info) -app.include_router(api_service.router) - -if __name__ == '__main__': - host = api_service_cfg["default"]["host"] - port = api_service_cfg["default"]["port"] - - uvicorn.run("server:app", host=host, port=int(port), reload=True) +app.include_router(api_router.router) +if __name__ == '__main__': + uvicorn.run("server:app", host=config.server_host, port=config.server_port, reload=True) From bdc26e539e8d7b939ee604467e25cdfb9084d55c Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 29 Apr 2022 16:20:33 +0900 Subject: [PATCH 011/236] =?UTF-8?q?feat:=20api=20service=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=ED=8C=8C=EC=9D=BC=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-202 --- .../{TEST_1.py => meta/getBizMetaDetail.py} | 4 +- .../{TEST_2.py => meta/getBizMetaList.py} | 4 +- API-SERVICE/ApiList/meta/getCategoryList.py | 8 +++ API-SERVICE/ApiList/meta/getMetaName.py | 8 +++ API-SERVICE/ApiList/meta/insertBizMeta.py | 8 +++ API-SERVICE/ApiList/meta/insertMetaMap.py | 8 +++ API-SERVICE/ApiList/meta/insertMetaName.py | 8 +++ API-SERVICE/ApiList/meta/metaMapList.py | 8 +++ API-SERVICE/ApiList/meta/metaNameList.py | 8 +++ API-SERVICE/ApiList/meta/updateBizMeta.py | 8 +++ API-SERVICE/ApiList/meta/updateCategory.py | 8 +++ API-SERVICE/ApiList/meta/updateMetaName.py | 8 +++ API-SERVICE/ApiList/meta/useMetaNameList.py | 8 +++ API-SERVICE/ApiService/ApiService.py | 6 +- API-SERVICE/Utils/CommonUtil.py | 2 +- API-SERVICE/conf/api_config.ini | 61 ++++++++++++++++++- 16 files changed, 156 insertions(+), 9 deletions(-) rename API-SERVICE/ApiList/{TEST_1.py => meta/getBizMetaDetail.py} (71%) rename API-SERVICE/ApiList/{TEST_2.py => meta/getBizMetaList.py} (71%) create mode 100644 API-SERVICE/ApiList/meta/getCategoryList.py create mode 100644 API-SERVICE/ApiList/meta/getMetaName.py create mode 100644 API-SERVICE/ApiList/meta/insertBizMeta.py create mode 100644 API-SERVICE/ApiList/meta/insertMetaMap.py create mode 100644 API-SERVICE/ApiList/meta/insertMetaName.py create mode 100644 API-SERVICE/ApiList/meta/metaMapList.py create mode 100644 API-SERVICE/ApiList/meta/metaNameList.py create mode 100644 API-SERVICE/ApiList/meta/updateBizMeta.py create mode 100644 API-SERVICE/ApiList/meta/updateCategory.py create mode 100644 API-SERVICE/ApiList/meta/updateMetaName.py create mode 100644 API-SERVICE/ApiList/meta/useMetaNameList.py diff --git a/API-SERVICE/ApiList/TEST_1.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py similarity index 71% rename from API-SERVICE/ApiList/TEST_1.py rename to API-SERVICE/ApiList/meta/getBizMetaDetail.py index 6718a9be..c20e3fa8 100644 --- a/API-SERVICE/ApiList/TEST_1.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -2,7 +2,7 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db -def api(api_name:str) -> Dict: +def api() -> Dict: db = connect_db(config.db_type, config.db_info) - return {"API_NAME" : "TEST_1"} \ No newline at end of file + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/TEST_2.py b/API-SERVICE/ApiList/meta/getBizMetaList.py similarity index 71% rename from API-SERVICE/ApiList/TEST_2.py rename to API-SERVICE/ApiList/meta/getBizMetaList.py index 3a7e0212..c20e3fa8 100644 --- a/API-SERVICE/ApiList/TEST_2.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -2,7 +2,7 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db -def api(api_name:str) -> Dict: +def api() -> Dict: db = connect_db(config.db_type, config.db_info) - return {"API_NAME" : "TEST_2"} \ No newline at end of file + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/getMetaName.py b/API-SERVICE/ApiList/meta/getMetaName.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/getMetaName.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py new file mode 100644 index 00000000..c20e3fa8 --- /dev/null +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -0,0 +1,8 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db + +def api() -> Dict: + db = connect_db(config.db_type, config.db_info) + + return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index 1ba8e220..a1eff206 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -15,12 +15,14 @@ def __init__(self) -> None: def set_route(self) -> None: for api_name, api_info in config.api_config.items(): - module_path = f'{config.root_path}/AP_API_Router/API-SERVICE/ApiList/{api_name}.py' + module_path = f'{config.root_path}/API-SERVICE/ApiList/{api_info["sub_dir"]}/{api_name}.py' module_name = "api" spec = importlib.util.spec_from_file_location(module_name, module_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url_prefix"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) + self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', + module.api, methods=[api_info["method"]], + tags=[f'service [ {api_info["url_prefix"]}/{api_info["sub_dir"]} ]']) \ No newline at end of file diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 70c2c270..ba4c4e09 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -15,7 +15,7 @@ def get_config(root_path:str, config_name:str): config = configparser.ConfigParser() config.read(os.path.join(root_path, - f"AP_API_Router/API-SERVICE/conf/{config_name}"), encoding='utf-8') + f"API-SERVICE/conf/{config_name}"), encoding='utf-8') for section in config.sections(): ano_cfg[section] = {} for option in config.options(section): diff --git a/API-SERVICE/conf/api_config.ini b/API-SERVICE/conf/api_config.ini index 0b8ffa64..178d44f3 100644 --- a/API-SERVICE/conf/api_config.ini +++ b/API-SERVICE/conf/api_config.ini @@ -1,7 +1,64 @@ -[TEST_1] +[metaNameList] method = GET url_prefix = /api +sub_dir = meta -[TEST_2] +[getMetaName] method = GET url_prefix = /api +sub_dir = meta + +[insertMetaName] +method = POST +url_prefix = /api +sub_dir = meta + +[updateMetaName] +method = PUT +url_prefix = /api +sub_dir = meta + +[metaMapList] +method = GET +url_prefix = /api +sub_dir = meta + +[useMetaNameList] +method = GET +url_prefix = /api +sub_dir = meta + +[insertMetaMap] +method = POST +url_prefix = /api +sub_dir = meta + +[getBizMetaList] +method = GET +url_prefix = /api +sub_dir = meta + +[getBizMetaDetail] +method = GET +url_prefix = /api +sub_dir = meta + +[insertBizMeta] +method = POST +url_prefix = /api +sub_dir = meta + +[updateBizMeta] +method = PUT +url_prefix = /api +sub_dir = meta + +[getCategoryList] +method = GET +url_prefix = /api +sub_dir = meta + +[updateCategory] +method = PUT, POST +url_prefix = /api +sub_dir = meta From 1231277e8940760658bf73d13848d12587df70c6 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 3 May 2022 10:15:26 +0900 Subject: [PATCH 012/236] =?UTF-8?q?feat:=20API=20service=20=EC=9D=BC?= =?UTF-8?q?=EB=B6=80=20=EA=B0=9C=EB=B0=9C=20=EB=B0=8F=20=EA=B3=B5=EB=8F=99?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit API service 일부 개발 및 공동 작업을 위한 배포 --- API-ROUTER/ApiRoute/ApiRoute.py | 2 +- API-ROUTER/Utils/CommonUtil.py | 6 ++--- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 23 ++++++++++++++++++-- API-SERVICE/ApiList/meta/getBizMetaList.py | 17 +++++++++++++++ API-SERVICE/ApiList/meta/getCategoryList.py | 10 +++++++++ API-SERVICE/ApiList/meta/getMetaName.py | 9 ++++++-- API-SERVICE/ApiList/meta/insertBizMeta.py | 3 +++ API-SERVICE/ApiList/meta/insertMetaMap.py | 3 +++ API-SERVICE/ApiList/meta/insertMetaName.py | 20 ++++++++++++++--- API-SERVICE/ApiList/meta/metaMapList.py | 10 ++++++++- API-SERVICE/ApiList/meta/metaNameList.py | 9 +++++++- API-SERVICE/ApiList/meta/updateBizMeta.py | 3 +++ API-SERVICE/ApiList/meta/updateCategory.py | 3 +++ API-SERVICE/ApiList/meta/updateMetaName.py | 21 ++++++++++++++++-- API-SERVICE/ApiList/meta/useMetaNameList.py | 3 +++ API-SERVICE/ConnectManager/PostgreManager.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 2 +- API-SERVICE/conf/config.ini | 6 ++--- 18 files changed, 132 insertions(+), 20 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index b7920a9b..64d023f6 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -47,7 +47,7 @@ def set_route(self) -> None: self.router.add_api_route(f'/api/{api["api_name"]}', self.route_api, methods=["POST"], tags=["route"]) for api_name, api_info in config.api_config.items(): - module_path = f'{config.root_path}/AP_API_Router/API-ROUTER/ApiList/{api_name}.py' + module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_name}.py' module_name = "api" spec = importlib.util.spec_from_file_location(module_name, module_path) module = importlib.util.module_from_spec(spec) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 8450d88e..7ef99492 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -14,7 +14,7 @@ def get_config(root_path:str, config_name:str): config = configparser.ConfigParser() config.read(os.path.join(root_path, - f"AP_API_Router/API-ROUTER/conf/{config_name}"), encoding='utf-8') + f"API-ROUTER/conf/{config_name}"), encoding='utf-8') for section in config.sections(): ano_cfg[section] = {} for option in config.options(section): @@ -24,7 +24,7 @@ def get_config(root_path:str, config_name:str): def parser_params() -> Any: parser = argparse.ArgumentParser() - parser.add_argument("--host", type=str, default="192.168.101.43") + parser.add_argument("--host", type=str, default="127.0.0.1") parser.add_argument("--port", type=int, default=18000) parser.add_argument("--db_type", default="postgresql") @@ -65,4 +65,4 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): result = {"result" : result, "errorMessage" : errorMessage} else: result = {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} - return result \ No newline at end of file + return result \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index c20e3fa8..bd765d79 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,8 +1,27 @@ +from dataclasses import replace +import re from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +from loguru import logger -def api() -> Dict: +def api(data_set_id:str) -> Dict: db = connect_db(config.db_type, config.db_info) - + query = f'select T.biz_dataset_id as rowId,\ + array_agg(T.kor_name) as kor_name,\ + array_agg(T.eng_name) as eng_name,\ + array_agg(T.type) as type,\ + array_agg(T.item_val) as data,\ + array_agg(T.item_id) as columnKey\ + from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name, type\ + from tb_biz_meta tbm\ + right join tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id\ + left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id\ + where biz_dataset_id = {convert_data(data_set_id)}\ + order by biz_dataset_id, item_id) T\ + group by biz_dataset_id\ + order by biz_dataset_id;' + result = db.select(query) + logger.debug(result) return {"API_NAME" : "TEST"} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index c20e3fa8..50604f55 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,6 +1,23 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data + +''' + + +''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index c20e3fa8..911039cf 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -1,6 +1,16 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data + +''' + + +''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getMetaName.py b/API-SERVICE/ApiList/meta/getMetaName.py index c20e3fa8..6faa6750 100644 --- a/API-SERVICE/ApiList/meta/getMetaName.py +++ b/API-SERVICE/ApiList/meta/getMetaName.py @@ -1,8 +1,13 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data -def api() -> Dict: +def api(name_id:str) -> Dict: db = connect_db(config.db_type, config.db_info) - return {"API_NAME" : "TEST"} \ No newline at end of file + query = f'SELECT * FROM tb_biz_meta_name WHERE name_id = {convert_data(name_id)}' + + meta_name = db.select(query) + + return {"result" : "", "errorMessage" : "", "data": meta_name[0][0]} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index c20e3fa8..fed2326d 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -1,7 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +''' +''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index c20e3fa8..fed2326d 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -1,7 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +''' +''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index c20e3fa8..4508a57a 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -1,8 +1,22 @@ from typing import Dict +from xmlrpc.client import boolean from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel -def api() -> Dict: - db = connect_db(config.db_type, config.db_info) +class InsertMetaName(BaseModel): + subscribed: bool + kor_name: str + eng_name: str + show_order: int + name_id: str + type: int - return {"API_NAME" : "TEST"} \ No newline at end of file +def api(insert:InsertMetaName) -> Dict: + db = connect_db(config.db_type, config.db_info) + query = f'INSERT INTO tb_biz_meta_name (kor_name, eng_name, show_order, name_id, type)\ + VALUES ({convert_data(insert.kor_name)}, {convert_data(insert.eng_name)}, {convert_data(insert.show_order)},\ + (SELECT concat(\'i\', CAST(substring(max(name_id), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.type)});' + db.execute(query) + return {"result" : "", "errorMessage" : ""} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index c20e3fa8..10b4f3d5 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -4,5 +4,13 @@ def api() -> Dict: db = connect_db(config.db_type, config.db_info) + meta_map_query = "SELECT tbmn.kor_name, tbmn.eng_name, tbmm.item_id, tbmm.name_id\ + FROM tb_biz_meta_name tbmn\ + JOIN tb_biz_meta_map tbmm ON tbmn.name_id = tbmm.name_id";\ - return {"API_NAME" : "TEST"} \ No newline at end of file + meta_map = db.select(meta_map_query) + + v_meta_map_query = "SELECT * FROM v_biz_meta_map;" + v_meta_map = db.select(v_meta_map_query) + + return {"result" : "", "errorMessage" : "", "data": {"body": meta_map[0], "header": v_meta_map[0]}} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index c20e3fa8..b47cf26c 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -1,3 +1,4 @@ +from select import select from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db @@ -5,4 +6,10 @@ def api() -> Dict: db = connect_db(config.db_type, config.db_info) - return {"API_NAME" : "TEST"} \ No newline at end of file + meta_name_query = "SELECT * FROM tb_biz_meta_name;" + meta_name = db.select(meta_name_query) + + v_meta_name_query = "SELECT * FROM v_biz_meta_name;" + v_meta_name = db.select(v_meta_name_query) + + return {"result" : "", "errorMessage" : "", "data": {"body": meta_name[0], "header": v_meta_name[0]}} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index c20e3fa8..fed2326d 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -1,7 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +''' +''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index c20e3fa8..fed2326d 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,7 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +''' +''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index c20e3fa8..6f613195 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -1,8 +1,25 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel -def api() -> Dict: +class UpdatetMetaName(BaseModel): + subscribed: bool + kor_name: str + eng_name: str + show_order: int + name_id: str + type: int + +def api(update:UpdatetMetaName) -> Dict: db = connect_db(config.db_type, config.db_info) + query = f'UPDATE tb_biz_meta_name\ + SET kor_name = {convert_data(update.kor_name)},\ + eng_name = {convert_data(update.eng_name)},\ + show_order = {convert_data(update.show_order)},\ + type= {convert_data(update.type)}\ + WHERE name_id = {convert_data(update.name_id)};'\ - return {"API_NAME" : "TEST"} \ No newline at end of file + db.execute(query) + return {"result" : "", "errorMessage" : ""} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index c20e3fa8..fed2326d 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -1,7 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +''' +''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ConnectManager/PostgreManager.py b/API-SERVICE/ConnectManager/PostgreManager.py index e7c64191..12d66e75 100644 --- a/API-SERVICE/ConnectManager/PostgreManager.py +++ b/API-SERVICE/ConnectManager/PostgreManager.py @@ -28,7 +28,7 @@ def execute(self, sql: str) -> None: print(sql) result = self.cursor.execute(sql) self.conn.commit() - #print(f'PostgreManager Execute Result. (row count : {result})') + print(f'PostgreManager Execute Result. (row count : {result})') def select(self, sql: str, count: int = None) -> List[Dict]: self.execute(sql) diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index ba4c4e09..0b060155 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -25,7 +25,7 @@ def get_config(root_path:str, config_name:str): def parser_params() -> Any: parser = argparse.ArgumentParser() - parser.add_argument("--host", type=str, default="192.168.101.43") + parser.add_argument("--host", type=str, default="127.0.0.1") parser.add_argument("--port", type=int, default=19000) parser.add_argument("--db_type", default="postgresql") diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/config.ini index 0ef36ff2..f1d95627 100644 --- a/API-SERVICE/conf/config.ini +++ b/API-SERVICE/conf/config.ini @@ -4,9 +4,9 @@ host = 192.168.101.43 port = 17000 [postgresql] -host = 192.168.101.43 -port = 5432 +host = 192.168.106.24 +port = 25432 user = dhub password = dhub.12# database = dhub -schema = api +schema = metasch From 89c5ceadafe4e1b0c63a3d5e6f82dad68a4f61db Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 3 May 2022 15:36:25 +0900 Subject: [PATCH 013/236] =?UTF-8?q?feat:=20API=20Service=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-227 --- API-ROUTER/ApiRoute/ApiRoute.py | 60 +++++++++++++++++++++++---------- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/conf/api_config.ini | 2 ++ 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 64d023f6..937ad24e 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -8,6 +8,7 @@ from Utils.CommonUtil import connect_db, make_res_msg, save_file_for_reload from pydantic import BaseModel from starlette.requests import Request +import requests import traceback #logger = logging.getLogger() @@ -24,7 +25,6 @@ class ApiInfo(BaseModel): url: str msg_type: str method: str - protocol: str command: str bypass: str params: List[ApiParam] @@ -44,7 +44,7 @@ def set_route(self) -> None: api_info, _ = db.select('SELECT * FROM api_info;') for api in api_info: - self.router.add_api_route(f'/api/{api["api_name"]}', self.route_api, methods=["POST"], tags=["route"]) + self.router.add_api_route(f'/route/{api["api_name"]}', self.route_api, methods=[api["method"]], tags=["route"]) for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_name}.py' @@ -52,7 +52,7 @@ def set_route(self) -> None: spec = importlib.util.spec_from_file_location(module_name, module_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url_prefix"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) + self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) def get_api_list(self) -> Dict: @@ -98,7 +98,9 @@ def set_api(self, api_info:ApiInfo) -> Dict: insert_api_info[key] = value db.insert("api_info", [insert_api_info]) - db.insert("api_params", insert_api_params) + + if len(insert_api_params) != 0: + db.insert("api_params", insert_api_params) save_file_for_reload() @@ -115,11 +117,16 @@ def del_api(self, api_name:str) -> Dict: return {"API_NAME : del_api"} async def route_api(self, request:Request) -> Dict: + result = None try: api_name = request.url.path.split("/")[-1] + method = request.method api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' + print(f'api_name : {api_name}') + print(f'method : {method}') + db = connect_db(config.db_type, config.db_info) api_info, _ = db.select(api_info_query) api_params, _ = db.select(api_params_query) @@ -129,24 +136,43 @@ async def route_api(self, request:Request) -> Dict: api_info = api_info[0] msg_type = api_info["msg_type"] - if msg_type == "JSON": - request_body = await request.json() - elif msg_type == "BINARY": - request_body = await request.form() #request.body() - else: - # Unknown Type - pass - + if api_info["bypass"] == "ON": - #send req + #send API-SERVICE method = api_info["method"] - else: - #call remote func + if method == "GET": + params_query = request.query_params + params_query = str(params_query) + params = {} + if len(params_query) != 0: + for param in params_query.split("&"): + parser_param = param.split("=") + params[parser_param[0]] = parser_param[1] + response = requests.get(api_info["url"], params=params) + elif method == "POST": + if msg_type == "JSON": + body = await request.json() + response = requests.post(api_info["url"], json=body) + else: + body = await request.form() + response = requests.post(api_info["url"], data=body) + elif method == "PUT": + if msg_type == "JSON": + body = await request.json() + response = requests.put(api_info["url"], json=body) + else: + body = await request.form() + response = requests.put(api_info["url"], data=body) + else: + print("Not Implemented Method.") + result = response.json() + else: # bypass "OFF" + #call REMOTE FUNCTION remote_cmd = RemoteCmd(config.remote_info["host"], config.remote_info["port"], config.remote_info["id"], config.remote_info["password"]) #make command (use params + body) - remote_cmd.cmd_exec(api_info["command"]) + result = remote_cmd.cmd_exec(api_info["command"]) except Exception: print(traceback.format_exc()) - return eval(remote_cmd.cmd_exec(api_info["command"])) + return result \ No newline at end of file diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 7ef99492..c53a981d 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -65,4 +65,4 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): result = {"result" : result, "errorMessage" : errorMessage} else: result = {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} - return result \ No newline at end of file + return result \ No newline at end of file diff --git a/API-ROUTER/conf/api_config.ini b/API-ROUTER/conf/api_config.ini index 0b8ffa64..dd1a1278 100644 --- a/API-ROUTER/conf/api_config.ini +++ b/API-ROUTER/conf/api_config.ini @@ -1,7 +1,9 @@ [TEST_1] method = GET url_prefix = /api +sub_dir = service [TEST_2] method = GET url_prefix = /api +sub_dir = service \ No newline at end of file From d490371b7f5464a1836d845c8a0c43e501f0bb9a Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 10:30:24 +0900 Subject: [PATCH 014/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20getBizMetaDe?= =?UTF-8?q?tail=20=EB=AA=A8=EB=93=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index bd765d79..e387ab4a 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -4,7 +4,6 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from loguru import logger def api(data_set_id:str) -> Dict: db = connect_db(config.db_type, config.db_info) @@ -22,6 +21,9 @@ def api(data_set_id:str) -> Dict: order by biz_dataset_id, item_id) T\ group by biz_dataset_id\ order by biz_dataset_id;' - result = db.select(query) - logger.debug(result) - return {"API_NAME" : "TEST"} \ No newline at end of file + biz_meta_detail = db.select(query) + + v_meta_map_query = "SELECT kor_name,eng_name,name_id FROM tb_biz_meta_name;" + v_meta_map = db.select(v_meta_map_query) + + return {"result" : "", "errorMessage" : "", "data": {"body": biz_meta_detail[0],"header":v_meta_map[0]}} \ No newline at end of file From 9b4534920bc5978796a7da9841faf5491700c988 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 10:30:43 +0900 Subject: [PATCH 015/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20getBizMetaLi?= =?UTF-8?q?st=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 50604f55..ade2f7d8 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -21,5 +21,22 @@ def api() -> Dict: db = connect_db(config.db_type, config.db_info) + meta_name_query = """ + select T.biz_dataset_id as rowId, + array_agg(T.item_val) as data, + array_agg(T.item_id) as columnKey + from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name + from metasch.tb_biz_meta tbm + right join metasch.tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id + left join metasch.tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id + order by biz_dataset_id, item_id) T + group by biz_dataset_id + order by biz_dataset_id; + """ + bizmeta_list = db.select(meta_name_query) + print(bizmeta_list) + + v_meta_map_query = "SELECT kor_name,eng_name,name_id FROM tb_biz_meta_name;" + v_meta_map = db.select(v_meta_map_query) - return {"API_NAME" : "TEST"} \ No newline at end of file + return {"result" : "", "errorMessage" : "", "data": {"body": bizmeta_list[0],"header":v_meta_map_query[0]}} \ No newline at end of file From 258f5a3a4cb42b336b4440b04e4438158a51d7c6 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 10:31:05 +0900 Subject: [PATCH 016/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20insertMetaMa?= =?UTF-8?q?p=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaMap.py | 25 ++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index fed2326d..92ae35a2 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -1,11 +1,26 @@ +from os import truncate from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data - -''' -''' + + def api() -> Dict: db = connect_db(config.db_type, config.db_info) - - return {"API_NAME" : "TEST"} \ No newline at end of file + + truncate_query = "TRUNCATE tb_biz_meta_map;" + db.execute(truncate_query) + + meta_name_query = "SELECT name_id FROM tb_biz_meta_name;" + meta_name_list = db.select(meta_name_query)[0] + + for i,meta_name in enumerate(meta_name_list): + query = f'INSERT INTO tb_biz_meta_map (item_id,name_id)\ + VALUES ({convert_data(i + 1)},{convert_data(meta_name["name_id"])});' + db.execute(query) + + meta_map_query = "SELECT * FROM tb_biz_meta_map" + meta_map_list = db.select(meta_map_query)[0] + # 수정 해야함 + + return meta_map_list \ No newline at end of file From 1bb706b7382e01fef84398f23869122bdc9a0dfe Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 10:31:31 +0900 Subject: [PATCH 017/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20useMetaNameL?= =?UTF-8?q?ist=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/useMetaNameList.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index fed2326d..af4543e1 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -3,9 +3,10 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -''' -''' + def api() -> Dict: db = connect_db(config.db_type, config.db_info) + meta_name_query = "SELECT * FROM tb_biz_meta_name;" + meta_name = db.select(meta_name_query) - return {"API_NAME" : "TEST"} \ No newline at end of file + return {"result" : "", "errorMessage" : "", "data": {"body": meta_name[0]}} \ No newline at end of file From add9f809c0d1aca3b7da106a196f462706f29589 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 4 May 2022 11:08:28 +0900 Subject: [PATCH 018/236] =?UTF-8?q?feat:=20url=20=EC=B9=98=ED=99=98=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-227 --- API-ROUTER/ApiRoute/ApiRoute.py | 14 ++++++++------ API-ROUTER/Utils/CommonUtil.py | 17 ++++++++++++++++- API-ROUTER/conf/config.ini | 8 +++----- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 937ad24e..490942af 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -5,7 +5,7 @@ from ApiRoute.ApiRouteConfig import config from ConnectManager import RemoteCmd from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg, save_file_for_reload +from Utils.CommonUtil import connect_db, convert_url, make_res_msg, save_file_for_reload from pydantic import BaseModel from starlette.requests import Request import requests @@ -140,6 +140,8 @@ async def route_api(self, request:Request) -> Dict: if api_info["bypass"] == "ON": #send API-SERVICE method = api_info["method"] + url = convert_url(api_info["url"]) + if method == "GET": params_query = request.query_params params_query = str(params_query) @@ -148,21 +150,21 @@ async def route_api(self, request:Request) -> Dict: for param in params_query.split("&"): parser_param = param.split("=") params[parser_param[0]] = parser_param[1] - response = requests.get(api_info["url"], params=params) + response = requests.get(url, params=params) elif method == "POST": if msg_type == "JSON": body = await request.json() - response = requests.post(api_info["url"], json=body) + response = requests.post(url, json=body) else: body = await request.form() - response = requests.post(api_info["url"], data=body) + response = requests.post(url, data=body) elif method == "PUT": if msg_type == "JSON": body = await request.json() - response = requests.put(api_info["url"], json=body) + response = requests.put(url, json=body) else: body = await request.form() - response = requests.put(api_info["url"], data=body) + response = requests.put(url, data=body) else: print("Not Implemented Method.") result = response.json() diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index c53a981d..400582c9 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -1,6 +1,7 @@ import os import configparser import argparse +import re import logging from pathlib import Path from typing import Any @@ -38,6 +39,7 @@ def prepare_config() -> None: config.db_type = args.db_type config.server_host = args.host config.server_port = args.port + config.url_info = api_router_cfg["url_info"] config.db_info = api_router_cfg[config.db_type] config.remote_info = api_router_cfg["remote"] @@ -65,4 +67,17 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): result = {"result" : result, "errorMessage" : errorMessage} else: result = {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} - return result \ No newline at end of file + return result + +def convert_url(url:str) -> str: + regex = "(?<=\$).*(?=\$)" + + result = re.compile(regex).search(url) + if result != None: + try: + sub_data = config.url_info[result.group()] + url = url.replace(f'${result.group()}$', sub_data) + except KeyError: + url = None + + return url \ No newline at end of file diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index c956d579..29e09b06 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -1,8 +1,3 @@ -[default] -db = postgresql -host = 192.168.101.43 -port = 18000 - [remote] host = 192.168.101.44 port = 10022 @@ -16,3 +11,6 @@ user = dhub password = dhub.12# database = dhub schema = api + +[url_info] +web_service = 127.0.0.1:19000 \ No newline at end of file From 745aef22e2f63445df2c95139ce84ec39f00dd22 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 11:32:15 +0900 Subject: [PATCH 019/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20insertBizMet?= =?UTF-8?q?a=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertBizMeta.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index fed2326d..5f8e076a 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -1,11 +1,23 @@ +import uuid from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -''' -''' + def api() -> Dict: db = connect_db(config.db_type, config.db_info) + query = "SELECT biz_dataset_id FROM tb_biz_meta;" + biz_meta_list = db.select(query)[0] + + for biz_meta in biz_meta_list: + query = f'UPDATE tb_biz_meta\ + SET biz_dataset_id = ({convert_data(uuid.uuid4())})\ + WHERE biz_dataset_id = {convert_data(biz_meta["biz_dataset_id"])};' + db.execute(query) + + query = "SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;" + biz_meta_list = db.select(query)[0] + + return biz_meta_list - return {"API_NAME" : "TEST"} \ No newline at end of file From 7c8162b582593ec5c12761730e3de307aaf468fd Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 11:55:31 +0900 Subject: [PATCH 020/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20getCategoryL?= =?UTF-8?q?ist=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getCategoryList.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 911039cf..2b905f77 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -3,16 +3,11 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -''' - - -''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) - - return {"API_NAME" : "TEST"} \ No newline at end of file + category_query = "select * \ + from metasch.tb_category \ + order by parent_id, node_id;" + category_list = db.select(category_query)[0] + return {"result" : "", "errorMessage" : "", "data": category_list} \ No newline at end of file From b53c0e5ae0510f810d900e12791f6b9e13537f8e Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 13:49:27 +0900 Subject: [PATCH 021/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20updateBizMet?= =?UTF-8?q?a=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateBizMeta.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index fed2326d..0027ea9b 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -2,10 +2,22 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel -''' -''' -def api() -> Dict: + +class UpdateBizMeta(BaseModel): + bizDatasetId: str + dataList: list + +# todo: 질문 후 수정 필요 +def api(update: UpdateBizMeta) -> Dict: db = connect_db(config.db_type, config.db_info) + for data in update.dataList: + query = f'UPDATE lum_test\ + SET item_id = {convert_data(data["itemId"])},\ + item_val = {convert_data(data["itemVal"])}\ + WHERE biz_dataset_id = {convert_data(update.bizDatasetId)} AND \ + item_id = {convert_data(update.data["itemId"])};' - return {"API_NAME" : "TEST"} \ No newline at end of file + db.execute(query) + return {"result" : "", "errorMessage" : ""} \ No newline at end of file From 2375d979bcccb015c004cb6b5ab34982520ca239 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 4 May 2022 13:50:28 +0900 Subject: [PATCH 022/236] =?UTF-8?q?feat:=20=EC=9B=90=EA=B2=A9=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-227 --- API-ROUTER/ApiRoute/ApiRoute.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 490942af..2942990f 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -136,9 +136,9 @@ async def route_api(self, request:Request) -> Dict: api_info = api_info[0] msg_type = api_info["msg_type"] - + + #send API-SERVICE if api_info["bypass"] == "ON": - #send API-SERVICE method = api_info["method"] url = convert_url(api_info["url"]) @@ -166,15 +166,25 @@ async def route_api(self, request:Request) -> Dict: body = await request.form() response = requests.put(url, data=body) else: - print("Not Implemented Method.") + print("Method Not Allowed.") result = response.json() - else: # bypass "OFF" - #call REMOTE FUNCTION + else: # bypass "OFF" - call REMOTE FUNCTION remote_cmd = RemoteCmd(config.remote_info["host"], config.remote_info["port"], config.remote_info["id"], config.remote_info["password"]) - #make command (use params + body) - result = remote_cmd.cmd_exec(api_info["command"]) + command_input = "" + if msg_type == "JSON": + input_params = await request.json() + for param in api_params: + try: + data = input_params[param["param_name"]] + command_input += f' --{param["param_name"]} {data}' + except KeyError: + print(f'parameter set default value. [{param["param_name"]}]') + command_input += f' --{param["param_name"]} {param["default_value"]}' + + cmd = f'{api_info["command"]} {command_input}' + result = eval(remote_cmd.cmd_exec(cmd)) except Exception: print(traceback.format_exc()) return result - \ No newline at end of file + \ No newline at end of file From 1fb8c79bd84ef588804c534587aa9eae171c7e10 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 13:52:41 +0900 Subject: [PATCH 023/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20updateCatego?= =?UTF-8?q?ry=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateCategory.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index fed2326d..a7eefd70 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -2,10 +2,23 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel -''' -''' -def api() -> Dict: + +class UpdateCategory(BaseModel): + parent_id: str + node_id: str + node_name: str + + +# todo: 수정 필요 +def api(update:UpdateCategory) -> Dict: db = connect_db(config.db_type, config.db_info) + query = f'UPDATE tb_biz_meta_name\ + SET kor_name = {convert_data(update.parent_id)},\ + eng_name = {convert_data(update.node_id)},\ + show_order = {convert_data(update.node_name)}\ + WHERE name_id = {convert_data(update.node_id)};'\ - return {"API_NAME" : "TEST"} \ No newline at end of file + db.execute(query) + return {"result" : "", "errorMessage" : ""} \ No newline at end of file From 0465d2541574f53548f3baf71645974a8c699afb Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 14:07:56 +0900 Subject: [PATCH 024/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20column=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateCategory.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index a7eefd70..c8bef3d1 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -15,9 +15,9 @@ class UpdateCategory(BaseModel): def api(update:UpdateCategory) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'UPDATE tb_biz_meta_name\ - SET kor_name = {convert_data(update.parent_id)},\ - eng_name = {convert_data(update.node_id)},\ - show_order = {convert_data(update.node_name)}\ + SET parent_id = {convert_data(update.parent_id)},\ + node_id = {convert_data(update.node_id)},\ + node_name = {convert_data(update.node_name)}\ WHERE name_id = {convert_data(update.node_id)};'\ db.execute(query) From 86ddf0063aa3c6c2211828159bf8f79ad92bd53a Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 4 May 2022 14:26:01 +0900 Subject: [PATCH 025/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=20=EB=B0=8F=20=EC=B6=9C=EB=A0=A5=20=EC=88=9C=EC=84=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 18 +----------------- API-SERVICE/ApiList/meta/useMetaNameList.py | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index ade2f7d8..c6f214bd 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -3,21 +3,6 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -''' - - -''' def api() -> Dict: db = connect_db(config.db_type, config.db_info) @@ -34,9 +19,8 @@ def api() -> Dict: order by biz_dataset_id; """ bizmeta_list = db.select(meta_name_query) - print(bizmeta_list) v_meta_map_query = "SELECT kor_name,eng_name,name_id FROM tb_biz_meta_name;" v_meta_map = db.select(v_meta_map_query) - return {"result" : "", "errorMessage" : "", "data": {"body": bizmeta_list[0],"header":v_meta_map_query[0]}} \ No newline at end of file + return {"result" : "", "errorMessage" : "", "data": {"body": bizmeta_list[0],"header":v_meta_map[0]}} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index af4543e1..383ef41e 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -6,7 +6,23 @@ def api() -> Dict: db = connect_db(config.db_type, config.db_info) - meta_name_query = "SELECT * FROM tb_biz_meta_name;" + meta_name_query = """ + select + case + when (select tbmm.name_id from tb_biz_meta_map tbmm where tbmn.name_id = tbmm.name_id) is null then 0 + else 1 + end as use_meta, + tbmn.kor_name, + tbmn.eng_name, + tbmn.show_order, + case + when tbmn.type = 0 then 'text' + when tbmn.type = 1 then 'int' + when tbmn.type = 2 then 'binary' + end as type, + tbmn.name_id + from tb_biz_meta_name tbmn + order by tbmn.name_id;""" meta_name = db.select(meta_name_query) return {"result" : "", "errorMessage" : "", "data": {"body": meta_name[0]}} \ No newline at end of file From 96b095929f976fee4ef09103663446ef939c4efb Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 4 May 2022 14:52:16 +0900 Subject: [PATCH 026/236] =?UTF-8?q?feat:=20requirements.txt=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..74562d67 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +fastapi==0.75.2 +uvicorn==0.16.0 +paramiko==2.10.3 +psycopg2==2.8.6 +requests==2.27.1 +loguru==0.5.3 From 07685007c185b28160b751a5e48653fd1fc66ba7 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Fri, 6 May 2022 08:27:10 +0900 Subject: [PATCH 027/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20updateCategor?= =?UTF-8?q?y=20=EB=AA=A8=EB=93=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateCategory.py | 25 +++++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index c8bef3d1..39eda45b 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,4 +1,4 @@ -from typing import Dict +from typing import Dict, Optional from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data @@ -6,19 +6,28 @@ class UpdateCategory(BaseModel): - parent_id: str - node_id: str + parent_id: Optional[str] = None + node_id: Optional[str] = None node_name: str # todo: 수정 필요 def api(update:UpdateCategory) -> Dict: db = connect_db(config.db_type, config.db_info) - query = f'UPDATE tb_biz_meta_name\ - SET parent_id = {convert_data(update.parent_id)},\ - node_id = {convert_data(update.node_id)},\ - node_name = {convert_data(update.node_name)}\ - WHERE name_id = {convert_data(update.node_id)};'\ + + if update.node_id: + query = f'UPDATE tb_biz_meta_name\ + SET parent_id = {convert_data(update.parent_id)},\ + node_id = {convert_data(update.node_id)},\ + node_name = {convert_data(update.node_name)}\ + WHERE node_id = {convert_data(update.node_id)};' + else: + query = f'UPDATE tb_biz_meta_name\ + SET parent_id = {convert_data(update.parent_id)},\ + node_id = {convert_data(update.node_id)},\ + node_name = {convert_data(update.node_name)}\ + WHERE parent_id = {convert_data(update.parent_id)} and \ + node_name = {convert_data(update.node_name)};' db.execute(query) return {"result" : "", "errorMessage" : ""} \ No newline at end of file From db587b600d381c89706fc87afb3e5e08e4c2fe48 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Fri, 6 May 2022 10:12:04 +0900 Subject: [PATCH 028/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20addChildCate?= =?UTF-8?q?gory=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 21 ++++++++++++++++++++ API-SERVICE/conf/api_config.ini | 5 +++++ 2 files changed, 26 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/addChildCategory.py diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py new file mode 100644 index 00000000..ee08f6c5 --- /dev/null +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -0,0 +1,21 @@ +import uuid +from typing import Dict, Optional +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class addChildCategory(BaseModel): + parent_id: str + node_name: str + + +# todo: 수정 필요 +def api(update:addChildCategory) -> Dict: + db = connect_db(config.db_type, config.db_info) + query = f'INSERT INTO tb_category (node_name, parent_id, node_id)\ + VALUES ({convert_data(update.node_name)},{convert_data(update.parent_id)},{convert_data(uuid.uuid4())});' + + db.execute(query) + return {"result" : "", "errorMessage" : ""} \ No newline at end of file diff --git a/API-SERVICE/conf/api_config.ini b/API-SERVICE/conf/api_config.ini index 178d44f3..034f1ac0 100644 --- a/API-SERVICE/conf/api_config.ini +++ b/API-SERVICE/conf/api_config.ini @@ -62,3 +62,8 @@ sub_dir = meta method = PUT, POST url_prefix = /api sub_dir = meta + +[addChildCategory] +method = POST +url_prefix = /api +sub_dir = meta \ No newline at end of file From 6100d11a4534d0ffc15d4d905856301857760c78 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Fri, 6 May 2022 10:12:37 +0900 Subject: [PATCH 029/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20insertBizMeta?= =?UTF-8?q?=20update=20qury=EC=97=90=EC=84=9C=20insert=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertBizMeta.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index 5f8e076a..f6525488 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -5,15 +5,13 @@ from Utils.DataBaseUtil import convert_data -def api() -> Dict: +def api(biz_meta_list:list) -> Dict: db = connect_db(config.db_type, config.db_info) - query = "SELECT biz_dataset_id FROM tb_biz_meta;" - biz_meta_list = db.select(query)[0] - + uid = uuid.uuid4() for biz_meta in biz_meta_list: - query = f'UPDATE tb_biz_meta\ - SET biz_dataset_id = ({convert_data(uuid.uuid4())})\ - WHERE biz_dataset_id = {convert_data(biz_meta["biz_dataset_id"])};' + query = f'INSERT INTO tb_biz_meta (biz_dataset_id,item_id,item_val)\ + VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' + db.execute(query) query = "SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;" From 1c8e58f8ff644ebc6627eed4740cc0977b66a5c4 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Fri, 6 May 2022 10:13:12 +0900 Subject: [PATCH 030/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20updateBizMeta?= =?UTF-8?q?=20query=20table=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateBizMeta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index 0027ea9b..f9e692e5 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -13,7 +13,7 @@ class UpdateBizMeta(BaseModel): def api(update: UpdateBizMeta) -> Dict: db = connect_db(config.db_type, config.db_info) for data in update.dataList: - query = f'UPDATE lum_test\ + query = f'UPDATE tb_biz_meta\ SET item_id = {convert_data(data["itemId"])},\ item_val = {convert_data(data["itemVal"])}\ WHERE biz_dataset_id = {convert_data(update.bizDatasetId)} AND \ From 64b29494ed11610640a90d678163231a15213173 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Fri, 6 May 2022 10:13:38 +0900 Subject: [PATCH 031/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20addChildCateg?= =?UTF-8?q?ory=20=EA=B8=B0=EB=8A=A5=EA=B3=BC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateCategory.py | 23 +++++++--------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 39eda45b..348235eb 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,3 +1,4 @@ +import uuid from typing import Dict, Optional from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db @@ -6,28 +7,18 @@ class UpdateCategory(BaseModel): - parent_id: Optional[str] = None - node_id: Optional[str] = None + node_id: str node_name: str # todo: 수정 필요 def api(update:UpdateCategory) -> Dict: db = connect_db(config.db_type, config.db_info) - - if update.node_id: - query = f'UPDATE tb_biz_meta_name\ - SET parent_id = {convert_data(update.parent_id)},\ - node_id = {convert_data(update.node_id)},\ - node_name = {convert_data(update.node_name)}\ - WHERE node_id = {convert_data(update.node_id)};' - else: - query = f'UPDATE tb_biz_meta_name\ - SET parent_id = {convert_data(update.parent_id)},\ - node_id = {convert_data(update.node_id)},\ - node_name = {convert_data(update.node_name)}\ - WHERE parent_id = {convert_data(update.parent_id)} and \ - node_name = {convert_data(update.node_name)};' + query = f'UPDATE tb_category\ + SET parent_id = {convert_data(uuid.uuid4())},\ + node_id = {convert_data(update.node_id)},\ + node_name = {convert_data(update.node_name)}\ + WHERE node_id = {convert_data(update.node_id)};' db.execute(query) return {"result" : "", "errorMessage" : ""} \ No newline at end of file From 5b5f8958473076c79af99523d5b590bf6f47edcb Mon Sep 17 00:00:00 2001 From: lum0380 Date: Fri, 6 May 2022 10:13:56 +0900 Subject: [PATCH 032/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20request=20?= =?UTF-8?q?=ED=98=95=ED=83=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/useMetaNameList.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 383ef41e..9e5d2e67 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -25,4 +25,4 @@ def api() -> Dict: order by tbmn.name_id;""" meta_name = db.select(meta_name_query) - return {"result" : "", "errorMessage" : "", "data": {"body": meta_name[0]}} \ No newline at end of file + return {"result" : "", "errorMessage" : "", "data": meta_name[0]} \ No newline at end of file From c0b4214fbed2e2858500dbbe45ddd4922dd06386 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Mon, 9 May 2022 11:13:12 +0900 Subject: [PATCH 033/236] =?UTF-8?q?[AIPLATFORM-225]=20chore:=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85,=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 4 ++-- .../ApiList/meta/{getMetaName.py => getMetaNameDetail.py} | 0 API-SERVICE/conf/api_config.ini | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename API-SERVICE/ApiList/meta/{getMetaName.py => getMetaNameDetail.py} (100%) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index ee08f6c5..c23fa18a 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -12,10 +12,10 @@ class addChildCategory(BaseModel): # todo: 수정 필요 -def api(update:addChildCategory) -> Dict: +def api(insert:addChildCategory) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'INSERT INTO tb_category (node_name, parent_id, node_id)\ - VALUES ({convert_data(update.node_name)},{convert_data(update.parent_id)},{convert_data(uuid.uuid4())});' + VALUES ({convert_data(insert.node_name)},{convert_data(insert.parent_id)},{convert_data(uuid.uuid4())});' db.execute(query) return {"result" : "", "errorMessage" : ""} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/getMetaName.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py similarity index 100% rename from API-SERVICE/ApiList/meta/getMetaName.py rename to API-SERVICE/ApiList/meta/getMetaNameDetail.py diff --git a/API-SERVICE/conf/api_config.ini b/API-SERVICE/conf/api_config.ini index 034f1ac0..99af7001 100644 --- a/API-SERVICE/conf/api_config.ini +++ b/API-SERVICE/conf/api_config.ini @@ -3,7 +3,7 @@ method = GET url_prefix = /api sub_dir = meta -[getMetaName] +[getMetaNameDetail] method = GET url_prefix = /api sub_dir = meta @@ -59,7 +59,7 @@ url_prefix = /api sub_dir = meta [updateCategory] -method = PUT, POST +method = PUT url_prefix = /api sub_dir = meta From 343e2393aac8d3610fa735e48942b897d34eb992 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Mon, 9 May 2022 11:15:31 +0900 Subject: [PATCH 034/236] =?UTF-8?q?[AIPLATFORM-225]=20fix:=20table=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD,=20=EB=B3=80=EC=88=98=EB=AA=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 6 +++--- API-SERVICE/ApiList/meta/getBizMetaList.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index e387ab4a..de0f4094 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -23,7 +23,7 @@ def api(data_set_id:str) -> Dict: order by biz_dataset_id;' biz_meta_detail = db.select(query) - v_meta_map_query = "SELECT kor_name,eng_name,name_id FROM tb_biz_meta_name;" - v_meta_map = db.select(v_meta_map_query) + v_meta_name_query = "SELECT * FROM v_biz_meta_name;" + v_meta_name = db.select(v_meta_name_query) - return {"result" : "", "errorMessage" : "", "data": {"body": biz_meta_detail[0],"header":v_meta_map[0]}} \ No newline at end of file + return {"result" : "", "errorMessage" : "", "data": {"body": biz_meta_detail[0],"header":v_meta_name[0]}} \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index c6f214bd..7068c31d 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -20,7 +20,7 @@ def api() -> Dict: """ bizmeta_list = db.select(meta_name_query) - v_meta_map_query = "SELECT kor_name,eng_name,name_id FROM tb_biz_meta_name;" - v_meta_map = db.select(v_meta_map_query) + v_meta_name_query = "SELECT * FROM v_biz_meta_name;" + v_meta_name = db.select(v_meta_name_query) - return {"result" : "", "errorMessage" : "", "data": {"body": bizmeta_list[0],"header":v_meta_map[0]}} \ No newline at end of file + return {"result" : "", "errorMessage" : "", "data": {"body": bizmeta_list[0],"header":v_meta_name[0]}} \ No newline at end of file From 09080285429b880debabedd08a58b3c86ffbe1bd Mon Sep 17 00:00:00 2001 From: lum0380 Date: Mon, 9 May 2022 11:15:53 +0900 Subject: [PATCH 035/236] =?UTF-8?q?[AIPLATFORM-225]=20feat:=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=95=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/metaNameList.py | 27 +++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index b47cf26c..8b4e9adb 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -2,11 +2,32 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data -def api() -> Dict: +def api(perPage:int, curPage:int) -> Dict: db = connect_db(config.db_type, config.db_info) - - meta_name_query = "SELECT * FROM tb_biz_meta_name;" + + curPage = curPage - 1 + meta_name_query = f""" + select * + from metasch.tb_biz_meta_name as p + join (SELECT kor_name, + eng_name, + show_order, + name_id, + (case + when type = 0 then 'text' + when type = 1 then 'int' + when type = 2 then 'binary' + end + ) as type, + ROW_NUMBER () OVER (ORDER BY name_id DESC) as rowNo + FROM tb_biz_meta_name + order by name_id + limit {perPage} + offset ({perPage} * {curPage}) + ) as t on p.name_id = t.name_id + """ meta_name = db.select(meta_name_query) v_meta_name_query = "SELECT * FROM v_biz_meta_name;" From 69674b15d6f39906c3870e1a54c6c4b8b952dca6 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Mon, 9 May 2022 13:45:57 +0900 Subject: [PATCH 036/236] =?UTF-8?q?[AIPLATFORM-225]=20chore:=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95,=20import=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 4 ++-- API-SERVICE/ApiList/meta/metaNameList.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 6faa6750..df92f8bd 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -3,10 +3,10 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -def api(name_id:str) -> Dict: +def api(nameId:str) -> Dict: db = connect_db(config.db_type, config.db_info) - query = f'SELECT * FROM tb_biz_meta_name WHERE name_id = {convert_data(name_id)}' + query = f'SELECT * FROM tb_biz_meta_name WHERE name_id = {convert_data(nameId)}' meta_name = db.select(query) diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 8b4e9adb..42c19aa1 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -2,7 +2,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db -from Utils.DataBaseUtil import convert_data def api(perPage:int, curPage:int) -> Dict: db = connect_db(config.db_type, config.db_info) From 4e0bd03901809da2cd2cf47d089cfd43cbadfc60 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 9 May 2022 14:44:16 +0900 Subject: [PATCH 037/236] =?UTF-8?q?feat:=20logger=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-227 --- API-ROUTER/ApiList/{ => service}/TEST_1.py | 0 API-ROUTER/ApiList/{ => service}/TEST_2.py | 0 API-ROUTER/ApiRoute/ApiRoute.py | 228 +++++++++----------- API-ROUTER/ApiRoute/ApiRouteConfig.py | 30 +-- API-ROUTER/ConnectManager/PostgreManager.py | 21 +- API-ROUTER/ConnectManager/RemoteCmd.py | 1 + API-ROUTER/Utils/CommonUtil.py | 54 +++-- API-ROUTER/Utils/DataBaseUtil.py | 6 +- API-ROUTER/Utils/RouteUtil.py | 69 ++++++ API-ROUTER/Utils/__init__.py | 3 +- API-ROUTER/conf/config.ini | 3 + API-ROUTER/conf/logging.conf | 15 +- API-ROUTER/server.py | 10 +- 13 files changed, 233 insertions(+), 207 deletions(-) rename API-ROUTER/ApiList/{ => service}/TEST_1.py (100%) rename API-ROUTER/ApiList/{ => service}/TEST_2.py (100%) create mode 100644 API-ROUTER/Utils/RouteUtil.py diff --git a/API-ROUTER/ApiList/TEST_1.py b/API-ROUTER/ApiList/service/TEST_1.py similarity index 100% rename from API-ROUTER/ApiList/TEST_1.py rename to API-ROUTER/ApiList/service/TEST_1.py diff --git a/API-ROUTER/ApiList/TEST_2.py b/API-ROUTER/ApiList/service/TEST_2.py similarity index 100% rename from API-ROUTER/ApiList/TEST_2.py rename to API-ROUTER/ApiList/service/TEST_2.py diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 2942990f..102cfe2e 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -1,17 +1,14 @@ -import logging +from fastapi.logger import logger from typing import Dict, List import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config -from ConnectManager import RemoteCmd from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, convert_url, make_res_msg, save_file_for_reload +from Utils.CommonUtil import connect_db, make_res_msg, save_file_for_reload +from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request -import requests -import traceback -#logger = logging.getLogger() class ApiParam(BaseModel): api_name: str @@ -19,6 +16,7 @@ class ApiParam(BaseModel): data_type: str default_value: str + class ApiInfo(BaseModel): api_name: str category: str @@ -29,162 +27,142 @@ class ApiInfo(BaseModel): bypass: str params: List[ApiParam] + class ApiRoute: def __init__(self) -> None: self.router = APIRouter() self.set_route() def set_route(self) -> None: - self.router.add_api_route("/api/getApiList", self.get_api_list, methods=["GET"]) + self.router.add_api_route( + "/api/getApiList", self.get_api_list, methods=["GET"]) self.router.add_api_route("/api/getApi", self.get_api, methods=["GET"]) - self.router.add_api_route("/api/setApi", self.set_api, methods=["POST"]) - self.router.add_api_route("/api/delApi", self.del_api, methods=["POST"]) + self.router.add_api_route( + "/api/setApi", self.set_api, methods=["POST"]) + self.router.add_api_route( + "/api/delApi", self.del_api, methods=["POST"]) db = connect_db(config.db_type, config.db_info) api_info, _ = db.select('SELECT * FROM api_info;') - + for api in api_info: - self.router.add_api_route(f'/route/{api["api_name"]}', self.route_api, methods=[api["method"]], tags=["route"]) - + self.router.add_api_route( + f'/route/{api["api_name"]}', self.route_api, methods=[api["method"]], tags=["route"]) + for api_name, api_info in config.api_config.items(): - module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_name}.py' + module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_info["sub_dir"]}/{api_name}.py' module_name = "api" - spec = importlib.util.spec_from_file_location(module_name, module_path) + spec = importlib.util.spec_from_file_location( + module_name, module_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) - + self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', + module.api, methods=[api_info["method"]], tags=["service"]) def get_api_list(self) -> Dict: api_info_query = f'SELECT * FROM api_info;' api_params_query = f'SELECT * FROM api_params;' - - db = connect_db(config.db_type, config.db_info) + try: + db = connect_db(config.db_type, config.db_info) + + api_info, column_names = db.select(api_info_query) + api_params, column_names = db.select(api_params_query) + except Exception as err: + # make error response + logger.error(err) + else: + api_info = make_res_msg("", "", api_info, column_names) + api_params = make_res_msg("", "", api_params, column_names) - api_info, column_names = db.select(api_info_query) - api_info = make_res_msg("", "", api_info, column_names) - - api_params, column_names = db.select(api_params_query) - api_params = make_res_msg("", "", api_params, column_names) + return {"api_info": api_info, "api_params": api_params} - return {"api_info" : api_info, "api_params" : api_params} - - - def get_api(self, api_name:str) -> Dict: + def get_api(self, api_name: str) -> Dict: api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' + try: + db = connect_db(config.db_type, config.db_info) + api_info, column_names = db.select(api_info_query) + api_params, column_names = db.select(api_params_query) + except Exception as err: + # make error response + logger.error(err) + else: + api_info = make_res_msg("", "", api_info, column_names) + api_params = make_res_msg("", "", api_params, column_names) + + return {"api_info": api_info, "api_params": api_params} + + def set_api(self, api_info: ApiInfo) -> Dict: + try: + db = connect_db(config.db_type, config.db_info) + + insert_api_info = {} + insert_api_params = [] + for key, value in api_info.__dict__.items(): + if key == "params": + for param in value: + insert_api_params.append(param.__dict__) + else: + insert_api_info[key] = value - db = connect_db(config.db_type, config.db_info) - - api_info, column_names = db.select(api_info_query) - api_info = make_res_msg("", "", api_info, column_names) - - api_params, column_names = db.select(api_params_query) - api_params = make_res_msg("", "", api_params, column_names) - - return {"api_info" : api_info, "api_params" : api_params} - - - def set_api(self, api_info:ApiInfo) -> Dict: - db = connect_db(config.db_type, config.db_info) - - insert_api_info = {} - insert_api_params = [] - for key, value in api_info.__dict__.items(): - if key == "params": - for param in value: - insert_api_params.append(param.__dict__) - else: - insert_api_info[key] = value - - db.insert("api_info", [insert_api_info]) + db.insert("api_info", [insert_api_info]) - if len(insert_api_params) != 0: - db.insert("api_params", insert_api_params) - - save_file_for_reload() - - return {"API_NAME : set_api"} + if len(insert_api_params) != 0: + db.insert("api_params", insert_api_params) + except Exception as err: + # make error response + logger.error(err) + else: + save_file_for_reload() - def del_api(self, api_name:str) -> Dict: - db = connect_db(config.db_type, config.db_info) + return {"API_NAME : set_api"} - db.delete("api_info", {"api_name" : api_name}) - db.delete("api_params", {"api_name" : api_name}) + def del_api(self, api_name: str) -> Dict: + try: + db = connect_db(config.db_type, config.db_info) - save_file_for_reload() + db.delete("api_info", {"api_name": api_name}) + db.delete("api_params", {"api_name": api_name}) + except Exception as err: + # make error response + logger.error(err) + else: + save_file_for_reload() return {"API_NAME : del_api"} - async def route_api(self, request:Request) -> Dict: - result = None - try: - api_name = request.url.path.split("/")[-1] - method = request.method - api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' - api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' + async def route_api(self, request: Request) -> Dict: + api_name = request.url.path.split("/")[-1] + method = request.method + api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' + api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' - print(f'api_name : {api_name}') - print(f'method : {method}') + logger.debug(f'API Name : {api_name}, Method : {method}') - db = connect_db(config.db_type, config.db_info) + try: + db = connect_db(config.db_type, config.db_info) api_info, _ = db.select(api_info_query) api_params, _ = db.select(api_params_query) - + except Exception as err: + # make error response + logger.error(err) + else: if len(api_info) == 0: - return {"result" : 0, "errorMessage" : "This is an unregistered API."} - + return {"result": 0, "errorMessage": "This is an unregistered API."} + api_info = api_info[0] msg_type = api_info["msg_type"] - - #send API-SERVICE + + body = None + if msg_type == "JSON": + body = await request.json() + elif msg_type == "BINARY": + body = await request.form() + + params_query = str(request.query_params) if api_info["bypass"] == "ON": - method = api_info["method"] - url = convert_url(api_info["url"]) - - if method == "GET": - params_query = request.query_params - params_query = str(params_query) - params = {} - if len(params_query) != 0: - for param in params_query.split("&"): - parser_param = param.split("=") - params[parser_param[0]] = parser_param[1] - response = requests.get(url, params=params) - elif method == "POST": - if msg_type == "JSON": - body = await request.json() - response = requests.post(url, json=body) - else: - body = await request.form() - response = requests.post(url, data=body) - elif method == "PUT": - if msg_type == "JSON": - body = await request.json() - response = requests.put(url, json=body) - else: - body = await request.form() - response = requests.put(url, data=body) - else: - print("Method Not Allowed.") - result = response.json() - else: # bypass "OFF" - call REMOTE FUNCTION - remote_cmd = RemoteCmd(config.remote_info["host"], config.remote_info["port"], config.remote_info["id"], config.remote_info["password"]) - command_input = "" - if msg_type == "JSON": - input_params = await request.json() - for param in api_params: - try: - data = input_params[param["param_name"]] - command_input += f' --{param["param_name"]} {data}' - except KeyError: - print(f'parameter set default value. [{param["param_name"]}]') - command_input += f' --{param["param_name"]} {param["default_value"]}' - - cmd = f'{api_info["command"]} {command_input}' - result = eval(remote_cmd.cmd_exec(cmd)) - except Exception: - print(traceback.format_exc()) + result = bypass_msg(api_info, params_query, body) + else: + result = call_remote_func(api_info, api_params, body) + return result - - \ No newline at end of file diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index 18343077..da66a53b 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -1,18 +1,18 @@ -from starlette import routing from typing import Dict, List + class ApiRouteConfig: - root_path : str - - db_type : str - db_info : Dict - - remote_info : Dict - - server_host : str - server_port : int - - api_config : Dict - - -config = ApiRouteConfig \ No newline at end of file + root_path: str + + db_type: str + db_info: Dict + + remote_info: Dict + + server_host: str + server_port: int + + api_config: Dict + + +config = ApiRouteConfig diff --git a/API-ROUTER/ConnectManager/PostgreManager.py b/API-ROUTER/ConnectManager/PostgreManager.py index e7c64191..e6461fcf 100644 --- a/API-ROUTER/ConnectManager/PostgreManager.py +++ b/API-ROUTER/ConnectManager/PostgreManager.py @@ -1,10 +1,8 @@ -import logging -from typing import List, Dict import psycopg2 - +from typing import List, Dict +from fastapi.logger import logger from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query -#logger = logging.getLogger() class PostgreManager: def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: @@ -21,14 +19,12 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - print("PostgreManager Connect.") + logger.debug("PostgreManager Connect.") return conn def execute(self, sql: str) -> None: - print(sql) - result = self.cursor.execute(sql) + self.cursor.execute(sql) self.conn.commit() - #print(f'PostgreManager Execute Result. (row count : {result})') def select(self, sql: str, count: int = None) -> List[Dict]: self.execute(sql) @@ -37,7 +33,7 @@ def select(self, sql: str, count: int = None) -> List[Dict]: rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - print(f'PostgreManager Select Execute. ({sql})') + logger.debug(f'PostgreManager Select Execute. ({sql})') result = [] for row in rows: @@ -47,18 +43,17 @@ def select(self, sql: str, count: int = None) -> List[Dict]: def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - print(f'PostgreManager Insert Execute. ({sql})') + logger.debug(f'PostgreManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - print(f'PostgreManager Update Execute. ({sql})') + logger.debug(f'PostgreManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - - print(f'PostgreManager Delete Execute. ({sql})') + logger.debug(f'PostgreManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-ROUTER/ConnectManager/RemoteCmd.py b/API-ROUTER/ConnectManager/RemoteCmd.py index 23c0ee53..ac4c7ba2 100644 --- a/API-ROUTER/ConnectManager/RemoteCmd.py +++ b/API-ROUTER/ConnectManager/RemoteCmd.py @@ -1,4 +1,5 @@ import paramiko +from fastapi.logger import logger class RemoteCmd: diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 400582c9..f07b69dd 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -1,16 +1,16 @@ import os import configparser import argparse -import re -import logging +from fastapi.logger import logger from pathlib import Path from typing import Any from ApiRoute.ApiRouteConfig import config from ConnectManager import PostgreManager +from retry import retry +import psycopg2 -#logger = logging.getLogger() -def get_config(root_path:str, config_name:str): +def get_config(root_path: str, config_name: str): ano_cfg = {} config = configparser.ConfigParser() @@ -23,14 +23,16 @@ def get_config(root_path:str, config_name:str): return ano_cfg + def parser_params() -> Any: parser = argparse.ArgumentParser() parser.add_argument("--host", type=str, default="127.0.0.1") parser.add_argument("--port", type=int, default=18000) parser.add_argument("--db_type", default="postgresql") - + return parser.parse_args() + def prepare_config() -> None: args = parser_params() config.root_path = Path(os.getcwd()).parent @@ -43,41 +45,33 @@ def prepare_config() -> None: config.db_info = api_router_cfg[config.db_type] config.remote_info = api_router_cfg["remote"] + +@retry(psycopg2.OperationalError, delay=1, tries=3) def connect_db(db_type, db_info): if db_type == "postgresql": - db = PostgreManager.PostgreManager(host=db_info["host"], port=db_info["port"], - user=db_info["user"], password=db_info["password"], - database=db_info["database"], schema=db_info["schema"]) + db = PostgreManager(host=db_info["host"], port=db_info["port"], + user=db_info["user"], password=db_info["password"], + database=db_info["database"], schema=db_info["schema"]) else: - print(f"Not Implemented. {db_type}") + raise Exception(f'Not Implemented. ({db_type})') return db + def save_file_for_reload(): with open(__file__, "a") as fd: fd.write(" ") -def make_res_msg(result, errorMessage, data=None, column_names=None): + +def make_res_msg(result, errorMessage, data=None, column_names=None): header_list = [] for column_name in column_names: - header = {"column_name" : column_name} - header_list.append(header) - + header = {"column_name": column_name} + header_list.append(header) + result = None if data == None or column_names == None: - result = {"result" : result, "errorMessage" : errorMessage} - else: - result = {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} - return result - -def convert_url(url:str) -> str: - regex = "(?<=\$).*(?=\$)" - - result = re.compile(regex).search(url) - if result != None: - try: - sub_data = config.url_info[result.group()] - url = url.replace(f'${result.group()}$', sub_data) - except KeyError: - url = None - - return url \ No newline at end of file + result = {"result": result, "errorMessage": errorMessage} + else: + result = {"result": result, "errorMessage": errorMessage, + "body": data, "header": header_list} + return result diff --git a/API-ROUTER/Utils/DataBaseUtil.py b/API-ROUTER/Utils/DataBaseUtil.py index 8ac48edc..a19a3942 100644 --- a/API-ROUTER/Utils/DataBaseUtil.py +++ b/API-ROUTER/Utils/DataBaseUtil.py @@ -1,8 +1,6 @@ -import logging +from fastapi.logger import logger from typing import List, Dict -#logger = logging.getLogger() - def convert_data(data) -> str: return f'\'{str(data)}\'' @@ -35,5 +33,3 @@ def make_delete_query(table, where_info: Dict) -> str: f'{column} = {convert_data(value)}' for column, value in where_info.items()] sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' return sql - - diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py new file mode 100644 index 00000000..0a27559b --- /dev/null +++ b/API-ROUTER/Utils/RouteUtil.py @@ -0,0 +1,69 @@ +import requests +import re +from fastapi.logger import logger +from ApiRoute.ApiRouteConfig import config +from ConnectManager import RemoteCmd + + +def convert_url(url: str) -> str: + regex = "(?<=\$).*(?=\$)" + + result = re.compile(regex).search(url) + if result != None: + try: + sub_data = config.url_info[result.group()] + except KeyError: + logger.error(f'The key does not exist. {result.group()}') + url = None + else: + url = url.replace(f'${result.group()}$', sub_data) + + return url + + +def bypass_msg(api_info, params_query, body): + method = api_info["method"] + url = convert_url(api_info["url"]) + msg_type = api_info["msg_type"] + + if method == "GET": + params = {} + if len(params_query) != 0: + for param in params_query.split("&"): + parser_param = param.split("=") + params[parser_param[0]] = parser_param[1] + response = requests.get(url, params=params) + elif method == "POST": + if msg_type == "JSON": + response = requests.post(url, json=body) + else: + response = requests.post(url, data=body) + elif method == "PUT": + if msg_type == "JSON": + response = requests.put(url, json=body) + else: + response = requests.put(url, data=body) + else: + logger.error("Method Not Allowed.") + return response.json() + + +def call_remote_func(api_info, api_params, input_params): + msg_type = api_info["msg_type"] + + remote_cmd = RemoteCmd( + config.remote_info["host"], config.remote_info["port"], config.remote_info["id"], config.remote_info["password"]) + command_input = "" + if msg_type == "JSON": + for param in api_params: + try: + data = input_params[param["param_name"]] + command_input += f' --{param["param_name"]} {data}' + except KeyError: + print( + f'parameter set default value. [{param["param_name"]}]') + command_input += f' --{param["param_name"]} {param["default_value"]}' + + cmd = f'{api_info["command"]} {command_input}' + result = eval(remote_cmd.cmd_exec(cmd)) + return result diff --git a/API-ROUTER/Utils/__init__.py b/API-ROUTER/Utils/__init__.py index 71791818..25cfbf49 100644 --- a/API-ROUTER/Utils/__init__.py +++ b/API-ROUTER/Utils/__init__.py @@ -1,2 +1,3 @@ from .CommonUtil import * -from .DataBaseUtil import * \ No newline at end of file +from .DataBaseUtil import * +from .RouteUtil import * diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 29e09b06..dc5b7d6d 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -12,5 +12,8 @@ password = dhub.12# database = dhub schema = api +[mariadb] + + [url_info] web_service = 127.0.0.1:19000 \ No newline at end of file diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf index d4c04f8f..024db4ae 100644 --- a/API-ROUTER/conf/logging.conf +++ b/API-ROUTER/conf/logging.conf @@ -2,7 +2,7 @@ keys=root [logger_root] -level=INFO +level=DEBUG handlers=console,rotatingFileHandler [formatters] @@ -12,25 +12,20 @@ keys=default format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s [handlers] -keys=console,file,rotatingFileHandler +keys=console,rotatingFileHandler [handler_console] class=StreamHandler args=(sys.stdout,) formatter=default -level=INFO +level=DEBUG [handler_rotatingFileHandler] class=handlers.RotatingFileHandler formatter=default -args=('API-ROUTER/log/API-Router.log', 'a', 20000000, 10) -level=INFO +args=('log/API-Router.log', 'a', 20000000, 10) +level=DEBUG -[handler_file] -class=FileHandler -args=("API-ROUTER/log/API-Router.log",) -formatter=default -level=INFO diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index 69b1ad31..c2a0e21a 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -1,20 +1,14 @@ -import os -import logging -import logging.config -import traceback from fastapi import FastAPI import uvicorn from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import prepare_config from ApiRoute import ApiRoute -import pdb prepare_config() -#logging.config.fileConfig(os.path.join(config.root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) -#logger = logging.getLogger() api_router = ApiRoute() app = FastAPI() app.include_router(api_router.router) if __name__ == '__main__': - uvicorn.run("server:app", host=config.server_host, port=config.server_port, reload=True) + uvicorn.run("server:app", host=config.server_host, port=config.server_port, + reload=True, log_config=f'{config.root_path}/API-ROUTER/conf/logging.conf') From 9e450cffa5f3fa20e695d1787fb4f6ed9c0e388b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 9 May 2022 15:30:25 +0900 Subject: [PATCH 038/236] =?UTF-8?q?feat:=20API-SERVICE=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-202 --- API-SERVICE/ApiList/meta/addChildCategory.py | 5 +-- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 10 +++--- API-SERVICE/ApiList/meta/getBizMetaList.py | 6 ++-- API-SERVICE/ApiList/meta/getCategoryList.py | 4 +-- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 6 ++-- API-SERVICE/ApiList/meta/insertBizMeta.py | 12 +++---- API-SERVICE/ApiList/meta/insertMetaMap.py | 22 ++++++------ API-SERVICE/ApiList/meta/insertMetaName.py | 8 +++-- API-SERVICE/ApiList/meta/metaMapList.py | 7 ++-- API-SERVICE/ApiList/meta/metaNameList.py | 9 ++--- API-SERVICE/ApiList/meta/updateBizMeta.py | 5 ++- API-SERVICE/ApiList/meta/updateCategory.py | 7 ++-- API-SERVICE/ApiList/meta/updateMetaName.py | 7 ++-- API-SERVICE/ApiList/meta/useMetaNameList.py | 4 +-- API-SERVICE/ApiService/ApiService.py | 7 +--- API-SERVICE/ApiService/ApiServiceConfig.py | 29 +++++++-------- API-SERVICE/ConnectManager/PostgreManager.py | 21 +++++------ API-SERVICE/Utils/CommonUtil.py | 35 +++++++++++-------- API-SERVICE/Utils/DataBaseUtil.py | 6 +--- API-SERVICE/conf/logging.conf | 16 +++------ API-SERVICE/server.py | 11 ++---- 21 files changed, 117 insertions(+), 120 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index c23fa18a..11d24a3b 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -4,6 +4,7 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel +from fastapi.logger import logger class addChildCategory(BaseModel): @@ -12,10 +13,10 @@ class addChildCategory(BaseModel): # todo: 수정 필요 -def api(insert:addChildCategory) -> Dict: +def api(insert: addChildCategory) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'INSERT INTO tb_category (node_name, parent_id, node_id)\ VALUES ({convert_data(insert.node_name)},{convert_data(insert.parent_id)},{convert_data(uuid.uuid4())});' db.execute(query) - return {"result" : "", "errorMessage" : ""} \ No newline at end of file + return {"result": "", "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index de0f4094..7ea6a707 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,11 +1,11 @@ -from dataclasses import replace -import re +from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -def api(data_set_id:str) -> Dict: + +def api(data_set_id: str) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'select T.biz_dataset_id as rowId,\ array_agg(T.kor_name) as kor_name,\ @@ -22,8 +22,8 @@ def api(data_set_id:str) -> Dict: group by biz_dataset_id\ order by biz_dataset_id;' biz_meta_detail = db.select(query) - + v_meta_name_query = "SELECT * FROM v_biz_meta_name;" v_meta_name = db.select(v_meta_name_query) - return {"result" : "", "errorMessage" : "", "data": {"body": biz_meta_detail[0],"header":v_meta_name[0]}} \ No newline at end of file + return {"result": "", "errorMessage": "", "data": {"body": biz_meta_detail[0], "header": v_meta_name[0]}} diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 7068c31d..0c7ed23e 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,7 +1,7 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db -from Utils.DataBaseUtil import convert_data +from fastapi.logger import logger def api() -> Dict: @@ -19,8 +19,8 @@ def api() -> Dict: order by biz_dataset_id; """ bizmeta_list = db.select(meta_name_query) - + v_meta_name_query = "SELECT * FROM v_biz_meta_name;" v_meta_name = db.select(v_meta_name_query) - return {"result" : "", "errorMessage" : "", "data": {"body": bizmeta_list[0],"header":v_meta_name[0]}} \ No newline at end of file + return {"result": "", "errorMessage": "", "data": {"body": bizmeta_list[0], "header": v_meta_name[0]}} diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 2b905f77..7f1d53e4 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -1,7 +1,7 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db -from Utils.DataBaseUtil import convert_data +from fastapi.logger import logger def api() -> Dict: @@ -10,4 +10,4 @@ def api() -> Dict: from metasch.tb_category \ order by parent_id, node_id;" category_list = db.select(category_query)[0] - return {"result" : "", "errorMessage" : "", "data": category_list} \ No newline at end of file + return {"result": "", "errorMessage": "", "data": category_list} diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index df92f8bd..906c9ce3 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -2,12 +2,14 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data +from fastapi.logger import logger -def api(nameId:str) -> Dict: + +def api(nameId: str) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'SELECT * FROM tb_biz_meta_name WHERE name_id = {convert_data(nameId)}' meta_name = db.select(query) - return {"result" : "", "errorMessage" : "", "data": meta_name[0][0]} \ No newline at end of file + return {"result": "", "errorMessage": "", "data": meta_name[0][0]} diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index f6525488..294199a3 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -3,19 +3,19 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data +from fastapi.logger import logger -def api(biz_meta_list:list) -> Dict: +def api(biz_meta_list: list) -> Dict: db = connect_db(config.db_type, config.db_info) uid = uuid.uuid4() - for biz_meta in biz_meta_list: + for biz_meta in biz_meta_list: query = f'INSERT INTO tb_biz_meta (biz_dataset_id,item_id,item_val)\ VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' - + db.execute(query) - + query = "SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;" biz_meta_list = db.select(query)[0] - - return biz_meta_list + return biz_meta_list diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 92ae35a2..c487606e 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -1,26 +1,26 @@ -from os import truncate +from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data - - + + def api() -> Dict: db = connect_db(config.db_type, config.db_info) - + truncate_query = "TRUNCATE tb_biz_meta_map;" db.execute(truncate_query) - + meta_name_query = "SELECT name_id FROM tb_biz_meta_name;" meta_name_list = db.select(meta_name_query)[0] - - for i,meta_name in enumerate(meta_name_list): + + for i, meta_name in enumerate(meta_name_list): query = f'INSERT INTO tb_biz_meta_map (item_id,name_id)\ VALUES ({convert_data(i + 1)},{convert_data(meta_name["name_id"])});' - db.execute(query) - + db.execute(query) + meta_map_query = "SELECT * FROM tb_biz_meta_map" meta_map_list = db.select(meta_map_query)[0] # 수정 해야함 - - return meta_map_list \ No newline at end of file + + return meta_map_list diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 4508a57a..a1a84802 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -1,10 +1,11 @@ from typing import Dict -from xmlrpc.client import boolean +from fastapi.logger import logger from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel + class InsertMetaName(BaseModel): subscribed: bool kor_name: str @@ -13,10 +14,11 @@ class InsertMetaName(BaseModel): name_id: str type: int -def api(insert:InsertMetaName) -> Dict: + +def api(insert: InsertMetaName) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'INSERT INTO tb_biz_meta_name (kor_name, eng_name, show_order, name_id, type)\ VALUES ({convert_data(insert.kor_name)}, {convert_data(insert.eng_name)}, {convert_data(insert.show_order)},\ (SELECT concat(\'i\', CAST(substring(max(name_id), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.type)});' db.execute(query) - return {"result" : "", "errorMessage" : ""} \ No newline at end of file + return {"result": "", "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index 10b4f3d5..489ada3f 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -1,16 +1,17 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from fastapi.logger import logger + def api() -> Dict: db = connect_db(config.db_type, config.db_info) meta_map_query = "SELECT tbmn.kor_name, tbmn.eng_name, tbmm.item_id, tbmm.name_id\ FROM tb_biz_meta_name tbmn\ - JOIN tb_biz_meta_map tbmm ON tbmn.name_id = tbmm.name_id";\ - + JOIN tb_biz_meta_map tbmm ON tbmn.name_id = tbmm.name_id" meta_map = db.select(meta_map_query) v_meta_map_query = "SELECT * FROM v_biz_meta_map;" v_meta_map = db.select(v_meta_map_query) - return {"result" : "", "errorMessage" : "", "data": {"body": meta_map[0], "header": v_meta_map[0]}} \ No newline at end of file + return {"result": "", "errorMessage": "", "data": {"body": meta_map[0], "header": v_meta_map[0]}} diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 42c19aa1..e2a01b80 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -1,11 +1,12 @@ -from select import select from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db +from fastapi.logger import logger -def api(perPage:int, curPage:int) -> Dict: + +def api(perPage: int, curPage: int) -> Dict: db = connect_db(config.db_type, config.db_info) - + curPage = curPage - 1 meta_name_query = f""" select * @@ -32,4 +33,4 @@ def api(perPage:int, curPage:int) -> Dict: v_meta_name_query = "SELECT * FROM v_biz_meta_name;" v_meta_name = db.select(v_meta_name_query) - return {"result" : "", "errorMessage" : "", "data": {"body": meta_name[0], "header": v_meta_name[0]}} \ No newline at end of file + return {"result": "", "errorMessage": "", "data": {"body": meta_name[0], "header": v_meta_name[0]}} diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index f9e692e5..d650c385 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -3,6 +3,7 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel +from fastapi.logger import logger class UpdateBizMeta(BaseModel): @@ -10,6 +11,8 @@ class UpdateBizMeta(BaseModel): dataList: list # todo: 질문 후 수정 필요 + + def api(update: UpdateBizMeta) -> Dict: db = connect_db(config.db_type, config.db_info) for data in update.dataList: @@ -20,4 +23,4 @@ def api(update: UpdateBizMeta) -> Dict: item_id = {convert_data(update.data["itemId"])};' db.execute(query) - return {"result" : "", "errorMessage" : ""} \ No newline at end of file + return {"result": "", "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 348235eb..a1d2afdc 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,9 +1,10 @@ import uuid -from typing import Dict, Optional from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel +from fastapi.logger import logger +from typing import Dict class UpdateCategory(BaseModel): @@ -12,7 +13,7 @@ class UpdateCategory(BaseModel): # todo: 수정 필요 -def api(update:UpdateCategory) -> Dict: +def api(update: UpdateCategory) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'UPDATE tb_category\ SET parent_id = {convert_data(uuid.uuid4())},\ @@ -21,4 +22,4 @@ def api(update:UpdateCategory) -> Dict: WHERE node_id = {convert_data(update.node_id)};' db.execute(query) - return {"result" : "", "errorMessage" : ""} \ No newline at end of file + return {"result": "", "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 6f613195..c71fb351 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -3,6 +3,8 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel +from fastapi.logger import logger + class UpdatetMetaName(BaseModel): subscribed: bool @@ -12,7 +14,8 @@ class UpdatetMetaName(BaseModel): name_id: str type: int -def api(update:UpdatetMetaName) -> Dict: + +def api(update: UpdatetMetaName) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'UPDATE tb_biz_meta_name\ SET kor_name = {convert_data(update.kor_name)},\ @@ -22,4 +25,4 @@ def api(update:UpdatetMetaName) -> Dict: WHERE name_id = {convert_data(update.name_id)};'\ db.execute(query) - return {"result" : "", "errorMessage" : ""} \ No newline at end of file + return {"result": "", "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 9e5d2e67..c793e869 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -1,7 +1,7 @@ from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db -from Utils.DataBaseUtil import convert_data +from fastapi.logger import logger def api() -> Dict: @@ -25,4 +25,4 @@ def api() -> Dict: order by tbmn.name_id;""" meta_name = db.select(meta_name_query) - return {"result" : "", "errorMessage" : "", "data": meta_name[0]} \ No newline at end of file + return {"result": "", "errorMessage": "", "data": meta_name[0]} diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index a1eff206..5318115e 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -1,12 +1,7 @@ -import logging -from typing import Dict, List import importlib.util +from fastapi.logger import logger from fastapi import APIRouter from ApiService.ApiServiceConfig import config -from Utils.DataBaseUtil import convert_data -import traceback - -#logger = logging.getLogger() class ApiService: def __init__(self) -> None: diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 7019a964..2de4d4f2 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -1,17 +1,18 @@ from typing import Dict, List + class ApiServiceConfig: - root_path : str - - db_type : str - db_info : Dict - - remote_info : Dict - - server_host : str - server_port : int - - api_config : Dict - - -config = ApiServiceConfig \ No newline at end of file + root_path: str + + db_type: str + db_info: Dict + + remote_info: Dict + + server_host: str + server_port: int + + api_config: Dict + + +config = ApiServiceConfig diff --git a/API-SERVICE/ConnectManager/PostgreManager.py b/API-SERVICE/ConnectManager/PostgreManager.py index 12d66e75..8f06b5e8 100644 --- a/API-SERVICE/ConnectManager/PostgreManager.py +++ b/API-SERVICE/ConnectManager/PostgreManager.py @@ -1,10 +1,8 @@ -import logging -from typing import List, Dict import psycopg2 - +from typing import List, Dict +from fastapi.logger import logger from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query -#logger = logging.getLogger() class PostgreManager: def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: @@ -21,14 +19,13 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - print("PostgreManager Connect.") + logger.debug("PostgreManager Connect.") return conn def execute(self, sql: str) -> None: - print(sql) - result = self.cursor.execute(sql) + self.cursor.execute(sql) self.conn.commit() - print(f'PostgreManager Execute Result. (row count : {result})') + logger.debug(f'PostgreManager Execute Result. ({sql})') def select(self, sql: str, count: int = None) -> List[Dict]: self.execute(sql) @@ -37,7 +34,7 @@ def select(self, sql: str, count: int = None) -> List[Dict]: rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - print(f'PostgreManager Select Execute. ({sql})') + logger.debug(f'PostgreManager Select Execute. ({sql})') result = [] for row in rows: @@ -47,18 +44,18 @@ def select(self, sql: str, count: int = None) -> List[Dict]: def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - print(f'PostgreManager Insert Execute. ({sql})') + logger.debug(f'PostgreManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - print(f'PostgreManager Update Execute. ({sql})') + logger.debug(f'PostgreManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - print(f'PostgreManager Delete Execute. ({sql})') + logger.debug(f'PostgreManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 0b060155..390ad532 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,16 +1,15 @@ import os import configparser import argparse -import logging +from fastapi.logger import logger from pathlib import Path from tkinter.messagebox import NO from typing import Any from ApiService.ApiServiceConfig import config from ConnectManager import PostgreManager -#logger = logging.getLogger() -def get_config(root_path:str, config_name:str): +def get_config(root_path: str, config_name: str): ano_cfg = {} config = configparser.ConfigParser() @@ -23,14 +22,16 @@ def get_config(root_path:str, config_name:str): return ano_cfg + def parser_params() -> Any: parser = argparse.ArgumentParser() parser.add_argument("--host", type=str, default="127.0.0.1") parser.add_argument("--port", type=int, default=19000) parser.add_argument("--db_type", default="postgresql") - + return parser.parse_args() + def prepare_config() -> None: args = parser_params() config.root_path = Path(os.getcwd()).parent @@ -41,28 +42,32 @@ def prepare_config() -> None: config.server_port = args.port config.db_info = api_router_cfg[config.db_type] + def connect_db(db_type, db_info): if db_type == "postgresql": db = PostgreManager(host=db_info["host"], port=db_info["port"], - user=db_info["user"], password=db_info["password"], - database=db_info["database"], schema=db_info["schema"]) + user=db_info["user"], password=db_info["password"], + database=db_info["database"], schema=db_info["schema"]) else: - print(f"Not Implemented. {db_type}") + raise Exception(f'Not Implemented. ({db_type})') return db + def save_file_for_reload(): with open(__file__, "a") as fd: fd.write(" ") -def make_res_msg(result, errorMessage, data=None, column_names=None): + +def make_res_msg(result, errorMessage, data=None, column_names=None): header_list = [] for column_name in column_names: - header = {"column_name" : column_name} - header_list.append(header) - + header = {"column_name": column_name} + header_list.append(header) + result = None if data == None or column_names == None: - result = {"result" : result, "errorMessage" : errorMessage} - else: - result = {"result" : result, "errorMessage" : errorMessage, "body" : data, "header" : header_list} - return result \ No newline at end of file + result = {"result": result, "errorMessage": errorMessage} + else: + result = {"result": result, "errorMessage": errorMessage, + "body": data, "header": header_list} + return result diff --git a/API-SERVICE/Utils/DataBaseUtil.py b/API-SERVICE/Utils/DataBaseUtil.py index 8ac48edc..a19a3942 100644 --- a/API-SERVICE/Utils/DataBaseUtil.py +++ b/API-SERVICE/Utils/DataBaseUtil.py @@ -1,8 +1,6 @@ -import logging +from fastapi.logger import logger from typing import List, Dict -#logger = logging.getLogger() - def convert_data(data) -> str: return f'\'{str(data)}\'' @@ -35,5 +33,3 @@ def make_delete_query(table, where_info: Dict) -> str: f'{column} = {convert_data(value)}' for column, value in where_info.items()] sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' return sql - - diff --git a/API-SERVICE/conf/logging.conf b/API-SERVICE/conf/logging.conf index a26cabf9..3c3fc845 100644 --- a/API-SERVICE/conf/logging.conf +++ b/API-SERVICE/conf/logging.conf @@ -2,7 +2,7 @@ keys=root [logger_root] -level=INFO +level=DEBUG handlers=console,rotatingFileHandler [formatters] @@ -12,25 +12,19 @@ keys=default format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s [handlers] -keys=console,file,rotatingFileHandler +keys=console,rotatingFileHandler [handler_console] class=StreamHandler args=(sys.stdout,) formatter=default -level=INFO +level=DEBUG [handler_rotatingFileHandler] class=handlers.RotatingFileHandler formatter=default -args=('API-SERVICE/log/API-Service.log', 'a', 20000000, 10) -level=INFO - -[handler_file] -class=FileHandler -args=("API-SERVICE/log/API-Service.log",) -formatter=default -level=INFO +args=('log/API-Service.log', 'a', 20000000, 10) +level=DEBUG diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index fe4d367f..88521e6a 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -1,19 +1,14 @@ -import os -import logging -import logging.config -import traceback from fastapi import FastAPI import uvicorn from ApiService.ApiServiceConfig import config from Utils.CommonUtil import prepare_config from ApiService import ApiService -import pdb prepare_config() -#logging.config.fileConfig(os.path.join(config.root_path, "AP_API_Router/API-ROUTER/conf/logging.conf")) -#logger = logging.getLogger() api_router = ApiService() app = FastAPI() app.include_router(api_router.router) + if __name__ == '__main__': - uvicorn.run("server:app", host=config.server_host, port=config.server_port, reload=True) + uvicorn.run("server:app", host=config.server_host, port=config.server_port, + reload=True, log_config=f'{config.root_path}/API-SERVICE/conf/logging.conf') From 2731573c6077793149276bfcc2d583a17ed6c4f6 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Tue, 10 May 2022 10:39:50 +0900 Subject: [PATCH 039/236] =?UTF-8?q?chore:=20=EB=B3=80=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 7ea6a707..a2b50534 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -5,7 +5,7 @@ from Utils.DataBaseUtil import convert_data -def api(data_set_id: str) -> Dict: +def api(datasetId: str) -> Dict: db = connect_db(config.db_type, config.db_info) query = f'select T.biz_dataset_id as rowId,\ array_agg(T.kor_name) as kor_name,\ @@ -17,7 +17,7 @@ def api(data_set_id: str) -> Dict: from tb_biz_meta tbm\ right join tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id\ left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id\ - where biz_dataset_id = {convert_data(data_set_id)}\ + where biz_dataset_id = {convert_data(datasetId)}\ order by biz_dataset_id, item_id) T\ group by biz_dataset_id\ order by biz_dataset_id;' From 6dc0d7a16b8e0e9a1183e497f1254bc4c7a07f9b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 10 May 2022 13:08:25 +0900 Subject: [PATCH 040/236] =?UTF-8?q?feat=20:=20updateBizMeta=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/Utils/CommonUtil.py | 1 + API-SERVICE/ApiList/meta/updateBizMeta.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index f07b69dd..3dfe0e2c 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -75,3 +75,4 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): result = {"result": result, "errorMessage": errorMessage, "body": data, "header": header_list} return result + \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index d650c385..35c96ae1 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -20,7 +20,7 @@ def api(update: UpdateBizMeta) -> Dict: SET item_id = {convert_data(data["itemId"])},\ item_val = {convert_data(data["itemVal"])}\ WHERE biz_dataset_id = {convert_data(update.bizDatasetId)} AND \ - item_id = {convert_data(update.data["itemId"])};' + item_id = {convert_data(data["itemId"])};' db.execute(query) return {"result": "", "errorMessage": ""} From b6018aeabeebe5342c19015951edff694239f8ca Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 10 May 2022 14:51:12 +0900 Subject: [PATCH 041/236] =?UTF-8?q?feat=20:=20service=20api=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20error=20response=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-202 --- API-ROUTER/ApiRoute/ApiRoute.py | 16 +++++++--- API-SERVICE/ApiList/meta/addChildCategory.py | 15 +++++++-- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 18 ++++++++--- API-SERVICE/ApiList/meta/getBizMetaList.py | 18 ++++++++--- API-SERVICE/ApiList/meta/getCategoryList.py | 15 +++++++-- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 16 +++++++--- API-SERVICE/ApiList/meta/insertBizMeta.py | 24 +++++++++----- API-SERVICE/ApiList/meta/insertMetaMap.py | 32 +++++++++++-------- API-SERVICE/ApiList/meta/insertMetaName.py | 14 ++++++-- API-SERVICE/ApiList/meta/metaMapList.py | 18 ++++++++--- API-SERVICE/ApiList/meta/metaNameList.py | 19 +++++++---- API-SERVICE/ApiList/meta/updateBizMeta.py | 26 +++++++++------ API-SERVICE/ApiList/meta/updateCategory.py | 15 ++++++--- API-SERVICE/ApiList/meta/updateMetaName.py | 14 ++++++-- API-SERVICE/ApiList/meta/useMetaNameList.py | 14 ++++++-- API-SERVICE/Utils/CommonUtil.py | 3 ++ 16 files changed, 197 insertions(+), 80 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 102cfe2e..b938a8e3 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -151,15 +151,21 @@ async def route_api(self, request: Request) -> Dict: return {"result": 0, "errorMessage": "This is an unregistered API."} api_info = api_info[0] - msg_type = api_info["msg_type"] + #msg_type = api_info["msg_type"] - body = None - if msg_type == "JSON": + content_type = request.headers.get("Content-Type") + + if content_type == "application/json": + # if msg_type == "JSON": body = await request.json() - elif msg_type == "BINARY": - body = await request.form() + api_info["msg_type"] = "JSON" + else: + # elif msg_type == "BINARY": + body = await request.body() + api_info["msg_type"] = "BINARY" params_query = str(request.query_params) + if api_info["bypass"] == "ON": result = bypass_msg(api_info, params_query, body) else: diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 11d24a3b..38bd9574 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -1,3 +1,4 @@ +from tkinter import E import uuid from typing import Dict, Optional from ApiService.ApiServiceConfig import config @@ -14,9 +15,17 @@ class addChildCategory(BaseModel): # todo: 수정 필요 def api(insert: addChildCategory) -> Dict: - db = connect_db(config.db_type, config.db_info) query = f'INSERT INTO tb_category (node_name, parent_id, node_id)\ VALUES ({convert_data(insert.node_name)},{convert_data(insert.parent_id)},{convert_data(uuid.uuid4())});' - db.execute(query) - return {"result": "", "errorMessage": ""} + try: + db = connect_db(config.db_type, config.db_info) + db.execute(query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": 1, "errorMessage": ""} + return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index a2b50534..8056c640 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -6,7 +6,6 @@ def api(datasetId: str) -> Dict: - db = connect_db(config.db_type, config.db_info) query = f'select T.biz_dataset_id as rowId,\ array_agg(T.kor_name) as kor_name,\ array_agg(T.eng_name) as eng_name,\ @@ -21,9 +20,18 @@ def api(datasetId: str) -> Dict: order by biz_dataset_id, item_id) T\ group by biz_dataset_id\ order by biz_dataset_id;' - biz_meta_detail = db.select(query) - v_meta_name_query = "SELECT * FROM v_biz_meta_name;" - v_meta_name = db.select(v_meta_name_query) - return {"result": "", "errorMessage": "", "data": {"body": biz_meta_detail[0], "header": v_meta_name[0]}} + try: + db = connect_db(config.db_type, config.db_info) + biz_meta_detail = db.select(query) + v_meta_name = db.select(v_meta_name_query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": "", "errorMessage": "", "data": { + "body": biz_meta_detail[0], "header": v_meta_name[0]}} + return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 0c7ed23e..a057436c 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -5,7 +5,6 @@ def api() -> Dict: - db = connect_db(config.db_type, config.db_info) meta_name_query = """ select T.biz_dataset_id as rowId, array_agg(T.item_val) as data, @@ -18,9 +17,18 @@ def api() -> Dict: group by biz_dataset_id order by biz_dataset_id; """ - bizmeta_list = db.select(meta_name_query) - v_meta_name_query = "SELECT * FROM v_biz_meta_name;" - v_meta_name = db.select(v_meta_name_query) - return {"result": "", "errorMessage": "", "data": {"body": bizmeta_list[0], "header": v_meta_name[0]}} + try: + db = connect_db(config.db_type, config.db_info) + bizmeta_list = db.select(meta_name_query) + v_meta_name = db.select(v_meta_name_query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": "", "errorMessage": "", "data": { + "body": bizmeta_list[0], "header": v_meta_name[0]}} + return result diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 7f1d53e4..e5473037 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -5,9 +5,18 @@ def api() -> Dict: - db = connect_db(config.db_type, config.db_info) category_query = "select * \ from metasch.tb_category \ order by parent_id, node_id;" - category_list = db.select(category_query)[0] - return {"result": "", "errorMessage": "", "data": category_list} + + try: + db = connect_db(config.db_type, config.db_info) + category_list = db.select(category_query)[0] + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": "", "errorMessage": "", "data": category_list} + return result diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 906c9ce3..4643f572 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -6,10 +6,16 @@ def api(nameId: str) -> Dict: - db = connect_db(config.db_type, config.db_info) - query = f'SELECT * FROM tb_biz_meta_name WHERE name_id = {convert_data(nameId)}' - meta_name = db.select(query) - - return {"result": "", "errorMessage": "", "data": meta_name[0][0]} + try: + db = connect_db(config.db_type, config.db_info) + meta_name = db.select(query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": "", "errorMessage": "", "data": meta_name[0][0]} + return result diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index 294199a3..239f2f04 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -7,15 +7,23 @@ def api(biz_meta_list: list) -> Dict: - db = connect_db(config.db_type, config.db_info) uid = uuid.uuid4() - for biz_meta in biz_meta_list: - query = f'INSERT INTO tb_biz_meta (biz_dataset_id,item_id,item_val)\ - VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' + biz_meta_query = "SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;" - db.execute(query) + try: + db = connect_db(config.db_type, config.db_info) + for biz_meta in biz_meta_list: + query = f'INSERT INTO tb_biz_meta (biz_dataset_id,item_id,item_val)\ + VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' - query = "SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;" - biz_meta_list = db.select(query)[0] + db.execute(query) - return biz_meta_list + biz_meta_list = db.select(biz_meta_query)[0] + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = biz_meta_list + return result diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index c487606e..6ff5d24f 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -6,21 +6,27 @@ def api() -> Dict: - db = connect_db(config.db_type, config.db_info) - truncate_query = "TRUNCATE tb_biz_meta_map;" - db.execute(truncate_query) - meta_name_query = "SELECT name_id FROM tb_biz_meta_name;" - meta_name_list = db.select(meta_name_query)[0] + meta_map_query = "SELECT * FROM tb_biz_meta_map" - for i, meta_name in enumerate(meta_name_list): - query = f'INSERT INTO tb_biz_meta_map (item_id,name_id)\ - VALUES ({convert_data(i + 1)},{convert_data(meta_name["name_id"])});' - db.execute(query) + try: + db = connect_db(config.db_type, config.db_info) + db.execute(truncate_query) + meta_name_list = db.select(meta_name_query)[0] - meta_map_query = "SELECT * FROM tb_biz_meta_map" - meta_map_list = db.select(meta_map_query)[0] - # 수정 해야함 + for i, meta_name in enumerate(meta_name_list): + query = f'INSERT INTO tb_biz_meta_map (item_id,name_id)\ + VALUES ({convert_data(i + 1)},{convert_data(meta_name["name_id"])});' + db.execute(query) - return meta_map_list + meta_map_list = db.select(meta_map_query)[0] + # 수정 해야함 + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = meta_map_list + return result diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index a1a84802..88b14f55 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -16,9 +16,17 @@ class InsertMetaName(BaseModel): def api(insert: InsertMetaName) -> Dict: - db = connect_db(config.db_type, config.db_info) query = f'INSERT INTO tb_biz_meta_name (kor_name, eng_name, show_order, name_id, type)\ VALUES ({convert_data(insert.kor_name)}, {convert_data(insert.eng_name)}, {convert_data(insert.show_order)},\ (SELECT concat(\'i\', CAST(substring(max(name_id), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.type)});' - db.execute(query) - return {"result": "", "errorMessage": ""} + try: + db = connect_db(config.db_type, config.db_info) + db.execute(query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": 1, "errorMessage": err} + return result diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index 489ada3f..3d86ff17 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -5,13 +5,21 @@ def api() -> Dict: - db = connect_db(config.db_type, config.db_info) meta_map_query = "SELECT tbmn.kor_name, tbmn.eng_name, tbmm.item_id, tbmm.name_id\ FROM tb_biz_meta_name tbmn\ JOIN tb_biz_meta_map tbmm ON tbmn.name_id = tbmm.name_id" - meta_map = db.select(meta_map_query) - v_meta_map_query = "SELECT * FROM v_biz_meta_map;" - v_meta_map = db.select(v_meta_map_query) - return {"result": "", "errorMessage": "", "data": {"body": meta_map[0], "header": v_meta_map[0]}} + try: + db = connect_db(config.db_type, config.db_info) + meta_map = db.select(meta_map_query) + v_meta_map = db.select(v_meta_map_query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": "", "errorMessage": "", "data": { + "body": meta_map[0], "header": v_meta_map[0]}} + return result diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index e2a01b80..59774fd7 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -5,8 +5,6 @@ def api(perPage: int, curPage: int) -> Dict: - db = connect_db(config.db_type, config.db_info) - curPage = curPage - 1 meta_name_query = f""" select * @@ -28,9 +26,18 @@ def api(perPage: int, curPage: int) -> Dict: offset ({perPage} * {curPage}) ) as t on p.name_id = t.name_id """ - meta_name = db.select(meta_name_query) - v_meta_name_query = "SELECT * FROM v_biz_meta_name;" - v_meta_name = db.select(v_meta_name_query) - return {"result": "", "errorMessage": "", "data": {"body": meta_name[0], "header": v_meta_name[0]}} + try: + db = connect_db(config.db_type, config.db_info) + meta_name = db.select(meta_name_query) + v_meta_name = db.select(v_meta_name_query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": "", "errorMessage": "", "data": { + "body": meta_name[0], "header": v_meta_name[0]}} + return result diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index 35c96ae1..46c983d4 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -14,13 +14,21 @@ class UpdateBizMeta(BaseModel): def api(update: UpdateBizMeta) -> Dict: - db = connect_db(config.db_type, config.db_info) - for data in update.dataList: - query = f'UPDATE tb_biz_meta\ - SET item_id = {convert_data(data["itemId"])},\ - item_val = {convert_data(data["itemVal"])}\ - WHERE biz_dataset_id = {convert_data(update.bizDatasetId)} AND \ - item_id = {convert_data(data["itemId"])};' + try: + db = connect_db(config.db_type, config.db_info) + for data in update.dataList: + query = f'UPDATE tb_biz_meta\ + SET item_id = {convert_data(data["itemId"])},\ + item_val = {convert_data(data["itemVal"])}\ + WHERE biz_dataset_id = {convert_data(update.bizDatasetId)} AND \ + item_id = {convert_data(data["itemId"])};' - db.execute(query) - return {"result": "", "errorMessage": ""} + db.execute(query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": 1, "errorMessage": err} + return result diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index a1d2afdc..fdd126a5 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -14,12 +14,19 @@ class UpdateCategory(BaseModel): # todo: 수정 필요 def api(update: UpdateCategory) -> Dict: - db = connect_db(config.db_type, config.db_info) query = f'UPDATE tb_category\ SET parent_id = {convert_data(uuid.uuid4())},\ node_id = {convert_data(update.node_id)},\ node_name = {convert_data(update.node_name)}\ WHERE node_id = {convert_data(update.node_id)};' - - db.execute(query) - return {"result": "", "errorMessage": ""} + try: + db = connect_db(config.db_type, config.db_info) + db.execute(query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": 1, "errorMessage": err} + return result diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index c71fb351..59f0582d 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -16,7 +16,6 @@ class UpdatetMetaName(BaseModel): def api(update: UpdatetMetaName) -> Dict: - db = connect_db(config.db_type, config.db_info) query = f'UPDATE tb_biz_meta_name\ SET kor_name = {convert_data(update.kor_name)},\ eng_name = {convert_data(update.eng_name)},\ @@ -24,5 +23,14 @@ def api(update: UpdatetMetaName) -> Dict: type= {convert_data(update.type)}\ WHERE name_id = {convert_data(update.name_id)};'\ - db.execute(query) - return {"result": "", "errorMessage": ""} + try: + db = connect_db(config.db_type, config.db_info) + db.execute(query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": 1, "errorMessage": err} + return result diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index c793e869..5cb6e0a7 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -5,7 +5,6 @@ def api() -> Dict: - db = connect_db(config.db_type, config.db_info) meta_name_query = """ select case @@ -23,6 +22,15 @@ def api() -> Dict: tbmn.name_id from tb_biz_meta_name tbmn order by tbmn.name_id;""" - meta_name = db.select(meta_name_query) - return {"result": "", "errorMessage": "", "data": meta_name[0]} + try: + db = connect_db(config.db_type, config.db_info) + meta_name = db.select(meta_name_query) + except Exception as err: + # make error response + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + # make response + result = {"result": "", "errorMessage": "", "data": meta_name[0]} + return result diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 390ad532..1b826514 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -7,6 +7,8 @@ from typing import Any from ApiService.ApiServiceConfig import config from ConnectManager import PostgreManager +from retry import retry +import psycopg2 def get_config(root_path: str, config_name: str): @@ -43,6 +45,7 @@ def prepare_config() -> None: config.db_info = api_router_cfg[config.db_type] +@retry(psycopg2.OperationalError, delay=1, tries=3) def connect_db(db_type, db_info): if db_type == "postgresql": db = PostgreManager(host=db_info["host"], port=db_info["port"], From 49494048cf596d14a665aa23d250fc1225137593 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 11 May 2022 10:24:07 +0900 Subject: [PATCH 042/236] =?UTF-8?q?feat=20:=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=B3=80=EA=B2=BD=20(DB=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4)=20=EB=B0=8F=20=EC=9D=B4=EC=8A=88=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 2 +- API-ROUTER/conf/config.ini | 2 +- API-SERVICE/ApiList/meta/getBizMetaList.py | 6 +++--- API-SERVICE/ApiList/meta/getCategoryList.py | 2 +- API-SERVICE/ApiList/meta/insertMetaName.py | 2 +- API-SERVICE/ApiList/meta/metaNameList.py | 2 +- API-SERVICE/ApiList/meta/updateBizMeta.py | 2 +- API-SERVICE/ApiList/meta/updateCategory.py | 2 +- API-SERVICE/ApiList/meta/updateMetaName.py | 2 +- API-SERVICE/conf/config.ini | 10 +++++----- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index b938a8e3..ebe77ece 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -154,7 +154,7 @@ async def route_api(self, request: Request) -> Dict: #msg_type = api_info["msg_type"] content_type = request.headers.get("Content-Type") - + logger.error(f'content_type : {content_type}') if content_type == "application/json": # if msg_type == "JSON": body = await request.json() diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index dc5b7d6d..951cb37f 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -16,4 +16,4 @@ schema = api [url_info] -web_service = 127.0.0.1:19000 \ No newline at end of file +web_service = 192.168.101.44:19000 diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index a057436c..ad370606 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -10,9 +10,9 @@ def api() -> Dict: array_agg(T.item_val) as data, array_agg(T.item_id) as columnKey from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name - from metasch.tb_biz_meta tbm - right join metasch.tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id - left join metasch.tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id + from meta.tb_biz_meta tbm + right join meta.tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id + left join meta.tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id order by biz_dataset_id, item_id) T group by biz_dataset_id order by biz_dataset_id; diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index e5473037..c247ef2e 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -6,7 +6,7 @@ def api() -> Dict: category_query = "select * \ - from metasch.tb_category \ + from meta.tb_category \ order by parent_id, node_id;" try: diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 88b14f55..905c2d9f 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -28,5 +28,5 @@ def api(insert: InsertMetaName) -> Dict: logger.error(err) else: # make response - result = {"result": 1, "errorMessage": err} + result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 59774fd7..6b742ea7 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -8,7 +8,7 @@ def api(perPage: int, curPage: int) -> Dict: curPage = curPage - 1 meta_name_query = f""" select * - from metasch.tb_biz_meta_name as p + from meta.tb_biz_meta_name as p join (SELECT kor_name, eng_name, show_order, diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index 46c983d4..7790e364 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -30,5 +30,5 @@ def api(update: UpdateBizMeta) -> Dict: logger.error(err) else: # make response - result = {"result": 1, "errorMessage": err} + result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index fdd126a5..649116a8 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -28,5 +28,5 @@ def api(update: UpdateCategory) -> Dict: logger.error(err) else: # make response - result = {"result": 1, "errorMessage": err} + result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 59f0582d..16f67ed9 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -32,5 +32,5 @@ def api(update: UpdatetMetaName) -> Dict: logger.error(err) else: # make response - result = {"result": 1, "errorMessage": err} + result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/config.ini index f1d95627..5fd4457f 100644 --- a/API-SERVICE/conf/config.ini +++ b/API-SERVICE/conf/config.ini @@ -4,9 +4,9 @@ host = 192.168.101.43 port = 17000 [postgresql] -host = 192.168.106.24 +host = 192.168.100.126 port = 25432 -user = dhub -password = dhub.12# -database = dhub -schema = metasch +user = dpme +password = hello.meta12#$ +database = dataportal +schema = meta From 9ff5479c564e579c558f228114fbfcac6ac8b88d Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 12 May 2022 17:27:06 +0900 Subject: [PATCH 043/236] =?UTF-8?q?[AIPLATFORM-250]=20fix:=20header=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 8056c640..5b4573d6 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -20,7 +20,7 @@ def api(datasetId: str) -> Dict: order by biz_dataset_id, item_id) T\ group by biz_dataset_id\ order by biz_dataset_id;' - v_meta_name_query = "SELECT * FROM v_biz_meta_name;" + v_meta_name_query = "SELECT * FROM v_biz_meta;" try: db = connect_db(config.db_type, config.db_info) From 7abbda65477e5e811dbe2e95ca95326da9c3b7b6 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 12 May 2022 17:27:53 +0900 Subject: [PATCH 044/236] =?UTF-8?q?[AIPLATFORM-250]=20feat:=20totalCount?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/metaNameList.py | 45 +++++++++++++----------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 6b742ea7..c3ab6c94 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -7,30 +7,34 @@ def api(perPage: int, curPage: int) -> Dict: curPage = curPage - 1 meta_name_query = f""" - select * - from meta.tb_biz_meta_name as p - join (SELECT kor_name, - eng_name, - show_order, - name_id, - (case - when type = 0 then 'text' - when type = 1 then 'int' - when type = 2 then 'binary' - end - ) as type, - ROW_NUMBER () OVER (ORDER BY name_id DESC) as rowNo - FROM tb_biz_meta_name - order by name_id - limit {perPage} - offset ({perPage} * {curPage}) - ) as t on p.name_id = t.name_id + select + * + from tb_biz_meta_name as p + join ( + SELECT kor_name, + eng_name, + show_order, + name_id, + (case + when type = 0 then 'text' + when type = 1 then 'int' + when type = 2 then 'binary' + end + ) as type, + ROW_NUMBER () OVER (ORDER BY name_id DESC) as rowNo + FROM tb_biz_meta_name + order by name_id + limit {perPage} + offset ({perPage} * {curPage}) + ) as t on p.name_id = t.name_id """ + total_cnt_query = "SELECT count(*) as totalCount FROM tb_biz_meta_name" v_meta_name_query = "SELECT * FROM v_biz_meta_name;" try: db = connect_db(config.db_type, config.db_info) meta_name = db.select(meta_name_query) + total_cnt = db.select(total_cnt_query) v_meta_name = db.select(v_meta_name_query) except Exception as err: # make error response @@ -38,6 +42,7 @@ def api(perPage: int, curPage: int) -> Dict: logger.error(err) else: # make response - result = {"result": "", "errorMessage": "", "data": { - "body": meta_name[0], "header": v_meta_name[0]}} + data = total_cnt[0][0] + data.update({"body": meta_name[0], "header": v_meta_name[0]}) + result = {"result": "", "errorMessage": "", "data": data} return result From 6d894e13f00bb6a79b16109f1d5d58cf738bcd96 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 13 May 2022 14:02:09 +0900 Subject: [PATCH 045/236] =?UTF-8?q?feat=20:=20category=20=EB=B3=84=20url?= =?UTF-8?q?=20=EB=B6=84=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 로그 추가 및 reponse 수정 AIPLATFORM-227 --- API-ROUTER/ApiRoute/ApiRoute.py | 51 ++++++++++--------- API-ROUTER/Utils/CommonUtil.py | 1 - API-ROUTER/Utils/RouteUtil.py | 12 +++-- API-ROUTER/conf/config.ini | 2 +- API-SERVICE/ApiList/meta/addChildCategory.py | 4 +- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 4 +- API-SERVICE/ApiList/meta/getBizMetaList.py | 4 +- API-SERVICE/ApiList/meta/getCategoryList.py | 4 +- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 4 +- API-SERVICE/ApiList/meta/insertBizMeta.py | 2 - API-SERVICE/ApiList/meta/insertMetaMap.py | 2 - API-SERVICE/ApiList/meta/insertMetaName.py | 2 - API-SERVICE/ApiList/meta/metaMapList.py | 2 - API-SERVICE/ApiList/meta/metaNameList.py | 2 - API-SERVICE/ApiList/meta/updateBizMeta.py | 2 - API-SERVICE/ApiList/meta/updateCategory.py | 2 - API-SERVICE/ApiList/meta/updateMetaName.py | 2 - API-SERVICE/ApiList/meta/useMetaNameList.py | 4 +- 18 files changed, 44 insertions(+), 62 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index ebe77ece..af99ce70 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -35,19 +35,19 @@ def __init__(self) -> None: def set_route(self) -> None: self.router.add_api_route( - "/api/getApiList", self.get_api_list, methods=["GET"]) - self.router.add_api_route("/api/getApi", self.get_api, methods=["GET"]) + "/api/getApiList", self.get_api_list, methods=["GET"], tags=["API Info"]) + self.router.add_api_route("/api/getApi", self.get_api, methods=["GET"], tags=["API Info"]) self.router.add_api_route( - "/api/setApi", self.set_api, methods=["POST"]) + "/api/setApi", self.set_api, methods=["POST"], tags=["API Info"]) self.router.add_api_route( - "/api/delApi", self.del_api, methods=["POST"]) + "/api/delApi", self.del_api, methods=["POST"], tags=["API Info"]) db = connect_db(config.db_type, config.db_info) api_info, _ = db.select('SELECT * FROM api_info;') for api in api_info: self.router.add_api_route( - f'/route/{api["api_name"]}', self.route_api, methods=[api["method"]], tags=["route"]) + f'/route/{api["category"]}/{api["api_name"]}', self.route_api, methods=[api["method"]], tags=[f'Route Category ({api["category"]})']) for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_info["sub_dir"]}/{api_name}.py' @@ -68,13 +68,14 @@ def get_api_list(self) -> Dict: api_info, column_names = db.select(api_info_query) api_params, column_names = db.select(api_params_query) except Exception as err: - # make error response + result = {"result": 0, "errorMessage": err} logger.error(err) else: api_info = make_res_msg("", "", api_info, column_names) api_params = make_res_msg("", "", api_params, column_names) + result = {"api_info": api_info, "api_params": api_params} - return {"api_info": api_info, "api_params": api_params} + return result def get_api(self, api_name: str) -> Dict: api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' @@ -84,13 +85,14 @@ def get_api(self, api_name: str) -> Dict: api_info, column_names = db.select(api_info_query) api_params, column_names = db.select(api_params_query) except Exception as err: - # make error response + result = {"result": 0, "errorMessage": err} logger.error(err) else: api_info = make_res_msg("", "", api_info, column_names) api_params = make_res_msg("", "", api_params, column_names) + result = {"api_info": api_info, "api_params": api_params} - return {"api_info": api_info, "api_params": api_params} + return result def set_api(self, api_info: ApiInfo) -> Dict: try: @@ -110,12 +112,13 @@ def set_api(self, api_info: ApiInfo) -> Dict: if len(insert_api_params) != 0: db.insert("api_params", insert_api_params) except Exception as err: - # make error response + result = {"result": 0, "errorMessage": err} logger.error(err) else: save_file_for_reload() + result = {"result": 1, "errorMessage": ""} - return {"API_NAME : set_api"} + return result def del_api(self, api_name: str) -> Dict: try: @@ -124,48 +127,50 @@ def del_api(self, api_name: str) -> Dict: db.delete("api_info", {"api_name": api_name}) db.delete("api_params", {"api_name": api_name}) except Exception as err: - # make error response + result = {"result": 0, "errorMessage": err} logger.error(err) else: save_file_for_reload() + result = {"result": 1, "errorMessage": ""} - return {"API_NAME : del_api"} + return result async def route_api(self, request: Request) -> Dict: api_name = request.url.path.split("/")[-1] method = request.method + content_type = request.headers.get("Content-Type") + + logger.debug(f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') + api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' - logger.debug(f'API Name : {api_name}, Method : {method}') - try: db = connect_db(config.db_type, config.db_info) api_info, _ = db.select(api_info_query) api_params, _ = db.select(api_params_query) except Exception as err: - # make error response + result = {"result": 0, "errorMessage": err} logger.error(err) else: if len(api_info) == 0: return {"result": 0, "errorMessage": "This is an unregistered API."} - api_info = api_info[0] - #msg_type = api_info["msg_type"] - - content_type = request.headers.get("Content-Type") - logger.error(f'content_type : {content_type}') + api_info = api_info[0] if content_type == "application/json": - # if msg_type == "JSON": body = await request.json() api_info["msg_type"] = "JSON" else: - # elif msg_type == "BINARY": body = await request.body() api_info["msg_type"] = "BINARY" params_query = str(request.query_params) + logger.debug(f'Req - body : {body}, query params : {params_query}') + + logger.debug(f'DB - api_info : {api_info}') + logger.debug(f'DB - api_params : {api_params}') + if api_info["bypass"] == "ON": result = bypass_msg(api_info, params_query, body) else: diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 3dfe0e2c..188723b5 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -9,7 +9,6 @@ from retry import retry import psycopg2 - def get_config(root_path: str, config_name: str): ano_cfg = {} diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 0a27559b..cf98393b 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -8,6 +8,7 @@ def convert_url(url: str) -> str: regex = "(?<=\$).*(?=\$)" + logger.debug(f'Send Request Origin Url : {url}') result = re.compile(regex).search(url) if result != None: try: @@ -17,15 +18,18 @@ def convert_url(url: str) -> str: url = None else: url = url.replace(f'${result.group()}$', sub_data) - + logger.debug(f'Send Request Convert Url : {url}') return url def bypass_msg(api_info, params_query, body): method = api_info["method"] - url = convert_url(api_info["url"]) msg_type = api_info["msg_type"] + url = convert_url(api_info["url"]) + if url == None: + return {"result": 0, "errorMessage": "The key does not exist."} + if method == "GET": params = {} if len(params_query) != 0: @@ -44,7 +48,9 @@ def bypass_msg(api_info, params_query, body): else: response = requests.put(url, data=body) else: - logger.error("Method Not Allowed.") + logger.error(f'Method Not Allowed. {method}') + return {"result": 0, "errorMessage": "Method Not Allowed."} + #print(response.__dict__) return response.json() diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 951cb37f..9673343c 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -16,4 +16,4 @@ schema = api [url_info] -web_service = 192.168.101.44:19000 +meta = 192.168.101.44:19000 diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 38bd9574..1c1f013d 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -1,6 +1,5 @@ -from tkinter import E import uuid -from typing import Dict, Optional +from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data @@ -22,7 +21,6 @@ def api(insert: addChildCategory) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute(query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 5b4573d6..c178302c 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -27,11 +27,9 @@ def api(datasetId: str) -> Dict: biz_meta_detail = db.select(query) v_meta_name = db.select(v_meta_name_query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response - result = {"result": "", "errorMessage": "", "data": { + result = {"result": 1, "errorMessage": "", "data": { "body": biz_meta_detail[0], "header": v_meta_name[0]}} return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index ad370606..03b4798d 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -24,11 +24,9 @@ def api() -> Dict: bizmeta_list = db.select(meta_name_query) v_meta_name = db.select(v_meta_name_query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response - result = {"result": "", "errorMessage": "", "data": { + result = {"result": 1, "errorMessage": "", "data": { "body": bizmeta_list[0], "header": v_meta_name[0]}} return result diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index c247ef2e..1586b618 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -13,10 +13,8 @@ def api() -> Dict: db = connect_db(config.db_type, config.db_info) category_list = db.select(category_query)[0] except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response - result = {"result": "", "errorMessage": "", "data": category_list} + result = {"result": 1, "errorMessage": "", "data": category_list} return result diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 4643f572..62d2a33b 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -12,10 +12,8 @@ def api(nameId: str) -> Dict: db = connect_db(config.db_type, config.db_info) meta_name = db.select(query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response - result = {"result": "", "errorMessage": "", "data": meta_name[0][0]} + result = {"result": 1, "errorMessage": "", "data": meta_name[0][0]} return result diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index 239f2f04..ab41b3ce 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -20,10 +20,8 @@ def api(biz_meta_list: list) -> Dict: biz_meta_list = db.select(biz_meta_query)[0] except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = biz_meta_list return result diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 6ff5d24f..39392112 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -23,10 +23,8 @@ def api() -> Dict: meta_map_list = db.select(meta_map_query)[0] # 수정 해야함 except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = meta_map_list return result diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 905c2d9f..47a94de3 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -23,10 +23,8 @@ def api(insert: InsertMetaName) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute(query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index 3d86ff17..bcc59018 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -15,11 +15,9 @@ def api() -> Dict: meta_map = db.select(meta_map_query) v_meta_map = db.select(v_meta_map_query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = {"result": "", "errorMessage": "", "data": { "body": meta_map[0], "header": v_meta_map[0]}} return result diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index c3ab6c94..7066be88 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -37,11 +37,9 @@ def api(perPage: int, curPage: int) -> Dict: total_cnt = db.select(total_cnt_query) v_meta_name = db.select(v_meta_name_query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response data = total_cnt[0][0] data.update({"body": meta_name[0], "header": v_meta_name[0]}) result = {"result": "", "errorMessage": "", "data": data} diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index 7790e364..84cc444a 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -25,10 +25,8 @@ def api(update: UpdateBizMeta) -> Dict: db.execute(query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 649116a8..f446bced 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -23,10 +23,8 @@ def api(update: UpdateCategory) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute(query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 16f67ed9..6a88b737 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -27,10 +27,8 @@ def api(update: UpdatetMetaName) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute(query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 5cb6e0a7..a1cd355e 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -27,10 +27,8 @@ def api() -> Dict: db = connect_db(config.db_type, config.db_info) meta_name = db.select(meta_name_query) except Exception as err: - # make error response result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response - result = {"result": "", "errorMessage": "", "data": meta_name[0]} + result = {"result": 1, "errorMessage": "", "data": meta_name[0]} return result From 6d832f5d7918491b914bcaf6c19af96c0a7cd794 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 16 May 2022 12:57:48 +0900 Subject: [PATCH 046/236] =?UTF-8?q?feat:=20back=20end=20=EC=84=9C=EB=B2=84?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EB=93=B1=EB=A1=9D=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-227 --- API-ROUTER/ApiRoute/ApiRoute.py | 76 +++++++++++++++++++++++++++++++-- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 11 +++-- 3 files changed, 81 insertions(+), 8 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index af99ce70..0213236b 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -1,3 +1,4 @@ +from tkinter import E from fastapi.logger import logger from typing import Dict, List import importlib.util @@ -10,6 +11,12 @@ from starlette.requests import Request +class ApiServerInfo(BaseModel): + name: str + ip_port: str + domain: str + + class ApiParam(BaseModel): api_name: str param_name: str @@ -36,12 +43,22 @@ def __init__(self) -> None: def set_route(self) -> None: self.router.add_api_route( "/api/getApiList", self.get_api_list, methods=["GET"], tags=["API Info"]) - self.router.add_api_route("/api/getApi", self.get_api, methods=["GET"], tags=["API Info"]) + self.router.add_api_route( + "/api/getApi", self.get_api, methods=["GET"], tags=["API Info"]) self.router.add_api_route( "/api/setApi", self.set_api, methods=["POST"], tags=["API Info"]) self.router.add_api_route( "/api/delApi", self.del_api, methods=["POST"], tags=["API Info"]) + self.router.add_api_route( + "/api/getServerInfoList", self.get_server_info_list, methods=["GET"], tags=["API Server Info"]) + self.router.add_api_route( + "/api/getServerInfo", self.get_server_info, methods=["GET"], tags=["API Server Info"]) + self.router.add_api_route( + "/api/setServerInfo", self.set_server_info, methods=["POST"], tags=["API Server Info"]) + self.router.add_api_route( + "/api/delServerInfo", self.del_server_info, methods=["POST"], tags=["API Server Info"]) + db = connect_db(config.db_type, config.db_info) api_info, _ = db.select('SELECT * FROM api_info;') @@ -59,6 +76,56 @@ def set_route(self) -> None: self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) + def set_server_info(self, api_server_info: ApiServerInfo): + try: + db = connect_db(config.db_type, config.db_info) + db.insert("api_server_info", [api_server_info.__dict__]) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result + + def get_server_info_list(self): + try: + db = connect_db(config.db_type, config.db_info) + api_server_info, _ = db.select(f'SELECT * FROM api_server_info;') + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"api_server_info": api_server_info} + + return result + + def get_server_info(self, server_name: str): + try: + db = connect_db(config.db_type, config.db_info) + api_server_info, _ = db.select( + f'SELECT * FROM api_server_info WHERE name = {convert_data(server_name)};') + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"api_server_info": api_server_info} + + return result + + def del_server_info(self, server_name: str): + try: + db = connect_db(config.db_type, config.db_info) + + db.delete("api_server_info", {"name": server_name}) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result + def get_api_list(self) -> Dict: api_info_query = f'SELECT * FROM api_info;' api_params_query = f'SELECT * FROM api_params;' @@ -140,7 +207,8 @@ async def route_api(self, request: Request) -> Dict: method = request.method content_type = request.headers.get("Content-Type") - logger.debug(f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') + logger.debug( + f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' @@ -156,7 +224,7 @@ async def route_api(self, request: Request) -> Dict: if len(api_info) == 0: return {"result": 0, "errorMessage": "This is an unregistered API."} - api_info = api_info[0] + api_info = api_info[0] if content_type == "application/json": body = await request.json() api_info["msg_type"] = "JSON" @@ -170,7 +238,7 @@ async def route_api(self, request: Request) -> Dict: logger.debug(f'DB - api_info : {api_info}') logger.debug(f'DB - api_params : {api_params}') - + if api_info["bypass"] == "ON": result = bypass_msg(api_info, params_query, body) else: diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 188723b5..b20ec290 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -74,4 +74,4 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): result = {"result": result, "errorMessage": errorMessage, "body": data, "header": header_list} return result - \ No newline at end of file + \ No newline at end of file diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index cf98393b..2df1e41e 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -8,7 +8,7 @@ def convert_url(url: str) -> str: regex = "(?<=\$).*(?=\$)" - logger.debug(f'Send Request Origin Url : {url}') + logger.debug(f'Send Request Origin Url : {url}') result = re.compile(regex).search(url) if result != None: try: @@ -18,7 +18,11 @@ def convert_url(url: str) -> str: url = None else: url = url.replace(f'${result.group()}$', sub_data) - logger.debug(f'Send Request Convert Url : {url}') + logger.debug(f'Send Request Convert Url : {url}') + return url + + +def make_url(server_name, url): return url @@ -27,6 +31,7 @@ def bypass_msg(api_info, params_query, body): msg_type = api_info["msg_type"] url = convert_url(api_info["url"]) + #url = make_url(api_info["category"], url) if url == None: return {"result": 0, "errorMessage": "The key does not exist."} @@ -50,7 +55,7 @@ def bypass_msg(api_info, params_query, body): else: logger.error(f'Method Not Allowed. {method}') return {"result": 0, "errorMessage": "Method Not Allowed."} - #print(response.__dict__) + # print(response.__dict__) return response.json() From 85a1cd6a20f723a94dfb969ca0cdf0dea072e278 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 16 May 2022 14:04:54 +0900 Subject: [PATCH 047/236] =?UTF-8?q?feat=20:=20db=20=EC=B0=B8=EC=A1=B0?= =?UTF-8?q?=EB=A5=BC=20=ED=86=B5=ED=95=9C=20url=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-227 --- API-ROUTER/ApiRoute/ApiRoute.py | 6 ++++++ API-ROUTER/ApiRoute/ApiRouteConfig.py | 1 + API-ROUTER/Utils/RouteUtil.py | 17 ++++++++++++----- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 0213236b..4d092e1c 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -62,6 +62,8 @@ def set_route(self) -> None: db = connect_db(config.db_type, config.db_info) api_info, _ = db.select('SELECT * FROM api_info;') + config.api_server_info, _ = db.select('SELECT * FROM api_server_info') + for api in api_info: self.router.add_api_route( f'/route/{api["category"]}/{api["api_name"]}', self.route_api, methods=[api["method"]], tags=[f'Route Category ({api["category"]})']) @@ -84,6 +86,8 @@ def set_server_info(self, api_server_info: ApiServerInfo): result = {"result": 0, "errorMessage": err} logger.error(err) else: + config.api_server_info, _ = db.select( + 'SELECT * FROM api_server_info') result = {"result": 1, "errorMessage": ""} return result @@ -122,6 +126,8 @@ def del_server_info(self, server_name: str): result = {"result": 0, "errorMessage": err} logger.error(err) else: + config.api_server_info, _ = db.select( + 'SELECT * FROM api_server_info') result = {"result": 1, "errorMessage": ""} return result diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index da66a53b..6acea0e3 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -13,6 +13,7 @@ class ApiRouteConfig: server_port: int api_config: Dict + api_server_info: List[Dict] config = ApiRouteConfig diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 2df1e41e..bf788214 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -22,18 +22,25 @@ def convert_url(url: str) -> str: return url -def make_url(server_name, url): - return url +def make_url(server_name: str, url: str): + print(server_name, url, config.api_server_info) + for server_info in config.api_server_info: + if server_info["name"] == server_name: + if len(server_info["ip_port"]) != 0: + return f'http://{server_info["ip_port"]}{url}' + else: + return f'http://{server_info["domain"]}{url}' + return None def bypass_msg(api_info, params_query, body): method = api_info["method"] msg_type = api_info["msg_type"] - url = convert_url(api_info["url"]) - #url = make_url(api_info["category"], url) + #url = convert_url(api_info["url"]) + url = make_url(api_info["category"], api_info["url"]) if url == None: - return {"result": 0, "errorMessage": "The key does not exist."} + return {"result": 0, "errorMessage": "The server info does not exist."} if method == "GET": params = {} From da78530edeeb0ae6795ecc82327ea907ebdbf236 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 16 May 2022 14:08:58 +0900 Subject: [PATCH 048/236] =?UTF-8?q?[AIPLATFORM-263]=20feat:=20view=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=20drop=ED=9B=84=20=EC=9E=AC?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaMap.py | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 39392112..ca3712d1 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -6,20 +6,52 @@ def api() -> Dict: + view_col = ["biz_dataset_id"] + drop_view_query = "DROP VIEW v_biz_meta_wrap" truncate_query = "TRUNCATE tb_biz_meta_map;" meta_name_query = "SELECT name_id FROM tb_biz_meta_name;" meta_map_query = "SELECT * FROM tb_biz_meta_map" + map_item_query = """ + select distinct + cast(meta_map.item_id as INT) as item_id, + tbmn.eng_name as eng_name + from + tb_biz_meta_name tbmn + left join tb_biz_meta_map meta_map on + tbmn.name_id = meta_map.name_id + order by item_id asc + """ try: db = connect_db(config.db_type, config.db_info) + db.execute(drop_view_query) db.execute(truncate_query) meta_name_list = db.select(meta_name_query)[0] + # insert meta map for i, meta_name in enumerate(meta_name_list): query = f'INSERT INTO tb_biz_meta_map (item_id,name_id)\ VALUES ({convert_data(i + 1)},{convert_data(meta_name["name_id"])});' db.execute(query) + # create view v_biz_meta_wrap + meta_map_item = db.select(map_item_query)[0] + for i,meta_map in enumerate(meta_map_item): + eng_name = meta_map["eng_name"] + col_format = f"\t\tmax(case when item_id = {convert_data(i + 1)} then item_val end) as {eng_name}" + view_col.append(col_format) + + view_col = ',\n'.join(view_col) + ddl_dataset_id = f""" + create view v_biz_meta_wrap as + select + {view_col} + from tb_biz_meta + group by biz_dataset_id + """ + db.execute(ddl_dataset_id) + + # return data meta_map_list = db.select(meta_map_query)[0] # 수정 해야함 except Exception as err: From 408fb3dd6a9f893212c9336d8da42c7f9d164427 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 18 May 2022 13:15:28 +0900 Subject: [PATCH 049/236] =?UTF-8?q?[AIPLATFORM-278]=20feat:=20DB=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 10 ++++---- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 24 +++++++++---------- API-SERVICE/ApiList/meta/getBizMetaList.py | 20 ++++++++-------- API-SERVICE/ApiList/meta/getCategoryList.py | 4 ++-- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 2 +- API-SERVICE/ApiList/meta/insertBizMeta.py | 4 ++-- API-SERVICE/ApiList/meta/insertMetaMap.py | 20 ++++++++-------- API-SERVICE/ApiList/meta/insertMetaName.py | 18 +++++++------- API-SERVICE/ApiList/meta/metaMapList.py | 4 ++-- API-SERVICE/ApiList/meta/metaNameList.py | 22 ++++++++--------- API-SERVICE/ApiList/meta/updateBizMeta.py | 2 -- API-SERVICE/ApiList/meta/updateCategory.py | 14 +++++------ API-SERVICE/ApiList/meta/updateMetaName.py | 22 ++++++++--------- API-SERVICE/ApiList/meta/useMetaNameList.py | 18 +++++++------- 14 files changed, 91 insertions(+), 93 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 1c1f013d..9600f047 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -3,19 +3,19 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field from fastapi.logger import logger class addChildCategory(BaseModel): - parent_id: str - node_name: str + PRNTS_ID: str = Field(alias="parent_id") + NODE_NAME: str = Field(alias="node_name") # todo: 수정 필요 def api(insert: addChildCategory) -> Dict: - query = f'INSERT INTO tb_category (node_name, parent_id, node_id)\ - VALUES ({convert_data(insert.node_name)},{convert_data(insert.parent_id)},{convert_data(uuid.uuid4())});' + query = f'INSERT INTO tb_category (NODE_NAME, PRNTS_ID, NODE_ID)\ + VALUES ({convert_data(insert.NODE_NAME)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index c178302c..3adc81a5 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -6,20 +6,20 @@ def api(datasetId: str) -> Dict: - query = f'select T.biz_dataset_id as rowId,\ - array_agg(T.kor_name) as kor_name,\ - array_agg(T.eng_name) as eng_name,\ - array_agg(T.type) as type,\ - array_agg(T.item_val) as data,\ - array_agg(T.item_id) as columnKey\ - from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name, type\ + query = f'select T.BIZ_DATASET_ID as rowId,\ + array_agg(T.KOR_NM) as KOR_NM,\ + array_agg(T.ENG_NM) as ENG_NM,\ + array_agg(T.TYPE) as TYPE,\ + array_agg(T.ITEM_VAL) as ITEM_VAL,\ + array_agg(T.ITEM_ID) as ITEM_ID\ + from (select biz_dataset_id, tbm.ITEM_ID, tbm.ITEM_VAL, tbmm.NM_ID, KOR_NM, ENG_NM, TYPE\ from tb_biz_meta tbm\ - right join tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id\ - left join tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id\ + right join tb_biz_meta_map tbmm on tbm.ITEM_ID = tbmm.ITEM_ID\ + left join tb_biz_meta_name tbmn on tbmm.NM_ID = tbmn.NM_ID\ where biz_dataset_id = {convert_data(datasetId)}\ - order by biz_dataset_id, item_id) T\ - group by biz_dataset_id\ - order by biz_dataset_id;' + order by BIZ_DATASET_ID, ITEM_ID) T\ + group by BIZ_DATASET_ID\ + order by BIZ_DATASET_ID;' v_meta_name_query = "SELECT * FROM v_biz_meta;" try: diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 03b4798d..f5b24857 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -6,16 +6,16 @@ def api() -> Dict: meta_name_query = """ - select T.biz_dataset_id as rowId, - array_agg(T.item_val) as data, - array_agg(T.item_id) as columnKey - from (select biz_dataset_id, tbm.item_id, tbm.item_val, tbmm.name_id, kor_name, eng_name - from meta.tb_biz_meta tbm - right join meta.tb_biz_meta_map tbmm on tbm.item_id = tbmm.item_id - left join meta.tb_biz_meta_name tbmn on tbmm.name_id = tbmn.name_id - order by biz_dataset_id, item_id) T - group by biz_dataset_id - order by biz_dataset_id; + select T.BIZ_DATASET_ID as rowId, + array_agg(T.ITEM_VAL) as data, + array_agg(T.ITEM_ID) as columnKey + from (select BIZ_DATASET_ID, tbm.ITEM_ID, tbm.ITEM_VAL, tbmm.NM_ID, KOR_NM, ENG_NM + from tb_biz_meta tbm + right join tb_biz_meta_map tbmm on tbm.ITEM_ID = tbmm.ITEM_ID + left join tb_biz_meta_name tbmn on tbmm.NM_ID = tbmn.NM_ID + order by BIZ_DATASET_ID, ITEM_ID) T + group by BIZ_DATASET_ID + order by BIZ_DATASET_ID; """ v_meta_name_query = "SELECT * FROM v_biz_meta_name;" diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 1586b618..c697e63f 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -6,8 +6,8 @@ def api() -> Dict: category_query = "select * \ - from meta.tb_category \ - order by parent_id, node_id;" + from tb_category \ + order by PRNTS_ID, NODE_ID;" try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 62d2a33b..e0950203 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -6,7 +6,7 @@ def api(nameId: str) -> Dict: - query = f'SELECT * FROM tb_biz_meta_name WHERE name_id = {convert_data(nameId)}' + query = f'SELECT * FROM tb_biz_meta_name WHERE NM_ID = {convert_data(nameId)}' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index ab41b3ce..45948f31 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -8,12 +8,12 @@ def api(biz_meta_list: list) -> Dict: uid = uuid.uuid4() - biz_meta_query = "SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;" + biz_meta_query = "SELECT ITEM_ID as itemId, ITEM_VAL as itemVal FROM tb_biz_meta;" try: db = connect_db(config.db_type, config.db_info) for biz_meta in biz_meta_list: - query = f'INSERT INTO tb_biz_meta (biz_dataset_id,item_id,item_val)\ + query = f'INSERT INTO tb_biz_meta (BIZ_DATASET_ID,ITEM_ID,ITEM_VAL)\ VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' db.execute(query) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index ca3712d1..adea970b 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -6,20 +6,20 @@ def api() -> Dict: - view_col = ["biz_dataset_id"] + view_col = ["BIZ_DATASET_ID"] drop_view_query = "DROP VIEW v_biz_meta_wrap" truncate_query = "TRUNCATE tb_biz_meta_map;" - meta_name_query = "SELECT name_id FROM tb_biz_meta_name;" + meta_name_query = "SELECT NM_ID FROM tb_biz_meta_name;" meta_map_query = "SELECT * FROM tb_biz_meta_map" map_item_query = """ select distinct - cast(meta_map.item_id as INT) as item_id, - tbmn.eng_name as eng_name + cast(meta_map.ITEM_ID as INT) as item_id, + tbmn.ENG_NM as eng_name from tb_biz_meta_name tbmn left join tb_biz_meta_map meta_map on - tbmn.name_id = meta_map.name_id - order by item_id asc + tbmn.NM_ID = meta_map.NM_ID + order by ITEM_ID asc """ try: @@ -30,15 +30,15 @@ def api() -> Dict: # insert meta map for i, meta_name in enumerate(meta_name_list): - query = f'INSERT INTO tb_biz_meta_map (item_id,name_id)\ - VALUES ({convert_data(i + 1)},{convert_data(meta_name["name_id"])});' + query = f'INSERT INTO tb_biz_meta_map (ITEM_ID,NM_ID)\ + VALUES ({convert_data(i + 1)},{convert_data(meta_name["NM_ID"])});' db.execute(query) # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] for i,meta_map in enumerate(meta_map_item): - eng_name = meta_map["eng_name"] - col_format = f"\t\tmax(case when item_id = {convert_data(i + 1)} then item_val end) as {eng_name}" + eng_name = meta_map["ENG_NM"] + col_format = f"\t\tmax(case when ITEM_ID = {convert_data(i + 1)} then ITEM_VAL end) as {eng_name}" view_col.append(col_format) view_col = ',\n'.join(view_col) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 47a94de3..9115bbbc 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -3,22 +3,22 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field class InsertMetaName(BaseModel): subscribed: bool - kor_name: str - eng_name: str - show_order: int - name_id: str - type: int + KOR_NM: str = Field(alias="kor_name") + ENG_NM: str = Field(alias="eng_name") + SHOW_ODRG: int = Field(alias="show_order") + NM_ID: str = Field(alias="name_id") + TYPE: int = Field(alias="type") def api(insert: InsertMetaName) -> Dict: - query = f'INSERT INTO tb_biz_meta_name (kor_name, eng_name, show_order, name_id, type)\ - VALUES ({convert_data(insert.kor_name)}, {convert_data(insert.eng_name)}, {convert_data(insert.show_order)},\ - (SELECT concat(\'i\', CAST(substring(max(name_id), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.type)});' + query = f'INSERT INTO tb_biz_meta_name (KOR_NM, ENG_NM, SHOW_ODRG, NM_ID, TYPE)\ + VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, {convert_data(insert.SHOW_ODRG)},\ + (SELECT concat(\'i\', CAST(substring(max(NM_ID), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.TYPE)});' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index bcc59018..99b40949 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -5,9 +5,9 @@ def api() -> Dict: - meta_map_query = "SELECT tbmn.kor_name, tbmn.eng_name, tbmm.item_id, tbmm.name_id\ + meta_map_query = "SELECT tbmn.KOR_NM, tbmn.ENG_NM, tbmm.ITEM_ID, tbmm.NM_ID\ FROM tb_biz_meta_name tbmn\ - JOIN tb_biz_meta_map tbmm ON tbmn.name_id = tbmm.name_id" + JOIN tb_biz_meta_map tbmm ON tbmn.NM_ID = tbmm.NM_ID" v_meta_map_query = "SELECT * FROM v_biz_meta_map;" try: diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 7066be88..7c35743a 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -11,22 +11,22 @@ def api(perPage: int, curPage: int) -> Dict: * from tb_biz_meta_name as p join ( - SELECT kor_name, - eng_name, - show_order, - name_id, + SELECT KOR_NM, + ENG_NM, + SHOW_ODRG, + NM_ID, (case - when type = 0 then 'text' - when type = 1 then 'int' - when type = 2 then 'binary' + when TYPE = 0 then 'text' + when TYPE = 1 then 'int' + when TYPE = 2 then 'binary' end - ) as type, - ROW_NUMBER () OVER (ORDER BY name_id DESC) as rowNo + ) as TYPE, + ROW_NUMBER () OVER (ORDER BY NM_ID DESC) as rowNo FROM tb_biz_meta_name - order by name_id + order by NM_ID limit {perPage} offset ({perPage} * {curPage}) - ) as t on p.name_id = t.name_id + ) as t on p.NM_ID = t.NM_ID """ total_cnt_query = "SELECT count(*) as totalCount FROM tb_biz_meta_name" v_meta_name_query = "SELECT * FROM v_biz_meta_name;" diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index 84cc444a..28f10685 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -10,8 +10,6 @@ class UpdateBizMeta(BaseModel): bizDatasetId: str dataList: list -# todo: 질문 후 수정 필요 - def api(update: UpdateBizMeta) -> Dict: try: diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index f446bced..f1db13a5 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -2,23 +2,23 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field from fastapi.logger import logger from typing import Dict class UpdateCategory(BaseModel): - node_id: str - node_name: str + NODE_ID: str = Field(alias="NODE_ID") + NODE_NAME: str = Field(alias="NODE_NAME") # todo: 수정 필요 def api(update: UpdateCategory) -> Dict: query = f'UPDATE tb_category\ - SET parent_id = {convert_data(uuid.uuid4())},\ - node_id = {convert_data(update.node_id)},\ - node_name = {convert_data(update.node_name)}\ - WHERE node_id = {convert_data(update.node_id)};' + SET PRNTS_ID = {convert_data(uuid.uuid4())},\ + NODE_ID = {convert_data(update.NODE_ID)},\ + NODE_NAME = {convert_data(update.NODE_NAME)}\ + WHERE NODE_ID = {convert_data(update.NODE_ID)};' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 6a88b737..d784437a 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -2,26 +2,26 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field from fastapi.logger import logger class UpdatetMetaName(BaseModel): subscribed: bool - kor_name: str - eng_name: str - show_order: int - name_id: str - type: int + KOR_NM: str = Field(alias="kor_name") + ENG_NM: str = Field(alias="eng_name") + SHOW_ODRG: int = Field(alias="show_order") + NM_ID: str = Field(alias="name_id") + TYPE: int = Field(alias="type") def api(update: UpdatetMetaName) -> Dict: query = f'UPDATE tb_biz_meta_name\ - SET kor_name = {convert_data(update.kor_name)},\ - eng_name = {convert_data(update.eng_name)},\ - show_order = {convert_data(update.show_order)},\ - type= {convert_data(update.type)}\ - WHERE name_id = {convert_data(update.name_id)};'\ + SET KOR_NM = {convert_data(update.KOR_NM)},\ + ENG_NM = {convert_data(update.ENG_NM)},\ + SHOW_ODRG = {convert_data(update.SHOW_ODRG)},\ + TYPE= {convert_data(update.TYPE)}\ + WHERE NM_ID = {convert_data(update.NM_ID)};'\ try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index a1cd355e..9d6789cf 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -8,20 +8,20 @@ def api() -> Dict: meta_name_query = """ select case - when (select tbmm.name_id from tb_biz_meta_map tbmm where tbmn.name_id = tbmm.name_id) is null then 0 + when (select tbmm.NM_ID from tb_biz_meta_map tbmm where tbmn.NM_ID = tbmm.NM_ID) is null then 0 else 1 end as use_meta, - tbmn.kor_name, - tbmn.eng_name, - tbmn.show_order, + tbmn.KOR_NM, + tbmn.ENG_NM, + tbmn.SHOW_ODRG, case - when tbmn.type = 0 then 'text' - when tbmn.type = 1 then 'int' - when tbmn.type = 2 then 'binary' + when tbmn.TYPE = 0 then 'text' + when tbmn.TYPE = 1 then 'int' + when tbmn.TYPE = 2 then 'binary' end as type, - tbmn.name_id + tbmn.NM_ID from tb_biz_meta_name tbmn - order by tbmn.name_id;""" + order by tbmn.NM_ID;""" try: db = connect_db(config.db_type, config.db_info) From ff184c258ba378b1eca8f9aa177a650fd0c26313 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 18 May 2022 14:52:11 +0900 Subject: [PATCH 050/236] =?UTF-8?q?feat=20:=20API=20Router=20JWT=20?= =?UTF-8?q?=EB=B3=B5=ED=98=B8=ED=99=94=20=EA=B8=B0=EB=8A=A5=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-276 --- API-ROUTER/ApiRoute/ApiRoute.py | 6 +++--- API-ROUTER/ApiRoute/ApiRouteConfig.py | 2 ++ API-ROUTER/Utils/CommonUtil.py | 16 ++++++++++++++-- API-ROUTER/conf/config.ini | 4 ++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 4d092e1c..2c79bc68 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -1,11 +1,10 @@ -from tkinter import E from fastapi.logger import logger from typing import Dict, List import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg, save_file_for_reload +from Utils.CommonUtil import connect_db, make_res_msg, get_user_info, save_file_for_reload from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request @@ -28,7 +27,6 @@ class ApiInfo(BaseModel): api_name: str category: str url: str - msg_type: str method: str command: str bypass: str @@ -213,6 +211,8 @@ async def route_api(self, request: Request) -> Dict: method = request.method content_type = request.headers.get("Content-Type") + user_info = get_user_info(request.headers) + logger.debug( f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index 6acea0e3..4f6778d2 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -15,5 +15,7 @@ class ApiRouteConfig: api_config: Dict api_server_info: List[Dict] + secret_info: Dict + config = ApiRouteConfig diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index b20ec290..a865e512 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -3,11 +3,14 @@ import argparse from fastapi.logger import logger from pathlib import Path -from typing import Any +from typing import Any, Dict from ApiRoute.ApiRouteConfig import config from ConnectManager import PostgreManager from retry import retry import psycopg2 +import jwt +import base64 + def get_config(root_path: str, config_name: str): ano_cfg = {} @@ -43,6 +46,7 @@ def prepare_config() -> None: config.url_info = api_router_cfg["url_info"] config.db_info = api_router_cfg[config.db_type] config.remote_info = api_router_cfg["remote"] + config.secret_info = api_router_cfg["secret_info"] @retry(psycopg2.OperationalError, delay=1, tries=3) @@ -74,4 +78,12 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): result = {"result": result, "errorMessage": errorMessage, "body": data, "header": header_list} return result - \ No newline at end of file + + +def get_user_info(headers: Dict): + user_info = None + if config.secret_info["name"] in headers: + user_info = jwt.decode(headers[config.secret_info["name"]], + config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) + logger.debug(f'user info : {user_info}') + return user_info diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 9673343c..61c2efb5 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -17,3 +17,7 @@ schema = api [url_info] meta = 192.168.101.44:19000 + +[secret_info] +name = user-katech-access-token +secret = jwt-secrect-b-iris \ No newline at end of file From 51a55a74b05c61756efb69367527fb294d04607f Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 18 May 2022 16:52:36 +0900 Subject: [PATCH 051/236] =?UTF-8?q?[AIPLATFORM-278]=20fix:=20DB=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=EB=AA=85=20=EB=8C=80=EC=86=8C=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 8 ++--- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 36 +++++++++++-------- API-SERVICE/ApiList/meta/getBizMetaList.py | 24 ++++++------- API-SERVICE/ApiList/meta/getCategoryList.py | 4 +-- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 2 +- API-SERVICE/ApiList/meta/insertBizMeta.py | 6 ++-- API-SERVICE/ApiList/meta/insertMetaMap.py | 18 +++++----- API-SERVICE/ApiList/meta/insertMetaName.py | 16 ++++----- API-SERVICE/ApiList/meta/metaMapList.py | 14 ++++++-- API-SERVICE/ApiList/meta/metaNameList.py | 22 ++++++------ API-SERVICE/ApiList/meta/updateBizMeta.py | 8 ++--- API-SERVICE/ApiList/meta/updateCategory.py | 12 +++---- API-SERVICE/ApiList/meta/updateMetaName.py | 20 +++++------ API-SERVICE/ApiList/meta/useMetaNameList.py | 18 +++++----- 14 files changed, 112 insertions(+), 96 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 9600f047..112aa78a 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -8,14 +8,14 @@ class addChildCategory(BaseModel): - PRNTS_ID: str = Field(alias="parent_id") - NODE_NAME: str = Field(alias="node_name") + prnts_id: str = Field(alias="parent_id") + node_name: str = Field(alias="node_name") # todo: 수정 필요 def api(insert: addChildCategory) -> Dict: - query = f'INSERT INTO tb_category (NODE_NAME, PRNTS_ID, NODE_ID)\ - VALUES ({convert_data(insert.NODE_NAME)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' + query = f'INSERT INTO tb_category ("NODE_NM", "PRNTS_ID", "NODE_ID")\ + VALUES ({convert_data(insert.node_name)},{convert_data(insert.prnts_id)},{convert_data(uuid.uuid4())});' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 3adc81a5..e1cafe9c 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -6,20 +6,28 @@ def api(datasetId: str) -> Dict: - query = f'select T.BIZ_DATASET_ID as rowId,\ - array_agg(T.KOR_NM) as KOR_NM,\ - array_agg(T.ENG_NM) as ENG_NM,\ - array_agg(T.TYPE) as TYPE,\ - array_agg(T.ITEM_VAL) as ITEM_VAL,\ - array_agg(T.ITEM_ID) as ITEM_ID\ - from (select biz_dataset_id, tbm.ITEM_ID, tbm.ITEM_VAL, tbmm.NM_ID, KOR_NM, ENG_NM, TYPE\ - from tb_biz_meta tbm\ - right join tb_biz_meta_map tbmm on tbm.ITEM_ID = tbmm.ITEM_ID\ - left join tb_biz_meta_name tbmn on tbmm.NM_ID = tbmn.NM_ID\ - where biz_dataset_id = {convert_data(datasetId)}\ - order by BIZ_DATASET_ID, ITEM_ID) T\ - group by BIZ_DATASET_ID\ - order by BIZ_DATASET_ID;' + query = f'''select T."BIZ_DATASET_ID" as "rowId", + array_agg(T."KOR_NM") as "KOR_NM", + array_agg(T."ENG_NM") as "ENG_NM", + array_agg(T."TYPE") as "TYPE", + array_agg(T."ITEM_VAL") as "ITEM_VAL", + array_agg(T."ITEM_ID") as "ITEM_ID" + from (select + "BIZ_DATASET_ID", + tbm."ITEM_ID", + tbm."ITEM_VAL", + tbmm."NM_ID", + tbmn."KOR_NM", + tbmn."ENG_NM", + tbmn."TYPE" + from tb_biz_meta tbm + right join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" + left join tb_biz_meta_name tbmn on tbmm."NM_ID" = tbmn."NM_ID" + where "BIZ_DATASET_ID" = {convert_data(datasetId)} + order by "BIZ_DATASET_ID", "ITEM_ID") T + group by "BIZ_DATASET_ID" + order by "BIZ_DATASET_ID";''' + v_meta_name_query = "SELECT * FROM v_biz_meta;" try: diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index f5b24857..0aa7b4c7 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -5,19 +5,19 @@ def api() -> Dict: - meta_name_query = """ - select T.BIZ_DATASET_ID as rowId, - array_agg(T.ITEM_VAL) as data, - array_agg(T.ITEM_ID) as columnKey - from (select BIZ_DATASET_ID, tbm.ITEM_ID, tbm.ITEM_VAL, tbmm.NM_ID, KOR_NM, ENG_NM + meta_name_query = ''' + select T."BIZ_DATASET_ID" as rowId, + array_agg(T."ITEM_VAL") as data, + array_agg(T."ITEM_ID") as columnKey + from (select "BIZ_DATASET_ID", tbm."ITEM_ID", tbm."ITEM_VAL", tbmm."NM_ID", "KOR_NM", "ENG_NM" from tb_biz_meta tbm - right join tb_biz_meta_map tbmm on tbm.ITEM_ID = tbmm.ITEM_ID - left join tb_biz_meta_name tbmn on tbmm.NM_ID = tbmn.NM_ID - order by BIZ_DATASET_ID, ITEM_ID) T - group by BIZ_DATASET_ID - order by BIZ_DATASET_ID; - """ - v_meta_name_query = "SELECT * FROM v_biz_meta_name;" + right join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" + left join tb_biz_meta_name tbmn on tbmm."NM_ID" = tbmn."NM_ID" + order by "BIZ_DATASET_ID", "ITEM_ID") T + group by "BIZ_DATASET_ID" + order by "BIZ_DATASET_ID"; + ''' + v_meta_name_query = "SELECT * FROM v_biz_meta;" try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index c697e63f..1d2eeb6a 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -5,9 +5,9 @@ def api() -> Dict: - category_query = "select * \ + category_query = 'select * \ from tb_category \ - order by PRNTS_ID, NODE_ID;" + order by "PRNTS_ID", "NODE_ID";' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index e0950203..bb14d009 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -6,7 +6,7 @@ def api(nameId: str) -> Dict: - query = f'SELECT * FROM tb_biz_meta_name WHERE NM_ID = {convert_data(nameId)}' + query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(nameId)}' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index 45948f31..70f20188 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -8,13 +8,13 @@ def api(biz_meta_list: list) -> Dict: uid = uuid.uuid4() - biz_meta_query = "SELECT ITEM_ID as itemId, ITEM_VAL as itemVal FROM tb_biz_meta;" + biz_meta_query = 'SELECT "ITEM_ID" as itemId, "ITEM_VAL" as itemVal FROM tb_biz_meta;' try: db = connect_db(config.db_type, config.db_info) for biz_meta in biz_meta_list: - query = f'INSERT INTO tb_biz_meta (BIZ_DATASET_ID,ITEM_ID,ITEM_VAL)\ - VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' + query = 'INSERT INTO tb_biz_meta ("BIZ_DATASET_ID", "ITEM_ID", "ITEM_VAL" )' + \ + f'VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' db.execute(query) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index adea970b..33b670a4 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -6,20 +6,20 @@ def api() -> Dict: - view_col = ["BIZ_DATASET_ID"] + view_col = ['"BIZ_DATASET_ID"'] drop_view_query = "DROP VIEW v_biz_meta_wrap" truncate_query = "TRUNCATE tb_biz_meta_map;" - meta_name_query = "SELECT NM_ID FROM tb_biz_meta_name;" + meta_name_query = 'SELECT "NM_ID" FROM tb_biz_meta_name;' meta_map_query = "SELECT * FROM tb_biz_meta_map" map_item_query = """ select distinct - cast(meta_map.ITEM_ID as INT) as item_id, - tbmn.ENG_NM as eng_name + cast(meta_map."ITEM_ID" as INT) as item_id, + tbmn."ENG_NM" from tb_biz_meta_name tbmn left join tb_biz_meta_map meta_map on - tbmn.NM_ID = meta_map.NM_ID - order by ITEM_ID asc + tbmn."NM_ID" = meta_map."NM_ID" + order by item_id asc """ try: @@ -30,7 +30,7 @@ def api() -> Dict: # insert meta map for i, meta_name in enumerate(meta_name_list): - query = f'INSERT INTO tb_biz_meta_map (ITEM_ID,NM_ID)\ + query = f'INSERT INTO tb_biz_meta_map ("ITEM_ID","NM_ID")\ VALUES ({convert_data(i + 1)},{convert_data(meta_name["NM_ID"])});' db.execute(query) @@ -38,7 +38,7 @@ def api() -> Dict: meta_map_item = db.select(map_item_query)[0] for i,meta_map in enumerate(meta_map_item): eng_name = meta_map["ENG_NM"] - col_format = f"\t\tmax(case when ITEM_ID = {convert_data(i + 1)} then ITEM_VAL end) as {eng_name}" + col_format = f'\t\tmax(case when "ITEM_ID" = {convert_data(i + 1)} then "ITEM_VAL" end) as {eng_name}' view_col.append(col_format) view_col = ',\n'.join(view_col) @@ -47,7 +47,7 @@ def api() -> Dict: select {view_col} from tb_biz_meta - group by biz_dataset_id + group by "BIZ_DATASET_ID" """ db.execute(ddl_dataset_id) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 9115bbbc..a72a09a7 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -8,17 +8,17 @@ class InsertMetaName(BaseModel): subscribed: bool - KOR_NM: str = Field(alias="kor_name") - ENG_NM: str = Field(alias="eng_name") - SHOW_ODRG: int = Field(alias="show_order") - NM_ID: str = Field(alias="name_id") - TYPE: int = Field(alias="type") + kor_nm: str = Field(alias="kor_name") + eng_nm: str = Field(alias="eng_name") + show_odrg: int = Field(alias="show_order") + nm_id: str = Field(alias="name_id") + type: int = Field(alias="type") def api(insert: InsertMetaName) -> Dict: - query = f'INSERT INTO tb_biz_meta_name (KOR_NM, ENG_NM, SHOW_ODRG, NM_ID, TYPE)\ - VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, {convert_data(insert.SHOW_ODRG)},\ - (SELECT concat(\'i\', CAST(substring(max(NM_ID), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.TYPE)});' + query = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ + VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm)}, {convert_data(insert.show_odrg)},\ + (SELECT concat(\'i\', CAST(substring(max("NM_ID"), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.type)});' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index 99b40949..f0012c87 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -5,9 +5,17 @@ def api() -> Dict: - meta_map_query = "SELECT tbmn.KOR_NM, tbmn.ENG_NM, tbmm.ITEM_ID, tbmm.NM_ID\ - FROM tb_biz_meta_name tbmn\ - JOIN tb_biz_meta_map tbmm ON tbmn.NM_ID = tbmm.NM_ID" + meta_map_query = """ + select + tbmn."KOR_NM", + tbmn."ENG_NM", + tbmm."ITEM_ID", + tbmm."NM_ID" + from + tb_biz_meta_name as tbmn + join tb_biz_meta_map as tbmm + on tbmm."NM_ID" = tbmn."NM_ID"; + """ v_meta_map_query = "SELECT * FROM v_biz_meta_map;" try: diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 7c35743a..be85ed1b 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -11,22 +11,22 @@ def api(perPage: int, curPage: int) -> Dict: * from tb_biz_meta_name as p join ( - SELECT KOR_NM, - ENG_NM, - SHOW_ODRG, - NM_ID, + SELECT "KOR_NM", + "ENG_NM", + "SHOW_ODRG", + "NM_ID", (case - when TYPE = 0 then 'text' - when TYPE = 1 then 'int' - when TYPE = 2 then 'binary' + when "TYPE" = 0 then 'text' + when "TYPE" = 1 then 'int' + when "TYPE" = 2 then 'binary' end - ) as TYPE, - ROW_NUMBER () OVER (ORDER BY NM_ID DESC) as rowNo + ) as "TYPE", + ROW_NUMBER () OVER (ORDER BY "NM_ID" DESC) as rowNo FROM tb_biz_meta_name - order by NM_ID + order by "NM_ID" limit {perPage} offset ({perPage} * {curPage}) - ) as t on p.NM_ID = t.NM_ID + ) as t on p."NM_ID" = t."NM_ID" """ total_cnt_query = "SELECT count(*) as totalCount FROM tb_biz_meta_name" v_meta_name_query = "SELECT * FROM v_biz_meta_name;" diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index 28f10685..cc9f4f4a 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -16,10 +16,10 @@ def api(update: UpdateBizMeta) -> Dict: db = connect_db(config.db_type, config.db_info) for data in update.dataList: query = f'UPDATE tb_biz_meta\ - SET item_id = {convert_data(data["itemId"])},\ - item_val = {convert_data(data["itemVal"])}\ - WHERE biz_dataset_id = {convert_data(update.bizDatasetId)} AND \ - item_id = {convert_data(data["itemId"])};' + SET "ITEM_ID" = {convert_data(data["itemId"])},\ + "ITEM_VAL" = {convert_data(data["itemVal"])}\ + WHERE "BIZ_DATASET_ID" = {convert_data(update.bizDatasetId)} AND \ + "ITEM_ID" = {convert_data(data["itemId"])};' db.execute(query) except Exception as err: diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index f1db13a5..05f5d0cd 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -8,17 +8,17 @@ class UpdateCategory(BaseModel): - NODE_ID: str = Field(alias="NODE_ID") - NODE_NAME: str = Field(alias="NODE_NAME") + node_id: str = Field(alias="node_id") + node_nm: str = Field(alias="node_name") # todo: 수정 필요 def api(update: UpdateCategory) -> Dict: query = f'UPDATE tb_category\ - SET PRNTS_ID = {convert_data(uuid.uuid4())},\ - NODE_ID = {convert_data(update.NODE_ID)},\ - NODE_NAME = {convert_data(update.NODE_NAME)}\ - WHERE NODE_ID = {convert_data(update.NODE_ID)};' + SET "PRNTS_ID" = {convert_data(uuid.uuid4())},\ + "NODE_ID" = {convert_data(update.node_id)},\ + "NODE_NM" = {convert_data(update.node_nm)}\ + WHERE "NODE_ID" = {convert_data(update.node_id)};' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index d784437a..75c9fdac 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -8,20 +8,20 @@ class UpdatetMetaName(BaseModel): subscribed: bool - KOR_NM: str = Field(alias="kor_name") - ENG_NM: str = Field(alias="eng_name") - SHOW_ODRG: int = Field(alias="show_order") - NM_ID: str = Field(alias="name_id") - TYPE: int = Field(alias="type") + kor_nm: str = Field(alias="kor_name") + eng_nm: str = Field(alias="eng_name") + show_odrg: int = Field(alias="show_order") + nm_id: str = Field(alias="name_id") + type: int = Field(alias="type") def api(update: UpdatetMetaName) -> Dict: query = f'UPDATE tb_biz_meta_name\ - SET KOR_NM = {convert_data(update.KOR_NM)},\ - ENG_NM = {convert_data(update.ENG_NM)},\ - SHOW_ODRG = {convert_data(update.SHOW_ODRG)},\ - TYPE= {convert_data(update.TYPE)}\ - WHERE NM_ID = {convert_data(update.NM_ID)};'\ + SET "KOR_NM" = {convert_data(update.kor_nm)},\ + "ENG_NM" = {convert_data(update.eng_nm)},\ + "SHOW_ODRG" = {convert_data(update.show_odrg)},\ + "TYPE"= {convert_data(update.type)}\ + WHERE "NM_ID" = {convert_data(update.nm_id)};' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 9d6789cf..66d06419 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -8,20 +8,20 @@ def api() -> Dict: meta_name_query = """ select case - when (select tbmm.NM_ID from tb_biz_meta_map tbmm where tbmn.NM_ID = tbmm.NM_ID) is null then 0 + when (select tbmm."NM_ID" from tb_biz_meta_map tbmm where tbmn."NM_ID" = tbmm."NM_ID") is null then 0 else 1 end as use_meta, - tbmn.KOR_NM, - tbmn.ENG_NM, - tbmn.SHOW_ODRG, + tbmn."KOR_NM", + tbmn."ENG_NM", + tbmn."SHOW_ODRG", case - when tbmn.TYPE = 0 then 'text' - when tbmn.TYPE = 1 then 'int' - when tbmn.TYPE = 2 then 'binary' + when tbmn."TYPE" = 0 then 'text' + when tbmn."TYPE" = 1 then 'int' + when tbmn."TYPE" = 2 then 'binary' end as type, - tbmn.NM_ID + tbmn."NM_ID" from tb_biz_meta_name tbmn - order by tbmn.NM_ID;""" + order by tbmn."NM_ID";""" try: db = connect_db(config.db_type, config.db_info) From 1c6bfecb2d6e357456ca7247475a8ce773ad70c0 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 19 May 2022 14:20:13 +0900 Subject: [PATCH 052/236] =?UTF-8?q?feat=20:=20=EC=8B=A4=ED=96=89,=20?= =?UTF-8?q?=EC=A4=91=EC=A7=80,=20safe=20=EC=8B=A4=ED=96=89=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AIPLATFORM-284 --- API-ROUTER/safe_start.sh | 57 +++++++++++++++++++++++++++++++++++++++ API-ROUTER/start.sh | 24 +++++++++++++++++ API-ROUTER/stop.sh | 47 ++++++++++++++++++++++++++++++++ API-SERVICE/safe_start.sh | 57 +++++++++++++++++++++++++++++++++++++++ API-SERVICE/start.sh | 24 +++++++++++++++++ API-SERVICE/stop.sh | 47 ++++++++++++++++++++++++++++++++ 6 files changed, 256 insertions(+) create mode 100644 API-ROUTER/safe_start.sh create mode 100644 API-ROUTER/start.sh create mode 100644 API-ROUTER/stop.sh create mode 100644 API-SERVICE/safe_start.sh create mode 100644 API-SERVICE/start.sh create mode 100644 API-SERVICE/stop.sh diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh new file mode 100644 index 00000000..16477167 --- /dev/null +++ b/API-ROUTER/safe_start.sh @@ -0,0 +1,57 @@ +app_name=API-Router +router_host=$1 +router_port=$2 + +input() { + if [[ $router_host == "" ]];then + router_host=192.168.101.43 + fi + if [[ $router_port == "" ]];then + router_port=18000 + fi +} + +router_stop() { + app=$( ps -ef | grep python | grep server.py | grep ${router_host} | grep ${router_port} | awk '{print $2}' ) + if [[ $app != "" ]];then + exit_app="kill -9 ${app}" + echo "Stop Command ( router ) : "${exit_app} + $exit_app + else + echo "Not Found application. ( router )" + fi +} + +uvicorn_stop() { + uvicorn=$( netstat -nlp | grep ${router_host}':'${router_port} | awk '{print $7}' | tr "/" "\n" ) + if [[ $uvicorn != "" ]];then + for i in $uvicorn + do + if [[ ${i} == *python* ]];then + continue + fi + exit_uvicorn="kill -9 ${i}" + echo "Stop Command ( uvicorn ) : "${exit_uvicorn} + $exit_uvicorn + done + else + echo "Not Found application. ( uvicorn )" + fi +} + +router_start() { + source_path="$( cd "$( dirname "$0" )" && pwd -P )" + router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + echo "Start Command : ${router_exec}" + nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & +} + +echo "########## Safe Start (${app_name}) ##########" +echo "========== STOP ${app_name} ==========" +input +router_stop +sleep 2 +uvicorn_stop + +echo "========== START ${app_name} ==========" +router_start diff --git a/API-ROUTER/start.sh b/API-ROUTER/start.sh new file mode 100644 index 00000000..4e68861e --- /dev/null +++ b/API-ROUTER/start.sh @@ -0,0 +1,24 @@ +app_name=API-Router +router_host=$1 +router_port=$2 + +input() { + if [[ $router_host == "" ]];then + router_host=192.168.101.43 + fi + if [[ $router_port == "" ]];then + router_port=18000 + fi +} + +router_start() { + source_path="$( cd "$( dirname "$0" )" && pwd -P )" + router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + echo "Start Command : ${router_exec}" + nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & +} + +echo "########## Start Application (${app_name}) ##########" +echo "========== START ${app_name} ==========" +input +router_start diff --git a/API-ROUTER/stop.sh b/API-ROUTER/stop.sh new file mode 100644 index 00000000..cf2464f1 --- /dev/null +++ b/API-ROUTER/stop.sh @@ -0,0 +1,47 @@ +app_name=API-Router +router_host=$1 +router_port=$2 + +input() { + if [[ $router_host == "" ]];then + router_host=192.168.101.43 + fi + if [[ $router_port == "" ]];then + router_port=18000 + fi +} + +router_stop() { + app=$( ps -ef | grep python | grep server.py | grep ${router_host} | grep ${router_port} | awk '{print $2}' ) + if [[ $app != "" ]];then + exit_app="kill -9 ${app}" + echo "Stop Command ( router ) : "${exit_app} + $exit_app + else + echo "Not Found application. ( router )" + fi +} + +uvicorn_stop() { + uvicorn=$( netstat -nlp | grep ${router_host}':'${router_port} | awk '{print $7}' | tr "/" "\n" ) + if [[ $uvicorn != "" ]];then + for i in $uvicorn + do + if [[ ${i} == *python* ]];then + continue + fi + exit_uvicorn="kill -9 ${i}" + echo "Stop Command ( uvicorn ) : "${exit_uvicorn} + $exit_uvicorn + done + else + echo "Not Found application. ( uvicorn )" + fi +} + +echo "########## Stop Application (${app_name}) ##########" +echo "========== STOP ${app_name} ==========" +input +router_stop +sleep 2 +uvicorn_stop diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh new file mode 100644 index 00000000..0e1cda03 --- /dev/null +++ b/API-SERVICE/safe_start.sh @@ -0,0 +1,57 @@ +app_name=API-Service +router_host=$1 +router_port=$2 + +input() { + if [[ $router_host == "" ]];then + router_host=192.168.101.44 + fi + if [[ $router_port == "" ]];then + router_port=19000 + fi +} + +router_stop() { + app=$( ps -ef | grep python | grep server.py | grep ${router_host} | grep ${router_port} | awk '{print $2}' ) + if [[ $app != "" ]];then + exit_app="kill -9 ${app}" + echo "Stop Command ( router ) : "${exit_app} + $exit_app + else + echo "Not Found application. ( router )" + fi +} + +uvicorn_stop() { + uvicorn=$( netstat -nlp | grep ${router_host}':'${router_port} | awk '{print $7}' | tr "/" "\n" ) + if [[ $uvicorn != "" ]];then + for i in $uvicorn + do + if [[ ${i} == *python* ]];then + continue + fi + exit_uvicorn="kill -9 ${i}" + echo "Stop Command ( uvicorn ) : "${exit_uvicorn} + $exit_uvicorn + done + else + echo "Not Found application. ( uvicorn )" + fi +} + +router_start() { + source_path="$( cd "$( dirname "$0" )" && pwd -P )" + router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + echo "Start Command : ${router_exec}" + nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & +} + +echo "########## Safe Start (${app_name}) ##########" +echo "========== STOP ${app_name} ==========" +input +router_stop +sleep 2 +uvicorn_stop + +echo "========== START ${app_name} ==========" +router_start diff --git a/API-SERVICE/start.sh b/API-SERVICE/start.sh new file mode 100644 index 00000000..fefe6a5f --- /dev/null +++ b/API-SERVICE/start.sh @@ -0,0 +1,24 @@ +app_name=API-Service +router_host=$1 +router_port=$2 + +input() { + if [[ $router_host == "" ]];then + router_host=192.168.101.44 + fi + if [[ $router_port == "" ]];then + router_port=19000 + fi +} + +router_start() { + source_path="$( cd "$( dirname "$0" )" && pwd -P )" + router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + echo "Start Command : ${router_exec}" + nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & +} + +echo "########## Start Application (${app_name}) ##########" +echo "========== START ${app_name} ==========" +input +router_start diff --git a/API-SERVICE/stop.sh b/API-SERVICE/stop.sh new file mode 100644 index 00000000..02161f17 --- /dev/null +++ b/API-SERVICE/stop.sh @@ -0,0 +1,47 @@ +app_name=API-Service +router_host=$1 +router_port=$2 + +input() { + if [[ $router_host == "" ]];then + router_host=192.168.101.44 + fi + if [[ $router_port == "" ]];then + router_port=19000 + fi +} + +router_stop() { + app=$( ps -ef | grep python | grep server.py | grep ${router_host} | grep ${router_port} | awk '{print $2}' ) + if [[ $app != "" ]];then + exit_app="kill -9 ${app}" + echo "Stop Command ( router ) : "${exit_app} + $exit_app + else + echo "Not Found application. ( router )" + fi +} + +uvicorn_stop() { + uvicorn=$( netstat -nlp | grep ${router_host}':'${router_port} | awk '{print $7}' | tr "/" "\n" ) + if [[ $uvicorn != "" ]];then + for i in $uvicorn + do + if [[ ${i} == *python* ]];then + continue + fi + exit_uvicorn="kill -9 ${i}" + echo "Stop Command ( uvicorn ) : "${exit_uvicorn} + $exit_uvicorn + done + else + echo "Not Found application. ( uvicorn )" + fi +} + +echo "########## Stop Application (${app_name}) ##########" +echo "========== STOP ${app_name} ==========" +input +router_stop +sleep 2 +uvicorn_stop From 20a84083c0fac2917d9371a9ba12a4f04ba2df89 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 19 May 2022 14:43:49 +0900 Subject: [PATCH 053/236] =?UTF-8?q?feat=20:=20requirement.txt=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 74562d67..ed115be4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,5 @@ uvicorn==0.16.0 paramiko==2.10.3 psycopg2==2.8.6 requests==2.27.1 -loguru==0.5.3 +retry +pyjwt From b9e747fedd1fbdc6d1969ac3a63ca2ef12aac416 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 23 May 2022 09:31:13 +0900 Subject: [PATCH 054/236] =?UTF-8?q?fix=20:=20API=20=EB=93=B1=EB=A1=9D=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=9D=91=EB=8B=B5=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +-- API-ROUTER/ApiRoute/ApiRoute.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index c797b60d..625a82e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -/API-ROUTER/.vscode/ -/.idea/ /venv/ __pycache__/ .DS_Store +.idea diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 2c79bc68..123a1e3a 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -136,14 +136,14 @@ def get_api_list(self) -> Dict: try: db = connect_db(config.db_type, config.db_info) - api_info, column_names = db.select(api_info_query) - api_params, column_names = db.select(api_params_query) + api_info, info_column_names = db.select(api_info_query) + api_params, params_column_names = db.select(api_params_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - api_info = make_res_msg("", "", api_info, column_names) - api_params = make_res_msg("", "", api_params, column_names) + api_info = make_res_msg("", "", api_info, info_column_names) + api_params = make_res_msg("", "", api_params, params_column_names) result = {"api_info": api_info, "api_params": api_params} return result @@ -153,14 +153,14 @@ def get_api(self, api_name: str) -> Dict: api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' try: db = connect_db(config.db_type, config.db_info) - api_info, column_names = db.select(api_info_query) - api_params, column_names = db.select(api_params_query) + api_info, info_column_names = db.select(api_info_query) + api_params, params_column_names = db.select(api_params_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - api_info = make_res_msg("", "", api_info, column_names) - api_params = make_res_msg("", "", api_params, column_names) + api_info = make_res_msg("", "", api_info, info_column_names) + api_params = make_res_msg("", "", api_params, params_column_names) result = {"api_info": api_info, "api_params": api_params} return result From 4c369a0d916c4f82261fa755c1e06cb5f402fe7c Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 23 May 2022 10:50:10 +0900 Subject: [PATCH 055/236] =?UTF-8?q?[AIPLATFORM-278]=20fix:=20json=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=B7=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 8 +++---- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 4 ++-- API-SERVICE/ApiList/meta/getBizMetaList.py | 2 +- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 4 ++-- API-SERVICE/ApiList/meta/insertBizMeta.py | 3 ++- API-SERVICE/ApiList/meta/insertMetaMap.py | 4 ++-- API-SERVICE/ApiList/meta/insertMetaName.py | 16 +++++++------- API-SERVICE/ApiList/meta/updateBizMeta.py | 4 ++-- API-SERVICE/ApiList/meta/updateCategory.py | 12 +++++----- API-SERVICE/ApiList/meta/updateMetaName.py | 22 +++++++++---------- API-SERVICE/ApiList/meta/useMetaNameList.py | 2 +- 11 files changed, 41 insertions(+), 40 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 112aa78a..d1a1f57e 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -3,19 +3,19 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel, Field +from pydantic import BaseModel from fastapi.logger import logger class addChildCategory(BaseModel): - prnts_id: str = Field(alias="parent_id") - node_name: str = Field(alias="node_name") + PRNTS_ID: str + NODE_NM: str # todo: 수정 필요 def api(insert: addChildCategory) -> Dict: query = f'INSERT INTO tb_category ("NODE_NM", "PRNTS_ID", "NODE_ID")\ - VALUES ({convert_data(insert.node_name)},{convert_data(insert.prnts_id)},{convert_data(uuid.uuid4())});' + VALUES ({convert_data(insert.NODE_NM)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index e1cafe9c..5af0bbd1 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -5,7 +5,7 @@ from Utils.DataBaseUtil import convert_data -def api(datasetId: str) -> Dict: +def api(BIZ_DATASET_ID: str) -> Dict: query = f'''select T."BIZ_DATASET_ID" as "rowId", array_agg(T."KOR_NM") as "KOR_NM", array_agg(T."ENG_NM") as "ENG_NM", @@ -23,7 +23,7 @@ def api(datasetId: str) -> Dict: from tb_biz_meta tbm right join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" left join tb_biz_meta_name tbmn on tbmm."NM_ID" = tbmn."NM_ID" - where "BIZ_DATASET_ID" = {convert_data(datasetId)} + where "BIZ_DATASET_ID" = {convert_data(BIZ_DATASET_ID)} order by "BIZ_DATASET_ID", "ITEM_ID") T group by "BIZ_DATASET_ID" order by "BIZ_DATASET_ID";''' diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 0aa7b4c7..a61787a6 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -11,7 +11,7 @@ def api() -> Dict: array_agg(T."ITEM_ID") as columnKey from (select "BIZ_DATASET_ID", tbm."ITEM_ID", tbm."ITEM_VAL", tbmm."NM_ID", "KOR_NM", "ENG_NM" from tb_biz_meta tbm - right join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" + left join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" left join tb_biz_meta_name tbmn on tbmm."NM_ID" = tbmn."NM_ID" order by "BIZ_DATASET_ID", "ITEM_ID") T group by "BIZ_DATASET_ID" diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index bb14d009..eab84a3f 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -5,8 +5,8 @@ from fastapi.logger import logger -def api(nameId: str) -> Dict: - query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(nameId)}' +def api(NM_ID: str) -> Dict: + query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(NM_ID)}' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index 70f20188..0391d2d1 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -13,8 +13,9 @@ def api(biz_meta_list: list) -> Dict: try: db = connect_db(config.db_type, config.db_info) for biz_meta in biz_meta_list: + item_id, item_val = tuple(biz_meta.values()) query = 'INSERT INTO tb_biz_meta ("BIZ_DATASET_ID", "ITEM_ID", "ITEM_VAL" )' + \ - f'VALUES ({convert_data(uid)},{convert_data(biz_meta["itemId"])},{convert_data(biz_meta["itemVal"])});' + f'VALUES ({convert_data(uid)},{convert_data(item_id)},{convert_data(item_val)});' db.execute(query) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 33b670a4..4a03794a 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -13,13 +13,13 @@ def api() -> Dict: meta_map_query = "SELECT * FROM tb_biz_meta_map" map_item_query = """ select distinct - cast(meta_map."ITEM_ID" as INT) as item_id, + cast(meta_map."ITEM_ID" as INT) as ITEM_ID, tbmn."ENG_NM" from tb_biz_meta_name tbmn left join tb_biz_meta_map meta_map on tbmn."NM_ID" = meta_map."NM_ID" - order by item_id asc + order by ITEM_ID asc """ try: diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index a72a09a7..3124baa9 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -3,22 +3,22 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel, Field +from pydantic import BaseModel class InsertMetaName(BaseModel): subscribed: bool - kor_nm: str = Field(alias="kor_name") - eng_nm: str = Field(alias="eng_name") - show_odrg: int = Field(alias="show_order") - nm_id: str = Field(alias="name_id") - type: int = Field(alias="type") + KOR_NM: str + ENG_NM: str + SHOW_ODRG: int + NM_ID: str + TYPE: int def api(insert: InsertMetaName) -> Dict: query = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ - VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm)}, {convert_data(insert.show_odrg)},\ - (SELECT concat(\'i\', CAST(substring(max("NM_ID"), 2) AS INT) + 1) AS name_id FROM tb_biz_meta_name), {convert_data(insert.type)});' + VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, {convert_data(insert.SHOW_ODRG)},\ + (SELECT concat(\'i\', CAST(substring(max("NM_ID"), 2) AS INT) + 1) AS NM_ID FROM tb_biz_meta_name), {convert_data(insert.TYPE)});' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index cc9f4f4a..d144da59 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -7,7 +7,7 @@ class UpdateBizMeta(BaseModel): - bizDatasetId: str + BIZ_DATASET_ID: str dataList: list @@ -18,7 +18,7 @@ def api(update: UpdateBizMeta) -> Dict: query = f'UPDATE tb_biz_meta\ SET "ITEM_ID" = {convert_data(data["itemId"])},\ "ITEM_VAL" = {convert_data(data["itemVal"])}\ - WHERE "BIZ_DATASET_ID" = {convert_data(update.bizDatasetId)} AND \ + WHERE "BIZ_DATASET_ID" = {convert_data(update.BIZ_DATASET_ID)} AND \ "ITEM_ID" = {convert_data(data["itemId"])};' db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 05f5d0cd..fbff813b 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -2,23 +2,23 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel, Field +from pydantic import BaseModel from fastapi.logger import logger from typing import Dict class UpdateCategory(BaseModel): - node_id: str = Field(alias="node_id") - node_nm: str = Field(alias="node_name") + NODE_ID: str + NODE_NM: str # todo: 수정 필요 def api(update: UpdateCategory) -> Dict: query = f'UPDATE tb_category\ SET "PRNTS_ID" = {convert_data(uuid.uuid4())},\ - "NODE_ID" = {convert_data(update.node_id)},\ - "NODE_NM" = {convert_data(update.node_nm)}\ - WHERE "NODE_ID" = {convert_data(update.node_id)};' + "NODE_ID" = {convert_data(update.NODE_ID)},\ + "NODE_NM" = {convert_data(update.NODE_NM)}\ + WHERE "NODE_ID" = {convert_data(update.NODE_ID)};' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 75c9fdac..83d29fbf 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -2,26 +2,26 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel, Field +from pydantic import BaseModel from fastapi.logger import logger class UpdatetMetaName(BaseModel): subscribed: bool - kor_nm: str = Field(alias="kor_name") - eng_nm: str = Field(alias="eng_name") - show_odrg: int = Field(alias="show_order") - nm_id: str = Field(alias="name_id") - type: int = Field(alias="type") + KOR_NM: str + ENG_NM: str + SHOW_ODRG: int + NM_ID: str + TYPE: int def api(update: UpdatetMetaName) -> Dict: query = f'UPDATE tb_biz_meta_name\ - SET "KOR_NM" = {convert_data(update.kor_nm)},\ - "ENG_NM" = {convert_data(update.eng_nm)},\ - "SHOW_ODRG" = {convert_data(update.show_odrg)},\ - "TYPE"= {convert_data(update.type)}\ - WHERE "NM_ID" = {convert_data(update.nm_id)};' + SET "KOR_NM" = {convert_data(update.KOR_NM)},\ + "ENG_NM" = {convert_data(update.ENG_NM)},\ + "SHOW_ODRG" = {convert_data(update.SHOW_ODRG)},\ + "TYPE"= {convert_data(update.TYPE)}\ + WHERE "NM_ID" = {convert_data(update.NM_ID)};' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 66d06419..2f72bed3 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -18,7 +18,7 @@ def api() -> Dict: when tbmn."TYPE" = 0 then 'text' when tbmn."TYPE" = 1 then 'int' when tbmn."TYPE" = 2 then 'binary' - end as type, + end as "TYPE", tbmn."NM_ID" from tb_biz_meta_name tbmn order by tbmn."NM_ID";""" From 7fad250b6b658a0ed8b534d040009b81d84d4373 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 23 May 2022 13:52:24 +0900 Subject: [PATCH 056/236] =?UTF-8?q?feat=20:=20JWT=20=EB=B3=B5=ED=98=B8?= =?UTF-8?q?=ED=99=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +-- API-SERVICE/ApiList/meta/addChildCategory.py | 8 +++++--- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 7 +++++-- API-SERVICE/ApiList/meta/getBizMetaList.py | 7 +++++-- API-SERVICE/ApiList/meta/getCategoryList.py | 7 +++++-- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 7 +++++-- API-SERVICE/ApiList/meta/insertBizMeta.py | 7 +++++-- API-SERVICE/ApiList/meta/insertMetaMap.py | 7 +++++-- API-SERVICE/ApiList/meta/insertMetaName.py | 7 +++++-- API-SERVICE/ApiList/meta/metaMapList.py | 7 +++++-- API-SERVICE/ApiList/meta/metaNameList.py | 7 +++++-- API-SERVICE/ApiList/meta/updateBizMeta.py | 7 +++++-- API-SERVICE/ApiList/meta/updateCategory.py | 7 +++++-- API-SERVICE/ApiList/meta/updateMetaName.py | 7 +++++-- API-SERVICE/ApiList/meta/useMetaNameList.py | 7 +++++-- API-SERVICE/ApiService/ApiServiceConfig.py | 2 ++ API-SERVICE/Utils/CommonUtil.py | 16 ++++++++++++++-- API-SERVICE/conf/config.ini | 4 ++++ 18 files changed, 91 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index c797b60d..625a82e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -/API-ROUTER/.vscode/ -/.idea/ /venv/ __pycache__/ .DS_Store +.idea diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index d1a1f57e..a773a8aa 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -1,10 +1,11 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from fastapi.logger import logger +from starlette.requests import Request class addChildCategory(BaseModel): @@ -13,7 +14,9 @@ class addChildCategory(BaseModel): # todo: 수정 필요 -def api(insert: addChildCategory) -> Dict: +def api(insert: addChildCategory, request: Request) -> Dict: + user_info = get_token_info(request.headers) + query = f'INSERT INTO tb_category ("NODE_NM", "PRNTS_ID", "NODE_ID")\ VALUES ({convert_data(insert.NODE_NM)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' @@ -24,6 +27,5 @@ def api(insert: addChildCategory) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - # make response result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 5af0bbd1..7039392c 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,11 +1,14 @@ from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data +from starlette.requests import Request -def api(BIZ_DATASET_ID: str) -> Dict: +def api(BIZ_DATASET_ID: str, request: Request) -> Dict: + user_info = get_token_info(request.headers) + query = f'''select T."BIZ_DATASET_ID" as "rowId", array_agg(T."KOR_NM") as "KOR_NM", array_agg(T."ENG_NM") as "ENG_NM", diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index a61787a6..c5a448f1 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,10 +1,13 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from fastapi.logger import logger +from starlette.requests import Request -def api() -> Dict: +def api(request: Request) -> Dict: + user_info = get_token_info(request.headers) + meta_name_query = ''' select T."BIZ_DATASET_ID" as rowId, array_agg(T."ITEM_VAL") as data, diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 1d2eeb6a..1fdc3778 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -1,10 +1,13 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from fastapi.logger import logger +from starlette.requests import Request -def api() -> Dict: +def api(request: Request) -> Dict: + user_info = get_token_info(request.headers) + category_query = 'select * \ from tb_category \ order by "PRNTS_ID", "NODE_ID";' diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index eab84a3f..7f941c49 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -1,11 +1,14 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data from fastapi.logger import logger +from starlette.requests import Request -def api(NM_ID: str) -> Dict: +def api(NM_ID: str, request: Request) -> Dict: + user_info = get_token_info(request.headers) + query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(NM_ID)}' try: diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index 0391d2d1..781fe032 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -1,12 +1,15 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data from fastapi.logger import logger +from starlette.requests import Request -def api(biz_meta_list: list) -> Dict: +def api(biz_meta_list: list, request: Request) -> Dict: + user_info = get_token_info(request.headers) + uid = uuid.uuid4() biz_meta_query = 'SELECT "ITEM_ID" as itemId, "ITEM_VAL" as itemVal FROM tb_biz_meta;' diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 4a03794a..8fed0386 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -1,11 +1,14 @@ from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data +from starlette.requests import Request -def api() -> Dict: +def api(request: Request) -> Dict: + user_info = get_token_info(request.headers) + view_col = ['"BIZ_DATASET_ID"'] drop_view_query = "DROP VIEW v_biz_meta_wrap" truncate_query = "TRUNCATE tb_biz_meta_map;" diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 3124baa9..655c5f09 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -1,9 +1,10 @@ from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel +from starlette.requests import Request class InsertMetaName(BaseModel): @@ -15,7 +16,9 @@ class InsertMetaName(BaseModel): TYPE: int -def api(insert: InsertMetaName) -> Dict: +def api(insert: InsertMetaName, request: Request) -> Dict: + user_info = get_token_info(request.headers) + query = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, {convert_data(insert.SHOW_ODRG)},\ (SELECT concat(\'i\', CAST(substring(max("NM_ID"), 2) AS INT) + 1) AS NM_ID FROM tb_biz_meta_name), {convert_data(insert.TYPE)});' diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index f0012c87..cba26d32 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -1,10 +1,13 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from fastapi.logger import logger +from starlette.requests import Request -def api() -> Dict: +def api(request: Request) -> Dict: + user_info = get_token_info(request.headers) + meta_map_query = """ select tbmn."KOR_NM", diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index be85ed1b..8d35c105 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -1,10 +1,13 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from fastapi.logger import logger +from starlette.requests import Request -def api(perPage: int, curPage: int) -> Dict: +def api(perPage: int, curPage: int, request: Request) -> Dict: + user_info = get_token_info(request.headers) + curPage = curPage - 1 meta_name_query = f""" select diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index d144da59..cbc93538 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -1,9 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from fastapi.logger import logger +from starlette.requests import Request class UpdateBizMeta(BaseModel): @@ -11,7 +12,9 @@ class UpdateBizMeta(BaseModel): dataList: list -def api(update: UpdateBizMeta) -> Dict: +def api(update: UpdateBizMeta, request: Request) -> Dict: + user_info = get_token_info(request.headers) + try: db = connect_db(config.db_type, config.db_info) for data in update.dataList: diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index fbff813b..92bed3b1 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,10 +1,11 @@ import uuid from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from fastapi.logger import logger from typing import Dict +from starlette.requests import Request class UpdateCategory(BaseModel): @@ -13,7 +14,9 @@ class UpdateCategory(BaseModel): # todo: 수정 필요 -def api(update: UpdateCategory) -> Dict: +def api(update: UpdateCategory, request: Request) -> Dict: + user_info = get_token_info(request.headers) + query = f'UPDATE tb_category\ SET "PRNTS_ID" = {convert_data(uuid.uuid4())},\ "NODE_ID" = {convert_data(update.NODE_ID)},\ diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 83d29fbf..c045ea68 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -1,9 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from fastapi.logger import logger +from starlette.requests import Request class UpdatetMetaName(BaseModel): @@ -15,7 +16,9 @@ class UpdatetMetaName(BaseModel): TYPE: int -def api(update: UpdatetMetaName) -> Dict: +def api(update: UpdatetMetaName, request: Request) -> Dict: + user_info = get_token_info(request.headers) + query = f'UPDATE tb_biz_meta_name\ SET "KOR_NM" = {convert_data(update.KOR_NM)},\ "ENG_NM" = {convert_data(update.ENG_NM)},\ diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 2f72bed3..daaacb6f 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -1,10 +1,13 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_token_info from fastapi.logger import logger +from starlette.requests import Request -def api() -> Dict: +def api(request: Request) -> Dict: + user_info = get_token_info(request.headers) + meta_name_query = """ select case diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 2de4d4f2..7c0c82f6 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -14,5 +14,7 @@ class ApiServiceConfig: api_config: Dict + secret_info: Dict + config = ApiServiceConfig diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 1b826514..04047e83 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,14 +1,16 @@ import os import configparser import argparse + +import starlette.datastructures from fastapi.logger import logger from pathlib import Path -from tkinter.messagebox import NO -from typing import Any +from typing import Any, Dict from ApiService.ApiServiceConfig import config from ConnectManager import PostgreManager from retry import retry import psycopg2 +import jwt def get_config(root_path: str, config_name: str): @@ -43,6 +45,7 @@ def prepare_config() -> None: config.server_host = args.host config.server_port = args.port config.db_info = api_router_cfg[config.db_type] + config.secret_info = api_router_cfg["secret_info"] @retry(psycopg2.OperationalError, delay=1, tries=3) @@ -74,3 +77,12 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): result = {"result": result, "errorMessage": errorMessage, "body": data, "header": header_list} return result + + +def get_token_info(headers: starlette.datastructures.Headers): + user_info = None + if config.secret_info["name"] in headers: + user_info = jwt.decode(headers[config.secret_info["name"]], + config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) + logger.debug(f'user info : {user_info}') + return user_info diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/config.ini index 5fd4457f..dc13f89e 100644 --- a/API-SERVICE/conf/config.ini +++ b/API-SERVICE/conf/config.ini @@ -10,3 +10,7 @@ user = dpme password = hello.meta12#$ database = dataportal schema = meta + +[secret_info] +name = user-katech-access-token +secret = jwt-secrect-b-iris \ No newline at end of file From a75154bde08ea0b5e5e4e51a89f219be018d2f53 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 23 May 2022 14:05:39 +0900 Subject: [PATCH 057/236] =?UTF-8?q?fix=20:=20=ED=95=A8=EC=88=98=EB=AA=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + API-ROUTER/ApiRoute/ApiRoute.py | 4 ++-- API-ROUTER/Utils/CommonUtil.py | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 625a82e3..8e247578 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ __pycache__/ .DS_Store .idea +*.log diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 123a1e3a..2945cf12 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -4,7 +4,7 @@ from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg, get_user_info, save_file_for_reload +from Utils.CommonUtil import connect_db, make_res_msg, get_token_info, save_file_for_reload from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request @@ -211,7 +211,7 @@ async def route_api(self, request: Request) -> Dict: method = request.method content_type = request.headers.get("Content-Type") - user_info = get_user_info(request.headers) + user_info = get_token_info(request.headers) logger.debug( f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index a865e512..8ed146d5 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -1,6 +1,8 @@ import os import configparser import argparse + +import starlette.datastructures from fastapi.logger import logger from pathlib import Path from typing import Any, Dict @@ -80,7 +82,7 @@ def make_res_msg(result, errorMessage, data=None, column_names=None): return result -def get_user_info(headers: Dict): +def get_token_info(headers: starlette.datastructures.Headers): user_info = None if config.secret_info["name"] in headers: user_info = jwt.decode(headers[config.secret_info["name"]], From 1c30708ca6dac1556aa63ac674eaf1a6b7b4b003 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 24 May 2022 13:03:28 +0900 Subject: [PATCH 058/236] =?UTF-8?q?[AIPLATFORM-278]=20fix:=20parameter,=20?= =?UTF-8?q?json=20=ED=8F=AC=EB=A7=B7=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 6 +++--- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 4 ++-- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 4 ++-- API-SERVICE/ApiList/meta/insertMetaName.py | 14 ++++++------- API-SERVICE/ApiList/meta/updateBizMeta.py | 2 +- API-SERVICE/ApiList/meta/updateCategory.py | 10 +++++----- API-SERVICE/ApiList/meta/updateMetaName.py | 20 +++++++++---------- 7 files changed, 30 insertions(+), 30 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index a773a8aa..584215e4 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -9,8 +9,8 @@ class addChildCategory(BaseModel): - PRNTS_ID: str - NODE_NM: str + parent_id: str + node_name: str # todo: 수정 필요 @@ -18,7 +18,7 @@ def api(insert: addChildCategory, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'INSERT INTO tb_category ("NODE_NM", "PRNTS_ID", "NODE_ID")\ - VALUES ({convert_data(insert.NODE_NM)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' + VALUES ({convert_data(insert.node_name)},{convert_data(insert.parent_id)},{convert_data(uuid.uuid4())});' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 7039392c..79484eec 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -6,7 +6,7 @@ from starlette.requests import Request -def api(BIZ_DATASET_ID: str, request: Request) -> Dict: +def api(datasetId: str, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'''select T."BIZ_DATASET_ID" as "rowId", @@ -26,7 +26,7 @@ def api(BIZ_DATASET_ID: str, request: Request) -> Dict: from tb_biz_meta tbm right join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" left join tb_biz_meta_name tbmn on tbmm."NM_ID" = tbmn."NM_ID" - where "BIZ_DATASET_ID" = {convert_data(BIZ_DATASET_ID)} + where "BIZ_DATASET_ID" = {convert_data(datasetId)} order by "BIZ_DATASET_ID", "ITEM_ID") T group by "BIZ_DATASET_ID" order by "BIZ_DATASET_ID";''' diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 7f941c49..d3efc73b 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -6,10 +6,10 @@ from starlette.requests import Request -def api(NM_ID: str, request: Request) -> Dict: +def api(nameId: str, request: Request) -> Dict: user_info = get_token_info(request.headers) - query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(NM_ID)}' + query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(nameId)}' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 655c5f09..bd26f621 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -3,24 +3,24 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field from starlette.requests import Request class InsertMetaName(BaseModel): subscribed: bool - KOR_NM: str - ENG_NM: str - SHOW_ODRG: int - NM_ID: str - TYPE: int + kor_name: str + eng_name: str + show_order: int + name_id: str + TYPE: int = Field(alias="type") # 예약어 때문에 alias로 처리 def api(insert: InsertMetaName, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ - VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, {convert_data(insert.SHOW_ODRG)},\ + VALUES ({convert_data(insert.kor_name)}, {convert_data(insert.eng_name)}, {convert_data(insert.show_order)},\ (SELECT concat(\'i\', CAST(substring(max("NM_ID"), 2) AS INT) + 1) AS NM_ID FROM tb_biz_meta_name), {convert_data(insert.TYPE)});' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index cbc93538..c61bba74 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -8,7 +8,7 @@ class UpdateBizMeta(BaseModel): - BIZ_DATASET_ID: str + bizDatasetId: str dataList: list diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 92bed3b1..70ec0f7b 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -9,8 +9,8 @@ class UpdateCategory(BaseModel): - NODE_ID: str - NODE_NM: str + node_id: str + node_name: str # todo: 수정 필요 @@ -19,9 +19,9 @@ def api(update: UpdateCategory, request: Request) -> Dict: query = f'UPDATE tb_category\ SET "PRNTS_ID" = {convert_data(uuid.uuid4())},\ - "NODE_ID" = {convert_data(update.NODE_ID)},\ - "NODE_NM" = {convert_data(update.NODE_NM)}\ - WHERE "NODE_ID" = {convert_data(update.NODE_ID)};' + "NODE_ID" = {convert_data(update.node_id)},\ + "NODE_NM" = {convert_data(update.node_name)}\ + WHERE "NODE_ID" = {convert_data(update.node_id)};' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index c045ea68..ff3b64e8 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -2,29 +2,29 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field from fastapi.logger import logger from starlette.requests import Request class UpdatetMetaName(BaseModel): subscribed: bool - KOR_NM: str - ENG_NM: str - SHOW_ODRG: int - NM_ID: str - TYPE: int + kor_name: str + eng_name: str + show_order: int + name_id: str + TYPE: int = Field(alias="type") def api(update: UpdatetMetaName, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'UPDATE tb_biz_meta_name\ - SET "KOR_NM" = {convert_data(update.KOR_NM)},\ - "ENG_NM" = {convert_data(update.ENG_NM)},\ - "SHOW_ODRG" = {convert_data(update.SHOW_ODRG)},\ + SET "KOR_NM" = {convert_data(update.kor_name)},\ + "ENG_NM" = {convert_data(update.eng_name)},\ + "SHOW_ODRG" = {convert_data(update.show_order)},\ "TYPE"= {convert_data(update.TYPE)}\ - WHERE "NM_ID" = {convert_data(update.NM_ID)};' + WHERE "NM_ID" = {convert_data(update.name_id)};' try: db = connect_db(config.db_type, config.db_info) From 94026107a983c88e6a2e387bb5969465b461ba07 Mon Sep 17 00:00:00 2001 From: cbc <39294675+cbccbs@users.noreply.github.com> Date: Tue, 24 May 2022 13:09:47 +0900 Subject: [PATCH 059/236] =?UTF-8?q?fix=20:=20gitignore=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 625a82e3..8e247578 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ __pycache__/ .DS_Store .idea +*.log From 36a1d67c51a2b0978e92dc1c15d1baac84f8dcd8 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 24 May 2022 16:41:40 +0900 Subject: [PATCH 060/236] =?UTF-8?q?refactor=20:=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{PostgreManager.py => PostgresManager.py} | 18 ++++----- API-ROUTER/ConnectManager/RemoteCmd.py | 12 +++--- API-ROUTER/ConnectManager/__init__.py | 2 +- API-ROUTER/Utils/CommonUtil.py | 37 +++++++++---------- API-ROUTER/Utils/RouteUtil.py | 23 +----------- API-SERVICE/ApiList/meta/insertMetaName.py | 2 +- API-SERVICE/ApiService/ApiService.py | 1 + .../{PostgreManager.py => PostgresManager.py} | 20 +++++----- API-SERVICE/ConnectManager/__init__.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 36 +++++++++--------- 10 files changed, 64 insertions(+), 89 deletions(-) rename API-ROUTER/ConnectManager/{PostgreManager.py => PostgresManager.py} (78%) rename API-SERVICE/ConnectManager/{PostgreManager.py => PostgresManager.py} (76%) diff --git a/API-ROUTER/ConnectManager/PostgreManager.py b/API-ROUTER/ConnectManager/PostgresManager.py similarity index 78% rename from API-ROUTER/ConnectManager/PostgreManager.py rename to API-ROUTER/ConnectManager/PostgresManager.py index e6461fcf..b7b6d861 100644 --- a/API-ROUTER/ConnectManager/PostgreManager.py +++ b/API-ROUTER/ConnectManager/PostgresManager.py @@ -1,10 +1,10 @@ import psycopg2 -from typing import List, Dict +from typing import List, Dict, Tuple, Any from fastapi.logger import logger from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query -class PostgreManager: +class PostgresManager: def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: self.host = host self.port = port @@ -19,21 +19,21 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - logger.debug("PostgreManager Connect.") + logger.debug("PostgresManager Connect.") return conn def execute(self, sql: str) -> None: self.cursor.execute(sql) self.conn.commit() - def select(self, sql: str, count: int = None) -> List[Dict]: + def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], List[Any]]: self.execute(sql) column_names = [desc[0] for desc in self.cursor.description] - if count == None: + if count is None: rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.debug(f'PostgreManager Select Execute. ({sql})') + logger.debug(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: @@ -43,17 +43,17 @@ def select(self, sql: str, count: int = None) -> List[Dict]: def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - logger.debug(f'PostgreManager Insert Execute. ({sql})') + logger.debug(f'PostgresManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - logger.debug(f'PostgreManager Update Execute. ({sql})') + logger.debug(f'PostgresManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - logger.debug(f'PostgreManager Delete Execute. ({sql})') + logger.debug(f'PostgresManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-ROUTER/ConnectManager/RemoteCmd.py b/API-ROUTER/ConnectManager/RemoteCmd.py index ac4c7ba2..7fe9ac10 100644 --- a/API-ROUTER/ConnectManager/RemoteCmd.py +++ b/API-ROUTER/ConnectManager/RemoteCmd.py @@ -3,21 +3,21 @@ class RemoteCmd: - def __init__(self, ip: str, port: int, id: str, password: str) -> None: - self.ssh = self.remote_connect(ip, port, id, password) + def __init__(self, ip: str, port: int, user_name: str, password: str) -> None: + self.ssh = self.remote_connect(ip, port, user_name, password) - def remote_connect(self, ip: str, port: int, id: str, password: str) -> paramiko.SSHClient: + def remote_connect(self, ip: str, port: int, user_name: str, password: str) -> paramiko.SSHClient: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - ssh.connect(ip, port=port, username=id, password=password) + ssh.connect(ip, port=port, username=user_name, password=password) return ssh def cmd_exec(self, cmd: str) -> str: _, stdout, _ = self.ssh.exec_command(cmd) lines = stdout.readlines() - resultData = ''.join(lines) + result_data = ''.join(lines) - return resultData + return result_data def __del__(self): self.ssh.close() diff --git a/API-ROUTER/ConnectManager/__init__.py b/API-ROUTER/ConnectManager/__init__.py index 3269347b..2c01a72a 100644 --- a/API-ROUTER/ConnectManager/__init__.py +++ b/API-ROUTER/ConnectManager/__init__.py @@ -1,2 +1,2 @@ from .RemoteCmd import * -from .PostgreManager import * +from .PostgresManager import * diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 8ed146d5..9883508e 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -1,29 +1,27 @@ import os import configparser import argparse - import starlette.datastructures from fastapi.logger import logger from pathlib import Path -from typing import Any, Dict +from typing import Any from ApiRoute.ApiRouteConfig import config -from ConnectManager import PostgreManager +from ConnectManager import PostgresManager from retry import retry import psycopg2 import jwt -import base64 def get_config(root_path: str, config_name: str): ano_cfg = {} - config = configparser.ConfigParser() - config.read(os.path.join(root_path, - f"API-ROUTER/conf/{config_name}"), encoding='utf-8') - for section in config.sections(): + conf = configparser.ConfigParser() + conf.read(os.path.join(root_path, + f"API-ROUTER/conf/{config_name}"), encoding='utf-8') + for section in conf.sections(): ano_cfg[section] = {} - for option in config.options(section): - ano_cfg[section][option] = config.get(section, option) + for option in conf.options(section): + ano_cfg[section][option] = conf.get(section, option) return ano_cfg @@ -54,9 +52,9 @@ def prepare_config() -> None: @retry(psycopg2.OperationalError, delay=1, tries=3) def connect_db(db_type, db_info): if db_type == "postgresql": - db = PostgreManager(host=db_info["host"], port=db_info["port"], - user=db_info["user"], password=db_info["password"], - database=db_info["database"], schema=db_info["schema"]) + db = PostgresManager(host=db_info["host"], port=db_info["port"], + user=db_info["user"], password=db_info["password"], + database=db_info["database"], schema=db_info["schema"]) else: raise Exception(f'Not Implemented. ({db_type})') return db @@ -67,19 +65,18 @@ def save_file_for_reload(): fd.write(" ") -def make_res_msg(result, errorMessage, data=None, column_names=None): +def make_res_msg(result, err_msg, data=None, column_names=None): header_list = [] for column_name in column_names: header = {"column_name": column_name} header_list.append(header) - result = None - if data == None or column_names == None: - result = {"result": result, "errorMessage": errorMessage} + if data is None or column_names is None: + res_msg = {"result": result, "errorMessage": err_msg} else: - result = {"result": result, "errorMessage": errorMessage, - "body": data, "header": header_list} - return result + res_msg = {"result": result, "errorMessage": err_msg, + "body": data, "header": header_list} + return res_msg def get_token_info(headers: starlette.datastructures.Headers): diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index bf788214..0460c0cb 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -1,29 +1,10 @@ import requests -import re from fastapi.logger import logger from ApiRoute.ApiRouteConfig import config from ConnectManager import RemoteCmd -def convert_url(url: str) -> str: - regex = "(?<=\$).*(?=\$)" - - logger.debug(f'Send Request Origin Url : {url}') - result = re.compile(regex).search(url) - if result != None: - try: - sub_data = config.url_info[result.group()] - except KeyError: - logger.error(f'The key does not exist. {result.group()}') - url = None - else: - url = url.replace(f'${result.group()}$', sub_data) - logger.debug(f'Send Request Convert Url : {url}') - return url - - def make_url(server_name: str, url: str): - print(server_name, url, config.api_server_info) for server_info in config.api_server_info: if server_info["name"] == server_name: if len(server_info["ip_port"]) != 0: @@ -37,9 +18,8 @@ def bypass_msg(api_info, params_query, body): method = api_info["method"] msg_type = api_info["msg_type"] - #url = convert_url(api_info["url"]) url = make_url(api_info["category"], api_info["url"]) - if url == None: + if url is None: return {"result": 0, "errorMessage": "The server info does not exist."} if method == "GET": @@ -62,7 +42,6 @@ def bypass_msg(api_info, params_query, body): else: logger.error(f'Method Not Allowed. {method}') return {"result": 0, "errorMessage": "Method Not Allowed."} - # print(response.__dict__) return response.json() diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index bd26f621..94cf7b92 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -13,7 +13,7 @@ class InsertMetaName(BaseModel): eng_name: str show_order: int name_id: str - TYPE: int = Field(alias="type") # 예약어 때문에 alias로 처리 + TYPE: int = Field(alias="type") # 예약어 때문에 alias 처리 def api(insert: InsertMetaName, request: Request) -> Dict: diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index 5318115e..45f30fda 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -3,6 +3,7 @@ from fastapi import APIRouter from ApiService.ApiServiceConfig import config + class ApiService: def __init__(self) -> None: self.router = APIRouter() diff --git a/API-SERVICE/ConnectManager/PostgreManager.py b/API-SERVICE/ConnectManager/PostgresManager.py similarity index 76% rename from API-SERVICE/ConnectManager/PostgreManager.py rename to API-SERVICE/ConnectManager/PostgresManager.py index 8f06b5e8..a344c84e 100644 --- a/API-SERVICE/ConnectManager/PostgreManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -1,10 +1,10 @@ import psycopg2 -from typing import List, Dict +from typing import List, Dict, Tuple, Any from fastapi.logger import logger from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query -class PostgreManager: +class PostgresManager: def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: self.host = host self.port = port @@ -19,22 +19,22 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - logger.debug("PostgreManager Connect.") + logger.debug("PostgresManager Connect.") return conn def execute(self, sql: str) -> None: self.cursor.execute(sql) self.conn.commit() - logger.debug(f'PostgreManager Execute Result. ({sql})') + logger.debug(f'PostgresManager Execute Result. ({sql})') - def select(self, sql: str, count: int = None) -> List[Dict]: + def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], List[Any]]: self.execute(sql) column_names = [desc[0] for desc in self.cursor.description] - if count == None: + if count is None: rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.debug(f'PostgreManager Select Execute. ({sql})') + logger.debug(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: @@ -44,18 +44,18 @@ def select(self, sql: str, count: int = None) -> List[Dict]: def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - logger.debug(f'PostgreManager Insert Execute. ({sql})') + logger.debug(f'PostgresManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - logger.debug(f'PostgreManager Update Execute. ({sql})') + logger.debug(f'PostgresManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - logger.debug(f'PostgreManager Delete Execute. ({sql})') + logger.debug(f'PostgresManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-SERVICE/ConnectManager/__init__.py b/API-SERVICE/ConnectManager/__init__.py index 7b9b6ae1..b5c0391e 100644 --- a/API-SERVICE/ConnectManager/__init__.py +++ b/API-SERVICE/ConnectManager/__init__.py @@ -1 +1 @@ -from .PostgreManager import * +from .PostgresManager import * diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 04047e83..ecd3888e 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,13 +1,12 @@ import os import configparser import argparse - import starlette.datastructures from fastapi.logger import logger from pathlib import Path -from typing import Any, Dict +from typing import Any from ApiService.ApiServiceConfig import config -from ConnectManager import PostgreManager +from ConnectManager import PostgresManager from retry import retry import psycopg2 import jwt @@ -16,13 +15,13 @@ def get_config(root_path: str, config_name: str): ano_cfg = {} - config = configparser.ConfigParser() - config.read(os.path.join(root_path, - f"API-SERVICE/conf/{config_name}"), encoding='utf-8') - for section in config.sections(): + conf = configparser.ConfigParser() + conf.read(os.path.join(root_path, + f"API-SERVICE/conf/{config_name}"), encoding='utf-8') + for section in conf.sections(): ano_cfg[section] = {} - for option in config.options(section): - ano_cfg[section][option] = config.get(section, option) + for option in conf.options(section): + ano_cfg[section][option] = conf.get(section, option) return ano_cfg @@ -51,9 +50,9 @@ def prepare_config() -> None: @retry(psycopg2.OperationalError, delay=1, tries=3) def connect_db(db_type, db_info): if db_type == "postgresql": - db = PostgreManager(host=db_info["host"], port=db_info["port"], - user=db_info["user"], password=db_info["password"], - database=db_info["database"], schema=db_info["schema"]) + db = PostgresManager(host=db_info["host"], port=db_info["port"], + user=db_info["user"], password=db_info["password"], + database=db_info["database"], schema=db_info["schema"]) else: raise Exception(f'Not Implemented. ({db_type})') return db @@ -64,19 +63,18 @@ def save_file_for_reload(): fd.write(" ") -def make_res_msg(result, errorMessage, data=None, column_names=None): +def make_res_msg(result, err_msg, data=None, column_names=None): header_list = [] for column_name in column_names: header = {"column_name": column_name} header_list.append(header) - result = None - if data == None or column_names == None: - result = {"result": result, "errorMessage": errorMessage} + if data is None or column_names is None: + res_msg = {"result": result, "errorMessage": err_msg} else: - result = {"result": result, "errorMessage": errorMessage, - "body": data, "header": header_list} - return result + res_msg = {"result": result, "errorMessage": err_msg, + "body": data, "header": header_list} + return res_msg def get_token_info(headers: starlette.datastructures.Headers): From c53f11112448269a18b623b13a801509e18eaae5 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 25 May 2022 14:28:04 +0900 Subject: [PATCH 061/236] =?UTF-8?q?feat=20:=20DB=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 76 +++++++++++++++++++-------------- API-ROUTER/Utils/CommonUtil.py | 1 + API-ROUTER/Utils/RouteUtil.py | 16 +++---- 3 files changed, 53 insertions(+), 40 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 2945cf12..a7896735 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -11,25 +11,25 @@ class ApiServerInfo(BaseModel): - name: str - ip_port: str - domain: str + nm: str + ip_adr: str + domn_nm: str class ApiParam(BaseModel): - api_name: str - param_name: str + api_nm: str + nm: str data_type: str - default_value: str + deflt_val: str class ApiInfo(BaseModel): - api_name: str - category: str + api_nm: str + ctgry: str url: str - method: str - command: str - bypass: str + meth: str + cmd: str + mode: str params: List[ApiParam] @@ -64,7 +64,7 @@ def set_route(self) -> None: for api in api_info: self.router.add_api_route( - f'/route/{api["category"]}/{api["api_name"]}', self.route_api, methods=[api["method"]], tags=[f'Route Category ({api["category"]})']) + f'/route/{api["CTGRY"]}/{api["API_NM"]}', self.route_api, methods=[api["METH"]], tags=[f'Route Category ({api["CTGRY"]})']) for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_info["sub_dir"]}/{api_name}.py' @@ -79,13 +79,16 @@ def set_route(self) -> None: def set_server_info(self, api_server_info: ApiServerInfo): try: db = connect_db(config.db_type, config.db_info) - db.insert("api_server_info", [api_server_info.__dict__]) + api_server_info = api_server_info.__dict__ + api_server_info_query = f'INSERT INTO api_server_info ("NM", "IP_ADR", "DOMN_NM") \ + VALUES ({convert_data(api_server_info["nm"])}, {convert_data(api_server_info["ip_adr"])}, {convert_data(api_server_info["domn_nm"])});' + db.execute(api_server_info_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: config.api_server_info, _ = db.select( - 'SELECT * FROM api_server_info') + 'SELECT * FROM api_server_info;') result = {"result": 1, "errorMessage": ""} return result @@ -106,7 +109,7 @@ def get_server_info(self, server_name: str): try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( - f'SELECT * FROM api_server_info WHERE name = {convert_data(server_name)};') + f'SELECT * FROM api_server_info WHERE "NM" = {convert_data(server_name)};') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -118,14 +121,14 @@ def get_server_info(self, server_name: str): def del_server_info(self, server_name: str): try: db = connect_db(config.db_type, config.db_info) - - db.delete("api_server_info", {"name": server_name}) + api_server_info_query = f'DELETE FROM api_server_info WHERE "NM" = {convert_data(server_name)};' + db.execute(api_server_info_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: config.api_server_info, _ = db.select( - 'SELECT * FROM api_server_info') + 'SELECT * FROM api_server_info;') result = {"result": 1, "errorMessage": ""} return result @@ -149,8 +152,8 @@ def get_api_list(self) -> Dict: return result def get_api(self, api_name: str) -> Dict: - api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' - api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' + api_info_query = f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)};' + api_params_query = f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};' try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select(api_info_query) @@ -178,10 +181,16 @@ def set_api(self, api_info: ApiInfo) -> Dict: else: insert_api_info[key] = value - db.insert("api_info", [insert_api_info]) + api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "URL", "METH", "CMD", "MODE") \ + VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, {convert_data(insert_api_info["url"])}, \ + {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, {convert_data(insert_api_info["mode"])});' + db.execute(api_info_query) if len(insert_api_params) != 0: - db.insert("api_params", insert_api_params) + api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ + VALUES ({convert_data(insert_api_params["api_nm"])}, {convert_data(insert_api_params["nm"])}, \ + {convert_data(insert_api_params["data_type"])}, {convert_data(insert_api_params["deflt_val"])});' + db.execute(api_params_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -195,8 +204,10 @@ def del_api(self, api_name: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) - db.delete("api_info", {"api_name": api_name}) - db.delete("api_params", {"api_name": api_name}) + api_info_query = f'DELETE FROM api_info WHERE "API_NM" = {convert_data(api_name)};' + db.execute(api_info_query) + api_params_query = f'DELETE FROM api_params WHERE "API_NM" = {convert_data(api_name)};' + db.execute(api_params_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -216,8 +227,8 @@ async def route_api(self, request: Request) -> Dict: logger.debug( f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') - api_info_query = f'SELECT * FROM api_info WHERE api_name = {convert_data(api_name)};' - api_params_query = f'SELECT * FROM api_params WHERE api_name = {convert_data(api_name)};' + api_info_query = f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)};' + api_params_query = f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};' try: db = connect_db(config.db_type, config.db_info) @@ -233,10 +244,10 @@ async def route_api(self, request: Request) -> Dict: api_info = api_info[0] if content_type == "application/json": body = await request.json() - api_info["msg_type"] = "JSON" + api_info["MSG_TYPE"] = "JSON" else: body = await request.body() - api_info["msg_type"] = "BINARY" + api_info["MSG_TYPE"] = "BINARY" params_query = str(request.query_params) @@ -245,9 +256,10 @@ async def route_api(self, request: Request) -> Dict: logger.debug(f'DB - api_info : {api_info}') logger.debug(f'DB - api_params : {api_params}') - if api_info["bypass"] == "ON": - result = bypass_msg(api_info, params_query, body) - else: - result = call_remote_func(api_info, api_params, body) + logger.error(f'MODE : {api_info["MODE"]}, content_type : {content_type}') + #if api_info["MODE"] == "MESSAGE PASSING": + result = bypass_msg(api_info, params_query, body) + #else: + # result = call_remote_func(api_info, api_params, body) return result diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 9883508e..7de651c4 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -86,3 +86,4 @@ def get_token_info(headers: starlette.datastructures.Headers): config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) logger.debug(f'user info : {user_info}') return user_info + \ No newline at end of file diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 0460c0cb..c142da6d 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -6,19 +6,19 @@ def make_url(server_name: str, url: str): for server_info in config.api_server_info: - if server_info["name"] == server_name: - if len(server_info["ip_port"]) != 0: - return f'http://{server_info["ip_port"]}{url}' + if server_info["NM"] == server_name: + if len(server_info["IP_ADR"]) != 0: + return f'http://{server_info["IP_ADR"]}{url}' else: - return f'http://{server_info["domain"]}{url}' + return f'http://{server_info["DOMN_NM"]}{url}' return None def bypass_msg(api_info, params_query, body): - method = api_info["method"] - msg_type = api_info["msg_type"] + method = api_info["METH"] + msg_type = api_info["MSG_TYPE"] - url = make_url(api_info["category"], api_info["url"]) + url = make_url(api_info["CTGRY"], api_info["URL"]) if url is None: return {"result": 0, "errorMessage": "The server info does not exist."} @@ -46,7 +46,7 @@ def bypass_msg(api_info, params_query, body): def call_remote_func(api_info, api_params, input_params): - msg_type = api_info["msg_type"] + msg_type = api_info["MSG_TYPE"] remote_cmd = RemoteCmd( config.remote_info["host"], config.remote_info["port"], config.remote_info["id"], config.remote_info["password"]) From ff17e8759f719b7ecfc565133aea3c7ff1e9a248 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 25 May 2022 14:59:58 +0900 Subject: [PATCH 062/236] =?UTF-8?q?feat=20:=20DB=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 8 ++++---- API-ROUTER/Utils/CommonUtil.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index a7896735..aeaf670a 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -257,9 +257,9 @@ async def route_api(self, request: Request) -> Dict: logger.debug(f'DB - api_params : {api_params}') logger.error(f'MODE : {api_info["MODE"]}, content_type : {content_type}') - #if api_info["MODE"] == "MESSAGE PASSING": - result = bypass_msg(api_info, params_query, body) - #else: - # result = call_remote_func(api_info, api_params, body) + if api_info["MODE"] == "MESSAGE PASSING": + result = bypass_msg(api_info, params_query, body) + else: + result = call_remote_func(api_info, api_params, body) return result diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 7de651c4..f6721750 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -86,4 +86,4 @@ def get_token_info(headers: starlette.datastructures.Headers): config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) logger.debug(f'user info : {user_info}') return user_info - \ No newline at end of file + \ No newline at end of file From 1ce5b79b51f18fdf85acfa0c8a75ca58087e93b3 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 26 May 2022 11:30:55 +0900 Subject: [PATCH 063/236] =?UTF-8?q?[AIPLATFORM-303]=20feat:=20response=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=B7=20data=20=ED=82=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 4 ++-- API-SERVICE/Utils/CommonUtil.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index d3efc73b..da1b54fc 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -1,6 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from Utils.DataBaseUtil import convert_data from fastapi.logger import logger from starlette.requests import Request @@ -18,5 +18,5 @@ def api(nameId: str, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = {"result": 1, "errorMessage": "", "data": meta_name[0][0]} + result = make_res_msg(1, "", meta_name[0][0], meta_name[1]) return result diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index ecd3888e..d17433ce 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -73,7 +73,7 @@ def make_res_msg(result, err_msg, data=None, column_names=None): res_msg = {"result": result, "errorMessage": err_msg} else: res_msg = {"result": result, "errorMessage": err_msg, - "body": data, "header": header_list} + "data": {"body": data, "header": header_list}} return res_msg From 5bdf51dac9d0dafbb166ac50d553bc046ac7e274 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 11:33:25 +0900 Subject: [PATCH 064/236] =?UTF-8?q?[AIPLATFORM-303]=20feat:=20parameter=20?= =?UTF-8?q?data=20column=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 6 +++--- API-SERVICE/ApiList/meta/insertMetaName.py | 15 +++++++------- API-SERVICE/ApiList/meta/updateBizMeta.py | 2 +- API-SERVICE/ApiList/meta/updateCategory.py | 10 +++++----- API-SERVICE/ApiList/meta/updateMetaName.py | 21 ++++++++++---------- 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 584215e4..a773a8aa 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -9,8 +9,8 @@ class addChildCategory(BaseModel): - parent_id: str - node_name: str + PRNTS_ID: str + NODE_NM: str # todo: 수정 필요 @@ -18,7 +18,7 @@ def api(insert: addChildCategory, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'INSERT INTO tb_category ("NODE_NM", "PRNTS_ID", "NODE_ID")\ - VALUES ({convert_data(insert.node_name)},{convert_data(insert.parent_id)},{convert_data(uuid.uuid4())});' + VALUES ({convert_data(insert.NODE_NM)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 94cf7b92..4643f312 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -3,24 +3,23 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel, Field +from pydantic import BaseModel from starlette.requests import Request class InsertMetaName(BaseModel): - subscribed: bool - kor_name: str - eng_name: str - show_order: int - name_id: str - TYPE: int = Field(alias="type") # 예약어 때문에 alias 처리 + KOR_NM: str + ENG_NM: str + SHOW_ODRG: int + NM_ID: str + TYPE: int def api(insert: InsertMetaName, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ - VALUES ({convert_data(insert.kor_name)}, {convert_data(insert.eng_name)}, {convert_data(insert.show_order)},\ + VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, {convert_data(insert.SHOW_ODRG)},\ (SELECT concat(\'i\', CAST(substring(max("NM_ID"), 2) AS INT) + 1) AS NM_ID FROM tb_biz_meta_name), {convert_data(insert.TYPE)});' try: db = connect_db(config.db_type, config.db_info) diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index c61bba74..cbc93538 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -8,7 +8,7 @@ class UpdateBizMeta(BaseModel): - bizDatasetId: str + BIZ_DATASET_ID: str dataList: list diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 70ec0f7b..92bed3b1 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -9,8 +9,8 @@ class UpdateCategory(BaseModel): - node_id: str - node_name: str + NODE_ID: str + NODE_NM: str # todo: 수정 필요 @@ -19,9 +19,9 @@ def api(update: UpdateCategory, request: Request) -> Dict: query = f'UPDATE tb_category\ SET "PRNTS_ID" = {convert_data(uuid.uuid4())},\ - "NODE_ID" = {convert_data(update.node_id)},\ - "NODE_NM" = {convert_data(update.node_name)}\ - WHERE "NODE_ID" = {convert_data(update.node_id)};' + "NODE_ID" = {convert_data(update.NODE_ID)},\ + "NODE_NM" = {convert_data(update.NODE_NM)}\ + WHERE "NODE_ID" = {convert_data(update.NODE_ID)};' try: db = connect_db(config.db_type, config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index ff3b64e8..9106a447 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -2,29 +2,28 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel, Field +from pydantic import BaseModel from fastapi.logger import logger from starlette.requests import Request class UpdatetMetaName(BaseModel): - subscribed: bool - kor_name: str - eng_name: str - show_order: int - name_id: str - TYPE: int = Field(alias="type") + KOR_NM: str + ENG_NM: str + SHOW_ODRG: int + NM_ID: str + TYPE: int def api(update: UpdatetMetaName, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'UPDATE tb_biz_meta_name\ - SET "KOR_NM" = {convert_data(update.kor_name)},\ - "ENG_NM" = {convert_data(update.eng_name)},\ - "SHOW_ODRG" = {convert_data(update.show_order)},\ + SET "KOR_NM" = {convert_data(update.KOR_NM)},\ + "ENG_NM" = {convert_data(update.ENG_NM)},\ + "SHOW_ODRG" = {convert_data(update.SHOW_ODRG)},\ "TYPE"= {convert_data(update.TYPE)}\ - WHERE "NM_ID" = {convert_data(update.name_id)};' + WHERE "NM_ID" = {convert_data(update.NM_ID)};' try: db = connect_db(config.db_type, config.db_info) From c62423bf9e58cffcc2b9c435dbead654246a6994 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 11:33:59 +0900 Subject: [PATCH 065/236] =?UTF-8?q?[AIPLATFORM-303]=20feat:=20response=20j?= =?UTF-8?q?son=20=ED=8F=AC=EB=A7=B7=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 5 ++--- API-SERVICE/ApiList/meta/getBizMetaList.py | 5 ++--- API-SERVICE/ApiList/meta/metaMapList.py | 11 ++++++----- API-SERVICE/ApiList/meta/metaNameList.py | 7 +++---- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 79484eec..b8c85e73 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,7 +1,7 @@ from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from Utils.DataBaseUtil import convert_data from starlette.requests import Request @@ -41,6 +41,5 @@ def api(datasetId: str, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = {"result": 1, "errorMessage": "", "data": { - "body": biz_meta_detail[0], "header": v_meta_name[0]}} + result = make_res_msg(1, "", biz_meta_detail[0], v_meta_name[0]) return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index c5a448f1..ca2dd558 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,6 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from fastapi.logger import logger from starlette.requests import Request @@ -30,6 +30,5 @@ def api(request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = {"result": 1, "errorMessage": "", "data": { - "body": bizmeta_list[0], "header": v_meta_name[0]}} + result = make_res_msg(1, "", bizmeta_list[0], v_meta_name[0]) return result diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index cba26d32..e81e5aba 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -1,6 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from fastapi.logger import logger from starlette.requests import Request @@ -19,16 +19,17 @@ def api(request: Request) -> Dict: join tb_biz_meta_map as tbmm on tbmm."NM_ID" = tbmn."NM_ID"; """ - v_meta_map_query = "SELECT * FROM v_biz_meta_map;" + # v_meta_map_query = "SELECT * FROM v_biz_meta_map;" try: db = connect_db(config.db_type, config.db_info) meta_map = db.select(meta_map_query) - v_meta_map = db.select(v_meta_map_query) + # v_meta_map = db.select(v_meta_map_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = {"result": "", "errorMessage": "", "data": { - "body": meta_map[0], "header": v_meta_map[0]}} + result = make_res_msg(1, "", meta_map[0], meta_map[1]) + # result = {"result": "", "errorMessage": "", "data": { + # "body": meta_map[0], "header": v_meta_map[0]}} return result diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 8d35c105..cd1dc1c9 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -1,6 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from fastapi.logger import logger from starlette.requests import Request @@ -43,7 +43,6 @@ def api(perPage: int, curPage: int, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - data = total_cnt[0][0] - data.update({"body": meta_name[0], "header": v_meta_name[0]}) - result = {"result": "", "errorMessage": "", "data": data} + result = make_res_msg(1, "", meta_name[0], meta_name[1]) + result["data"].update(total_cnt[0][0]) return result From ba5740ff8fcdbe74e90f2f55594352407101db75 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 26 May 2022 13:06:41 +0900 Subject: [PATCH 066/236] =?UTF-8?q?feat=20:=20api=20=EB=93=B1=EB=A1=9D=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20msg=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 106 ++++++++++++++++---------------- API-ROUTER/Utils/CommonUtil.py | 2 +- 2 files changed, 55 insertions(+), 53 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index aeaf670a..605a3686 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -11,26 +11,26 @@ class ApiServerInfo(BaseModel): - nm: str - ip_adr: str - domn_nm: str + NM: str + IP_ADR: str + DOMN_NM: str class ApiParam(BaseModel): - api_nm: str - nm: str - data_type: str - deflt_val: str + API_NM: str + NM: str + DATA_TYPE: str + DEFLT_VAL: str class ApiInfo(BaseModel): - api_nm: str - ctgry: str - url: str - meth: str - cmd: str - mode: str - params: List[ApiParam] + API_NM: str + CTGRY: str + URL: str + METH: str + CMD: str + MODE: str + PARAMS: List[ApiParam] class ApiRoute: @@ -77,11 +77,13 @@ def set_route(self) -> None: module.api, methods=[api_info["method"]], tags=["service"]) def set_server_info(self, api_server_info: ApiServerInfo): + api_server_info = api_server_info.__dict__ + api_server_info_query = f'INSERT INTO api_server_info ("NM", "IP_ADR", "DOMN_NM") \ + VALUES ({convert_data(api_server_info["NM"])}, \ + {convert_data(api_server_info["IP_ADR"])}, \ + {convert_data(api_server_info["DOMN_NM"])});' try: db = connect_db(config.db_type, config.db_info) - api_server_info = api_server_info.__dict__ - api_server_info_query = f'INSERT INTO api_server_info ("NM", "IP_ADR", "DOMN_NM") \ - VALUES ({convert_data(api_server_info["nm"])}, {convert_data(api_server_info["ip_adr"])}, {convert_data(api_server_info["domn_nm"])});' db.execute(api_server_info_query) except Exception as err: result = {"result": 0, "errorMessage": err} @@ -96,7 +98,7 @@ def set_server_info(self, api_server_info: ApiServerInfo): def get_server_info_list(self): try: db = connect_db(config.db_type, config.db_info) - api_server_info, _ = db.select(f'SELECT * FROM api_server_info;') + api_server_info, _ = db.select('SELECT * FROM api_server_info;') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -105,11 +107,11 @@ def get_server_info_list(self): return result - def get_server_info(self, server_name: str): + def get_server_info(self, NM: str): try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( - f'SELECT * FROM api_server_info WHERE "NM" = {convert_data(server_name)};') + f'SELECT * FROM api_server_info WHERE "NM" = {convert_data(NM)};') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -118,11 +120,11 @@ def get_server_info(self, server_name: str): return result - def del_server_info(self, server_name: str): + def del_server_info(self, NM: str): try: db = connect_db(config.db_type, config.db_info) - api_server_info_query = f'DELETE FROM api_server_info WHERE "NM" = {convert_data(server_name)};' - db.execute(api_server_info_query) + db.execute( + f'DELETE FROM api_server_info WHERE "NM" = {convert_data(NM)};') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -134,13 +136,12 @@ def del_server_info(self, server_name: str): return result def get_api_list(self) -> Dict: - api_info_query = f'SELECT * FROM api_info;' - api_params_query = f'SELECT * FROM api_params;' try: db = connect_db(config.db_type, config.db_info) - api_info, info_column_names = db.select(api_info_query) - api_params, params_column_names = db.select(api_params_query) + api_info, info_column_names = db.select(f'SELECT * FROM api_info;') + api_params, params_column_names = db.select( + f'SELECT * FROM api_params;') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -151,13 +152,13 @@ def get_api_list(self) -> Dict: return result - def get_api(self, api_name: str) -> Dict: - api_info_query = f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)};' - api_params_query = f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};' + def get_api(self, API_NM: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) - api_info, info_column_names = db.select(api_info_query) - api_params, params_column_names = db.select(api_params_query) + api_info, info_column_names = db.select( + f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') + api_params, params_column_names = db.select( + f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(API_NM)};') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -175,22 +176,24 @@ def set_api(self, api_info: ApiInfo) -> Dict: insert_api_info = {} insert_api_params = [] for key, value in api_info.__dict__.items(): - if key == "params": + if key == "PARAMS": for param in value: insert_api_params.append(param.__dict__) else: insert_api_info[key] = value api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "URL", "METH", "CMD", "MODE") \ - VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, {convert_data(insert_api_info["url"])}, \ - {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, {convert_data(insert_api_info["mode"])});' + VALUES ({convert_data(insert_api_info["API_NM"])}, {convert_data(insert_api_info["CTGRY"])}, \ + {convert_data(insert_api_info["URL"])}, {convert_data(insert_api_info["METH"])}, \ + {convert_data(insert_api_info["CMD"])}, {convert_data(insert_api_info["MODE"])});' db.execute(api_info_query) - + print(insert_api_params) if len(insert_api_params) != 0: - api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ - VALUES ({convert_data(insert_api_params["api_nm"])}, {convert_data(insert_api_params["nm"])}, \ - {convert_data(insert_api_params["data_type"])}, {convert_data(insert_api_params["deflt_val"])});' - db.execute(api_params_query) + for param in insert_api_params: + api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ + VALUES ({convert_data(param["API_NM"])}, {convert_data(param["NM"])}, \ + {convert_data(param["DATA_TYPE"])}, {convert_data(param["DEFLT_VAL"])});' + db.execute(api_params_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -200,14 +203,14 @@ def set_api(self, api_info: ApiInfo) -> Dict: return result - def del_api(self, api_name: str) -> Dict: + def del_api(self, API_NM: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) - api_info_query = f'DELETE FROM api_info WHERE "API_NM" = {convert_data(api_name)};' - db.execute(api_info_query) - api_params_query = f'DELETE FROM api_params WHERE "API_NM" = {convert_data(api_name)};' - db.execute(api_params_query) + db.execute( + f'DELETE FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') + db.execute( + f'DELETE FROM api_params WHERE "API_NM" = {convert_data(API_NM)};') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -226,14 +229,12 @@ async def route_api(self, request: Request) -> Dict: logger.debug( f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') - - api_info_query = f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)};' - api_params_query = f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};' - try: db = connect_db(config.db_type, config.db_info) - api_info, _ = db.select(api_info_query) - api_params, _ = db.select(api_params_query) + api_info, _ = db.select( + f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)};') + api_params, _ = db.select( + f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) @@ -256,7 +257,8 @@ async def route_api(self, request: Request) -> Dict: logger.debug(f'DB - api_info : {api_info}') logger.debug(f'DB - api_params : {api_params}') - logger.error(f'MODE : {api_info["MODE"]}, content_type : {content_type}') + logger.error( + f'MODE : {api_info["MODE"]}, content_type : {content_type}') if api_info["MODE"] == "MESSAGE PASSING": result = bypass_msg(api_info, params_query, body) else: diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index f6721750..2c909598 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -86,4 +86,4 @@ def get_token_info(headers: starlette.datastructures.Headers): config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) logger.debug(f'user info : {user_info}') return user_info - \ No newline at end of file + \ No newline at end of file From bbc20a455a97c5cff10c78a4636e6cc86f1508f8 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 26 May 2022 13:15:56 +0900 Subject: [PATCH 067/236] =?UTF-8?q?feat=20:=20token=20=EB=B3=B5=ED=98=B8?= =?UTF-8?q?=ED=99=94=20=EA=B4=80=EB=A0=A8=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 13 ++++++------- API-ROUTER/Utils/CommonUtil.py | 5 ++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 605a3686..367afebe 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -187,13 +187,12 @@ def set_api(self, api_info: ApiInfo) -> Dict: {convert_data(insert_api_info["URL"])}, {convert_data(insert_api_info["METH"])}, \ {convert_data(insert_api_info["CMD"])}, {convert_data(insert_api_info["MODE"])});' db.execute(api_info_query) - print(insert_api_params) - if len(insert_api_params) != 0: - for param in insert_api_params: - api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ - VALUES ({convert_data(param["API_NM"])}, {convert_data(param["NM"])}, \ - {convert_data(param["DATA_TYPE"])}, {convert_data(param["DEFLT_VAL"])});' - db.execute(api_params_query) + + for param in insert_api_params: + api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ + VALUES ({convert_data(param["API_NM"])}, {convert_data(param["NM"])}, \ + {convert_data(param["DATA_TYPE"])}, {convert_data(param["DEFLT_VAL"])});' + db.execute(api_params_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 2c909598..2c49c0f7 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -82,8 +82,11 @@ def make_res_msg(result, err_msg, data=None, column_names=None): def get_token_info(headers: starlette.datastructures.Headers): user_info = None if config.secret_info["name"] in headers: - user_info = jwt.decode(headers[config.secret_info["name"]], + try: + user_info = jwt.decode(headers[config.secret_info["name"]], config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) + except Exception as err: + logger.error(err) logger.debug(f'user info : {user_info}') return user_info \ No newline at end of file From d10e727e5d58120cadccec44c0f1450d9fd57b96 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 13:35:09 +0900 Subject: [PATCH 068/236] =?UTF-8?q?[AIPLATFORM-303]=20feat:=20response=20h?= =?UTF-8?q?eader=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 16 +++++++++++----- API-SERVICE/ApiList/meta/useMetaNameList.py | 4 ++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index da1b54fc..6af5b24f 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -6,10 +6,12 @@ from starlette.requests import Request -def api(nameId: str, request: Request) -> Dict: +def api(request: Request,nameId:str=None) -> Dict: user_info = get_token_info(request.headers) - - query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(nameId)}' + if nameId is None: + query = f"SELECT * FROM v_biz_meta_name" + else: + query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(nameId)}' try: db = connect_db(config.db_type, config.db_info) @@ -18,5 +20,9 @@ def api(nameId: str, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = make_res_msg(1, "", meta_name[0][0], meta_name[1]) - return result + if nameId is None: + result = make_res_msg(1, "", "","") + result["data"]["header"] = meta_name[0] + else: + result = make_res_msg(1, "", meta_name[0][0], meta_name[1]) + return result \ No newline at end of file diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index daaacb6f..7550c83c 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -1,6 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from fastapi.logger import logger from starlette.requests import Request @@ -33,5 +33,5 @@ def api(request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = {"result": 1, "errorMessage": "", "data": meta_name[0]} + result = make_res_msg(1, "", meta_name[0], meta_name[1]) return result From a6120cd8c7fa061cae5e01c570ef589263c1f2e4 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 14:10:13 +0900 Subject: [PATCH 069/236] =?UTF-8?q?[AIPLATFORM-303]=20fix:=20response=20bo?= =?UTF-8?q?dy=20=EB=B9=84=EC=96=B4=EC=9E=88=EB=8A=94=20dict=20=EA=B0=92?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 6af5b24f..880e9b9b 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -21,7 +21,7 @@ def api(request: Request,nameId:str=None) -> Dict: logger.error(err) else: if nameId is None: - result = make_res_msg(1, "", "","") + result = make_res_msg(1, "", {}, "") result["data"]["header"] = meta_name[0] else: result = make_res_msg(1, "", meta_name[0][0], meta_name[1]) From fb94c869d8b676bd40a171b7cc36cd4d8a96ae85 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 26 May 2022 15:10:51 +0900 Subject: [PATCH 070/236] =?UTF-8?q?refactor=20:=20config=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/Utils/CommonUtil.py | 8 +++++--- API-ROUTER/conf/config.ini | 6 ------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 2c49c0f7..bb39028e 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -43,7 +43,6 @@ def prepare_config() -> None: config.db_type = args.db_type config.server_host = args.host config.server_port = args.port - config.url_info = api_router_cfg["url_info"] config.db_info = api_router_cfg[config.db_type] config.remote_info = api_router_cfg["remote"] config.secret_info = api_router_cfg["secret_info"] @@ -84,9 +83,12 @@ def get_token_info(headers: starlette.datastructures.Headers): if config.secret_info["name"] in headers: try: user_info = jwt.decode(headers[config.secret_info["name"]], - config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) + config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) except Exception as err: logger.error(err) logger.debug(f'user info : {user_info}') return user_info - \ No newline at end of file + + +def exist_check(): + pass diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 61c2efb5..f6daccc9 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -12,12 +12,6 @@ password = dhub.12# database = dhub schema = api -[mariadb] - - -[url_info] -meta = 192.168.101.44:19000 - [secret_info] name = user-katech-access-token secret = jwt-secrect-b-iris \ No newline at end of file From edeeb6584ad164c724e594ee95d758f0025999a1 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 15:27:12 +0900 Subject: [PATCH 071/236] =?UTF-8?q?[AIPLATFORM-303]=20fix:=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=A1=B0=ED=9A=8C=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 23 +++++----------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index ca2dd558..9c361243 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -7,28 +7,15 @@ def api(request: Request) -> Dict: user_info = get_token_info(request.headers) - - meta_name_query = ''' - select T."BIZ_DATASET_ID" as rowId, - array_agg(T."ITEM_VAL") as data, - array_agg(T."ITEM_ID") as columnKey - from (select "BIZ_DATASET_ID", tbm."ITEM_ID", tbm."ITEM_VAL", tbmm."NM_ID", "KOR_NM", "ENG_NM" - from tb_biz_meta tbm - left join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" - left join tb_biz_meta_name tbmn on tbmm."NM_ID" = tbmn."NM_ID" - order by "BIZ_DATASET_ID", "ITEM_ID") T - group by "BIZ_DATASET_ID" - order by "BIZ_DATASET_ID"; - ''' - v_meta_name_query = "SELECT * FROM v_biz_meta;" + v_meta_wrap_query = "SELECT * FROM v_biz_meta_wrap" try: db = connect_db(config.db_type, config.db_info) - bizmeta_list = db.select(meta_name_query) - v_meta_name = db.select(v_meta_name_query) + meta_wrap = db.select(v_meta_wrap_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = make_res_msg(1, "", bizmeta_list[0], v_meta_name[0]) - return result + result = make_res_msg(1,"",meta_wrap[0],meta_wrap[1]) + + return result \ No newline at end of file From d119488e8b263f7052d54a044670ab802a3313c5 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 15:57:08 +0900 Subject: [PATCH 072/236] =?UTF-8?q?[AIPLATFORM-303]=20fix:=20header?= =?UTF-8?q?=EA=B0=80=20=EC=A4=91=EB=B3=B5=20=EC=B6=9C=EB=A0=A5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/metaNameList.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index cd1dc1c9..ba169bcd 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -11,7 +11,7 @@ def api(perPage: int, curPage: int, request: Request) -> Dict: curPage = curPage - 1 meta_name_query = f""" select - * + p.* from tb_biz_meta_name as p join ( SELECT "KOR_NM", @@ -32,13 +32,11 @@ def api(perPage: int, curPage: int, request: Request) -> Dict: ) as t on p."NM_ID" = t."NM_ID" """ total_cnt_query = "SELECT count(*) as totalCount FROM tb_biz_meta_name" - v_meta_name_query = "SELECT * FROM v_biz_meta_name;" try: db = connect_db(config.db_type, config.db_info) meta_name = db.select(meta_name_query) total_cnt = db.select(total_cnt_query) - v_meta_name = db.select(v_meta_name_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) From df564a1df06523c446fd0b80dacb892ffbbf1d73 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 15:57:36 +0900 Subject: [PATCH 073/236] =?UTF-8?q?[AIPLATFORM-303]=20feat:=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=EC=9D=B4=20=EC=97=86=EC=9C=BC=EB=A9=B4=20column?= =?UTF-8?q?=EB=AA=85=EC=9D=84=20=EC=B6=9C=EB=A0=A5=20=ED=95=B4=EC=A3=BC?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 38 ++++++-------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index b8c85e73..b14093ed 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -6,40 +6,24 @@ from starlette.requests import Request -def api(datasetId: str, request: Request) -> Dict: +def api(request: Request, datasetId: str = None) -> Dict: user_info = get_token_info(request.headers) - query = f'''select T."BIZ_DATASET_ID" as "rowId", - array_agg(T."KOR_NM") as "KOR_NM", - array_agg(T."ENG_NM") as "ENG_NM", - array_agg(T."TYPE") as "TYPE", - array_agg(T."ITEM_VAL") as "ITEM_VAL", - array_agg(T."ITEM_ID") as "ITEM_ID" - from (select - "BIZ_DATASET_ID", - tbm."ITEM_ID", - tbm."ITEM_VAL", - tbmm."NM_ID", - tbmn."KOR_NM", - tbmn."ENG_NM", - tbmn."TYPE" - from tb_biz_meta tbm - right join tb_biz_meta_map tbmm on tbm."ITEM_ID" = tbmm."ITEM_ID" - left join tb_biz_meta_name tbmn on tbmm."NM_ID" = tbmn."NM_ID" - where "BIZ_DATASET_ID" = {convert_data(datasetId)} - order by "BIZ_DATASET_ID", "ITEM_ID") T - group by "BIZ_DATASET_ID" - order by "BIZ_DATASET_ID";''' - - v_meta_name_query = "SELECT * FROM v_biz_meta;" + if datasetId is None: + v_meta_wrap_query = f"SELECT * FROM v_biz_meta_wrap LIMIT 1;" + else: + v_meta_wrap_query = f"SELECT * FROM v_biz_meta_wrap WHERE BIZ_DATASET_ID = {convert_data(datasetId)}" try: db = connect_db(config.db_type, config.db_info) - biz_meta_detail = db.select(query) - v_meta_name = db.select(v_meta_name_query) + meta_wrap = db.select(v_meta_wrap_query) + # v_meta_name = db.select(v_meta_name_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = make_res_msg(1, "", biz_meta_detail[0], v_meta_name[0]) + if datasetId is None: + result = make_res_msg(1,"",{},meta_wrap[1]) + else: + result = make_res_msg(1,"",meta_wrap[0],meta_wrap[1]) return result From 612b834bf24a02e29c02f1a41f51de8ed0a9cefc Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 26 May 2022 17:30:07 +0900 Subject: [PATCH 074/236] =?UTF-8?q?[AIPLATFORM-303]=20fix:=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=A1=B0=EA=B1=B4=20=EC=88=98=EC=A0=95,=20response?= =?UTF-8?q?=20body=20type=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index b14093ed..ad703c1f 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -10,9 +10,9 @@ def api(request: Request, datasetId: str = None) -> Dict: user_info = get_token_info(request.headers) if datasetId is None: - v_meta_wrap_query = f"SELECT * FROM v_biz_meta_wrap LIMIT 1;" + v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap LIMIT 1;' else: - v_meta_wrap_query = f"SELECT * FROM v_biz_meta_wrap WHERE BIZ_DATASET_ID = {convert_data(datasetId)}" + v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE "BIZ_DATASET_ID" = {convert_data(datasetId)}' try: db = connect_db(config.db_type, config.db_info) @@ -25,5 +25,5 @@ def api(request: Request, datasetId: str = None) -> Dict: if datasetId is None: result = make_res_msg(1,"",{},meta_wrap[1]) else: - result = make_res_msg(1,"",meta_wrap[0],meta_wrap[1]) + result = make_res_msg(1,"",meta_wrap[0][0],meta_wrap[1]) return result From b3b0af5cc7d8fb94011f54e5ac8213362df45569 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 27 May 2022 11:39:48 +0900 Subject: [PATCH 075/236] =?UTF-8?q?feat=20:=20=EA=B8=B0=EB=8F=99=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/safe_start.sh | 5 +++++ API-ROUTER/start.sh | 5 +++++ API-SERVICE/safe_start.sh | 5 +++++ API-SERVICE/start.sh | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh index 16477167..f639f70c 100644 --- a/API-ROUTER/safe_start.sh +++ b/API-ROUTER/safe_start.sh @@ -49,6 +49,11 @@ router_start() { echo "########## Safe Start (${app_name}) ##########" echo "========== STOP ${app_name} ==========" input + +source_path="$( cd "$( dirname "$0" )" && pwd -P )" +make_dir="${source_path}/log" +mkdir $make_dir + router_stop sleep 2 uvicorn_stop diff --git a/API-ROUTER/start.sh b/API-ROUTER/start.sh index 4e68861e..f31254ec 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -21,4 +21,9 @@ router_start() { echo "########## Start Application (${app_name}) ##########" echo "========== START ${app_name} ==========" input + +source_path="$( cd "$( dirname "$0" )" && pwd -P )" +make_dir="${source_path}/log" +mkdir $make_dir + router_start diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh index 0e1cda03..c6e577e8 100644 --- a/API-SERVICE/safe_start.sh +++ b/API-SERVICE/safe_start.sh @@ -49,6 +49,11 @@ router_start() { echo "########## Safe Start (${app_name}) ##########" echo "========== STOP ${app_name} ==========" input + +source_path="$( cd "$( dirname "$0" )" && pwd -P )" +make_dir="${source_path}/log" +mkdir $make_dir + router_stop sleep 2 uvicorn_stop diff --git a/API-SERVICE/start.sh b/API-SERVICE/start.sh index fefe6a5f..c99529ca 100644 --- a/API-SERVICE/start.sh +++ b/API-SERVICE/start.sh @@ -21,4 +21,9 @@ router_start() { echo "########## Start Application (${app_name}) ##########" echo "========== START ${app_name} ==========" input + +source_path="$( cd "$( dirname "$0" )" && pwd -P )" +make_dir="${source_path}/log" +mkdir $make_dir + router_start From 2dd80840f7380fdeaf2efb9975b57f4ed01b7665 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 27 May 2022 12:01:50 +0900 Subject: [PATCH 076/236] =?UTF-8?q?feat=20:=20=EA=B8=B0=EB=8F=99=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/safe_start.sh | 8 ++++---- API-ROUTER/start.sh | 8 ++++---- API-SERVICE/safe_start.sh | 8 ++++---- API-SERVICE/start.sh | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh index f639f70c..e303c954 100644 --- a/API-ROUTER/safe_start.sh +++ b/API-ROUTER/safe_start.sh @@ -4,10 +4,10 @@ router_port=$2 input() { if [[ $router_host == "" ]];then - router_host=192.168.101.43 + router_host=192.168.100.126 fi if [[ $router_port == "" ]];then - router_port=18000 + router_port=9010 fi } @@ -41,9 +41,9 @@ uvicorn_stop() { router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & } echo "########## Safe Start (${app_name}) ##########" diff --git a/API-ROUTER/start.sh b/API-ROUTER/start.sh index f31254ec..d81f756f 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -4,18 +4,18 @@ router_port=$2 input() { if [[ $router_host == "" ]];then - router_host=192.168.101.43 + router_host=192.168.100.126 fi if [[ $router_port == "" ]];then - router_port=18000 + router_port=9010 fi } router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & } echo "########## Start Application (${app_name}) ##########" diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh index c6e577e8..bcf21fe5 100644 --- a/API-SERVICE/safe_start.sh +++ b/API-SERVICE/safe_start.sh @@ -4,10 +4,10 @@ router_port=$2 input() { if [[ $router_host == "" ]];then - router_host=192.168.101.44 + router_host=192.168.100.126 fi if [[ $router_port == "" ]];then - router_port=19000 + router_port=9014 fi } @@ -41,9 +41,9 @@ uvicorn_stop() { router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & } echo "########## Safe Start (${app_name}) ##########" diff --git a/API-SERVICE/start.sh b/API-SERVICE/start.sh index c99529ca..97739233 100644 --- a/API-SERVICE/start.sh +++ b/API-SERVICE/start.sh @@ -4,18 +4,18 @@ router_port=$2 input() { if [[ $router_host == "" ]];then - router_host=192.168.101.44 + router_host=192.168.100.126 fi if [[ $router_port == "" ]];then - router_port=19000 + router_port=9014 fi } router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & } echo "########## Start Application (${app_name}) ##########" From be98951a37b24191067b568b6e5d7316934c5536 Mon Sep 17 00:00:00 2001 From: cbc <39294675+cbccbs@users.noreply.github.com> Date: Fri, 27 May 2022 12:24:54 +0900 Subject: [PATCH 077/236] Update stop.sh --- API-ROUTER/stop.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-ROUTER/stop.sh b/API-ROUTER/stop.sh index cf2464f1..3f9cb035 100644 --- a/API-ROUTER/stop.sh +++ b/API-ROUTER/stop.sh @@ -4,10 +4,10 @@ router_port=$2 input() { if [[ $router_host == "" ]];then - router_host=192.168.101.43 + router_host=192.168.100.126 fi if [[ $router_port == "" ]];then - router_port=18000 + router_port=9010 fi } From a116077fa06ecffd6ba4decae31e73529f2b72e9 Mon Sep 17 00:00:00 2001 From: cbc <39294675+cbccbs@users.noreply.github.com> Date: Fri, 27 May 2022 12:25:20 +0900 Subject: [PATCH 078/236] Update stop.sh --- API-SERVICE/stop.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/stop.sh b/API-SERVICE/stop.sh index 02161f17..e4227863 100644 --- a/API-SERVICE/stop.sh +++ b/API-SERVICE/stop.sh @@ -4,10 +4,10 @@ router_port=$2 input() { if [[ $router_host == "" ]];then - router_host=192.168.101.44 + router_host=192.168.100.126 fi if [[ $router_port == "" ]];then - router_port=19000 + router_port=9014 fi } From 50d117ebcb4000c4283cb8926111cb3d846a88de Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 30 May 2022 14:27:44 +0900 Subject: [PATCH 079/236] =?UTF-8?q?[AIPLATFORM-314]=20fix:=20insertMetaMap?= =?UTF-8?q?=EC=9D=B4=20parameter=EB=A5=BC=20=EB=B0=9B=EC=95=84=20insert=20?= =?UTF-8?q?=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaMap.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 8fed0386..fcb7b4bd 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -6,13 +6,13 @@ from starlette.requests import Request -def api(request: Request) -> Dict: +def api(map_list: list ,request: Request) -> Dict: user_info = get_token_info(request.headers) view_col = ['"BIZ_DATASET_ID"'] drop_view_query = "DROP VIEW v_biz_meta_wrap" truncate_query = "TRUNCATE tb_biz_meta_map;" - meta_name_query = 'SELECT "NM_ID" FROM tb_biz_meta_name;' + map_insert_query = 'INSERT INTO tb_biz_meta_map ("ITEM_ID", "NM_ID") VALUES ({0}, {1});' meta_map_query = "SELECT * FROM tb_biz_meta_map" map_item_query = """ select distinct @@ -29,13 +29,11 @@ def api(request: Request) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute(drop_view_query) db.execute(truncate_query) - meta_name_list = db.select(meta_name_query)[0] - # insert meta map - for i, meta_name in enumerate(meta_name_list): - query = f'INSERT INTO tb_biz_meta_map ("ITEM_ID","NM_ID")\ - VALUES ({convert_data(i + 1)},{convert_data(meta_name["NM_ID"])});' - db.execute(query) + for meta_map in map_list: + logger.info(meta_map) + db.execute(map_insert_query.format(convert_data(meta_map["itemId"]), + convert_data(meta_map["nameId"]))) # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] From 99810babf09f7e3f80f0d3bc05307d8f436d1a37 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 30 May 2022 14:55:59 +0900 Subject: [PATCH 080/236] =?UTF-8?q?[AIPLATFORM-314]=20fix:=20dict=20key=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20column=EB=AA=85=EA=B3=BC=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaMap.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index fcb7b4bd..f2c181a0 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -32,8 +32,8 @@ def api(map_list: list ,request: Request) -> Dict: for meta_map in map_list: logger.info(meta_map) - db.execute(map_insert_query.format(convert_data(meta_map["itemId"]), - convert_data(meta_map["nameId"]))) + db.execute(map_insert_query.format(convert_data(meta_map["ITEM_ID"]), + convert_data(meta_map["NM_ID"]))) # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] From 2db6f3a83d29c6cb0acf42da19ad88df498f2b76 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 30 May 2022 15:48:30 +0900 Subject: [PATCH 081/236] =?UTF-8?q?feat=20:=20error=20response,=20?= =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=EB=B3=84=20API=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 114 ++++++++++++++++++++++++-------- API-ROUTER/Utils/CommonUtil.py | 13 +++- API-ROUTER/Utils/RouteUtil.py | 11 ++- 3 files changed, 104 insertions(+), 34 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 367afebe..ea5d687f 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -4,7 +4,7 @@ from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg, get_token_info, save_file_for_reload +from Utils.CommonUtil import connect_db, make_res_msg, get_token_info, save_file_for_reload, get_exception_info from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request @@ -41,6 +41,8 @@ def __init__(self) -> None: def set_route(self) -> None: self.router.add_api_route( "/api/getApiList", self.get_api_list, methods=["GET"], tags=["API Info"]) + self.router.add_api_route( + "/api/getCategoryApiList", self.get_api_category_list, methods=["GET"], tags=["API Info"]) self.router.add_api_route( "/api/getApi", self.get_api, methods=["GET"], tags=["API Info"]) self.router.add_api_route( @@ -85,9 +87,12 @@ def set_server_info(self, api_server_info: ApiServerInfo): try: db = connect_db(config.db_type, config.db_info) db.execute(api_server_info_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: config.api_server_info, _ = db.select( 'SELECT * FROM api_server_info;') @@ -99,9 +104,12 @@ def get_server_info_list(self): try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select('SELECT * FROM api_server_info;') - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: result = {"api_server_info": api_server_info} @@ -112,9 +120,12 @@ def get_server_info(self, NM: str): db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( f'SELECT * FROM api_server_info WHERE "NM" = {convert_data(NM)};') - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: result = {"api_server_info": api_server_info} @@ -125,9 +136,12 @@ def del_server_info(self, NM: str): db = connect_db(config.db_type, config.db_info) db.execute( f'DELETE FROM api_server_info WHERE "NM" = {convert_data(NM)};') - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: config.api_server_info, _ = db.select( 'SELECT * FROM api_server_info;') @@ -142,9 +156,12 @@ def get_api_list(self) -> Dict: api_info, info_column_names = db.select(f'SELECT * FROM api_info;') api_params, params_column_names = db.select( f'SELECT * FROM api_params;') - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: api_info = make_res_msg("", "", api_info, info_column_names) api_params = make_res_msg("", "", api_params, params_column_names) @@ -152,6 +169,35 @@ def get_api_list(self) -> Dict: return result + def get_api_category_list(self, CTGRY: str): + api_params_list = [] + params_columns = [] + try: + db = connect_db(config.db_type, config.db_info) + api_info, info_column_names = db.select( + f'SELECT * FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)};') + + for info in api_info: + logger.debug(f'INFO : {info["API_NM"]}') + api_params, params_column_names = db.select( + f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(info["API_NM"])};') + if len(api_params) != 0: + api_params_list.extend(api_params) + params_columns = params_column_names + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} + else: + api_info = make_res_msg("", "", api_info, info_column_names) + api_params = make_res_msg( + "", "", api_params_list, params_columns) + result = {"api_info": api_info, "api_params": api_params} + + return result + def get_api(self, API_NM: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) @@ -159,9 +205,12 @@ def get_api(self, API_NM: str) -> Dict: f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') api_params, params_column_names = db.select( f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(API_NM)};') - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: api_info = make_res_msg("", "", api_info, info_column_names) api_params = make_res_msg("", "", api_params, params_column_names) @@ -193,9 +242,12 @@ def set_api(self, api_info: ApiInfo) -> Dict: VALUES ({convert_data(param["API_NM"])}, {convert_data(param["NM"])}, \ {convert_data(param["DATA_TYPE"])}, {convert_data(param["DEFLT_VAL"])});' db.execute(api_params_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: save_file_for_reload() result = {"result": 1, "errorMessage": ""} @@ -210,9 +262,12 @@ def del_api(self, API_NM: str) -> Dict: f'DELETE FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') db.execute( f'DELETE FROM api_params WHERE "API_NM" = {convert_data(API_NM)};') - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: save_file_for_reload() result = {"result": 1, "errorMessage": ""} @@ -234,9 +289,12 @@ async def route_api(self, request: Request) -> Dict: f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)};') api_params, _ = db.select( f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};') - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error(f'Exception type : {ex_type}') + logger.error(f'Exception message : {ex_value}') + logger.error(f'Trace Log : {trace_log}') + result = {"result": 0, "errorMessage": ex_type} else: if len(api_info) == 0: return {"result": 0, "errorMessage": "This is an unregistered API."} diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index bb39028e..ebbcbd99 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -10,6 +10,8 @@ from retry import retry import psycopg2 import jwt +import sys +import traceback def get_config(root_path: str, config_name: str): @@ -86,9 +88,14 @@ def get_token_info(headers: starlette.datastructures.Headers): config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) except Exception as err: logger.error(err) - logger.debug(f'user info : {user_info}') + logger.debug(f'User Info : {user_info}') return user_info -def exist_check(): - pass +def get_exception_info(): + # Get current system + ex_type, ex_value, ex_traceback = sys.exc_info() + trace_back = traceback.extract_tb(ex_traceback) + trace_log = [trace for trace in trace_back] + + return ex_type.__name__, ex_value, trace_log diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index c142da6d..6d464415 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -1,16 +1,21 @@ import requests from fastapi.logger import logger +from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config from ConnectManager import RemoteCmd -def make_url(server_name: str, url: str): +def make_url(server_name: str, url_path: str): for server_info in config.api_server_info: if server_info["NM"] == server_name: if len(server_info["IP_ADR"]) != 0: - return f'http://{server_info["IP_ADR"]}{url}' + netloc = server_info["IP_ADR"] else: - return f'http://{server_info["DOMN_NM"]}{url}' + netloc = server_info["DOMN_NM"] + url = ParseResult( + scheme="http", netloc=netloc, path=url_path, params="", query="", fragment="") + logger.debug(f"Message Passing Url : {url.geturl()}") + return url.geturl() return None From 28df728a5c4213653331f1601c56ecf2598421a6 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 30 May 2022 15:55:53 +0900 Subject: [PATCH 082/236] =?UTF-8?q?[AIPLATFORM-314]=20feat:=20insertMetaNa?= =?UTF-8?q?me=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= =?UTF-8?q?=20(nm=5Fid=EB=A5=BC=20uuid=EB=A1=9C=20=EB=B3=80=EA=B2=BD,=20sh?= =?UTF-8?q?ow=5Fodrg=20=ED=95=AD=EB=AA=A9=200=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B3=A0=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaName.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 4643f312..b3c3793a 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -1,3 +1,4 @@ +import uuid from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config @@ -10,17 +11,18 @@ class InsertMetaName(BaseModel): KOR_NM: str ENG_NM: str - SHOW_ODRG: int - NM_ID: str TYPE: int + # SHOW_ODRG: int + # NM_ID: str + def api(insert: InsertMetaName, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ - VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, {convert_data(insert.SHOW_ODRG)},\ - (SELECT concat(\'i\', CAST(substring(max("NM_ID"), 2) AS INT) + 1) AS NM_ID FROM tb_biz_meta_name), {convert_data(insert.TYPE)});' + VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, 0,\ + {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' try: db = connect_db(config.db_type, config.db_info) db.execute(query) From 06fc3a2034c3a58d50f96f6c1fc63ee86b0f55fb Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 31 May 2022 10:26:20 +0900 Subject: [PATCH 083/236] =?UTF-8?q?feat=20:=20api=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B0=92=20=EC=A0=95=EB=A0=AC=EB=90=98=EC=96=B4=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=EB=90=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 66 +++++++++++++++------------------ API-ROUTER/Utils/CommonUtil.py | 2 +- 2 files changed, 30 insertions(+), 38 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index ea5d687f..f55caf22 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -89,9 +89,8 @@ def set_server_info(self, api_server_info: ApiServerInfo): db.execute(api_server_info_query) except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: config.api_server_info, _ = db.select( @@ -103,12 +102,12 @@ def set_server_info(self, api_server_info: ApiServerInfo): def get_server_info_list(self): try: db = connect_db(config.db_type, config.db_info) - api_server_info, _ = db.select('SELECT * FROM api_server_info;') + api_server_info, _ = db.select( + 'SELECT * FROM api_server_info ORDER BY "NM";') except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: result = {"api_server_info": api_server_info} @@ -122,9 +121,8 @@ def get_server_info(self, NM: str): f'SELECT * FROM api_server_info WHERE "NM" = {convert_data(NM)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: result = {"api_server_info": api_server_info} @@ -138,9 +136,8 @@ def del_server_info(self, NM: str): f'DELETE FROM api_server_info WHERE "NM" = {convert_data(NM)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: config.api_server_info, _ = db.select( @@ -153,14 +150,14 @@ def get_api_list(self) -> Dict: try: db = connect_db(config.db_type, config.db_info) - api_info, info_column_names = db.select(f'SELECT * FROM api_info;') + api_info, info_column_names = db.select( + f'SELECT * FROM api_info ORDER BY "CTGRY", "API_NM";') api_params, params_column_names = db.select( - f'SELECT * FROM api_params;') + f'SELECT * FROM api_params ORDER BY "API_NM", "NM";') except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: api_info = make_res_msg("", "", api_info, info_column_names) @@ -175,20 +172,19 @@ def get_api_category_list(self, CTGRY: str): try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT * FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)};') + f'SELECT * FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "API_NM";') for info in api_info: logger.debug(f'INFO : {info["API_NM"]}') api_params, params_column_names = db.select( - f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(info["API_NM"])};') + f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(info["API_NM"])} ORDER BY "NM";') if len(api_params) != 0: api_params_list.extend(api_params) params_columns = params_column_names except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: api_info = make_res_msg("", "", api_info, info_column_names) @@ -204,12 +200,11 @@ def get_api(self, API_NM: str) -> Dict: api_info, info_column_names = db.select( f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') api_params, params_column_names = db.select( - f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(API_NM)};') + f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(API_NM)} ORDER BY "NM";') except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: api_info = make_res_msg("", "", api_info, info_column_names) @@ -244,9 +239,8 @@ def set_api(self, api_info: ApiInfo) -> Dict: db.execute(api_params_query) except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: save_file_for_reload() @@ -264,9 +258,8 @@ def del_api(self, API_NM: str) -> Dict: f'DELETE FROM api_params WHERE "API_NM" = {convert_data(API_NM)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: save_file_for_reload() @@ -291,9 +284,8 @@ async def route_api(self, request: Request) -> Dict: f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() - logger.error(f'Exception type : {ex_type}') - logger.error(f'Exception message : {ex_value}') - logger.error(f'Trace Log : {trace_log}') + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) result = {"result": 0, "errorMessage": ex_type} else: if len(api_info) == 0: @@ -314,7 +306,7 @@ async def route_api(self, request: Request) -> Dict: logger.debug(f'DB - api_info : {api_info}') logger.debug(f'DB - api_params : {api_params}') - logger.error( + logger.debug( f'MODE : {api_info["MODE"]}, content_type : {content_type}') if api_info["MODE"] == "MESSAGE PASSING": result = bypass_msg(api_info, params_query, body) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index ebbcbd99..05f4861c 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -93,9 +93,9 @@ def get_token_info(headers: starlette.datastructures.Headers): def get_exception_info(): - # Get current system ex_type, ex_value, ex_traceback = sys.exc_info() trace_back = traceback.extract_tb(ex_traceback) trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log + \ No newline at end of file From 8a67dc143b7d0baa2d8224d6ea63360594a1aa15 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 31 May 2022 10:28:25 +0900 Subject: [PATCH 084/236] =?UTF-8?q?[AIPLATFORM-314]=20chore:=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaName.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index b3c3793a..ed9ecf9f 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -12,9 +12,6 @@ class InsertMetaName(BaseModel): KOR_NM: str ENG_NM: str TYPE: int - # SHOW_ODRG: int - # NM_ID: str - def api(insert: InsertMetaName, request: Request) -> Dict: From b218cdf355b61fa9e9935631db121c698aecd63e Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 31 May 2022 14:14:13 +0900 Subject: [PATCH 085/236] =?UTF-8?q?fix=20:=20router=20=EB=B2=84=EA=B7=B8?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다른 category 동일한 API 명을 가진 경우에 대한 처리 --- API-ROUTER/ApiRoute/ApiRoute.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index f55caf22..b751d7db 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -269,17 +269,18 @@ def del_api(self, API_NM: str) -> Dict: async def route_api(self, request: Request) -> Dict: api_name = request.url.path.split("/")[-1] + category = request.url.path.split("/")[-2] method = request.method content_type = request.headers.get("Content-Type") user_info = get_token_info(request.headers) logger.debug( - f'Req - API Name : {api_name}, Method : {method}, Content-Type : {content_type}') + f'Req - API Name : {api_name}, Category : {category}, Method : {method}, Content-Type : {content_type}') try: db = connect_db(config.db_type, config.db_info) api_info, _ = db.select( - f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)};') + f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)} AND "CTGRY" = {convert_data(category)};') api_params, _ = db.select( f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};') except Exception: From 4c310c1ac81196c49a0eb65aaafefb5b45285a5d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 2 Jun 2022 16:28:49 +0900 Subject: [PATCH 086/236] =?UTF-8?q?feat=20:=20api=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 66 ++++++++++++++++++++++++++++++++- API-ROUTER/Utils/CommonUtil.py | 2 +- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index b751d7db..124c55c0 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -47,6 +47,8 @@ def set_route(self) -> None: "/api/getApi", self.get_api, methods=["GET"], tags=["API Info"]) self.router.add_api_route( "/api/setApi", self.set_api, methods=["POST"], tags=["API Info"]) + self.router.add_api_route( + "/api/updateApi", self.update_api, methods=["POST"], tags=["API Info"]) self.router.add_api_route( "/api/delApi", self.del_api, methods=["POST"], tags=["API Info"]) @@ -56,6 +58,8 @@ def set_route(self) -> None: "/api/getServerInfo", self.get_server_info, methods=["GET"], tags=["API Server Info"]) self.router.add_api_route( "/api/setServerInfo", self.set_server_info, methods=["POST"], tags=["API Server Info"]) + self.router.add_api_route( + "/api/updateServerInfo", self.update_server_info, methods=["POST"], tags=["API Server Info"]) self.router.add_api_route( "/api/delServerInfo", self.del_server_info, methods=["POST"], tags=["API Server Info"]) @@ -99,6 +103,26 @@ def set_server_info(self, api_server_info: ApiServerInfo): return result + def update_server_info(self, api_server_info: ApiServerInfo): + api_server_info = api_server_info.__dict__ + api_server_info_query = f'UPDATE api_server_info SET "IP_ADR"={convert_data(api_server_info["IP_ADR"])}, \ + "DOMN_NM"={convert_data(api_server_info["DOMN_NM"])} \ + WHERE "NM"={convert_data(api_server_info["NM"])};' + try: + db = connect_db(config.db_type, config.db_info) + db.execute(api_server_info_query) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) + result = {"result": 0, "errorMessage": ex_type} + else: + config.api_server_info, _ = db.select( + 'SELECT * FROM api_server_info;') + result = {"result": 1, "errorMessage": ""} + + return result + def get_server_info_list(self): try: db = connect_db(config.db_type, config.db_info) @@ -151,7 +175,7 @@ def get_api_list(self) -> Dict: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT * FROM api_info ORDER BY "CTGRY", "API_NM";') + f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info ORDER BY "IDX";') api_params, params_column_names = db.select( f'SELECT * FROM api_params ORDER BY "API_NM", "NM";') except Exception: @@ -172,7 +196,7 @@ def get_api_category_list(self, CTGRY: str): try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT * FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "API_NM";') + f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "IDX";') for info in api_info: logger.debug(f'INFO : {info["API_NM"]}') @@ -248,6 +272,44 @@ def set_api(self, api_info: ApiInfo) -> Dict: return result + def update_api(self, api_info: ApiInfo): + try: + db = connect_db(config.db_type, config.db_info) + + update_api_info = {} + update_api_params = [] + for key, value in api_info.__dict__.items(): + if key == "PARAMS": + for param in value: + update_api_params.append(param.__dict__) + else: + update_api_info[key] = value + + api_info_query = f'UPDATE api_info SET "URL"={convert_data(update_api_info["URL"])}, \ + "METH"={convert_data(update_api_info["METH"])}, \ + "CMD"={convert_data(update_api_info["CMD"])}, \ + "MODE"= {convert_data(update_api_info["MODE"])} \ + WHERE "API_NM"={convert_data(update_api_info["API_NM"])} AND \ + "CTGRY"={convert_data(update_api_info["CTGRY"])};' + db.execute(api_info_query) + + for param in update_api_params: + api_params_query = f'UPDATE api_params SET "DATA_TYPE"={convert_data(param["DATA_TYPE"])}, \ + "DEFLT_VAL"={convert_data(param["DEFLT_VAL"])} \ + WHERE "API_NM"={convert_data(param["API_NM"])} AND \ + "NM"={convert_data(param["NM"])};' + db.execute(api_params_query) + except Exception: + ex_type, ex_value, trace_log = get_exception_info() + logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" + .format(ex_type, str(ex_value).strip(), trace_log)) + result = {"result": 0, "errorMessage": ex_type} + else: + save_file_for_reload() + result = {"result": 1, "errorMessage": ""} + + return result + def del_api(self, API_NM: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 05f4861c..f1adc17c 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -98,4 +98,4 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + \ No newline at end of file From dab16ee868ea906d8fac9873cf9f2f1fcfb7dfc5 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 7 Jun 2022 15:06:44 +0900 Subject: [PATCH 087/236] =?UTF-8?q?feat=20:=20api=20=EA=B4=80=EB=A0=A8=20d?= =?UTF-8?q?b=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C?= =?UTF-8?q?=20query=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 9 ++++----- API-ROUTER/Utils/CommonUtil.py | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 124c55c0..6be2e9a9 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -288,9 +288,9 @@ def update_api(self, api_info: ApiInfo): api_info_query = f'UPDATE api_info SET "URL"={convert_data(update_api_info["URL"])}, \ "METH"={convert_data(update_api_info["METH"])}, \ "CMD"={convert_data(update_api_info["CMD"])}, \ - "MODE"= {convert_data(update_api_info["MODE"])} \ - WHERE "API_NM"={convert_data(update_api_info["API_NM"])} AND \ - "CTGRY"={convert_data(update_api_info["CTGRY"])};' + "MODE"= {convert_data(update_api_info["MODE"])}, \ + "CTGRY"={convert_data(update_api_info["CTGRY"])} \ + WHERE "API_NM"={convert_data(update_api_info["API_NM"])};' db.execute(api_info_query) for param in update_api_params: @@ -316,8 +316,7 @@ def del_api(self, API_NM: str) -> Dict: db.execute( f'DELETE FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') - db.execute( - f'DELETE FROM api_params WHERE "API_NM" = {convert_data(API_NM)};') + except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index f1adc17c..99d9454d 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -98,4 +98,4 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + \ No newline at end of file From 95afca8f9b4a6a1b3870132ac00d86bdcf626ade Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 8 Jun 2022 09:11:04 +0900 Subject: [PATCH 088/236] =?UTF-8?q?feat=20:=20db=20=EC=BB=AC=EB=9F=BC?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=9C=20=EC=BB=AC=EB=9F=BC=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 6be2e9a9..aa1180c1 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -175,7 +175,7 @@ def get_api_list(self) -> Dict: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info ORDER BY "IDX";') + f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info ORDER BY "NO";') api_params, params_column_names = db.select( f'SELECT * FROM api_params ORDER BY "API_NM", "NM";') except Exception: @@ -196,7 +196,7 @@ def get_api_category_list(self, CTGRY: str): try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "IDX";') + f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "NO";') for info in api_info: logger.debug(f'INFO : {info["API_NM"]}') From 8877468be44b9a2910d81f94ff5f9bf6199e8d41 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 9 Jun 2022 14:58:35 +0900 Subject: [PATCH 089/236] =?UTF-8?q?feat=20:=20router=20request=20=EB=B9=84?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 51 +++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index aa1180c1..30ade1c1 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -371,7 +371,7 @@ async def route_api(self, request: Request) -> Dict: logger.debug( f'MODE : {api_info["MODE"]}, content_type : {content_type}') if api_info["MODE"] == "MESSAGE PASSING": - result = bypass_msg(api_info, params_query, body) + result = await bypass_msg(api_info, params_query, body) else: result = call_remote_func(api_info, api_params, body) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 6d464415..861c4168 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -1,4 +1,5 @@ import requests +import aiohttp from fastapi.logger import logger from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config @@ -19,7 +20,7 @@ def make_url(server_name: str, url_path: str): return None -def bypass_msg(api_info, params_query, body): +async def bypass_msg(api_info, params_query, body): method = api_info["METH"] msg_type = api_info["MSG_TYPE"] @@ -27,27 +28,34 @@ def bypass_msg(api_info, params_query, body): if url is None: return {"result": 0, "errorMessage": "The server info does not exist."} - if method == "GET": - params = {} - if len(params_query) != 0: - for param in params_query.split("&"): - parser_param = param.split("=") - params[parser_param[0]] = parser_param[1] - response = requests.get(url, params=params) - elif method == "POST": - if msg_type == "JSON": - response = requests.post(url, json=body) - else: - response = requests.post(url, data=body) - elif method == "PUT": - if msg_type == "JSON": - response = requests.put(url, json=body) + async with aiohttp.ClientSession() as session: + if method == "GET": + params = {} + if len(params_query) != 0: + for param in params_query.split("&"): + parser_param = param.split("=") + params[parser_param[0]] = parser_param[1] + + async with session.get(url, params=params) as response: + result = await response.json() + elif method == "POST": + if msg_type == "JSON": + async with session.post(url, json=body) as response: + result = await response.json() + else: + async with session.post(url, data=body) as response: + result = await response.json() + elif method == "PUT": + if msg_type == "JSON": + async with session.put(url, json=body) as response: + result = await response.json() + else: + async with session.put(url, data=body) as response: + result = await response.json() else: - response = requests.put(url, data=body) - else: - logger.error(f'Method Not Allowed. {method}') - return {"result": 0, "errorMessage": "Method Not Allowed."} - return response.json() + logger.error(f'Method Not Allowed. {method}') + result = {"result": 0, "errorMessage": "Method Not Allowed."} + return result def call_remote_func(api_info, api_params, input_params): @@ -68,4 +76,5 @@ def call_remote_func(api_info, api_params, input_params): cmd = f'{api_info["command"]} {command_input}' result = eval(remote_cmd.cmd_exec(cmd)) + return result From f0dbb667fd179f112fdb389da661e7617ebae2e6 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 9 Jun 2022 16:18:05 +0900 Subject: [PATCH 090/236] =?UTF-8?q?fix=20:=20=20api=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 35 ++++++++++++++++----------------- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 6 ++---- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 30ade1c1..e32a2766 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -276,29 +276,29 @@ def update_api(self, api_info: ApiInfo): try: db = connect_db(config.db_type, config.db_info) - update_api_info = {} - update_api_params = [] + insert_api_info = {} + insert_api_params = [] for key, value in api_info.__dict__.items(): if key == "PARAMS": for param in value: - update_api_params.append(param.__dict__) + insert_api_params.append(param.__dict__) else: - update_api_info[key] = value - - api_info_query = f'UPDATE api_info SET "URL"={convert_data(update_api_info["URL"])}, \ - "METH"={convert_data(update_api_info["METH"])}, \ - "CMD"={convert_data(update_api_info["CMD"])}, \ - "MODE"= {convert_data(update_api_info["MODE"])}, \ - "CTGRY"={convert_data(update_api_info["CTGRY"])} \ - WHERE "API_NM"={convert_data(update_api_info["API_NM"])};' + insert_api_info[key] = value + db.execute( + f'DELETE FROM api_info WHERE "API_NM" = {convert_data(insert_api_info["API_NM"])};') + + api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "URL", "METH", "CMD", "MODE") \ + VALUES ({convert_data(insert_api_info["API_NM"])}, {convert_data(insert_api_info["CTGRY"])}, \ + {convert_data(insert_api_info["URL"])}, {convert_data(insert_api_info["METH"])}, \ + {convert_data(insert_api_info["CMD"])}, {convert_data(insert_api_info["MODE"])});' db.execute(api_info_query) - for param in update_api_params: - api_params_query = f'UPDATE api_params SET "DATA_TYPE"={convert_data(param["DATA_TYPE"])}, \ - "DEFLT_VAL"={convert_data(param["DEFLT_VAL"])} \ - WHERE "API_NM"={convert_data(param["API_NM"])} AND \ - "NM"={convert_data(param["NM"])};' + for param in insert_api_params: + api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ + VALUES ({convert_data(param["API_NM"])}, {convert_data(param["NM"])}, \ + {convert_data(param["DATA_TYPE"])}, {convert_data(param["DEFLT_VAL"])});' db.execute(api_params_query) + except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -373,6 +373,5 @@ async def route_api(self, request: Request) -> Dict: if api_info["MODE"] == "MESSAGE PASSING": result = await bypass_msg(api_info, params_query, body) else: - result = call_remote_func(api_info, api_params, body) - + result = await call_remote_func(api_info, api_params, body) return result diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 99d9454d..f94d8892 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -98,4 +98,4 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + \ No newline at end of file diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 861c4168..13743bd0 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -1,4 +1,3 @@ -import requests import aiohttp from fastapi.logger import logger from urllib.parse import ParseResult @@ -58,7 +57,7 @@ async def bypass_msg(api_info, params_query, body): return result -def call_remote_func(api_info, api_params, input_params): +async def call_remote_func(api_info, api_params, input_params): msg_type = api_info["MSG_TYPE"] remote_cmd = RemoteCmd( @@ -74,7 +73,6 @@ def call_remote_func(api_info, api_params, input_params): f'parameter set default value. [{param["param_name"]}]') command_input += f' --{param["param_name"]} {param["default_value"]}' - cmd = f'{api_info["command"]} {command_input}' + cmd = f'{api_info["CMD"]} {command_input}' result = eval(remote_cmd.cmd_exec(cmd)) - return result From ecc13975c7626fe2fe266a5d1812e12dec09afdc Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 13 Jun 2022 12:55:07 +0900 Subject: [PATCH 091/236] =?UTF-8?q?feat=20:=20remote=20call=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EB=B9=84=EB=8F=99=EA=B8=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 원격 함수 호출 비동기 처리 및 RemoteCmd.py 삭제 --- API-ROUTER/ConnectManager/RemoteCmd.py | 23 ----------------------- API-ROUTER/ConnectManager/__init__.py | 1 - API-ROUTER/Utils/RouteUtil.py | 23 +++++++++++++++++------ API-SERVICE/ApiList/meta/getTest.py | 12 ++++++++++++ API-SERVICE/ApiList/meta/postTest.py | 12 ++++++++++++ API-SERVICE/conf/api_config.ini | 10 ++++++++++ 6 files changed, 51 insertions(+), 30 deletions(-) delete mode 100644 API-ROUTER/ConnectManager/RemoteCmd.py create mode 100644 API-SERVICE/ApiList/meta/getTest.py create mode 100644 API-SERVICE/ApiList/meta/postTest.py diff --git a/API-ROUTER/ConnectManager/RemoteCmd.py b/API-ROUTER/ConnectManager/RemoteCmd.py deleted file mode 100644 index 7fe9ac10..00000000 --- a/API-ROUTER/ConnectManager/RemoteCmd.py +++ /dev/null @@ -1,23 +0,0 @@ -import paramiko -from fastapi.logger import logger - - -class RemoteCmd: - def __init__(self, ip: str, port: int, user_name: str, password: str) -> None: - self.ssh = self.remote_connect(ip, port, user_name, password) - - def remote_connect(self, ip: str, port: int, user_name: str, password: str) -> paramiko.SSHClient: - ssh = paramiko.SSHClient() - ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - ssh.connect(ip, port=port, username=user_name, password=password) - return ssh - - def cmd_exec(self, cmd: str) -> str: - _, stdout, _ = self.ssh.exec_command(cmd) - lines = stdout.readlines() - result_data = ''.join(lines) - - return result_data - - def __del__(self): - self.ssh.close() diff --git a/API-ROUTER/ConnectManager/__init__.py b/API-ROUTER/ConnectManager/__init__.py index 2c01a72a..b5c0391e 100644 --- a/API-ROUTER/ConnectManager/__init__.py +++ b/API-ROUTER/ConnectManager/__init__.py @@ -1,2 +1 @@ -from .RemoteCmd import * from .PostgresManager import * diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 13743bd0..4286854f 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -1,8 +1,8 @@ +import asyncssh import aiohttp from fastapi.logger import logger from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config -from ConnectManager import RemoteCmd def make_url(server_name: str, url_path: str): @@ -57,11 +57,17 @@ async def bypass_msg(api_info, params_query, body): return result +async def run_cmd(cmd): + async with asyncssh.connect(host=config.remote_info["host"], port=int(config.remote_info["port"]), + username=config.remote_info["id"], password=config.remote_info["password"]) as conn: + result = await conn.run(cmd, check=True) + logger.debug(f'Command Result : {result.stdout}') + return result.stdout + + async def call_remote_func(api_info, api_params, input_params): msg_type = api_info["MSG_TYPE"] - remote_cmd = RemoteCmd( - config.remote_info["host"], config.remote_info["port"], config.remote_info["id"], config.remote_info["password"]) command_input = "" if msg_type == "JSON": for param in api_params: @@ -69,10 +75,15 @@ async def call_remote_func(api_info, api_params, input_params): data = input_params[param["param_name"]] command_input += f' --{param["param_name"]} {data}' except KeyError: - print( + logger.error( f'parameter set default value. [{param["param_name"]}]') command_input += f' --{param["param_name"]} {param["default_value"]}' cmd = f'{api_info["CMD"]} {command_input}' - result = eval(remote_cmd.cmd_exec(cmd)) - return result + + try: + result = await run_cmd(cmd) + except (OSError, asyncssh.Error) as exc: + logger.error(f'SSH connection failed: {str(exc)}') + + return eval(result) diff --git a/API-SERVICE/ApiList/meta/getTest.py b/API-SERVICE/ApiList/meta/getTest.py new file mode 100644 index 00000000..8828e01f --- /dev/null +++ b/API-SERVICE/ApiList/meta/getTest.py @@ -0,0 +1,12 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from fastapi.logger import logger +from starlette.requests import Request + + +def api(request: Request) -> Dict: + + result = {"result": 0, "errorMessage": "getTest"} + + return result diff --git a/API-SERVICE/ApiList/meta/postTest.py b/API-SERVICE/ApiList/meta/postTest.py new file mode 100644 index 00000000..38fa683c --- /dev/null +++ b/API-SERVICE/ApiList/meta/postTest.py @@ -0,0 +1,12 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from fastapi.logger import logger +from starlette.requests import Request + + +def api(request: Request) -> Dict: + logger.error(request.json()) + result = {"result": 0, "errorMessage": "postTest"} + + return result diff --git a/API-SERVICE/conf/api_config.ini b/API-SERVICE/conf/api_config.ini index 99af7001..5bddf6bc 100644 --- a/API-SERVICE/conf/api_config.ini +++ b/API-SERVICE/conf/api_config.ini @@ -66,4 +66,14 @@ sub_dir = meta [addChildCategory] method = POST url_prefix = /api +sub_dir = meta + +[getTest] +method = GET +url_prefix = /api +sub_dir = meta + +[postTest] +method = POST +url_prefix = /api sub_dir = meta \ No newline at end of file From 2489d70eff8f40cabf904bcda7ed32fd58d2b28d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 15 Jun 2022 11:20:25 +0900 Subject: [PATCH 092/236] =?UTF-8?q?feat=20:=20option=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20API=20category=20=EB=B3=84=EB=A1=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=8F=99=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 14 +++---- API-ROUTER/Utils/RouteUtil.py | 5 ++- API-SERVICE/ApiList/meta/addChildCategory.py | 2 +- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 6 +-- API-SERVICE/ApiList/meta/getBizMetaList.py | 6 +-- API-SERVICE/ApiList/meta/getCategoryList.py | 2 +- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 6 +-- API-SERVICE/ApiList/meta/insertBizMeta.py | 2 +- API-SERVICE/ApiList/meta/insertMetaMap.py | 6 +-- API-SERVICE/ApiList/meta/insertMetaName.py | 2 +- API-SERVICE/ApiList/meta/metaMapList.py | 2 +- API-SERVICE/ApiList/meta/metaNameList.py | 2 +- API-SERVICE/ApiList/meta/updateBizMeta.py | 2 +- API-SERVICE/ApiList/meta/updateCategory.py | 2 +- API-SERVICE/ApiList/meta/updateMetaName.py | 2 +- API-SERVICE/ApiList/meta/useMetaNameList.py | 2 +- API-SERVICE/ApiList/sitemng/getCodeGroupId.py | 24 ++++++++++++ API-SERVICE/ApiService/ApiService.py | 22 +++++------ API-SERVICE/ApiService/ApiServiceConfig.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 18 ++++----- API-SERVICE/conf/api_config.ini | 39 +++++++++++-------- API-SERVICE/conf/config.ini | 15 ++++--- .../conf/{logging.conf => meta_logging.conf} | 2 +- API-SERVICE/conf/sitemng_logging.conf | 30 ++++++++++++++ API-SERVICE/safe_start.sh | 8 +++- API-SERVICE/server.py | 2 +- API-SERVICE/start.sh | 8 +++- 27 files changed, 151 insertions(+), 82 deletions(-) create mode 100644 API-SERVICE/ApiList/sitemng/getCodeGroupId.py rename API-SERVICE/conf/{logging.conf => meta_logging.conf} (90%) create mode 100644 API-SERVICE/conf/sitemng_logging.conf diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index e32a2766..f54d8d3c 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -82,7 +82,7 @@ def set_route(self) -> None: self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', module.api, methods=[api_info["method"]], tags=["service"]) - def set_server_info(self, api_server_info: ApiServerInfo): + def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: api_server_info = api_server_info.__dict__ api_server_info_query = f'INSERT INTO api_server_info ("NM", "IP_ADR", "DOMN_NM") \ VALUES ({convert_data(api_server_info["NM"])}, \ @@ -103,7 +103,7 @@ def set_server_info(self, api_server_info: ApiServerInfo): return result - def update_server_info(self, api_server_info: ApiServerInfo): + def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: api_server_info = api_server_info.__dict__ api_server_info_query = f'UPDATE api_server_info SET "IP_ADR"={convert_data(api_server_info["IP_ADR"])}, \ "DOMN_NM"={convert_data(api_server_info["DOMN_NM"])} \ @@ -123,7 +123,7 @@ def update_server_info(self, api_server_info: ApiServerInfo): return result - def get_server_info_list(self): + def get_server_info_list(self) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( @@ -138,7 +138,7 @@ def get_server_info_list(self): return result - def get_server_info(self, NM: str): + def get_server_info(self, NM: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( @@ -153,7 +153,7 @@ def get_server_info(self, NM: str): return result - def del_server_info(self, NM: str): + def del_server_info(self, NM: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) db.execute( @@ -190,7 +190,7 @@ def get_api_list(self) -> Dict: return result - def get_api_category_list(self, CTGRY: str): + def get_api_category_list(self, CTGRY: str) -> Dict: api_params_list = [] params_columns = [] try: @@ -272,7 +272,7 @@ def set_api(self, api_info: ApiInfo) -> Dict: return result - def update_api(self, api_info: ApiInfo): + def update_api(self, api_info: ApiInfo) -> Dict: try: db = connect_db(config.db_type, config.db_info) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 4286854f..54172608 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -3,6 +3,7 @@ from fastapi.logger import logger from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config +from typing import Dict def make_url(server_name: str, url_path: str): @@ -57,7 +58,7 @@ async def bypass_msg(api_info, params_query, body): return result -async def run_cmd(cmd): +async def run_cmd(cmd: str): async with asyncssh.connect(host=config.remote_info["host"], port=int(config.remote_info["port"]), username=config.remote_info["id"], password=config.remote_info["password"]) as conn: result = await conn.run(cmd, check=True) @@ -65,7 +66,7 @@ async def run_cmd(cmd): return result.stdout -async def call_remote_func(api_info, api_params, input_params): +async def call_remote_func(api_info, api_params, input_params) -> Dict: msg_type = api_info["MSG_TYPE"] command_input = "" diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index a773a8aa..43350d5a 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -21,7 +21,7 @@ def api(insert: addChildCategory, request: Request) -> Dict: VALUES ({convert_data(insert.NODE_NM)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute(query) except Exception as err: result = {"result": 0, "errorMessage": err} diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index ad703c1f..3b98bd62 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -15,7 +15,7 @@ def api(request: Request, datasetId: str = None) -> Dict: v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE "BIZ_DATASET_ID" = {convert_data(datasetId)}' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) meta_wrap = db.select(v_meta_wrap_query) # v_meta_name = db.select(v_meta_name_query) except Exception as err: @@ -23,7 +23,7 @@ def api(request: Request, datasetId: str = None) -> Dict: logger.error(err) else: if datasetId is None: - result = make_res_msg(1,"",{},meta_wrap[1]) + result = make_res_msg(1, "", {}, meta_wrap[1]) else: - result = make_res_msg(1,"",meta_wrap[0][0],meta_wrap[1]) + result = make_res_msg(1, "", meta_wrap[0][0], meta_wrap[1]) return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 9c361243..dd8667ff 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -10,12 +10,12 @@ def api(request: Request) -> Dict: v_meta_wrap_query = "SELECT * FROM v_biz_meta_wrap" try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) meta_wrap = db.select(v_meta_wrap_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = make_res_msg(1,"",meta_wrap[0],meta_wrap[1]) + result = make_res_msg(1, "", meta_wrap[0], meta_wrap[1]) - return result \ No newline at end of file + return result diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 1fdc3778..6e1125b2 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -13,7 +13,7 @@ def api(request: Request) -> Dict: order by "PRNTS_ID", "NODE_ID";' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) category_list = db.select(category_query)[0] except Exception as err: result = {"result": 0, "errorMessage": err} diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 880e9b9b..c36c1830 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -6,7 +6,7 @@ from starlette.requests import Request -def api(request: Request,nameId:str=None) -> Dict: +def api(request: Request, nameId: str = None) -> Dict: user_info = get_token_info(request.headers) if nameId is None: query = f"SELECT * FROM v_biz_meta_name" @@ -14,7 +14,7 @@ def api(request: Request,nameId:str=None) -> Dict: query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(nameId)}' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) meta_name = db.select(query) except Exception as err: result = {"result": 0, "errorMessage": err} @@ -25,4 +25,4 @@ def api(request: Request,nameId:str=None) -> Dict: result["data"]["header"] = meta_name[0] else: result = make_res_msg(1, "", meta_name[0][0], meta_name[1]) - return result \ No newline at end of file + return result diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index 781fe032..a7a1e310 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -14,7 +14,7 @@ def api(biz_meta_list: list, request: Request) -> Dict: biz_meta_query = 'SELECT "ITEM_ID" as itemId, "ITEM_VAL" as itemVal FROM tb_biz_meta;' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) for biz_meta in biz_meta_list: item_id, item_val = tuple(biz_meta.values()) query = 'INSERT INTO tb_biz_meta ("BIZ_DATASET_ID", "ITEM_ID", "ITEM_VAL" )' + \ diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index f2c181a0..63170aaa 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -6,7 +6,7 @@ from starlette.requests import Request -def api(map_list: list ,request: Request) -> Dict: +def api(map_list: list, request: Request) -> Dict: user_info = get_token_info(request.headers) view_col = ['"BIZ_DATASET_ID"'] @@ -26,7 +26,7 @@ def api(map_list: list ,request: Request) -> Dict: """ try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute(drop_view_query) db.execute(truncate_query) @@ -37,7 +37,7 @@ def api(map_list: list ,request: Request) -> Dict: # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] - for i,meta_map in enumerate(meta_map_item): + for i, meta_map in enumerate(meta_map_item): eng_name = meta_map["ENG_NM"] col_format = f'\t\tmax(case when "ITEM_ID" = {convert_data(i + 1)} then "ITEM_VAL" end) as {eng_name}' view_col.append(col_format) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index ed9ecf9f..28e65473 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -21,7 +21,7 @@ def api(insert: InsertMetaName, request: Request) -> Dict: VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, 0,\ {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute(query) except Exception as err: result = {"result": 0, "errorMessage": err} diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index e81e5aba..a079c360 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -22,7 +22,7 @@ def api(request: Request) -> Dict: # v_meta_map_query = "SELECT * FROM v_biz_meta_map;" try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) meta_map = db.select(meta_map_query) # v_meta_map = db.select(v_meta_map_query) except Exception as err: diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index ba169bcd..72c96b53 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -34,7 +34,7 @@ def api(perPage: int, curPage: int, request: Request) -> Dict: total_cnt_query = "SELECT count(*) as totalCount FROM tb_biz_meta_name" try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) meta_name = db.select(meta_name_query) total_cnt = db.select(total_cnt_query) except Exception as err: diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index cbc93538..124b3ac7 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -16,7 +16,7 @@ def api(update: UpdateBizMeta, request: Request) -> Dict: user_info = get_token_info(request.headers) try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) for data in update.dataList: query = f'UPDATE tb_biz_meta\ SET "ITEM_ID" = {convert_data(data["itemId"])},\ diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 92bed3b1..166508c7 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -23,7 +23,7 @@ def api(update: UpdateCategory, request: Request) -> Dict: "NODE_NM" = {convert_data(update.NODE_NM)}\ WHERE "NODE_ID" = {convert_data(update.NODE_ID)};' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute(query) except Exception as err: result = {"result": 0, "errorMessage": err} diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 9106a447..9b4a314d 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -26,7 +26,7 @@ def api(update: UpdatetMetaName, request: Request) -> Dict: WHERE "NM_ID" = {convert_data(update.NM_ID)};' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute(query) except Exception as err: result = {"result": 0, "errorMessage": err} diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 7550c83c..f6804453 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -27,7 +27,7 @@ def api(request: Request) -> Dict: order by tbmn."NM_ID";""" try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) meta_name = db.select(meta_name_query) except Exception as err: result = {"result": 0, "errorMessage": err} diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py new file mode 100644 index 00000000..e599f2c6 --- /dev/null +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -0,0 +1,24 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from fastapi.logger import logger +from starlette.requests import Request +from Utils.DataBaseUtil import convert_data + + +def api(group_id, request: Request) -> Dict: + user_info = get_token_info(request.headers) + + get_code_info_query = f'select code_id, code_nm \ + from tb_code_detail \ + where code_group_id = {convert_data(group_id)};' + + try: + db = connect_db(config.db_info) + code_info = db.select(get_code_info_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = make_res_msg(1, "", code_info[0], code_info[1]) + return result diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index 45f30fda..b73f7db4 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -11,14 +11,14 @@ def __init__(self) -> None: def set_route(self) -> None: for api_name, api_info in config.api_config.items(): - module_path = f'{config.root_path}/API-SERVICE/ApiList/{api_info["sub_dir"]}/{api_name}.py' - module_name = "api" - spec = importlib.util.spec_from_file_location(module_name, module_path) - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', - module.api, methods=[api_info["method"]], - tags=[f'service [ {api_info["url_prefix"]}/{api_info["sub_dir"]} ]']) - - - \ No newline at end of file + if config.category == api_info["sub_dir"]: + module_path = f'{config.root_path}/API-SERVICE/ApiList/{api_info["sub_dir"]}/{api_name}.py' + module_name = "api" + spec = importlib.util.spec_from_file_location( + module_name, module_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + self.router.add_api_route(f'{api_info["url"]}', + module.api, methods=[ + api_info["method"]], + tags=[f'service [ {api_info["sub_dir"]} ]']) diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 7c0c82f6..aa7e152c 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -4,7 +4,7 @@ class ApiServiceConfig: root_path: str - db_type: str + category: str db_info: Dict remote_info: Dict diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index d17433ce..09b3a0d1 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -30,7 +30,7 @@ def parser_params() -> Any: parser = argparse.ArgumentParser() parser.add_argument("--host", type=str, default="127.0.0.1") parser.add_argument("--port", type=int, default=19000) - parser.add_argument("--db_type", default="postgresql") + parser.add_argument("--category", default="meta") return parser.parse_args() @@ -40,21 +40,19 @@ def prepare_config() -> None: config.root_path = Path(os.getcwd()).parent api_router_cfg = get_config(config.root_path, "config.ini") config.api_config = get_config(config.root_path, "api_config.ini") - config.db_type = args.db_type + config.category = args.category config.server_host = args.host config.server_port = args.port - config.db_info = api_router_cfg[config.db_type] + config.db_info = api_router_cfg[config.category] config.secret_info = api_router_cfg["secret_info"] @retry(psycopg2.OperationalError, delay=1, tries=3) -def connect_db(db_type, db_info): - if db_type == "postgresql": - db = PostgresManager(host=db_info["host"], port=db_info["port"], - user=db_info["user"], password=db_info["password"], - database=db_info["database"], schema=db_info["schema"]) - else: - raise Exception(f'Not Implemented. ({db_type})') +def connect_db(db_info): + db = PostgresManager(host=db_info["host"], port=db_info["port"], + user=db_info["user"], password=db_info["password"], + database=db_info["database"], schema=db_info["schema"]) + return db diff --git a/API-SERVICE/conf/api_config.ini b/API-SERVICE/conf/api_config.ini index 5bddf6bc..443a24a2 100644 --- a/API-SERVICE/conf/api_config.ini +++ b/API-SERVICE/conf/api_config.ini @@ -1,79 +1,84 @@ [metaNameList] method = GET -url_prefix = /api +url = /api/meta/metaNameList sub_dir = meta [getMetaNameDetail] method = GET -url_prefix = /api +url = /api/meta/getMetaNameDetail sub_dir = meta [insertMetaName] method = POST -url_prefix = /api +url = /api/meta/insertMetaName sub_dir = meta [updateMetaName] method = PUT -url_prefix = /api +url = /api/meta/updateMetaName sub_dir = meta [metaMapList] method = GET -url_prefix = /api +url = /api/meta/metaMapList sub_dir = meta [useMetaNameList] method = GET -url_prefix = /api +url = /api/meta/useMetaNameList sub_dir = meta [insertMetaMap] method = POST -url_prefix = /api +url = /api/meta/insertMetaMap sub_dir = meta [getBizMetaList] method = GET -url_prefix = /api +url = /api/meta/getBizMetaList sub_dir = meta [getBizMetaDetail] method = GET -url_prefix = /api +url = /api/meta/getBizMetaDetail sub_dir = meta [insertBizMeta] method = POST -url_prefix = /api +url = /api/meta/insertBizMeta sub_dir = meta [updateBizMeta] method = PUT -url_prefix = /api +url = /api/meta/updateBizMeta sub_dir = meta [getCategoryList] method = GET -url_prefix = /api +url = /api/meta/getCategoryList sub_dir = meta [updateCategory] method = PUT -url_prefix = /api +url = /api/meta/updateCategory sub_dir = meta [addChildCategory] method = POST -url_prefix = /api +url = /api/meta/addChildCategory sub_dir = meta [getTest] method = GET -url_prefix = /api +url = /api/meta/getTest sub_dir = meta [postTest] method = POST -url_prefix = /api -sub_dir = meta \ No newline at end of file +url = /api/meta/postTest +sub_dir = meta + +[getCodeGroupId] +method = GET +url = /api/sitemng/code +sub_dir = sitemng \ No newline at end of file diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/config.ini index dc13f89e..27671d8d 100644 --- a/API-SERVICE/conf/config.ini +++ b/API-SERVICE/conf/config.ini @@ -1,9 +1,4 @@ -[default] -db = postgresql -host = 192.168.101.43 -port = 17000 - -[postgresql] +[meta] host = 192.168.100.126 port = 25432 user = dpme @@ -11,6 +6,14 @@ password = hello.meta12#$ database = dataportal schema = meta +[sitemng] +host = 192.168.100.126 +port = 25432 +user = dpsi +password = hello.sitemng12#$ +database = dataportal +schema = sitemng + [secret_info] name = user-katech-access-token secret = jwt-secrect-b-iris \ No newline at end of file diff --git a/API-SERVICE/conf/logging.conf b/API-SERVICE/conf/meta_logging.conf similarity index 90% rename from API-SERVICE/conf/logging.conf rename to API-SERVICE/conf/meta_logging.conf index 3c3fc845..10717db2 100644 --- a/API-SERVICE/conf/logging.conf +++ b/API-SERVICE/conf/meta_logging.conf @@ -23,7 +23,7 @@ level=DEBUG [handler_rotatingFileHandler] class=handlers.RotatingFileHandler formatter=default -args=('log/API-Service.log', 'a', 20000000, 10) +args=('log/meta.log', 'a', 20000000, 10) level=DEBUG diff --git a/API-SERVICE/conf/sitemng_logging.conf b/API-SERVICE/conf/sitemng_logging.conf new file mode 100644 index 00000000..614aa30c --- /dev/null +++ b/API-SERVICE/conf/sitemng_logging.conf @@ -0,0 +1,30 @@ +[loggers] +keys=root + +[logger_root] +level=DEBUG +handlers=console,rotatingFileHandler + +[formatters] +keys=default + +[formatter_default] +format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s + +[handlers] +keys=console,rotatingFileHandler + +[handler_console] +class=StreamHandler +args=(sys.stdout,) +formatter=default +level=DEBUG + +[handler_rotatingFileHandler] +class=handlers.RotatingFileHandler +formatter=default +args=('log/sitemng.log', 'a', 20000000, 10) +level=DEBUG + + + diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh index bcf21fe5..e89548bd 100644 --- a/API-SERVICE/safe_start.sh +++ b/API-SERVICE/safe_start.sh @@ -1,6 +1,7 @@ app_name=API-Service router_host=$1 router_port=$2 +category=$3 input() { if [[ $router_host == "" ]];then @@ -9,6 +10,9 @@ input() { if [[ $router_port == "" ]];then router_port=9014 fi + if [[ $category == "" ]];then + category=meta + fi } router_stop() { @@ -41,9 +45,9 @@ uvicorn_stop() { router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 & } echo "########## Safe Start (${app_name}) ##########" diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 88521e6a..1c993613 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -11,4 +11,4 @@ if __name__ == '__main__': uvicorn.run("server:app", host=config.server_host, port=config.server_port, - reload=True, log_config=f'{config.root_path}/API-SERVICE/conf/logging.conf') + reload=True, log_config=f'{config.root_path}/API-SERVICE/conf/{config.category}_logging.conf') diff --git a/API-SERVICE/start.sh b/API-SERVICE/start.sh index 97739233..c5cc0774 100644 --- a/API-SERVICE/start.sh +++ b/API-SERVICE/start.sh @@ -1,6 +1,7 @@ app_name=API-Service router_host=$1 router_port=$2 +category=$3 input() { if [[ $router_host == "" ]];then @@ -9,13 +10,16 @@ input() { if [[ $router_port == "" ]];then router_port=9014 fi + if [[ $category == "" ]];then + category=meta + fi } router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 & } echo "########## Start Application (${app_name}) ##########" From 960ed88fdd1f657456a0b72a5269edc2d38d1995 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 15 Jun 2022 13:41:22 +0900 Subject: [PATCH 093/236] =?UTF-8?q?refactor=20:=20config=20=EB=B0=8F=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/safe_start.sh | 4 ---- API-ROUTER/server.py | 7 +++++++ API-ROUTER/start.sh | 4 ---- API-SERVICE/ApiList/sitemng/getCodeGroupId.py | 6 +++--- API-SERVICE/Utils/CommonUtil.py | 6 ++++-- API-SERVICE/conf/{ => meta}/api_config.ini | 5 ----- API-SERVICE/conf/meta/config.ini | 11 +++++++++++ .../conf/{meta_logging.conf => meta/logging.conf} | 2 +- API-SERVICE/conf/sitemng/api_config.ini | 4 ++++ API-SERVICE/conf/{ => sitemng}/config.ini | 8 -------- .../{sitemng_logging.conf => sitemng/logging.conf} | 2 +- API-SERVICE/safe_start.sh | 4 ---- API-SERVICE/server.py | 9 ++++++++- API-SERVICE/start.sh | 4 ---- 14 files changed, 39 insertions(+), 37 deletions(-) rename API-SERVICE/conf/{ => meta}/api_config.ini (94%) create mode 100644 API-SERVICE/conf/meta/config.ini rename API-SERVICE/conf/{meta_logging.conf => meta/logging.conf} (90%) create mode 100644 API-SERVICE/conf/sitemng/api_config.ini rename API-SERVICE/conf/{ => sitemng}/config.ini (62%) rename API-SERVICE/conf/{sitemng_logging.conf => sitemng/logging.conf} (89%) diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh index e303c954..8fa73b56 100644 --- a/API-ROUTER/safe_start.sh +++ b/API-ROUTER/safe_start.sh @@ -50,10 +50,6 @@ echo "########## Safe Start (${app_name}) ##########" echo "========== STOP ${app_name} ==========" input -source_path="$( cd "$( dirname "$0" )" && pwd -P )" -make_dir="${source_path}/log" -mkdir $make_dir - router_stop sleep 2 uvicorn_stop diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index c2a0e21a..ede64e80 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -3,6 +3,7 @@ from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import prepare_config from ApiRoute import ApiRoute +import os prepare_config() api_router = ApiRoute() @@ -10,5 +11,11 @@ app.include_router(api_router.router) if __name__ == '__main__': + log_dir = f'{config.root_path}/API-ROUTER/log' + if os.path.isdir(log_dir): + print(f"Directory Exists") + else: + print(f"Make log dir : {log_dir}") + os.makedirs(log_dir) uvicorn.run("server:app", host=config.server_host, port=config.server_port, reload=True, log_config=f'{config.root_path}/API-ROUTER/conf/logging.conf') diff --git a/API-ROUTER/start.sh b/API-ROUTER/start.sh index d81f756f..4d7d7ab8 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -22,8 +22,4 @@ echo "########## Start Application (${app_name}) ##########" echo "========== START ${app_name} ==========" input -source_path="$( cd "$( dirname "$0" )" && pwd -P )" -make_dir="${source_path}/log" -mkdir $make_dir - router_start diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py index e599f2c6..ea9462a7 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -6,12 +6,12 @@ from Utils.DataBaseUtil import convert_data -def api(group_id, request: Request) -> Dict: +def api(groupId, request: Request) -> Dict: user_info = get_token_info(request.headers) get_code_info_query = f'select code_id, code_nm \ from tb_code_detail \ - where code_group_id = {convert_data(group_id)};' + where code_group_id = {convert_data(groupId)};' try: db = connect_db(config.db_info) @@ -20,5 +20,5 @@ def api(group_id, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = make_res_msg(1, "", code_info[0], code_info[1]) + result = code_info[0] return result diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 09b3a0d1..fb2f55f4 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -38,8 +38,10 @@ def parser_params() -> Any: def prepare_config() -> None: args = parser_params() config.root_path = Path(os.getcwd()).parent - api_router_cfg = get_config(config.root_path, "config.ini") - config.api_config = get_config(config.root_path, "api_config.ini") + api_router_cfg = get_config( + config.root_path, f"{args.category}/config.ini") + config.api_config = get_config( + config.root_path, f"{args.category}/api_config.ini") config.category = args.category config.server_host = args.host config.server_port = args.port diff --git a/API-SERVICE/conf/api_config.ini b/API-SERVICE/conf/meta/api_config.ini similarity index 94% rename from API-SERVICE/conf/api_config.ini rename to API-SERVICE/conf/meta/api_config.ini index 443a24a2..8b233823 100644 --- a/API-SERVICE/conf/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -77,8 +77,3 @@ sub_dir = meta method = POST url = /api/meta/postTest sub_dir = meta - -[getCodeGroupId] -method = GET -url = /api/sitemng/code -sub_dir = sitemng \ No newline at end of file diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini new file mode 100644 index 00000000..30139f76 --- /dev/null +++ b/API-SERVICE/conf/meta/config.ini @@ -0,0 +1,11 @@ +[meta] +host = 192.168.100.126 +port = 25432 +user = dpme +password = hello.meta12#$ +database = dataportal +schema = meta + +[secret_info] +name = user-katech-access-token +secret = jwt-secrect-b-iris \ No newline at end of file diff --git a/API-SERVICE/conf/meta_logging.conf b/API-SERVICE/conf/meta/logging.conf similarity index 90% rename from API-SERVICE/conf/meta_logging.conf rename to API-SERVICE/conf/meta/logging.conf index 10717db2..b1faa2c4 100644 --- a/API-SERVICE/conf/meta_logging.conf +++ b/API-SERVICE/conf/meta/logging.conf @@ -23,7 +23,7 @@ level=DEBUG [handler_rotatingFileHandler] class=handlers.RotatingFileHandler formatter=default -args=('log/meta.log', 'a', 20000000, 10) +args=('log/meta/meta.log', 'a', 20000000, 10) level=DEBUG diff --git a/API-SERVICE/conf/sitemng/api_config.ini b/API-SERVICE/conf/sitemng/api_config.ini new file mode 100644 index 00000000..18f70234 --- /dev/null +++ b/API-SERVICE/conf/sitemng/api_config.ini @@ -0,0 +1,4 @@ +[getCodeGroupId] +method = GET +url = /api/sitemng/code +sub_dir = sitemng \ No newline at end of file diff --git a/API-SERVICE/conf/config.ini b/API-SERVICE/conf/sitemng/config.ini similarity index 62% rename from API-SERVICE/conf/config.ini rename to API-SERVICE/conf/sitemng/config.ini index 27671d8d..8caa72fd 100644 --- a/API-SERVICE/conf/config.ini +++ b/API-SERVICE/conf/sitemng/config.ini @@ -1,11 +1,3 @@ -[meta] -host = 192.168.100.126 -port = 25432 -user = dpme -password = hello.meta12#$ -database = dataportal -schema = meta - [sitemng] host = 192.168.100.126 port = 25432 diff --git a/API-SERVICE/conf/sitemng_logging.conf b/API-SERVICE/conf/sitemng/logging.conf similarity index 89% rename from API-SERVICE/conf/sitemng_logging.conf rename to API-SERVICE/conf/sitemng/logging.conf index 614aa30c..fbcc4113 100644 --- a/API-SERVICE/conf/sitemng_logging.conf +++ b/API-SERVICE/conf/sitemng/logging.conf @@ -23,7 +23,7 @@ level=DEBUG [handler_rotatingFileHandler] class=handlers.RotatingFileHandler formatter=default -args=('log/sitemng.log', 'a', 20000000, 10) +args=('log/sitemng/sitemng.log', 'a', 20000000, 10) level=DEBUG diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh index e89548bd..29615580 100644 --- a/API-SERVICE/safe_start.sh +++ b/API-SERVICE/safe_start.sh @@ -54,10 +54,6 @@ echo "########## Safe Start (${app_name}) ##########" echo "========== STOP ${app_name} ==========" input -source_path="$( cd "$( dirname "$0" )" && pwd -P )" -make_dir="${source_path}/log" -mkdir $make_dir - router_stop sleep 2 uvicorn_stop diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 1c993613..39d70ee6 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -3,6 +3,7 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import prepare_config from ApiService import ApiService +import os prepare_config() api_router = ApiService() @@ -10,5 +11,11 @@ app.include_router(api_router.router) if __name__ == '__main__': + log_dir = f'{config.root_path}/API-SERVICE/log/{config.category}' + if os.path.isdir(log_dir): + print(f"Directory Exists") + else: + print(f"Make log dir : {log_dir}") + os.makedirs(log_dir) uvicorn.run("server:app", host=config.server_host, port=config.server_port, - reload=True, log_config=f'{config.root_path}/API-SERVICE/conf/{config.category}_logging.conf') + reload=True, log_config=f'{config.root_path}/API-SERVICE/conf/{config.category}/logging.conf') diff --git a/API-SERVICE/start.sh b/API-SERVICE/start.sh index c5cc0774..e686cca5 100644 --- a/API-SERVICE/start.sh +++ b/API-SERVICE/start.sh @@ -26,8 +26,4 @@ echo "########## Start Application (${app_name}) ##########" echo "========== START ${app_name} ==========" input -source_path="$( cd "$( dirname "$0" )" && pwd -P )" -make_dir="${source_path}/log" -mkdir $make_dir - router_start From d34745baf386f834b02adbf937d8ac31d294a752 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 15 Jun 2022 14:19:51 +0900 Subject: [PATCH 094/236] =?UTF-8?q?feat=20:=20confg=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/meta/api_config.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 8b233823..4d87f589 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -14,7 +14,7 @@ url = /api/meta/insertMetaName sub_dir = meta [updateMetaName] -method = PUT +method = POST url = /api/meta/updateMetaName sub_dir = meta @@ -49,7 +49,7 @@ url = /api/meta/insertBizMeta sub_dir = meta [updateBizMeta] -method = PUT +method = POST url = /api/meta/updateBizMeta sub_dir = meta @@ -59,7 +59,7 @@ url = /api/meta/getCategoryList sub_dir = meta [updateCategory] -method = PUT +method = POST url = /api/meta/updateCategory sub_dir = meta From cce7f9b66b5c96dfdd76f628af0ac5584b63a5ce Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 20 Jun 2022 15:52:19 +0900 Subject: [PATCH 095/236] =?UTF-8?q?[AIPLATFORM-367]=20feat:=20item=5Fid?= =?UTF-8?q?=EB=A5=BC=20=EB=B6=80=EC=97=AC=20=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95,=20biz=5Fdatas?= =?UTF-8?q?et=5Fid=20=EC=86=8C=EB=AC=B8=EC=9E=90=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaMap.py | 46 ++++++++++++++--------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 63170aaa..2495777d 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -1,45 +1,55 @@ -from fastapi.logger import logger +import uuid from typing import Dict +from pydantic import BaseModel +from fastapi.logger import logger +from starlette.requests import Request from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data -from starlette.requests import Request -def api(map_list: list, request: Request) -> Dict: +class NmIdList(BaseModel): + nm_id_list: list + + +def api(insert: NmIdList, request: Request) -> Dict: user_info = get_token_info(request.headers) - view_col = ['"BIZ_DATASET_ID"'] - drop_view_query = "DROP VIEW v_biz_meta_wrap" - truncate_query = "TRUNCATE tb_biz_meta_map;" + view_col = ['"BIZ_DATASET_ID" as biz_dataset_id'] + drop_view_query = "DROP VIEW IF EXISTS v_biz_meta_wrap" map_insert_query = 'INSERT INTO tb_biz_meta_map ("ITEM_ID", "NM_ID") VALUES ({0}, {1});' meta_map_query = "SELECT * FROM tb_biz_meta_map" + nm_id_query = 'SELECT "NM_ID" FROM tb_biz_meta_map' + map_item_query = """ - select distinct - cast(meta_map."ITEM_ID" as INT) as ITEM_ID, + select distinct + meta_map."ITEM_ID", tbmn."ENG_NM" from tb_biz_meta_name tbmn left join tb_biz_meta_map meta_map on tbmn."NM_ID" = meta_map."NM_ID" - order by ITEM_ID asc + where "ITEM_ID" IS NOT NULL """ try: db = connect_db(config.db_info) - db.execute(drop_view_query) - db.execute(truncate_query) - for meta_map in map_list: - logger.info(meta_map) - db.execute(map_insert_query.format(convert_data(meta_map["ITEM_ID"]), - convert_data(meta_map["NM_ID"]))) + nm_id_set = {_["NM_ID"] for _ in db.select(nm_id_query)[0]} + nm_id_set = set(insert.nm_id_list) - nm_id_set + + for nm_id in nm_id_set: + db.execute(map_insert_query.format(convert_data(uuid.uuid4()), + convert_data(nm_id))) + + # drop view v_biz_meta_wrap + db.execute(drop_view_query) # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] for i, meta_map in enumerate(meta_map_item): - eng_name = meta_map["ENG_NM"] - col_format = f'\t\tmax(case when "ITEM_ID" = {convert_data(i + 1)} then "ITEM_VAL" end) as {eng_name}' + col_format = f'\t\tmax(case when "ITEM_ID" = {convert_data(meta_map["ITEM_ID"])} ' \ + f'then "ITEM_VAL" end) as {meta_map["ENG_NM"]}' view_col.append(col_format) view_col = ',\n'.join(view_col) @@ -54,7 +64,7 @@ def api(map_list: list, request: Request) -> Dict: # return data meta_map_list = db.select(meta_map_query)[0] - # 수정 해야함 + except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) From 976ddd0199975caf1dc3f768b94672a3fcb3fe08 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 21 Jun 2022 11:03:49 +0900 Subject: [PATCH 096/236] =?UTF-8?q?feat=20:=20api=20route=20=EB=8F=99?= =?UTF-8?q?=EC=9E=91=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사용자가 라우팅을 원하는 url을 직접 설정할 수 있도록 변경. --- API-ROUTER/ApiRoute/ApiRoute.py | 35 +++++++++++++------------ API-ROUTER/Utils/CommonUtil.py | 2 +- API-SERVICE/conf/meta/config.ini | 4 ++- API-SERVICE/conf/sitemng/api_config.ini | 2 +- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index f54d8d3c..60694cb4 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -26,6 +26,7 @@ class ApiParam(BaseModel): class ApiInfo(BaseModel): API_NM: str CTGRY: str + ROUTE_URL: str URL: str METH: str CMD: str @@ -70,7 +71,8 @@ def set_route(self) -> None: for api in api_info: self.router.add_api_route( - f'/route/{api["CTGRY"]}/{api["API_NM"]}', self.route_api, methods=[api["METH"]], tags=[f'Route Category ({api["CTGRY"]})']) + api["ROUTE_URL"], self.route_api, methods=[api["METH"]], tags=[f'Route Category ({api["CTGRY"]})']) + # f'/route/{api["CTGRY"]}/{api["API_NM"]}', self.route_api, methods=[api["METH"]], tags=[f'Route Category ({api["CTGRY"]})']) for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_info["sub_dir"]}/{api_name}.py' @@ -175,7 +177,7 @@ def get_api_list(self) -> Dict: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info ORDER BY "NO";') + f'SELECT "API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE" FROM api_info ORDER BY "NO";') api_params, params_column_names = db.select( f'SELECT * FROM api_params ORDER BY "API_NM", "NM";') except Exception: @@ -196,7 +198,7 @@ def get_api_category_list(self, CTGRY: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT "API_NM", "CTGRY", "URL", "METH", "CMD", "MODE" FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "NO";') + f'SELECT "API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE" FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "NO";') for info in api_info: logger.debug(f'INFO : {info["API_NM"]}') @@ -250,10 +252,11 @@ def set_api(self, api_info: ApiInfo) -> Dict: else: insert_api_info[key] = value - api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "URL", "METH", "CMD", "MODE") \ + api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE") \ VALUES ({convert_data(insert_api_info["API_NM"])}, {convert_data(insert_api_info["CTGRY"])}, \ - {convert_data(insert_api_info["URL"])}, {convert_data(insert_api_info["METH"])}, \ - {convert_data(insert_api_info["CMD"])}, {convert_data(insert_api_info["MODE"])});' + {convert_data(insert_api_info["ROUTE_URL"])}, {convert_data(insert_api_info["URL"])}, \ + {convert_data(insert_api_info["METH"])}, {convert_data(insert_api_info["CMD"])}, \ + {convert_data(insert_api_info["MODE"])});' db.execute(api_info_query) for param in insert_api_params: @@ -287,10 +290,12 @@ def update_api(self, api_info: ApiInfo) -> Dict: db.execute( f'DELETE FROM api_info WHERE "API_NM" = {convert_data(insert_api_info["API_NM"])};') - api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "URL", "METH", "CMD", "MODE") \ + api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE") \ VALUES ({convert_data(insert_api_info["API_NM"])}, {convert_data(insert_api_info["CTGRY"])}, \ - {convert_data(insert_api_info["URL"])}, {convert_data(insert_api_info["METH"])}, \ - {convert_data(insert_api_info["CMD"])}, {convert_data(insert_api_info["MODE"])});' + {convert_data(insert_api_info["ROUTE_URL"])}, {convert_data(insert_api_info["URL"])}, \ + {convert_data(insert_api_info["METH"])}, {convert_data(insert_api_info["CMD"])}, \ + {convert_data(insert_api_info["MODE"])});' + db.execute(api_info_query) for param in insert_api_params: @@ -329,21 +334,18 @@ def del_api(self, API_NM: str) -> Dict: return result async def route_api(self, request: Request) -> Dict: - api_name = request.url.path.split("/")[-1] - category = request.url.path.split("/")[-2] - method = request.method + route_url = request.url.path content_type = request.headers.get("Content-Type") user_info = get_token_info(request.headers) - logger.debug( - f'Req - API Name : {api_name}, Category : {category}, Method : {method}, Content-Type : {content_type}') try: db = connect_db(config.db_type, config.db_info) api_info, _ = db.select( - f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(api_name)} AND "CTGRY" = {convert_data(category)};') + f'SELECT * FROM api_info WHERE "ROUTE_URL" = {convert_data(route_url)};') + api_info = api_info[0] api_params, _ = db.select( - f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_name)};') + f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_info["API_NM"])};') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -353,7 +355,6 @@ async def route_api(self, request: Request) -> Dict: if len(api_info) == 0: return {"result": 0, "errorMessage": "This is an unregistered API."} - api_info = api_info[0] if content_type == "application/json": body = await request.json() api_info["MSG_TYPE"] = "JSON" diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index f94d8892..d0c1157f 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -98,4 +98,4 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + \ No newline at end of file diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index 30139f76..eb8bc5a8 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -8,4 +8,6 @@ schema = meta [secret_info] name = user-katech-access-token -secret = jwt-secrect-b-iris \ No newline at end of file +secret = jwt-secrect-b-iris + + diff --git a/API-SERVICE/conf/sitemng/api_config.ini b/API-SERVICE/conf/sitemng/api_config.ini index 18f70234..265eb0be 100644 --- a/API-SERVICE/conf/sitemng/api_config.ini +++ b/API-SERVICE/conf/sitemng/api_config.ini @@ -1,4 +1,4 @@ [getCodeGroupId] method = GET -url = /api/sitemng/code +url = /api/sitemng/getCodeInfo sub_dir = sitemng \ No newline at end of file From d9e535874e2218d208e49aca3d652861bde3627c Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 21 Jun 2022 11:18:02 +0900 Subject: [PATCH 097/236] =?UTF-8?q?[AIPLATFORM-367]=20feat:=20eng=5Fnm=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=EB=90=9C=20=ED=95=AD=EB=AA=A9=20=EB=B0=8F=20?= =?UTF-8?q?=ED=8A=B9=EC=88=98=EB=AC=B8=EC=9E=90=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaName.py | 30 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 28e65473..96eeaee6 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -1,4 +1,5 @@ import uuid +import string from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config @@ -15,17 +16,40 @@ class InsertMetaName(BaseModel): def api(insert: InsertMetaName, request: Request) -> Dict: + # ENG_NM 중복 체크, 특수문자 체크 + user_info = get_token_info(request.headers) - - query = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ + symbol_list = list(map(str,string.punctuation)) + symbol_list.remove("_") + symbol_list.remove("'") + symbol_list.remove('"') + symbol_list.remove("-") + select_eng_nm = 'SELECT "ENG_NM" FROM tb_biz_meta_name' + insert_meta_name = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, 0,\ {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' try: db = connect_db(config.db_info) - db.execute(query) + eng_nm_list = db.select(select_eng_nm)[0] + logger.debug(eng_nm_list) + + # 중복 체크 + if len(eng_nm_list): + eng_nm_list = [eng_nm["ENG_NM"] for eng_nm in eng_nm_list] + if insert.ENG_NM in eng_nm_list: + raise ValueError + + # 특수문자 체크 + if list(filter(lambda eng_nm: eng_nm in symbol_list,insert.ENG_NM)): + raise ValueError + + db.execute(insert_meta_name) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) + except ValueError as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) else: result = {"result": 1, "errorMessage": ""} return result From cd0fcdd142accf7b09d88e2544158d81defafd67 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 21 Jun 2022 16:57:10 +0900 Subject: [PATCH 098/236] =?UTF-8?q?[AIPLATFORM-375]=20feat:=20=EB=AA=A8?= =?UTF-8?q?=EB=93=A0=20column=20=EC=86=8C=EB=AC=B8=EC=9E=90=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 8 ++-- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 2 +- API-SERVICE/ApiList/meta/getCategoryList.py | 2 +- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 2 +- API-SERVICE/ApiList/meta/insertBizMeta.py | 6 ++- API-SERVICE/ApiList/meta/insertMetaMap.py | 43 +++++++++++++------ API-SERVICE/ApiList/meta/insertMetaName.py | 14 +++--- API-SERVICE/ApiList/meta/metaMapList.py | 14 +++--- API-SERVICE/ApiList/meta/metaNameList.py | 22 +++++----- API-SERVICE/ApiList/meta/updateBizMeta.py | 10 ++--- API-SERVICE/ApiList/meta/updateCategory.py | 12 +++--- API-SERVICE/ApiList/meta/updateMetaName.py | 22 +++++----- API-SERVICE/ApiList/meta/useMetaNameList.py | 20 ++++----- 13 files changed, 97 insertions(+), 80 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 43350d5a..9183363a 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -9,16 +9,16 @@ class addChildCategory(BaseModel): - PRNTS_ID: str - NODE_NM: str + prnts_id: str + node_nm: str # todo: 수정 필요 def api(insert: addChildCategory, request: Request) -> Dict: user_info = get_token_info(request.headers) - query = f'INSERT INTO tb_category ("NODE_NM", "PRNTS_ID", "NODE_ID")\ - VALUES ({convert_data(insert.NODE_NM)},{convert_data(insert.PRNTS_ID)},{convert_data(uuid.uuid4())});' + query = f'INSERT INTO tb_category (node_nm, prnts_id, node_id)\ + VALUES ({convert_data(insert.node_nm)},{convert_data(insert.prnts_id)},{convert_data(uuid.uuid4())});' try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 3b98bd62..b9b20fd9 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -12,7 +12,7 @@ def api(request: Request, datasetId: str = None) -> Dict: if datasetId is None: v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap LIMIT 1;' else: - v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE "BIZ_DATASET_ID" = {convert_data(datasetId)}' + v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 6e1125b2..8337eb7c 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -10,7 +10,7 @@ def api(request: Request) -> Dict: category_query = 'select * \ from tb_category \ - order by "PRNTS_ID", "NODE_ID";' + order by prnts_id, node_id;' try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index c36c1830..16506e2c 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -11,7 +11,7 @@ def api(request: Request, nameId: str = None) -> Dict: if nameId is None: query = f"SELECT * FROM v_biz_meta_name" else: - query = f'SELECT * FROM tb_biz_meta_name WHERE "NM_ID" = {convert_data(nameId)}' + query = f'SELECT * FROM tb_biz_meta_name WHERE nm_id = {convert_data(nameId)}' try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index a7a1e310..ef79262f 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -8,16 +8,18 @@ def api(biz_meta_list: list, request: Request) -> Dict: + # todo: 수정 필요 (insertMetaMap에서 item_id부여 후 web에서 맞춘다음에 api로 넘겨줘야함) + # item_id를 web에서 넘겨 받아야 하는 형태 user_info = get_token_info(request.headers) uid = uuid.uuid4() - biz_meta_query = 'SELECT "ITEM_ID" as itemId, "ITEM_VAL" as itemVal FROM tb_biz_meta;' + biz_meta_query = 'SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;' try: db = connect_db(config.db_info) for biz_meta in biz_meta_list: item_id, item_val = tuple(biz_meta.values()) - query = 'INSERT INTO tb_biz_meta ("BIZ_DATASET_ID", "ITEM_ID", "ITEM_VAL" )' + \ + query = 'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val )' + \ f'VALUES ({convert_data(uid)},{convert_data(item_id)},{convert_data(item_val)});' db.execute(query) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 2495777d..1d4203a1 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -15,28 +15,45 @@ class NmIdList(BaseModel): def api(insert: NmIdList, request: Request) -> Dict: user_info = get_token_info(request.headers) - view_col = ['"BIZ_DATASET_ID" as biz_dataset_id'] - drop_view_query = "DROP VIEW IF EXISTS v_biz_meta_wrap" - map_insert_query = 'INSERT INTO tb_biz_meta_map ("ITEM_ID", "NM_ID") VALUES ({0}, {1});' + view_col = ['biz_dataset_id'] + drop_view_wrap_query = "DROP VIEW IF EXISTS v_biz_meta_wrap" + drop_view_meta_query = "DROP VIEW IF EXISTS v_biz_meta" + create_view_meta_query = """ + CREATE OR REPLACE VIEW v_biz_meta + AS SELECT tbmm.nm_id AS nm_id, + tbmn.kor_nm AS kor_nm, + tbmn.eng_nm AS eng_nm, + tbmm.item_id as item_id + FROM tb_biz_meta_map tbmm + INNER JOIN tb_biz_meta_name tbmn ON tbmm.nm_id = tbmn.nm_id; + """ + delete_map_query = 'DELETE FROM tb_biz_meta_map WHERE nm_id = {0}' + + map_insert_query = 'INSERT INTO tb_biz_meta_map (item_id, nm_id) VALUES ({0}, {1});' meta_map_query = "SELECT * FROM tb_biz_meta_map" - nm_id_query = 'SELECT "NM_ID" FROM tb_biz_meta_map' + nm_id_query = 'SELECT nm_id FROM tb_biz_meta_map' map_item_query = """ select distinct - meta_map."ITEM_ID", - tbmn."ENG_NM" + meta_map.item_id, + tbmn.eng_nm from tb_biz_meta_name tbmn left join tb_biz_meta_map meta_map on - tbmn."NM_ID" = meta_map."NM_ID" - where "ITEM_ID" IS NOT NULL + tbmn.nm_id = meta_map.nm_id + where item_id IS NOT NULL """ try: db = connect_db(config.db_info) - nm_id_set = {_["NM_ID"] for _ in db.select(nm_id_query)[0]} - nm_id_set = set(insert.nm_id_list) - nm_id_set + nm_id_set = {_["nm_id"] for _ in db.select(nm_id_query)[0]} + req_nm_ids = set(insert.nm_id_list) + delete_nm_ids = nm_id_set - req_nm_ids + nm_id_set = req_nm_ids - nm_id_set + + for nm_id in delete_nm_ids: + db.execute(delete_map_query.format(convert_data(nm_id))) for nm_id in nm_id_set: db.execute(map_insert_query.format(convert_data(uuid.uuid4()), @@ -48,8 +65,8 @@ def api(insert: NmIdList, request: Request) -> Dict: # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] for i, meta_map in enumerate(meta_map_item): - col_format = f'\t\tmax(case when "ITEM_ID" = {convert_data(meta_map["ITEM_ID"])} ' \ - f'then "ITEM_VAL" end) as {meta_map["ENG_NM"]}' + col_format = f'\t\tmax(case when item_id = {convert_data(meta_map["item_id"])} ' \ + f'then item_val end) as {meta_map["eng_nm"]}' view_col.append(col_format) view_col = ',\n'.join(view_col) @@ -58,7 +75,7 @@ def api(insert: NmIdList, request: Request) -> Dict: select {view_col} from tb_biz_meta - group by "BIZ_DATASET_ID" + group by biz_dataset_id """ db.execute(ddl_dataset_id) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 96eeaee6..0e3d9c44 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -5,20 +5,22 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field from starlette.requests import Request class InsertMetaName(BaseModel): - KOR_NM: str - ENG_NM: str - TYPE: int + kor_nm: str + eng_nm: str + TYPE: int = Field(alias="type") def api(insert: InsertMetaName, request: Request) -> Dict: - # ENG_NM 중복 체크, 특수문자 체크 - user_info = get_token_info(request.headers) + + query = f'INSERT INTO tb_biz_meta_name (kor_nm, eng_nm, show_odrg, nm_id, type)\ + VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm.lower())}, 0,\ + {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' symbol_list = list(map(str,string.punctuation)) symbol_list.remove("_") symbol_list.remove("'") diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index a079c360..2a230979 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -10,26 +10,22 @@ def api(request: Request) -> Dict: meta_map_query = """ select - tbmn."KOR_NM", - tbmn."ENG_NM", - tbmm."ITEM_ID", - tbmm."NM_ID" + tbmn.kor_nm, + tbmn.eng_nm, + tbmm.item_id, + tbmm.nm_id from tb_biz_meta_name as tbmn join tb_biz_meta_map as tbmm - on tbmm."NM_ID" = tbmn."NM_ID"; + on tbmm.nm_id = tbmn.nm_id; """ - # v_meta_map_query = "SELECT * FROM v_biz_meta_map;" try: db = connect_db(config.db_info) meta_map = db.select(meta_map_query) - # v_meta_map = db.select(v_meta_map_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: result = make_res_msg(1, "", meta_map[0], meta_map[1]) - # result = {"result": "", "errorMessage": "", "data": { - # "body": meta_map[0], "header": v_meta_map[0]}} return result diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 72c96b53..8a2ec576 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -14,22 +14,22 @@ def api(perPage: int, curPage: int, request: Request) -> Dict: p.* from tb_biz_meta_name as p join ( - SELECT "KOR_NM", - "ENG_NM", - "SHOW_ODRG", - "NM_ID", + SELECT kor_nm, + eng_nm, + show_odrg, + nm_id, (case - when "TYPE" = 0 then 'text' - when "TYPE" = 1 then 'int' - when "TYPE" = 2 then 'binary' + when type = 0 then 'text' + when type = 1 then 'int' + when type = 2 then 'binary' end - ) as "TYPE", - ROW_NUMBER () OVER (ORDER BY "NM_ID" DESC) as rowNo + ) as type, + ROW_NUMBER () OVER (ORDER BY nm_id DESC) as rowNo FROM tb_biz_meta_name - order by "NM_ID" + order by nm_id limit {perPage} offset ({perPage} * {curPage}) - ) as t on p."NM_ID" = t."NM_ID" + ) as t on p.nm_id = t.nm_id """ total_cnt_query = "SELECT count(*) as totalCount FROM tb_biz_meta_name" diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index 124b3ac7..fbaeb284 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -8,7 +8,7 @@ class UpdateBizMeta(BaseModel): - BIZ_DATASET_ID: str + biz_dataset_id: str dataList: list @@ -19,10 +19,10 @@ def api(update: UpdateBizMeta, request: Request) -> Dict: db = connect_db(config.db_info) for data in update.dataList: query = f'UPDATE tb_biz_meta\ - SET "ITEM_ID" = {convert_data(data["itemId"])},\ - "ITEM_VAL" = {convert_data(data["itemVal"])}\ - WHERE "BIZ_DATASET_ID" = {convert_data(update.BIZ_DATASET_ID)} AND \ - "ITEM_ID" = {convert_data(data["itemId"])};' + SET item_id = {convert_data(data["itemId"])},\ + item_val = {convert_data(data["itemVal"])}\ + WHERE biz_dataset_id = {convert_data(update.biz_dataset_id)} AND \ + item_id = {convert_data(data["itemId"])};' db.execute(query) except Exception as err: diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 166508c7..74bfb129 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -9,8 +9,8 @@ class UpdateCategory(BaseModel): - NODE_ID: str - NODE_NM: str + node_id: str + node_nm: str # todo: 수정 필요 @@ -18,10 +18,10 @@ def api(update: UpdateCategory, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'UPDATE tb_category\ - SET "PRNTS_ID" = {convert_data(uuid.uuid4())},\ - "NODE_ID" = {convert_data(update.NODE_ID)},\ - "NODE_NM" = {convert_data(update.NODE_NM)}\ - WHERE "NODE_ID" = {convert_data(update.NODE_ID)};' + SET prnts_id = {convert_data(uuid.uuid4())},\ + node_id = {convert_data(update.node_id)},\ + node_nm = {convert_data(update.node_nm)}\ + WHERE node_id = {convert_data(update.node_id)};' try: db = connect_db(config.db_info) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index 9b4a314d..ecd7737a 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -2,28 +2,28 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from pydantic import BaseModel, Field from fastapi.logger import logger from starlette.requests import Request class UpdatetMetaName(BaseModel): - KOR_NM: str - ENG_NM: str - SHOW_ODRG: int - NM_ID: str - TYPE: int + kor_nm: str + eng_nm: str + show_odrg: int + nm_id: str + TYPE: int = Field(alias="type") def api(update: UpdatetMetaName, request: Request) -> Dict: user_info = get_token_info(request.headers) query = f'UPDATE tb_biz_meta_name\ - SET "KOR_NM" = {convert_data(update.KOR_NM)},\ - "ENG_NM" = {convert_data(update.ENG_NM)},\ - "SHOW_ODRG" = {convert_data(update.SHOW_ODRG)},\ - "TYPE"= {convert_data(update.TYPE)}\ - WHERE "NM_ID" = {convert_data(update.NM_ID)};' + SET kor_nm = {convert_data(update.kor_nm)},\ + eng_nm = {convert_data(update.eng_nm)},\ + show_odrg = {convert_data(update.show_odrg)},\ + type = {convert_data(update.TYPE)}\ + WHERE nm_id = {convert_data(update.nm_id)};' try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index f6804453..53cb8bf6 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -11,20 +11,20 @@ def api(request: Request) -> Dict: meta_name_query = """ select case - when (select tbmm."NM_ID" from tb_biz_meta_map tbmm where tbmn."NM_ID" = tbmm."NM_ID") is null then 0 + when (select tbmm.nm_id from tb_biz_meta_map tbmm where tbmn.nm_id = tbmm.nm_id) is null then 0 else 1 end as use_meta, - tbmn."KOR_NM", - tbmn."ENG_NM", - tbmn."SHOW_ODRG", + tbmn.kor_nm, + tbmn.eng_nm, + tbmn.show_odrg, case - when tbmn."TYPE" = 0 then 'text' - when tbmn."TYPE" = 1 then 'int' - when tbmn."TYPE" = 2 then 'binary' - end as "TYPE", - tbmn."NM_ID" + when tbmn.type = 0 then 'text' + when tbmn.type = 1 then 'int' + when tbmn.type = 2 then 'binary' + end as type, + tbmn.nm_id from tb_biz_meta_name tbmn - order by tbmn."NM_ID";""" + order by tbmn.nm_id;""" try: db = connect_db(config.db_info) From b0c28ad92d421258d3a723d5ee411a6bcca593d8 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 21 Jun 2022 16:57:53 +0900 Subject: [PATCH 099/236] =?UTF-8?q?[AIPLATFORM-375]=20feat:=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=EC=97=90=20=EC=97=86=EB=8A=94=20meta=5Fmap=20?= =?UTF-8?q?=ED=95=AD=EB=AA=A9=20=EC=82=AD=EC=A0=9C,=20v=5Fbiz=5Fmeta=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=20=EA=B0=B1=EC=8B=A0=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaMap.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 1d4203a1..f7c82ed6 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -60,7 +60,8 @@ def api(insert: NmIdList, request: Request) -> Dict: convert_data(nm_id))) # drop view v_biz_meta_wrap - db.execute(drop_view_query) + db.execute(drop_view_wrap_query) + db.execute(drop_view_meta_query) # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] @@ -78,6 +79,7 @@ def api(insert: NmIdList, request: Request) -> Dict: group by biz_dataset_id """ db.execute(ddl_dataset_id) + db.execute(create_view_meta_query) # return data meta_map_list = db.select(meta_map_query)[0] From f01a5b3df1a74325ac2124eba2576a63b7365448 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 21 Jun 2022 17:39:50 +0900 Subject: [PATCH 100/236] =?UTF-8?q?[AIPLATFORM-375]=20feat:=20insertMetaNa?= =?UTF-8?q?me=20api=EC=9D=98=20column=20=EB=8C=80=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=86=8C=EB=AC=B8=EC=9E=90=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaName.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 0e3d9c44..f96109ef 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -18,7 +18,7 @@ class InsertMetaName(BaseModel): def api(insert: InsertMetaName, request: Request) -> Dict: user_info = get_token_info(request.headers) - query = f'INSERT INTO tb_biz_meta_name (kor_nm, eng_nm, show_odrg, nm_id, type)\ + insert_meta_name = f'INSERT INTO tb_biz_meta_name (kor_nm, eng_nm, show_odrg, nm_id, type)\ VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm.lower())}, 0,\ {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' symbol_list = list(map(str,string.punctuation)) @@ -26,10 +26,7 @@ def api(insert: InsertMetaName, request: Request) -> Dict: symbol_list.remove("'") symbol_list.remove('"') symbol_list.remove("-") - select_eng_nm = 'SELECT "ENG_NM" FROM tb_biz_meta_name' - insert_meta_name = f'INSERT INTO tb_biz_meta_name ("KOR_NM", "ENG_NM", "SHOW_ODRG", "NM_ID", "TYPE")\ - VALUES ({convert_data(insert.KOR_NM)}, {convert_data(insert.ENG_NM)}, 0,\ - {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' + select_eng_nm = 'SELECT eng_nm FROM tb_biz_meta_name' try: db = connect_db(config.db_info) eng_nm_list = db.select(select_eng_nm)[0] @@ -37,12 +34,12 @@ def api(insert: InsertMetaName, request: Request) -> Dict: # 중복 체크 if len(eng_nm_list): - eng_nm_list = [eng_nm["ENG_NM"] for eng_nm in eng_nm_list] - if insert.ENG_NM in eng_nm_list: + eng_nm_list = [eng_nm["eng_nm"] for eng_nm in eng_nm_list] + if insert.eng_nm in eng_nm_list: raise ValueError # 특수문자 체크 - if list(filter(lambda eng_nm: eng_nm in symbol_list,insert.ENG_NM)): + if list(filter(lambda eng_nm: eng_nm in symbol_list,insert.eng_nm)): raise ValueError db.execute(insert_meta_name) From ecc919ccd62dda75d49f7c86794e419ba13d635b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 22 Jun 2022 10:11:43 +0900 Subject: [PATCH 101/236] =?UTF-8?q?feat=20:=20db=20=EC=BB=AC=EB=9F=BC?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 130 +++++++++++++-------------- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 18 ++-- API-SERVICE/conf/meta/api_config.ini | 32 +++---- 4 files changed, 91 insertions(+), 91 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 60694cb4..1c5ee01e 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -11,27 +11,27 @@ class ApiServerInfo(BaseModel): - NM: str - IP_ADR: str - DOMN_NM: str + nm: str + ip_adr: str + domn_nm: str class ApiParam(BaseModel): - API_NM: str - NM: str - DATA_TYPE: str - DEFLT_VAL: str + api_nm: str + nm: str + data_type: str + deflt_val: str class ApiInfo(BaseModel): - API_NM: str - CTGRY: str - ROUTE_URL: str - URL: str - METH: str - CMD: str - MODE: str - PARAMS: List[ApiParam] + api_nm: str + ctgry: str + route_url: str + url: str + meth: str + cmd: str + mode: str + params: List[ApiParam] class ApiRoute: @@ -71,8 +71,8 @@ def set_route(self) -> None: for api in api_info: self.router.add_api_route( - api["ROUTE_URL"], self.route_api, methods=[api["METH"]], tags=[f'Route Category ({api["CTGRY"]})']) - # f'/route/{api["CTGRY"]}/{api["API_NM"]}', self.route_api, methods=[api["METH"]], tags=[f'Route Category ({api["CTGRY"]})']) + api["route_url"], self.route_api, methods=[api["meth"]], tags=[f'Route Category ({api["ctgry"]})']) + # f'/route/{api["ctgry"]}/{api["api_nm"]}', self.route_api, methods=[api["meth"]], tags=[f'Route Category ({api["ctgry"]})']) for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_info["sub_dir"]}/{api_name}.py' @@ -86,10 +86,10 @@ def set_route(self) -> None: def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: api_server_info = api_server_info.__dict__ - api_server_info_query = f'INSERT INTO api_server_info ("NM", "IP_ADR", "DOMN_NM") \ - VALUES ({convert_data(api_server_info["NM"])}, \ - {convert_data(api_server_info["IP_ADR"])}, \ - {convert_data(api_server_info["DOMN_NM"])});' + api_server_info_query = f'INSERT INTO api_server_info (nm, ip_adr, domn_nm) \ + VALUES ({convert_data(api_server_info["nm"])}, \ + {convert_data(api_server_info["ip_adr"])}, \ + {convert_data(api_server_info["domn_nm"])});' try: db = connect_db(config.db_type, config.db_info) db.execute(api_server_info_query) @@ -107,9 +107,9 @@ def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: api_server_info = api_server_info.__dict__ - api_server_info_query = f'UPDATE api_server_info SET "IP_ADR"={convert_data(api_server_info["IP_ADR"])}, \ - "DOMN_NM"={convert_data(api_server_info["DOMN_NM"])} \ - WHERE "NM"={convert_data(api_server_info["NM"])};' + api_server_info_query = f'UPDATE api_server_info SET ip_adr={convert_data(api_server_info["ip_adr"])}, \ + domn_nm={convert_data(api_server_info["domn_nm"])} \ + WHERE nm={convert_data(api_server_info["nm"])};' try: db = connect_db(config.db_type, config.db_info) db.execute(api_server_info_query) @@ -129,7 +129,7 @@ def get_server_info_list(self) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( - 'SELECT * FROM api_server_info ORDER BY "NM";') + 'SELECT * FROM api_server_info ORDER BY nm;') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -140,11 +140,11 @@ def get_server_info_list(self) -> Dict: return result - def get_server_info(self, NM: str) -> Dict: + def get_server_info(self, nm: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( - f'SELECT * FROM api_server_info WHERE "NM" = {convert_data(NM)};') + f'SELECT * FROM api_server_info WHERE nm = {convert_data(nm)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -155,11 +155,11 @@ def get_server_info(self, NM: str) -> Dict: return result - def del_server_info(self, NM: str) -> Dict: + def del_server_info(self, nm: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) db.execute( - f'DELETE FROM api_server_info WHERE "NM" = {convert_data(NM)};') + f'DELETE FROM api_server_info WHERE nm = {convert_data(nm)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -177,9 +177,9 @@ def get_api_list(self) -> Dict: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT "API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE" FROM api_info ORDER BY "NO";') + f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM api_info ORDER BY no;') api_params, params_column_names = db.select( - f'SELECT * FROM api_params ORDER BY "API_NM", "NM";') + f'SELECT * FROM api_params ORDER BY api_nm, nm;') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -192,18 +192,18 @@ def get_api_list(self) -> Dict: return result - def get_api_category_list(self, CTGRY: str) -> Dict: + def get_api_category_list(self, ctgry: str) -> Dict: api_params_list = [] params_columns = [] try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT "API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE" FROM api_info WHERE "CTGRY" = {convert_data(CTGRY)} ORDER BY "NO";') + f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM api_info WHERE ctgry = {convert_data(ctgry)} ORDER BY no;') for info in api_info: - logger.debug(f'INFO : {info["API_NM"]}') + logger.debug(f'INFO : {info["api_nm"]}') api_params, params_column_names = db.select( - f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(info["API_NM"])} ORDER BY "NM";') + f'SELECT * FROM api_params WHERE api_nm = {convert_data(info["api_nm"])} ORDER BY nm;') if len(api_params) != 0: api_params_list.extend(api_params) params_columns = params_column_names @@ -220,13 +220,13 @@ def get_api_category_list(self, CTGRY: str) -> Dict: return result - def get_api(self, API_NM: str) -> Dict: + def get_api(self, api_nm: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT * FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') + f'SELECT * FROM api_info WHERE api_nm = {convert_data(api_nm)};') api_params, params_column_names = db.select( - f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(API_NM)} ORDER BY "NM";') + f'SELECT * FROM api_params WHERE api_nm = {convert_data(api_nm)} ORDER BY nm;') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -246,23 +246,23 @@ def set_api(self, api_info: ApiInfo) -> Dict: insert_api_info = {} insert_api_params = [] for key, value in api_info.__dict__.items(): - if key == "PARAMS": + if key == "params": for param in value: insert_api_params.append(param.__dict__) else: insert_api_info[key] = value - api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE") \ - VALUES ({convert_data(insert_api_info["API_NM"])}, {convert_data(insert_api_info["CTGRY"])}, \ - {convert_data(insert_api_info["ROUTE_URL"])}, {convert_data(insert_api_info["URL"])}, \ - {convert_data(insert_api_info["METH"])}, {convert_data(insert_api_info["CMD"])}, \ - {convert_data(insert_api_info["MODE"])});' + api_info_query = f'INSERT INTO api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ + VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, \ + {convert_data(insert_api_info["route_url"])}, {convert_data(insert_api_info["url"])}, \ + {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, \ + {convert_data(insert_api_info["mode"])});' db.execute(api_info_query) for param in insert_api_params: - api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ - VALUES ({convert_data(param["API_NM"])}, {convert_data(param["NM"])}, \ - {convert_data(param["DATA_TYPE"])}, {convert_data(param["DEFLT_VAL"])});' + api_params_query = f'INSERT INTO api_params (api_nm, nm, data_type, deflt_val) \ + VALUES ({convert_data(param["api_nm"])}, {convert_data(param["nm"])}, \ + {convert_data(param["data_type"])}, {convert_data(param["deflt_val"])});' db.execute(api_params_query) except Exception: ex_type, ex_value, trace_log = get_exception_info() @@ -282,26 +282,26 @@ def update_api(self, api_info: ApiInfo) -> Dict: insert_api_info = {} insert_api_params = [] for key, value in api_info.__dict__.items(): - if key == "PARAMS": + if key == "params": for param in value: insert_api_params.append(param.__dict__) else: insert_api_info[key] = value db.execute( - f'DELETE FROM api_info WHERE "API_NM" = {convert_data(insert_api_info["API_NM"])};') + f'DELETE FROM api_info WHERE api_nm = {convert_data(insert_api_info["api_nm"])};') - api_info_query = f'INSERT INTO api_info ("API_NM", "CTGRY", "ROUTE_URL", "URL", "METH", "CMD", "MODE") \ - VALUES ({convert_data(insert_api_info["API_NM"])}, {convert_data(insert_api_info["CTGRY"])}, \ - {convert_data(insert_api_info["ROUTE_URL"])}, {convert_data(insert_api_info["URL"])}, \ - {convert_data(insert_api_info["METH"])}, {convert_data(insert_api_info["CMD"])}, \ - {convert_data(insert_api_info["MODE"])});' + api_info_query = f'INSERT INTO api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ + VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, \ + {convert_data(insert_api_info["route_url"])}, {convert_data(insert_api_info["url"])}, \ + {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, \ + {convert_data(insert_api_info["mode"])});' db.execute(api_info_query) for param in insert_api_params: - api_params_query = f'INSERT INTO api_params ("API_NM", "NM", "DATA_TYPE", "DEFLT_VAL") \ - VALUES ({convert_data(param["API_NM"])}, {convert_data(param["NM"])}, \ - {convert_data(param["DATA_TYPE"])}, {convert_data(param["DEFLT_VAL"])});' + api_params_query = f'INSERT INTO api_params (api_nm, nm, data_type, deflt_val) \ + VALUES ({convert_data(param["api_nm"])}, {convert_data(param["nm"])}, \ + {convert_data(param["data_type"])}, {convert_data(param["deflt_val"])});' db.execute(api_params_query) except Exception: @@ -315,12 +315,12 @@ def update_api(self, api_info: ApiInfo) -> Dict: return result - def del_api(self, API_NM: str) -> Dict: + def del_api(self, api_nm: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) db.execute( - f'DELETE FROM api_info WHERE "API_NM" = {convert_data(API_NM)};') + f'DELETE FROM api_info WHERE api_nm = {convert_data(api_nm)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() @@ -342,10 +342,10 @@ async def route_api(self, request: Request) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_info, _ = db.select( - f'SELECT * FROM api_info WHERE "ROUTE_URL" = {convert_data(route_url)};') + f'SELECT * FROM api_info WHERE route_url = {convert_data(route_url)};') api_info = api_info[0] api_params, _ = db.select( - f'SELECT * FROM api_params WHERE "API_NM" = {convert_data(api_info["API_NM"])};') + f'SELECT * FROM api_params WHERE api_nm = {convert_data(api_info["api_nm"])};') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -357,10 +357,10 @@ async def route_api(self, request: Request) -> Dict: if content_type == "application/json": body = await request.json() - api_info["MSG_TYPE"] = "JSON" + api_info["msg_type"] = "JSON" else: body = await request.body() - api_info["MSG_TYPE"] = "BINARY" + api_info["msg_type"] = "BINARY" params_query = str(request.query_params) @@ -370,8 +370,8 @@ async def route_api(self, request: Request) -> Dict: logger.debug(f'DB - api_params : {api_params}') logger.debug( - f'MODE : {api_info["MODE"]}, content_type : {content_type}') - if api_info["MODE"] == "MESSAGE PASSING": + f'mode : {api_info["mode"]}, content_type : {content_type}') + if api_info["mode"] == "MESSAGE PASSING": result = await bypass_msg(api_info, params_query, body) else: result = await call_remote_func(api_info, api_params, body) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index d0c1157f..596c1d3d 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -98,4 +98,4 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + \ No newline at end of file diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 54172608..274fd955 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -8,11 +8,11 @@ def make_url(server_name: str, url_path: str): for server_info in config.api_server_info: - if server_info["NM"] == server_name: - if len(server_info["IP_ADR"]) != 0: - netloc = server_info["IP_ADR"] + if server_info["nm"] == server_name: + if len(server_info["ip_adr"]) != 0: + netloc = server_info["ip_adr"] else: - netloc = server_info["DOMN_NM"] + netloc = server_info["domn_nm"] url = ParseResult( scheme="http", netloc=netloc, path=url_path, params="", query="", fragment="") logger.debug(f"Message Passing Url : {url.geturl()}") @@ -21,10 +21,10 @@ def make_url(server_name: str, url_path: str): async def bypass_msg(api_info, params_query, body): - method = api_info["METH"] - msg_type = api_info["MSG_TYPE"] + method = api_info["meth"] + msg_type = api_info["msg_type"] - url = make_url(api_info["CTGRY"], api_info["URL"]) + url = make_url(api_info["ctgry"], api_info["url"]) if url is None: return {"result": 0, "errorMessage": "The server info does not exist."} @@ -67,7 +67,7 @@ async def run_cmd(cmd: str): async def call_remote_func(api_info, api_params, input_params) -> Dict: - msg_type = api_info["MSG_TYPE"] + msg_type = api_info["msg_type"] command_input = "" if msg_type == "JSON": @@ -80,7 +80,7 @@ async def call_remote_func(api_info, api_params, input_params) -> Dict: f'parameter set default value. [{param["param_name"]}]') command_input += f' --{param["param_name"]} {param["default_value"]}' - cmd = f'{api_info["CMD"]} {command_input}' + cmd = f'{api_info["cmd"]} {command_input}' try: result = await run_cmd(cmd) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 4d87f589..401547f8 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -1,79 +1,79 @@ [metaNameList] method = GET -url = /api/meta/metaNameList +url = /portal/api/meta/metaNameList sub_dir = meta [getMetaNameDetail] method = GET -url = /api/meta/getMetaNameDetail +url = /portal/api/meta/getMetaNameDetail sub_dir = meta [insertMetaName] method = POST -url = /api/meta/insertMetaName +url = /portal/api/meta/insertMetaName sub_dir = meta [updateMetaName] method = POST -url = /api/meta/updateMetaName +url = /portal/api/meta/updateMetaName sub_dir = meta [metaMapList] method = GET -url = /api/meta/metaMapList +url = /portal/api/meta/metaMapList sub_dir = meta [useMetaNameList] method = GET -url = /api/meta/useMetaNameList +url = /portal/api/meta/useMetaNameList sub_dir = meta [insertMetaMap] method = POST -url = /api/meta/insertMetaMap +url = /portal/api/meta/insertMetaMap sub_dir = meta [getBizMetaList] method = GET -url = /api/meta/getBizMetaList +url = /portal/api/meta/getBizMetaList sub_dir = meta [getBizMetaDetail] method = GET -url = /api/meta/getBizMetaDetail +url = /portal/api/meta/getBizMetaDetail sub_dir = meta [insertBizMeta] method = POST -url = /api/meta/insertBizMeta +url = /portal/api/meta/insertBizMeta sub_dir = meta [updateBizMeta] method = POST -url = /api/meta/updateBizMeta +url = /portal/api/meta/updateBizMeta sub_dir = meta [getCategoryList] method = GET -url = /api/meta/getCategoryList +url = /portal/api/meta/getCategoryList sub_dir = meta [updateCategory] method = POST -url = /api/meta/updateCategory +url = /portal/api/meta/updateCategory sub_dir = meta [addChildCategory] method = POST -url = /api/meta/addChildCategory +url = /portal/api/meta/addChildCategory sub_dir = meta [getTest] method = GET -url = /api/meta/getTest +url = /portal/api/meta/getTest sub_dir = meta [postTest] method = POST -url = /api/meta/postTest +url = /portal/api/meta/postTest sub_dir = meta From 2ec2e6db909cf6d6c2dbe3ca577a641dc60746b5 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 22 Jun 2022 11:10:51 +0900 Subject: [PATCH 102/236] =?UTF-8?q?feat=20:=20getBizMeta=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=ED=8F=AC=EB=A7=B7=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 조회시 한글 컬럼명도 출력되도록 수정 --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 13 ++++++++++++- API-SERVICE/ApiList/meta/getBizMetaList.py | 16 +++++++++++++++- API-SERVICE/Utils/CommonUtil.py | 10 +++++++--- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index b9b20fd9..9d0115bf 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -25,5 +25,16 @@ def api(request: Request, datasetId: str = None) -> Dict: if datasetId is None: result = make_res_msg(1, "", {}, meta_wrap[1]) else: - result = make_res_msg(1, "", meta_wrap[0][0], meta_wrap[1]) + kor_nm_list = [] + name_list, _ = db.select(f'SELECT eng_nm, kor_nm FROM v_biz_meta;') + name_info = {} + for name in name_list: + name_info[name['eng_nm']] = name['kor_nm'] + for eng_nm in meta_wrap[1]: + if eng_nm in name_info: + kor_nm_list.append(name_info[eng_nm]) + else: + kor_nm_list.append("") + result = make_res_msg( + 1, "", meta_wrap[0][0], meta_wrap[1], kor_nm_list) return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index dd8667ff..010f3bb2 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,6 +1,8 @@ +from lib2to3.pytree import convert from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.DataBaseUtil import convert_data from fastapi.logger import logger from starlette.requests import Request @@ -16,6 +18,18 @@ def api(request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = make_res_msg(1, "", meta_wrap[0], meta_wrap[1]) + kor_nm_list = [] + name_list, _ = db.select( + f'SELECT eng_nm, kor_nm FROM v_biz_meta;') + name_info = {} + for name in name_list: + name_info[name['eng_nm']] = name['kor_nm'] + for eng_nm in meta_wrap[1]: + if eng_nm in name_info: + kor_nm_list.append(name_info[eng_nm]) + else: + kor_nm_list.append("") + result = make_res_msg( + 1, "", meta_wrap[0], meta_wrap[1], kor_nm_list) return result diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index fb2f55f4..1902b355 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -63,10 +63,14 @@ def save_file_for_reload(): fd.write(" ") -def make_res_msg(result, err_msg, data=None, column_names=None): +def make_res_msg(result, err_msg, data=None, column_names=None, kor_column_names=None): header_list = [] - for column_name in column_names: - header = {"column_name": column_name} + for index, column_name in enumerate(column_names): + if kor_column_names: + header = {"column_name": column_name, + "kor_column_name": kor_column_names[index]} + else: + header = {"column_name": column_name} header_list.append(header) if data is None or column_names is None: From c7b98aebac9be0cd0ca3656bad9fc48145c1e36d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 23 Jun 2022 17:00:36 +0900 Subject: [PATCH 103/236] =?UTF-8?q?feat=20:=20request=20header=20bypass=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 14 ++++++++++---- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 15 ++++----------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 1c5ee01e..a2af24cd 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -8,6 +8,7 @@ from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request +from urllib import parse class ApiServerInfo(BaseModel): @@ -336,6 +337,11 @@ def del_api(self, api_nm: str) -> Dict: async def route_api(self, request: Request) -> Dict: route_url = request.url.path content_type = request.headers.get("Content-Type") + headers = dict(request.headers) + del(headers["content-length"]) + del(headers["user-agent"]) + + logger.debug(f'Request Headers : {headers}') user_info = get_token_info(request.headers) @@ -362,9 +368,9 @@ async def route_api(self, request: Request) -> Dict: body = await request.body() api_info["msg_type"] = "BINARY" - params_query = str(request.query_params) - - logger.debug(f'Req - body : {body}, query params : {params_query}') + params_query = parse.unquote(str(request.query_params)) + logger.debug( + f'Req - body : {body}, query params : {params_query}') logger.debug(f'DB - api_info : {api_info}') logger.debug(f'DB - api_params : {api_params}') @@ -372,7 +378,7 @@ async def route_api(self, request: Request) -> Dict: logger.debug( f'mode : {api_info["mode"]}, content_type : {content_type}') if api_info["mode"] == "MESSAGE PASSING": - result = await bypass_msg(api_info, params_query, body) + result = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) return result diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 596c1d3d..5bff75ce 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -98,4 +98,4 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + \ No newline at end of file diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 274fd955..f6e5a026 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -20,7 +20,7 @@ def make_url(server_name: str, url_path: str): return None -async def bypass_msg(api_info, params_query, body): +async def bypass_msg(api_info, params_query, body, headers): method = api_info["meth"] msg_type = api_info["msg_type"] @@ -36,21 +36,14 @@ async def bypass_msg(api_info, params_query, body): parser_param = param.split("=") params[parser_param[0]] = parser_param[1] - async with session.get(url, params=params) as response: + async with session.get(url, params=params, headers=headers) as response: result = await response.json() elif method == "POST": if msg_type == "JSON": - async with session.post(url, json=body) as response: + async with session.post(url, json=body, headers=headers) as response: result = await response.json() else: - async with session.post(url, data=body) as response: - result = await response.json() - elif method == "PUT": - if msg_type == "JSON": - async with session.put(url, json=body) as response: - result = await response.json() - else: - async with session.put(url, data=body) as response: + async with session.post(url, data=body, headers=headers) as response: result = await response.json() else: logger.error(f'Method Not Allowed. {method}') From ff70a71e484e9a88297db58f934a603da064e884 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 24 Jun 2022 09:06:41 +0900 Subject: [PATCH 104/236] =?UTF-8?q?fix=20:=20request=20header=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit content-length 유무 체크 후 처리 하도록 수정 --- API-ROUTER/ApiRoute/ApiRoute.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index a2af24cd..a86a1415 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -338,8 +338,11 @@ async def route_api(self, request: Request) -> Dict: route_url = request.url.path content_type = request.headers.get("Content-Type") headers = dict(request.headers) - del(headers["content-length"]) - del(headers["user-agent"]) + logger.error(request.headers) + if headers.get("content-length"): + del(headers["content-length"]) + if headers.get("user-agent"): + del(headers["user-agent"]) logger.debug(f'Request Headers : {headers}') From af1f879f542fb0b9053f22275f9bf4d29d7410bf Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 24 Jun 2022 13:07:19 +0900 Subject: [PATCH 105/236] =?UTF-8?q?fix=20:=20sitemng=20URL=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/sitemng/api_config.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/conf/sitemng/api_config.ini b/API-SERVICE/conf/sitemng/api_config.ini index 265eb0be..cb74e26b 100644 --- a/API-SERVICE/conf/sitemng/api_config.ini +++ b/API-SERVICE/conf/sitemng/api_config.ini @@ -1,4 +1,4 @@ [getCodeGroupId] method = GET -url = /api/sitemng/getCodeInfo +url = /portal/api/sitemng/getCodeInfo sub_dir = sitemng \ No newline at end of file From 0bc4a7528fbbc2057fe175c284c71f8c5dee0541 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 24 Jun 2022 13:33:47 +0900 Subject: [PATCH 106/236] =?UTF-8?q?[AIPLATFORM-392]=20feat:=20getBizMetaLi?= =?UTF-8?q?st=20like=20=EA=B2=80=EC=83=89=20=EA=B8=B0=EB=8A=A5,=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=95=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 67 ++++++++++++++++------ 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 010f3bb2..6ef2cb78 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,35 +1,68 @@ from lib2to3.pytree import convert -from typing import Dict +from typing import Dict,List from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info, make_res_msg -from Utils.DataBaseUtil import convert_data +from fastapi import Query from fastapi.logger import logger from starlette.requests import Request -def api(request: Request) -> Dict: +def api(request: Request, + perPage: int, + curPage: int, + keyWordList: List[str] = Query(None)) -> Dict: + user_info = get_token_info(request.headers) - v_meta_wrap_query = "SELECT * FROM v_biz_meta_wrap" + curPage = curPage - 1 + v_biz_meta_query = "SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta" + v_meta_wrap_query = """ + select + *, + row_number () over ( + order by + {0} + ) as rowNo + from + meta.v_biz_meta_wrap + """ try: db = connect_db(config.db_info) + + if len(keyWordList): + order_condition = str() + search_condition = "data_nm like '%{0}%'" + v_meta_wrap_query = v_meta_wrap_query + " WHERE " + + # 검색 조건 추가 + for word in keyWordList: + order_condition = order_condition + f"data_nm similar to '%{word}%' and " + v_meta_wrap_query = v_meta_wrap_query + search_condition.format(word) + " and " + + # 마지막 ' and ' 삭제 + v_meta_wrap_query = v_meta_wrap_query[:-5] + v_meta_wrap_query = v_meta_wrap_query.format(order_condition[:-5] + " desc") + else: + v_meta_wrap_query = v_meta_wrap_query.format("biz_dataset_id") + v_meta_wrap_query = v_meta_wrap_query + f" limit {perPage} offset ({perPage} * {curPage})" + meta_wrap = db.select(v_meta_wrap_query) + meta_map = db.select(v_biz_meta_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - kor_nm_list = [] - name_list, _ = db.select( - f'SELECT eng_nm, kor_nm FROM v_biz_meta;') - name_info = {} - for name in name_list: - name_info[name['eng_nm']] = name['kor_nm'] - for eng_nm in meta_wrap[1]: - if eng_nm in name_info: - kor_nm_list.append(name_info[eng_nm]) - else: - kor_nm_list.append("") - result = make_res_msg( - 1, "", meta_wrap[0], meta_wrap[1], kor_nm_list) + if len(meta_map[0]): + body = [] + for meta_data in meta_wrap[0]: + meta_dataset = dict() + meta_dataset["data"] = list(meta_data.values()) + meta_dataset["columnkey"] = list(meta_data.keys()) + meta_dataset["biz_dataset_id"] = meta_data["biz_dataset_id"] + body.append(meta_dataset) + + result = make_res_msg(1,"",body,meta_map[0]) + else: + result = make_res_msg(1,"",meta_map[0],meta_map[1]) return result From 76c26bcec396780b568d9cea1045015eb0a7100e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 24 Jun 2022 14:54:54 +0900 Subject: [PATCH 107/236] =?UTF-8?q?[AIPLATFORM-392]=20feat:=20getBizMetaDe?= =?UTF-8?q?tail=20=EC=83=81=EC=84=B8=20=EA=B2=80=EC=83=89=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 39 +++++++++----------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 9d0115bf..af3c23e1 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -8,33 +8,30 @@ def api(request: Request, datasetId: str = None) -> Dict: user_info = get_token_info(request.headers) - - if datasetId is None: - v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap LIMIT 1;' - else: - v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' + body = dict() + v_meta_map_query = 'SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta' + v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' try: db = connect_db(config.db_info) meta_wrap = db.select(v_meta_wrap_query) - # v_meta_name = db.select(v_meta_name_query) + meta_map = db.select(v_meta_map_query) + except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) + else: - if datasetId is None: - result = make_res_msg(1, "", {}, meta_wrap[1]) - else: - kor_nm_list = [] - name_list, _ = db.select(f'SELECT eng_nm, kor_nm FROM v_biz_meta;') - name_info = {} - for name in name_list: - name_info[name['eng_nm']] = name['kor_nm'] - for eng_nm in meta_wrap[1]: - if eng_nm in name_info: - kor_nm_list.append(name_info[eng_nm]) - else: - kor_nm_list.append("") - result = make_res_msg( - 1, "", meta_wrap[0][0], meta_wrap[1], kor_nm_list) + name_map = {name_map["eng_nm"]: name_map["kor_nm"] for name_map in meta_map[0]} + + for meta_data in meta_wrap[0]: + body["kor_name"] = list(name_map.values()) + body["data"] = list(meta_data.values()) + body["eng_name"] = list(name_map.keys()) + body["type"] = [0 for i in range(0,len(meta_map[0]))] + body["columnkey"] = list(meta_data.keys()) + body["biz_dataset_id"] = datasetId + + result = make_res_msg(1,"",body,meta_map[0]) + return result From 047bc6ee7df6a01d59bff6d7d12ad3fe07ead748 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 24 Jun 2022 15:33:25 +0900 Subject: [PATCH 108/236] =?UTF-8?q?[AIPLATFORM-392]=20feat:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20response=20data=20=ED=8F=AC=EB=A7=B7=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 15 +++------------ API-SERVICE/ApiList/meta/getBizMetaList.py | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index af3c23e1..5930ca05 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -8,7 +8,6 @@ def api(request: Request, datasetId: str = None) -> Dict: user_info = get_token_info(request.headers) - body = dict() v_meta_map_query = 'SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta' v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' @@ -22,16 +21,8 @@ def api(request: Request, datasetId: str = None) -> Dict: logger.error(err) else: - name_map = {name_map["eng_nm"]: name_map["kor_nm"] for name_map in meta_map[0]} - - for meta_data in meta_wrap[0]: - body["kor_name"] = list(name_map.values()) - body["data"] = list(meta_data.values()) - body["eng_name"] = list(name_map.keys()) - body["type"] = [0 for i in range(0,len(meta_map[0]))] - body["columnkey"] = list(meta_data.keys()) - body["biz_dataset_id"] = datasetId - - result = make_res_msg(1,"",body,meta_map[0]) + kor_nm_list = [map_data["kor_nm"] for map_data in meta_map[0]] + eng_nm_list = [map_data["eng_nm"] for map_data in meta_map[0]] + result = make_res_msg(1,"",meta_wrap[0],eng_nm_list,kor_nm_list) return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 6ef2cb78..4fb1cecd 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -15,6 +15,7 @@ def api(request: Request, user_info = get_token_info(request.headers) curPage = curPage - 1 v_biz_meta_query = "SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta" + total_cnt_query = "SELECT count(*) as cnt FROM v_biz_meta_wrap" v_meta_wrap_query = """ select *, @@ -28,6 +29,7 @@ def api(request: Request, try: db = connect_db(config.db_info) + total_cnt = db.select(total_cnt_query) if len(keyWordList): order_condition = str() @@ -52,17 +54,15 @@ def api(request: Request, result = {"result": 0, "errorMessage": err} logger.error(err) else: - if len(meta_map[0]): - body = [] - for meta_data in meta_wrap[0]: - meta_dataset = dict() - meta_dataset["data"] = list(meta_data.values()) - meta_dataset["columnkey"] = list(meta_data.keys()) - meta_dataset["biz_dataset_id"] = meta_data["biz_dataset_id"] - body.append(meta_dataset) + if len(meta_wrap[0]): + body = {"totalcount": total_cnt[0][0]['cnt']} + body["searchList"] = [meta_data for meta_data in meta_wrap[0]] - result = make_res_msg(1,"",body,meta_map[0]) + result = {"result":1,"errorMessage":"","data":body} + # result = make_res_msg(1,"",body,"") else: - result = make_res_msg(1,"",meta_map[0],meta_map[1]) + body = {"totalcount": total_cnt[0][0]['cnt'], "searchList":meta_wrap[0]} + result = {"result":1,"errorMessage":"","data":body} + # result = make_res_msg(1,"",meta_wrap[0]) return result From 9b8bd301f87d49fde217209243451f7313f31d8f Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 24 Jun 2022 16:03:23 +0900 Subject: [PATCH 109/236] =?UTF-8?q?feat=20:=20url=20=EB=B3=84=20=EB=8B=A4?= =?UTF-8?q?=EC=88=98=EC=9D=98=20method=20=ED=97=88=EC=9A=A9=ED=86=A0?= =?UTF-8?q?=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 5 ++++- API-ROUTER/Utils/CommonUtil.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index a86a1415..e36377a1 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -71,8 +71,9 @@ def set_route(self) -> None: config.api_server_info, _ = db.select('SELECT * FROM api_server_info') for api in api_info: + method = str(api["meth"]).split(",") self.router.add_api_route( - api["route_url"], self.route_api, methods=[api["meth"]], tags=[f'Route Category ({api["ctgry"]})']) + api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["ctgry"]})']) # f'/route/{api["ctgry"]}/{api["api_nm"]}', self.route_api, methods=[api["meth"]], tags=[f'Route Category ({api["ctgry"]})']) for api_name, api_info in config.api_config.items(): @@ -336,6 +337,7 @@ def del_api(self, api_nm: str) -> Dict: async def route_api(self, request: Request) -> Dict: route_url = request.url.path + method = request.method content_type = request.headers.get("Content-Type") headers = dict(request.headers) logger.error(request.headers) @@ -375,6 +377,7 @@ async def route_api(self, request: Request) -> Dict: logger.debug( f'Req - body : {body}, query params : {params_query}') + api_info["meth"] = method logger.debug(f'DB - api_info : {api_info}') logger.debug(f'DB - api_params : {api_params}') diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 5bff75ce..def0a1bf 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -98,4 +98,4 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + \ No newline at end of file From 0606ba18c66beef6e247276beb606a8da3171e5c Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 27 Jun 2022 15:19:12 +0900 Subject: [PATCH 110/236] =?UTF-8?q?feat=20:=20use=20board=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 12 ++-- API-ROUTER/Utils/CommonUtil.py | 10 +++- .../ApiList/meta/deleteUseBoardData.py | 27 +++++++++ API-SERVICE/ApiList/meta/getTest.py | 12 ---- .../ApiList/meta/getUseBoardDataDetail.py | 35 ++++++++++++ .../ApiList/meta/getUseBoardDataList.py | 35 ++++++++++++ .../ApiList/meta/insertUseBoardData.py | 56 +++++++++++++++++++ API-SERVICE/ApiList/meta/postTest.py | 12 ---- .../ApiList/meta/updateUseBoardData.py | 54 ++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 25 +++++++-- 10 files changed, 239 insertions(+), 39 deletions(-) create mode 100644 API-SERVICE/ApiList/meta/deleteUseBoardData.py delete mode 100644 API-SERVICE/ApiList/meta/getTest.py create mode 100644 API-SERVICE/ApiList/meta/getUseBoardDataDetail.py create mode 100644 API-SERVICE/ApiList/meta/getUseBoardDataList.py create mode 100644 API-SERVICE/ApiList/meta/insertUseBoardData.py delete mode 100644 API-SERVICE/ApiList/meta/postTest.py create mode 100644 API-SERVICE/ApiList/meta/updateUseBoardData.py diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index e36377a1..313fe0e5 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -4,7 +4,7 @@ from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg, get_token_info, save_file_for_reload, get_exception_info +from Utils.CommonUtil import connect_db, make_res_msg, get_token_info, save_file_for_reload, get_exception_info, delete_headers from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request @@ -74,7 +74,6 @@ def set_route(self) -> None: method = str(api["meth"]).split(",") self.router.add_api_route( api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["ctgry"]})']) - # f'/route/{api["ctgry"]}/{api["api_nm"]}', self.route_api, methods=[api["meth"]], tags=[f'Route Category ({api["ctgry"]})']) for api_name, api_info in config.api_config.items(): module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_info["sub_dir"]}/{api_name}.py' @@ -339,13 +338,10 @@ async def route_api(self, request: Request) -> Dict: route_url = request.url.path method = request.method content_type = request.headers.get("Content-Type") - headers = dict(request.headers) - logger.error(request.headers) - if headers.get("content-length"): - del(headers["content-length"]) - if headers.get("user-agent"): - del(headers["user-agent"]) + logger.error(f"BEFORE : {dict(request.headers)}") + headers = delete_headers(dict(request.headers), [ + "content-length", "user-agent"]) logger.debug(f'Request Headers : {headers}') user_info = get_token_info(request.headers) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index def0a1bf..feb58ad0 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -4,7 +4,7 @@ import starlette.datastructures from fastapi.logger import logger from pathlib import Path -from typing import Any +from typing import Any, Dict, List from ApiRoute.ApiRouteConfig import config from ConnectManager import PostgresManager from retry import retry @@ -98,4 +98,10 @@ def get_exception_info(): trace_log = [trace for trace in trace_back] return ex_type.__name__, ex_value, trace_log - \ No newline at end of file + + +def delete_headers(headers: Dict, delete_header: List) -> Dict: + for delete in delete_header: + if headers.get(delete): + del(headers[delete]) + return headers diff --git a/API-SERVICE/ApiList/meta/deleteUseBoardData.py b/API-SERVICE/ApiList/meta/deleteUseBoardData.py new file mode 100644 index 00000000..1250642f --- /dev/null +++ b/API-SERVICE/ApiList/meta/deleteUseBoardData.py @@ -0,0 +1,27 @@ +from typing import Dict +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel +from starlette.requests import Request + + +class deleteUseBoardData(BaseModel): + use_dataset_id: str + + +def api(use_board_data: deleteUseBoardData, request: Request) -> Dict: + user_info = get_token_info(request.headers) + delete_biz_meta_query = f'DELETE FROM tb_board_use WHERE use_dataset_id = {convert_data(use_board_data.use_dataset_id)};' + + try: + db = connect_db(config.db_info) + db.execute(delete_biz_meta_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/meta/getTest.py b/API-SERVICE/ApiList/meta/getTest.py deleted file mode 100644 index 8828e01f..00000000 --- a/API-SERVICE/ApiList/meta/getTest.py +++ /dev/null @@ -1,12 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg -from fastapi.logger import logger -from starlette.requests import Request - - -def api(request: Request) -> Dict: - - result = {"result": 0, "errorMessage": "getTest"} - - return result diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py new file mode 100644 index 00000000..6a990856 --- /dev/null +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -0,0 +1,35 @@ +from typing import Dict +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.DataBaseUtil import convert_data +from starlette.requests import Request + + +def api(use_dataset_id: str, request: Request) -> Dict: + user_info = get_token_info(request.headers) + + get_use_data_query = f'SELECT * FROM tb_board_use WHERE use_dataset_id = {convert_data(use_dataset_id)};' + get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ + WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" + + try: + db = connect_db(config.db_info) + use_data, eng_columns = db.select(get_use_data_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + kor_nm_list = [] + name_info = {} + column_info, _ = db.select(get_column_info) + + for name in column_info: + name_info[name['eng_nm']] = name['kor_nm'] + for eng_nm in eng_columns: + if eng_nm in name_info: + kor_nm_list.append(name_info[eng_nm]) + else: + kor_nm_list.append("") + result = make_res_msg(1, "", use_data, eng_columns, kor_nm_list) + return result diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py new file mode 100644 index 00000000..3fc0a00c --- /dev/null +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -0,0 +1,35 @@ +from typing import Dict +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from starlette.requests import Request + + +def api(request: Request) -> Dict: + user_info = get_token_info(request.headers) + + get_use_data_query = f'SELECT * FROM tb_board_use;' + get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ + WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" + + try: + db = connect_db(config.db_info) + use_data, eng_columns = db.select(get_use_data_query) + logger.error(f'USE DATA : {use_data}') + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + kor_nm_list = [] + name_info = {} + column_info, _ = db.select(get_column_info) + + for name in column_info: + name_info[name['eng_nm']] = name['kor_nm'] + for eng_nm in eng_columns: + if eng_nm in name_info: + kor_nm_list.append(name_info[eng_nm]) + else: + kor_nm_list.append("") + result = make_res_msg(1, "", use_data, eng_columns, kor_nm_list) + return result diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py new file mode 100644 index 00000000..660536cb --- /dev/null +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -0,0 +1,56 @@ +from typing import Dict +import uuid +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel +from starlette.requests import Request +from datetime import datetime, timedelta + + +class insertUseBoardData(BaseModel): + apyr: str + biz_dataset_id: str + apy_sbst: str + + +def api(use_board_data: insertUseBoardData, request: Request) -> Dict: + user_info = get_token_info(request.headers) + get_biz_meta_query = f'SELECT * FROM v_biz_meta_wrap \ + WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' + + try: + db = connect_db(config.db_info) + biz_dataset, _ = db.select(get_biz_meta_query) + biz_dataset = biz_dataset[0] + + use_dataset_id = uuid.uuid4() + use_st_dt = datetime.today().strftime("%Y-%m-%d") + exp_date = (datetime.today() + timedelta(30)).strftime("%Y-%m-%d") + trt_sttus = "처리중" + use_tmscnt = 1 + apy_sbst = use_board_data.apy_sbst + + insert_use_data_query = f'INSERT INTO tb_board_use (use_dataset_id, apyr, \ + data_nm, ctgry, \ + file_size, law_evl_conf_yn, \ + use_st_dt, exp_date, \ + trt_sttus, use_tmscnt, \ + apy_sbst) \ + VALUES ( \ + {convert_data(use_dataset_id)}, {convert_data(use_board_data.apyr)}, \ + {convert_data(biz_dataset["data_nm"])}, {convert_data(biz_dataset["ctgry"])}, \ + {convert_data(biz_dataset["file_size"])}, {convert_data(biz_dataset["law_evl_conf_yn"])}, \ + {convert_data(use_st_dt)}, {convert_data(exp_date)}, \ + {convert_data(trt_sttus)}, {convert_data(use_tmscnt)}, \ + {convert_data(apy_sbst)} \ + );' + db.execute(insert_use_data_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/meta/postTest.py b/API-SERVICE/ApiList/meta/postTest.py deleted file mode 100644 index 38fa683c..00000000 --- a/API-SERVICE/ApiList/meta/postTest.py +++ /dev/null @@ -1,12 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg -from fastapi.logger import logger -from starlette.requests import Request - - -def api(request: Request) -> Dict: - logger.error(request.json()) - result = {"result": 0, "errorMessage": "postTest"} - - return result diff --git a/API-SERVICE/ApiList/meta/updateUseBoardData.py b/API-SERVICE/ApiList/meta/updateUseBoardData.py new file mode 100644 index 00000000..1da73228 --- /dev/null +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -0,0 +1,54 @@ +from typing import Dict +import uuid +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel +from starlette.requests import Request +from datetime import datetime, timedelta + + +class updateUseBoardData(BaseModel): + apyr: str + use_dataset_id: str + biz_dataset_id: str + apy_sbst: str + + +def api(use_board_data: updateUseBoardData, request: Request) -> Dict: + user_info = get_token_info(request.headers) + get_biz_meta_query = f'SELECT * FROM v_biz_meta_wrap \ + WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' + + try: + db = connect_db(config.db_info) + biz_dataset, _ = db.select(get_biz_meta_query) + biz_dataset = biz_dataset[0] + + use_st_dt = datetime.today().strftime("%Y-%m-%d") + exp_date = (datetime.today() + timedelta(30)).strftime("%Y-%m-%d") + trt_sttus = "활용중" + use_tmscnt = 2 + apy_sbst = use_board_data.apy_sbst + + update_use_data_query = f'UPDATE tb_board_use SET \ + data_nm = {convert_data(biz_dataset["data_nm"])},\ + ctgry = {convert_data(biz_dataset["ctgry"])},\ + file_size = {convert_data(biz_dataset["file_size"])},\ + law_evl_conf_yn = {convert_data(biz_dataset["law_evl_conf_yn"])},\ + use_st_dt = {convert_data(use_st_dt)},\ + exp_date = {convert_data(exp_date)},\ + trt_sttus = {convert_data(trt_sttus)},\ + use_tmscnt = {convert_data(use_tmscnt)},\ + apy_sbst = {convert_data(apy_sbst)}\ + WHERE use_dataset_id = {convert_data(use_board_data.use_dataset_id)};' + + db.execute(update_use_data_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 401547f8..2fcea7c5 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -68,12 +68,27 @@ method = POST url = /portal/api/meta/addChildCategory sub_dir = meta -[getTest] -method = GET -url = /portal/api/meta/getTest +[insertUseBoardData] +method = POST +url = /portal/api/meta/insertUseBoardData +sub_dir = meta + +[updateUseBoardData] +method = POST +url = /portal/api/meta/updateUseBoardData sub_dir = meta -[postTest] +[deleteUseBoardData] method = POST -url = /portal/api/meta/postTest +url = /portal/api/meta/deleteUseBoardData sub_dir = meta + +[getUseBoardDataList] +method = POST +url = /portal/api/meta/getUseBoardDataList +sub_dir = meta + +[getUseBoardDataDetail] +method = POST +url = /portal/api/meta/getUseBoardDataDetail +sub_dir = meta \ No newline at end of file From c7e41661fb52bafa2c42b723da312f1914d31393 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 27 Jun 2022 15:49:56 +0900 Subject: [PATCH 111/236] =?UTF-8?q?fix=20:=20api=20config=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/meta/api_config.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 2fcea7c5..657ba1df 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -84,11 +84,11 @@ url = /portal/api/meta/deleteUseBoardData sub_dir = meta [getUseBoardDataList] -method = POST +method = GET url = /portal/api/meta/getUseBoardDataList sub_dir = meta [getUseBoardDataDetail] -method = POST +method = GET url = /portal/api/meta/getUseBoardDataDetail sub_dir = meta \ No newline at end of file From 4dec2c417d7a349890edacd673c66a2f445dda4b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 27 Jun 2022 16:10:36 +0900 Subject: [PATCH 112/236] =?UTF-8?q?fix=20:=20use=20board=20API=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getUseBoardDataDetail.py | 15 ++++----------- API-SERVICE/ApiList/meta/getUseBoardDataList.py | 13 +++---------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py index 6a990856..319f51e6 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -15,21 +15,14 @@ def api(use_dataset_id: str, request: Request) -> Dict: try: db = connect_db(config.db_info) - use_data, eng_columns = db.select(get_use_data_query) + use_data, _ = db.select(get_use_data_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) else: - kor_nm_list = [] - name_info = {} column_info, _ = db.select(get_column_info) + kor_nm_list = [map_data["kor_nm"] for map_data in column_info] + eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - for name in column_info: - name_info[name['eng_nm']] = name['kor_nm'] - for eng_nm in eng_columns: - if eng_nm in name_info: - kor_nm_list.append(name_info[eng_nm]) - else: - kor_nm_list.append("") - result = make_res_msg(1, "", use_data, eng_columns, kor_nm_list) + result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) return result diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py index 3fc0a00c..c2a8fefc 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -20,16 +20,9 @@ def api(request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - kor_nm_list = [] - name_info = {} column_info, _ = db.select(get_column_info) + kor_nm_list = [map_data["kor_nm"] for map_data in column_info] + eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - for name in column_info: - name_info[name['eng_nm']] = name['kor_nm'] - for eng_nm in eng_columns: - if eng_nm in name_info: - kor_nm_list.append(name_info[eng_nm]) - else: - kor_nm_list.append("") - result = make_res_msg(1, "", use_data, eng_columns, kor_nm_list) + result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) return result From 310c6984cacc426f571910c1198df0c820fd9e65 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 10:21:24 +0900 Subject: [PATCH 113/236] =?UTF-8?q?feat=20:=20biz=20meta=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertBizMetaData.py | 60 +++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 5 ++ 2 files changed, 65 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/insertBizMetaData.py diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py new file mode 100644 index 00000000..2f37433f --- /dev/null +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -0,0 +1,60 @@ +import uuid +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info +from Utils.DataBaseUtil import convert_data +from fastapi.logger import logger +from starlette.requests import Request +from pydantic import BaseModel + + +class insertBizMetaData(BaseModel): + adm_dep: str + rqt_dep: str + admr_nm: str + rqt_nm: str + ctgry: str + reg_date: str + ltst_amd_dt: str + prv_shap: str + file_size: str + open_scope: str + data_shap: str + src_sys: str + src_url: str + kywrd: str + data_prv_desk: str + data_updt_cyc: str + law_evl_conf_yn: str + scrty_evl_conf_yn: str + updt_nxt_date: str + data_nm: str + data_desc: str + + +def api(biz_meta_data: insertBizMetaData, request: Request) -> Dict: + user_info = get_token_info(request.headers) + + uid = uuid.uuid4() + get_column_info = 'SELECT item_id, eng_nm FROM v_biz_meta;' + + try: + db = connect_db(config.db_info) + column_info, _ = db.select(get_column_info) + + biz_meta_data = biz_meta_data.dict() + insert_values = [] + for info in column_info: + values = f'({convert_data(uid)}, {convert_data(info["item_id"])}, {convert_data(info["eng_nm"])})' + insert_values.append(values) + + insert_meta_query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val) \ + VALUES {",".join(insert_values)};' + logger.error(insert_meta_query) + db.execute(insert_meta_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": err} + return result diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 657ba1df..d2d6dddc 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -91,4 +91,9 @@ sub_dir = meta [getUseBoardDataDetail] method = GET url = /portal/api/meta/getUseBoardDataDetail +sub_dir = meta + +[insertBizMetaData] +method = POST +url = /portal/api/meta/insertBizMetaData sub_dir = meta \ No newline at end of file From 888daaf5f8424db871261f61d41394b58ea2e76f Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 10:32:25 +0900 Subject: [PATCH 114/236] =?UTF-8?q?fix=20:=20insert=20biz=20meta=20?= =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertBizMetaData.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py index 2f37433f..75946548 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -45,7 +45,7 @@ def api(biz_meta_data: insertBizMetaData, request: Request) -> Dict: biz_meta_data = biz_meta_data.dict() insert_values = [] for info in column_info: - values = f'({convert_data(uid)}, {convert_data(info["item_id"])}, {convert_data(info["eng_nm"])})' + values = f'({convert_data(uid)}, {convert_data(info["item_id"])}, {convert_data(biz_meta_data[info["eng_nm"]])})' insert_values.append(values) insert_meta_query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val) \ @@ -56,5 +56,5 @@ def api(biz_meta_data: insertBizMetaData, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = {"result": 1, "errorMessage": err} + result = {"result": 1, "errorMessage": ""} return result From ac145838279603618127d93ba7a9496a45e74309 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 13:44:35 +0900 Subject: [PATCH 115/236] =?UTF-8?q?feat=20:=20category=20tree=20api=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getCategoryTree.py | 49 +++++++++++++++++++ API-SERVICE/ApiList/meta/insertBizMetaData.py | 1 - API-SERVICE/conf/meta/api_config.ini | 5 ++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/meta/getCategoryTree.py diff --git a/API-SERVICE/ApiList/meta/getCategoryTree.py b/API-SERVICE/ApiList/meta/getCategoryTree.py new file mode 100644 index 00000000..492dba4d --- /dev/null +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -0,0 +1,49 @@ +from typing import Dict + +from regex import P +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel +from fastapi.logger import logger +from starlette.requests import Request + + +def api(request: Request) -> Dict: + user_info = get_token_info(request.headers) + + get_category_list = "SELECT * FROM tb_category;" + + try: + db = connect_db(config.db_info) + category_list, _ = db.select(get_category_list) + + node_dict = {} + category_tree = {} + for category in category_list: + node_dict[category["node_id"]] = category["node_nm"] + category_tree[category["node_nm"]] = [] + + for category in category_list: + if node_dict.get(category["prnts_id"]): + parent_name = node_dict[category["prnts_id"]] + category_tree[parent_name].append(category["node_nm"]) + + result_category = {} + for category in category_tree["ROOT"]: + if category == "ROOT": + continue + result_category[category] = None + + for main_category, sub_category in category_tree.items(): + if sub_category: + if main_category == "ROOT": + continue + result_category[main_category] = sub_category + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = make_res_msg(1, "", result_category, []) + + return result diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py index 75946548..3cb28bb2 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -50,7 +50,6 @@ def api(biz_meta_data: insertBizMetaData, request: Request) -> Dict: insert_meta_query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val) \ VALUES {",".join(insert_values)};' - logger.error(insert_meta_query) db.execute(insert_meta_query) except Exception as err: result = {"result": 0, "errorMessage": err} diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index d2d6dddc..54ebee13 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -96,4 +96,9 @@ sub_dir = meta [insertBizMetaData] method = POST url = /portal/api/meta/insertBizMetaData +sub_dir = meta + +[getCategoryTree] +method = POST +url = /portal/api/meta/getCategoryTree sub_dir = meta \ No newline at end of file From 53068c97f9d759c756d25578a4f275f39b7242f5 Mon Sep 17 00:00:00 2001 From: cbc <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 13:47:47 +0900 Subject: [PATCH 116/236] Update config.ini --- API-SERVICE/conf/meta/config.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index eb8bc5a8..af176b60 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -3,7 +3,7 @@ host = 192.168.100.126 port = 25432 user = dpme password = hello.meta12#$ -database = dataportal +database = ktportal schema = meta [secret_info] From 00b12791b46a9ced5671177536c1420bb82e16b1 Mon Sep 17 00:00:00 2001 From: cbc <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 13:48:11 +0900 Subject: [PATCH 117/236] Update config.ini --- API-SERVICE/conf/sitemng/config.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/conf/sitemng/config.ini b/API-SERVICE/conf/sitemng/config.ini index 8caa72fd..23860e4c 100644 --- a/API-SERVICE/conf/sitemng/config.ini +++ b/API-SERVICE/conf/sitemng/config.ini @@ -3,9 +3,9 @@ host = 192.168.100.126 port = 25432 user = dpsi password = hello.sitemng12#$ -database = dataportal +database = ktportal schema = sitemng [secret_info] name = user-katech-access-token -secret = jwt-secrect-b-iris \ No newline at end of file +secret = jwt-secrect-b-iris From e792740676674f25f9de421d451607c6bbded912 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 15:07:02 +0900 Subject: [PATCH 118/236] =?UTF-8?q?feat=20:=20=EB=B2=84=EC=A0=BC=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20DB=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 49 +++++++++++++++++---------------- API-ROUTER/Utils/CommonUtil.py | 1 + API-ROUTER/conf/config.ini | 12 ++++---- API-ROUTER/safe_start.sh | 0 4 files changed, 32 insertions(+), 30 deletions(-) mode change 100644 => 100755 API-ROUTER/safe_start.sh diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 313fe0e5..c3d6a7b2 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -66,9 +66,10 @@ def set_route(self) -> None: "/api/delServerInfo", self.del_server_info, methods=["POST"], tags=["API Server Info"]) db = connect_db(config.db_type, config.db_info) - api_info, _ = db.select('SELECT * FROM api_info;') + api_info, _ = db.select('SELECT * FROM tb_api_info;') - config.api_server_info, _ = db.select('SELECT * FROM api_server_info') + config.api_server_info, _ = db.select( + 'SELECT * FROM tb_api_server_info') for api in api_info: method = str(api["meth"]).split(",") @@ -87,7 +88,7 @@ def set_route(self) -> None: def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: api_server_info = api_server_info.__dict__ - api_server_info_query = f'INSERT INTO api_server_info (nm, ip_adr, domn_nm) \ + api_server_info_query = f'INSERT INTO tb_api_server_info (nm, ip_adr, domn_nm) \ VALUES ({convert_data(api_server_info["nm"])}, \ {convert_data(api_server_info["ip_adr"])}, \ {convert_data(api_server_info["domn_nm"])});' @@ -101,14 +102,14 @@ def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: result = {"result": 0, "errorMessage": ex_type} else: config.api_server_info, _ = db.select( - 'SELECT * FROM api_server_info;') + 'SELECT * FROM tb_api_server_info;') result = {"result": 1, "errorMessage": ""} return result def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: api_server_info = api_server_info.__dict__ - api_server_info_query = f'UPDATE api_server_info SET ip_adr={convert_data(api_server_info["ip_adr"])}, \ + api_server_info_query = f'UPDATE tb_api_server_info SET ip_adr={convert_data(api_server_info["ip_adr"])}, \ domn_nm={convert_data(api_server_info["domn_nm"])} \ WHERE nm={convert_data(api_server_info["nm"])};' try: @@ -121,7 +122,7 @@ def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: result = {"result": 0, "errorMessage": ex_type} else: config.api_server_info, _ = db.select( - 'SELECT * FROM api_server_info;') + 'SELECT * FROM tb_api_server_info;') result = {"result": 1, "errorMessage": ""} return result @@ -130,7 +131,7 @@ def get_server_info_list(self) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( - 'SELECT * FROM api_server_info ORDER BY nm;') + 'SELECT * FROM tb_api_server_info ORDER BY nm;') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -145,7 +146,7 @@ def get_server_info(self, nm: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_server_info, _ = db.select( - f'SELECT * FROM api_server_info WHERE nm = {convert_data(nm)};') + f'SELECT * FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -160,7 +161,7 @@ def del_server_info(self, nm: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) db.execute( - f'DELETE FROM api_server_info WHERE nm = {convert_data(nm)};') + f'DELETE FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -168,7 +169,7 @@ def del_server_info(self, nm: str) -> Dict: result = {"result": 0, "errorMessage": ex_type} else: config.api_server_info, _ = db.select( - 'SELECT * FROM api_server_info;') + 'SELECT * FROM tb_api_server_info;') result = {"result": 1, "errorMessage": ""} return result @@ -178,9 +179,9 @@ def get_api_list(self) -> Dict: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM api_info ORDER BY no;') + f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info ORDER BY no;') api_params, params_column_names = db.select( - f'SELECT * FROM api_params ORDER BY api_nm, nm;') + f'SELECT * FROM tb_api_params ORDER BY api_nm, nm;') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -199,12 +200,12 @@ def get_api_category_list(self, ctgry: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM api_info WHERE ctgry = {convert_data(ctgry)} ORDER BY no;') + f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info WHERE ctgry = {convert_data(ctgry)} ORDER BY no;') for info in api_info: logger.debug(f'INFO : {info["api_nm"]}') api_params, params_column_names = db.select( - f'SELECT * FROM api_params WHERE api_nm = {convert_data(info["api_nm"])} ORDER BY nm;') + f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(info["api_nm"])} ORDER BY nm;') if len(api_params) != 0: api_params_list.extend(api_params) params_columns = params_column_names @@ -225,9 +226,9 @@ def get_api(self, api_nm: str) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_info, info_column_names = db.select( - f'SELECT * FROM api_info WHERE api_nm = {convert_data(api_nm)};') + f'SELECT * FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') api_params, params_column_names = db.select( - f'SELECT * FROM api_params WHERE api_nm = {convert_data(api_nm)} ORDER BY nm;') + f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(api_nm)} ORDER BY nm;') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" @@ -253,7 +254,7 @@ def set_api(self, api_info: ApiInfo) -> Dict: else: insert_api_info[key] = value - api_info_query = f'INSERT INTO api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ + api_info_query = f'INSERT INTO tb_api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, \ {convert_data(insert_api_info["route_url"])}, {convert_data(insert_api_info["url"])}, \ {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, \ @@ -261,7 +262,7 @@ def set_api(self, api_info: ApiInfo) -> Dict: db.execute(api_info_query) for param in insert_api_params: - api_params_query = f'INSERT INTO api_params (api_nm, nm, data_type, deflt_val) \ + api_params_query = f'INSERT INTO tb_api_params (api_nm, nm, data_type, deflt_val) \ VALUES ({convert_data(param["api_nm"])}, {convert_data(param["nm"])}, \ {convert_data(param["data_type"])}, {convert_data(param["deflt_val"])});' db.execute(api_params_query) @@ -289,9 +290,9 @@ def update_api(self, api_info: ApiInfo) -> Dict: else: insert_api_info[key] = value db.execute( - f'DELETE FROM api_info WHERE api_nm = {convert_data(insert_api_info["api_nm"])};') + f'DELETE FROM tb_api_info WHERE api_nm = {convert_data(insert_api_info["api_nm"])};') - api_info_query = f'INSERT INTO api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ + api_info_query = f'INSERT INTO tb_api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, \ {convert_data(insert_api_info["route_url"])}, {convert_data(insert_api_info["url"])}, \ {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, \ @@ -300,7 +301,7 @@ def update_api(self, api_info: ApiInfo) -> Dict: db.execute(api_info_query) for param in insert_api_params: - api_params_query = f'INSERT INTO api_params (api_nm, nm, data_type, deflt_val) \ + api_params_query = f'INSERT INTO tb_api_params (api_nm, nm, data_type, deflt_val) \ VALUES ({convert_data(param["api_nm"])}, {convert_data(param["nm"])}, \ {convert_data(param["data_type"])}, {convert_data(param["deflt_val"])});' db.execute(api_params_query) @@ -321,7 +322,7 @@ def del_api(self, api_nm: str) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute( - f'DELETE FROM api_info WHERE api_nm = {convert_data(api_nm)};') + f'DELETE FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') except Exception: ex_type, ex_value, trace_log = get_exception_info() @@ -349,10 +350,10 @@ async def route_api(self, request: Request) -> Dict: try: db = connect_db(config.db_type, config.db_info) api_info, _ = db.select( - f'SELECT * FROM api_info WHERE route_url = {convert_data(route_url)};') + f'SELECT * FROM tb_api_info WHERE route_url = {convert_data(route_url)};') api_info = api_info[0] api_params, _ = db.select( - f'SELECT * FROM api_params WHERE api_nm = {convert_data(api_info["api_nm"])};') + f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(api_info["api_nm"])};') except Exception: ex_type, ex_value, trace_log = get_exception_info() logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index feb58ad0..aa869f2a 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -105,3 +105,4 @@ def delete_headers(headers: Dict, delete_header: List) -> Dict: if headers.get(delete): del(headers[delete]) return headers + \ No newline at end of file diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index f6daccc9..5bc0fe72 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -5,12 +5,12 @@ id = deep password = !deep@win#human$5 [postgresql] -host = 192.168.101.43 -port = 5432 -user = dhub -password = dhub.12# -database = dhub -schema = api +host = 192.168.100.126 +port = 25432 +user = dpsi +password = hello.sitemng12#$ +database = ktportal +schema = sitemng [secret_info] name = user-katech-access-token diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh old mode 100644 new mode 100755 From 5700603afe18109f649cd0181d9d35fe45c54a5f Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 15:29:04 +0900 Subject: [PATCH 119/236] =?UTF-8?q?fix=20:=20=EC=98=A4=ED=83=80=EB=A1=9C?= =?UTF-8?q?=20=EC=9D=B8=ED=95=9C=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getCategoryTree.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getCategoryTree.py b/API-SERVICE/ApiList/meta/getCategoryTree.py index 492dba4d..54645ff2 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -1,6 +1,4 @@ from typing import Dict - -from regex import P from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from Utils.DataBaseUtil import convert_data From 0c9d9d6297850a1047fdf317d35da5a40bf48f4b Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 28 Jun 2022 17:03:07 +0900 Subject: [PATCH 120/236] =?UTF-8?q?[AIPLATFORM-387]=20fix:=20list=EB=A5=BC?= =?UTF-8?q?=20dict=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 5930ca05..677540d8 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -23,6 +23,6 @@ def api(request: Request, datasetId: str = None) -> Dict: else: kor_nm_list = [map_data["kor_nm"] for map_data in meta_map[0]] eng_nm_list = [map_data["eng_nm"] for map_data in meta_map[0]] - result = make_res_msg(1,"",meta_wrap[0],eng_nm_list,kor_nm_list) +정 result = make_res_msg(1,"",meta_wrap[0][0],eng_nm_list,kor_nm_list) return result From 29f08efbc8fe2df8025cabf4de3097457e82f32f Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 28 Jun 2022 17:04:26 +0900 Subject: [PATCH 121/236] =?UTF-8?q?[AIPLATFORM-387]=20fix:=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95,=20totalcount=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20parameter=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 4fb1cecd..a2ee210b 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -10,7 +10,9 @@ def api(request: Request, perPage: int, curPage: int, - keyWordList: List[str] = Query(None)) -> Dict: + keywordList1: str = "", + keywordList2: str = "", + keywordList3: str = ""): user_info = get_token_info(request.headers) curPage = curPage - 1 @@ -24,32 +26,37 @@ def api(request: Request, {0} ) as rowNo from - meta.v_biz_meta_wrap + v_biz_meta_wrap """ try: db = connect_db(config.db_info) - total_cnt = db.select(total_cnt_query) - - if len(keyWordList): + search_word_list = [keywordList1,keywordList2,keywordList3] + if any(search_word_list): order_condition = str() search_condition = "data_nm like '%{0}%'" v_meta_wrap_query = v_meta_wrap_query + " WHERE " + total_cnt_query = total_cnt_query + " WHERE " # 검색 조건 추가 - for word in keyWordList: + for word in search_word_list: order_condition = order_condition + f"data_nm similar to '%{word}%' and " v_meta_wrap_query = v_meta_wrap_query + search_condition.format(word) + " and " + total_cnt_query = total_cnt_query + search_condition.format(word) + " and " - # 마지막 ' and ' 삭제 + # 마지막 ' and ' 삭제 v_meta_wrap_query = v_meta_wrap_query[:-5] + total_cnt_query = total_cnt_query[:-5] v_meta_wrap_query = v_meta_wrap_query.format(order_condition[:-5] + " desc") else: v_meta_wrap_query = v_meta_wrap_query.format("biz_dataset_id") - v_meta_wrap_query = v_meta_wrap_query + f" limit {perPage} offset ({perPage} * {curPage})" + v_meta_wrap_query = v_meta_wrap_query + f" limit {perPage} offset ({perPage} * {curPage})" meta_wrap = db.select(v_meta_wrap_query) - meta_map = db.select(v_biz_meta_query) + + total_cnt = db.select(total_cnt_query) + # meta_map = db.select(v_biz_meta_query) + except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) From 6aa89b1ddc23753642cfdf09141da71b883926f1 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 28 Jun 2022 17:05:57 +0900 Subject: [PATCH 122/236] =?UTF-8?q?[AIPLATFORM-387]=20chore:=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 677540d8..4f2a84bf 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -7,7 +7,7 @@ def api(request: Request, datasetId: str = None) -> Dict: - user_info = get_token_info(request.headers) + user_info = get_token_info(reques정.headers) v_meta_map_query = 'SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta' v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' @@ -23,6 +23,6 @@ def api(request: Request, datasetId: str = None) -> Dict: else: kor_nm_list = [map_data["kor_nm"] for map_data in meta_map[0]] eng_nm_list = [map_data["eng_nm"] for map_data in meta_map[0]] -정 result = make_res_msg(1,"",meta_wrap[0][0],eng_nm_list,kor_nm_list) + result = make_res_msg(1,"",meta_wrap[0][0],eng_nm_list,kor_nm_list) return result From 77907c226bc965da8e8217b9c30c50e12dd0be52 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 28 Jun 2022 17:12:45 +0900 Subject: [PATCH 123/236] =?UTF-8?q?[AIPLATFORM-387]=20chore:=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 4f2a84bf..8a5a15d6 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -7,7 +7,7 @@ def api(request: Request, datasetId: str = None) -> Dict: - user_info = get_token_info(reques정.headers) + user_info = get_token_info(request.headers) v_meta_map_query = 'SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta' v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' From dc5a8507115b6c054b074f8ea98d82fff8cdd83d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 29 Jun 2022 10:33:29 +0900 Subject: [PATCH 124/236] =?UTF-8?q?feat=20:=20=ED=99=9C=EC=9A=A9=20?= =?UTF-8?q?=EC=8B=A0=EC=B2=AD=20=EC=A1=B0=ED=9A=8C=20=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getUseBoardDataDetail.py | 4 ++-- API-SERVICE/ApiList/meta/getUseBoardDataList.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py index 319f51e6..554e1bc2 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -6,10 +6,10 @@ from starlette.requests import Request -def api(use_dataset_id: str, request: Request) -> Dict: +def api(apyr: str, request: Request) -> Dict: user_info = get_token_info(request.headers) - get_use_data_query = f'SELECT * FROM tb_board_use WHERE use_dataset_id = {convert_data(use_dataset_id)};' + get_use_data_query = f'SELECT * FROM tb_board_use WHERE apyr = {convert_data(apyr)};' get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py index c2a8fefc..13de4e88 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -14,7 +14,7 @@ def api(request: Request) -> Dict: try: db = connect_db(config.db_info) - use_data, eng_columns = db.select(get_use_data_query) + use_data, _ = db.select(get_use_data_query) logger.error(f'USE DATA : {use_data}') except Exception as err: result = {"result": 0, "errorMessage": err} From 8a7d08577b7a6f2df40ca4bf24d9532d9fde46c1 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 29 Jun 2022 11:21:01 +0900 Subject: [PATCH 125/236] =?UTF-8?q?[AIPLATFORM-387]=20fix:=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index a2ee210b..2efdf9d9 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,8 +1,6 @@ from lib2to3.pytree import convert -from typing import Dict,List from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info, make_res_msg -from fastapi import Query from fastapi.logger import logger from starlette.requests import Request @@ -10,9 +8,9 @@ def api(request: Request, perPage: int, curPage: int, - keywordList1: str = "", - keywordList2: str = "", - keywordList3: str = ""): + keyword1: str = "", + keyword2: str = "", + keyword3: str = ""): user_info = get_token_info(request.headers) curPage = curPage - 1 @@ -31,7 +29,7 @@ def api(request: Request, try: db = connect_db(config.db_info) - search_word_list = [keywordList1,keywordList2,keywordList3] + search_word_list = [keyword1, keyword2, keyword3] if any(search_word_list): order_condition = str() search_condition = "data_nm like '%{0}%'" From 8b665e9d05344c8a9c05a0d9cec6fe7322e4ebf2 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 29 Jun 2022 16:27:13 +0900 Subject: [PATCH 126/236] =?UTF-8?q?fix=20:=20log=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EA=B4=80=EB=A0=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 3 +- API-ROUTER/Utils/CommonUtil.py | 69 +++++++++++++++++++-------------- API-ROUTER/conf/logging.conf | 31 +++++++-------- API-ROUTER/server.py | 8 ++-- 4 files changed, 60 insertions(+), 51 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index c3d6a7b2..98df229f 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -77,7 +77,7 @@ def set_route(self) -> None: api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["ctgry"]})']) for api_name, api_info in config.api_config.items(): - module_path = f'{config.root_path}/API-ROUTER/ApiList/{api_info["sub_dir"]}/{api_name}.py' + module_path = f'{config.root_path}/ApiList/{api_info["sub_dir"]}/{api_name}.py' module_name = "api" spec = importlib.util.spec_from_file_location( module_name, module_path) @@ -175,6 +175,7 @@ def del_server_info(self, nm: str) -> Dict: return result def get_api_list(self) -> Dict: + # logger.error("TEST") try: db = connect_db(config.db_type, config.db_info) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index aa869f2a..0e74bf19 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -13,49 +13,58 @@ import sys import traceback +def set_log_path(): + parser = configparser.ConfigParser() + parser.read(f'{config.root_path}/conf/logging.conf', encoding='utf-8') -def get_config(root_path: str, config_name: str): + parser.set("handler_rotatingFileHandler", "args", + f"('{config.root_path}/log/API-Router.log', 'a', 20000000, 10)") + + with open(f'{config.root_path}/conf/logging.conf', 'w') as f: + parser.write(f) + +def get_config(config_name: str): ano_cfg = {} conf = configparser.ConfigParser() - conf.read(os.path.join(root_path, - f"API-ROUTER/conf/{config_name}"), encoding='utf-8') + config_path =config.root_path+f'/conf/{config_name}' + conf.read(config_path, encoding = 'utf-8') for section in conf.sections(): - ano_cfg[section] = {} + ano_cfg[section]={} for option in conf.options(section): - ano_cfg[section][option] = conf.get(section, option) + ano_cfg[section][option]=conf.get(section, option) return ano_cfg def parser_params() -> Any: - parser = argparse.ArgumentParser() - parser.add_argument("--host", type=str, default="127.0.0.1") - parser.add_argument("--port", type=int, default=18000) - parser.add_argument("--db_type", default="postgresql") + parser=argparse.ArgumentParser() + parser.add_argument("--host", type = str, default = "127.0.0.1") + parser.add_argument("--port", type = int, default = 18000) + parser.add_argument("--db_type", default = "postgresql") return parser.parse_args() def prepare_config() -> None: - args = parser_params() - config.root_path = Path(os.getcwd()).parent - api_router_cfg = get_config(config.root_path, "config.ini") - config.api_config = get_config(config.root_path, "api_config.ini") - config.db_type = args.db_type - config.server_host = args.host - config.server_port = args.port - config.db_info = api_router_cfg[config.db_type] - config.remote_info = api_router_cfg["remote"] - config.secret_info = api_router_cfg["secret_info"] - - -@retry(psycopg2.OperationalError, delay=1, tries=3) + args=parser_params() + config.root_path=str(Path(os.path.dirname(os.path.abspath(__file__))).parent) #Path(os.getcwd()).parent + api_router_cfg=get_config("config.ini") + config.api_config=get_config("api_config.ini") + config.db_type=args.db_type + config.server_host=args.host + config.server_port=args.port + config.db_info=api_router_cfg[config.db_type] + config.remote_info=api_router_cfg["remote"] + config.secret_info=api_router_cfg["secret_info"] + + +@ retry(psycopg2.OperationalError, delay = 1, tries = 3) def connect_db(db_type, db_info): if db_type == "postgresql": - db = PostgresManager(host=db_info["host"], port=db_info["port"], - user=db_info["user"], password=db_info["password"], - database=db_info["database"], schema=db_info["schema"]) + db=PostgresManager(host = db_info["host"], port = db_info["port"], + user = db_info["user"], password = db_info["password"], + database = db_info["database"], schema = db_info["schema"]) else: raise Exception(f'Not Implemented. ({db_type})') return db @@ -66,16 +75,16 @@ def save_file_for_reload(): fd.write(" ") -def make_res_msg(result, err_msg, data=None, column_names=None): - header_list = [] +def make_res_msg(result, err_msg, data = None, column_names = None): + header_list=[] for column_name in column_names: - header = {"column_name": column_name} + header={"column_name": column_name} header_list.append(header) if data is None or column_names is None: - res_msg = {"result": result, "errorMessage": err_msg} + res_msg={"result": result, "errorMessage": err_msg} else: - res_msg = {"result": result, "errorMessage": err_msg, + res_msg={"result": result, "errorMessage": err_msg, "body": data, "header": header_list} return res_msg diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf index 024db4ae..280ac233 100644 --- a/API-ROUTER/conf/logging.conf +++ b/API-ROUTER/conf/logging.conf @@ -1,31 +1,28 @@ [loggers] -keys=root +keys = root [logger_root] -level=DEBUG -handlers=console,rotatingFileHandler +level = DEBUG +handlers = console,rotatingFileHandler [formatters] -keys=default +keys = default [formatter_default] -format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s +format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s [handlers] -keys=console,rotatingFileHandler +keys = console,rotatingFileHandler [handler_console] -class=StreamHandler -args=(sys.stdout,) -formatter=default -level=DEBUG +class = StreamHandler +args = (sys.stdout,) +formatter = default +level = DEBUG [handler_rotatingFileHandler] -class=handlers.RotatingFileHandler -formatter=default -args=('log/API-Router.log', 'a', 20000000, 10) -level=DEBUG - - - +class = handlers.RotatingFileHandler +formatter = default +args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-ROUTER/log/API-Router.log', 'a', 20000000, 10) +level = DEBUG diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index ede64e80..ae726867 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -1,7 +1,7 @@ from fastapi import FastAPI import uvicorn from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import prepare_config +from Utils.CommonUtil import prepare_config, set_log_path from ApiRoute import ApiRoute import os @@ -11,11 +11,13 @@ app.include_router(api_router.router) if __name__ == '__main__': - log_dir = f'{config.root_path}/API-ROUTER/log' + log_dir = f'{config.root_path}/log' if os.path.isdir(log_dir): print(f"Directory Exists") else: print(f"Make log dir : {log_dir}") os.makedirs(log_dir) + + set_log_path() uvicorn.run("server:app", host=config.server_host, port=config.server_port, - reload=True, log_config=f'{config.root_path}/API-ROUTER/conf/logging.conf') + reload=True, log_config=f'{config.root_path}/conf/logging.conf') From f718d23979944ec5c4b2468aeff2a6a602e62664 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 30 Jun 2022 15:13:18 +0900 Subject: [PATCH 127/236] =?UTF-8?q?feat=20:=20log=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/Utils/CommonUtil.py | 2 +- API-SERVICE/ApiService/ApiService.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 27 +++++++++++++++++------- API-SERVICE/conf/meta/logging.conf | 30 +++++++++++++-------------- API-SERVICE/conf/sitemng/logging.conf | 30 +++++++++++++-------------- API-SERVICE/server.py | 8 ++++--- 6 files changed, 54 insertions(+), 45 deletions(-) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 0e74bf19..07b22780 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -48,7 +48,7 @@ def parser_params() -> Any: def prepare_config() -> None: args=parser_params() - config.root_path=str(Path(os.path.dirname(os.path.abspath(__file__))).parent) #Path(os.getcwd()).parent + config.root_path=str(Path(os.path.dirname(os.path.abspath(__file__))).parent) api_router_cfg=get_config("config.ini") config.api_config=get_config("api_config.ini") config.db_type=args.db_type diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index b73f7db4..f0d518cb 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -12,7 +12,7 @@ def __init__(self) -> None: def set_route(self) -> None: for api_name, api_info in config.api_config.items(): if config.category == api_info["sub_dir"]: - module_path = f'{config.root_path}/API-SERVICE/ApiList/{api_info["sub_dir"]}/{api_name}.py' + module_path = f'{config.root_path}/ApiList/{api_info["sub_dir"]}/{api_name}.py' module_name = "api" spec = importlib.util.spec_from_file_location( module_name, module_path) diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 1902b355..ffc226ca 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -12,12 +12,24 @@ import jwt -def get_config(root_path: str, config_name: str): +def set_log_path(): + parser = configparser.ConfigParser() + parser.read( + f'{config.root_path}/conf/{config.category}/logging.conf', encoding='utf-8') + + parser.set("handler_rotatingFileHandler", "args", + f"('{config.root_path}/log/{config.category}/{config.category}.log', 'a', 20000000, 10)") + + with open(f'{config.root_path}/conf/{config.category}/logging.conf', 'w') as f: + parser.write(f) + + +def get_config(config_name: str): ano_cfg = {} conf = configparser.ConfigParser() - conf.read(os.path.join(root_path, - f"API-SERVICE/conf/{config_name}"), encoding='utf-8') + config_path = config.root_path+f"/conf/{config.category}/{config_name}" + conf.read(config_path, encoding='utf-8') for section in conf.sections(): ano_cfg[section] = {} for option in conf.options(section): @@ -37,12 +49,11 @@ def parser_params() -> Any: def prepare_config() -> None: args = parser_params() - config.root_path = Path(os.getcwd()).parent - api_router_cfg = get_config( - config.root_path, f"{args.category}/config.ini") - config.api_config = get_config( - config.root_path, f"{args.category}/api_config.ini") + config.root_path = str( + Path(os.path.dirname(os.path.abspath(__file__))).parent) config.category = args.category + api_router_cfg = get_config("config.ini") + config.api_config = get_config("api_config.ini") config.server_host = args.host config.server_port = args.port config.db_info = api_router_cfg[config.category] diff --git a/API-SERVICE/conf/meta/logging.conf b/API-SERVICE/conf/meta/logging.conf index b1faa2c4..9eba35be 100644 --- a/API-SERVICE/conf/meta/logging.conf +++ b/API-SERVICE/conf/meta/logging.conf @@ -1,30 +1,28 @@ [loggers] -keys=root +keys = root [logger_root] -level=DEBUG -handlers=console,rotatingFileHandler +level = DEBUG +handlers = console,rotatingFileHandler [formatters] -keys=default +keys = default [formatter_default] -format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s +format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s [handlers] -keys=console,rotatingFileHandler +keys = console,rotatingFileHandler [handler_console] -class=StreamHandler -args=(sys.stdout,) -formatter=default -level=DEBUG +class = StreamHandler +args = (sys.stdout,) +formatter = default +level = DEBUG [handler_rotatingFileHandler] -class=handlers.RotatingFileHandler -formatter=default -args=('log/meta/meta.log', 'a', 20000000, 10) -level=DEBUG - - +class = handlers.RotatingFileHandler +formatter = default +args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/meta/meta.log', 'a', 20000000, 10) +level = DEBUG diff --git a/API-SERVICE/conf/sitemng/logging.conf b/API-SERVICE/conf/sitemng/logging.conf index fbcc4113..d1c14a83 100644 --- a/API-SERVICE/conf/sitemng/logging.conf +++ b/API-SERVICE/conf/sitemng/logging.conf @@ -1,30 +1,28 @@ [loggers] -keys=root +keys = root [logger_root] -level=DEBUG -handlers=console,rotatingFileHandler +level = DEBUG +handlers = console,rotatingFileHandler [formatters] -keys=default +keys = default [formatter_default] -format=%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s +format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s [handlers] -keys=console,rotatingFileHandler +keys = console,rotatingFileHandler [handler_console] -class=StreamHandler -args=(sys.stdout,) -formatter=default -level=DEBUG +class = StreamHandler +args = (sys.stdout,) +formatter = default +level = DEBUG [handler_rotatingFileHandler] -class=handlers.RotatingFileHandler -formatter=default -args=('log/sitemng/sitemng.log', 'a', 20000000, 10) -level=DEBUG - - +class = handlers.RotatingFileHandler +formatter = default +args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/sitemng/sitemng.log', 'a', 20000000, 10) +level = DEBUG diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 39d70ee6..265ead3a 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -1,7 +1,7 @@ from fastapi import FastAPI import uvicorn from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import prepare_config +from Utils.CommonUtil import prepare_config, set_log_path from ApiService import ApiService import os @@ -11,11 +11,13 @@ app.include_router(api_router.router) if __name__ == '__main__': - log_dir = f'{config.root_path}/API-SERVICE/log/{config.category}' + log_dir = f'{config.root_path}/log/{config.category}' if os.path.isdir(log_dir): print(f"Directory Exists") else: print(f"Make log dir : {log_dir}") os.makedirs(log_dir) + + set_log_path() uvicorn.run("server:app", host=config.server_host, port=config.server_port, - reload=True, log_config=f'{config.root_path}/API-SERVICE/conf/{config.category}/logging.conf') + reload=True, log_config=f'{config.root_path}/conf/{config.category}/logging.conf') From 4b0c2ed17c09f62c5010b1b8c1c8ee9540d5004f Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 4 Jul 2022 15:57:35 +0900 Subject: [PATCH 128/236] =?UTF-8?q?feat:=20getBizMetaList=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 2efdf9d9..62f28a06 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -59,15 +59,12 @@ def api(request: Request, result = {"result": 0, "errorMessage": err} logger.error(err) else: + body = {"totalcount": total_cnt[0][0]['cnt']} if len(meta_wrap[0]): - body = {"totalcount": total_cnt[0][0]['cnt']} body["searchList"] = [meta_data for meta_data in meta_wrap[0]] - - result = {"result":1,"errorMessage":"","data":body} - # result = make_res_msg(1,"",body,"") else: - body = {"totalcount": total_cnt[0][0]['cnt'], "searchList":meta_wrap[0]} - result = {"result":1,"errorMessage":"","data":body} - # result = make_res_msg(1,"",meta_wrap[0]) + body["searchList"] = meta_wrap[0] + + result = {"result":1,"errorMessage":"","data":body} return result From d834337d193ef6f628d1fd1d26230d9cca055189 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 4 Jul 2022 16:39:37 +0900 Subject: [PATCH 129/236] =?UTF-8?q?feat:=20getBizMetaList=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 62f28a06..aeab3889 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -59,12 +59,11 @@ def api(request: Request, result = {"result": 0, "errorMessage": err} logger.error(err) else: - body = {"totalcount": total_cnt[0][0]['cnt']} + search_list = [] if len(meta_wrap[0]): - body["searchList"] = [meta_data for meta_data in meta_wrap[0]] - else: - body["searchList"] = meta_wrap[0] + search_list = [meta_data for meta_data in meta_wrap[0]] - result = {"result":1,"errorMessage":"","data":body} + body = {"totalcount": total_cnt[0][0]['cnt'], "searchList": search_list} + result = {"result": 1, "errorMessage": "", "data": body} return result From e97e4d2e62f6fef90740bc7797d554543a3e89a2 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 5 Jul 2022 13:06:41 +0900 Subject: [PATCH 130/236] =?UTF-8?q?feat=20:=20getMetaDetailDq,=20Sample=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiList/meta/getBizMetaDetailDq.py | 23 ++++++++++++ .../ApiList/meta/getBizMetaDetailFiles.py | 24 +++++++++++++ .../ApiList/meta/getBizMetaDetailSample.py | 35 +++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 17 ++++++++- 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/meta/getBizMetaDetailDq.py create mode 100644 API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py create mode 100644 API-SERVICE/ApiList/meta/getBizMetaDetailSample.py diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py new file mode 100644 index 00000000..40039b4e --- /dev/null +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py @@ -0,0 +1,23 @@ +from fastapi.logger import logger +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, make_res_msg +from Utils.DataBaseUtil import convert_data +from starlette.requests import Request + + +def api(request: Request, datasetId: str = None) -> Dict: + v_meta_dq_query = f'SELECT * FROM tb_meta_detail_dq WHERE biz_dataset_id = {convert_data(datasetId)}' + + try: + db = connect_db(config.db_info) + meta_dq = db.select(v_meta_dq_query) + logger.error(meta_dq) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + + else: + result = make_res_msg(1, "", meta_dq[0], meta_dq[1]) + + return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py new file mode 100644 index 00000000..8a147c56 --- /dev/null +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py @@ -0,0 +1,24 @@ +from fastapi.logger import logger +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.DataBaseUtil import convert_data +from starlette.requests import Request + + +def api(request: Request, datasetId: str = None) -> Dict: + user_info = get_token_info(request.headers) + v_meta_files_query = f'SELECT * FROM tb_meta_detail_files WHERE biz_dataset_id = {convert_data(datasetId)}' + + try: + db = connect_db(config.db_info) + meta_files = db.select(v_meta_files_query) + logger.error(meta_files) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + + else: + result = make_res_msg(1, "", meta_files[0], meta_files[1]) + + return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py new file mode 100644 index 00000000..0fe1604a --- /dev/null +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py @@ -0,0 +1,35 @@ +from fastapi.logger import logger +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, make_res_msg +from Utils.DataBaseUtil import convert_data +from starlette.requests import Request +from io import StringIO +import csv + + +def csv_to_dict(sample_contents: str): + sample_contents = sample_contents.replace("\uFEFF", "") + data_list = [] + f_sample_contents = StringIO(sample_contents) + with f_sample_contents as f_csv: + csvReader = csv.DictReader(f_csv) + for row in csvReader: + data_list.append(row) + return data_list, data_list[0].keys() + + +def api(request: Request, datasetId: str = None) -> Dict: + v_meta_sample_query = f'SELECT * FROM tb_meta_detail_sampledata WHERE biz_dataset_id = {convert_data(datasetId)}' + + try: + db = connect_db(config.db_info) + meta_sample, _ = db.select(v_meta_sample_query) + data_list, column_list = csv_to_dict(meta_sample[0]["sample_contents"]) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = make_res_msg(1, "", data_list, column_list) + + return result diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 54ebee13..969a59bb 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -99,6 +99,21 @@ url = /portal/api/meta/insertBizMetaData sub_dir = meta [getCategoryTree] -method = POST +method = GET url = /portal/api/meta/getCategoryTree +sub_dir = meta + +[getBizMetaDetailDq] +method = GET +url = /portal/api/meta/getBizMetaDetailDq +sub_dir = meta + +[getBizMetaDetailFiles] +method = GET +url = /portal/api/meta/getBizMetaDetailFiles +sub_dir = meta + +[getBizMetaDetailSample] +method = GET +url = /portal/api/meta/getBizMetaDetailSample sub_dir = meta \ No newline at end of file From 05a7c809093b5b0cc8d8f555b6a2321aeeb6bb70 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 5 Jul 2022 13:50:23 +0900 Subject: [PATCH 131/236] =?UTF-8?q?fix=20:=20=EC=A0=95=EC=A0=81=EB=B6=84?= =?UTF-8?q?=EC=84=9D=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 12 ++++++------ API-ROUTER/ConnectManager/PostgresManager.py | 10 +++++----- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 4 ++-- API-ROUTER/conf/logging.conf | 6 +++--- API-SERVICE/ApiList/meta/insertMetaName.py | 6 +++--- API-SERVICE/ConnectManager/PostgresManager.py | 12 ++++++------ API-SERVICE/Utils/CommonUtil.py | 2 +- API-SERVICE/conf/meta/logging.conf | 6 +++--- API-SERVICE/conf/sitemng/logging.conf | 6 +++--- 10 files changed, 33 insertions(+), 33 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 98df229f..e45c2038 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -204,7 +204,7 @@ def get_api_category_list(self, ctgry: str) -> Dict: f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info WHERE ctgry = {convert_data(ctgry)} ORDER BY no;') for info in api_info: - logger.debug(f'INFO : {info["api_nm"]}') + logger.info(f'INFO : {info["api_nm"]}') api_params, params_column_names = db.select( f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(info["api_nm"])} ORDER BY nm;') if len(api_params) != 0: @@ -344,7 +344,7 @@ async def route_api(self, request: Request) -> Dict: logger.error(f"BEFORE : {dict(request.headers)}") headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) - logger.debug(f'Request Headers : {headers}') + logger.info(f'Request Headers : {headers}') user_info = get_token_info(request.headers) @@ -372,14 +372,14 @@ async def route_api(self, request: Request) -> Dict: api_info["msg_type"] = "BINARY" params_query = parse.unquote(str(request.query_params)) - logger.debug( + logger.info( f'Req - body : {body}, query params : {params_query}') api_info["meth"] = method - logger.debug(f'DB - api_info : {api_info}') - logger.debug(f'DB - api_params : {api_params}') + logger.info(f'DB - api_info : {api_info}') + logger.info(f'DB - api_params : {api_params}') - logger.debug( + logger.info( f'mode : {api_info["mode"]}, content_type : {content_type}') if api_info["mode"] == "MESSAGE PASSING": result = await bypass_msg(api_info, params_query, body, headers) diff --git a/API-ROUTER/ConnectManager/PostgresManager.py b/API-ROUTER/ConnectManager/PostgresManager.py index b7b6d861..ca14b5ba 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/PostgresManager.py @@ -19,7 +19,7 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - logger.debug("PostgresManager Connect.") + logger.info("PostgresManager Connect.") return conn def execute(self, sql: str) -> None: @@ -33,7 +33,7 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.debug(f'PostgresManager Select Execute. ({sql})') + logger.info(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: @@ -43,17 +43,17 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - logger.debug(f'PostgresManager Insert Execute. ({sql})') + logger.info(f'PostgresManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - logger.debug(f'PostgresManager Update Execute. ({sql})') + logger.info(f'PostgresManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - logger.debug(f'PostgresManager Delete Execute. ({sql})') + logger.info(f'PostgresManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 07b22780..4076ba6a 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -97,7 +97,7 @@ def get_token_info(headers: starlette.datastructures.Headers): config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) except Exception as err: logger.error(err) - logger.debug(f'User Info : {user_info}') + logger.info(f'User Info : {user_info}') return user_info diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index f6e5a026..58cfe4db 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -15,7 +15,7 @@ def make_url(server_name: str, url_path: str): netloc = server_info["domn_nm"] url = ParseResult( scheme="http", netloc=netloc, path=url_path, params="", query="", fragment="") - logger.debug(f"Message Passing Url : {url.geturl()}") + logger.info(f"Message Passing Url : {url.geturl()}") return url.geturl() return None @@ -55,7 +55,7 @@ async def run_cmd(cmd: str): async with asyncssh.connect(host=config.remote_info["host"], port=int(config.remote_info["port"]), username=config.remote_info["id"], password=config.remote_info["password"]) as conn: result = await conn.run(cmd, check=True) - logger.debug(f'Command Result : {result.stdout}') + logger.info(f'Command Result : {result.stdout}') return result.stdout diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf index 280ac233..814cd774 100644 --- a/API-ROUTER/conf/logging.conf +++ b/API-ROUTER/conf/logging.conf @@ -2,7 +2,7 @@ keys = root [logger_root] -level = DEBUG +level = INFO handlers = console,rotatingFileHandler [formatters] @@ -18,11 +18,11 @@ keys = console,rotatingFileHandler class = StreamHandler args = (sys.stdout,) formatter = default -level = DEBUG +level = INFO [handler_rotatingFileHandler] class = handlers.RotatingFileHandler formatter = default args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-ROUTER/log/API-Router.log', 'a', 20000000, 10) -level = DEBUG +level = INFO diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index f96109ef..76166b7e 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -21,7 +21,7 @@ def api(insert: InsertMetaName, request: Request) -> Dict: insert_meta_name = f'INSERT INTO tb_biz_meta_name (kor_nm, eng_nm, show_odrg, nm_id, type)\ VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm.lower())}, 0,\ {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' - symbol_list = list(map(str,string.punctuation)) + symbol_list = list(map(str, string.punctuation)) symbol_list.remove("_") symbol_list.remove("'") symbol_list.remove('"') @@ -30,7 +30,7 @@ def api(insert: InsertMetaName, request: Request) -> Dict: try: db = connect_db(config.db_info) eng_nm_list = db.select(select_eng_nm)[0] - logger.debug(eng_nm_list) + logger.info(eng_nm_list) # 중복 체크 if len(eng_nm_list): @@ -39,7 +39,7 @@ def api(insert: InsertMetaName, request: Request) -> Dict: raise ValueError # 특수문자 체크 - if list(filter(lambda eng_nm: eng_nm in symbol_list,insert.eng_nm)): + if list(filter(lambda eng_nm: eng_nm in symbol_list, insert.eng_nm)): raise ValueError db.execute(insert_meta_name) diff --git a/API-SERVICE/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index a344c84e..ba66e6b7 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -19,13 +19,13 @@ def connect(self): conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database, options=f"-c search_path={self.schema}") - logger.debug("PostgresManager Connect.") + logger.info("PostgresManager Connect.") return conn def execute(self, sql: str) -> None: self.cursor.execute(sql) self.conn.commit() - logger.debug(f'PostgresManager Execute Result. ({sql})') + logger.info(f'PostgresManager Execute Result. ({sql})') def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], List[Any]]: self.execute(sql) @@ -34,7 +34,7 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.debug(f'PostgresManager Select Execute. ({sql})') + logger.info(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: @@ -44,18 +44,18 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis def insert(self, table: str, into_info: List[Dict]) -> None: sql = make_insert_query(f"{self.schema}.{table}", into_info) self.execute(sql) - logger.debug(f'PostgresManager Insert Execute. ({sql})') + logger.info(f'PostgresManager Insert Execute. ({sql})') def update(self, table: str, set_info: Dict, where_info: Dict) -> None: sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) self.execute(sql) - logger.debug(f'PostgresManager Update Execute. ({sql})') + logger.info(f'PostgresManager Update Execute. ({sql})') def delete(self, table: str, where_info: Dict) -> None: sql = make_delete_query(f"{self.schema}.{table}", where_info) self.execute(sql) - logger.debug(f'PostgresManager Delete Execute. ({sql})') + logger.info(f'PostgresManager Delete Execute. ({sql})') def commit(self): self.conn.commit() diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index ffc226ca..fadf8fa6 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -97,5 +97,5 @@ def get_token_info(headers: starlette.datastructures.Headers): if config.secret_info["name"] in headers: user_info = jwt.decode(headers[config.secret_info["name"]], config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) - logger.debug(f'user info : {user_info}') + logger.info(f'user info : {user_info}') return user_info diff --git a/API-SERVICE/conf/meta/logging.conf b/API-SERVICE/conf/meta/logging.conf index 9eba35be..d0c28c96 100644 --- a/API-SERVICE/conf/meta/logging.conf +++ b/API-SERVICE/conf/meta/logging.conf @@ -2,7 +2,7 @@ keys = root [logger_root] -level = DEBUG +level = INFO handlers = console,rotatingFileHandler [formatters] @@ -18,11 +18,11 @@ keys = console,rotatingFileHandler class = StreamHandler args = (sys.stdout,) formatter = default -level = DEBUG +level = INFO [handler_rotatingFileHandler] class = handlers.RotatingFileHandler formatter = default args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/meta/meta.log', 'a', 20000000, 10) -level = DEBUG +level = INFO diff --git a/API-SERVICE/conf/sitemng/logging.conf b/API-SERVICE/conf/sitemng/logging.conf index d1c14a83..3dcefc49 100644 --- a/API-SERVICE/conf/sitemng/logging.conf +++ b/API-SERVICE/conf/sitemng/logging.conf @@ -2,7 +2,7 @@ keys = root [logger_root] -level = DEBUG +level = INFO handlers = console,rotatingFileHandler [formatters] @@ -18,11 +18,11 @@ keys = console,rotatingFileHandler class = StreamHandler args = (sys.stdout,) formatter = default -level = DEBUG +level = INFO [handler_rotatingFileHandler] class = handlers.RotatingFileHandler formatter = default args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/sitemng/sitemng.log', 'a', 20000000, 10) -level = DEBUG +level = INFO From 31ba8a56ba39eae748303d16b49536d444e95e42 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 5 Jul 2022 14:25:31 +0900 Subject: [PATCH 132/236] =?UTF-8?q?fix=20:=20=EC=A0=95=EC=A0=81=EB=B6=84?= =?UTF-8?q?=EC=84=9D=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetailSample.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py index 0fe1604a..317a4c50 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py @@ -12,10 +12,10 @@ def csv_to_dict(sample_contents: str): sample_contents = sample_contents.replace("\uFEFF", "") data_list = [] f_sample_contents = StringIO(sample_contents) - with f_sample_contents as f_csv: - csvReader = csv.DictReader(f_csv) - for row in csvReader: - data_list.append(row) + csvReader = csv.DictReader(f_sample_contents) + for row in csvReader: + data_list.append(row) + f_sample_contents.close() return data_list, data_list[0].keys() From d3272f5f0cbf5ffdbb41ddffa2787aea1b75326b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 5 Jul 2022 15:03:11 +0900 Subject: [PATCH 133/236] =?UTF-8?q?fix=20:=20=20=EC=A0=95=EC=A0=81?= =?UTF-8?q?=EB=B6=84=EC=84=9D=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaDetailSample.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py index 317a4c50..50192bf3 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py @@ -11,11 +11,12 @@ def csv_to_dict(sample_contents: str): sample_contents = sample_contents.replace("\uFEFF", "") data_list = [] - f_sample_contents = StringIO(sample_contents) - csvReader = csv.DictReader(f_sample_contents) - for row in csvReader: - data_list.append(row) - f_sample_contents.close() + #f_sample_contents = StringIO(sample_contents) + with StringIO(sample_contents) as f_sample_contents: + csvReader = csv.DictReader(f_sample_contents) + for row in csvReader: + data_list.append(row) + # f_sample_contents.close() return data_list, data_list[0].keys() From 4bb5e22a73aa60ad78aa6a8a3fd049a2fb1f1bae Mon Sep 17 00:00:00 2001 From: cbc <39294675+cbccbs@users.noreply.github.com> Date: Tue, 5 Jul 2022 15:53:28 +0900 Subject: [PATCH 134/236] =?UTF-8?q?feat:=20getBizMetaList=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 29 +++++++++------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index aeab3889..7a4650e0 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,4 +1,3 @@ -from lib2to3.pytree import convert from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_token_info, make_res_msg from fastapi.logger import logger @@ -31,29 +30,25 @@ def api(request: Request, db = connect_db(config.db_info) search_word_list = [keyword1, keyword2, keyword3] if any(search_word_list): - order_condition = str() - search_condition = "data_nm like '%{0}%'" - v_meta_wrap_query = v_meta_wrap_query + " WHERE " - total_cnt_query = total_cnt_query + " WHERE " + order_condition = [] + search_condition = [] - # 검색 조건 추가 for word in search_word_list: - order_condition = order_condition + f"data_nm similar to '%{word}%' and " - v_meta_wrap_query = v_meta_wrap_query + search_condition.format(word) + " and " - total_cnt_query = total_cnt_query + search_condition.format(word) + " and " + order_condition.append(f"data_nm similar to '%{word}%'") + search_condition.append(f"data_nm like '%{word}%'") - # 마지막 ' and ' 삭제 - v_meta_wrap_query = v_meta_wrap_query[:-5] - total_cnt_query = total_cnt_query[:-5] - v_meta_wrap_query = v_meta_wrap_query.format(order_condition[:-5] + " desc") + total_cnt_query = f'{total_cnt_query} WHERE {" and ".join(search_condition)}' + v_meta_wrap_query = f'{v_meta_wrap_query} WHERE {" and ".join(search_condition)}' + + v_meta_wrap_query = v_meta_wrap_query.format( + f'{" and ".join(order_condition)} desc') else: v_meta_wrap_query = v_meta_wrap_query.format("biz_dataset_id") - v_meta_wrap_query = v_meta_wrap_query + f" limit {perPage} offset ({perPage} * {curPage})" - meta_wrap = db.select(v_meta_wrap_query) + v_meta_wrap_query = f"{v_meta_wrap_query} limit {perPage} offset ({perPage} * {curPage})" + meta_wrap = db.select(v_meta_wrap_query) total_cnt = db.select(total_cnt_query) - # meta_map = db.select(v_biz_meta_query) except Exception as err: result = {"result": 0, "errorMessage": err} @@ -66,4 +61,4 @@ def api(request: Request, body = {"totalcount": total_cnt[0][0]['cnt'], "searchList": search_list} result = {"result": 1, "errorMessage": "", "data": body} - return result + return result \ No newline at end of file From 2a26fea6646911a3a600d92b64ad327aaaf2397e Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 6 Jul 2022 10:00:27 +0900 Subject: [PATCH 135/236] =?UTF-8?q?feat=20:=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 7 +-- .../ApiList/meta/deleteUseBoardData.py | 6 +-- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 8 ++- .../ApiList/meta/getBizMetaDetailDq.py | 3 +- .../ApiList/meta/getBizMetaDetailFiles.py | 6 +-- .../ApiList/meta/getBizMetaDetailSample.py | 5 +- API-SERVICE/ApiList/meta/getBizMetaList.py | 24 +++------ API-SERVICE/ApiList/meta/getCategoryList.py | 11 ++-- API-SERVICE/ApiList/meta/getCategoryTree.py | 9 +--- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 6 +-- .../ApiList/meta/getUseBoardDataDetail.py | 7 +-- .../ApiList/meta/getUseBoardDataList.py | 8 +-- API-SERVICE/ApiList/meta/insertBizMeta.py | 11 ++-- API-SERVICE/ApiList/meta/insertBizMetaData.py | 7 +-- API-SERVICE/ApiList/meta/insertMetaMap.py | 47 ++++++++--------- API-SERVICE/ApiList/meta/insertMetaName.py | 14 ++--- .../ApiList/meta/insertUseBoardData.py | 6 +-- API-SERVICE/ApiList/meta/metaMapList.py | 26 ++++------ API-SERVICE/ApiList/meta/metaNameList.py | 51 +++++++++---------- API-SERVICE/ApiList/meta/updateBizMeta.py | 7 +-- API-SERVICE/ApiList/meta/updateCategory.py | 7 +-- API-SERVICE/ApiList/meta/updateMetaName.py | 6 +-- .../ApiList/meta/updateUseBoardData.py | 7 +-- API-SERVICE/ApiList/meta/useMetaNameList.py | 40 +++++++-------- 24 files changed, 120 insertions(+), 209 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 9183363a..425d1cb8 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -1,11 +1,10 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from fastapi.logger import logger -from starlette.requests import Request class addChildCategory(BaseModel): @@ -14,9 +13,7 @@ class addChildCategory(BaseModel): # todo: 수정 필요 -def api(insert: addChildCategory, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(insert: addChildCategory) -> Dict: query = f'INSERT INTO tb_category (node_nm, prnts_id, node_id)\ VALUES ({convert_data(insert.node_nm)},{convert_data(insert.prnts_id)},{convert_data(uuid.uuid4())});' diff --git a/API-SERVICE/ApiList/meta/deleteUseBoardData.py b/API-SERVICE/ApiList/meta/deleteUseBoardData.py index 1250642f..be20fb01 100644 --- a/API-SERVICE/ApiList/meta/deleteUseBoardData.py +++ b/API-SERVICE/ApiList/meta/deleteUseBoardData.py @@ -1,18 +1,16 @@ from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from starlette.requests import Request class deleteUseBoardData(BaseModel): use_dataset_id: str -def api(use_board_data: deleteUseBoardData, request: Request) -> Dict: - user_info = get_token_info(request.headers) +def api(use_board_data: deleteUseBoardData) -> Dict: delete_biz_meta_query = f'DELETE FROM tb_board_use WHERE use_dataset_id = {convert_data(use_board_data.use_dataset_id)};' try: diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 8a5a15d6..3f0a7421 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,13 +1,11 @@ from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from Utils.DataBaseUtil import convert_data -from starlette.requests import Request -def api(request: Request, datasetId: str = None) -> Dict: - user_info = get_token_info(request.headers) +def api(datasetId: str = None) -> Dict: v_meta_map_query = 'SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta' v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' @@ -23,6 +21,6 @@ def api(request: Request, datasetId: str = None) -> Dict: else: kor_nm_list = [map_data["kor_nm"] for map_data in meta_map[0]] eng_nm_list = [map_data["eng_nm"] for map_data in meta_map[0]] - result = make_res_msg(1,"",meta_wrap[0][0],eng_nm_list,kor_nm_list) + result = make_res_msg(1, "", meta_wrap[0][0], eng_nm_list, kor_nm_list) return result diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py index 40039b4e..f577e2bc 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py @@ -3,10 +3,9 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg from Utils.DataBaseUtil import convert_data -from starlette.requests import Request -def api(request: Request, datasetId: str = None) -> Dict: +def api(datasetId: str = None) -> Dict: v_meta_dq_query = f'SELECT * FROM tb_meta_detail_dq WHERE biz_dataset_id = {convert_data(datasetId)}' try: diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py index 8a147c56..5a59e2ed 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py @@ -1,13 +1,11 @@ from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from Utils.DataBaseUtil import convert_data -from starlette.requests import Request -def api(request: Request, datasetId: str = None) -> Dict: - user_info = get_token_info(request.headers) +def api(datasetId: str = None) -> Dict: v_meta_files_query = f'SELECT * FROM tb_meta_detail_files WHERE biz_dataset_id = {convert_data(datasetId)}' try: diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py index 50192bf3..b7e9761c 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py @@ -3,7 +3,6 @@ from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg from Utils.DataBaseUtil import convert_data -from starlette.requests import Request from io import StringIO import csv @@ -11,16 +10,14 @@ def csv_to_dict(sample_contents: str): sample_contents = sample_contents.replace("\uFEFF", "") data_list = [] - #f_sample_contents = StringIO(sample_contents) with StringIO(sample_contents) as f_sample_contents: csvReader = csv.DictReader(f_sample_contents) for row in csvReader: data_list.append(row) - # f_sample_contents.close() return data_list, data_list[0].keys() -def api(request: Request, datasetId: str = None) -> Dict: +def api(datasetId: str = None) -> Dict: v_meta_sample_query = f'SELECT * FROM tb_meta_detail_sampledata WHERE biz_dataset_id = {convert_data(datasetId)}' try: diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 7a4650e0..32fa61bd 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,30 +1,17 @@ from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from fastapi.logger import logger -from starlette.requests import Request -def api(request: Request, - perPage: int, +def api(perPage: int, curPage: int, keyword1: str = "", keyword2: str = "", keyword3: str = ""): - user_info = get_token_info(request.headers) curPage = curPage - 1 - v_biz_meta_query = "SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta" total_cnt_query = "SELECT count(*) as cnt FROM v_biz_meta_wrap" - v_meta_wrap_query = """ - select - *, - row_number () over ( - order by - {0} - ) as rowNo - from - v_biz_meta_wrap - """ + v_meta_wrap_query = "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM v_biz_meta_wrap" try: db = connect_db(config.db_info) @@ -58,7 +45,8 @@ def api(request: Request, if len(meta_wrap[0]): search_list = [meta_data for meta_data in meta_wrap[0]] - body = {"totalcount": total_cnt[0][0]['cnt'], "searchList": search_list} + body = {"totalcount": total_cnt[0][0] + ['cnt'], "searchList": search_list} result = {"result": 1, "errorMessage": "", "data": body} - return result \ No newline at end of file + return result diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 8337eb7c..16d214b6 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -1,16 +1,11 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from fastapi.logger import logger -from starlette.requests import Request -def api(request: Request) -> Dict: - user_info = get_token_info(request.headers) - - category_query = 'select * \ - from tb_category \ - order by prnts_id, node_id;' +def api() -> Dict: + category_query = 'SELECT * FROM tb_category ORDER BY prnts_id, node_id;' try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/getCategoryTree.py b/API-SERVICE/ApiList/meta/getCategoryTree.py index 54645ff2..186fa028 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -1,15 +1,10 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel +from Utils.CommonUtil import connect_db, make_res_msg from fastapi.logger import logger -from starlette.requests import Request -def api(request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api() -> Dict: get_category_list = "SELECT * FROM tb_category;" try: diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 16506e2c..92498877 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -1,13 +1,11 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from Utils.DataBaseUtil import convert_data from fastapi.logger import logger -from starlette.requests import Request -def api(request: Request, nameId: str = None) -> Dict: - user_info = get_token_info(request.headers) +def api(nameId: str = None) -> Dict: if nameId is None: query = f"SELECT * FROM v_biz_meta_name" else: diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py index 554e1bc2..bc93f5f7 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -1,14 +1,11 @@ from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from Utils.DataBaseUtil import convert_data -from starlette.requests import Request -def api(apyr: str, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(apyr: str) -> Dict: get_use_data_query = f'SELECT * FROM tb_board_use WHERE apyr = {convert_data(apyr)};' get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py index 13de4e88..5e9b8ab2 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -1,13 +1,10 @@ from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg -from starlette.requests import Request +from Utils.CommonUtil import connect_db, make_res_msg -def api(request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api() -> Dict: get_use_data_query = f'SELECT * FROM tb_board_use;' get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" @@ -15,7 +12,6 @@ def api(request: Request) -> Dict: try: db = connect_db(config.db_info) use_data, _ = db.select(get_use_data_query) - logger.error(f'USE DATA : {use_data}') except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index ef79262f..bbaefe4e 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -1,17 +1,14 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from fastapi.logger import logger -from starlette.requests import Request -def api(biz_meta_list: list, request: Request) -> Dict: +def api(biz_meta_list: list) -> Dict: # todo: 수정 필요 (insertMetaMap에서 item_id부여 후 web에서 맞춘다음에 api로 넘겨줘야함) # item_id를 web에서 넘겨 받아야 하는 형태 - user_info = get_token_info(request.headers) - uid = uuid.uuid4() biz_meta_query = 'SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;' @@ -19,8 +16,8 @@ def api(biz_meta_list: list, request: Request) -> Dict: db = connect_db(config.db_info) for biz_meta in biz_meta_list: item_id, item_val = tuple(biz_meta.values()) - query = 'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val )' + \ - f'VALUES ({convert_data(uid)},{convert_data(item_id)},{convert_data(item_val)});' + query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val ) \ + VALUES ({convert_data(uid)},{convert_data(item_id)},{convert_data(item_val)});' db.execute(query) diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py index 3cb28bb2..3c5aabe4 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -1,10 +1,9 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from fastapi.logger import logger -from starlette.requests import Request from pydantic import BaseModel @@ -32,9 +31,7 @@ class insertBizMetaData(BaseModel): data_desc: str -def api(biz_meta_data: insertBizMetaData, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(biz_meta_data: insertBizMetaData) -> Dict: uid = uuid.uuid4() get_column_info = 'SELECT item_id, eng_nm FROM v_biz_meta;' diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index f7c82ed6..f6811443 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -18,31 +18,26 @@ def api(insert: NmIdList, request: Request) -> Dict: view_col = ['biz_dataset_id'] drop_view_wrap_query = "DROP VIEW IF EXISTS v_biz_meta_wrap" drop_view_meta_query = "DROP VIEW IF EXISTS v_biz_meta" - create_view_meta_query = """ - CREATE OR REPLACE VIEW v_biz_meta - AS SELECT tbmm.nm_id AS nm_id, - tbmn.kor_nm AS kor_nm, - tbmn.eng_nm AS eng_nm, - tbmm.item_id as item_id - FROM tb_biz_meta_map tbmm - INNER JOIN tb_biz_meta_name tbmn ON tbmm.nm_id = tbmn.nm_id; - """ + create_view_meta_query = "CREATE OR REPLACE VIEW v_biz_meta \ + AS SELECT tbmm.nm_id AS nm_id, \ + tbmn.kor_nm AS kor_nm, \ + tbmn.eng_nm AS eng_nm, \ + tbmm.item_id as item_id \ + FROM tb_biz_meta_map tbmm \ + INNER JOIN tb_biz_meta_name tbmn ON tbmm.nm_id = tbmn.nm_id;" delete_map_query = 'DELETE FROM tb_biz_meta_map WHERE nm_id = {0}' - map_insert_query = 'INSERT INTO tb_biz_meta_map (item_id, nm_id) VALUES ({0}, {1});' meta_map_query = "SELECT * FROM tb_biz_meta_map" nm_id_query = 'SELECT nm_id FROM tb_biz_meta_map' - map_item_query = """ - select distinct - meta_map.item_id, - tbmn.eng_nm - from - tb_biz_meta_name tbmn - left join tb_biz_meta_map meta_map on - tbmn.nm_id = meta_map.nm_id - where item_id IS NOT NULL - """ + map_item_query = "SELECT distinct \ + meta_map.item_id,\ + tbmn.eng_nm\ + FROM\ + tb_biz_meta_name tbmn\ + LEFT JOIN tb_biz_meta_map meta_map ON\ + tbmn.nm_id = meta_map.nm_id\ + WHERE item_id IS NOT NULL" try: db = connect_db(config.db_info) @@ -71,13 +66,11 @@ def api(insert: NmIdList, request: Request) -> Dict: view_col.append(col_format) view_col = ',\n'.join(view_col) - ddl_dataset_id = f""" - create view v_biz_meta_wrap as - select - {view_col} - from tb_biz_meta - group by biz_dataset_id - """ + ddl_dataset_id = f"CREATE VIEW v_biz_meta_wrap AS\ + SELECT\ + {view_col}\ + FROM tb_biz_meta\ + GROUP BY biz_dataset_id" db.execute(ddl_dataset_id) db.execute(create_view_meta_query) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index 76166b7e..bae04f8b 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -3,10 +3,9 @@ from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel, Field -from starlette.requests import Request class InsertMetaName(BaseModel): @@ -15,12 +14,10 @@ class InsertMetaName(BaseModel): TYPE: int = Field(alias="type") -def api(insert: InsertMetaName, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(insert: InsertMetaName) -> Dict: insert_meta_name = f'INSERT INTO tb_biz_meta_name (kor_nm, eng_nm, show_odrg, nm_id, type)\ - VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm.lower())}, 0,\ - {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' + VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm.lower())}, 0,\ + {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' symbol_list = list(map(str, string.punctuation)) symbol_list.remove("_") symbol_list.remove("'") @@ -46,9 +43,6 @@ def api(insert: InsertMetaName, request: Request) -> Dict: except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) - except ValueError as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) else: result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index 660536cb..826246a9 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -2,10 +2,9 @@ import uuid from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from starlette.requests import Request from datetime import datetime, timedelta @@ -15,8 +14,7 @@ class insertUseBoardData(BaseModel): apy_sbst: str -def api(use_board_data: insertUseBoardData, request: Request) -> Dict: - user_info = get_token_info(request.headers) +def api(use_board_data: insertUseBoardData) -> Dict: get_biz_meta_query = f'SELECT * FROM v_biz_meta_wrap \ WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index 2a230979..0f4a4ec8 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -1,24 +1,20 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from fastapi.logger import logger from starlette.requests import Request -def api(request: Request) -> Dict: - user_info = get_token_info(request.headers) - - meta_map_query = """ - select - tbmn.kor_nm, - tbmn.eng_nm, - tbmm.item_id, - tbmm.nm_id - from - tb_biz_meta_name as tbmn - join tb_biz_meta_map as tbmm - on tbmm.nm_id = tbmn.nm_id; - """ +def api() -> Dict: + meta_map_query = "SELECT\ + tbmn.kor_nm,\ + tbmn.eng_nm,\ + tbmm.item_id,\ + tbmm.nm_id\ + FROM\ + tb_biz_meta_name AS tbmn\ + JOIN tb_biz_meta_map AS tbmm\ + ON tbmm.nm_id = tbmn.nm_id;" try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index 8a2ec576..f7ae709e 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -1,37 +1,32 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from fastapi.logger import logger -from starlette.requests import Request -def api(perPage: int, curPage: int, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(perPage: int, curPage: int) -> Dict: curPage = curPage - 1 - meta_name_query = f""" - select - p.* - from tb_biz_meta_name as p - join ( - SELECT kor_nm, - eng_nm, - show_odrg, - nm_id, - (case - when type = 0 then 'text' - when type = 1 then 'int' - when type = 2 then 'binary' - end - ) as type, - ROW_NUMBER () OVER (ORDER BY nm_id DESC) as rowNo - FROM tb_biz_meta_name - order by nm_id - limit {perPage} - offset ({perPage} * {curPage}) - ) as t on p.nm_id = t.nm_id - """ - total_cnt_query = "SELECT count(*) as totalCount FROM tb_biz_meta_name" + meta_name_query = f"SELECT\ + p.*\ + FROM tb_biz_meta_name AS p\ + JOIN (\ + SELECT kor_nm,\ + eng_nm,\ + show_odrg,\ + nm_id,\ + (CASE\ + WHEN type = 0 THEN 'text'\ + WHEN type = 1 THEN 'int'\ + WHEN type = 2 THEN 'binary'\ + END\ + ) AS type,\ + ROW_NUMBER () OVER (ORDER BY nm_id DESC) AS rowNo\ + FROM tb_biz_meta_name\ + ORDER BY nm_id\ + LIMIT {perPage}\ + OFFSET ({perPage} * {curPage})\ + ) AS t ON p.nm_id = t.nm_id" + total_cnt_query = "SELECT count(*) AS totalCount FROM tb_biz_meta_name" try: db = connect_db(config.db_info) diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index fbaeb284..c84bbb19 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -1,10 +1,9 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from fastapi.logger import logger -from starlette.requests import Request class UpdateBizMeta(BaseModel): @@ -12,9 +11,7 @@ class UpdateBizMeta(BaseModel): dataList: list -def api(update: UpdateBizMeta, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(update: UpdateBizMeta) -> Dict: try: db = connect_db(config.db_info) for data in update.dataList: diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 74bfb129..03fd6c03 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,11 +1,10 @@ import uuid from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from fastapi.logger import logger from typing import Dict -from starlette.requests import Request class UpdateCategory(BaseModel): @@ -14,9 +13,7 @@ class UpdateCategory(BaseModel): # todo: 수정 필요 -def api(update: UpdateCategory, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(update: UpdateCategory) -> Dict: query = f'UPDATE tb_category\ SET prnts_id = {convert_data(uuid.uuid4())},\ node_id = {convert_data(update.node_id)},\ diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index ecd7737a..e4d9a606 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -1,6 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel, Field from fastapi.logger import logger @@ -15,9 +15,7 @@ class UpdatetMetaName(BaseModel): TYPE: int = Field(alias="type") -def api(update: UpdatetMetaName, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(update: UpdatetMetaName) -> Dict: query = f'UPDATE tb_biz_meta_name\ SET kor_nm = {convert_data(update.kor_nm)},\ eng_nm = {convert_data(update.eng_nm)},\ diff --git a/API-SERVICE/ApiList/meta/updateUseBoardData.py b/API-SERVICE/ApiList/meta/updateUseBoardData.py index 1da73228..0677ea33 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -1,11 +1,9 @@ from typing import Dict -import uuid from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from starlette.requests import Request from datetime import datetime, timedelta @@ -16,8 +14,7 @@ class updateUseBoardData(BaseModel): apy_sbst: str -def api(use_board_data: updateUseBoardData, request: Request) -> Dict: - user_info = get_token_info(request.headers) +def api(use_board_data: updateUseBoardData) -> Dict: get_biz_meta_query = f'SELECT * FROM v_biz_meta_wrap \ WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 53cb8bf6..f329f483 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -1,30 +1,26 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg from fastapi.logger import logger -from starlette.requests import Request -def api(request: Request) -> Dict: - user_info = get_token_info(request.headers) - - meta_name_query = """ - select - case - when (select tbmm.nm_id from tb_biz_meta_map tbmm where tbmn.nm_id = tbmm.nm_id) is null then 0 - else 1 - end as use_meta, - tbmn.kor_nm, - tbmn.eng_nm, - tbmn.show_odrg, - case - when tbmn.type = 0 then 'text' - when tbmn.type = 1 then 'int' - when tbmn.type = 2 then 'binary' - end as type, - tbmn.nm_id - from tb_biz_meta_name tbmn - order by tbmn.nm_id;""" +def api() -> Dict: + meta_name_query = "SELECT\ + CASE\ + WHEN(SELECT tbmm.nm_id FROM tb_biz_meta_map tbmm WHERE tbmn.nm_id=tbmm.nm_id) IS NULL THEN 0\ + ELSE 1\ + END AS use_meta,\ + tbmn.kor_nm,\ + tbmn.eng_nm,\ + tbmn.show_odrg,\ + CASE\ + WHEN tbmn.type = 0 THEN 'text'\ + WHEN tbmn.type = 1 THEN 'int'\ + WHEN tbmn.type = 2 THEN 'binary'\ + END AS type,\ + tbmn.nm_id\ + FROM tb_biz_meta_name tbmn\ + ORDER BY tbmn.nm_id;" try: db = connect_db(config.db_info) From f01cbcea405411746f04994083595561a5bfc2ce Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 6 Jul 2022 10:41:35 +0900 Subject: [PATCH 136/236] =?UTF-8?q?feat=20:=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/sitemng/getCodeGroupId.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py index ea9462a7..2791bed0 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -1,18 +1,14 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db from fastapi.logger import logger -from starlette.requests import Request from Utils.DataBaseUtil import convert_data -def api(groupId, request: Request) -> Dict: - user_info = get_token_info(request.headers) - - get_code_info_query = f'select code_id, code_nm \ - from tb_code_detail \ - where code_group_id = {convert_data(groupId)};' - +def api(groupId) -> Dict: + get_code_info_query = f'SELECT code_id, code_nm \ + FROM tb_code_detail \ + WHERE code_group_id = {convert_data(groupId)};' try: db = connect_db(config.db_info) code_info = db.select(get_code_info_query) From 7bdcc02cba36e12c24a77b4d56ba179c2358813f Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 6 Jul 2022 13:29:20 +0900 Subject: [PATCH 137/236] =?UTF-8?q?feat=20:=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/addChildCategory.py | 9 ++++----- API-SERVICE/ApiList/meta/deleteUseBoardData.py | 9 ++++----- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 10 ++++------ API-SERVICE/ApiList/meta/getBizMetaDetailDq.py | 11 ++++------- API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py | 11 ++++------- API-SERVICE/ApiList/meta/getBizMetaDetailSample.py | 9 ++++----- API-SERVICE/ApiList/meta/getBizMetaList.py | 9 ++++----- API-SERVICE/ApiList/meta/getCategoryList.py | 9 ++++----- API-SERVICE/ApiList/meta/getCategoryTree.py | 9 ++++----- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 9 ++++----- API-SERVICE/ApiList/meta/getUseBoardDataDetail.py | 9 ++++----- API-SERVICE/ApiList/meta/getUseBoardDataList.py | 9 ++++----- API-SERVICE/ApiList/meta/insertBizMeta.py | 9 ++++----- API-SERVICE/ApiList/meta/insertBizMetaData.py | 9 ++++----- API-SERVICE/ApiList/meta/insertMetaMap.py | 14 +++++--------- API-SERVICE/ApiList/meta/insertMetaName.py | 10 ++++------ API-SERVICE/ApiList/meta/insertUseBoardData.py | 8 ++++---- API-SERVICE/ApiList/meta/metaMapList.py | 10 ++++------ API-SERVICE/ApiList/meta/metaNameList.py | 9 ++++----- API-SERVICE/ApiList/meta/updateBizMeta.py | 9 ++++----- API-SERVICE/ApiList/meta/updateCategory.py | 9 ++++----- API-SERVICE/ApiList/meta/updateMetaName.py | 10 ++++------ API-SERVICE/ApiList/meta/updateUseBoardData.py | 9 ++++----- API-SERVICE/ApiList/meta/useMetaNameList.py | 9 ++++----- API-SERVICE/ApiList/sitemng/getCodeGroupId.py | 9 ++++----- API-SERVICE/ConnectManager/PostgresManager.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 12 ++++++++++++ 27 files changed, 114 insertions(+), 137 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 425d1cb8..c68b4019 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -1,10 +1,9 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from fastapi.logger import logger class addChildCategory(BaseModel): @@ -20,9 +19,9 @@ def api(insert: addChildCategory) -> Dict: try: db = connect_db(config.db_info) db.execute(query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/deleteUseBoardData.py b/API-SERVICE/ApiList/meta/deleteUseBoardData.py index be20fb01..88719ec8 100644 --- a/API-SERVICE/ApiList/meta/deleteUseBoardData.py +++ b/API-SERVICE/ApiList/meta/deleteUseBoardData.py @@ -1,7 +1,6 @@ from typing import Dict -from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -16,9 +15,9 @@ def api(use_board_data: deleteUseBoardData) -> Dict: try: db = connect_db(config.db_info) db.execute(delete_biz_meta_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index 3f0a7421..c3f4f48a 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,7 +1,6 @@ -from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -14,10 +13,9 @@ def api(datasetId: str = None) -> Dict: meta_wrap = db.select(v_meta_wrap_query) meta_map = db.select(v_meta_map_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) - + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: kor_nm_list = [map_data["kor_nm"] for map_data in meta_map[0]] eng_nm_list = [map_data["eng_nm"] for map_data in meta_map[0]] diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py index f577e2bc..82389597 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py @@ -1,7 +1,6 @@ -from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -11,11 +10,9 @@ def api(datasetId: str = None) -> Dict: try: db = connect_db(config.db_info) meta_dq = db.select(v_meta_dq_query) - logger.error(meta_dq) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) - + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = make_res_msg(1, "", meta_dq[0], meta_dq[1]) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py index 5a59e2ed..e0045d0b 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py @@ -1,7 +1,6 @@ -from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -11,11 +10,9 @@ def api(datasetId: str = None) -> Dict: try: db = connect_db(config.db_info) meta_files = db.select(v_meta_files_query) - logger.error(meta_files) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) - + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = make_res_msg(1, "", meta_files[0], meta_files[1]) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py index b7e9761c..db33bd08 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py @@ -1,7 +1,6 @@ -from fastapi.logger import logger from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data from io import StringIO import csv @@ -24,9 +23,9 @@ def api(datasetId: str = None) -> Dict: db = connect_db(config.db_info) meta_sample, _ = db.select(v_meta_sample_query) data_list, column_list = csv_to_dict(meta_sample[0]["sample_contents"]) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = make_res_msg(1, "", data_list, column_list) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 32fa61bd..76eb660c 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,6 +1,5 @@ from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg -from fastapi.logger import logger +from Utils.CommonUtil import connect_db, get_exception_info def api(perPage: int, @@ -37,9 +36,9 @@ def api(perPage: int, meta_wrap = db.select(v_meta_wrap_query) total_cnt = db.select(total_cnt_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: search_list = [] if len(meta_wrap[0]): diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index 16d214b6..a9f20ff2 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -1,7 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db -from fastapi.logger import logger +from Utils.CommonUtil import connect_db, get_exception_info def api() -> Dict: @@ -10,9 +9,9 @@ def api() -> Dict: try: db = connect_db(config.db_info) category_list = db.select(category_query)[0] - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": "", "data": category_list} return result diff --git a/API-SERVICE/ApiList/meta/getCategoryTree.py b/API-SERVICE/ApiList/meta/getCategoryTree.py index 186fa028..8ed0e87c 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -1,7 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg -from fastapi.logger import logger +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info def api() -> Dict: @@ -33,9 +32,9 @@ def api() -> Dict: if main_category == "ROOT": continue result_category[main_category] = sub_category - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = make_res_msg(1, "", result_category, []) diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 92498877..9002a118 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -1,8 +1,7 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data -from fastapi.logger import logger def api(nameId: str = None) -> Dict: @@ -14,9 +13,9 @@ def api(nameId: str = None) -> Dict: try: db = connect_db(config.db_info) meta_name = db.select(query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: if nameId is None: result = make_res_msg(1, "", {}, "") diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py index bc93f5f7..548bb165 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -1,7 +1,6 @@ from typing import Dict -from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -13,9 +12,9 @@ def api(apyr: str) -> Dict: try: db = connect_db(config.db_info) use_data, _ = db.select(get_use_data_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: column_info, _ = db.select(get_column_info) kor_nm_list = [map_data["kor_nm"] for map_data in column_info] diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py index 5e9b8ab2..cde092e2 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -1,7 +1,6 @@ from typing import Dict -from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info def api() -> Dict: @@ -12,9 +11,9 @@ def api() -> Dict: try: db = connect_db(config.db_info) use_data, _ = db.select(get_use_data_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: column_info, _ = db.select(get_column_info) kor_nm_list = [map_data["kor_nm"] for map_data in column_info] diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index bbaefe4e..ca0c2248 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -1,9 +1,8 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data -from fastapi.logger import logger def api(biz_meta_list: list) -> Dict: @@ -22,9 +21,9 @@ def api(biz_meta_list: list) -> Dict: db.execute(query) biz_meta_list = db.select(biz_meta_query)[0] - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = biz_meta_list return result diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py index 3c5aabe4..9fbb21ba 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -1,9 +1,8 @@ import uuid from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data -from fastapi.logger import logger from pydantic import BaseModel @@ -48,9 +47,9 @@ def api(biz_meta_data: insertBizMetaData) -> Dict: insert_meta_query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val) \ VALUES {",".join(insert_values)};' db.execute(insert_meta_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index f6811443..91e32662 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -1,10 +1,8 @@ import uuid from typing import Dict from pydantic import BaseModel -from fastapi.logger import logger -from starlette.requests import Request from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data @@ -12,9 +10,7 @@ class NmIdList(BaseModel): nm_id_list: list -def api(insert: NmIdList, request: Request) -> Dict: - user_info = get_token_info(request.headers) - +def api(insert: NmIdList) -> Dict: view_col = ['biz_dataset_id'] drop_view_wrap_query = "DROP VIEW IF EXISTS v_biz_meta_wrap" drop_view_meta_query = "DROP VIEW IF EXISTS v_biz_meta" @@ -77,9 +73,9 @@ def api(insert: NmIdList, request: Request) -> Dict: # return data meta_map_list = db.select(meta_map_query)[0] - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = meta_map_list return result diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index bae04f8b..e8768ec2 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -1,9 +1,8 @@ import uuid import string from typing import Dict -from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel, Field @@ -27,7 +26,6 @@ def api(insert: InsertMetaName) -> Dict: try: db = connect_db(config.db_info) eng_nm_list = db.select(select_eng_nm)[0] - logger.info(eng_nm_list) # 중복 체크 if len(eng_nm_list): @@ -40,9 +38,9 @@ def api(insert: InsertMetaName) -> Dict: raise ValueError db.execute(insert_meta_name) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index 826246a9..c4b321a5 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -2,7 +2,7 @@ import uuid from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from datetime import datetime, timedelta @@ -45,9 +45,9 @@ def api(use_board_data: insertUseBoardData) -> Dict: {convert_data(apy_sbst)} \ );' db.execute(insert_use_data_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index 0f4a4ec8..aae6071f 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -1,8 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg -from fastapi.logger import logger -from starlette.requests import Request +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info def api() -> Dict: @@ -19,9 +17,9 @@ def api() -> Dict: try: db = connect_db(config.db_info) meta_map = db.select(meta_map_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = make_res_msg(1, "", meta_map[0], meta_map[1]) return result diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index f7ae709e..a2ec41b4 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -1,7 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg -from fastapi.logger import logger +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info def api(perPage: int, curPage: int) -> Dict: @@ -32,9 +31,9 @@ def api(perPage: int, curPage: int) -> Dict: db = connect_db(config.db_info) meta_name = db.select(meta_name_query) total_cnt = db.select(total_cnt_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = make_res_msg(1, "", meta_name[0], meta_name[1]) result["data"].update(total_cnt[0][0]) diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index c84bbb19..d094b99d 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -1,9 +1,8 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from fastapi.logger import logger class UpdateBizMeta(BaseModel): @@ -22,9 +21,9 @@ def api(update: UpdateBizMeta) -> Dict: item_id = {convert_data(data["itemId"])};' db.execute(query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 03fd6c03..d6241e56 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,9 +1,8 @@ import uuid from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from fastapi.logger import logger from typing import Dict @@ -22,9 +21,9 @@ def api(update: UpdateCategory) -> Dict: try: db = connect_db(config.db_info) db.execute(query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index e4d9a606..fa0f7bdd 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -1,10 +1,8 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel, Field -from fastapi.logger import logger -from starlette.requests import Request class UpdatetMetaName(BaseModel): @@ -26,9 +24,9 @@ def api(update: UpdatetMetaName) -> Dict: try: db = connect_db(config.db_info) db.execute(query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} return result diff --git a/API-SERVICE/ApiList/meta/updateUseBoardData.py b/API-SERVICE/ApiList/meta/updateUseBoardData.py index 0677ea33..028ec1b9 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -1,7 +1,6 @@ from typing import Dict -from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from datetime import datetime, timedelta @@ -42,9 +41,9 @@ def api(use_board_data: updateUseBoardData) -> Dict: WHERE use_dataset_id = {convert_data(use_board_data.use_dataset_id)};' db.execute(update_use_data_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index f329f483..938b9e94 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -1,7 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg -from fastapi.logger import logger +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info def api() -> Dict: @@ -25,9 +24,9 @@ def api() -> Dict: try: db = connect_db(config.db_info) meta_name = db.select(meta_name_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = make_res_msg(1, "", meta_name[0], meta_name[1]) return result diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py index 2791bed0..61395481 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -1,7 +1,6 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db -from fastapi.logger import logger +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data @@ -12,9 +11,9 @@ def api(groupId) -> Dict: try: db = connect_db(config.db_info) code_info = db.select(get_code_info_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = code_info[0] return result diff --git a/API-SERVICE/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index ba66e6b7..30eda8ff 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -34,7 +34,7 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.info(f'PostgresManager Select Execute. ({sql})') + #logger.info(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index fadf8fa6..46467138 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,6 +1,7 @@ import os import configparser import argparse +import traceback import starlette.datastructures from fastapi.logger import logger from pathlib import Path @@ -10,6 +11,8 @@ from retry import retry import psycopg2 import jwt +import sys +import traceback def set_log_path(): @@ -99,3 +102,12 @@ def get_token_info(headers: starlette.datastructures.Headers): config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) logger.info(f'user info : {user_info}') return user_info + + +def get_exception_info(): + ex_type, ex_value, ex_traceback = sys.exc_info() + trace_back = traceback.extract_tb(ex_traceback) + trace_log = "\n".join([str(trace) for trace in trace_back]) + logger.error( + f'\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}') + return ex_type.__name__ From 1ec2a7e782a42d62a3d5a83b7fd86428946a5999 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 7 Jul 2022 09:11:54 +0900 Subject: [PATCH 138/236] =?UTF-8?q?refactor:=20insertMetaMap=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertMetaMap.py | 30 +++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index 91e32662..b2e3ac1d 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -11,7 +11,7 @@ class NmIdList(BaseModel): def api(insert: NmIdList) -> Dict: - view_col = ['biz_dataset_id'] + view_col = ["biz_dataset_id"] drop_view_wrap_query = "DROP VIEW IF EXISTS v_biz_meta_wrap" drop_view_meta_query = "DROP VIEW IF EXISTS v_biz_meta" create_view_meta_query = "CREATE OR REPLACE VIEW v_biz_meta \ @@ -21,12 +21,12 @@ def api(insert: NmIdList) -> Dict: tbmm.item_id as item_id \ FROM tb_biz_meta_map tbmm \ INNER JOIN tb_biz_meta_name tbmn ON tbmm.nm_id = tbmn.nm_id;" - delete_map_query = 'DELETE FROM tb_biz_meta_map WHERE nm_id = {0}' - map_insert_query = 'INSERT INTO tb_biz_meta_map (item_id, nm_id) VALUES ({0}, {1});' + delete_map_query = "DELETE FROM tb_biz_meta_map WHERE nm_id = {0}" + map_insert_query = "INSERT INTO tb_biz_meta_map (item_id, nm_id) VALUES ({0}, {1});" meta_map_query = "SELECT * FROM tb_biz_meta_map" - nm_id_query = 'SELECT nm_id FROM tb_biz_meta_map' + nm_id_query = "SELECT nm_id FROM tb_biz_meta_map" - map_item_query = "SELECT distinct \ + map_item_query = "SELECT DISTINCT \ meta_map.item_id,\ tbmn.eng_nm\ FROM\ @@ -35,6 +35,11 @@ def api(insert: NmIdList) -> Dict: tbmn.nm_id = meta_map.nm_id\ WHERE item_id IS NOT NULL" + ddl_dataset_id = "CREATE VIEW v_biz_meta_wrap AS\ + SELECT\ + {0}\ + FROM tb_biz_meta\ + GROUP BY biz_dataset_id" try: db = connect_db(config.db_info) @@ -56,18 +61,11 @@ def api(insert: NmIdList) -> Dict: # create view v_biz_meta_wrap meta_map_item = db.select(map_item_query)[0] - for i, meta_map in enumerate(meta_map_item): - col_format = f'\t\tmax(case when item_id = {convert_data(meta_map["item_id"])} ' \ - f'then item_val end) as {meta_map["eng_nm"]}' - view_col.append(col_format) + col_format = "\t\tMAX(CASE WHEN item_id = {0} THEN item_val END) AS {1}" + view_col = view_col + [col_format.format(convert_data(meta_map["item_id"]), meta_map["eng_nm"]) + for meta_map in meta_map_item] - view_col = ',\n'.join(view_col) - ddl_dataset_id = f"CREATE VIEW v_biz_meta_wrap AS\ - SELECT\ - {view_col}\ - FROM tb_biz_meta\ - GROUP BY biz_dataset_id" - db.execute(ddl_dataset_id) + db.execute(ddl_dataset_id.format(",\n".join(view_col))) db.execute(create_view_meta_query) # return data From a0186baeae6f90e5fa32591cd205661c1e7d1220 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 7 Jul 2022 09:14:22 +0900 Subject: [PATCH 139/236] =?UTF-8?q?style:=20=EC=BF=BC=EB=A6=AC=20=ED=8F=AC?= =?UTF-8?q?=EB=A7=B7=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getBizMetaList.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 76eb660c..0a6f4409 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,3 +1,4 @@ +from typing import Dict from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info @@ -6,10 +7,10 @@ def api(perPage: int, curPage: int, keyword1: str = "", keyword2: str = "", - keyword3: str = ""): + keyword3: str = "") -> Dict: curPage = curPage - 1 - total_cnt_query = "SELECT count(*) as cnt FROM v_biz_meta_wrap" + total_cnt_query = "SELECT count(*) AS cnt FROM v_biz_meta_wrap" v_meta_wrap_query = "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM v_biz_meta_wrap" try: @@ -20,18 +21,18 @@ def api(perPage: int, search_condition = [] for word in search_word_list: - order_condition.append(f"data_nm similar to '%{word}%'") - search_condition.append(f"data_nm like '%{word}%'") + order_condition.append(f"data_nm SIMILAR to '%{word}%'") + search_condition.append(f"data_nm LIKE '%{word}%'") - total_cnt_query = f'{total_cnt_query} WHERE {" and ".join(search_condition)}' - v_meta_wrap_query = f'{v_meta_wrap_query} WHERE {" and ".join(search_condition)}' + total_cnt_query = f'{total_cnt_query} WHERE {" AND ".join(search_condition)}' + v_meta_wrap_query = f'{v_meta_wrap_query} WHERE {" AND ".join(search_condition)}' v_meta_wrap_query = v_meta_wrap_query.format( - f'{" and ".join(order_condition)} desc') + f'{" AND ".join(order_condition)} DESC') else: v_meta_wrap_query = v_meta_wrap_query.format("biz_dataset_id") - v_meta_wrap_query = f"{v_meta_wrap_query} limit {perPage} offset ({perPage} * {curPage})" + v_meta_wrap_query = f"{v_meta_wrap_query} LIMIT {perPage} OFFSET ({perPage} * {curPage})" meta_wrap = db.select(v_meta_wrap_query) total_cnt = db.select(total_cnt_query) From c55963c65d07df7a7218e8fde320c0808891b5fe Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 7 Jul 2022 09:56:04 +0900 Subject: [PATCH 140/236] =?UTF-8?q?feat=20:=20error=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 78 +++++++------------ API-ROUTER/ConnectManager/PostgresManager.py | 2 +- API-ROUTER/Utils/CommonUtil.py | 7 +- .../ApiList/meta/insertUseBoardData.py | 5 +- API-SERVICE/Utils/CommonUtil.py | 11 +++ 5 files changed, 45 insertions(+), 58 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index e45c2038..2b9b0920 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -96,10 +96,8 @@ def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute(api_server_info_query) except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: config.api_server_info, _ = db.select( 'SELECT * FROM tb_api_server_info;') @@ -116,10 +114,8 @@ def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: db = connect_db(config.db_type, config.db_info) db.execute(api_server_info_query) except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: config.api_server_info, _ = db.select( 'SELECT * FROM tb_api_server_info;') @@ -133,10 +129,8 @@ def get_server_info_list(self) -> Dict: api_server_info, _ = db.select( 'SELECT * FROM tb_api_server_info ORDER BY nm;') except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"api_server_info": api_server_info} @@ -148,10 +142,8 @@ def get_server_info(self, nm: str) -> Dict: api_server_info, _ = db.select( f'SELECT * FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"api_server_info": api_server_info} @@ -163,10 +155,8 @@ def del_server_info(self, nm: str) -> Dict: db.execute( f'DELETE FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: config.api_server_info, _ = db.select( 'SELECT * FROM tb_api_server_info;') @@ -184,10 +174,8 @@ def get_api_list(self) -> Dict: api_params, params_column_names = db.select( f'SELECT * FROM tb_api_params ORDER BY api_nm, nm;') except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: api_info = make_res_msg("", "", api_info, info_column_names) api_params = make_res_msg("", "", api_params, params_column_names) @@ -211,10 +199,8 @@ def get_api_category_list(self, ctgry: str) -> Dict: api_params_list.extend(api_params) params_columns = params_column_names except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: api_info = make_res_msg("", "", api_info, info_column_names) api_params = make_res_msg( @@ -231,10 +217,8 @@ def get_api(self, api_nm: str) -> Dict: api_params, params_column_names = db.select( f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(api_nm)} ORDER BY nm;') except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: api_info = make_res_msg("", "", api_info, info_column_names) api_params = make_res_msg("", "", api_params, params_column_names) @@ -268,10 +252,8 @@ def set_api(self, api_info: ApiInfo) -> Dict: {convert_data(param["data_type"])}, {convert_data(param["deflt_val"])});' db.execute(api_params_query) except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: save_file_for_reload() result = {"result": 1, "errorMessage": ""} @@ -308,10 +290,8 @@ def update_api(self, api_info: ApiInfo) -> Dict: db.execute(api_params_query) except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: save_file_for_reload() result = {"result": 1, "errorMessage": ""} @@ -326,10 +306,8 @@ def del_api(self, api_nm: str) -> Dict: f'DELETE FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: save_file_for_reload() result = {"result": 1, "errorMessage": ""} @@ -341,12 +319,10 @@ async def route_api(self, request: Request) -> Dict: method = request.method content_type = request.headers.get("Content-Type") - logger.error(f"BEFORE : {dict(request.headers)}") + logger.info(f"Origin Req Headers : {dict(request.headers)}") headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) - logger.info(f'Request Headers : {headers}') - - user_info = get_token_info(request.headers) + logger.info(f'Modify Req Headers : {headers}') try: db = connect_db(config.db_type, config.db_info) @@ -356,10 +332,8 @@ async def route_api(self, request: Request) -> Dict: api_params, _ = db.select( f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(api_info["api_nm"])};') except Exception: - ex_type, ex_value, trace_log = get_exception_info() - logger.error("Exception type : {}\nException message : {}\nTrace Log : {}" - .format(ex_type, str(ex_value).strip(), trace_log)) - result = {"result": 0, "errorMessage": ex_type} + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: if len(api_info) == 0: return {"result": 0, "errorMessage": "This is an unregistered API."} diff --git a/API-ROUTER/ConnectManager/PostgresManager.py b/API-ROUTER/ConnectManager/PostgresManager.py index ca14b5ba..26eca109 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/PostgresManager.py @@ -33,7 +33,7 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.info(f'PostgresManager Select Execute. ({sql})') + #logger.info(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 4076ba6a..3f113622 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -104,9 +104,10 @@ def get_token_info(headers: starlette.datastructures.Headers): def get_exception_info(): ex_type, ex_value, ex_traceback = sys.exc_info() trace_back = traceback.extract_tb(ex_traceback) - trace_log = [trace for trace in trace_back] - - return ex_type.__name__, ex_value, trace_log + trace_log = "\n".join([str(trace) for trace in trace_back]) + logger.error( + f'\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}') + return ex_type.__name__ def delete_headers(headers: Dict, delete_header: List) -> Dict: diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index c4b321a5..f7475dad 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -2,7 +2,7 @@ import uuid from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info +from Utils.CommonUtil import connect_db, get_exception_info, convert_error_message from Utils.DataBaseUtil import convert_data from pydantic import BaseModel from datetime import datetime, timedelta @@ -47,7 +47,8 @@ def api(use_board_data: insertUseBoardData) -> Dict: db.execute(insert_use_data_query) except Exception: except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} + result = {"result": 0, + "errorMessage": convert_error_message(except_name)} else: result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 46467138..b8071b75 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,3 +1,4 @@ +from ast import Str import os import configparser import argparse @@ -111,3 +112,13 @@ def get_exception_info(): logger.error( f'\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}') return ex_type.__name__ + + +def convert_error_message(exception_name: str): + error_message = None + if exception_name == "UniqueViolation": + error_message = "A value that already exists." + else: + error_message = exception_name + + return error_message From 07f1dfba7eeca0e0151fc10f34300a98fcabfa37 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 7 Jul 2022 14:54:32 +0900 Subject: [PATCH 141/236] =?UTF-8?q?feat=20:=20error=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertUseBoardData.py | 1 - API-SERVICE/Utils/CommonUtil.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index f7475dad..dfa6787b 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -1,6 +1,5 @@ from typing import Dict import uuid -from fastapi.logger import logger from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info, convert_error_message from Utils.DataBaseUtil import convert_data diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index b8071b75..76d70bae 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -117,7 +117,7 @@ def get_exception_info(): def convert_error_message(exception_name: str): error_message = None if exception_name == "UniqueViolation": - error_message = "A value that already exists." + error_message = "UNIQUE_VIOLATION" else: error_message = exception_name From 982df56e84c098bece97c1bda69adba2a9aaafbc Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 8 Jul 2022 09:36:44 +0900 Subject: [PATCH 142/236] =?UTF-8?q?feat=20:=20db=20=EC=84=A4=EC=A0=95(?= =?UTF-8?q?=EC=84=A0=ED=83=9D)=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiList/service/TEST_1.py | 7 +++--- API-ROUTER/ApiList/service/TEST_2.py | 7 +++--- API-ROUTER/ApiRoute/ApiRoute.py | 26 +++++++++++----------- API-ROUTER/Utils/CommonUtil.py | 15 +++++-------- API-ROUTER/conf/config.ini | 10 ++++++++- API-SERVICE/ApiService/ApiServiceConfig.py | 2 ++ API-SERVICE/Utils/CommonUtil.py | 4 +++- API-SERVICE/conf/meta/config.ini | 10 ++++++++- API-SERVICE/conf/sitemng/config.ini | 10 ++++++++- 9 files changed, 59 insertions(+), 32 deletions(-) diff --git a/API-ROUTER/ApiList/service/TEST_1.py b/API-ROUTER/ApiList/service/TEST_1.py index 8191be65..fcf78e10 100644 --- a/API-ROUTER/ApiList/service/TEST_1.py +++ b/API-ROUTER/ApiList/service/TEST_1.py @@ -2,7 +2,8 @@ from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import connect_db -def api(api_name:str) -> Dict: - db = connect_db(config.db_type, config.db_info) - return {"API_NAME" : "TEST_1"} \ No newline at end of file +def api(api_name: str) -> Dict: + db = connect_db(config.db_info) + + return {"API_NAME": "TEST_1"} diff --git a/API-ROUTER/ApiList/service/TEST_2.py b/API-ROUTER/ApiList/service/TEST_2.py index 8191be65..fcf78e10 100644 --- a/API-ROUTER/ApiList/service/TEST_2.py +++ b/API-ROUTER/ApiList/service/TEST_2.py @@ -2,7 +2,8 @@ from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import connect_db -def api(api_name:str) -> Dict: - db = connect_db(config.db_type, config.db_info) - return {"API_NAME" : "TEST_1"} \ No newline at end of file +def api(api_name: str) -> Dict: + db = connect_db(config.db_info) + + return {"API_NAME": "TEST_1"} diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 2b9b0920..b8612275 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -65,7 +65,7 @@ def set_route(self) -> None: self.router.add_api_route( "/api/delServerInfo", self.del_server_info, methods=["POST"], tags=["API Server Info"]) - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) api_info, _ = db.select('SELECT * FROM tb_api_info;') config.api_server_info, _ = db.select( @@ -93,7 +93,7 @@ def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: {convert_data(api_server_info["ip_adr"])}, \ {convert_data(api_server_info["domn_nm"])});' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute(api_server_info_query) except Exception: except_name = get_exception_info() @@ -111,7 +111,7 @@ def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: domn_nm={convert_data(api_server_info["domn_nm"])} \ WHERE nm={convert_data(api_server_info["nm"])};' try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute(api_server_info_query) except Exception: except_name = get_exception_info() @@ -125,7 +125,7 @@ def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: def get_server_info_list(self) -> Dict: try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) api_server_info, _ = db.select( 'SELECT * FROM tb_api_server_info ORDER BY nm;') except Exception: @@ -138,7 +138,7 @@ def get_server_info_list(self) -> Dict: def get_server_info(self, nm: str) -> Dict: try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) api_server_info, _ = db.select( f'SELECT * FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: @@ -151,7 +151,7 @@ def get_server_info(self, nm: str) -> Dict: def del_server_info(self, nm: str) -> Dict: try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute( f'DELETE FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: @@ -167,7 +167,7 @@ def del_server_info(self, nm: str) -> Dict: def get_api_list(self) -> Dict: # logger.error("TEST") try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) api_info, info_column_names = db.select( f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info ORDER BY no;') @@ -187,7 +187,7 @@ def get_api_category_list(self, ctgry: str) -> Dict: api_params_list = [] params_columns = [] try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) api_info, info_column_names = db.select( f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info WHERE ctgry = {convert_data(ctgry)} ORDER BY no;') @@ -211,7 +211,7 @@ def get_api_category_list(self, ctgry: str) -> Dict: def get_api(self, api_nm: str) -> Dict: try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) api_info, info_column_names = db.select( f'SELECT * FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') api_params, params_column_names = db.select( @@ -228,7 +228,7 @@ def get_api(self, api_nm: str) -> Dict: def set_api(self, api_info: ApiInfo) -> Dict: try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) insert_api_info = {} insert_api_params = [] @@ -262,7 +262,7 @@ def set_api(self, api_info: ApiInfo) -> Dict: def update_api(self, api_info: ApiInfo) -> Dict: try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) insert_api_info = {} insert_api_params = [] @@ -300,7 +300,7 @@ def update_api(self, api_info: ApiInfo) -> Dict: def del_api(self, api_nm: str) -> Dict: try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) db.execute( f'DELETE FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') @@ -325,7 +325,7 @@ async def route_api(self, request: Request) -> Dict: logger.info(f'Modify Req Headers : {headers}') try: - db = connect_db(config.db_type, config.db_info) + db = connect_db(config.db_info) api_info, _ = db.select( f'SELECT * FROM tb_api_info WHERE route_url = {convert_data(route_url)};') api_info = api_info[0] diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 3f113622..ec587063 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -41,7 +41,7 @@ def parser_params() -> Any: parser=argparse.ArgumentParser() parser.add_argument("--host", type = str, default = "127.0.0.1") parser.add_argument("--port", type = int, default = 18000) - parser.add_argument("--db_type", default = "postgresql") + parser.add_argument("--db_type", default = "test") return parser.parse_args() @@ -51,7 +51,7 @@ def prepare_config() -> None: config.root_path=str(Path(os.path.dirname(os.path.abspath(__file__))).parent) api_router_cfg=get_config("config.ini") config.api_config=get_config("api_config.ini") - config.db_type=args.db_type + config.db_type=f'{args.db_type}_db' config.server_host=args.host config.server_port=args.port config.db_info=api_router_cfg[config.db_type] @@ -60,13 +60,10 @@ def prepare_config() -> None: @ retry(psycopg2.OperationalError, delay = 1, tries = 3) -def connect_db(db_type, db_info): - if db_type == "postgresql": - db=PostgresManager(host = db_info["host"], port = db_info["port"], - user = db_info["user"], password = db_info["password"], - database = db_info["database"], schema = db_info["schema"]) - else: - raise Exception(f'Not Implemented. ({db_type})') +def connect_db(db_info): + db=PostgresManager(host = db_info["host"], port = db_info["port"], + user = db_info["user"], password = db_info["password"], + database = db_info["database"], schema = db_info["schema"]) return db diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 5bc0fe72..5dd62068 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -4,7 +4,15 @@ port = 10022 id = deep password = !deep@win#human$5 -[postgresql] +[test_db] +host = 192.168.100.126 +port = 25432 +user = dpsi +password = hello.sitemng12#$ +database = ktportal +schema = sitemng + +[commercial_db] host = 192.168.100.126 port = 25432 user = dpsi diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index aa7e152c..2b83bd10 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -5,6 +5,8 @@ class ApiServiceConfig: root_path: str category: str + + db_type: str db_info: Dict remote_info: Dict diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 76d70bae..b14f277b 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -47,6 +47,7 @@ def parser_params() -> Any: parser.add_argument("--host", type=str, default="127.0.0.1") parser.add_argument("--port", type=int, default=19000) parser.add_argument("--category", default="meta") + parser.add_argument("--db_type", default="test") return parser.parse_args() @@ -60,7 +61,8 @@ def prepare_config() -> None: config.api_config = get_config("api_config.ini") config.server_host = args.host config.server_port = args.port - config.db_info = api_router_cfg[config.category] + config.db_type = f'{args.db_type}_db' + config.db_info = api_router_cfg[config.db_type] config.secret_info = api_router_cfg["secret_info"] diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index af176b60..bfc964f4 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -1,4 +1,12 @@ -[meta] +[test_db] +host = 192.168.100.126 +port = 25432 +user = dpme +password = hello.meta12#$ +database = ktportal +schema = meta + +[commercial_db] host = 192.168.100.126 port = 25432 user = dpme diff --git a/API-SERVICE/conf/sitemng/config.ini b/API-SERVICE/conf/sitemng/config.ini index 23860e4c..cc55be15 100644 --- a/API-SERVICE/conf/sitemng/config.ini +++ b/API-SERVICE/conf/sitemng/config.ini @@ -1,4 +1,12 @@ -[sitemng] +[test_db] +host = 192.168.100.126 +port = 25432 +user = dpsi +password = hello.sitemng12#$ +database = ktportal +schema = sitemng + +[commercial_db] host = 192.168.100.126 port = 25432 user = dpsi From 3e44b0361b8ef26ebf23f52916a657a42dad101d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 8 Jul 2022 09:43:15 +0900 Subject: [PATCH 143/236] =?UTF-8?q?feat=20:=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EB=B3=80=EA=B2=BD=20(db?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EA=B4=80=EB=A0=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/safe_start.sh | 6 +++++- API-ROUTER/start.sh | 6 +++++- API-SERVICE/safe_start.sh | 6 +++++- API-SERVICE/start.sh | 6 +++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh index 8fa73b56..5a63ba04 100755 --- a/API-ROUTER/safe_start.sh +++ b/API-ROUTER/safe_start.sh @@ -1,6 +1,7 @@ app_name=API-Router router_host=$1 router_port=$2 +router_db=$3 input() { if [[ $router_host == "" ]];then @@ -9,6 +10,9 @@ input() { if [[ $router_port == "" ]];then router_port=9010 fi + if [[ $router_db == "" ]];then + router_db=test + fi } router_stop() { @@ -41,7 +45,7 @@ uvicorn_stop() { router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & } diff --git a/API-ROUTER/start.sh b/API-ROUTER/start.sh index 4d7d7ab8..7695282e 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -1,6 +1,7 @@ app_name=API-Router router_host=$1 router_port=$2 +router_db=$3 input() { if [[ $router_host == "" ]];then @@ -9,13 +10,16 @@ input() { if [[ $router_port == "" ]];then router_port=9010 fi + if [[ $router_db == "" ]];then + router_db=test + fi } router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} 1> /dev/null 2>&1 & } echo "########## Start Application (${app_name}) ##########" diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh index 29615580..b0778f65 100644 --- a/API-SERVICE/safe_start.sh +++ b/API-SERVICE/safe_start.sh @@ -2,6 +2,7 @@ app_name=API-Service router_host=$1 router_port=$2 category=$3 +router_db=$4 input() { if [[ $router_host == "" ]];then @@ -13,6 +14,9 @@ input() { if [[ $category == "" ]];then category=meta fi + if [[ $router_db == "" ]];then + router_db=test + fi } router_stop() { @@ -45,7 +49,7 @@ uvicorn_stop() { router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 & } diff --git a/API-SERVICE/start.sh b/API-SERVICE/start.sh index e686cca5..b412a4ab 100644 --- a/API-SERVICE/start.sh +++ b/API-SERVICE/start.sh @@ -2,6 +2,7 @@ app_name=API-Service router_host=$1 router_port=$2 category=$3 +router_db=$4 input() { if [[ $router_host == "" ]];then @@ -13,11 +14,14 @@ input() { if [[ $category == "" ]];then category=meta fi + if [[ $router_db == "" ]];then + router_db=test + fi } router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 & } From 8efda6c29e12e8f79925a65f9ad646449aad9615 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 8 Jul 2022 09:50:06 +0900 Subject: [PATCH 144/236] =?UTF-8?q?fix=20:=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/safe_start.sh | 2 +- API-ROUTER/start.sh | 2 +- API-SERVICE/safe_start.sh | 2 +- API-SERVICE/start.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh index 5a63ba04..2f40f0fe 100755 --- a/API-ROUTER/safe_start.sh +++ b/API-ROUTER/safe_start.sh @@ -47,7 +47,7 @@ router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} 1> /dev/null 2>&1 & } echo "########## Safe Start (${app_name}) ##########" diff --git a/API-ROUTER/start.sh b/API-ROUTER/start.sh index 7695282e..60f6b7e8 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -19,7 +19,7 @@ router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} --db_type ${router_db} 1> /dev/null 2>&1 & } echo "########## Start Application (${app_name}) ##########" diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh index b0778f65..fe6650f3 100644 --- a/API-SERVICE/safe_start.sh +++ b/API-SERVICE/safe_start.sh @@ -51,7 +51,7 @@ router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 & } echo "########## Safe Start (${app_name}) ##########" diff --git a/API-SERVICE/start.sh b/API-SERVICE/start.sh index b412a4ab..484bfd8f 100644 --- a/API-SERVICE/start.sh +++ b/API-SERVICE/start.sh @@ -23,7 +23,7 @@ router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" - nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} 1> /dev/null 2>&1 & + nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 & } echo "########## Start Application (${app_name}) ##########" From f7bd755862a7531f8f906025a45f8d7342d28d9b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 11 Jul 2022 12:36:39 +0900 Subject: [PATCH 145/236] =?UTF-8?q?feat=20:=20getUseBoardDataList=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=ED=8F=AC=EB=A7=B7=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/start.sh | 2 +- API-SERVICE/ApiList/meta/getUseBoardDataList.py | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/API-ROUTER/start.sh b/API-ROUTER/start.sh index 60f6b7e8..e05ac0c9 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -17,7 +17,7 @@ input() { router_start() { source_path="$( cd "$( dirname "$0" )" && pwd -P )" - router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} 1> /dev/null 2>&1 &" + router_exec="nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} 1> /dev/null 2>&1 &" echo "Start Command : ${router_exec}" nohup python3.8 ${source_path}/server.py --host ${router_host} --port ${router_port} --db_type ${router_db} --db_type ${router_db} 1> /dev/null 2>&1 & } diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py index cde092e2..ca0419a1 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -3,14 +3,21 @@ from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -def api() -> Dict: - get_use_data_query = f'SELECT * FROM tb_board_use;' +def api(perPage: int, curPage: int) -> Dict: + curPage = curPage - 1 + + get_use_data_query = f'SELECT * FROM tb_board_use\ + ORDER BY data_nm\ + LIMIT {perPage}\ + OFFSET ({perPage} * {curPage});' get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ - WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" + WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" + total_cnt_query = "SELECT count(*) AS totalCount FROM tb_board_use;" try: db = connect_db(config.db_info) use_data, _ = db.select(get_use_data_query) + total_cnt = db.select(total_cnt_query) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} @@ -20,4 +27,6 @@ def api() -> Dict: eng_nm_list = [map_data["eng_nm"] for map_data in column_info] result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) + result["data"].update(total_cnt[0][0]) + return result From 897b85265b8438a1c8d98a6c0875cd664883b013 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 12 Jul 2022 10:38:35 +0900 Subject: [PATCH 146/236] =?UTF-8?q?feat=20:=20common=20API=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/Utils/CommonUtil.py | 2 +- API-SERVICE/ApiList/common/addTableColumn.py | 60 ++++++++++ API-SERVICE/ApiList/common/commonDelete.py | 39 +++++++ API-SERVICE/ApiList/common/commonInsert.py | 27 +++++ API-SERVICE/ApiList/common/commonSelect.py | 25 +++++ .../ApiList/common/commonSelectForPaging.py | 34 ++++++ API-SERVICE/ApiList/common/commonUpdate.py | 34 ++++++ API-SERVICE/ApiList/common/createTable.py | 106 ++++++++++++++++++ API-SERVICE/ApiList/common/delTableColumn.py | 39 +++++++ API-SERVICE/ApiList/common/deleteTable.py | 31 +++++ API-SERVICE/conf/common/api_config.ini | 34 ++++++ API-SERVICE/conf/common/config.ini | 19 ++++ API-SERVICE/conf/common/logging.conf | 28 +++++ API-SERVICE/conf/meta/api_config.ini | 3 +- 14 files changed, 479 insertions(+), 2 deletions(-) create mode 100644 API-SERVICE/ApiList/common/addTableColumn.py create mode 100644 API-SERVICE/ApiList/common/commonDelete.py create mode 100644 API-SERVICE/ApiList/common/commonInsert.py create mode 100644 API-SERVICE/ApiList/common/commonSelect.py create mode 100644 API-SERVICE/ApiList/common/commonSelectForPaging.py create mode 100644 API-SERVICE/ApiList/common/commonUpdate.py create mode 100644 API-SERVICE/ApiList/common/createTable.py create mode 100644 API-SERVICE/ApiList/common/delTableColumn.py create mode 100644 API-SERVICE/ApiList/common/deleteTable.py create mode 100644 API-SERVICE/conf/common/api_config.ini create mode 100644 API-SERVICE/conf/common/config.ini create mode 100644 API-SERVICE/conf/common/logging.conf diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index ec587063..6613e0f1 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -112,4 +112,4 @@ def delete_headers(headers: Dict, delete_header: List) -> Dict: if headers.get(delete): del(headers[delete]) return headers - \ No newline at end of file + \ No newline at end of file diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py new file mode 100644 index 00000000..8fc6b3cd --- /dev/null +++ b/API-SERVICE/ApiList/common/addTableColumn.py @@ -0,0 +1,60 @@ +from typing import Dict +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel +from starlette.requests import Request + + +class addTableColumn(BaseModel): + table_nm: str + eng_nm: str + kor_nm: str + data_type: str + +# column_type : number | string | time | auto_index +# constraint : primary key, unique, not null + + +def get_type(data_type, length=None): + if data_type == "number": + column_type = "int4" + elif data_type == "string": + if length: + column_type = f'varchar({length})' + else: + column_type = "varchar" + elif data_type == "time": + column_type = "timestamp" + else: + raise Exception(f"Invalid type ({data_type})") + return column_type + + +def api(add_table_column: addTableColumn) -> Dict: + table_name = add_table_column.table_nm.lower() + + data_type = get_type(add_table_column.data_type) + + add_column_query = f'ALTER TABLE {table_name} ADD {add_table_column.eng_nm} {data_type};' + + try: + db = connect_db(config.db_info) + db.execute(add_column_query) + + get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' + result, _ = db.select(get_table_id_query) + table_id = result[0]["id"] + column_info_query = f'INSERT INTO tb_table_column_info (table_id, kor_nm, eng_nm) \ + VALUES ({convert_data(table_id)}, \ + {convert_data(add_table_column.kor_nm)}, \ + {convert_data(add_table_column.eng_nm)});' + db.execute(column_info_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/commonDelete.py b/API-SERVICE/ApiList/common/commonDelete.py new file mode 100644 index 00000000..25a5a974 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonDelete.py @@ -0,0 +1,39 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class commonDelete(BaseModel): + table_nm: str + data: Dict + + +''' +{ + "key": "value", + "data": { + "data1":"", + "data2":"", + ... + } +} +''' + + +def api(common: commonDelete) -> Dict: + columns = ", ".join(common.data.keys()) + values = ", ".join(map(convert_data, common.data.values())) + insert_query = f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});' + + try: + db = connect_db(config.db_info) + db.execute(insert_query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/commonInsert.py b/API-SERVICE/ApiList/common/commonInsert.py new file mode 100644 index 00000000..b2703ec0 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonInsert.py @@ -0,0 +1,27 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class commonInsert(BaseModel): + table_nm: str + data: Dict + + +def api(common: commonInsert) -> Dict: + columns = ", ".join(common.data.keys()) + values = ", ".join(map(convert_data, common.data.values())) + insert_query = f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});' + + try: + db = connect_db(config.db_info) + db.execute(insert_query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py new file mode 100644 index 00000000..3bdc7505 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -0,0 +1,25 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from Utils.DataBaseUtil import convert_data + + +def api(table_nm: str) -> Dict: + get_query = f'SELECT * FROM {table_nm};' + get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ + WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_nm)});" + + try: + db = connect_db(config.db_info) + use_data, _ = db.select(get_query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + column_info, _ = db.select(get_column_info) + kor_nm_list = [map_data["kor_nm"] for map_data in column_info] + eng_nm_list = [map_data["eng_nm"] for map_data in column_info] + + result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) + + return result diff --git a/API-SERVICE/ApiList/common/commonSelectForPaging.py b/API-SERVICE/ApiList/common/commonSelectForPaging.py new file mode 100644 index 00000000..1c3ac9aa --- /dev/null +++ b/API-SERVICE/ApiList/common/commonSelectForPaging.py @@ -0,0 +1,34 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from Utils.DataBaseUtil import convert_data + + +def api(table_nm: str, perPage: int, curPage: int) -> Dict: + curPage = curPage - 1 + + get_query = f'SELECT * FROM {table_nm}\ + ORDER BY idx\ + LIMIT {perPage}\ + OFFSET ({perPage} * {curPage});' + + get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ + WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_nm)});" + total_cnt_query = f"SELECT count(*) AS totalCount FROM {table_nm};" + + try: + db = connect_db(config.db_info) + use_data, _ = db.select(get_query) + total_cnt = db.select(total_cnt_query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + column_info, _ = db.select(get_column_info) + kor_nm_list = [map_data["kor_nm"] for map_data in column_info] + eng_nm_list = [map_data["eng_nm"] for map_data in column_info] + + result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) + result["data"].update(total_cnt[0][0]) + + return result diff --git a/API-SERVICE/ApiList/common/commonUpdate.py b/API-SERVICE/ApiList/common/commonUpdate.py new file mode 100644 index 00000000..81ed2e6e --- /dev/null +++ b/API-SERVICE/ApiList/common/commonUpdate.py @@ -0,0 +1,34 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class commonUpdate(BaseModel): + table_nm: str + data: Dict + + +''' +{ + "key": "value" +} +''' + + +def api(common: commonUpdate) -> Dict: + columns = ", ".join(common.data.keys()) + values = ", ".join(map(convert_data, common.data.values())) + insert_query = f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});' + + try: + db = connect_db(config.db_info) + db.execute(insert_query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/createTable.py b/API-SERVICE/ApiList/common/createTable.py new file mode 100644 index 00000000..02163894 --- /dev/null +++ b/API-SERVICE/ApiList/common/createTable.py @@ -0,0 +1,106 @@ +from typing import Dict +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel +import uuid + + +class createTable(BaseModel): + ctgry: str + table_nm: str + + +# column_type : number | string | time +# constraint : primary key, unique, not null +default_info = { + "default_columns": [ + { + "eng_nm": "use_dataset_id", + "kor_nm": "활용 데이터셋 아이디", + "type": "string", + "constraint": ["primary key"] + }, + { + "eng_nm": "apyr", + "kor_nm": "신청자", + "type": "string", + "length": 64, + "constraint": ["not null"] + } + ] +} + + +def get_type(data_type, length=None): + if data_type == "number": + column_type = "int4" + elif data_type == "string": + if length: + column_type = f'varchar({length})' + else: + column_type = "varchar" + elif data_type == "time": + column_type = "timestamp" + else: + raise Exception(f"Invalid type ({data_type})") + return column_type + + +def make_default_column(default_info): + default_columns = ["idx serial4 not null"] + for info in default_info: + length = info.get("length") + column_type = get_type(info["type"], length) + default_columns.append( + f'{info["eng_nm"]} {column_type} {" ".join(info["constraint"])}') + + return default_columns + + +def make_ddl(category: str, table_name: str, config: Dict): + default_info = config["default_columns"] + default_columns = make_default_column(default_info) + + ddl = f'CREATE TABLE {category}.{table_name} ({",".join(default_columns)});' + + return ddl + + +def make_column_info(table_id, config): + column_info_query = [] + default_info = config["default_columns"] + for info in default_info: + column_info_query.append(f'INSERT INTO tb_table_column_info (table_id, kor_nm, eng_nm) \ + VALUES ({convert_data(table_id)}, \ + {convert_data(info["kor_nm"])}, \ + {convert_data(info["eng_nm"])});') + return column_info_query + + +def api(create_table: createTable) -> Dict: + category = create_table.ctgry.lower() + table_name = create_table.table_nm.lower() + + try: + db = connect_db(config.db_info) + ddl = make_ddl(category, table_name, default_info) + db.execute(f"DROP TABLE IF EXISTS {table_name}") + db.execute(ddl) + + table_id = uuid.uuid4() + table_info_query = f'INSERT INTO tb_table_list (table_nm, id) \ + VALUES ({convert_data(table_name)}, {convert_data(table_id)});' + db.execute(table_info_query) + + column_info_query = make_column_info(table_id, default_info) + for query in column_info_query: + db.execute(query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/delTableColumn.py b/API-SERVICE/ApiList/common/delTableColumn.py new file mode 100644 index 00000000..84832cb1 --- /dev/null +++ b/API-SERVICE/ApiList/common/delTableColumn.py @@ -0,0 +1,39 @@ +from typing import Dict +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class delTableColumn(BaseModel): + table_nm: str + eng_nm: str + +# column_type : number | string | time +# constraint : primary key, unique, not null + + +def api(del_table_column: delTableColumn) -> Dict: + table_name = del_table_column.table_nm.lower() + + del_column_query = f'ALTER TABLE {table_name} DROP {del_table_column.eng_nm};' + + try: + db = connect_db(config.db_info) + db.execute(del_column_query) + + get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' + result, _ = db.select(get_table_id_query) + + table_id = result[0]["id"] + column_info_query = f'DELETE FROM tb_table_column_info WHERE eng_nm={convert_data(del_table_column.eng_nm)} \ + AND table_id={convert_data(table_id)};' + db.execute(column_info_query) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/deleteTable.py b/API-SERVICE/ApiList/common/deleteTable.py new file mode 100644 index 00000000..bccc6f29 --- /dev/null +++ b/API-SERVICE/ApiList/common/deleteTable.py @@ -0,0 +1,31 @@ +from typing import Dict +from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class deleteTable(BaseModel): + table_nm: str + +# column_type : number | string | time +# constraint : primary key, unique, not null + + +def api(delete_table: deleteTable) -> Dict: + table_name = delete_table.table_nm.lower() + + drop_query = f'DROP TABLE {table_name};' + delete_board_name = f'DELETE FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' + try: + db = connect_db(config.db_info) + db.execute(drop_query) + db.execute(delete_board_name) + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini new file mode 100644 index 00000000..f4113733 --- /dev/null +++ b/API-SERVICE/conf/common/api_config.ini @@ -0,0 +1,34 @@ +[commonSelect] +method = GET +url = /portal/api/common/commonSelect +sub_dir = common + +[commonSelectForPaging] +method = GET +url = /portal/api/common/commonSelectForPaging +sub_dir = common + +[commonInsert] +method = POST +url = /portal/api/common/commonInsert +sub_dir = common + +[createTable] +method = POST +url = /portal/api/common/createTable +sub_dir = common + +[deleteTable] +method = POST +url = /portal/api/common/deleteTable +sub_dir = common + +[addTableColumn] +method = POST +url = /portal/api/common/addTableColumn +sub_dir = common + +[delTableColumn] +method = POST +url = /portal/api/common/delTableColumn +sub_dir = common \ No newline at end of file diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini new file mode 100644 index 00000000..c6dbead2 --- /dev/null +++ b/API-SERVICE/conf/common/config.ini @@ -0,0 +1,19 @@ +[test_db] +host = 192.168.100.126 +port = 25432 +user = dpmanager +password = hello.dp12#$ +database = ktportal +schema = users,meta,sitemng,board,analysis,sysconfig + +[commercial_db] +host = 192.168.100.126 +port = 25432 +user = dpmanager +password = hello.dp12#$ +database = ktportal +schema = users,meta,sitemng,board,analysis,sysconfig + +[secret_info] +name = user-katech-access-token +secret = jwt-secrect-b-iris diff --git a/API-SERVICE/conf/common/logging.conf b/API-SERVICE/conf/common/logging.conf new file mode 100644 index 00000000..b8a39ccf --- /dev/null +++ b/API-SERVICE/conf/common/logging.conf @@ -0,0 +1,28 @@ +[loggers] +keys = root + +[logger_root] +level = INFO +handlers = console,rotatingFileHandler + +[formatters] +keys = default + +[formatter_default] +format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s + +[handlers] +keys = console,rotatingFileHandler + +[handler_console] +class = StreamHandler +args = (sys.stdout,) +formatter = default +level = INFO + +[handler_rotatingFileHandler] +class = handlers.RotatingFileHandler +formatter = default +args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/common/common.log', 'a', 20000000, 10) +level = INFO + diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 969a59bb..9bfabe0c 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -116,4 +116,5 @@ sub_dir = meta [getBizMetaDetailSample] method = GET url = /portal/api/meta/getBizMetaDetailSample -sub_dir = meta \ No newline at end of file +sub_dir = meta + From 7c4b40ff294bb74f2b32f2b593059b813aa56eda Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 12 Jul 2022 16:40:09 +0900 Subject: [PATCH 147/236] =?UTF-8?q?feat=20:=20common=20API=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/Utils/CommonUtil.py | 2 +- API-SERVICE/ApiList/common/addTableColumn.py | 35 ++++++++++---------- API-SERVICE/ApiList/common/commonDelete.py | 19 ++--------- API-SERVICE/ApiList/common/commonUpdate.py | 17 ++++------ API-SERVICE/ApiList/common/createTable.py | 7 ++-- API-SERVICE/conf/common/api_config.ini | 10 ++++++ 6 files changed, 43 insertions(+), 47 deletions(-) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 6613e0f1..a8fee948 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -112,4 +112,4 @@ def delete_headers(headers: Dict, delete_header: List) -> Dict: if headers.get(delete): del(headers[delete]) return headers - \ No newline at end of file + \ No newline at end of file diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py index 8fc6b3cd..3efd6bf1 100644 --- a/API-SERVICE/ApiList/common/addTableColumn.py +++ b/API-SERVICE/ApiList/common/addTableColumn.py @@ -1,4 +1,4 @@ -from typing import Dict +from typing import Dict, List from fastapi.logger import logger from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db @@ -32,25 +32,26 @@ def get_type(data_type, length=None): return column_type -def api(add_table_column: addTableColumn) -> Dict: - table_name = add_table_column.table_nm.lower() +def api(add_table_columns: List[addTableColumn]) -> Dict: + try: + db = connect_db(config.db_info) - data_type = get_type(add_table_column.data_type) + for add_table_column in add_table_columns: + table_name = add_table_column.table_nm.lower() - add_column_query = f'ALTER TABLE {table_name} ADD {add_table_column.eng_nm} {data_type};' + data_type = get_type(add_table_column.data_type) - try: - db = connect_db(config.db_info) - db.execute(add_column_query) - - get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' - result, _ = db.select(get_table_id_query) - table_id = result[0]["id"] - column_info_query = f'INSERT INTO tb_table_column_info (table_id, kor_nm, eng_nm) \ - VALUES ({convert_data(table_id)}, \ - {convert_data(add_table_column.kor_nm)}, \ - {convert_data(add_table_column.eng_nm)});' - db.execute(column_info_query) + add_column_query = f'ALTER TABLE {table_name} ADD {add_table_column.eng_nm} {data_type};' + db.execute(add_column_query) + + get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' + result, _ = db.select(get_table_id_query) + table_id = result[0]["id"] + column_info_query = f'INSERT INTO tb_table_column_info (table_id, kor_nm, eng_nm) \ + VALUES ({convert_data(table_id)}, \ + {convert_data(add_table_column.kor_nm)}, \ + {convert_data(add_table_column.eng_nm)});' + db.execute(column_info_query) except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) diff --git a/API-SERVICE/ApiList/common/commonDelete.py b/API-SERVICE/ApiList/common/commonDelete.py index 25a5a974..f6f29713 100644 --- a/API-SERVICE/ApiList/common/commonDelete.py +++ b/API-SERVICE/ApiList/common/commonDelete.py @@ -7,29 +7,16 @@ class commonDelete(BaseModel): table_nm: str + key: str data: Dict -''' -{ - "key": "value", - "data": { - "data1":"", - "data2":"", - ... - } -} -''' - - def api(common: commonDelete) -> Dict: - columns = ", ".join(common.data.keys()) - values = ", ".join(map(convert_data, common.data.values())) - insert_query = f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});' + delete_query = f'DELETE FROM {common.table_nm} WHERE {common.key} = {convert_data(common.data.get(common.key))};' try: db = connect_db(config.db_info) - db.execute(insert_query) + db.execute(delete_query) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/ApiList/common/commonUpdate.py b/API-SERVICE/ApiList/common/commonUpdate.py index 81ed2e6e..d2ede80f 100644 --- a/API-SERVICE/ApiList/common/commonUpdate.py +++ b/API-SERVICE/ApiList/common/commonUpdate.py @@ -7,24 +7,19 @@ class commonUpdate(BaseModel): table_nm: str + key: str data: Dict -''' -{ - "key": "value" -} -''' - - def api(common: commonUpdate) -> Dict: - columns = ", ".join(common.data.keys()) - values = ", ".join(map(convert_data, common.data.values())) - insert_query = f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});' + update_data = [ + f'{key} = {convert_data(value)}' for key, value in common.data.items()] + update_query = f'UPDATE {common.table_nm} SET {",".join(update_data)}\ + WHERE {common.key} = {convert_data(common.data.get(common.key))};' try: db = connect_db(config.db_info) - db.execute(insert_query) + db.execute(update_query) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/ApiList/common/createTable.py b/API-SERVICE/ApiList/common/createTable.py index 02163894..416d1c01 100644 --- a/API-SERVICE/ApiList/common/createTable.py +++ b/API-SERVICE/ApiList/common/createTable.py @@ -16,6 +16,10 @@ class createTable(BaseModel): # constraint : primary key, unique, not null default_info = { "default_columns": [ + + ] +} +''' { "eng_nm": "use_dataset_id", "kor_nm": "활용 데이터셋 아이디", @@ -29,8 +33,7 @@ class createTable(BaseModel): "length": 64, "constraint": ["not null"] } - ] -} +''' def get_type(data_type, length=None): diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index f4113733..35010679 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -13,6 +13,16 @@ method = POST url = /portal/api/common/commonInsert sub_dir = common +[commonUpdate] +method = POST +url = /portal/api/common/commonUpdate +sub_dir = common + +[commonDelete] +method = POST +url = /portal/api/common/commonDelete +sub_dir = common + [createTable] method = POST url = /portal/api/common/createTable From bbff5c4b45f2dbd0950270523fae181c34019c69 Mon Sep 17 00:00:00 2001 From: cbc Date: Fri, 15 Jul 2022 14:52:02 +0900 Subject: [PATCH 148/236] =?UTF-8?q?feat:=20api=EB=AA=85=20python=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=AA=85=20=ED=86=B5,=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=ED=8F=AC=EB=A7=B7=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sitemng/{getCodeGroupId.py => getCodeInfo.py} | 13 ++++++++++--- API-SERVICE/conf/sitemng/api_config.ini | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) rename API-SERVICE/ApiList/sitemng/{getCodeGroupId.py => getCodeInfo.py} (60%) diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeInfo.py similarity index 60% rename from API-SERVICE/ApiList/sitemng/getCodeGroupId.py rename to API-SERVICE/ApiList/sitemng/getCodeInfo.py index 61395481..4575f6ba 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeInfo.py @@ -10,10 +10,17 @@ def api(groupId) -> Dict: WHERE code_group_id = {convert_data(groupId)};' try: db = connect_db(config.db_info) - code_info = db.select(get_code_info_query) + code_list = db.select(get_code_info_query) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - result = code_info[0] - return result + code_info = [] + if len(code_list[0]): + code_info = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} + for code_detail in code_list[0]] + + body = {"list": code_info} + result = {"result": 1, "errorMessage": "", "data": body} + + return result \ No newline at end of file diff --git a/API-SERVICE/conf/sitemng/api_config.ini b/API-SERVICE/conf/sitemng/api_config.ini index cb74e26b..c361546c 100644 --- a/API-SERVICE/conf/sitemng/api_config.ini +++ b/API-SERVICE/conf/sitemng/api_config.ini @@ -1,4 +1,4 @@ -[getCodeGroupId] +[getCodeInfo] method = GET url = /portal/api/sitemng/getCodeInfo sub_dir = sitemng \ No newline at end of file From fa0a900097b4beab5254c233baf19fd926196bae Mon Sep 17 00:00:00 2001 From: lum0380 Date: Fri, 15 Jul 2022 14:53:06 +0900 Subject: [PATCH 149/236] =?UTF-8?q?feat:=20sample=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20db=20=EC=A0=80=EC=9E=A5=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertSampleData.py | 34 ++++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 4 +++ 2 files changed, 38 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/insertSampleData.py diff --git a/API-SERVICE/ApiList/meta/insertSampleData.py b/API-SERVICE/ApiList/meta/insertSampleData.py new file mode 100644 index 00000000..0f291d0b --- /dev/null +++ b/API-SERVICE/ApiList/meta/insertSampleData.py @@ -0,0 +1,34 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class isnertSampleData(BaseModel): + biz_dataset_id: str + sample_contents: str + column_seperator: str = "," + file_nm: str + file_extension: str = "csv" + + +def api(file_path: str,sample_data: isnertSampleData) -> Dict: + try: + db = connect_db(config.db_info) + with open(f'{file_path}/{sample_data.file_nm}.{sample_data.file_extension}','r',encoding='cp949') as fp: + data = fp.read().replace("'","''").split("\n") + sample_data.sample_contents = '\n'.join(data) + + insert_sample_query = f'INSERT INTO tb_meta_detail_sampledata(biz_dataset_id, sample_contents, column_seperator, column_count, file_nm, file_extension) \ + VALUES({convert_data(sample_data.biz_dataset_id)},{convert_data(sample_data.sample_contents)},{convert_data(sample_data.column_seperator)}, \ + {convert_data(len(data))},{convert_data(sample_data.file_nm)},{convert_data(sample_data.file_extension)})' + db.execute(insert_sample_query) + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + return result + diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 9bfabe0c..bf78a405 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -118,3 +118,7 @@ method = GET url = /portal/api/meta/getBizMetaDetailSample sub_dir = meta +[insertSampleData] +method = POST +url = /portal/api/meta/insertSampleData +sub_dir = meta \ No newline at end of file From e22da65f6210e89be76265ed39f8fb946d217de7 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 18 Jul 2022 10:18:48 +0900 Subject: [PATCH 150/236] =?UTF-8?q?feat=20:=20insertUseBoard=20=EB=94=94?= =?UTF-8?q?=ED=8F=B4=ED=8A=B8=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertUseBoardData.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index dfa6787b..d4326748 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -25,7 +25,7 @@ def api(use_board_data: insertUseBoardData) -> Dict: use_dataset_id = uuid.uuid4() use_st_dt = datetime.today().strftime("%Y-%m-%d") exp_date = (datetime.today() + timedelta(30)).strftime("%Y-%m-%d") - trt_sttus = "처리중" + trt_sttus = "접수중" use_tmscnt = 1 apy_sbst = use_board_data.apy_sbst From 04466bedaf1f8b037e9e42f604c968d7ead7f32b Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 20 Jul 2022 08:22:02 +0900 Subject: [PATCH 151/236] =?UTF-8?q?feat=20:=20common=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/addTableColumn.py | 74 +++++++++++++------ .../ApiList/common/commonMultiExcute.py | 48 ++++++++++++ .../ApiList/common/commonMultiInsert.py | 30 ++++++++ API-SERVICE/ApiList/common/commonSelect.py | 72 ++++++++++++++++-- .../ApiList/common/commonSelect_origin.py | 25 +++++++ API-SERVICE/ApiList/common/createTable.py | 19 +---- API-SERVICE/ApiList/common/delTableColumn.py | 8 +- API-SERVICE/ApiList/common/deleteTable.py | 8 +- API-SERVICE/conf/common/api_config.ini | 12 ++- 9 files changed, 238 insertions(+), 58 deletions(-) create mode 100644 API-SERVICE/ApiList/common/commonMultiExcute.py create mode 100644 API-SERVICE/ApiList/common/commonMultiInsert.py create mode 100644 API-SERVICE/ApiList/common/commonSelect_origin.py diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py index 3efd6bf1..4a1b63fe 100644 --- a/API-SERVICE/ApiList/common/addTableColumn.py +++ b/API-SERVICE/ApiList/common/addTableColumn.py @@ -1,10 +1,9 @@ from typing import Dict, List from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from starlette.requests import Request class addTableColumn(BaseModel): @@ -13,23 +12,54 @@ class addTableColumn(BaseModel): kor_nm: str data_type: str + # column_type : number | string | time | auto_index # constraint : primary key, unique, not null - - -def get_type(data_type, length=None): - if data_type == "number": - column_type = "int4" - elif data_type == "string": - if length: - column_type = f'varchar({length})' - else: - column_type = "varchar" - elif data_type == "time": - column_type = "timestamp" - else: - raise Exception(f"Invalid type ({data_type})") - return column_type +''' +abstime : 절대 날짜와 시간 +aclitem : 엑세스 제어 목록 아이템 +bool : 부울런(논리) 값 +box : 2차원 사각형 +bytea : 가변길이의 바이트 배열 +bpchar : 공백 채움 문자 +char : 문자 +char2 : 2 문자의 배열 +char4 : 4 문자의 배열 +char8 : 8문자의 배열 +char16 : 16문자의 배열 +cid : 명령 식별 타입 +date : ANSI SQL 데이터 타입 +datetime : 범용 날짜와 시간 +filename : 거대 객체의 파일이름 +int2 : 부호있는 2바이트 정수 +int28 : int2의 8 배열 +int4 : 부호있는 2바이트 정수 +float4 : 단정도 부동소수 +float8 : 배정도 부동소수 +lseg : 2차원 선 구간 +money : 고정 정밀도를 가지는 십진수 타입 +name : 저장 시스템 식별자를 위한 다중 문자 타입 +oid : 객체 식별자 타입 +oid8 : oid의 8 배열 +oidint2 : oid 와 int2의 조합 +oidint4 : oid 와 int4의 조합 +oidchar16 : oid 와 char16의 조합 +path : 열렸거나 닫혀진 선 구간 +point : 2차원 기하학 점 +polygon : 2차원 다각형 (닫혀진 path와 동일) +circle : 2차원 원 (중심점과 반경) +regproc : 등록된 프로시저 +reltime : 상대 날짜와 시간 간격 +smgr : 저장 관리자 +text : 가변길이의 문자 배열 +tid : 튜플 식별자 타입 +time : ANSI SQL 시간 타입 +timespan : 범용 시간 간격 +timestemp : 제한 범위 ISO형식의 날짜와 시간 +tinterval : 시간 간격(절대시작시각과 절대종료시각) +varchar : 가변길이의 문자들 +xid : 트랜잭션 식별자 타입 +''' def api(add_table_columns: List[addTableColumn]) -> Dict: @@ -39,9 +69,7 @@ def api(add_table_columns: List[addTableColumn]) -> Dict: for add_table_column in add_table_columns: table_name = add_table_column.table_nm.lower() - data_type = get_type(add_table_column.data_type) - - add_column_query = f'ALTER TABLE {table_name} ADD {add_table_column.eng_nm} {data_type};' + add_column_query = f'ALTER TABLE {table_name} ADD {add_table_column.eng_nm} {add_table_column.data_type};' db.execute(add_column_query) get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' @@ -52,9 +80,9 @@ def api(add_table_columns: List[addTableColumn]) -> Dict: {convert_data(add_table_column.kor_nm)}, \ {convert_data(add_table_column.eng_nm)});' db.execute(column_info_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/ApiList/common/commonMultiExcute.py b/API-SERVICE/ApiList/common/commonMultiExcute.py new file mode 100644 index 00000000..912a233b --- /dev/null +++ b/API-SERVICE/ApiList/common/commonMultiExcute.py @@ -0,0 +1,48 @@ +from typing import Dict, List, Optional +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class commonMultiExcute(BaseModel): + method: str + table_nm: str + data: Dict + key: Optional[str] = None + + +def make_query(excute: commonMultiExcute): + method = excute.method + query = None + if method == "INSERT": + columns = ", ".join(excute.data.keys()) + values = ", ".join(map(convert_data, excute.data.values())) + query = f'INSERT INTO {excute.table_nm} ({columns}) VALUES ({values});' + elif method == "UPDATE": + update_data = [ + f'{key} = {convert_data(value)}' for key, value in excute.data.items()] + query = f'UPDATE {excute.table_nm} SET {",".join(update_data)}\ + WHERE {excute.key} = {convert_data(excute.data.get(excute.key))};' + elif method == "DELETE": + query = f'DELETE FROM {excute.table_nm} WHERE {excute.key} = {convert_data(excute.data.get(excute.key))};' + else: + raise ValueError(f"Invalid Method. ({method}))") + return query + + +def api(excute_list: List[commonMultiExcute]) -> Dict: + query_list = [] + try: + for excute in excute_list: + query_list.append(make_query(excute)) + + db = connect_db(config.db_info) + db.multiple_excute(query_list) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/commonMultiInsert.py b/API-SERVICE/ApiList/common/commonMultiInsert.py new file mode 100644 index 00000000..307c50db --- /dev/null +++ b/API-SERVICE/ApiList/common/commonMultiInsert.py @@ -0,0 +1,30 @@ +from typing import Dict, List +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel + + +class commonMultiInsert(BaseModel): + table_nm: str + data: Dict + + +def api(common_list: List[commonMultiInsert]) -> Dict: + insert_query_list = [] + for common in common_list: + columns = ", ".join(common.data.keys()) + values = ", ".join(map(convert_data, common.data.values())) + insert_query_list.append( + f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});') + + try: + db = connect_db(config.db_info) + db.multiple_excute(insert_query_list) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 3bdc7505..91227f0d 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -1,17 +1,73 @@ -from typing import Dict +from typing import Dict, List, Optional from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data +from pydantic import BaseModel +from fastapi.logger import logger -def api(table_nm: str) -> Dict: - get_query = f'SELECT * FROM {table_nm};' +class joinInfo(BaseModel): + table_nm: str + key: str + + +class whereInfo(BaseModel): + table_nm: str + key: str + value: str + op: Optional[str] = "" + + +class orderInfo(BaseModel): + table_nm: str + key: str + order: str + + +class pageInfo(BaseModel): + per_page: int + cur_page: int + + +class commonMatchSelect(BaseModel): + table_nm: str + key: Optional[str] = None + join_info: Optional[joinInfo] = None + where_info: Optional[List[whereInfo]] = None + order_info: Optional[orderInfo] = None + page_info: Optional[pageInfo] = None + + +def make_select_query(select_info: commonMatchSelect): + join, where, order, page = "", "", "", "" + join_info, where_info, order_info, page_info = select_info.join_info, select_info.where_info, select_info.order_info, select_info.page_info + if join_info: + join = f'JOIN {join_info.table_nm} ON {select_info.table_nm}.{select_info.key} = {join_info.table_nm}.{join_info.key}' + if where_info: + where = "WHERE " + for info in where_info: + where = f'{where} {info.op} {info.table_nm}.{info.key} = {convert_data(info.value)}' + if order_info: + order = f'ORDER BY {order_info.table_nm}.{order_info.key} {order_info.order}' + if page_info: + page = f'LIMIT {page_info.per_page} OFFSET ({page_info.per_page} * {page_info.cur_page - 1})' + query = f'SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};' + return query + + +def api(select_info: commonMatchSelect) -> Dict: get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ - WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_nm)});" + WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(select_info.table_nm)});" + get_query = make_select_query(select_info) + logger.info(f'Get Query : {get_query}') try: db = connect_db(config.db_info) - use_data, _ = db.select(get_query) + select_data, _ = db.select(get_query) + if select_info.page_info: + total_cnt_query = f"SELECT count(*) AS totalCount FROM {select_info.table_nm};" + total_cnt = db.select(total_cnt_query) + except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} @@ -19,7 +75,7 @@ def api(table_nm: str) -> Dict: column_info, _ = db.select(get_column_info) kor_nm_list = [map_data["kor_nm"] for map_data in column_info] eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - - result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) - + result = make_res_msg(1, "", select_data, eng_nm_list, kor_nm_list) + if select_info.page_info: + result["data"].update(total_cnt[0][0]) return result diff --git a/API-SERVICE/ApiList/common/commonSelect_origin.py b/API-SERVICE/ApiList/common/commonSelect_origin.py new file mode 100644 index 00000000..3bdc7505 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonSelect_origin.py @@ -0,0 +1,25 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from Utils.DataBaseUtil import convert_data + + +def api(table_nm: str) -> Dict: + get_query = f'SELECT * FROM {table_nm};' + get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ + WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_nm)});" + + try: + db = connect_db(config.db_info) + use_data, _ = db.select(get_query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + column_info, _ = db.select(get_column_info) + kor_nm_list = [map_data["kor_nm"] for map_data in column_info] + eng_nm_list = [map_data["eng_nm"] for map_data in column_info] + + result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) + + return result diff --git a/API-SERVICE/ApiList/common/createTable.py b/API-SERVICE/ApiList/common/createTable.py index 416d1c01..8e92216d 100644 --- a/API-SERVICE/ApiList/common/createTable.py +++ b/API-SERVICE/ApiList/common/createTable.py @@ -36,28 +36,11 @@ class createTable(BaseModel): ''' -def get_type(data_type, length=None): - if data_type == "number": - column_type = "int4" - elif data_type == "string": - if length: - column_type = f'varchar({length})' - else: - column_type = "varchar" - elif data_type == "time": - column_type = "timestamp" - else: - raise Exception(f"Invalid type ({data_type})") - return column_type - - def make_default_column(default_info): default_columns = ["idx serial4 not null"] for info in default_info: - length = info.get("length") - column_type = get_type(info["type"], length) default_columns.append( - f'{info["eng_nm"]} {column_type} {" ".join(info["constraint"])}') + f'{info["eng_nm"]} {info["type"]} {" ".join(info["constraint"])}') return default_columns diff --git a/API-SERVICE/ApiList/common/delTableColumn.py b/API-SERVICE/ApiList/common/delTableColumn.py index 84832cb1..3f10cf8d 100644 --- a/API-SERVICE/ApiList/common/delTableColumn.py +++ b/API-SERVICE/ApiList/common/delTableColumn.py @@ -1,7 +1,7 @@ from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -30,9 +30,9 @@ def api(del_table_column: delTableColumn) -> Dict: column_info_query = f'DELETE FROM tb_table_column_info WHERE eng_nm={convert_data(del_table_column.eng_nm)} \ AND table_id={convert_data(table_id)};' db.execute(column_info_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/ApiList/common/deleteTable.py b/API-SERVICE/ApiList/common/deleteTable.py index bccc6f29..12059f6b 100644 --- a/API-SERVICE/ApiList/common/deleteTable.py +++ b/API-SERVICE/ApiList/common/deleteTable.py @@ -1,7 +1,7 @@ from typing import Dict from fastapi.logger import logger from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db +from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -22,9 +22,9 @@ def api(delete_table: deleteTable) -> Dict: db = connect_db(config.db_info) db.execute(drop_query) db.execute(delete_board_name) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 35010679..9a78de2e 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -1,5 +1,5 @@ [commonSelect] -method = GET +method = POST url = /portal/api/common/commonSelect sub_dir = common @@ -13,6 +13,16 @@ method = POST url = /portal/api/common/commonInsert sub_dir = common +[commonMultiInsert] +method = POST +url = /portal/api/common/commonMultiInsert +sub_dir = common + +[commonMultiExcute] +method = POST +url = /portal/api/common/commonMultiExcute +sub_dir = common + [commonUpdate] method = POST url = /portal/api/common/commonUpdate From 9efb74da8e9341fd989ff30cfa4e589d5d28525e Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 25 Aug 2022 10:34:00 +0900 Subject: [PATCH 152/236] =?UTF-8?q?[AIPLATFORM-602]=20feat:=20=ED=95=9C?= =?UTF-8?q?=EC=9E=90=EC=97=B0=EA=B3=BC=20=EB=8F=99=EC=9D=BC=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EC=B5=9C=EC=8B=A0=20=EC=BD=94=EB=93=9C=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20(Router)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiList/service/TEST_1.py | 2 - API-ROUTER/ApiList/service/TEST_2.py | 2 - API-ROUTER/ApiRoute/ApiRoute.py | 26 ++++++------- API-ROUTER/ApiRoute/ApiRouteConfig.py | 2 + API-ROUTER/ConnectManager/PostgresManager.py | 39 +++++++++++++------- API-ROUTER/Utils/CommonUtil.py | 26 ++++++------- API-ROUTER/Utils/RouteUtil.py | 21 +++++++---- 7 files changed, 66 insertions(+), 52 deletions(-) diff --git a/API-ROUTER/ApiList/service/TEST_1.py b/API-ROUTER/ApiList/service/TEST_1.py index fcf78e10..b90ecf46 100644 --- a/API-ROUTER/ApiList/service/TEST_1.py +++ b/API-ROUTER/ApiList/service/TEST_1.py @@ -1,9 +1,7 @@ from typing import Dict from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db def api(api_name: str) -> Dict: - db = connect_db(config.db_info) return {"API_NAME": "TEST_1"} diff --git a/API-ROUTER/ApiList/service/TEST_2.py b/API-ROUTER/ApiList/service/TEST_2.py index fcf78e10..b90ecf46 100644 --- a/API-ROUTER/ApiList/service/TEST_2.py +++ b/API-ROUTER/ApiList/service/TEST_2.py @@ -1,9 +1,7 @@ from typing import Dict from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db def api(api_name: str) -> Dict: - db = connect_db(config.db_info) return {"API_NAME": "TEST_1"} diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index b8612275..bce5d11b 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -65,7 +65,7 @@ def set_route(self) -> None: self.router.add_api_route( "/api/delServerInfo", self.del_server_info, methods=["POST"], tags=["API Server Info"]) - db = connect_db(config.db_info) + db = connect_db() api_info, _ = db.select('SELECT * FROM tb_api_info;') config.api_server_info, _ = db.select( @@ -93,7 +93,7 @@ def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: {convert_data(api_server_info["ip_adr"])}, \ {convert_data(api_server_info["domn_nm"])});' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(api_server_info_query) except Exception: except_name = get_exception_info() @@ -111,7 +111,7 @@ def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: domn_nm={convert_data(api_server_info["domn_nm"])} \ WHERE nm={convert_data(api_server_info["nm"])};' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(api_server_info_query) except Exception: except_name = get_exception_info() @@ -125,7 +125,7 @@ def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: def get_server_info_list(self) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() api_server_info, _ = db.select( 'SELECT * FROM tb_api_server_info ORDER BY nm;') except Exception: @@ -138,7 +138,7 @@ def get_server_info_list(self) -> Dict: def get_server_info(self, nm: str) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() api_server_info, _ = db.select( f'SELECT * FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: @@ -151,7 +151,7 @@ def get_server_info(self, nm: str) -> Dict: def del_server_info(self, nm: str) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() db.execute( f'DELETE FROM tb_api_server_info WHERE nm = {convert_data(nm)};') except Exception: @@ -167,7 +167,7 @@ def del_server_info(self, nm: str) -> Dict: def get_api_list(self) -> Dict: # logger.error("TEST") try: - db = connect_db(config.db_info) + db = connect_db() api_info, info_column_names = db.select( f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info ORDER BY no;') @@ -187,7 +187,7 @@ def get_api_category_list(self, ctgry: str) -> Dict: api_params_list = [] params_columns = [] try: - db = connect_db(config.db_info) + db = connect_db() api_info, info_column_names = db.select( f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info WHERE ctgry = {convert_data(ctgry)} ORDER BY no;') @@ -211,7 +211,7 @@ def get_api_category_list(self, ctgry: str) -> Dict: def get_api(self, api_nm: str) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() api_info, info_column_names = db.select( f'SELECT * FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') api_params, params_column_names = db.select( @@ -228,7 +228,7 @@ def get_api(self, api_nm: str) -> Dict: def set_api(self, api_info: ApiInfo) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() insert_api_info = {} insert_api_params = [] @@ -262,7 +262,7 @@ def set_api(self, api_info: ApiInfo) -> Dict: def update_api(self, api_info: ApiInfo) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() insert_api_info = {} insert_api_params = [] @@ -300,7 +300,7 @@ def update_api(self, api_info: ApiInfo) -> Dict: def del_api(self, api_nm: str) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() db.execute( f'DELETE FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') @@ -325,7 +325,7 @@ async def route_api(self, request: Request) -> Dict: logger.info(f'Modify Req Headers : {headers}') try: - db = connect_db(config.db_info) + db = connect_db() api_info, _ = db.select( f'SELECT * FROM tb_api_info WHERE route_url = {convert_data(route_url)};') api_info = api_info[0] diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index 4f6778d2..77cac735 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -1,4 +1,5 @@ from typing import Dict, List +from psycopg2 import pool class ApiRouteConfig: @@ -16,6 +17,7 @@ class ApiRouteConfig: api_server_info: List[Dict] secret_info: Dict + conn_pool: pool.SimpleConnectionPool config = ApiRouteConfig diff --git a/API-ROUTER/ConnectManager/PostgresManager.py b/API-ROUTER/ConnectManager/PostgresManager.py index 26eca109..7dae8f9e 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/PostgresManager.py @@ -2,29 +2,38 @@ from typing import List, Dict, Tuple, Any from fastapi.logger import logger from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query +from ApiRoute.ApiRouteConfig import config class PostgresManager: - def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: - self.host = host - self.port = port - self.user = user - self.password = password - self.database = database - self.schema = schema + def __init__(self) -> None: self.conn = self.connect() self.cursor = self.conn.cursor() def connect(self): - conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, - password=self.password, database=self.database, - options=f"-c search_path={self.schema}") + conn = config.conn_pool.getconn() + logger.info("PostgresManager Connect.") return conn def execute(self, sql: str) -> None: - self.cursor.execute(sql) - self.conn.commit() + try: + self.cursor.execute(sql) + self.conn.commit() + except (Exception, psycopg2.DatabaseError): + self.conn.rollback() + raise psycopg2.DatabaseError + + def multiple_excute(self, sql_list: list) -> None: + try: + for index, sql in enumerate(sql_list): + logger.info( + f'PostgresManager Multiple Execute. ({index}. {sql})') + self.cursor.execute(sql) + self.conn.commit() + except (Exception, psycopg2.DatabaseError): + self.conn.rollback() + raise psycopg2.DatabaseError def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], List[Any]]: self.execute(sql) @@ -33,7 +42,7 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - #logger.info(f'PostgresManager Select Execute. ({sql})') + logger.info(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: @@ -59,5 +68,7 @@ def commit(self): self.conn.commit() def __del__(self) -> None: + logger.info("DB CLOSE") self.cursor.close() - self.conn.close() + # self.conn.close() + config.conn_pool.putconn(self.conn) diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index a8fee948..6740a245 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -7,8 +7,7 @@ from typing import Any, Dict, List from ApiRoute.ApiRouteConfig import config from ConnectManager import PostgresManager -from retry import retry -import psycopg2 +from psycopg2 import pool import jwt import sys import traceback @@ -55,23 +54,27 @@ def prepare_config() -> None: config.server_host=args.host config.server_port=args.port config.db_info=api_router_cfg[config.db_type] + config.conn_pool = make_connection_pool(config.db_info) config.remote_info=api_router_cfg["remote"] config.secret_info=api_router_cfg["secret_info"] - -@ retry(psycopg2.OperationalError, delay = 1, tries = 3) -def connect_db(db_info): - db=PostgresManager(host = db_info["host"], port = db_info["port"], - user = db_info["user"], password = db_info["password"], - database = db_info["database"], schema = db_info["schema"]) +def make_connection_pool(db_info): + conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], + password=db_info["password"], + host=db_info["host"], + port=db_info["port"], + database=db_info["database"], + options=f'-c search_path={db_info["schema"]}', connect_timeout=10) + return conn_pool + +def connect_db(): + db = PostgresManager() return db - def save_file_for_reload(): with open(__file__, "a") as fd: fd.write(" ") - def make_res_msg(result, err_msg, data = None, column_names = None): header_list=[] for column_name in column_names: @@ -85,7 +88,6 @@ def make_res_msg(result, err_msg, data = None, column_names = None): "body": data, "header": header_list} return res_msg - def get_token_info(headers: starlette.datastructures.Headers): user_info = None if config.secret_info["name"] in headers: @@ -97,7 +99,6 @@ def get_token_info(headers: starlette.datastructures.Headers): logger.info(f'User Info : {user_info}') return user_info - def get_exception_info(): ex_type, ex_value, ex_traceback = sys.exc_info() trace_back = traceback.extract_tb(ex_traceback) @@ -106,7 +107,6 @@ def get_exception_info(): f'\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}') return ex_type.__name__ - def delete_headers(headers: Dict, delete_header: List) -> Dict: for delete in delete_header: if headers.get(delete): diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 58cfe4db..69b84dec 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -3,6 +3,7 @@ from fastapi.logger import logger from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config +from Utils.CommonUtil import get_exception_info from typing import Dict @@ -53,7 +54,8 @@ async def bypass_msg(api_info, params_query, body, headers): async def run_cmd(cmd: str): async with asyncssh.connect(host=config.remote_info["host"], port=int(config.remote_info["port"]), - username=config.remote_info["id"], password=config.remote_info["password"]) as conn: + username=config.remote_info["id"], password=config.remote_info["password"], known_hosts=None) as conn: + logger.info(f'Run Cmd : {cmd}') result = await conn.run(cmd, check=True) logger.info(f'Command Result : {result.stdout}') return result.stdout @@ -61,23 +63,26 @@ async def run_cmd(cmd: str): async def call_remote_func(api_info, api_params, input_params) -> Dict: msg_type = api_info["msg_type"] - + logger.error(f'IN PARAM : {input_params}, API PARAM : {api_params}') command_input = "" if msg_type == "JSON": for param in api_params: try: - data = input_params[param["param_name"]] - command_input += f' --{param["param_name"]} {data}' + data = input_params[param["nm"]] + if not data: + data = param["deflt_val"] + command_input += f' --{param["nm"]} {data}' except KeyError: logger.error( - f'parameter set default value. [{param["param_name"]}]') - command_input += f' --{param["param_name"]} {param["default_value"]}' + f'parameter set default value. [{param["nm"]}]') + command_input += f' --{param["nm"]} {param["deflt_val"]}' cmd = f'{api_info["cmd"]} {command_input}' try: result = await run_cmd(cmd) - except (OSError, asyncssh.Error) as exc: - logger.error(f'SSH connection failed: {str(exc)}') + except Exception: + except_name = get_exception_info() + logger.error(f'SSH connection failed: {except_name}') return eval(result) From d58dd86582dd0a3c9aa9d0faf517830ba07076ed Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 25 Aug 2022 14:46:47 +0900 Subject: [PATCH 153/236] =?UTF-8?q?[AIPLATFORM-602]=20feat:=20=ED=95=9C?= =?UTF-8?q?=EC=9E=90=EC=97=B0=EA=B3=BC=20=EB=8F=99=EC=9D=BC=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EC=B5=9C=EC=8B=A0=20=EC=BD=94=EB=93=9C=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20(Service)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 12 ++- API-SERVICE/ApiList/common/addTableColumn.py | 89 ------------------ API-SERVICE/ApiList/common/commonDelete.py | 26 ------ ...{commonMultiExcute.py => commonExecute.py} | 24 +++-- API-SERVICE/ApiList/common/commonInsert.py | 27 ------ .../ApiList/common/commonMultiInsert.py | 30 ------ API-SERVICE/ApiList/common/commonSelect.py | 64 +++++++++++-- .../ApiList/common/commonSelectForPaging.py | 34 ------- .../ApiList/common/commonSelect_origin.py | 25 ----- API-SERVICE/ApiList/common/commonUpdate.py | 29 ------ API-SERVICE/ApiList/common/createTable.py | 92 ------------------- API-SERVICE/ApiList/common/delTableColumn.py | 39 -------- API-SERVICE/ApiList/common/deleteTable.py | 31 ------- API-SERVICE/ApiList/meta/addChildCategory.py | 3 +- .../ApiList/meta/deleteUseBoardData.py | 3 +- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 3 +- .../ApiList/meta/getBizMetaDetailDq.py | 3 +- .../ApiList/meta/getBizMetaDetailFiles.py | 3 +- .../ApiList/meta/getBizMetaDetailSample.py | 3 +- API-SERVICE/ApiList/meta/getBizMetaList.py | 3 +- API-SERVICE/ApiList/meta/getCategoryList.py | 3 +- API-SERVICE/ApiList/meta/getCategoryTree.py | 3 +- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 3 +- .../ApiList/meta/getUseBoardDataDetail.py | 3 +- .../ApiList/meta/getUseBoardDataList.py | 3 +- API-SERVICE/ApiList/meta/insertBizMeta.py | 3 +- API-SERVICE/ApiList/meta/insertBizMetaData.py | 3 +- API-SERVICE/ApiList/meta/insertMetaMap.py | 3 +- API-SERVICE/ApiList/meta/insertMetaName.py | 3 +- API-SERVICE/ApiList/meta/insertSampleData.py | 10 +- .../ApiList/meta/insertUseBoardData.py | 3 +- API-SERVICE/ApiList/meta/metaMapList.py | 3 +- API-SERVICE/ApiList/meta/metaNameList.py | 3 +- API-SERVICE/ApiList/meta/updateBizMeta.py | 3 +- API-SERVICE/ApiList/meta/updateCategory.py | 3 +- API-SERVICE/ApiList/meta/updateMetaName.py | 3 +- .../ApiList/meta/updateUseBoardData.py | 3 +- API-SERVICE/ApiList/meta/useMetaNameList.py | 3 +- API-SERVICE/ApiList/sitemng/getCodeInfo.py | 5 +- API-SERVICE/ApiService/ApiServiceConfig.py | 4 +- API-SERVICE/ConnectManager/PostgresManager.py | 29 +++--- API-SERVICE/Utils/CommonUtil.py | 21 +++-- API-SERVICE/Utils/DataBaseUtil.py | 8 +- API-SERVICE/conf/common/api_config.ini | 49 +--------- 44 files changed, 152 insertions(+), 568 deletions(-) delete mode 100644 API-SERVICE/ApiList/common/addTableColumn.py delete mode 100644 API-SERVICE/ApiList/common/commonDelete.py rename API-SERVICE/ApiList/common/{commonMultiExcute.py => commonExecute.py} (64%) delete mode 100644 API-SERVICE/ApiList/common/commonInsert.py delete mode 100644 API-SERVICE/ApiList/common/commonMultiInsert.py delete mode 100644 API-SERVICE/ApiList/common/commonSelectForPaging.py delete mode 100644 API-SERVICE/ApiList/common/commonSelect_origin.py delete mode 100644 API-SERVICE/ApiList/common/commonUpdate.py delete mode 100644 API-SERVICE/ApiList/common/createTable.py delete mode 100644 API-SERVICE/ApiList/common/delTableColumn.py delete mode 100644 API-SERVICE/ApiList/common/deleteTable.py diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index bce5d11b..c396250b 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -4,7 +4,7 @@ from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg, get_token_info, save_file_for_reload, get_exception_info, delete_headers +from Utils.CommonUtil import connect_db, make_res_msg, save_file_for_reload, get_exception_info, delete_headers from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request @@ -65,6 +65,9 @@ def set_route(self) -> None: self.router.add_api_route( "/api/delServerInfo", self.del_server_info, methods=["POST"], tags=["API Server Info"]) + self.router.add_api_route( + "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"]) + db = connect_db() api_info, _ = db.select('SELECT * FROM tb_api_info;') @@ -164,8 +167,13 @@ def del_server_info(self, nm: str) -> Dict: return result + def reload_api(self): + logger.info("Reload API Info") + save_file_for_reload() + result = {"result": 1, "errorMessage": ""} + return result + def get_api_list(self) -> Dict: - # logger.error("TEST") try: db = connect_db() diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py deleted file mode 100644 index 4a1b63fe..00000000 --- a/API-SERVICE/ApiList/common/addTableColumn.py +++ /dev/null @@ -1,89 +0,0 @@ -from typing import Dict, List -from fastapi.logger import logger -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel - - -class addTableColumn(BaseModel): - table_nm: str - eng_nm: str - kor_nm: str - data_type: str - - -# column_type : number | string | time | auto_index -# constraint : primary key, unique, not null -''' -abstime : 절대 날짜와 시간 -aclitem : 엑세스 제어 목록 아이템 -bool : 부울런(논리) 값 -box : 2차원 사각형 -bytea : 가변길이의 바이트 배열 -bpchar : 공백 채움 문자 -char : 문자 -char2 : 2 문자의 배열 -char4 : 4 문자의 배열 -char8 : 8문자의 배열 -char16 : 16문자의 배열 -cid : 명령 식별 타입 -date : ANSI SQL 데이터 타입 -datetime : 범용 날짜와 시간 -filename : 거대 객체의 파일이름 -int2 : 부호있는 2바이트 정수 -int28 : int2의 8 배열 -int4 : 부호있는 2바이트 정수 -float4 : 단정도 부동소수 -float8 : 배정도 부동소수 -lseg : 2차원 선 구간 -money : 고정 정밀도를 가지는 십진수 타입 -name : 저장 시스템 식별자를 위한 다중 문자 타입 -oid : 객체 식별자 타입 -oid8 : oid의 8 배열 -oidint2 : oid 와 int2의 조합 -oidint4 : oid 와 int4의 조합 -oidchar16 : oid 와 char16의 조합 -path : 열렸거나 닫혀진 선 구간 -point : 2차원 기하학 점 -polygon : 2차원 다각형 (닫혀진 path와 동일) -circle : 2차원 원 (중심점과 반경) -regproc : 등록된 프로시저 -reltime : 상대 날짜와 시간 간격 -smgr : 저장 관리자 -text : 가변길이의 문자 배열 -tid : 튜플 식별자 타입 -time : ANSI SQL 시간 타입 -timespan : 범용 시간 간격 -timestemp : 제한 범위 ISO형식의 날짜와 시간 -tinterval : 시간 간격(절대시작시각과 절대종료시각) -varchar : 가변길이의 문자들 -xid : 트랜잭션 식별자 타입 -''' - - -def api(add_table_columns: List[addTableColumn]) -> Dict: - try: - db = connect_db(config.db_info) - - for add_table_column in add_table_columns: - table_name = add_table_column.table_nm.lower() - - add_column_query = f'ALTER TABLE {table_name} ADD {add_table_column.eng_nm} {add_table_column.data_type};' - db.execute(add_column_query) - - get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' - result, _ = db.select(get_table_id_query) - table_id = result[0]["id"] - column_info_query = f'INSERT INTO tb_table_column_info (table_id, kor_nm, eng_nm) \ - VALUES ({convert_data(table_id)}, \ - {convert_data(add_table_column.kor_nm)}, \ - {convert_data(add_table_column.eng_nm)});' - db.execute(column_info_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/common/commonDelete.py b/API-SERVICE/ApiList/common/commonDelete.py deleted file mode 100644 index f6f29713..00000000 --- a/API-SERVICE/ApiList/common/commonDelete.py +++ /dev/null @@ -1,26 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel - - -class commonDelete(BaseModel): - table_nm: str - key: str - data: Dict - - -def api(common: commonDelete) -> Dict: - delete_query = f'DELETE FROM {common.table_nm} WHERE {common.key} = {convert_data(common.data.get(common.key))};' - - try: - db = connect_db(config.db_info) - db.execute(delete_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/common/commonMultiExcute.py b/API-SERVICE/ApiList/common/commonExecute.py similarity index 64% rename from API-SERVICE/ApiList/common/commonMultiExcute.py rename to API-SERVICE/ApiList/common/commonExecute.py index 912a233b..b1cd4c00 100644 --- a/API-SERVICE/ApiList/common/commonMultiExcute.py +++ b/API-SERVICE/ApiList/common/commonExecute.py @@ -1,19 +1,19 @@ from typing import Dict, List, Optional -from ApiService.ApiServiceConfig import config +from pydantic import BaseModel from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel -class commonMultiExcute(BaseModel): +class commonExecute(BaseModel): method: str table_nm: str data: Dict - key: Optional[str] = None + key: Optional[List[str]] = None -def make_query(excute: commonMultiExcute): +def make_query(excute: commonExecute): method = excute.method + where = [] query = None if method == "INSERT": columns = ", ".join(excute.data.keys()) @@ -22,22 +22,28 @@ def make_query(excute: commonMultiExcute): elif method == "UPDATE": update_data = [ f'{key} = {convert_data(value)}' for key, value in excute.data.items()] + for key in excute.key: + where.append(f'{key} = {convert_data(excute.data.get(key))}') query = f'UPDATE {excute.table_nm} SET {",".join(update_data)}\ - WHERE {excute.key} = {convert_data(excute.data.get(excute.key))};' + WHERE {" AND ".join(where)};' elif method == "DELETE": - query = f'DELETE FROM {excute.table_nm} WHERE {excute.key} = {convert_data(excute.data.get(excute.key))};' + for key in excute.key: + where.append(f'{key} = {convert_data(excute.data.get(key))}') + query = f'DELETE FROM {excute.table_nm} WHERE {" AND ".join(where)};' else: raise ValueError(f"Invalid Method. ({method}))") return query -def api(excute_list: List[commonMultiExcute]) -> Dict: +def api(excute_list: List[commonExecute]) -> Dict: query_list = [] try: for excute in excute_list: query_list.append(make_query(excute)) - db = connect_db(config.db_info) + db = connect_db() + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") db.multiple_excute(query_list) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/common/commonInsert.py b/API-SERVICE/ApiList/common/commonInsert.py deleted file mode 100644 index b2703ec0..00000000 --- a/API-SERVICE/ApiList/common/commonInsert.py +++ /dev/null @@ -1,27 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel - - -class commonInsert(BaseModel): - table_nm: str - data: Dict - - -def api(common: commonInsert) -> Dict: - columns = ", ".join(common.data.keys()) - values = ", ".join(map(convert_data, common.data.values())) - insert_query = f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});' - - try: - db = connect_db(config.db_info) - db.execute(insert_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/common/commonMultiInsert.py b/API-SERVICE/ApiList/common/commonMultiInsert.py deleted file mode 100644 index 307c50db..00000000 --- a/API-SERVICE/ApiList/common/commonMultiInsert.py +++ /dev/null @@ -1,30 +0,0 @@ -from typing import Dict, List -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel - - -class commonMultiInsert(BaseModel): - table_nm: str - data: Dict - - -def api(common_list: List[commonMultiInsert]) -> Dict: - insert_query_list = [] - for common in common_list: - columns = ", ".join(common.data.keys()) - values = ", ".join(map(convert_data, common.data.values())) - insert_query_list.append( - f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});') - - try: - db = connect_db(config.db_info) - db.multiple_excute(insert_query_list) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 91227f0d..386156a7 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -1,5 +1,4 @@ from typing import Dict, List, Optional -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -11,11 +10,21 @@ class joinInfo(BaseModel): key: str +class subWhereInfo(BaseModel): + table_nm: str + key: str + value: str + compare_op: str + op: Optional[str] = "" + + class whereInfo(BaseModel): table_nm: str key: str value: str + compare_op: str op: Optional[str] = "" + sub: Optional[List[subWhereInfo]] = None class orderInfo(BaseModel): @@ -38,36 +47,71 @@ class commonMatchSelect(BaseModel): page_info: Optional[pageInfo] = None +def convert_compare_op(compare_str): + if compare_str == "Equal": + compare_op = "=" + elif compare_str == "Not Equal": + compare_op = "!=" + elif compare_str == "Greater Than": + compare_op = ">" + elif compare_str == "Greater Than or Equal": + compare_op = ">=" + elif compare_str == "Less Than": + compare_op = "<" + elif compare_str == "Less Than or Equal": + compare_op = "<=" + else: + compare_op = compare_str + return compare_op + + +def make_where_info(where): + if where.compare_op == "IN" or where.compare_op == "NOT IN": + value_list = ", ".join( + map(convert_data, where.value.split(","))) + value = f'( {value_list} )' + else: + value = convert_data(where.value) + return value + + def make_select_query(select_info: commonMatchSelect): join, where, order, page = "", "", "", "" join_info, where_info, order_info, page_info = select_info.join_info, select_info.where_info, select_info.order_info, select_info.page_info if join_info: join = f'JOIN {join_info.table_nm} ON {select_info.table_nm}.{select_info.key} = {join_info.table_nm}.{join_info.key}' if where_info: - where = "WHERE " for info in where_info: - where = f'{where} {info.op} {info.table_nm}.{info.key} = {convert_data(info.value)}' + value = make_where_info(info) + if info.sub: + sub_where = f"{info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}" + for sub_info in info.sub: + sub_value = make_where_info(sub_info) + sub_where = f"{sub_where} {sub_info.op} {sub_info.table_nm}.{sub_info.key} {convert_compare_op(sub_info.compare_op)} {sub_value}" + where = f'{where} {info.op} ({sub_where})' + else: + where = f'{where} {info.op} {info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}' + where = f'WHERE {where}' if order_info: order = f'ORDER BY {order_info.table_nm}.{order_info.key} {order_info.order}' if page_info: page = f'LIMIT {page_info.per_page} OFFSET ({page_info.per_page} * {page_info.cur_page - 1})' - query = f'SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};' - return query + select_query = f'SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};' + count_query = f'SELECT count(*) FROM {select_info.table_nm} {join} {where};' + return select_query, count_query def api(select_info: commonMatchSelect) -> Dict: get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ - WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(select_info.table_nm)});" - get_query = make_select_query(select_info) + WHERE table_id = (SELECT table_id FROM tb_table_list WHERE table_nm = {convert_data(select_info.table_nm)});" + get_query, total_cnt_query = make_select_query(select_info) logger.info(f'Get Query : {get_query}') try: - db = connect_db(config.db_info) + db = connect_db() select_data, _ = db.select(get_query) if select_info.page_info: - total_cnt_query = f"SELECT count(*) AS totalCount FROM {select_info.table_nm};" total_cnt = db.select(total_cnt_query) - except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/ApiList/common/commonSelectForPaging.py b/API-SERVICE/ApiList/common/commonSelectForPaging.py deleted file mode 100644 index 1c3ac9aa..00000000 --- a/API-SERVICE/ApiList/common/commonSelectForPaging.py +++ /dev/null @@ -1,34 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data - - -def api(table_nm: str, perPage: int, curPage: int) -> Dict: - curPage = curPage - 1 - - get_query = f'SELECT * FROM {table_nm}\ - ORDER BY idx\ - LIMIT {perPage}\ - OFFSET ({perPage} * {curPage});' - - get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ - WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_nm)});" - total_cnt_query = f"SELECT count(*) AS totalCount FROM {table_nm};" - - try: - db = connect_db(config.db_info) - use_data, _ = db.select(get_query) - total_cnt = db.select(total_cnt_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - column_info, _ = db.select(get_column_info) - kor_nm_list = [map_data["kor_nm"] for map_data in column_info] - eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - - result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) - result["data"].update(total_cnt[0][0]) - - return result diff --git a/API-SERVICE/ApiList/common/commonSelect_origin.py b/API-SERVICE/ApiList/common/commonSelect_origin.py deleted file mode 100644 index 3bdc7505..00000000 --- a/API-SERVICE/ApiList/common/commonSelect_origin.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data - - -def api(table_nm: str) -> Dict: - get_query = f'SELECT * FROM {table_nm};' - get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ - WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_nm)});" - - try: - db = connect_db(config.db_info) - use_data, _ = db.select(get_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - column_info, _ = db.select(get_column_info) - kor_nm_list = [map_data["kor_nm"] for map_data in column_info] - eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - - result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) - - return result diff --git a/API-SERVICE/ApiList/common/commonUpdate.py b/API-SERVICE/ApiList/common/commonUpdate.py deleted file mode 100644 index d2ede80f..00000000 --- a/API-SERVICE/ApiList/common/commonUpdate.py +++ /dev/null @@ -1,29 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel - - -class commonUpdate(BaseModel): - table_nm: str - key: str - data: Dict - - -def api(common: commonUpdate) -> Dict: - update_data = [ - f'{key} = {convert_data(value)}' for key, value in common.data.items()] - update_query = f'UPDATE {common.table_nm} SET {",".join(update_data)}\ - WHERE {common.key} = {convert_data(common.data.get(common.key))};' - - try: - db = connect_db(config.db_info) - db.execute(update_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/common/createTable.py b/API-SERVICE/ApiList/common/createTable.py deleted file mode 100644 index 8e92216d..00000000 --- a/API-SERVICE/ApiList/common/createTable.py +++ /dev/null @@ -1,92 +0,0 @@ -from typing import Dict -from fastapi.logger import logger -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel -import uuid - - -class createTable(BaseModel): - ctgry: str - table_nm: str - - -# column_type : number | string | time -# constraint : primary key, unique, not null -default_info = { - "default_columns": [ - - ] -} -''' - { - "eng_nm": "use_dataset_id", - "kor_nm": "활용 데이터셋 아이디", - "type": "string", - "constraint": ["primary key"] - }, - { - "eng_nm": "apyr", - "kor_nm": "신청자", - "type": "string", - "length": 64, - "constraint": ["not null"] - } -''' - - -def make_default_column(default_info): - default_columns = ["idx serial4 not null"] - for info in default_info: - default_columns.append( - f'{info["eng_nm"]} {info["type"]} {" ".join(info["constraint"])}') - - return default_columns - - -def make_ddl(category: str, table_name: str, config: Dict): - default_info = config["default_columns"] - default_columns = make_default_column(default_info) - - ddl = f'CREATE TABLE {category}.{table_name} ({",".join(default_columns)});' - - return ddl - - -def make_column_info(table_id, config): - column_info_query = [] - default_info = config["default_columns"] - for info in default_info: - column_info_query.append(f'INSERT INTO tb_table_column_info (table_id, kor_nm, eng_nm) \ - VALUES ({convert_data(table_id)}, \ - {convert_data(info["kor_nm"])}, \ - {convert_data(info["eng_nm"])});') - return column_info_query - - -def api(create_table: createTable) -> Dict: - category = create_table.ctgry.lower() - table_name = create_table.table_nm.lower() - - try: - db = connect_db(config.db_info) - ddl = make_ddl(category, table_name, default_info) - db.execute(f"DROP TABLE IF EXISTS {table_name}") - db.execute(ddl) - - table_id = uuid.uuid4() - table_info_query = f'INSERT INTO tb_table_list (table_nm, id) \ - VALUES ({convert_data(table_name)}, {convert_data(table_id)});' - db.execute(table_info_query) - - column_info_query = make_column_info(table_id, default_info) - for query in column_info_query: - db.execute(query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/common/delTableColumn.py b/API-SERVICE/ApiList/common/delTableColumn.py deleted file mode 100644 index 3f10cf8d..00000000 --- a/API-SERVICE/ApiList/common/delTableColumn.py +++ /dev/null @@ -1,39 +0,0 @@ -from typing import Dict -from fastapi.logger import logger -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel - - -class delTableColumn(BaseModel): - table_nm: str - eng_nm: str - -# column_type : number | string | time -# constraint : primary key, unique, not null - - -def api(del_table_column: delTableColumn) -> Dict: - table_name = del_table_column.table_nm.lower() - - del_column_query = f'ALTER TABLE {table_name} DROP {del_table_column.eng_nm};' - - try: - db = connect_db(config.db_info) - db.execute(del_column_query) - - get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' - result, _ = db.select(get_table_id_query) - - table_id = result[0]["id"] - column_info_query = f'DELETE FROM tb_table_column_info WHERE eng_nm={convert_data(del_table_column.eng_nm)} \ - AND table_id={convert_data(table_id)};' - db.execute(column_info_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/common/deleteTable.py b/API-SERVICE/ApiList/common/deleteTable.py deleted file mode 100644 index 12059f6b..00000000 --- a/API-SERVICE/ApiList/common/deleteTable.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Dict -from fastapi.logger import logger -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data -from pydantic import BaseModel - - -class deleteTable(BaseModel): - table_nm: str - -# column_type : number | string | time -# constraint : primary key, unique, not null - - -def api(delete_table: deleteTable) -> Dict: - table_name = delete_table.table_nm.lower() - - drop_query = f'DROP TABLE {table_name};' - delete_board_name = f'DELETE FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' - try: - db = connect_db(config.db_info) - db.execute(drop_query) - db.execute(delete_board_name) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index c68b4019..d06e65ef 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -1,6 +1,5 @@ import uuid from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -17,7 +16,7 @@ def api(insert: addChildCategory) -> Dict: VALUES ({convert_data(insert.node_nm)},{convert_data(insert.prnts_id)},{convert_data(uuid.uuid4())});' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/deleteUseBoardData.py b/API-SERVICE/ApiList/meta/deleteUseBoardData.py index 88719ec8..2e42ef7e 100644 --- a/API-SERVICE/ApiList/meta/deleteUseBoardData.py +++ b/API-SERVICE/ApiList/meta/deleteUseBoardData.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -13,7 +12,7 @@ def api(use_board_data: deleteUseBoardData) -> Dict: delete_biz_meta_query = f'DELETE FROM tb_board_use WHERE use_dataset_id = {convert_data(use_board_data.use_dataset_id)};' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(delete_biz_meta_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py index c3f4f48a..99aee2b3 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -9,7 +8,7 @@ def api(datasetId: str = None) -> Dict: v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' try: - db = connect_db(config.db_info) + db = connect_db() meta_wrap = db.select(v_meta_wrap_query) meta_map = db.select(v_meta_map_query) diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py index 82389597..cfb9498e 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -8,7 +7,7 @@ def api(datasetId: str = None) -> Dict: v_meta_dq_query = f'SELECT * FROM tb_meta_detail_dq WHERE biz_dataset_id = {convert_data(datasetId)}' try: - db = connect_db(config.db_info) + db = connect_db() meta_dq = db.select(v_meta_dq_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py index e0045d0b..e95651fe 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -8,7 +7,7 @@ def api(datasetId: str = None) -> Dict: v_meta_files_query = f'SELECT * FROM tb_meta_detail_files WHERE biz_dataset_id = {convert_data(datasetId)}' try: - db = connect_db(config.db_info) + db = connect_db() meta_files = db.select(v_meta_files_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py index db33bd08..6b1f08cb 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data from io import StringIO @@ -20,7 +19,7 @@ def api(datasetId: str = None) -> Dict: v_meta_sample_query = f'SELECT * FROM tb_meta_detail_sampledata WHERE biz_dataset_id = {convert_data(datasetId)}' try: - db = connect_db(config.db_info) + db = connect_db() meta_sample, _ = db.select(v_meta_sample_query) data_list, column_list = csv_to_dict(meta_sample[0]["sample_contents"]) except Exception: diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 0a6f4409..fd7ab23d 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info @@ -14,7 +13,7 @@ def api(perPage: int, v_meta_wrap_query = "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM v_biz_meta_wrap" try: - db = connect_db(config.db_info) + db = connect_db() search_word_list = [keyword1, keyword2, keyword3] if any(search_word_list): order_condition = [] diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index a9f20ff2..bc9d402c 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info @@ -7,7 +6,7 @@ def api() -> Dict: category_query = 'SELECT * FROM tb_category ORDER BY prnts_id, node_id;' try: - db = connect_db(config.db_info) + db = connect_db() category_list = db.select(category_query)[0] except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getCategoryTree.py b/API-SERVICE/ApiList/meta/getCategoryTree.py index 8ed0e87c..b18aacf7 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info @@ -7,7 +6,7 @@ def api() -> Dict: get_category_list = "SELECT * FROM tb_category;" try: - db = connect_db(config.db_info) + db = connect_db() category_list, _ = db.select(get_category_list) node_dict = {} diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 9002a118..04854458 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -11,7 +10,7 @@ def api(nameId: str = None) -> Dict: query = f'SELECT * FROM tb_biz_meta_name WHERE nm_id = {convert_data(nameId)}' try: - db = connect_db(config.db_info) + db = connect_db() meta_name = db.select(query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py index 548bb165..c9024f2f 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -10,7 +9,7 @@ def api(apyr: str) -> Dict: WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" try: - db = connect_db(config.db_info) + db = connect_db() use_data, _ = db.select(get_use_data_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py index ca0419a1..3f272d77 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info @@ -15,7 +14,7 @@ def api(perPage: int, curPage: int) -> Dict: total_cnt_query = "SELECT count(*) AS totalCount FROM tb_board_use;" try: - db = connect_db(config.db_info) + db = connect_db() use_data, _ = db.select(get_use_data_query) total_cnt = db.select(total_cnt_query) except Exception: diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index ca0c2248..2592d905 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -1,6 +1,5 @@ import uuid from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data @@ -12,7 +11,7 @@ def api(biz_meta_list: list) -> Dict: biz_meta_query = 'SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;' try: - db = connect_db(config.db_info) + db = connect_db() for biz_meta in biz_meta_list: item_id, item_val = tuple(biz_meta.values()) query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val ) \ diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py index 9fbb21ba..fe8f6fef 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -1,6 +1,5 @@ import uuid from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -35,7 +34,7 @@ def api(biz_meta_data: insertBizMetaData) -> Dict: get_column_info = 'SELECT item_id, eng_nm FROM v_biz_meta;' try: - db = connect_db(config.db_info) + db = connect_db() column_info, _ = db.select(get_column_info) biz_meta_data = biz_meta_data.dict() diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py index b2e3ac1d..0ca21369 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -1,7 +1,6 @@ import uuid from typing import Dict from pydantic import BaseModel -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data @@ -41,7 +40,7 @@ def api(insert: NmIdList) -> Dict: FROM tb_biz_meta\ GROUP BY biz_dataset_id" try: - db = connect_db(config.db_info) + db = connect_db() nm_id_set = {_["nm_id"] for _ in db.select(nm_id_query)[0]} req_nm_ids = set(insert.nm_id_list) diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index e8768ec2..91774ba4 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -1,7 +1,6 @@ import uuid import string from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel, Field @@ -24,7 +23,7 @@ def api(insert: InsertMetaName) -> Dict: symbol_list.remove("-") select_eng_nm = 'SELECT eng_nm FROM tb_biz_meta_name' try: - db = connect_db(config.db_info) + db = connect_db() eng_nm_list = db.select(select_eng_nm)[0] # 중복 체크 diff --git a/API-SERVICE/ApiList/meta/insertSampleData.py b/API-SERVICE/ApiList/meta/insertSampleData.py index 0f291d0b..32eab81f 100644 --- a/API-SERVICE/ApiList/meta/insertSampleData.py +++ b/API-SERVICE/ApiList/meta/insertSampleData.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -13,11 +12,11 @@ class isnertSampleData(BaseModel): file_extension: str = "csv" -def api(file_path: str,sample_data: isnertSampleData) -> Dict: +def api(file_path: str, sample_data: isnertSampleData) -> Dict: try: - db = connect_db(config.db_info) - with open(f'{file_path}/{sample_data.file_nm}.{sample_data.file_extension}','r',encoding='cp949') as fp: - data = fp.read().replace("'","''").split("\n") + db = connect_db() + with open(f'{file_path}/{sample_data.file_nm}.{sample_data.file_extension}', 'r', encoding='cp949') as fp: + data = fp.read().replace("'", "''").split("\n") sample_data.sample_contents = '\n'.join(data) insert_sample_query = f'INSERT INTO tb_meta_detail_sampledata(biz_dataset_id, sample_contents, column_seperator, column_count, file_nm, file_extension) \ @@ -31,4 +30,3 @@ def api(file_path: str,sample_data: isnertSampleData) -> Dict: else: result = {"result": 1, "errorMessage": ""} return result - diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index d4326748..157d7688 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -1,6 +1,5 @@ from typing import Dict import uuid -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info, convert_error_message from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -18,7 +17,7 @@ def api(use_board_data: insertUseBoardData) -> Dict: WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' try: - db = connect_db(config.db_info) + db = connect_db() biz_dataset, _ = db.select(get_biz_meta_query) biz_dataset = biz_dataset[0] diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py index aae6071f..01641b1b 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info @@ -15,7 +14,7 @@ def api() -> Dict: ON tbmm.nm_id = tbmn.nm_id;" try: - db = connect_db(config.db_info) + db = connect_db() meta_map = db.select(meta_map_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py index a2ec41b4..b98f13e9 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info @@ -28,7 +27,7 @@ def api(perPage: int, curPage: int) -> Dict: total_cnt_query = "SELECT count(*) AS totalCount FROM tb_biz_meta_name" try: - db = connect_db(config.db_info) + db = connect_db() meta_name = db.select(meta_name_query) total_cnt = db.select(total_cnt_query) except Exception: diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index d094b99d..6040b649 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -12,7 +11,7 @@ class UpdateBizMeta(BaseModel): def api(update: UpdateBizMeta) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() for data in update.dataList: query = f'UPDATE tb_biz_meta\ SET item_id = {convert_data(data["itemId"])},\ diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index d6241e56..908edadd 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,5 +1,4 @@ import uuid -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -19,7 +18,7 @@ def api(update: UpdateCategory) -> Dict: node_nm = {convert_data(update.node_nm)}\ WHERE node_id = {convert_data(update.node_id)};' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py index fa0f7bdd..ec059921 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel, Field @@ -22,7 +21,7 @@ def api(update: UpdatetMetaName) -> Dict: WHERE nm_id = {convert_data(update.nm_id)};' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/updateUseBoardData.py b/API-SERVICE/ApiList/meta/updateUseBoardData.py index 028ec1b9..473d95d6 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from pydantic import BaseModel @@ -18,7 +17,7 @@ def api(use_board_data: updateUseBoardData) -> Dict: WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' try: - db = connect_db(config.db_info) + db = connect_db() biz_dataset, _ = db.select(get_biz_meta_query) biz_dataset = biz_dataset[0] diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py index 938b9e94..cfce1856 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info @@ -22,7 +21,7 @@ def api() -> Dict: ORDER BY tbmn.nm_id;" try: - db = connect_db(config.db_info) + db = connect_db() meta_name = db.select(meta_name_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/sitemng/getCodeInfo.py b/API-SERVICE/ApiList/sitemng/getCodeInfo.py index 4575f6ba..d0941f31 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeInfo.py +++ b/API-SERVICE/ApiList/sitemng/getCodeInfo.py @@ -1,5 +1,4 @@ from typing import Dict -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data @@ -9,7 +8,7 @@ def api(groupId) -> Dict: FROM tb_code_detail \ WHERE code_group_id = {convert_data(groupId)};' try: - db = connect_db(config.db_info) + db = connect_db() code_list = db.select(get_code_info_query) except Exception: except_name = get_exception_info() @@ -23,4 +22,4 @@ def api(groupId) -> Dict: body = {"list": code_info} result = {"result": 1, "errorMessage": "", "data": body} - return result \ No newline at end of file + return result diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 2b83bd10..a9d5a64f 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -1,4 +1,5 @@ -from typing import Dict, List +from typing import Dict +from psycopg2 import pool class ApiServiceConfig: @@ -17,6 +18,7 @@ class ApiServiceConfig: api_config: Dict secret_info: Dict + conn_pool: pool.SimpleConnectionPool config = ApiServiceConfig diff --git a/API-SERVICE/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index 30eda8ff..bcd67555 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -1,24 +1,18 @@ import psycopg2 from typing import List, Dict, Tuple, Any +from ApiService.ApiServiceConfig import config from fastapi.logger import logger from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query class PostgresManager: - def __init__(self, host: str, port: str, user: str, password: str, database: str, schema: str) -> None: - self.host = host - self.port = port - self.user = user - self.password = password - self.database = database - self.schema = schema + def __init__(self) -> None: self.conn = self.connect() self.cursor = self.conn.cursor() def connect(self): - conn = psycopg2.connect(host=self.host, port=self.port, user=self.user, - password=self.password, database=self.database, - options=f"-c search_path={self.schema}") + conn = config.conn_pool.getconn() + logger.info("PostgresManager Connect.") return conn @@ -27,6 +21,17 @@ def execute(self, sql: str) -> None: self.conn.commit() logger.info(f'PostgresManager Execute Result. ({sql})') + def multiple_excute(self, sql_list: list) -> None: + try: + for index, sql in enumerate(sql_list): + logger.info( + f'PostgresManager Multiple Execute. ({index}. {sql})') + self.cursor.execute(sql) + self.conn.commit() + except (Exception, psycopg2.DatabaseError): + self.conn.rollback() + raise psycopg2.DatabaseError + def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], List[Any]]: self.execute(sql) column_names = [desc[0] for desc in self.cursor.description] @@ -61,5 +66,7 @@ def commit(self): self.conn.commit() def __del__(self) -> None: + logger.info("DB CLOSE") self.cursor.close() - self.conn.close() + # self.conn.close() + config.conn_pool.putconn(self.conn) diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index b14f277b..14b6499c 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,4 +1,3 @@ -from ast import Str import os import configparser import argparse @@ -9,8 +8,7 @@ from typing import Any from ApiService.ApiServiceConfig import config from ConnectManager import PostgresManager -from retry import retry -import psycopg2 +from psycopg2 import pool import jwt import sys import traceback @@ -63,15 +61,22 @@ def prepare_config() -> None: config.server_port = args.port config.db_type = f'{args.db_type}_db' config.db_info = api_router_cfg[config.db_type] + config.conn_pool = make_connection_pool(config.db_info) config.secret_info = api_router_cfg["secret_info"] -@retry(psycopg2.OperationalError, delay=1, tries=3) -def connect_db(db_info): - db = PostgresManager(host=db_info["host"], port=db_info["port"], - user=db_info["user"], password=db_info["password"], - database=db_info["database"], schema=db_info["schema"]) +def make_connection_pool(db_info): + conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], + password=db_info["password"], + host=db_info["host"], + port=db_info["port"], + database=db_info["database"], + options=f'-c search_path={db_info["schema"]}', connect_timeout=10) + return conn_pool + +def connect_db(): + db = PostgresManager() return db diff --git a/API-SERVICE/Utils/DataBaseUtil.py b/API-SERVICE/Utils/DataBaseUtil.py index a19a3942..711a3c87 100644 --- a/API-SERVICE/Utils/DataBaseUtil.py +++ b/API-SERVICE/Utils/DataBaseUtil.py @@ -3,7 +3,13 @@ def convert_data(data) -> str: - return f'\'{str(data)}\'' + data = str(data) + if data: + if data == "now()" or data == "NOW()": + return data + if data[0] == "`": + return data[1:] + return f'\'{data.strip()}\'' def make_table_info_query(db: str, table: str) -> str: diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 9a78de2e..3c739cdb 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -3,52 +3,7 @@ method = POST url = /portal/api/common/commonSelect sub_dir = common -[commonSelectForPaging] -method = GET -url = /portal/api/common/commonSelectForPaging -sub_dir = common - -[commonInsert] -method = POST -url = /portal/api/common/commonInsert -sub_dir = common - -[commonMultiInsert] -method = POST -url = /portal/api/common/commonMultiInsert -sub_dir = common - -[commonMultiExcute] -method = POST -url = /portal/api/common/commonMultiExcute -sub_dir = common - -[commonUpdate] -method = POST -url = /portal/api/common/commonUpdate -sub_dir = common - -[commonDelete] -method = POST -url = /portal/api/common/commonDelete -sub_dir = common - -[createTable] -method = POST -url = /portal/api/common/createTable -sub_dir = common - -[deleteTable] -method = POST -url = /portal/api/common/deleteTable -sub_dir = common - -[addTableColumn] -method = POST -url = /portal/api/common/addTableColumn -sub_dir = common - -[delTableColumn] +[commonExecute] method = POST -url = /portal/api/common/delTableColumn +url = /portal/api/common/commonExecute sub_dir = common \ No newline at end of file From 17bcf3f2eee9d45970b7db0691addde37c1ef553 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 29 Aug 2022 13:36:17 +0900 Subject: [PATCH 154/236] =?UTF-8?q?[AIPLATFORM-631]=20trace=20log=EB=A5=BC?= =?UTF-8?q?=20=EC=9C=84=ED=95=9C=20logger=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 9 +++++++-- API-ROUTER/conf/logging.conf | 21 ++++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index c396250b..2647bab1 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -9,6 +9,9 @@ from pydantic import BaseModel from starlette.requests import Request from urllib import parse +import logging + +trace_logger = logging.getLogger("trace") class ApiServerInfo(BaseModel): @@ -174,11 +177,13 @@ def reload_api(self): return result def get_api_list(self) -> Dict: + trace_logger.info("Trace TEST") + try: db = connect_db() api_info, info_column_names = db.select( - f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info ORDER BY no;') + f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info;') api_params, params_column_names = db.select( f'SELECT * FROM tb_api_params ORDER BY api_nm, nm;') except Exception: @@ -197,7 +202,7 @@ def get_api_category_list(self, ctgry: str) -> Dict: try: db = connect_db() api_info, info_column_names = db.select( - f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info WHERE ctgry = {convert_data(ctgry)} ORDER BY no;') + f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info WHERE ctgry = {convert_data(ctgry)};') for info in api_info: logger.info(f'INFO : {info["api_nm"]}') diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf index 814cd774..cae373ae 100644 --- a/API-ROUTER/conf/logging.conf +++ b/API-ROUTER/conf/logging.conf @@ -1,18 +1,27 @@ [loggers] -keys = root +keys = root,trace [logger_root] level = INFO handlers = console,rotatingFileHandler +[logger_trace] +level = INFO +qualname = trace +handlers = traceHandler +propagate = 0 + [formatters] -keys = default +keys = default,trace [formatter_default] format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s +[formatter_trace] +format = %(asctime)s %(message)s + [handlers] -keys = console,rotatingFileHandler +keys = console,rotatingFileHandler,traceHandler [handler_console] class = StreamHandler @@ -26,3 +35,9 @@ formatter = default args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-ROUTER/log/API-Router.log', 'a', 20000000, 10) level = INFO +[handler_traceHandler] +class = handlers.TimedRotatingFileHandler +formatter = trace +args = ('TRACE.log', 'D', 1) +level = INFO + From ab689f9de33622ec3c0a766829a2f91509a9e43e Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 30 Aug 2022 09:03:21 +0900 Subject: [PATCH 155/236] =?UTF-8?q?[AIPLATFORM-631]=20feat:=20Trace=20logg?= =?UTF-8?q?er=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20Depe?= =?UTF-8?q?nds=20=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/conf/logging.conf | 2 +- API-SERVICE/ApiList/common/commonExecute.py | 11 +++++++++-- API-SERVICE/ApiList/common/commonSelect.py | 11 ++++++++--- API-SERVICE/Utils/CommonUtil.py | 16 ++++++++++++++++ API-SERVICE/conf/common/logging.conf | 21 ++++++++++++++++++--- API-SERVICE/conf/meta/logging.conf | 21 ++++++++++++++++++--- API-SERVICE/conf/sitemng/logging.conf | 20 +++++++++++++++++--- 7 files changed, 87 insertions(+), 15 deletions(-) diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf index cae373ae..5d627442 100644 --- a/API-ROUTER/conf/logging.conf +++ b/API-ROUTER/conf/logging.conf @@ -38,6 +38,6 @@ level = INFO [handler_traceHandler] class = handlers.TimedRotatingFileHandler formatter = trace -args = ('TRACE.log', 'D', 1) +args = ('Router-Trace.log', 'D', 1) level = INFO diff --git a/API-SERVICE/ApiList/common/commonExecute.py b/API-SERVICE/ApiList/common/commonExecute.py index b1cd4c00..715dd2cc 100644 --- a/API-SERVICE/ApiList/common/commonExecute.py +++ b/API-SERVICE/ApiList/common/commonExecute.py @@ -1,8 +1,13 @@ from typing import Dict, List, Optional +from fastapi import Depends +from fastapi.logger import logger from pydantic import BaseModel -from Utils.CommonUtil import connect_db, get_exception_info +import logging +from Utils.CommonUtil import connect_db, get_exception_info, get_transaciton_id from Utils.DataBaseUtil import convert_data +trace_logger = logging.getLogger("trace") + class commonExecute(BaseModel): method: str @@ -35,8 +40,10 @@ def make_query(excute: commonExecute): return query -def api(excute_list: List[commonExecute]) -> Dict: +def api(excute_list: List[commonExecute], transaction_id: str = Depends(get_transaciton_id)) -> Dict: query_list = [] + trace_logger.info(f'get_transaciton_id : {transaction_id}') + try: for excute in excute_list: query_list.append(make_query(excute)) diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 386156a7..632ef9a0 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -1,8 +1,12 @@ from typing import Dict, List, Optional -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data +from fastapi import Depends from pydantic import BaseModel from fastapi.logger import logger +import logging +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info, get_transaciton_id +from Utils.DataBaseUtil import convert_data + +trace_logger = logging.getLogger("trace") class joinInfo(BaseModel): @@ -101,12 +105,13 @@ def make_select_query(select_info: commonMatchSelect): return select_query, count_query -def api(select_info: commonMatchSelect) -> Dict: +def api(select_info: commonMatchSelect, transaction_id: str = Depends(get_transaciton_id)) -> Dict: get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ WHERE table_id = (SELECT table_id FROM tb_table_list WHERE table_nm = {convert_data(select_info.table_nm)});" get_query, total_cnt_query = make_select_query(select_info) logger.info(f'Get Query : {get_query}') + trace_logger.info(f'get_transaciton_id : {transaction_id}') try: db = connect_db() select_data, _ = db.select(get_query) diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 14b6499c..43aef433 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -4,6 +4,7 @@ import traceback import starlette.datastructures from fastapi.logger import logger +from fastapi import Request, HTTPException, status from pathlib import Path from typing import Any from ApiService.ApiServiceConfig import config @@ -129,3 +130,18 @@ def convert_error_message(exception_name: str): error_message = exception_name return error_message + + +def get_transaciton_id(request: Request): + try: + transaction_id = request.headers.get("accept") + + except Exception: + transaction_id = 'TEST Message' + ''' + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Transaction information does not exist." + ) + ''' + return transaction_id diff --git a/API-SERVICE/conf/common/logging.conf b/API-SERVICE/conf/common/logging.conf index b8a39ccf..7a6ab7a0 100644 --- a/API-SERVICE/conf/common/logging.conf +++ b/API-SERVICE/conf/common/logging.conf @@ -1,18 +1,27 @@ [loggers] -keys = root +keys = root,trace [logger_root] level = INFO handlers = console,rotatingFileHandler +[logger_trace] +level = INFO +qualname = trace +handlers = traceHandler +propagate = 0 + [formatters] -keys = default +keys = default,trace [formatter_default] format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s +[formatter_trace] +format = %(asctime)s %(message)s + [handlers] -keys = console,rotatingFileHandler +keys = console,rotatingFileHandler,traceHandler [handler_console] class = StreamHandler @@ -26,3 +35,9 @@ formatter = default args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/common/common.log', 'a', 20000000, 10) level = INFO +[handler_traceHandler] +class = handlers.TimedRotatingFileHandler +formatter = trace +args = ('Common-Trace.log', 'D', 1) +level = INFO + diff --git a/API-SERVICE/conf/meta/logging.conf b/API-SERVICE/conf/meta/logging.conf index d0c28c96..444fb4db 100644 --- a/API-SERVICE/conf/meta/logging.conf +++ b/API-SERVICE/conf/meta/logging.conf @@ -1,18 +1,27 @@ [loggers] -keys = root +keys = root,trace [logger_root] level = INFO handlers = console,rotatingFileHandler +[logger_trace] +level = INFO +qualname = trace +handlers = traceHandler +propagate = 0 + [formatters] -keys = default +keys = default,trace [formatter_default] format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s +[formatter_trace] +format = %(asctime)s %(message)s + [handlers] -keys = console,rotatingFileHandler +keys = console,rotatingFileHandler,traceHandler [handler_console] class = StreamHandler @@ -26,3 +35,9 @@ formatter = default args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/meta/meta.log', 'a', 20000000, 10) level = INFO +[handler_traceHandler] +class = handlers.TimedRotatingFileHandler +formatter = trace +args = ('Meta-Trace.log', 'D', 1) +level = INFO + diff --git a/API-SERVICE/conf/sitemng/logging.conf b/API-SERVICE/conf/sitemng/logging.conf index 3dcefc49..6a6c0ba0 100644 --- a/API-SERVICE/conf/sitemng/logging.conf +++ b/API-SERVICE/conf/sitemng/logging.conf @@ -1,18 +1,27 @@ [loggers] -keys = root +keys = root,trace [logger_root] level = INFO handlers = console,rotatingFileHandler +[logger_trace] +level = INFO +qualname = trace +handlers = traceHandler +propagate = 0 + [formatters] -keys = default +keys = default,trace [formatter_default] format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s +[formatter_trace] +format = %(asctime)s %(message)s + [handlers] -keys = console,rotatingFileHandler +keys = console,rotatingFileHandler,traceHandler [handler_console] class = StreamHandler @@ -26,3 +35,8 @@ formatter = default args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/sitemng/sitemng.log', 'a', 20000000, 10) level = INFO +[handler_traceHandler] +class = handlers.TimedRotatingFileHandler +formatter = trace +args = ('Sitemng-Trace.log', 'D', 1) +level = INFO From a766b06c0b81a18a88f8fe2a5617a1d2553fb647 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 27 Sep 2022 14:45:06 +0900 Subject: [PATCH 156/236] =?UTF-8?q?[AIPLATFORM-780]=20service=20wheel=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/commonExecute.py | 61 ----------------- API-SERVICE/ApiService/ApiService.py | 12 ++-- API-SERVICE/ApiService/ApiServiceConfig.py | 1 + API-SERVICE/ServiceApiList/__init__.py | 3 + API-SERVICE/ServiceApiList/common/__init__.py | 2 + .../ServiceApiList/common/commonExecute.py | 66 +++++++++++++++++++ .../common/commonSelect.py | 46 ++++++------- API-SERVICE/ServiceApiList/meta/__init__.py | 25 +++++++ .../meta/addChildCategory.py | 3 +- .../meta/deleteUseBoardData.py | 3 +- .../meta/getBizMetaDetail.py | 3 +- .../meta/getBizMetaDetailDq.py | 3 +- .../meta/getBizMetaDetailFiles.py | 3 +- .../meta/getBizMetaDetailSample.py | 3 +- .../meta/getBizMetaList.py | 2 +- .../meta/getCategoryList.py | 2 +- .../meta/getCategoryTree.py | 2 +- .../meta/getMetaNameDetail.py | 3 +- .../meta/getUseBoardDataDetail.py | 3 +- .../meta/getUseBoardDataList.py | 2 +- .../meta/insertBizMeta.py | 3 +- .../meta/insertBizMetaData.py | 3 +- .../meta/insertMetaMap.py | 3 +- .../meta/insertMetaName.py | 3 +- .../meta/insertSampleData.py | 3 +- .../meta/insertUseBoardData.py | 5 +- .../meta/metaMapList.py | 2 +- .../meta/metaNameList.py | 2 +- .../meta/updateBizMeta.py | 3 +- .../meta/updateCategory.py | 3 +- .../meta/updateMetaName.py | 3 +- .../meta/updateUseBoardData.py | 3 +- .../meta/useMetaNameList.py | 2 +- .../ServiceApiList/sitemng/__init__.py | 1 + .../sitemng/getCodeInfo.py | 3 +- .../PostgresManager.py | 19 ------ .../__init__.py | 0 .../{Utils => ServiceUtils}/CommonUtil.py | 20 ++++-- API-SERVICE/ServiceUtils/__init__.py | 1 + API-SERVICE/Utils/DataBaseUtil.py | 41 ------------ API-SERVICE/Utils/__init__.py | 2 - API-SERVICE/build.sh | 8 +++ API-SERVICE/server.py | 6 +- API-SERVICE/setup.py | 10 +++ 44 files changed, 196 insertions(+), 201 deletions(-) delete mode 100644 API-SERVICE/ApiList/common/commonExecute.py create mode 100644 API-SERVICE/ServiceApiList/__init__.py create mode 100644 API-SERVICE/ServiceApiList/common/__init__.py create mode 100644 API-SERVICE/ServiceApiList/common/commonExecute.py rename API-SERVICE/{ApiList => ServiceApiList}/common/commonSelect.py (74%) create mode 100644 API-SERVICE/ServiceApiList/meta/__init__.py rename API-SERVICE/{ApiList => ServiceApiList}/meta/addChildCategory.py (86%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/deleteUseBoardData.py (84%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getBizMetaDetail.py (86%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getBizMetaDetailDq.py (79%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getBizMetaDetailFiles.py (80%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getBizMetaDetailSample.py (88%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getBizMetaList.py (96%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getCategoryList.py (86%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getCategoryTree.py (93%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getMetaNameDetail.py (85%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getUseBoardDataDetail.py (87%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/getUseBoardDataList.py (93%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/insertBizMeta.py (90%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/insertBizMetaData.py (93%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/insertMetaMap.py (96%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/insertMetaName.py (93%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/insertSampleData.py (92%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/insertUseBoardData.py (94%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/metaMapList.py (89%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/metaNameList.py (95%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/updateBizMeta.py (88%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/updateCategory.py (87%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/updateMetaName.py (89%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/updateUseBoardData.py (95%) rename API-SERVICE/{ApiList => ServiceApiList}/meta/useMetaNameList.py (93%) create mode 100644 API-SERVICE/ServiceApiList/sitemng/__init__.py rename API-SERVICE/{ApiList => ServiceApiList}/sitemng/getCodeInfo.py (88%) rename API-SERVICE/{ConnectManager => ServiceConnectManager}/PostgresManager.py (66%) rename API-SERVICE/{ConnectManager => ServiceConnectManager}/__init__.py (100%) rename API-SERVICE/{Utils => ServiceUtils}/CommonUtil.py (90%) create mode 100644 API-SERVICE/ServiceUtils/__init__.py delete mode 100644 API-SERVICE/Utils/DataBaseUtil.py delete mode 100644 API-SERVICE/Utils/__init__.py create mode 100755 API-SERVICE/build.sh create mode 100644 API-SERVICE/setup.py diff --git a/API-SERVICE/ApiList/common/commonExecute.py b/API-SERVICE/ApiList/common/commonExecute.py deleted file mode 100644 index 715dd2cc..00000000 --- a/API-SERVICE/ApiList/common/commonExecute.py +++ /dev/null @@ -1,61 +0,0 @@ -from typing import Dict, List, Optional -from fastapi import Depends -from fastapi.logger import logger -from pydantic import BaseModel -import logging -from Utils.CommonUtil import connect_db, get_exception_info, get_transaciton_id -from Utils.DataBaseUtil import convert_data - -trace_logger = logging.getLogger("trace") - - -class commonExecute(BaseModel): - method: str - table_nm: str - data: Dict - key: Optional[List[str]] = None - - -def make_query(excute: commonExecute): - method = excute.method - where = [] - query = None - if method == "INSERT": - columns = ", ".join(excute.data.keys()) - values = ", ".join(map(convert_data, excute.data.values())) - query = f'INSERT INTO {excute.table_nm} ({columns}) VALUES ({values});' - elif method == "UPDATE": - update_data = [ - f'{key} = {convert_data(value)}' for key, value in excute.data.items()] - for key in excute.key: - where.append(f'{key} = {convert_data(excute.data.get(key))}') - query = f'UPDATE {excute.table_nm} SET {",".join(update_data)}\ - WHERE {" AND ".join(where)};' - elif method == "DELETE": - for key in excute.key: - where.append(f'{key} = {convert_data(excute.data.get(key))}') - query = f'DELETE FROM {excute.table_nm} WHERE {" AND ".join(where)};' - else: - raise ValueError(f"Invalid Method. ({method}))") - return query - - -def api(excute_list: List[commonExecute], transaction_id: str = Depends(get_transaciton_id)) -> Dict: - query_list = [] - trace_logger.info(f'get_transaciton_id : {transaction_id}') - - try: - for excute in excute_list: - query_list.append(make_query(excute)) - - db = connect_db() - time_zone = 'Asia/Seoul' - db.execute(f"SET TIMEZONE={convert_data(time_zone)}") - db.multiple_excute(query_list) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index f0d518cb..5d738371 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -12,10 +12,14 @@ def __init__(self) -> None: def set_route(self) -> None: for api_name, api_info in config.api_config.items(): if config.category == api_info["sub_dir"]: - module_path = f'{config.root_path}/ApiList/{api_info["sub_dir"]}/{api_name}.py' - module_name = "api" - spec = importlib.util.spec_from_file_location( - module_name, module_path) + if config.code_type == "source": + module_path = f'{config.root_path}/ServiceApiList/{api_info["sub_dir"]}/{api_name}.py' + module_name = "api" + spec = importlib.util.spec_from_file_location( + module_name, module_path) + else: # wheel + module_name = f'ServiceApiList.{api_info["sub_dir"]}.{api_name}' + spec = importlib.util.find_spec(module_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) self.router.add_api_route(f'{api_info["url"]}', diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index a9d5a64f..4ee53068 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -8,6 +8,7 @@ class ApiServiceConfig: category: str db_type: str + code_type: str db_info: Dict remote_info: Dict diff --git a/API-SERVICE/ServiceApiList/__init__.py b/API-SERVICE/ServiceApiList/__init__.py new file mode 100644 index 00000000..2ee78ade --- /dev/null +++ b/API-SERVICE/ServiceApiList/__init__.py @@ -0,0 +1,3 @@ +from .meta import * +from .sitemng import * +from .common import * diff --git a/API-SERVICE/ServiceApiList/common/__init__.py b/API-SERVICE/ServiceApiList/common/__init__.py new file mode 100644 index 00000000..ce4b2e72 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/__init__.py @@ -0,0 +1,2 @@ +from .commonExecute import * +from .commonSelect import * diff --git a/API-SERVICE/ServiceApiList/common/commonExecute.py b/API-SERVICE/ServiceApiList/common/commonExecute.py new file mode 100644 index 00000000..1addf5cc --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/commonExecute.py @@ -0,0 +1,66 @@ +from typing import Dict, List, Optional +from pydantic import BaseModel +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data + + +class commonExecute(BaseModel): + method: str + table_nm: str + data: Dict + key: Optional[List[str]] = None + + +def make_insert_query(excute: commonExecute): + columns = ", ".join(excute.data.keys()) + values = ", ".join(map(convert_data, excute.data.values())) + return f'INSERT INTO {excute.table_nm} ({columns}) VALUES ({values});' + + +def make_update_query(excute: commonExecute): + where = [] + update_data = [ + f'{key} = {convert_data(value)}' for key, value in excute.data.items()] + for key in excute.key: + where.append(f'{key} = {convert_data(excute.data.get(key))}') + return f'UPDATE {excute.table_nm} SET {",".join(update_data)}\ + WHERE {" AND ".join(where)};' + + +def make_delete_query(excute: commonExecute): + where = [] + for key in excute.key: + where.append(f'{key} = {convert_data(excute.data.get(key))}') + return f'DELETE FROM {excute.table_nm} WHERE {" AND ".join(where)};' + + +def make_execute_query(excute: commonExecute): + method = excute.method + query = None + if method == "INSERT": + query = make_insert_query(excute) + elif method == "UPDATE": + query = make_update_query(excute) + elif method == "DELETE": + query = make_delete_query(excute) + else: + raise ValueError(f"Invalid Method. ({method}))") + return query + + +def api(excute_list: List[commonExecute]) -> Dict: + query_list = [] + try: + for excute in excute_list: + query_list.append(make_execute_query(excute)) + + db = connect_db() + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + db.multiple_excute(query_list) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py similarity index 74% rename from API-SERVICE/ApiList/common/commonSelect.py rename to API-SERVICE/ServiceApiList/common/commonSelect.py index 632ef9a0..471804cb 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -1,12 +1,8 @@ from typing import Dict, List, Optional -from fastapi import Depends +from ApiService.ApiServiceConfig import config +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data from pydantic import BaseModel from fastapi.logger import logger -import logging -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info, get_transaciton_id -from Utils.DataBaseUtil import convert_data - -trace_logger = logging.getLogger("trace") class joinInfo(BaseModel): @@ -42,7 +38,7 @@ class pageInfo(BaseModel): cur_page: int -class commonMatchSelect(BaseModel): +class commonSelect(BaseModel): table_nm: str key: Optional[str] = None join_info: Optional[joinInfo] = None @@ -69,7 +65,7 @@ def convert_compare_op(compare_str): return compare_op -def make_where_info(where): +def make_where_value(where): if where.compare_op == "IN" or where.compare_op == "NOT IN": value_list = ", ".join( map(convert_data, where.value.split(","))) @@ -79,39 +75,45 @@ def make_where_info(where): return value -def make_select_query(select_info: commonMatchSelect): +def make_where_info(where_info: List[whereInfo]): + where = "" + for info in where_info: + value = make_where_value(info) + if info.sub: + sub_where = f"{info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}" + for sub_info in info.sub: + sub_value = make_where_value(sub_info) + sub_where = f"{sub_where} {sub_info.op} {sub_info.table_nm}.{sub_info.key} {convert_compare_op(sub_info.compare_op)} {sub_value}" + where = f'{where} {info.op} ({sub_where})' + else: + where = f'{where} {info.op} {info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}' + return f'WHERE {where}' + + +def make_select_query(select_info: commonSelect): join, where, order, page = "", "", "", "" join_info, where_info, order_info, page_info = select_info.join_info, select_info.where_info, select_info.order_info, select_info.page_info if join_info: join = f'JOIN {join_info.table_nm} ON {select_info.table_nm}.{select_info.key} = {join_info.table_nm}.{join_info.key}' if where_info: - for info in where_info: - value = make_where_info(info) - if info.sub: - sub_where = f"{info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}" - for sub_info in info.sub: - sub_value = make_where_info(sub_info) - sub_where = f"{sub_where} {sub_info.op} {sub_info.table_nm}.{sub_info.key} {convert_compare_op(sub_info.compare_op)} {sub_value}" - where = f'{where} {info.op} ({sub_where})' - else: - where = f'{where} {info.op} {info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}' - where = f'WHERE {where}' + where = make_where_info(where_info) if order_info: order = f'ORDER BY {order_info.table_nm}.{order_info.key} {order_info.order}' if page_info: page = f'LIMIT {page_info.per_page} OFFSET ({page_info.per_page} * {page_info.cur_page - 1})' + select_query = f'SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};' count_query = f'SELECT count(*) FROM {select_info.table_nm} {join} {where};' + return select_query, count_query -def api(select_info: commonMatchSelect, transaction_id: str = Depends(get_transaciton_id)) -> Dict: +def api(select_info: commonSelect) -> Dict: get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ WHERE table_id = (SELECT table_id FROM tb_table_list WHERE table_nm = {convert_data(select_info.table_nm)});" get_query, total_cnt_query = make_select_query(select_info) logger.info(f'Get Query : {get_query}') - trace_logger.info(f'get_transaciton_id : {transaction_id}') try: db = connect_db() select_data, _ = db.select(get_query) diff --git a/API-SERVICE/ServiceApiList/meta/__init__.py b/API-SERVICE/ServiceApiList/meta/__init__.py new file mode 100644 index 00000000..cd2f3104 --- /dev/null +++ b/API-SERVICE/ServiceApiList/meta/__init__.py @@ -0,0 +1,25 @@ +from .addChildCategory import * +from .deleteUseBoardData import * +from .getBizMetaDetail import * +from .getBizMetaDetailDq import * +from .getBizMetaDetailFiles import * +from .getBizMetaDetailSample import * +from .getBizMetaList import * +from .getCategoryList import * +from .getCategoryTree import * +from .getMetaNameDetail import * +from .getUseBoardDataDetail import * +from .getUseBoardDataList import * +from .insertBizMeta import * +from .insertBizMetaData import * +from .insertMetaMap import * +from .insertMetaName import * +from .insertSampleData import * +from .insertUseBoardData import * +from .metaMapList import * +from .metaNameList import * +from .updateBizMeta import * +from .updateCategory import * +from .updateMetaName import * +from .updateUseBoardData import * +from .useMetaNameList import * diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ServiceApiList/meta/addChildCategory.py similarity index 86% rename from API-SERVICE/ApiList/meta/addChildCategory.py rename to API-SERVICE/ServiceApiList/meta/addChildCategory.py index d06e65ef..27737a9a 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ServiceApiList/meta/addChildCategory.py @@ -1,7 +1,6 @@ import uuid from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel diff --git a/API-SERVICE/ApiList/meta/deleteUseBoardData.py b/API-SERVICE/ServiceApiList/meta/deleteUseBoardData.py similarity index 84% rename from API-SERVICE/ApiList/meta/deleteUseBoardData.py rename to API-SERVICE/ServiceApiList/meta/deleteUseBoardData.py index 2e42ef7e..ff84d126 100644 --- a/API-SERVICE/ApiList/meta/deleteUseBoardData.py +++ b/API-SERVICE/ServiceApiList/meta/deleteUseBoardData.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetail.py similarity index 86% rename from API-SERVICE/ApiList/meta/getBizMetaDetail.py rename to API-SERVICE/ServiceApiList/meta/getBizMetaDetail.py index 99aee2b3..f0c0ecaf 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaDetail.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data def api(datasetId: str = None) -> Dict: diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailDq.py similarity index 79% rename from API-SERVICE/ApiList/meta/getBizMetaDetailDq.py rename to API-SERVICE/ServiceApiList/meta/getBizMetaDetailDq.py index cfb9498e..2914e42e 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailDq.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailDq.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data def api(datasetId: str = None) -> Dict: diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailFiles.py similarity index 80% rename from API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py rename to API-SERVICE/ServiceApiList/meta/getBizMetaDetailFiles.py index e95651fe..767f53b0 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailFiles.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailFiles.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data def api(datasetId: str = None) -> Dict: diff --git a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailSample.py similarity index 88% rename from API-SERVICE/ApiList/meta/getBizMetaDetailSample.py rename to API-SERVICE/ServiceApiList/meta/getBizMetaDetailSample.py index 6b1f08cb..755fc562 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetailSample.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailSample.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data from io import StringIO import csv diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getBizMetaList.py similarity index 96% rename from API-SERVICE/ApiList/meta/getBizMetaList.py rename to API-SERVICE/ServiceApiList/meta/getBizMetaList.py index fd7ab23d..3bd2a938 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaList.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info +from ServiceUtils.CommonUtil import connect_db, get_exception_info def api(perPage: int, diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ServiceApiList/meta/getCategoryList.py similarity index 86% rename from API-SERVICE/ApiList/meta/getCategoryList.py rename to API-SERVICE/ServiceApiList/meta/getCategoryList.py index bc9d402c..53c05df7 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ServiceApiList/meta/getCategoryList.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info +from ServiceUtils.CommonUtil import connect_db, get_exception_info def api() -> Dict: diff --git a/API-SERVICE/ApiList/meta/getCategoryTree.py b/API-SERVICE/ServiceApiList/meta/getCategoryTree.py similarity index 93% rename from API-SERVICE/ApiList/meta/getCategoryTree.py rename to API-SERVICE/ServiceApiList/meta/getCategoryTree.py index b18aacf7..65365477 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ServiceApiList/meta/getCategoryTree.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info def api() -> Dict: diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ServiceApiList/meta/getMetaNameDetail.py similarity index 85% rename from API-SERVICE/ApiList/meta/getMetaNameDetail.py rename to API-SERVICE/ServiceApiList/meta/getMetaNameDetail.py index 04854458..d68dc88c 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ServiceApiList/meta/getMetaNameDetail.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data def api(nameId: str = None) -> Dict: diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ServiceApiList/meta/getUseBoardDataDetail.py similarity index 87% rename from API-SERVICE/ApiList/meta/getUseBoardDataDetail.py rename to API-SERVICE/ServiceApiList/meta/getUseBoardDataDetail.py index c9024f2f..666bd020 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ServiceApiList/meta/getUseBoardDataDetail.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data def api(apyr: str) -> Dict: diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ServiceApiList/meta/getUseBoardDataList.py similarity index 93% rename from API-SERVICE/ApiList/meta/getUseBoardDataList.py rename to API-SERVICE/ServiceApiList/meta/getUseBoardDataList.py index 3f272d77..4604a6f2 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ServiceApiList/meta/getUseBoardDataList.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info def api(perPage: int, curPage: int) -> Dict: diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ServiceApiList/meta/insertBizMeta.py similarity index 90% rename from API-SERVICE/ApiList/meta/insertBizMeta.py rename to API-SERVICE/ServiceApiList/meta/insertBizMeta.py index 2592d905..d54802c2 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ServiceApiList/meta/insertBizMeta.py @@ -1,7 +1,6 @@ import uuid from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data def api(biz_meta_list: list) -> Dict: diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ServiceApiList/meta/insertBizMetaData.py similarity index 93% rename from API-SERVICE/ApiList/meta/insertBizMetaData.py rename to API-SERVICE/ServiceApiList/meta/insertBizMetaData.py index fe8f6fef..ef3f81ee 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/insertBizMetaData.py @@ -1,7 +1,6 @@ import uuid from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel diff --git a/API-SERVICE/ApiList/meta/insertMetaMap.py b/API-SERVICE/ServiceApiList/meta/insertMetaMap.py similarity index 96% rename from API-SERVICE/ApiList/meta/insertMetaMap.py rename to API-SERVICE/ServiceApiList/meta/insertMetaMap.py index 0ca21369..990a7d0d 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ServiceApiList/meta/insertMetaMap.py @@ -1,8 +1,7 @@ import uuid from typing import Dict from pydantic import BaseModel -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data class NmIdList(BaseModel): diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ServiceApiList/meta/insertMetaName.py similarity index 93% rename from API-SERVICE/ApiList/meta/insertMetaName.py rename to API-SERVICE/ServiceApiList/meta/insertMetaName.py index 91774ba4..ebd332d3 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ServiceApiList/meta/insertMetaName.py @@ -1,8 +1,7 @@ import uuid import string from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel, Field diff --git a/API-SERVICE/ApiList/meta/insertSampleData.py b/API-SERVICE/ServiceApiList/meta/insertSampleData.py similarity index 92% rename from API-SERVICE/ApiList/meta/insertSampleData.py rename to API-SERVICE/ServiceApiList/meta/insertSampleData.py index 32eab81f..47df9b25 100644 --- a/API-SERVICE/ApiList/meta/insertSampleData.py +++ b/API-SERVICE/ServiceApiList/meta/insertSampleData.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ServiceApiList/meta/insertUseBoardData.py similarity index 94% rename from API-SERVICE/ApiList/meta/insertUseBoardData.py rename to API-SERVICE/ServiceApiList/meta/insertUseBoardData.py index 157d7688..3d6b0777 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ServiceApiList/meta/insertUseBoardData.py @@ -1,9 +1,8 @@ +from datetime import datetime, timedelta from typing import Dict import uuid -from Utils.CommonUtil import connect_db, get_exception_info, convert_error_message -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_error_message, convert_data from pydantic import BaseModel -from datetime import datetime, timedelta class insertUseBoardData(BaseModel): diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ServiceApiList/meta/metaMapList.py similarity index 89% rename from API-SERVICE/ApiList/meta/metaMapList.py rename to API-SERVICE/ServiceApiList/meta/metaMapList.py index 01641b1b..02a750a4 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ServiceApiList/meta/metaMapList.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info def api() -> Dict: diff --git a/API-SERVICE/ApiList/meta/metaNameList.py b/API-SERVICE/ServiceApiList/meta/metaNameList.py similarity index 95% rename from API-SERVICE/ApiList/meta/metaNameList.py rename to API-SERVICE/ServiceApiList/meta/metaNameList.py index b98f13e9..975b166d 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ServiceApiList/meta/metaNameList.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info def api(perPage: int, curPage: int) -> Dict: diff --git a/API-SERVICE/ApiList/meta/updateBizMeta.py b/API-SERVICE/ServiceApiList/meta/updateBizMeta.py similarity index 88% rename from API-SERVICE/ApiList/meta/updateBizMeta.py rename to API-SERVICE/ServiceApiList/meta/updateBizMeta.py index 6040b649..c64800e7 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ServiceApiList/meta/updateBizMeta.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ServiceApiList/meta/updateCategory.py similarity index 87% rename from API-SERVICE/ApiList/meta/updateCategory.py rename to API-SERVICE/ServiceApiList/meta/updateCategory.py index 908edadd..3e6cbfef 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ServiceApiList/meta/updateCategory.py @@ -1,6 +1,5 @@ import uuid -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel from typing import Dict diff --git a/API-SERVICE/ApiList/meta/updateMetaName.py b/API-SERVICE/ServiceApiList/meta/updateMetaName.py similarity index 89% rename from API-SERVICE/ApiList/meta/updateMetaName.py rename to API-SERVICE/ServiceApiList/meta/updateMetaName.py index ec059921..59bef571 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ServiceApiList/meta/updateMetaName.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel, Field diff --git a/API-SERVICE/ApiList/meta/updateUseBoardData.py b/API-SERVICE/ServiceApiList/meta/updateUseBoardData.py similarity index 95% rename from API-SERVICE/ApiList/meta/updateUseBoardData.py rename to API-SERVICE/ServiceApiList/meta/updateUseBoardData.py index 473d95d6..5766239a 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ServiceApiList/meta/updateUseBoardData.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel from datetime import datetime, timedelta diff --git a/API-SERVICE/ApiList/meta/useMetaNameList.py b/API-SERVICE/ServiceApiList/meta/useMetaNameList.py similarity index 93% rename from API-SERVICE/ApiList/meta/useMetaNameList.py rename to API-SERVICE/ServiceApiList/meta/useMetaNameList.py index cfce1856..902a106b 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ServiceApiList/meta/useMetaNameList.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info def api() -> Dict: diff --git a/API-SERVICE/ServiceApiList/sitemng/__init__.py b/API-SERVICE/ServiceApiList/sitemng/__init__.py new file mode 100644 index 00000000..19e4a3ce --- /dev/null +++ b/API-SERVICE/ServiceApiList/sitemng/__init__.py @@ -0,0 +1 @@ +from .getCodeInfo import * diff --git a/API-SERVICE/ApiList/sitemng/getCodeInfo.py b/API-SERVICE/ServiceApiList/sitemng/getCodeInfo.py similarity index 88% rename from API-SERVICE/ApiList/sitemng/getCodeInfo.py rename to API-SERVICE/ServiceApiList/sitemng/getCodeInfo.py index d0941f31..bdeadb13 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeInfo.py +++ b/API-SERVICE/ServiceApiList/sitemng/getCodeInfo.py @@ -1,6 +1,5 @@ from typing import Dict -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data def api(groupId) -> Dict: diff --git a/API-SERVICE/ConnectManager/PostgresManager.py b/API-SERVICE/ServiceConnectManager/PostgresManager.py similarity index 66% rename from API-SERVICE/ConnectManager/PostgresManager.py rename to API-SERVICE/ServiceConnectManager/PostgresManager.py index bcd67555..aa5a92a9 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ServiceConnectManager/PostgresManager.py @@ -2,7 +2,6 @@ from typing import List, Dict, Tuple, Any from ApiService.ApiServiceConfig import config from fastapi.logger import logger -from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query class PostgresManager: @@ -46,27 +45,9 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis result.append(dict(zip(column_names, row))) return result, column_names - def insert(self, table: str, into_info: List[Dict]) -> None: - sql = make_insert_query(f"{self.schema}.{table}", into_info) - self.execute(sql) - logger.info(f'PostgresManager Insert Execute. ({sql})') - - def update(self, table: str, set_info: Dict, where_info: Dict) -> None: - sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) - self.execute(sql) - logger.info(f'PostgresManager Update Execute. ({sql})') - - def delete(self, table: str, where_info: Dict) -> None: - sql = make_delete_query(f"{self.schema}.{table}", where_info) - self.execute(sql) - - logger.info(f'PostgresManager Delete Execute. ({sql})') - def commit(self): self.conn.commit() def __del__(self) -> None: - logger.info("DB CLOSE") self.cursor.close() - # self.conn.close() config.conn_pool.putconn(self.conn) diff --git a/API-SERVICE/ConnectManager/__init__.py b/API-SERVICE/ServiceConnectManager/__init__.py similarity index 100% rename from API-SERVICE/ConnectManager/__init__.py rename to API-SERVICE/ServiceConnectManager/__init__.py diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py similarity index 90% rename from API-SERVICE/Utils/CommonUtil.py rename to API-SERVICE/ServiceUtils/CommonUtil.py index 43aef433..ae96d63d 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -1,3 +1,4 @@ +from email.policy import default import os import configparser import argparse @@ -8,13 +9,23 @@ from pathlib import Path from typing import Any from ApiService.ApiServiceConfig import config -from ConnectManager import PostgresManager +from ServiceConnectManager import PostgresManager from psycopg2 import pool import jwt import sys import traceback +def convert_data(data) -> str: + data = str(data) + if data: + if data == "now()" or data == "NOW()": + return data + if data[0] == "`": + return data[1:] + return f'\'{data.strip()}\'' + + def set_log_path(): parser = configparser.ConfigParser() parser.read( @@ -47,14 +58,14 @@ def parser_params() -> Any: parser.add_argument("--port", type=int, default=19000) parser.add_argument("--category", default="meta") parser.add_argument("--db_type", default="test") + parser.add_argument("--code_type", default="source") return parser.parse_args() -def prepare_config() -> None: +def prepare_config(root_path) -> None: args = parser_params() - config.root_path = str( - Path(os.path.dirname(os.path.abspath(__file__))).parent) + config.root_path = root_path config.category = args.category api_router_cfg = get_config("config.ini") config.api_config = get_config("api_config.ini") @@ -62,6 +73,7 @@ def prepare_config() -> None: config.server_port = args.port config.db_type = f'{args.db_type}_db' config.db_info = api_router_cfg[config.db_type] + config.code_type = args.code_type config.conn_pool = make_connection_pool(config.db_info) config.secret_info = api_router_cfg["secret_info"] diff --git a/API-SERVICE/ServiceUtils/__init__.py b/API-SERVICE/ServiceUtils/__init__.py new file mode 100644 index 00000000..3b5ce1cc --- /dev/null +++ b/API-SERVICE/ServiceUtils/__init__.py @@ -0,0 +1 @@ +from .CommonUtil import * diff --git a/API-SERVICE/Utils/DataBaseUtil.py b/API-SERVICE/Utils/DataBaseUtil.py deleted file mode 100644 index 711a3c87..00000000 --- a/API-SERVICE/Utils/DataBaseUtil.py +++ /dev/null @@ -1,41 +0,0 @@ -from fastapi.logger import logger -from typing import List, Dict - - -def convert_data(data) -> str: - data = str(data) - if data: - if data == "now()" or data == "NOW()": - return data - if data[0] == "`": - return data[1:] - return f'\'{data.strip()}\'' - - -def make_table_info_query(db: str, table: str) -> str: - sql = f'SELECT * FROM information_schema.columns WHERE table_schema = {convert_data(db)} AND table_name = {convert_data(table)}' - return sql - - -def make_insert_query(table: str, into_info: List[Dict]) -> str: - columns = into_info[0].keys() - values = [ - f'( {",".join(map(convert_data, info.values()))} )' for info in into_info] - sql = f'INSERT INTO {table} ( {",".join(columns)} ) VALUES {",".join(values)};' - return sql - - -def make_update_query(table: str, set_info: Dict, where_info: Dict) -> str: - set_list = [ - f'{column} = {convert_data(value)}' for column, value in set_info.items()] - where_list = [ - f'{column} = {convert_data(value)}' for column, value in where_info.items()] - sql = f'UPDATE {table} SET {",".join(set_list)} WHERE {",".join(where_list)};' - return sql - - -def make_delete_query(table, where_info: Dict) -> str: - where_list = [ - f'{column} = {convert_data(value)}' for column, value in where_info.items()] - sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' - return sql diff --git a/API-SERVICE/Utils/__init__.py b/API-SERVICE/Utils/__init__.py deleted file mode 100644 index 71791818..00000000 --- a/API-SERVICE/Utils/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .CommonUtil import * -from .DataBaseUtil import * \ No newline at end of file diff --git a/API-SERVICE/build.sh b/API-SERVICE/build.sh new file mode 100755 index 00000000..f78e74f3 --- /dev/null +++ b/API-SERVICE/build.sh @@ -0,0 +1,8 @@ +rm -rf build dist mobi_service.egg-info +pip uninstall mobi_service -y + +python setup.py bdist_wheel + +pip install ./dist/mobi_service-1.0-py3-none-any.whl + + diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 265ead3a..17423c34 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -1,11 +1,13 @@ from fastapi import FastAPI import uvicorn +from pathlib import Path from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import prepare_config, set_log_path +from ServiceUtils.CommonUtil import prepare_config, set_log_path from ApiService import ApiService import os -prepare_config() +root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) +prepare_config(root_path) api_router = ApiService() app = FastAPI() app.include_router(api_router.router) diff --git a/API-SERVICE/setup.py b/API-SERVICE/setup.py new file mode 100644 index 00000000..940d71ee --- /dev/null +++ b/API-SERVICE/setup.py @@ -0,0 +1,10 @@ +from setuptools import setup, find_packages + +setup( + name='mobi_service', + version='1.0', + author='mobigen', + author_email='cbccbs@mobigen.co.kr', + python_requires='>=3.6', + packages=find_packages(exclude=['docs', 'tests*', '__pycache__/']), +) From 2893d7f0c0f8d3673e372c2f8aa6aad5d64c6dcc Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 27 Sep 2022 15:39:39 +0900 Subject: [PATCH 157/236] =?UTF-8?q?[AIPLATFORM-780]=20router=20wheel=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 270 +----------------- API-ROUTER/RouterApiList/__init__.py | 1 + .../service/TEST_1.py | 0 .../service/TEST_2.py | 0 API-ROUTER/RouterApiList/service/__init__.py | 2 + .../PostgresManager.py | 18 -- .../__init__.py | 0 .../{Utils => RouterUtils}/CommonUtil.py | 15 +- .../{Utils => RouterUtils}/RouteUtil.py | 2 +- API-ROUTER/{Utils => RouterUtils}/__init__.py | 1 - API-ROUTER/Utils/DataBaseUtil.py | 35 --- API-ROUTER/build.sh | 8 + API-ROUTER/conf/api_config.ini | 4 +- API-ROUTER/server.py | 7 +- API-ROUTER/setup.py | 10 + API-SERVICE/ApiService/ApiService.py | 10 +- API-SERVICE/ApiService/ApiServiceConfig.py | 1 - API-SERVICE/ServiceUtils/CommonUtil.py | 2 - 18 files changed, 48 insertions(+), 338 deletions(-) create mode 100644 API-ROUTER/RouterApiList/__init__.py rename API-ROUTER/{ApiList => RouterApiList}/service/TEST_1.py (100%) rename API-ROUTER/{ApiList => RouterApiList}/service/TEST_2.py (100%) create mode 100644 API-ROUTER/RouterApiList/service/__init__.py rename API-ROUTER/{ConnectManager => RouterConnectManager}/PostgresManager.py (67%) rename API-ROUTER/{ConnectManager => RouterConnectManager}/__init__.py (100%) rename API-ROUTER/{Utils => RouterUtils}/CommonUtil.py (92%) rename API-ROUTER/{Utils => RouterUtils}/RouteUtil.py (98%) rename API-ROUTER/{Utils => RouterUtils}/__init__.py (64%) delete mode 100644 API-ROUTER/Utils/DataBaseUtil.py create mode 100755 API-ROUTER/build.sh create mode 100644 API-ROUTER/setup.py diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 2647bab1..1c7e08c4 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,9 +3,8 @@ import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config -from Utils.DataBaseUtil import convert_data -from Utils.CommonUtil import connect_db, make_res_msg, save_file_for_reload, get_exception_info, delete_headers -from Utils.RouteUtil import bypass_msg, call_remote_func +from RouterUtils.CommonUtil import connect_db, make_res_msg, save_file_for_reload, get_exception_info, delete_headers, convert_data +from RouterUtils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request from urllib import parse @@ -44,30 +43,6 @@ def __init__(self) -> None: self.set_route() def set_route(self) -> None: - self.router.add_api_route( - "/api/getApiList", self.get_api_list, methods=["GET"], tags=["API Info"]) - self.router.add_api_route( - "/api/getCategoryApiList", self.get_api_category_list, methods=["GET"], tags=["API Info"]) - self.router.add_api_route( - "/api/getApi", self.get_api, methods=["GET"], tags=["API Info"]) - self.router.add_api_route( - "/api/setApi", self.set_api, methods=["POST"], tags=["API Info"]) - self.router.add_api_route( - "/api/updateApi", self.update_api, methods=["POST"], tags=["API Info"]) - self.router.add_api_route( - "/api/delApi", self.del_api, methods=["POST"], tags=["API Info"]) - - self.router.add_api_route( - "/api/getServerInfoList", self.get_server_info_list, methods=["GET"], tags=["API Server Info"]) - self.router.add_api_route( - "/api/getServerInfo", self.get_server_info, methods=["GET"], tags=["API Server Info"]) - self.router.add_api_route( - "/api/setServerInfo", self.set_server_info, methods=["POST"], tags=["API Server Info"]) - self.router.add_api_route( - "/api/updateServerInfo", self.update_server_info, methods=["POST"], tags=["API Server Info"]) - self.router.add_api_route( - "/api/delServerInfo", self.del_server_info, methods=["POST"], tags=["API Server Info"]) - self.router.add_api_route( "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"]) @@ -83,92 +58,14 @@ def set_route(self) -> None: api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["ctgry"]})']) for api_name, api_info in config.api_config.items(): - module_path = f'{config.root_path}/ApiList/{api_info["sub_dir"]}/{api_name}.py' - module_name = "api" - spec = importlib.util.spec_from_file_location( - module_name, module_path) + module_name = f'RouterApiList.{api_info["sub_dir"]}.{api_name}' + spec = importlib.util.find_spec(module_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url_prefix"]}/{api_info["sub_dir"]}/{api_name}', - module.api, methods=[api_info["method"]], tags=["service"]) - - def set_server_info(self, api_server_info: ApiServerInfo) -> Dict: - api_server_info = api_server_info.__dict__ - api_server_info_query = f'INSERT INTO tb_api_server_info (nm, ip_adr, domn_nm) \ - VALUES ({convert_data(api_server_info["nm"])}, \ - {convert_data(api_server_info["ip_adr"])}, \ - {convert_data(api_server_info["domn_nm"])});' - try: - db = connect_db() - db.execute(api_server_info_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - config.api_server_info, _ = db.select( - 'SELECT * FROM tb_api_server_info;') - result = {"result": 1, "errorMessage": ""} - - return result - - def update_server_info(self, api_server_info: ApiServerInfo) -> Dict: - api_server_info = api_server_info.__dict__ - api_server_info_query = f'UPDATE tb_api_server_info SET ip_adr={convert_data(api_server_info["ip_adr"])}, \ - domn_nm={convert_data(api_server_info["domn_nm"])} \ - WHERE nm={convert_data(api_server_info["nm"])};' - try: - db = connect_db() - db.execute(api_server_info_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - config.api_server_info, _ = db.select( - 'SELECT * FROM tb_api_server_info;') - result = {"result": 1, "errorMessage": ""} - - return result - - def get_server_info_list(self) -> Dict: - try: - db = connect_db() - api_server_info, _ = db.select( - 'SELECT * FROM tb_api_server_info ORDER BY nm;') - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"api_server_info": api_server_info} - - return result - - def get_server_info(self, nm: str) -> Dict: - try: - db = connect_db() - api_server_info, _ = db.select( - f'SELECT * FROM tb_api_server_info WHERE nm = {convert_data(nm)};') - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"api_server_info": api_server_info} - - return result - - def del_server_info(self, nm: str) -> Dict: - try: - db = connect_db() - db.execute( - f'DELETE FROM tb_api_server_info WHERE nm = {convert_data(nm)};') - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - config.api_server_info, _ = db.select( - 'SELECT * FROM tb_api_server_info;') - result = {"result": 1, "errorMessage": ""} - - return result + self.router.add_api_route(f'{api_info["url"]}', + module.api, methods=[ + api_info["method"]], + tags=[f'service [ {api_info["sub_dir"]} ]']) def reload_api(self): logger.info("Reload API Info") @@ -176,157 +73,6 @@ def reload_api(self): result = {"result": 1, "errorMessage": ""} return result - def get_api_list(self) -> Dict: - trace_logger.info("Trace TEST") - - try: - db = connect_db() - - api_info, info_column_names = db.select( - f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info;') - api_params, params_column_names = db.select( - f'SELECT * FROM tb_api_params ORDER BY api_nm, nm;') - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - api_info = make_res_msg("", "", api_info, info_column_names) - api_params = make_res_msg("", "", api_params, params_column_names) - result = {"api_info": api_info, "api_params": api_params} - - return result - - def get_api_category_list(self, ctgry: str) -> Dict: - api_params_list = [] - params_columns = [] - try: - db = connect_db() - api_info, info_column_names = db.select( - f'SELECT api_nm, ctgry, route_url, url, meth, cmd, mode FROM tb_api_info WHERE ctgry = {convert_data(ctgry)};') - - for info in api_info: - logger.info(f'INFO : {info["api_nm"]}') - api_params, params_column_names = db.select( - f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(info["api_nm"])} ORDER BY nm;') - if len(api_params) != 0: - api_params_list.extend(api_params) - params_columns = params_column_names - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - api_info = make_res_msg("", "", api_info, info_column_names) - api_params = make_res_msg( - "", "", api_params_list, params_columns) - result = {"api_info": api_info, "api_params": api_params} - - return result - - def get_api(self, api_nm: str) -> Dict: - try: - db = connect_db() - api_info, info_column_names = db.select( - f'SELECT * FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') - api_params, params_column_names = db.select( - f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(api_nm)} ORDER BY nm;') - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - api_info = make_res_msg("", "", api_info, info_column_names) - api_params = make_res_msg("", "", api_params, params_column_names) - result = {"api_info": api_info, "api_params": api_params} - - return result - - def set_api(self, api_info: ApiInfo) -> Dict: - try: - db = connect_db() - - insert_api_info = {} - insert_api_params = [] - for key, value in api_info.__dict__.items(): - if key == "params": - for param in value: - insert_api_params.append(param.__dict__) - else: - insert_api_info[key] = value - - api_info_query = f'INSERT INTO tb_api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ - VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, \ - {convert_data(insert_api_info["route_url"])}, {convert_data(insert_api_info["url"])}, \ - {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, \ - {convert_data(insert_api_info["mode"])});' - db.execute(api_info_query) - - for param in insert_api_params: - api_params_query = f'INSERT INTO tb_api_params (api_nm, nm, data_type, deflt_val) \ - VALUES ({convert_data(param["api_nm"])}, {convert_data(param["nm"])}, \ - {convert_data(param["data_type"])}, {convert_data(param["deflt_val"])});' - db.execute(api_params_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - save_file_for_reload() - result = {"result": 1, "errorMessage": ""} - - return result - - def update_api(self, api_info: ApiInfo) -> Dict: - try: - db = connect_db() - - insert_api_info = {} - insert_api_params = [] - for key, value in api_info.__dict__.items(): - if key == "params": - for param in value: - insert_api_params.append(param.__dict__) - else: - insert_api_info[key] = value - db.execute( - f'DELETE FROM tb_api_info WHERE api_nm = {convert_data(insert_api_info["api_nm"])};') - - api_info_query = f'INSERT INTO tb_api_info (api_nm, ctgry, route_url, url, meth, cmd, mode) \ - VALUES ({convert_data(insert_api_info["api_nm"])}, {convert_data(insert_api_info["ctgry"])}, \ - {convert_data(insert_api_info["route_url"])}, {convert_data(insert_api_info["url"])}, \ - {convert_data(insert_api_info["meth"])}, {convert_data(insert_api_info["cmd"])}, \ - {convert_data(insert_api_info["mode"])});' - - db.execute(api_info_query) - - for param in insert_api_params: - api_params_query = f'INSERT INTO tb_api_params (api_nm, nm, data_type, deflt_val) \ - VALUES ({convert_data(param["api_nm"])}, {convert_data(param["nm"])}, \ - {convert_data(param["data_type"])}, {convert_data(param["deflt_val"])});' - db.execute(api_params_query) - - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - save_file_for_reload() - result = {"result": 1, "errorMessage": ""} - - return result - - def del_api(self, api_nm: str) -> Dict: - try: - db = connect_db() - - db.execute( - f'DELETE FROM tb_api_info WHERE api_nm = {convert_data(api_nm)};') - - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - save_file_for_reload() - result = {"result": 1, "errorMessage": ""} - - return result - async def route_api(self, request: Request) -> Dict: route_url = request.url.path method = request.method diff --git a/API-ROUTER/RouterApiList/__init__.py b/API-ROUTER/RouterApiList/__init__.py new file mode 100644 index 00000000..e3a9f8af --- /dev/null +++ b/API-ROUTER/RouterApiList/__init__.py @@ -0,0 +1 @@ +from .service import * diff --git a/API-ROUTER/ApiList/service/TEST_1.py b/API-ROUTER/RouterApiList/service/TEST_1.py similarity index 100% rename from API-ROUTER/ApiList/service/TEST_1.py rename to API-ROUTER/RouterApiList/service/TEST_1.py diff --git a/API-ROUTER/ApiList/service/TEST_2.py b/API-ROUTER/RouterApiList/service/TEST_2.py similarity index 100% rename from API-ROUTER/ApiList/service/TEST_2.py rename to API-ROUTER/RouterApiList/service/TEST_2.py diff --git a/API-ROUTER/RouterApiList/service/__init__.py b/API-ROUTER/RouterApiList/service/__init__.py new file mode 100644 index 00000000..785d16dc --- /dev/null +++ b/API-ROUTER/RouterApiList/service/__init__.py @@ -0,0 +1,2 @@ +from .TEST_1 import * +from .TEST_2 import * diff --git a/API-ROUTER/ConnectManager/PostgresManager.py b/API-ROUTER/RouterConnectManager/PostgresManager.py similarity index 67% rename from API-ROUTER/ConnectManager/PostgresManager.py rename to API-ROUTER/RouterConnectManager/PostgresManager.py index 7dae8f9e..a56b6d6e 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/RouterConnectManager/PostgresManager.py @@ -1,7 +1,6 @@ import psycopg2 from typing import List, Dict, Tuple, Any from fastapi.logger import logger -from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query from ApiRoute.ApiRouteConfig import config @@ -49,26 +48,9 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis result.append(dict(zip(column_names, row))) return result, column_names - def insert(self, table: str, into_info: List[Dict]) -> None: - sql = make_insert_query(f"{self.schema}.{table}", into_info) - self.execute(sql) - logger.info(f'PostgresManager Insert Execute. ({sql})') - - def update(self, table: str, set_info: Dict, where_info: Dict) -> None: - sql = make_update_query(f"{self.schema}.{table}", set_info, where_info) - self.execute(sql) - logger.info(f'PostgresManager Update Execute. ({sql})') - - def delete(self, table: str, where_info: Dict) -> None: - sql = make_delete_query(f"{self.schema}.{table}", where_info) - self.execute(sql) - logger.info(f'PostgresManager Delete Execute. ({sql})') - def commit(self): self.conn.commit() def __del__(self) -> None: - logger.info("DB CLOSE") self.cursor.close() - # self.conn.close() config.conn_pool.putconn(self.conn) diff --git a/API-ROUTER/ConnectManager/__init__.py b/API-ROUTER/RouterConnectManager/__init__.py similarity index 100% rename from API-ROUTER/ConnectManager/__init__.py rename to API-ROUTER/RouterConnectManager/__init__.py diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/RouterUtils/CommonUtil.py similarity index 92% rename from API-ROUTER/Utils/CommonUtil.py rename to API-ROUTER/RouterUtils/CommonUtil.py index 6740a245..391ba93c 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/RouterUtils/CommonUtil.py @@ -3,15 +3,17 @@ import argparse import starlette.datastructures from fastapi.logger import logger -from pathlib import Path from typing import Any, Dict, List from ApiRoute.ApiRouteConfig import config -from ConnectManager import PostgresManager +from RouterConnectManager import PostgresManager from psycopg2 import pool import jwt import sys import traceback +def convert_data(data) -> str: + return f'\'{str(data)}\'' + def set_log_path(): parser = configparser.ConfigParser() parser.read(f'{config.root_path}/conf/logging.conf', encoding='utf-8') @@ -45,9 +47,9 @@ def parser_params() -> Any: return parser.parse_args() -def prepare_config() -> None: - args=parser_params() - config.root_path=str(Path(os.path.dirname(os.path.abspath(__file__))).parent) +def prepare_config(root_path) -> None: + args = parser_params() + config.root_path = root_path api_router_cfg=get_config("config.ini") config.api_config=get_config("api_config.ini") config.db_type=f'{args.db_type}_db' @@ -72,7 +74,8 @@ def connect_db(): return db def save_file_for_reload(): - with open(__file__, "a") as fd: + #with open(__file__, "a") as fd: + with open(f'{config.root_path}/server.py', "a") as fd: fd.write(" ") def make_res_msg(result, err_msg, data = None, column_names = None): diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py similarity index 98% rename from API-ROUTER/Utils/RouteUtil.py rename to API-ROUTER/RouterUtils/RouteUtil.py index 69b84dec..4e079558 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -3,7 +3,7 @@ from fastapi.logger import logger from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import get_exception_info +from RouterUtils.CommonUtil import get_exception_info from typing import Dict diff --git a/API-ROUTER/Utils/__init__.py b/API-ROUTER/RouterUtils/__init__.py similarity index 64% rename from API-ROUTER/Utils/__init__.py rename to API-ROUTER/RouterUtils/__init__.py index 25cfbf49..22c1052e 100644 --- a/API-ROUTER/Utils/__init__.py +++ b/API-ROUTER/RouterUtils/__init__.py @@ -1,3 +1,2 @@ from .CommonUtil import * -from .DataBaseUtil import * from .RouteUtil import * diff --git a/API-ROUTER/Utils/DataBaseUtil.py b/API-ROUTER/Utils/DataBaseUtil.py deleted file mode 100644 index a19a3942..00000000 --- a/API-ROUTER/Utils/DataBaseUtil.py +++ /dev/null @@ -1,35 +0,0 @@ -from fastapi.logger import logger -from typing import List, Dict - - -def convert_data(data) -> str: - return f'\'{str(data)}\'' - - -def make_table_info_query(db: str, table: str) -> str: - sql = f'SELECT * FROM information_schema.columns WHERE table_schema = {convert_data(db)} AND table_name = {convert_data(table)}' - return sql - - -def make_insert_query(table: str, into_info: List[Dict]) -> str: - columns = into_info[0].keys() - values = [ - f'( {",".join(map(convert_data, info.values()))} )' for info in into_info] - sql = f'INSERT INTO {table} ( {",".join(columns)} ) VALUES {",".join(values)};' - return sql - - -def make_update_query(table: str, set_info: Dict, where_info: Dict) -> str: - set_list = [ - f'{column} = {convert_data(value)}' for column, value in set_info.items()] - where_list = [ - f'{column} = {convert_data(value)}' for column, value in where_info.items()] - sql = f'UPDATE {table} SET {",".join(set_list)} WHERE {",".join(where_list)};' - return sql - - -def make_delete_query(table, where_info: Dict) -> str: - where_list = [ - f'{column} = {convert_data(value)}' for column, value in where_info.items()] - sql = f'DELETE FROM {table} WHERE {",".join(where_list)};' - return sql diff --git a/API-ROUTER/build.sh b/API-ROUTER/build.sh new file mode 100755 index 00000000..ed46c6cc --- /dev/null +++ b/API-ROUTER/build.sh @@ -0,0 +1,8 @@ +rm -rf build dist mobi_router.egg-info +pip uninstall mobi_router -y + +python setup.py bdist_wheel + +pip install ./dist/mobi_router-1.0-py3-none-any.whl + + diff --git a/API-ROUTER/conf/api_config.ini b/API-ROUTER/conf/api_config.ini index dd1a1278..8e1c9a95 100644 --- a/API-ROUTER/conf/api_config.ini +++ b/API-ROUTER/conf/api_config.ini @@ -1,9 +1,9 @@ [TEST_1] method = GET -url_prefix = /api +url = /api sub_dir = service [TEST_2] method = GET -url_prefix = /api +url = /api sub_dir = service \ No newline at end of file diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index ae726867..8f94875e 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -1,11 +1,13 @@ from fastapi import FastAPI import uvicorn +from pathlib import Path from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import prepare_config, set_log_path +from RouterUtils.CommonUtil import prepare_config, set_log_path from ApiRoute import ApiRoute import os -prepare_config() +root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) +prepare_config(root_path) api_router = ApiRoute() app = FastAPI() app.include_router(api_router.router) @@ -21,3 +23,4 @@ set_log_path() uvicorn.run("server:app", host=config.server_host, port=config.server_port, reload=True, log_config=f'{config.root_path}/conf/logging.conf') + \ No newline at end of file diff --git a/API-ROUTER/setup.py b/API-ROUTER/setup.py new file mode 100644 index 00000000..80a6ccbc --- /dev/null +++ b/API-ROUTER/setup.py @@ -0,0 +1,10 @@ +from setuptools import setup, find_packages + +setup( + name='mobi_router', + version='1.0', + author='mobigen', + author_email='cbccbs@mobigen.co.kr', + python_requires='>=3.6', + packages=find_packages(exclude=['docs', 'tests*', '__pycache__/']), +) diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index 5d738371..42d06c81 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -12,14 +12,8 @@ def __init__(self) -> None: def set_route(self) -> None: for api_name, api_info in config.api_config.items(): if config.category == api_info["sub_dir"]: - if config.code_type == "source": - module_path = f'{config.root_path}/ServiceApiList/{api_info["sub_dir"]}/{api_name}.py' - module_name = "api" - spec = importlib.util.spec_from_file_location( - module_name, module_path) - else: # wheel - module_name = f'ServiceApiList.{api_info["sub_dir"]}.{api_name}' - spec = importlib.util.find_spec(module_name) + module_name = f'ServiceApiList.{api_info["sub_dir"]}.{api_name}' + spec = importlib.util.find_spec(module_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) self.router.add_api_route(f'{api_info["url"]}', diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 4ee53068..a9d5a64f 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -8,7 +8,6 @@ class ApiServiceConfig: category: str db_type: str - code_type: str db_info: Dict remote_info: Dict diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index ae96d63d..12bc9db2 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -58,7 +58,6 @@ def parser_params() -> Any: parser.add_argument("--port", type=int, default=19000) parser.add_argument("--category", default="meta") parser.add_argument("--db_type", default="test") - parser.add_argument("--code_type", default="source") return parser.parse_args() @@ -73,7 +72,6 @@ def prepare_config(root_path) -> None: config.server_port = args.port config.db_type = f'{args.db_type}_db' config.db_info = api_router_cfg[config.db_type] - config.code_type = args.code_type config.conn_pool = make_connection_pool(config.db_info) config.secret_info = api_router_cfg["secret_info"] From 0d58be3a748215ad3091429a21007552e4c339da Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 28 Sep 2022 13:40:46 +0900 Subject: [PATCH 158/236] =?UTF-8?q?[AIPLATFORM-780]=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=95=20=EB=B0=B0=ED=8F=AC=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/CommonUtil.py | 13 +------------ API-ROUTER/build.sh | 6 +++--- API-ROUTER/setup.py | 4 ++-- API-SERVICE/ServiceUtils/CommonUtil.py | 11 ----------- API-SERVICE/build.sh | 6 +++--- API-SERVICE/setup.py | 4 ++-- requirements.txt | 14 +++++++------- 7 files changed, 18 insertions(+), 40 deletions(-) diff --git a/API-ROUTER/RouterUtils/CommonUtil.py b/API-ROUTER/RouterUtils/CommonUtil.py index 391ba93c..748ce7c8 100644 --- a/API-ROUTER/RouterUtils/CommonUtil.py +++ b/API-ROUTER/RouterUtils/CommonUtil.py @@ -7,7 +7,6 @@ from ApiRoute.ApiRouteConfig import config from RouterConnectManager import PostgresManager from psycopg2 import pool -import jwt import sys import traceback @@ -74,7 +73,6 @@ def connect_db(): return db def save_file_for_reload(): - #with open(__file__, "a") as fd: with open(f'{config.root_path}/server.py', "a") as fd: fd.write(" ") @@ -91,16 +89,7 @@ def make_res_msg(result, err_msg, data = None, column_names = None): "body": data, "header": header_list} return res_msg -def get_token_info(headers: starlette.datastructures.Headers): - user_info = None - if config.secret_info["name"] in headers: - try: - user_info = jwt.decode(headers[config.secret_info["name"]], - config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) - except Exception as err: - logger.error(err) - logger.info(f'User Info : {user_info}') - return user_info + def get_exception_info(): ex_type, ex_value, ex_traceback = sys.exc_info() diff --git a/API-ROUTER/build.sh b/API-ROUTER/build.sh index ed46c6cc..9bb8ef67 100755 --- a/API-ROUTER/build.sh +++ b/API-ROUTER/build.sh @@ -1,8 +1,8 @@ -rm -rf build dist mobi_router.egg-info -pip uninstall mobi_router -y +rm -rf build dist mobigen_router.egg-info +pip uninstall mobigen_router -y python setup.py bdist_wheel -pip install ./dist/mobi_router-1.0-py3-none-any.whl +pip install ./dist/mobigen_router-0.1-py3-none-any.whl diff --git a/API-ROUTER/setup.py b/API-ROUTER/setup.py index 80a6ccbc..bc359b13 100644 --- a/API-ROUTER/setup.py +++ b/API-ROUTER/setup.py @@ -1,8 +1,8 @@ from setuptools import setup, find_packages setup( - name='mobi_router', - version='1.0', + name='mobigen_router', + version='0.1', author='mobigen', author_email='cbccbs@mobigen.co.kr', python_requires='>=3.6', diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 12bc9db2..6e856ef2 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -6,12 +6,10 @@ import starlette.datastructures from fastapi.logger import logger from fastapi import Request, HTTPException, status -from pathlib import Path from typing import Any from ApiService.ApiServiceConfig import config from ServiceConnectManager import PostgresManager from psycopg2 import pool -import jwt import sys import traceback @@ -114,15 +112,6 @@ def make_res_msg(result, err_msg, data=None, column_names=None, kor_column_names return res_msg -def get_token_info(headers: starlette.datastructures.Headers): - user_info = None - if config.secret_info["name"] in headers: - user_info = jwt.decode(headers[config.secret_info["name"]], - config.secret_info["secret"], algorithms="HS256", options={"verify_exp": False}) - logger.info(f'user info : {user_info}') - return user_info - - def get_exception_info(): ex_type, ex_value, ex_traceback = sys.exc_info() trace_back = traceback.extract_tb(ex_traceback) diff --git a/API-SERVICE/build.sh b/API-SERVICE/build.sh index f78e74f3..80730fad 100755 --- a/API-SERVICE/build.sh +++ b/API-SERVICE/build.sh @@ -1,8 +1,8 @@ -rm -rf build dist mobi_service.egg-info -pip uninstall mobi_service -y +rm -rf build dist mobigen_service.egg-info +pip uninstall mobigen_service -y python setup.py bdist_wheel -pip install ./dist/mobi_service-1.0-py3-none-any.whl +pip install ./dist/mobigen_service-0.1-py3-none-any.whl diff --git a/API-SERVICE/setup.py b/API-SERVICE/setup.py index 940d71ee..7310080f 100644 --- a/API-SERVICE/setup.py +++ b/API-SERVICE/setup.py @@ -1,8 +1,8 @@ from setuptools import setup, find_packages setup( - name='mobi_service', - version='1.0', + name='mobigen_service', + version='0.1', author='mobigen', author_email='cbccbs@mobigen.co.kr', python_requires='>=3.6', diff --git a/requirements.txt b/requirements.txt index ed115be4..e02efd4c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -fastapi==0.75.2 -uvicorn==0.16.0 -paramiko==2.10.3 -psycopg2==2.8.6 -requests==2.27.1 -retry -pyjwt + fastapi==0.83.0 + uvicorn==0.16.0 + psycopg2-binary==2.9.3 + asyncssh==2.12.0 + aiohttp==3.8.3 + mobigen-router + mobigen-service \ No newline at end of file From 5bfc7836b6998e9f9938704c531a3bd788a8b224 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 29 Sep 2022 15:45:09 +0900 Subject: [PATCH 159/236] =?UTF-8?q?[AIPLATFORM-793]=20DB=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20Router,=20Se?= =?UTF-8?q?rvice=20=EC=BD=94=EB=93=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 51 +++++++------------ API-ROUTER/server.py | 2 +- API-SERVICE/ServiceApiList/common/__init__.py | 4 +- .../ServiceApiList/common/commonSelect.py | 4 +- API-SERVICE/ServiceApiList/meta/__init__.py | 26 +--------- .../ServiceApiList/sitemng/__init__.py | 2 +- 6 files changed, 26 insertions(+), 63 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 1c7e08c4..6c162ce8 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -47,25 +47,25 @@ def set_route(self) -> None: "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"]) db = connect_db() - api_info, _ = db.select('SELECT * FROM tb_api_info;') + api_info, _ = db.select('SELECT * FROM api_item_bas;') config.api_server_info, _ = db.select( - 'SELECT * FROM tb_api_server_info') + 'SELECT * FROM api_item_server_dtl') for api in api_info: - method = str(api["meth"]).split(",") + method = str(api["mthd"]).split(",") self.router.add_api_route( - api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["ctgry"]})']) + api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["srvr_nm"]})']) - for api_name, api_info in config.api_config.items(): - module_name = f'RouterApiList.{api_info["sub_dir"]}.{api_name}' + for api_name, conf_api_info in config.api_config.items(): + module_name = f'RouterApiList.{conf_api_info["sub_dir"]}.{api_name}' spec = importlib.util.find_spec(module_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url"]}', + self.router.add_api_route(f'{conf_api_info["url"]}', module.api, methods=[ - api_info["method"]], - tags=[f'service [ {api_info["sub_dir"]} ]']) + conf_api_info["method"]], + tags=[f'service [ {conf_api_info["sub_dir"]} ]']) def reload_api(self): logger.info("Reload API Info") @@ -73,47 +73,34 @@ def reload_api(self): result = {"result": 1, "errorMessage": ""} return result + async def route_api(self, request: Request) -> Dict: route_url = request.url.path method = request.method - content_type = request.headers.get("Content-Type") - - logger.info(f"Origin Req Headers : {dict(request.headers)}") headers = delete_headers(dict(request.headers), [ - "content-length", "user-agent"]) - logger.info(f'Modify Req Headers : {headers}') - + "content-length", "user-agent"]) try: db = connect_db() api_info, _ = db.select( - f'SELECT * FROM tb_api_info WHERE route_url = {convert_data(route_url)};') + f'SELECT * FROM api_item_bas WHERE route_url = {convert_data(route_url)};') api_info = api_info[0] api_params, _ = db.select( - f'SELECT * FROM tb_api_params WHERE api_nm = {convert_data(api_info["api_nm"])};') + f'SELECT * FROM api_item_param_dtl WHERE api_nm = {convert_data(api_info["api_nm"])};') + logger.info( + f'\nDB - api_info : {api_info}\nDB - api_params : {api_params}') except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - if len(api_info) == 0: - return {"result": 0, "errorMessage": "This is an unregistered API."} - - if content_type == "application/json": + if method == "POST": body = await request.json() - api_info["msg_type"] = "JSON" else: - body = await request.body() - api_info["msg_type"] = "BINARY" - + body = None params_query = parse.unquote(str(request.query_params)) - logger.info( - f'Req - body : {body}, query params : {params_query}') - - api_info["meth"] = method - logger.info(f'DB - api_info : {api_info}') - logger.info(f'DB - api_params : {api_params}') logger.info( - f'mode : {api_info["mode"]}, content_type : {content_type}') + f'\nReq - body : {body}\nquery params : {params_query}') + if api_info["mode"] == "MESSAGE PASSING": result = await bypass_msg(api_info, params_query, body, headers) else: diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index 8f94875e..b3576ae2 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -23,4 +23,4 @@ set_log_path() uvicorn.run("server:app", host=config.server_host, port=config.server_port, reload=True, log_config=f'{config.root_path}/conf/logging.conf') - \ No newline at end of file + \ No newline at end of file diff --git a/API-SERVICE/ServiceApiList/common/__init__.py b/API-SERVICE/ServiceApiList/common/__init__.py index ce4b2e72..bf95bd29 100644 --- a/API-SERVICE/ServiceApiList/common/__init__.py +++ b/API-SERVICE/ServiceApiList/common/__init__.py @@ -1,2 +1,2 @@ -from .commonExecute import * -from .commonSelect import * +from . import * + diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index 471804cb..3148ea41 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -109,8 +109,8 @@ def make_select_query(select_info: commonSelect): def api(select_info: commonSelect) -> Dict: - get_column_info = f"SELECT eng_nm, kor_nm FROM tb_table_column_info \ - WHERE table_id = (SELECT table_id FROM tb_table_list WHERE table_nm = {convert_data(select_info.table_nm)});" + get_column_info = f"SELECT eng_nm, kor_nm FROM tbl_item_coln_dtl \ + WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {convert_data(select_info.table_nm)});" get_query, total_cnt_query = make_select_query(select_info) logger.info(f'Get Query : {get_query}') diff --git a/API-SERVICE/ServiceApiList/meta/__init__.py b/API-SERVICE/ServiceApiList/meta/__init__.py index cd2f3104..b6e690fd 100644 --- a/API-SERVICE/ServiceApiList/meta/__init__.py +++ b/API-SERVICE/ServiceApiList/meta/__init__.py @@ -1,25 +1 @@ -from .addChildCategory import * -from .deleteUseBoardData import * -from .getBizMetaDetail import * -from .getBizMetaDetailDq import * -from .getBizMetaDetailFiles import * -from .getBizMetaDetailSample import * -from .getBizMetaList import * -from .getCategoryList import * -from .getCategoryTree import * -from .getMetaNameDetail import * -from .getUseBoardDataDetail import * -from .getUseBoardDataList import * -from .insertBizMeta import * -from .insertBizMetaData import * -from .insertMetaMap import * -from .insertMetaName import * -from .insertSampleData import * -from .insertUseBoardData import * -from .metaMapList import * -from .metaNameList import * -from .updateBizMeta import * -from .updateCategory import * -from .updateMetaName import * -from .updateUseBoardData import * -from .useMetaNameList import * +from . import * diff --git a/API-SERVICE/ServiceApiList/sitemng/__init__.py b/API-SERVICE/ServiceApiList/sitemng/__init__.py index 19e4a3ce..b6e690fd 100644 --- a/API-SERVICE/ServiceApiList/sitemng/__init__.py +++ b/API-SERVICE/ServiceApiList/sitemng/__init__.py @@ -1 +1 @@ -from .getCodeInfo import * +from . import * From d6cdc068a15e734fd7f07d2e12f70aec4ac14a17 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 29 Sep 2022 16:17:00 +0900 Subject: [PATCH 160/236] =?UTF-8?q?fix=20:=20=EC=9D=B4=EC=8A=88=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/RouteUtil.py | 9 ++------- API-ROUTER/build.sh | 2 +- API-ROUTER/setup.py | 2 +- API-SERVICE/build.sh | 2 +- API-SERVICE/setup.py | 2 +- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index 4e079558..40af46c6 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -23,7 +23,6 @@ def make_url(server_name: str, url_path: str): async def bypass_msg(api_info, params_query, body, headers): method = api_info["meth"] - msg_type = api_info["msg_type"] url = make_url(api_info["ctgry"], api_info["url"]) if url is None: @@ -40,12 +39,8 @@ async def bypass_msg(api_info, params_query, body, headers): async with session.get(url, params=params, headers=headers) as response: result = await response.json() elif method == "POST": - if msg_type == "JSON": - async with session.post(url, json=body, headers=headers) as response: - result = await response.json() - else: - async with session.post(url, data=body, headers=headers) as response: - result = await response.json() + async with session.post(url, json=body, headers=headers) as response: + result = await response.json() else: logger.error(f'Method Not Allowed. {method}') result = {"result": 0, "errorMessage": "Method Not Allowed."} diff --git a/API-ROUTER/build.sh b/API-ROUTER/build.sh index 9bb8ef67..cb45297c 100755 --- a/API-ROUTER/build.sh +++ b/API-ROUTER/build.sh @@ -3,6 +3,6 @@ pip uninstall mobigen_router -y python setup.py bdist_wheel -pip install ./dist/mobigen_router-0.1-py3-none-any.whl +pip install ./dist/mobigen_router-0.3-py3-none-any.whl diff --git a/API-ROUTER/setup.py b/API-ROUTER/setup.py index bc359b13..72a11325 100644 --- a/API-ROUTER/setup.py +++ b/API-ROUTER/setup.py @@ -2,7 +2,7 @@ setup( name='mobigen_router', - version='0.1', + version='0.3', author='mobigen', author_email='cbccbs@mobigen.co.kr', python_requires='>=3.6', diff --git a/API-SERVICE/build.sh b/API-SERVICE/build.sh index 80730fad..6f4a58bd 100755 --- a/API-SERVICE/build.sh +++ b/API-SERVICE/build.sh @@ -3,6 +3,6 @@ pip uninstall mobigen_service -y python setup.py bdist_wheel -pip install ./dist/mobigen_service-0.1-py3-none-any.whl +pip install ./dist/mobigen_service-0.2-py3-none-any.whl diff --git a/API-SERVICE/setup.py b/API-SERVICE/setup.py index 7310080f..dedc00a5 100644 --- a/API-SERVICE/setup.py +++ b/API-SERVICE/setup.py @@ -2,7 +2,7 @@ setup( name='mobigen_service', - version='0.1', + version='0.2', author='mobigen', author_email='cbccbs@mobigen.co.kr', python_requires='>=3.6', From 1ddcb439bd8bce674b1ef012d27fe6e8c7fb82fc Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 29 Sep 2022 16:27:49 +0900 Subject: [PATCH 161/236] =?UTF-8?q?fix:=20=EC=9D=B4=EC=8A=88=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/RouteUtil.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index 40af46c6..9e180222 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -9,7 +9,7 @@ def make_url(server_name: str, url_path: str): for server_info in config.api_server_info: - if server_info["nm"] == server_name: + if server_info["srvr_nm"] == server_name: if len(server_info["ip_adr"]) != 0: netloc = server_info["ip_adr"] else: @@ -22,9 +22,9 @@ def make_url(server_name: str, url_path: str): async def bypass_msg(api_info, params_query, body, headers): - method = api_info["meth"] + method = api_info["mthd"] - url = make_url(api_info["ctgry"], api_info["url"]) + url = make_url(api_info["srvr_nm"], api_info["url"]) if url is None: return {"result": 0, "errorMessage": "The server info does not exist."} From 75f5728212f2f0b87ecd7978c9fd8a4a03b2afb1 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 4 Oct 2022 15:46:24 +0900 Subject: [PATCH 162/236] =?UTF-8?q?[AIPLATFORM-432]=20api=20route=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD(db=20->=20mem)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 34 +++++++++------------ API-ROUTER/ApiRoute/ApiRouteConfig.py | 3 ++ API-ROUTER/RouterUtils/RouteUtil.py | 44 +++++++++++++++++---------- 3 files changed, 45 insertions(+), 36 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 6c162ce8..79166820 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,8 +3,8 @@ import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config -from RouterUtils.CommonUtil import connect_db, make_res_msg, save_file_for_reload, get_exception_info, delete_headers, convert_data -from RouterUtils.RouteUtil import bypass_msg, call_remote_func +from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, convert_data +from RouterUtils.RouteUtil import bypass_msg, call_remote_func, get_api_info from pydantic import BaseModel from starlette.requests import Request from urllib import parse @@ -47,12 +47,13 @@ def set_route(self) -> None: "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"]) db = connect_db() - api_info, _ = db.select('SELECT * FROM api_item_bas;') + config.api_info, _ = db.select('SELECT * FROM api_item_bas;') + config.api_params, _ = db.select('SELECT * FROM api_item_param_dtl;') config.api_server_info, _ = db.select( 'SELECT * FROM api_item_server_dtl') - for api in api_info: + for api in config.api_info: method = str(api["mthd"]).split(",") self.router.add_api_route( api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["srvr_nm"]})']) @@ -73,36 +74,29 @@ def reload_api(self): result = {"result": 1, "errorMessage": ""} return result - async def route_api(self, request: Request) -> Dict: route_url = request.url.path method = request.method + body = None headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) try: - db = connect_db() - api_info, _ = db.select( - f'SELECT * FROM api_item_bas WHERE route_url = {convert_data(route_url)};') - api_info = api_info[0] - api_params, _ = db.select( - f'SELECT * FROM api_item_param_dtl WHERE api_nm = {convert_data(api_info["api_nm"])};') - logger.info( - f'\nDB - api_info : {api_info}\nDB - api_params : {api_params}') - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: + api_info, api_params = get_api_info(route_url) if method == "POST": body = await request.json() - else: - body = None + params_query = parse.unquote(str(request.query_params)) logger.info( - f'\nReq - body : {body}\nquery params : {params_query}') + f'\n- api_info : {api_info}\n- api_params : {api_params} \ + \n- req body : {body}, params_query : {params_query}') if api_info["mode"] == "MESSAGE PASSING": result = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + return result diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index 77cac735..92132ab6 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -14,7 +14,10 @@ class ApiRouteConfig: server_port: int api_config: Dict + api_server_info: List[Dict] + api_info: List[Dict] + api_params: List[Dict] secret_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index 9e180222..04adbd10 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -21,6 +21,20 @@ def make_url(server_name: str, url_path: str): return None +def get_api_info(route_url): + api_info = None + api_params = None + for api in config.api_info: + if api["route_url"] == route_url: + api_info = api + for params in config.api_params: + if params["api_nm"] == api["api_nm"]: + api_params = params + break + break + return api_info, api_params + + async def bypass_msg(api_info, params_query, body, headers): method = api_info["mthd"] @@ -57,20 +71,17 @@ async def run_cmd(cmd: str): async def call_remote_func(api_info, api_params, input_params) -> Dict: - msg_type = api_info["msg_type"] - logger.error(f'IN PARAM : {input_params}, API PARAM : {api_params}') command_input = "" - if msg_type == "JSON": - for param in api_params: - try: - data = input_params[param["nm"]] - if not data: - data = param["deflt_val"] - command_input += f' --{param["nm"]} {data}' - except KeyError: - logger.error( - f'parameter set default value. [{param["nm"]}]') - command_input += f' --{param["nm"]} {param["deflt_val"]}' + for param in api_params: + try: + data = input_params[param["nm"]] + if not data: + data = param["deflt_val"] + command_input += f' --{param["nm"]} {data}' + except KeyError: + logger.error( + f'parameter set default value. [{param["nm"]}]') + command_input += f' --{param["nm"]} {param["deflt_val"]}' cmd = f'{api_info["cmd"]} {command_input}' @@ -78,6 +89,7 @@ async def call_remote_func(api_info, api_params, input_params) -> Dict: result = await run_cmd(cmd) except Exception: except_name = get_exception_info() - logger.error(f'SSH connection failed: {except_name}') - - return eval(result) + res_msg = {"result": 0, "errorMessage": except_name} + else: + res_msg = {"result": 1, "errorMessage": "", "data": eval(result)} + return res_msg From 2115fdfa2288b5f86e51b328294016a359172784 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 5 Oct 2022 13:58:38 +0900 Subject: [PATCH 163/236] =?UTF-8?q?fix=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20sid?= =?UTF-8?q?e=20effect=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/RouteUtil.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index 04adbd10..b4203a24 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -72,16 +72,15 @@ async def run_cmd(cmd: str): async def call_remote_func(api_info, api_params, input_params) -> Dict: command_input = "" - for param in api_params: - try: - data = input_params[param["nm"]] - if not data: - data = param["deflt_val"] - command_input += f' --{param["nm"]} {data}' - except KeyError: - logger.error( - f'parameter set default value. [{param["nm"]}]') - command_input += f' --{param["nm"]} {param["deflt_val"]}' + try: + data = input_params[api_params["nm"]] + if not data: + data = api_params["deflt_val"] + command_input += f' --{api_params["nm"]} {data}' + except KeyError: + logger.error( + f'parameter set default value. [{api_params["nm"]}]') + command_input += f' --{api_params["nm"]} {api_params["deflt_val"]}' cmd = f'{api_info["cmd"]} {command_input}' From 9af8c6234014f25d98c36585ff94ed24029c4dfc Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 5 Oct 2022 14:07:53 +0900 Subject: [PATCH 164/236] =?UTF-8?q?feat=20:=20wheel=20pkg=20=EB=B2=84?= =?UTF-8?q?=EC=A0=BC=20=EC=B5=9C=EC=8B=A0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/build.sh | 2 +- API-ROUTER/setup.py | 2 +- API-SERVICE/build.sh | 2 +- API-SERVICE/setup.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/API-ROUTER/build.sh b/API-ROUTER/build.sh index cb45297c..7e4fd316 100755 --- a/API-ROUTER/build.sh +++ b/API-ROUTER/build.sh @@ -3,6 +3,6 @@ pip uninstall mobigen_router -y python setup.py bdist_wheel -pip install ./dist/mobigen_router-0.3-py3-none-any.whl +pip install ./dist/mobigen_router-0.5-py3-none-any.whl diff --git a/API-ROUTER/setup.py b/API-ROUTER/setup.py index 72a11325..c5a88685 100644 --- a/API-ROUTER/setup.py +++ b/API-ROUTER/setup.py @@ -2,7 +2,7 @@ setup( name='mobigen_router', - version='0.3', + version='0.5', author='mobigen', author_email='cbccbs@mobigen.co.kr', python_requires='>=3.6', diff --git a/API-SERVICE/build.sh b/API-SERVICE/build.sh index 6f4a58bd..64a3a3ef 100755 --- a/API-SERVICE/build.sh +++ b/API-SERVICE/build.sh @@ -3,6 +3,6 @@ pip uninstall mobigen_service -y python setup.py bdist_wheel -pip install ./dist/mobigen_service-0.2-py3-none-any.whl +pip install ./dist/mobigen_service-0.5-py3-none-any.whl diff --git a/API-SERVICE/setup.py b/API-SERVICE/setup.py index dedc00a5..7c5f78d2 100644 --- a/API-SERVICE/setup.py +++ b/API-SERVICE/setup.py @@ -2,7 +2,7 @@ setup( name='mobigen_service', - version='0.2', + version='0.5', author='mobigen', author_email='cbccbs@mobigen.co.kr', python_requires='>=3.6', From f67222fd18eb6135c4ed8d8eace30a0dae950079 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 13 Oct 2022 10:43:41 +0900 Subject: [PATCH 165/236] =?UTF-8?q?[AIPLATFORM-854]=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=9A=A9=20login=20=EA=B8=B0=EB=8A=A5=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/common/userLogin.py | 64 +++++++++++++++++++ API-SERVICE/ServiceUtils/CommonUtil.py | 59 ++++++++++++++++- API-SERVICE/conf/common/api_config.ini | 5 ++ 3 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 API-SERVICE/ServiceApiList/common/userLogin.py diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py new file mode 100644 index 00000000..21e4a728 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -0,0 +1,64 @@ +from typing import Dict, Optional +from pydantic import BaseModel +from fastapi.logger import logger +from fastapi.responses import JSONResponse +from datetime import timedelta +from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data, authenticate_user +from ApiService.ApiServiceConfig import config + + +class userLogin(BaseModel): + user_id: str + emp_id: str + cmpno: str + user_nm: str + email: str + aut_group_cd: Optional[str] = 'ROLE_USER' + data_clas_cd: Optional[str] = 'GRADE3' + #amd_user: Optional[str] = '' + #amd_date: Optional[str] = None + sttus: Optional[str] = 'SBSC' + + +''' + +user_id => uuid 랜덤값 +emp_id => 사원 아이디(로그인아이디) +cmpno => 사번 +user_nm => 사원 이름 +email => 사원 이메일 +aut_group_cd => ROLE_USER +data_clas_cd => GRADE3 +reg_user => user_id와 동일한 값 +reg_date => 현재시간 +amd_user => null +amd_date => null +sttus => SBSC +''' + + +def make_insert_query(login: dict): + print(f'Login Data : {login}, type : {type(login)}') + login["reg_user"] = login["user_id"] + login["reg_date"] = "NOW()" + columns = ", ".join(login.keys()) + values = ", ".join(map(convert_data, login.values())) + print(f'INSERT INTO user_bas ({columns}) VALUES ({values});') + return f'INSERT INTO user_bas ({columns}) VALUES ({values});' + + +def api(login: userLogin) -> Dict: + try: + db = connect_db() + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + login_query = make_insert_query(login.__dict__) + db.execute(login_query) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + + result = {"result": 1, "errorMessage": ""} + + return result diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 6e856ef2..08d738b1 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -1,16 +1,17 @@ -from email.policy import default -import os +from datetime import datetime, timedelta +from pytz import timezone import configparser import argparse import traceback import starlette.datastructures from fastapi.logger import logger from fastapi import Request, HTTPException, status -from typing import Any +from typing import Any, Optional, Dict from ApiService.ApiServiceConfig import config from ServiceConnectManager import PostgresManager from psycopg2 import pool import sys +import jwt import traceback @@ -144,3 +145,55 @@ def get_transaciton_id(request: Request): ) ''' return transaction_id + + +##### for user info ##### +class IncorrectUserName(Exception): + pass + + +class IncorrectPassword(Exception): + pass + + +def get_user(user_name: str): + db = connect_db() + user = db.select( + f'SELECT * FROM {config.user_info["table"]} WHERE {config.user_info["id_column"]} = {convert_data(user_name)}') + return user + + +def create_token(data: dict, expires_delta: Optional[timedelta] = None): + to_encode = data.copy() + if expires_delta: + expire = datetime.now(timezone('Asia/Seoul')) + expires_delta + else: + expire = datetime.now(timezone('Asia/Seoul')) + timedelta(minutes=15) + + logger.info(f'commonToken Expire : {expire}') + to_encode.update({"exp": expire}) + + encoded_jwt = jwt.encode( + to_encode, config.secret_info["secret_key"], algorithm=config.secret_info["algorithm"]) + return encoded_jwt + + +def make_token_data(user: Dict) -> Dict: + token_data_column = config.secret_info["token_data_column"].split(",") + token_data = {column: user[column] for column in token_data_column} + return token_data + + +def verify_password(plain_password, hashed_password): + return config.pwd_context.verify(plain_password, hashed_password) + + +def authenticate_user(username: str, password: str): + user = get_user(username) + if not user[0]: + raise IncorrectUserName + + user = user[0][0] + if not verify_password(password, user[config.user_info["password_column"]]): + raise IncorrectPassword + return user diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 3c739cdb..aeb70020 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -6,4 +6,9 @@ sub_dir = common [commonExecute] method = POST url = /portal/api/common/commonExecute +sub_dir = common + +[userLogin] +method = POST +url = /portal/api/common/userLogin sub_dir = common \ No newline at end of file From 7ee3955fc3ba7eb04aee9185584fa5a3683f3a97 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 13 Oct 2022 10:59:16 +0900 Subject: [PATCH 166/236] =?UTF-8?q?[AIPLATFORM-854]=20login=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/userLogin.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 21e4a728..f4c2f05a 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -38,27 +38,27 @@ class userLogin(BaseModel): def make_insert_query(login: dict): - print(f'Login Data : {login}, type : {type(login)}') login["reg_user"] = login["user_id"] login["reg_date"] = "NOW()" columns = ", ".join(login.keys()) values = ", ".join(map(convert_data, login.values())) - print(f'INSERT INTO user_bas ({columns}) VALUES ({values});') return f'INSERT INTO user_bas ({columns}) VALUES ({values});' def api(login: userLogin) -> Dict: try: db = connect_db() - time_zone = 'Asia/Seoul' - db.execute(f"SET TIMEZONE={convert_data(time_zone)}") - login_query = make_insert_query(login.__dict__) - db.execute(login_query) + user_info, _ = db.select( + f'SELECT * FROM user_bas WHERE user_id = {convert_data(login.user_id)};') + if not user_info: + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + login_query = make_insert_query(login.__dict__) + db.execute(login_query) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - result = {"result": 1, "errorMessage": ""} return result From 4ea39d6bac0ff51f0143cfea59576b15ec6ef126 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 14 Oct 2022 08:58:10 +0900 Subject: [PATCH 167/236] =?UTF-8?q?[AIPLATFORM-854]=20jwt=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=B0=8F=20=EC=9D=B8=EC=A6=9D=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 9 ++-- API-ROUTER/RouterUtils/RouteUtil.py | 16 ++++++- API-ROUTER/conf/config.ini | 4 +- API-SERVICE/ApiService/ApiServiceConfig.py | 1 + .../ServiceApiList/common/commonToken.py | 45 +++++++++++++++++++ .../ServiceApiList/common/commonUserInfo.py | 36 +++++++++++++++ .../ServiceApiList/common/userLogin.py | 32 +++++-------- API-SERVICE/ServiceUtils/CommonUtil.py | 19 ++------ API-SERVICE/conf/common/api_config.ini | 12 ++++- API-SERVICE/conf/common/config.ini | 11 ++++- 10 files changed, 137 insertions(+), 48 deletions(-) create mode 100644 API-SERVICE/ServiceApiList/common/commonToken.py create mode 100644 API-SERVICE/ServiceApiList/common/commonUserInfo.py diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 79166820..5e59fc85 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,8 +3,8 @@ import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config -from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, convert_data -from RouterUtils.RouteUtil import bypass_msg, call_remote_func, get_api_info +from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers +from RouterUtils.RouteUtil import bypass_msg, call_remote_func, get_api_info, make_route_response from pydantic import BaseModel from starlette.requests import Request from urllib import parse @@ -77,6 +77,7 @@ def reload_api(self): async def route_api(self, request: Request) -> Dict: route_url = request.url.path method = request.method + access_token = "" body = None headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) @@ -92,11 +93,11 @@ async def route_api(self, request: Request) -> Dict: \n- req body : {body}, params_query : {params_query}') if api_info["mode"] == "MESSAGE PASSING": - result = await bypass_msg(api_info, params_query, body, headers) + result, access_token = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} - return result + return make_route_response(result, api_info["api_nm"], access_token) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index b4203a24..c7b85461 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -1,6 +1,7 @@ import asyncssh import aiohttp from fastapi.logger import logger +from fastapi.responses import JSONResponse from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config from RouterUtils.CommonUtil import get_exception_info @@ -21,6 +22,15 @@ def make_url(server_name: str, url_path: str): return None +def make_route_response(result, api_name, access_token): + response = JSONResponse(content=result) + add_cookie_api_list = config.secret_info["add_cookie_api"].split(",") + if api_name in add_cookie_api_list: + response.set_cookie( + key=config.secret_info["cookie_name"], value=access_token) + return response + + def get_api_info(route_url): api_info = None api_params = None @@ -51,14 +61,18 @@ async def bypass_msg(api_info, params_query, body, headers): params[parser_param[0]] = parser_param[1] async with session.get(url, params=params, headers=headers) as response: + access_token = response.cookies.get( + config.secret_info["cookie_name"]) result = await response.json() elif method == "POST": async with session.post(url, json=body, headers=headers) as response: + access_token = response.cookies.get( + config.secret_info["cookie_name"]) result = await response.json() else: logger.error(f'Method Not Allowed. {method}') result = {"result": 0, "errorMessage": "Method Not Allowed."} - return result + return result, access_token async def run_cmd(cmd: str): diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 5dd62068..755e330b 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -21,5 +21,5 @@ database = ktportal schema = sitemng [secret_info] -name = user-katech-access-token -secret = jwt-secrect-b-iris \ No newline at end of file +cookie_name = user-katech-access-token +add_cookie_api = userLogin,commonToken \ No newline at end of file diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index a9d5a64f..e04f15c7 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -18,6 +18,7 @@ class ApiServiceConfig: api_config: Dict secret_info: Dict + user_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-SERVICE/ServiceApiList/common/commonToken.py b/API-SERVICE/ServiceApiList/common/commonToken.py new file mode 100644 index 00000000..628d18a4 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/commonToken.py @@ -0,0 +1,45 @@ +from typing import Dict +from fastapi.logger import logger +from fastapi.responses import JSONResponse +from datetime import timedelta +from jose import jwt +from ServiceUtils.CommonUtil import get_exception_info, get_user, create_token, make_token_data +from ApiService.ApiServiceConfig import config +from starlette.requests import Request + + +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(Exception): + pass + + +def api(request: Request) -> Dict: + access_token = "" + try: + recv_access_token = request.cookies.get( + config.secret_info["cookie_name"]) + if not recv_access_token: + raise TokenDoesNotExist + payload = jwt.decode(token=recv_access_token, + key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) + username = payload[config.user_info["id_column"]] + user = get_user(username) + if not user[0]: + raise InvalidUserInfo + user = user[0][0] + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + token_data = make_token_data(user) + access_token = create_token(data=token_data, expires_delta=timedelta( + minutes=int(config.secret_info["expire_min"]))) + result = {"result": 1, "errorMessage": ""} + + response = JSONResponse(content=result) + response.set_cookie( + key=config.secret_info["cookie_name"], value=access_token) + return response diff --git a/API-SERVICE/ServiceApiList/common/commonUserInfo.py b/API-SERVICE/ServiceApiList/common/commonUserInfo.py new file mode 100644 index 00000000..9a81d960 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/commonUserInfo.py @@ -0,0 +1,36 @@ +from typing import Dict +from fastapi.logger import logger +from jose import jwt +from ServiceUtils.CommonUtil import get_exception_info, get_user +from ApiService.ApiServiceConfig import config +from starlette.requests import Request + + +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(Exception): + pass + + +def api(request: Request) -> Dict: + try: + recv_access_token = request.cookies.get( + config.secret_info["cookie_name"]) + if not recv_access_token: + raise TokenDoesNotExist + payload = jwt.decode(token=recv_access_token, + key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) + username = payload[config.user_info["id_column"]] + user = get_user(username) + if not user[0]: + raise InvalidUserInfo + user = user[0][0] + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": "", "data": {"body": payload}} + + return result diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index f4c2f05a..a475f955 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -3,7 +3,7 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta -from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data, authenticate_user +from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data from ApiService.ApiServiceConfig import config @@ -13,30 +13,12 @@ class userLogin(BaseModel): cmpno: str user_nm: str email: str + dept_nm: str aut_group_cd: Optional[str] = 'ROLE_USER' data_clas_cd: Optional[str] = 'GRADE3' - #amd_user: Optional[str] = '' - #amd_date: Optional[str] = None sttus: Optional[str] = 'SBSC' -''' - -user_id => uuid 랜덤값 -emp_id => 사원 아이디(로그인아이디) -cmpno => 사번 -user_nm => 사원 이름 -email => 사원 이메일 -aut_group_cd => ROLE_USER -data_clas_cd => GRADE3 -reg_user => user_id와 동일한 값 -reg_date => 현재시간 -amd_user => null -amd_date => null -sttus => SBSC -''' - - def make_insert_query(login: dict): login["reg_user"] = login["user_id"] login["reg_date"] = "NOW()" @@ -49,7 +31,7 @@ def api(login: userLogin) -> Dict: try: db = connect_db() user_info, _ = db.select( - f'SELECT * FROM user_bas WHERE user_id = {convert_data(login.user_id)};') + f'SELECT * FROM user_bas WHERE emp_id = {convert_data(login.emp_id)};') if not user_info: time_zone = 'Asia/Seoul' db.execute(f"SET TIMEZONE={convert_data(time_zone)}") @@ -59,6 +41,12 @@ def api(login: userLogin) -> Dict: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: + token_data = make_token_data(login.__dict__) + access_token = create_token( + data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) result = {"result": 1, "errorMessage": ""} - return result + response = JSONResponse(content=result) + response.set_cookie( + key=config.secret_info["cookie_name"], value=access_token) + return response diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 08d738b1..8dcbf4d4 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -72,7 +72,9 @@ def prepare_config(root_path) -> None: config.db_type = f'{args.db_type}_db' config.db_info = api_router_cfg[config.db_type] config.conn_pool = make_connection_pool(config.db_info) - config.secret_info = api_router_cfg["secret_info"] + if config.category == "common": + config.secret_info = api_router_cfg["secret_info"] + config.user_info = api_router_cfg["user_info"] def make_connection_pool(db_info): @@ -182,18 +184,3 @@ def make_token_data(user: Dict) -> Dict: token_data_column = config.secret_info["token_data_column"].split(",") token_data = {column: user[column] for column in token_data_column} return token_data - - -def verify_password(plain_password, hashed_password): - return config.pwd_context.verify(plain_password, hashed_password) - - -def authenticate_user(username: str, password: str): - user = get_user(username) - if not user[0]: - raise IncorrectUserName - - user = user[0][0] - if not verify_password(password, user[config.user_info["password_column"]]): - raise IncorrectPassword - return user diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index aeb70020..8c586a6d 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -11,4 +11,14 @@ sub_dir = common [userLogin] method = POST url = /portal/api/common/userLogin -sub_dir = common \ No newline at end of file +sub_dir = common + +[commonToken] +method = GET +url = /portal/api/common/user/commonToken +sub_dir = common + +[commonUserInfo] +method = GET +url = /portal/api/common/user/commonUserInfo +sub_dir = common diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index c6dbead2..785bef4e 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -15,5 +15,12 @@ database = ktportal schema = users,meta,sitemng,board,analysis,sysconfig [secret_info] -name = user-katech-access-token -secret = jwt-secrect-b-iris +secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 +algorithm = HS256 +expire_min = 30 +cookie_name = user-katech-access-token +token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm + +[user_info] +table = user_bas +id_column = emp_id From a18c13f72555436f27db1e5715d5da0a7f2d848c Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 14 Oct 2022 10:45:00 +0900 Subject: [PATCH 168/236] =?UTF-8?q?[AIPLATFORM-854]=20logout=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/conf/config.ini | 4 +- .../ServiceApiList/common/commonLogout.py | 40 +++++++++++++++++++ .../ServiceApiList/common/userLogin.py | 5 ++- API-SERVICE/conf/common/api_config.ini | 7 +++- API-SERVICE/conf/common/config.ini | 4 +- 5 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 API-SERVICE/ServiceApiList/common/commonLogout.py diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 755e330b..717e4681 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -21,5 +21,5 @@ database = ktportal schema = sitemng [secret_info] -cookie_name = user-katech-access-token -add_cookie_api = userLogin,commonToken \ No newline at end of file +cookie_name = user-docean-access-token +add_cookie_api = userLogin,commonLogout,commonToken \ No newline at end of file diff --git a/API-SERVICE/ServiceApiList/common/commonLogout.py b/API-SERVICE/ServiceApiList/common/commonLogout.py new file mode 100644 index 00000000..387fd053 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/commonLogout.py @@ -0,0 +1,40 @@ +from typing import Dict +from fastapi.logger import logger +from fastapi.responses import JSONResponse +from jose import jwt +from starlette.requests import Request +from ServiceUtils.CommonUtil import get_exception_info, get_user +from ApiService.ApiServiceConfig import config + + +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(Exception): + pass + + +def api(request: Request) -> Dict: + f_delete = True + try: + recv_access_token = request.cookies.get( + config.secret_info["cookie_name"]) + if not recv_access_token: + raise TokenDoesNotExist + payload = jwt.decode(token=recv_access_token, + key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) + username = payload[config.user_info["id_column"]] + user = get_user(username) + if not user[0]: + raise InvalidUserInfo + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + f_delete = False + else: + result = {"result": 1, "errorMessage": ""} + response = JSONResponse(content=result) + if f_delete: + response.delete_cookie(key=config.secret_info["cookie_name"]) + return response diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index a475f955..b2bff99a 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -37,11 +37,14 @@ def api(login: userLogin) -> Dict: db.execute(f"SET TIMEZONE={convert_data(time_zone)}") login_query = make_insert_query(login.__dict__) db.execute(login_query) + user_info = login.__dict__ + else: + user_info = user_info[0] except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - token_data = make_token_data(login.__dict__) + token_data = make_token_data(user_info) access_token = create_token( data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) result = {"result": 1, "errorMessage": ""} diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 8c586a6d..b314e2c4 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -10,7 +10,12 @@ sub_dir = common [userLogin] method = POST -url = /portal/api/common/userLogin +url = /portal/api/common/user/userLogin +sub_dir = common + +[commonLogout] +method = POST +url = /portal/api/common/user/commonLogout sub_dir = common [commonToken] diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 785bef4e..4c5b83de 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -18,8 +18,8 @@ schema = users,meta,sitemng,board,analysis,sysconfig secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 expire_min = 30 -cookie_name = user-katech-access-token -token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm +cookie_name = user-docean-access-token +token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm,aut_group_cd,data_clas_cd [user_info] table = user_bas From 891dd3ccbd90bc2ed71461ae2b338c74d26e4302 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 14 Oct 2022 13:27:12 +0900 Subject: [PATCH 169/236] =?UTF-8?q?[AIPLATFORM-878]=20feat:=20elasticsearc?= =?UTF-8?q?h=20api=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/.gitignore | 4 + API-SERVICE/ELKSearch/Manager/__init__.py | 0 API-SERVICE/ELKSearch/Manager/manager.py | 72 +++++++++++++++ API-SERVICE/ELKSearch/README.md | 2 + API-SERVICE/ELKSearch/Utils/__init__.py | 0 .../ELKSearch/Utils/elasticsearch_utils.py | 91 +++++++++++++++++++ API-SERVICE/ELKSearch/Utils/model.py | 23 +++++ 7 files changed, 192 insertions(+) create mode 100644 API-SERVICE/ELKSearch/.gitignore create mode 100644 API-SERVICE/ELKSearch/Manager/__init__.py create mode 100644 API-SERVICE/ELKSearch/Manager/manager.py create mode 100644 API-SERVICE/ELKSearch/README.md create mode 100644 API-SERVICE/ELKSearch/Utils/__init__.py create mode 100644 API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py create mode 100644 API-SERVICE/ELKSearch/Utils/model.py diff --git a/API-SERVICE/ELKSearch/.gitignore b/API-SERVICE/ELKSearch/.gitignore new file mode 100644 index 00000000..53817731 --- /dev/null +++ b/API-SERVICE/ELKSearch/.gitignore @@ -0,0 +1,4 @@ +/.idea/ +test/DataBaseUtils/* +conf/* +*.iml \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/Manager/__init__.py b/API-SERVICE/ELKSearch/Manager/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py new file mode 100644 index 00000000..bc393f6c --- /dev/null +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -0,0 +1,72 @@ +from typing import Dict, Any, Union +from elasticsearch import Elasticsearch +from ELKSearch.Utils.elasticsearch_utils import make_query + + +class ElasticSearchManager: + def __init__( + self, + host: str = "192.168.101.44", + port: str = "39200", + page: int = 1, + size: int = 10, + index: str = "biz_meta", + ): + """ + set elasticsearch connect && DSL query setting function + :param host: elasticsearch host ip addr, default = localhost + :param port: elasticsearch ip port number, default = 9200 + :param index: + :param page: page, size * page , elasticsearch default value = 0 + :param size: 아이템 개수 , elasticsearch default value = 10 + """ + self.host = host + self.port = port + self.size = size + self.index = index + self.cur_from = size * page + self.conn = self.connect() + self.body = self.set_default_option() + + def connect(self) -> Elasticsearch: + es = Elasticsearch(f"http://{self.host}:{self.port}") + return es + + def set_default_option(self) -> Dict[Any, Any]: + # 유지 보수를 위해 model 적용 안 함 + self.body = { + "sort": [], + } + return self.body + + def set_sort(self, sort: list) -> None: + self.body["sort"] = sort + + def set_pagination(self,size: int, from_: int) -> None: + self.size = size + self.cur_from = size * from_ + + def search(self, source=...): + return self.conn.search(index=self.index, body=self.body, from_=self.cur_from, + size=self.size,_source=source) + + def insert(self, body: dict, doc_id: str) -> None: + return self.conn.index(index=self.index, body=body, id=doc_id) + + def update(self, body: dict, doc_id: str): + return self.conn.update(index=self.index, id=doc_id, body=body) + + def delete(self, field: str, data: Union[str, list]): + """ + 단수 : { query: { term: _id}} + 복수 : { query : { term : []}} + :param field: data type str, elasticsearch index _source name + :param data: data type str or list + """ + delete_data = {field: data} + delete_command = make_query("query", "term", delete_data) + return self.conn.delete_by_query(index=self.index,body=delete_command) + + def prefix(self, keyword: dict, source=...): + prefix_query = make_query("query","prefix", keyword) + return self.conn.search(index=self.index, body=prefix_query, size=self.size, _source=source) diff --git a/API-SERVICE/ELKSearch/README.md b/API-SERVICE/ELKSearch/README.md new file mode 100644 index 00000000..15643c0c --- /dev/null +++ b/API-SERVICE/ELKSearch/README.md @@ -0,0 +1,2 @@ +# pyes +python elasticsearch controller diff --git a/API-SERVICE/ELKSearch/Utils/__init__.py b/API-SERVICE/ELKSearch/Utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py new file mode 100644 index 00000000..fd855ae1 --- /dev/null +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -0,0 +1,91 @@ +from typing import Union, Optional, List, Dict, Any +from elasticsearch import Elasticsearch + + +def is_space(text: str) -> int: + if " " in text: + result = 1 + else: + result = 0 + return result + + +def make_query(operator, field, value) -> Dict[Any, Any]: + query = {operator: {field: value}} + return query + + +def div_keyword(keywords: list) -> Dict[Any, Any]: + keyword_dict = {"match": []} + for word in keywords: + if is_space(word): + keyword_dict["match"].extend(word.split(" ")) + else: + keyword_dict["match"].append(word) + return keyword_dict + + +def set_dict_list(option_items: Union[list, dict], + operator: str, field: Optional[str] = None + ) -> List[Dict[Any, Any]]: + query_list = [] + for item in option_items: + if field: + # option_item type list + query = make_query(operator, field, item) + else: + # option item type dict + query = make_query(operator, item, option_items[item]) + query_list.append(query) + return query_list + + +def update_els_data( + es: Elasticsearch, db_data_list: List[Dict], col_key: str +) -> object: + """ + CronJob update to elasticsearch index data + :param es: elasticsearch object + :param db_data_list: insert data ex) [{col1: val1, col2: val2}, ...] + :param col_key: data primary key + :return: elasticsearch helpers object + """ + els_bulk_items = list() + + for row_data in db_data_list: + mapping_dict = dict() + mapping_dict["_id"] = row_data[col_key] + mapping_dict["_source"] = row_data + els_bulk_items.append(mapping_dict) + + return es.insert_bulk(els_bulk_items) + + +def base_search_query(action: str, sub_action: str, item_list: list) -> Dict: + item_dict = {sub_action: []} + + for item in item_list: + if len(item.keywords): + words = " ".join(item.keywords).strip() + + # field div + if 1 < len(item.field): + key = "multi_match" + detail = { + "fields": item.field, + "operator": item.operator + } + query = make_query(key,action,words) + query[key].update(detail) + else: + key = "match" + detail = { + action: words, + "operator": item.operator + } + query = make_query(key, item.field[0], detail) + # query 추가 + item_dict[sub_action].append(query) + else: + continue + return item_dict \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py new file mode 100644 index 00000000..a0712f59 --- /dev/null +++ b/API-SERVICE/ELKSearch/Utils/model.py @@ -0,0 +1,23 @@ +from pydantic import BaseModel, Field +from typing import List, Union + + +class ConfigOption(BaseModel): + field: Union[list, str] + keywords: list + operator: str + + +class SortOption(BaseModel): + field: str + order: str + + +class InputModel(BaseModel): + index: str = "biz_meta" + from_: int = Field(1, alias="from") + size: int = 10 + resultField: list = [] + sortOption: List[SortOption] = [] + searchOption: List[ConfigOption] = [] + filterOption: List[ConfigOption] = [] From 73744c420c30620ed59eee7b18fb4ab3313d53e7 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 14 Oct 2022 13:33:00 +0900 Subject: [PATCH 170/236] =?UTF-8?q?[AIPLATFORM-878]=20feat:=20elasticsearc?= =?UTF-8?q?h=20=EA=B2=80=EC=83=89=20=EB=AA=A8=EB=93=88=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/meta/getElsBizMetaList.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py diff --git a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py new file mode 100644 index 00000000..58b206cd --- /dev/null +++ b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py @@ -0,0 +1,41 @@ +from typing import Dict +from ELKSearch.Manager.manager import ElasticSearchManager +from ELKSearch.Utils.model import InputModel +from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query +from ServiceUtils.CommonUtil import get_exception_info + + +def api(input: InputModel) -> Dict: + data_dict = dict() + from_ = input.from_ - 1 + + try: + es = ElasticSearchManager(page=from_, size=input.size) + es.set_sort(input.sortOption) + + action = "query" + sub_action = "must" + for item in input.searchOption: + if item.field in ["data_nm", "data_desc"]: + item.field = item.field + ".korean_analyzer" + query_dict = base_search_query(action,sub_action,input.searchOption) + + sub_action = "filter" + item_dict = base_search_query(action,sub_action,input.filterOption) + query_dict.update(item_dict) + search_query = make_query(action,"bool", query_dict) + es.body.update(search_query) + + sort_list = [{item.field: item.order} for item in input.sortOption] + es.set_sort(sort_list) + search_data = es.search(input.resultField) + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + search_list = [data["_source"] for data in search_data["hits"]["hits"]] + data_dict["searchList"] = search_list + result = {"result": 1, "errorMessage": "", "data": data_dict} + + return result From 5993b2c1d9b08ce60acaa335d3777ec8e0f5c1ed Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 14 Oct 2022 13:48:58 +0900 Subject: [PATCH 171/236] =?UTF-8?q?[AIPLATFORM-878]=20feat:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20api=20config=20=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/meta/api_config.ini | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index bf78a405..1011de5d 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -121,4 +121,9 @@ sub_dir = meta [insertSampleData] method = POST url = /portal/api/meta/insertSampleData +sub_dir = meta + +[getElsBizMetaList] +method = POST +url = /portal/api/meta/getElsBizMetaList sub_dir = meta \ No newline at end of file From 5d8d94672eb8e26af431ca88ab9873ab3acee1eb Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 14 Oct 2022 13:51:57 +0900 Subject: [PATCH 172/236] =?UTF-8?q?[AIPLATFORM-878]=20chore:=20default=20i?= =?UTF-8?q?ndex=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index a0712f59..60e3c8a9 100644 --- a/API-SERVICE/ELKSearch/Utils/model.py +++ b/API-SERVICE/ELKSearch/Utils/model.py @@ -14,7 +14,7 @@ class SortOption(BaseModel): class InputModel(BaseModel): - index: str = "biz_meta" + index: str = "kt_biz_meta" from_: int = Field(1, alias="from") size: int = 10 resultField: list = [] From 9429806a0b96a6807008aeff25f59e9d67ae4bfd Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 18 Oct 2022 09:52:40 +0900 Subject: [PATCH 173/236] =?UTF-8?q?[AIPLATFORM-903]=20feat:=20data=5Ftype?= =?UTF-8?q?=EC=9D=84=20=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EA=B0=AF=EC=88=98=20counting=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/meta/getElsBizMetaList.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py index 58b206cd..44ee711c 100644 --- a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py @@ -8,9 +8,15 @@ def api(input: InputModel) -> Dict: data_dict = dict() from_ = input.from_ - 1 - + data_type = { + # search_keyword: (result_key, result_data) + "C": "contentsCount", + "A": "assetsCount", + "M": "metaCount", + "T": "totalCount" + } try: - es = ElasticSearchManager(page=from_, size=input.size) + es = ElasticSearchManager(index=input.index, page=from_, size=input.size) es.set_sort(input.sortOption) action = "query" @@ -30,6 +36,22 @@ def api(input: InputModel) -> Dict: es.set_sort(sort_list) search_data = es.search(input.resultField) + i = None + for j,item in enumerate(item_dict["filter"]): + if "data_type" in item["match"].keys(): + i = j + break + + for key_nm, eng_nm in data_type.items(): + item_dict["filter"][i]["match"]["data_type"]["query"] = key_nm + + if key_nm == "T": + del item_dict["filter"][i] + + query_dict.update(item_dict) + cnt_query = make_query("query","bool",query_dict) + cnt = es.conn.count(index=es.index,body=cnt_query)["count"] + data_dict[eng_nm] = cnt except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} From ee4ffd148bbcf98d9548ec2273facdcd8255f494 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 18 Oct 2022 11:01:35 +0900 Subject: [PATCH 174/236] =?UTF-8?q?[AIPLATFORM-903]=20feat:=20filter=20opt?= =?UTF-8?q?ion=20=EC=97=86=EB=8A=94=20if=EB=AC=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py index 44ee711c..35d97789 100644 --- a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py @@ -41,9 +41,16 @@ def api(input: InputModel) -> Dict: if "data_type" in item["match"].keys(): i = j break + else: + i = None for key_nm, eng_nm in data_type.items(): - item_dict["filter"][i]["match"]["data_type"]["query"] = key_nm + if i is None: + cnt_query = make_query("match","data_type",{'operator': 'OR', 'query': key_nm}) + item_dict["filter"].append(cnt_query) + i = -1 + else: + item_dict["filter"][i]["match"]["data_type"]["query"] = key_nm if key_nm == "T": del item_dict["filter"][i] From 08f76229f0d72aa9b5debb7818a13cc147c0c24e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 18 Oct 2022 15:45:00 +0900 Subject: [PATCH 175/236] =?UTF-8?q?[AIPLATFORM-909]=20feat:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=99=84=EC=84=B1=20=EA=B8=B0=EB=8A=A5=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/meta/getPrefixBizMeta.py | 27 +++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 5 ++++ 2 files changed, 32 insertions(+) create mode 100644 API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py diff --git a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py new file mode 100644 index 00000000..7aa074de --- /dev/null +++ b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py @@ -0,0 +1,27 @@ +from typing import Dict +from ELKSearch.Manager.manager import ElasticSearchManager +from ServiceUtils.CommonUtil import get_exception_info + + +def api(size: int, keyword: str) -> Dict: + """ + Auto Complete data_nm + DB의 Like 검색과 유사함 + :param keyword: type dict, ex) {"data_name" : "테"} + :return: + """ + field = "data_nm" + query = {field: keyword} + try: + es = ElasticSearchManager() + es.size = size + prefix_data = es.prefix(query,[field]) + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + prefix_data = [data["_source"]["data_nm"] for data in prefix_data["hits"]["hits"]] + result = {"result": 1, "errorMessage": "", "data": prefix_data} + + return result diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 1011de5d..4af8b63e 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -126,4 +126,9 @@ sub_dir = meta [getElsBizMetaList] method = POST url = /portal/api/meta/getElsBizMetaList +sub_dir = meta + +[getPrefixBizMeta] +method = GET +url = /portal/api/meta/getPrefixBizMeta sub_dir = meta \ No newline at end of file From 14096adc74e43b788351e07fd5529ad767d3d740 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 18 Oct 2022 17:01:36 +0900 Subject: [PATCH 176/236] =?UTF-8?q?[AIPLATFORM-909]=20fix:=20default=20ind?= =?UTF-8?q?ex=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Manager/manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py index bc393f6c..2fd37a97 100644 --- a/API-SERVICE/ELKSearch/Manager/manager.py +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -10,7 +10,7 @@ def __init__( port: str = "39200", page: int = 1, size: int = 10, - index: str = "biz_meta", + index: str = "kt_biz_meta", ): """ set elasticsearch connect && DSL query setting function From 72c0193f6eb43c6bfb6f7f0332608a0b88133082 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 20 Oct 2022 13:17:41 +0900 Subject: [PATCH 177/236] =?UTF-8?q?fix=20:=20Sparrow=20=EA=B2=80=EC=B6=9C?= =?UTF-8?q?=20=EB=82=B4=EC=97=AD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/RouteUtil.py | 2 +- .../ServiceApiList/common/commonSelect.py | 4 ++- .../ServiceApiList/common/commonToken.py | 2 +- .../ServiceApiList/common/userLogin.py | 2 +- API-SERVICE/ServiceUtils/CommonUtil.py | 34 ++++++++++++++++++- API-SERVICE/conf/common/logging.conf | 2 +- 6 files changed, 40 insertions(+), 6 deletions(-) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index c7b85461..d5605882 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -27,7 +27,7 @@ def make_route_response(result, api_name, access_token): add_cookie_api_list = config.secret_info["add_cookie_api"].split(",") if api_name in add_cookie_api_list: response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=True, httponly=True) return response diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index 3148ea41..53c50f51 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -1,6 +1,6 @@ from typing import Dict, List, Optional from ApiService.ApiServiceConfig import config -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data, kt_lamp from pydantic import BaseModel from fastapi.logger import logger @@ -129,4 +129,6 @@ def api(select_info: commonSelect) -> Dict: result = make_res_msg(1, "", select_data, eng_nm_list, kor_nm_list) if select_info.page_info: result["data"].update(total_cnt[0][0]) + + # kt_lamp() return result diff --git a/API-SERVICE/ServiceApiList/common/commonToken.py b/API-SERVICE/ServiceApiList/common/commonToken.py index 628d18a4..ea04d952 100644 --- a/API-SERVICE/ServiceApiList/common/commonToken.py +++ b/API-SERVICE/ServiceApiList/common/commonToken.py @@ -41,5 +41,5 @@ def api(request: Request) -> Dict: response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=True, httponly=True) return response diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index b2bff99a..f1f9c35d 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -51,5 +51,5 @@ def api(login: userLogin) -> Dict: response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=True, httponly=True) return response diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 8dcbf4d4..1b3dd3bb 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -3,7 +3,8 @@ import configparser import argparse import traceback -import starlette.datastructures + +import socket from fastapi.logger import logger from fastapi import Request, HTTPException, status from typing import Any, Optional, Dict @@ -13,6 +14,9 @@ import sys import jwt import traceback +import logging + +lamp = logging.getLogger("trace") def convert_data(data) -> str: @@ -184,3 +188,31 @@ def make_token_data(user: Dict) -> Dict: token_data_column = config.secret_info["token_data_column"].split(",") token_data = {column: user[column] for column in token_data_column} return token_data + + +lamp_form = { + "timestamp": "", + "service": "", + "operation": "", + "transactionId": "", + "logType": "", + "host": {"name": "", "ip": ""}, +} + + +def kt_lamp(log_type: str, operation: str, dest_info: Dict, res_info: Dict, transaction_id: str = None): + lamp_form["service"] = "" + lamp_form["operation"] = operation + lamp_form["transactionId"] = transaction_id + lamp_form["logType"] = log_type + lamp_form["host"]["name"] = socket.gethostname() + lamp_form["host"]["ip"] = socket.gethostbyname(lamp_form["host"]["name"]) + + if log_type == "": + pass + elif log_type == "": + pass + elif log_type == "": + pass + + lamp.info(lamp_form) diff --git a/API-SERVICE/conf/common/logging.conf b/API-SERVICE/conf/common/logging.conf index 7a6ab7a0..41940e97 100644 --- a/API-SERVICE/conf/common/logging.conf +++ b/API-SERVICE/conf/common/logging.conf @@ -18,7 +18,7 @@ keys = default,trace format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s [formatter_trace] -format = %(asctime)s %(message)s +format = %(message)s [handlers] keys = console,rotatingFileHandler,traceHandler From 31035d8d4785946a8ea594e0cb6f7be283aadbd9 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 26 Oct 2022 09:38:21 +0900 Subject: [PATCH 178/236] =?UTF-8?q?[AIPLATFORM-432]=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/__init__.py | 1 - .../ServiceApiList/meta/addChildCategory.py | 25 ---- .../ServiceApiList/meta/deleteUseBoardData.py | 22 --- .../ServiceApiList/meta/getBizMetaDetail.py | 22 --- .../ServiceApiList/meta/getBizMetaDetailDq.py | 17 --- .../meta/getBizMetaDetailFiles.py | 17 --- .../meta/getBizMetaDetailSample.py | 30 ----- .../ServiceApiList/meta/getBizMetaList.py | 51 ------- .../ServiceApiList/meta/getCategoryList.py | 16 --- .../ServiceApiList/meta/getCategoryTree.py | 40 ------ .../ServiceApiList/meta/getMetaNameDetail.py | 23 ---- .../meta/getUseBoardDataDetail.py | 22 --- .../meta/getUseBoardDataList.py | 31 ----- .../ServiceApiList/meta/insertBizMeta.py | 27 ---- .../ServiceApiList/meta/insertBizMetaData.py | 53 -------- .../ServiceApiList/meta/insertMetaMap.py | 77 ----------- .../ServiceApiList/meta/insertMetaName.py | 44 ------ .../ServiceApiList/meta/insertSampleData.py | 31 ----- .../ServiceApiList/meta/insertUseBoardData.py | 52 -------- .../ServiceApiList/meta/metaMapList.py | 24 ---- .../ServiceApiList/meta/metaNameList.py | 39 ------ .../ServiceApiList/meta/updateBizMeta.py | 27 ---- .../ServiceApiList/meta/updateCategory.py | 27 ---- .../ServiceApiList/meta/updateMetaName.py | 30 ----- .../ServiceApiList/meta/updateUseBoardData.py | 48 ------- .../ServiceApiList/meta/useMetaNameList.py | 31 ----- .../ServiceApiList/sitemng/__init__.py | 1 - .../ServiceApiList/sitemng/getCodeInfo.py | 24 ---- API-SERVICE/conf/meta/api_config.ini | 125 ------------------ API-SERVICE/conf/sitemng/api_config.ini | 4 - API-SERVICE/conf/sitemng/config.ini | 19 --- API-SERVICE/conf/sitemng/logging.conf | 42 ------ 32 files changed, 1042 deletions(-) delete mode 100644 API-SERVICE/ServiceApiList/meta/addChildCategory.py delete mode 100644 API-SERVICE/ServiceApiList/meta/deleteUseBoardData.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaDetail.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaDetailDq.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaDetailFiles.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaDetailSample.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaList.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getCategoryList.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getCategoryTree.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getMetaNameDetail.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getUseBoardDataDetail.py delete mode 100644 API-SERVICE/ServiceApiList/meta/getUseBoardDataList.py delete mode 100644 API-SERVICE/ServiceApiList/meta/insertBizMeta.py delete mode 100644 API-SERVICE/ServiceApiList/meta/insertBizMetaData.py delete mode 100644 API-SERVICE/ServiceApiList/meta/insertMetaMap.py delete mode 100644 API-SERVICE/ServiceApiList/meta/insertMetaName.py delete mode 100644 API-SERVICE/ServiceApiList/meta/insertSampleData.py delete mode 100644 API-SERVICE/ServiceApiList/meta/insertUseBoardData.py delete mode 100644 API-SERVICE/ServiceApiList/meta/metaMapList.py delete mode 100644 API-SERVICE/ServiceApiList/meta/metaNameList.py delete mode 100644 API-SERVICE/ServiceApiList/meta/updateBizMeta.py delete mode 100644 API-SERVICE/ServiceApiList/meta/updateCategory.py delete mode 100644 API-SERVICE/ServiceApiList/meta/updateMetaName.py delete mode 100644 API-SERVICE/ServiceApiList/meta/updateUseBoardData.py delete mode 100644 API-SERVICE/ServiceApiList/meta/useMetaNameList.py delete mode 100644 API-SERVICE/ServiceApiList/sitemng/__init__.py delete mode 100644 API-SERVICE/ServiceApiList/sitemng/getCodeInfo.py delete mode 100644 API-SERVICE/conf/sitemng/api_config.ini delete mode 100644 API-SERVICE/conf/sitemng/config.ini delete mode 100644 API-SERVICE/conf/sitemng/logging.conf diff --git a/API-SERVICE/ServiceApiList/__init__.py b/API-SERVICE/ServiceApiList/__init__.py index 2ee78ade..4e889787 100644 --- a/API-SERVICE/ServiceApiList/__init__.py +++ b/API-SERVICE/ServiceApiList/__init__.py @@ -1,3 +1,2 @@ from .meta import * -from .sitemng import * from .common import * diff --git a/API-SERVICE/ServiceApiList/meta/addChildCategory.py b/API-SERVICE/ServiceApiList/meta/addChildCategory.py deleted file mode 100644 index 27737a9a..00000000 --- a/API-SERVICE/ServiceApiList/meta/addChildCategory.py +++ /dev/null @@ -1,25 +0,0 @@ -import uuid -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel - - -class addChildCategory(BaseModel): - prnts_id: str - node_nm: str - - -# todo: 수정 필요 -def api(insert: addChildCategory) -> Dict: - query = f'INSERT INTO tb_category (node_nm, prnts_id, node_id)\ - VALUES ({convert_data(insert.node_nm)},{convert_data(insert.prnts_id)},{convert_data(uuid.uuid4())});' - - try: - db = connect_db() - db.execute(query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - return result diff --git a/API-SERVICE/ServiceApiList/meta/deleteUseBoardData.py b/API-SERVICE/ServiceApiList/meta/deleteUseBoardData.py deleted file mode 100644 index ff84d126..00000000 --- a/API-SERVICE/ServiceApiList/meta/deleteUseBoardData.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel - - -class deleteUseBoardData(BaseModel): - use_dataset_id: str - - -def api(use_board_data: deleteUseBoardData) -> Dict: - delete_biz_meta_query = f'DELETE FROM tb_board_use WHERE use_dataset_id = {convert_data(use_board_data.use_dataset_id)};' - - try: - db = connect_db() - db.execute(delete_biz_meta_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaDetail.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetail.py deleted file mode 100644 index f0c0ecaf..00000000 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaDetail.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data - - -def api(datasetId: str = None) -> Dict: - v_meta_map_query = 'SELECT kor_nm,eng_nm,nm_id FROM v_biz_meta' - v_meta_wrap_query = f'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id = {convert_data(datasetId)}' - - try: - db = connect_db() - meta_wrap = db.select(v_meta_wrap_query) - meta_map = db.select(v_meta_map_query) - - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - kor_nm_list = [map_data["kor_nm"] for map_data in meta_map[0]] - eng_nm_list = [map_data["eng_nm"] for map_data in meta_map[0]] - result = make_res_msg(1, "", meta_wrap[0][0], eng_nm_list, kor_nm_list) - - return result diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaDetailDq.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailDq.py deleted file mode 100644 index 2914e42e..00000000 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaDetailDq.py +++ /dev/null @@ -1,17 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data - - -def api(datasetId: str = None) -> Dict: - v_meta_dq_query = f'SELECT * FROM tb_meta_detail_dq WHERE biz_dataset_id = {convert_data(datasetId)}' - - try: - db = connect_db() - meta_dq = db.select(v_meta_dq_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", meta_dq[0], meta_dq[1]) - - return result diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaDetailFiles.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailFiles.py deleted file mode 100644 index 767f53b0..00000000 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaDetailFiles.py +++ /dev/null @@ -1,17 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data - - -def api(datasetId: str = None) -> Dict: - v_meta_files_query = f'SELECT * FROM tb_meta_detail_files WHERE biz_dataset_id = {convert_data(datasetId)}' - - try: - db = connect_db() - meta_files = db.select(v_meta_files_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", meta_files[0], meta_files[1]) - - return result diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaDetailSample.py b/API-SERVICE/ServiceApiList/meta/getBizMetaDetailSample.py deleted file mode 100644 index 755fc562..00000000 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaDetailSample.py +++ /dev/null @@ -1,30 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data -from io import StringIO -import csv - - -def csv_to_dict(sample_contents: str): - sample_contents = sample_contents.replace("\uFEFF", "") - data_list = [] - with StringIO(sample_contents) as f_sample_contents: - csvReader = csv.DictReader(f_sample_contents) - for row in csvReader: - data_list.append(row) - return data_list, data_list[0].keys() - - -def api(datasetId: str = None) -> Dict: - v_meta_sample_query = f'SELECT * FROM tb_meta_detail_sampledata WHERE biz_dataset_id = {convert_data(datasetId)}' - - try: - db = connect_db() - meta_sample, _ = db.select(v_meta_sample_query) - data_list, column_list = csv_to_dict(meta_sample[0]["sample_contents"]) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", data_list, column_list) - - return result diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getBizMetaList.py deleted file mode 100644 index 3bd2a938..00000000 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaList.py +++ /dev/null @@ -1,51 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info - - -def api(perPage: int, - curPage: int, - keyword1: str = "", - keyword2: str = "", - keyword3: str = "") -> Dict: - - curPage = curPage - 1 - total_cnt_query = "SELECT count(*) AS cnt FROM v_biz_meta_wrap" - v_meta_wrap_query = "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM v_biz_meta_wrap" - - try: - db = connect_db() - search_word_list = [keyword1, keyword2, keyword3] - if any(search_word_list): - order_condition = [] - search_condition = [] - - for word in search_word_list: - order_condition.append(f"data_nm SIMILAR to '%{word}%'") - search_condition.append(f"data_nm LIKE '%{word}%'") - - total_cnt_query = f'{total_cnt_query} WHERE {" AND ".join(search_condition)}' - v_meta_wrap_query = f'{v_meta_wrap_query} WHERE {" AND ".join(search_condition)}' - - v_meta_wrap_query = v_meta_wrap_query.format( - f'{" AND ".join(order_condition)} DESC') - else: - v_meta_wrap_query = v_meta_wrap_query.format("biz_dataset_id") - - v_meta_wrap_query = f"{v_meta_wrap_query} LIMIT {perPage} OFFSET ({perPage} * {curPage})" - - meta_wrap = db.select(v_meta_wrap_query) - total_cnt = db.select(total_cnt_query) - - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - search_list = [] - if len(meta_wrap[0]): - search_list = [meta_data for meta_data in meta_wrap[0]] - - body = {"totalcount": total_cnt[0][0] - ['cnt'], "searchList": search_list} - result = {"result": 1, "errorMessage": "", "data": body} - - return result diff --git a/API-SERVICE/ServiceApiList/meta/getCategoryList.py b/API-SERVICE/ServiceApiList/meta/getCategoryList.py deleted file mode 100644 index 53c05df7..00000000 --- a/API-SERVICE/ServiceApiList/meta/getCategoryList.py +++ /dev/null @@ -1,16 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info - - -def api() -> Dict: - category_query = 'SELECT * FROM tb_category ORDER BY prnts_id, node_id;' - - try: - db = connect_db() - category_list = db.select(category_query)[0] - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": "", "data": category_list} - return result diff --git a/API-SERVICE/ServiceApiList/meta/getCategoryTree.py b/API-SERVICE/ServiceApiList/meta/getCategoryTree.py deleted file mode 100644 index 65365477..00000000 --- a/API-SERVICE/ServiceApiList/meta/getCategoryTree.py +++ /dev/null @@ -1,40 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info - - -def api() -> Dict: - get_category_list = "SELECT * FROM tb_category;" - - try: - db = connect_db() - category_list, _ = db.select(get_category_list) - - node_dict = {} - category_tree = {} - for category in category_list: - node_dict[category["node_id"]] = category["node_nm"] - category_tree[category["node_nm"]] = [] - - for category in category_list: - if node_dict.get(category["prnts_id"]): - parent_name = node_dict[category["prnts_id"]] - category_tree[parent_name].append(category["node_nm"]) - - result_category = {} - for category in category_tree["ROOT"]: - if category == "ROOT": - continue - result_category[category] = None - - for main_category, sub_category in category_tree.items(): - if sub_category: - if main_category == "ROOT": - continue - result_category[main_category] = sub_category - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", result_category, []) - - return result diff --git a/API-SERVICE/ServiceApiList/meta/getMetaNameDetail.py b/API-SERVICE/ServiceApiList/meta/getMetaNameDetail.py deleted file mode 100644 index d68dc88c..00000000 --- a/API-SERVICE/ServiceApiList/meta/getMetaNameDetail.py +++ /dev/null @@ -1,23 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data - - -def api(nameId: str = None) -> Dict: - if nameId is None: - query = f"SELECT * FROM v_biz_meta_name" - else: - query = f'SELECT * FROM tb_biz_meta_name WHERE nm_id = {convert_data(nameId)}' - - try: - db = connect_db() - meta_name = db.select(query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - if nameId is None: - result = make_res_msg(1, "", {}, "") - result["data"]["header"] = meta_name[0] - else: - result = make_res_msg(1, "", meta_name[0][0], meta_name[1]) - return result diff --git a/API-SERVICE/ServiceApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ServiceApiList/meta/getUseBoardDataDetail.py deleted file mode 100644 index 666bd020..00000000 --- a/API-SERVICE/ServiceApiList/meta/getUseBoardDataDetail.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data - - -def api(apyr: str) -> Dict: - get_use_data_query = f'SELECT * FROM tb_board_use WHERE apyr = {convert_data(apyr)};' - get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ - WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" - - try: - db = connect_db() - use_data, _ = db.select(get_use_data_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - column_info, _ = db.select(get_column_info) - kor_nm_list = [map_data["kor_nm"] for map_data in column_info] - eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - - result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) - return result diff --git a/API-SERVICE/ServiceApiList/meta/getUseBoardDataList.py b/API-SERVICE/ServiceApiList/meta/getUseBoardDataList.py deleted file mode 100644 index 4604a6f2..00000000 --- a/API-SERVICE/ServiceApiList/meta/getUseBoardDataList.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info - - -def api(perPage: int, curPage: int) -> Dict: - curPage = curPage - 1 - - get_use_data_query = f'SELECT * FROM tb_board_use\ - ORDER BY data_nm\ - LIMIT {perPage}\ - OFFSET ({perPage} * {curPage});' - get_column_info = f"SELECT eng_nm, kor_nm FROM tb_board_column_info \ - WHERE table_id = (SELECT id FROM tb_board_name WHERE table_nm = 'tb_board_use');" - - total_cnt_query = "SELECT count(*) AS totalCount FROM tb_board_use;" - try: - db = connect_db() - use_data, _ = db.select(get_use_data_query) - total_cnt = db.select(total_cnt_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - column_info, _ = db.select(get_column_info) - kor_nm_list = [map_data["kor_nm"] for map_data in column_info] - eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - - result = make_res_msg(1, "", use_data, eng_nm_list, kor_nm_list) - result["data"].update(total_cnt[0][0]) - - return result diff --git a/API-SERVICE/ServiceApiList/meta/insertBizMeta.py b/API-SERVICE/ServiceApiList/meta/insertBizMeta.py deleted file mode 100644 index d54802c2..00000000 --- a/API-SERVICE/ServiceApiList/meta/insertBizMeta.py +++ /dev/null @@ -1,27 +0,0 @@ -import uuid -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data - - -def api(biz_meta_list: list) -> Dict: - # todo: 수정 필요 (insertMetaMap에서 item_id부여 후 web에서 맞춘다음에 api로 넘겨줘야함) - # item_id를 web에서 넘겨 받아야 하는 형태 - uid = uuid.uuid4() - biz_meta_query = 'SELECT item_id as itemId, item_val as itemVal FROM tb_biz_meta;' - - try: - db = connect_db() - for biz_meta in biz_meta_list: - item_id, item_val = tuple(biz_meta.values()) - query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val ) \ - VALUES ({convert_data(uid)},{convert_data(item_id)},{convert_data(item_val)});' - - db.execute(query) - - biz_meta_list = db.select(biz_meta_query)[0] - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = biz_meta_list - return result diff --git a/API-SERVICE/ServiceApiList/meta/insertBizMetaData.py b/API-SERVICE/ServiceApiList/meta/insertBizMetaData.py deleted file mode 100644 index ef3f81ee..00000000 --- a/API-SERVICE/ServiceApiList/meta/insertBizMetaData.py +++ /dev/null @@ -1,53 +0,0 @@ -import uuid -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel - - -class insertBizMetaData(BaseModel): - adm_dep: str - rqt_dep: str - admr_nm: str - rqt_nm: str - ctgry: str - reg_date: str - ltst_amd_dt: str - prv_shap: str - file_size: str - open_scope: str - data_shap: str - src_sys: str - src_url: str - kywrd: str - data_prv_desk: str - data_updt_cyc: str - law_evl_conf_yn: str - scrty_evl_conf_yn: str - updt_nxt_date: str - data_nm: str - data_desc: str - - -def api(biz_meta_data: insertBizMetaData) -> Dict: - uid = uuid.uuid4() - get_column_info = 'SELECT item_id, eng_nm FROM v_biz_meta;' - - try: - db = connect_db() - column_info, _ = db.select(get_column_info) - - biz_meta_data = biz_meta_data.dict() - insert_values = [] - for info in column_info: - values = f'({convert_data(uid)}, {convert_data(info["item_id"])}, {convert_data(biz_meta_data[info["eng_nm"]])})' - insert_values.append(values) - - insert_meta_query = f'INSERT INTO tb_biz_meta (biz_dataset_id, item_id, item_val) \ - VALUES {",".join(insert_values)};' - db.execute(insert_meta_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - return result diff --git a/API-SERVICE/ServiceApiList/meta/insertMetaMap.py b/API-SERVICE/ServiceApiList/meta/insertMetaMap.py deleted file mode 100644 index 990a7d0d..00000000 --- a/API-SERVICE/ServiceApiList/meta/insertMetaMap.py +++ /dev/null @@ -1,77 +0,0 @@ -import uuid -from typing import Dict -from pydantic import BaseModel -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data - - -class NmIdList(BaseModel): - nm_id_list: list - - -def api(insert: NmIdList) -> Dict: - view_col = ["biz_dataset_id"] - drop_view_wrap_query = "DROP VIEW IF EXISTS v_biz_meta_wrap" - drop_view_meta_query = "DROP VIEW IF EXISTS v_biz_meta" - create_view_meta_query = "CREATE OR REPLACE VIEW v_biz_meta \ - AS SELECT tbmm.nm_id AS nm_id, \ - tbmn.kor_nm AS kor_nm, \ - tbmn.eng_nm AS eng_nm, \ - tbmm.item_id as item_id \ - FROM tb_biz_meta_map tbmm \ - INNER JOIN tb_biz_meta_name tbmn ON tbmm.nm_id = tbmn.nm_id;" - delete_map_query = "DELETE FROM tb_biz_meta_map WHERE nm_id = {0}" - map_insert_query = "INSERT INTO tb_biz_meta_map (item_id, nm_id) VALUES ({0}, {1});" - meta_map_query = "SELECT * FROM tb_biz_meta_map" - nm_id_query = "SELECT nm_id FROM tb_biz_meta_map" - - map_item_query = "SELECT DISTINCT \ - meta_map.item_id,\ - tbmn.eng_nm\ - FROM\ - tb_biz_meta_name tbmn\ - LEFT JOIN tb_biz_meta_map meta_map ON\ - tbmn.nm_id = meta_map.nm_id\ - WHERE item_id IS NOT NULL" - - ddl_dataset_id = "CREATE VIEW v_biz_meta_wrap AS\ - SELECT\ - {0}\ - FROM tb_biz_meta\ - GROUP BY biz_dataset_id" - try: - db = connect_db() - - nm_id_set = {_["nm_id"] for _ in db.select(nm_id_query)[0]} - req_nm_ids = set(insert.nm_id_list) - delete_nm_ids = nm_id_set - req_nm_ids - nm_id_set = req_nm_ids - nm_id_set - - for nm_id in delete_nm_ids: - db.execute(delete_map_query.format(convert_data(nm_id))) - - for nm_id in nm_id_set: - db.execute(map_insert_query.format(convert_data(uuid.uuid4()), - convert_data(nm_id))) - - # drop view v_biz_meta_wrap - db.execute(drop_view_wrap_query) - db.execute(drop_view_meta_query) - - # create view v_biz_meta_wrap - meta_map_item = db.select(map_item_query)[0] - col_format = "\t\tMAX(CASE WHEN item_id = {0} THEN item_val END) AS {1}" - view_col = view_col + [col_format.format(convert_data(meta_map["item_id"]), meta_map["eng_nm"]) - for meta_map in meta_map_item] - - db.execute(ddl_dataset_id.format(",\n".join(view_col))) - db.execute(create_view_meta_query) - - # return data - meta_map_list = db.select(meta_map_query)[0] - - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = meta_map_list - return result diff --git a/API-SERVICE/ServiceApiList/meta/insertMetaName.py b/API-SERVICE/ServiceApiList/meta/insertMetaName.py deleted file mode 100644 index ebd332d3..00000000 --- a/API-SERVICE/ServiceApiList/meta/insertMetaName.py +++ /dev/null @@ -1,44 +0,0 @@ -import uuid -import string -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel, Field - - -class InsertMetaName(BaseModel): - kor_nm: str - eng_nm: str - TYPE: int = Field(alias="type") - - -def api(insert: InsertMetaName) -> Dict: - insert_meta_name = f'INSERT INTO tb_biz_meta_name (kor_nm, eng_nm, show_odrg, nm_id, type)\ - VALUES ({convert_data(insert.kor_nm)}, {convert_data(insert.eng_nm.lower())}, 0,\ - {convert_data(uuid.uuid4())}, {convert_data(insert.TYPE)});' - symbol_list = list(map(str, string.punctuation)) - symbol_list.remove("_") - symbol_list.remove("'") - symbol_list.remove('"') - symbol_list.remove("-") - select_eng_nm = 'SELECT eng_nm FROM tb_biz_meta_name' - try: - db = connect_db() - eng_nm_list = db.select(select_eng_nm)[0] - - # 중복 체크 - if len(eng_nm_list): - eng_nm_list = [eng_nm["eng_nm"] for eng_nm in eng_nm_list] - if insert.eng_nm in eng_nm_list: - raise ValueError - - # 특수문자 체크 - if list(filter(lambda eng_nm: eng_nm in symbol_list, insert.eng_nm)): - raise ValueError - - db.execute(insert_meta_name) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - return result diff --git a/API-SERVICE/ServiceApiList/meta/insertSampleData.py b/API-SERVICE/ServiceApiList/meta/insertSampleData.py deleted file mode 100644 index 47df9b25..00000000 --- a/API-SERVICE/ServiceApiList/meta/insertSampleData.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel - - -class isnertSampleData(BaseModel): - biz_dataset_id: str - sample_contents: str - column_seperator: str = "," - file_nm: str - file_extension: str = "csv" - - -def api(file_path: str, sample_data: isnertSampleData) -> Dict: - try: - db = connect_db() - with open(f'{file_path}/{sample_data.file_nm}.{sample_data.file_extension}', 'r', encoding='cp949') as fp: - data = fp.read().replace("'", "''").split("\n") - sample_data.sample_contents = '\n'.join(data) - - insert_sample_query = f'INSERT INTO tb_meta_detail_sampledata(biz_dataset_id, sample_contents, column_seperator, column_count, file_nm, file_extension) \ - VALUES({convert_data(sample_data.biz_dataset_id)},{convert_data(sample_data.sample_contents)},{convert_data(sample_data.column_seperator)}, \ - {convert_data(len(data))},{convert_data(sample_data.file_nm)},{convert_data(sample_data.file_extension)})' - db.execute(insert_sample_query) - - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - return result diff --git a/API-SERVICE/ServiceApiList/meta/insertUseBoardData.py b/API-SERVICE/ServiceApiList/meta/insertUseBoardData.py deleted file mode 100644 index 3d6b0777..00000000 --- a/API-SERVICE/ServiceApiList/meta/insertUseBoardData.py +++ /dev/null @@ -1,52 +0,0 @@ -from datetime import datetime, timedelta -from typing import Dict -import uuid -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_error_message, convert_data -from pydantic import BaseModel - - -class insertUseBoardData(BaseModel): - apyr: str - biz_dataset_id: str - apy_sbst: str - - -def api(use_board_data: insertUseBoardData) -> Dict: - get_biz_meta_query = f'SELECT * FROM v_biz_meta_wrap \ - WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' - - try: - db = connect_db() - biz_dataset, _ = db.select(get_biz_meta_query) - biz_dataset = biz_dataset[0] - - use_dataset_id = uuid.uuid4() - use_st_dt = datetime.today().strftime("%Y-%m-%d") - exp_date = (datetime.today() + timedelta(30)).strftime("%Y-%m-%d") - trt_sttus = "접수중" - use_tmscnt = 1 - apy_sbst = use_board_data.apy_sbst - - insert_use_data_query = f'INSERT INTO tb_board_use (use_dataset_id, apyr, \ - data_nm, ctgry, \ - file_size, law_evl_conf_yn, \ - use_st_dt, exp_date, \ - trt_sttus, use_tmscnt, \ - apy_sbst) \ - VALUES ( \ - {convert_data(use_dataset_id)}, {convert_data(use_board_data.apyr)}, \ - {convert_data(biz_dataset["data_nm"])}, {convert_data(biz_dataset["ctgry"])}, \ - {convert_data(biz_dataset["file_size"])}, {convert_data(biz_dataset["law_evl_conf_yn"])}, \ - {convert_data(use_st_dt)}, {convert_data(exp_date)}, \ - {convert_data(trt_sttus)}, {convert_data(use_tmscnt)}, \ - {convert_data(apy_sbst)} \ - );' - db.execute(insert_use_data_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, - "errorMessage": convert_error_message(except_name)} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ServiceApiList/meta/metaMapList.py b/API-SERVICE/ServiceApiList/meta/metaMapList.py deleted file mode 100644 index 02a750a4..00000000 --- a/API-SERVICE/ServiceApiList/meta/metaMapList.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info - - -def api() -> Dict: - meta_map_query = "SELECT\ - tbmn.kor_nm,\ - tbmn.eng_nm,\ - tbmm.item_id,\ - tbmm.nm_id\ - FROM\ - tb_biz_meta_name AS tbmn\ - JOIN tb_biz_meta_map AS tbmm\ - ON tbmm.nm_id = tbmn.nm_id;" - - try: - db = connect_db() - meta_map = db.select(meta_map_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", meta_map[0], meta_map[1]) - return result diff --git a/API-SERVICE/ServiceApiList/meta/metaNameList.py b/API-SERVICE/ServiceApiList/meta/metaNameList.py deleted file mode 100644 index 975b166d..00000000 --- a/API-SERVICE/ServiceApiList/meta/metaNameList.py +++ /dev/null @@ -1,39 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info - - -def api(perPage: int, curPage: int) -> Dict: - curPage = curPage - 1 - meta_name_query = f"SELECT\ - p.*\ - FROM tb_biz_meta_name AS p\ - JOIN (\ - SELECT kor_nm,\ - eng_nm,\ - show_odrg,\ - nm_id,\ - (CASE\ - WHEN type = 0 THEN 'text'\ - WHEN type = 1 THEN 'int'\ - WHEN type = 2 THEN 'binary'\ - END\ - ) AS type,\ - ROW_NUMBER () OVER (ORDER BY nm_id DESC) AS rowNo\ - FROM tb_biz_meta_name\ - ORDER BY nm_id\ - LIMIT {perPage}\ - OFFSET ({perPage} * {curPage})\ - ) AS t ON p.nm_id = t.nm_id" - total_cnt_query = "SELECT count(*) AS totalCount FROM tb_biz_meta_name" - - try: - db = connect_db() - meta_name = db.select(meta_name_query) - total_cnt = db.select(total_cnt_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", meta_name[0], meta_name[1]) - result["data"].update(total_cnt[0][0]) - return result diff --git a/API-SERVICE/ServiceApiList/meta/updateBizMeta.py b/API-SERVICE/ServiceApiList/meta/updateBizMeta.py deleted file mode 100644 index c64800e7..00000000 --- a/API-SERVICE/ServiceApiList/meta/updateBizMeta.py +++ /dev/null @@ -1,27 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel - - -class UpdateBizMeta(BaseModel): - biz_dataset_id: str - dataList: list - - -def api(update: UpdateBizMeta) -> Dict: - try: - db = connect_db() - for data in update.dataList: - query = f'UPDATE tb_biz_meta\ - SET item_id = {convert_data(data["itemId"])},\ - item_val = {convert_data(data["itemVal"])}\ - WHERE biz_dataset_id = {convert_data(update.biz_dataset_id)} AND \ - item_id = {convert_data(data["itemId"])};' - - db.execute(query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - return result diff --git a/API-SERVICE/ServiceApiList/meta/updateCategory.py b/API-SERVICE/ServiceApiList/meta/updateCategory.py deleted file mode 100644 index 3e6cbfef..00000000 --- a/API-SERVICE/ServiceApiList/meta/updateCategory.py +++ /dev/null @@ -1,27 +0,0 @@ -import uuid -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel -from typing import Dict - - -class UpdateCategory(BaseModel): - node_id: str - node_nm: str - - -# todo: 수정 필요 -def api(update: UpdateCategory) -> Dict: - query = f'UPDATE tb_category\ - SET prnts_id = {convert_data(uuid.uuid4())},\ - node_id = {convert_data(update.node_id)},\ - node_nm = {convert_data(update.node_nm)}\ - WHERE node_id = {convert_data(update.node_id)};' - try: - db = connect_db() - db.execute(query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - return result diff --git a/API-SERVICE/ServiceApiList/meta/updateMetaName.py b/API-SERVICE/ServiceApiList/meta/updateMetaName.py deleted file mode 100644 index 59bef571..00000000 --- a/API-SERVICE/ServiceApiList/meta/updateMetaName.py +++ /dev/null @@ -1,30 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel, Field - - -class UpdatetMetaName(BaseModel): - kor_nm: str - eng_nm: str - show_odrg: int - nm_id: str - TYPE: int = Field(alias="type") - - -def api(update: UpdatetMetaName) -> Dict: - query = f'UPDATE tb_biz_meta_name\ - SET kor_nm = {convert_data(update.kor_nm)},\ - eng_nm = {convert_data(update.eng_nm)},\ - show_odrg = {convert_data(update.show_odrg)},\ - type = {convert_data(update.TYPE)}\ - WHERE nm_id = {convert_data(update.nm_id)};' - - try: - db = connect_db() - db.execute(query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - return result diff --git a/API-SERVICE/ServiceApiList/meta/updateUseBoardData.py b/API-SERVICE/ServiceApiList/meta/updateUseBoardData.py deleted file mode 100644 index 5766239a..00000000 --- a/API-SERVICE/ServiceApiList/meta/updateUseBoardData.py +++ /dev/null @@ -1,48 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel -from datetime import datetime, timedelta - - -class updateUseBoardData(BaseModel): - apyr: str - use_dataset_id: str - biz_dataset_id: str - apy_sbst: str - - -def api(use_board_data: updateUseBoardData) -> Dict: - get_biz_meta_query = f'SELECT * FROM v_biz_meta_wrap \ - WHERE biz_dataset_id = {convert_data(use_board_data.biz_dataset_id)};' - - try: - db = connect_db() - biz_dataset, _ = db.select(get_biz_meta_query) - biz_dataset = biz_dataset[0] - - use_st_dt = datetime.today().strftime("%Y-%m-%d") - exp_date = (datetime.today() + timedelta(30)).strftime("%Y-%m-%d") - trt_sttus = "활용중" - use_tmscnt = 2 - apy_sbst = use_board_data.apy_sbst - - update_use_data_query = f'UPDATE tb_board_use SET \ - data_nm = {convert_data(biz_dataset["data_nm"])},\ - ctgry = {convert_data(biz_dataset["ctgry"])},\ - file_size = {convert_data(biz_dataset["file_size"])},\ - law_evl_conf_yn = {convert_data(biz_dataset["law_evl_conf_yn"])},\ - use_st_dt = {convert_data(use_st_dt)},\ - exp_date = {convert_data(exp_date)},\ - trt_sttus = {convert_data(trt_sttus)},\ - use_tmscnt = {convert_data(use_tmscnt)},\ - apy_sbst = {convert_data(apy_sbst)}\ - WHERE use_dataset_id = {convert_data(use_board_data.use_dataset_id)};' - - db.execute(update_use_data_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ServiceApiList/meta/useMetaNameList.py b/API-SERVICE/ServiceApiList/meta/useMetaNameList.py deleted file mode 100644 index 902a106b..00000000 --- a/API-SERVICE/ServiceApiList/meta/useMetaNameList.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info - - -def api() -> Dict: - meta_name_query = "SELECT\ - CASE\ - WHEN(SELECT tbmm.nm_id FROM tb_biz_meta_map tbmm WHERE tbmn.nm_id=tbmm.nm_id) IS NULL THEN 0\ - ELSE 1\ - END AS use_meta,\ - tbmn.kor_nm,\ - tbmn.eng_nm,\ - tbmn.show_odrg,\ - CASE\ - WHEN tbmn.type = 0 THEN 'text'\ - WHEN tbmn.type = 1 THEN 'int'\ - WHEN tbmn.type = 2 THEN 'binary'\ - END AS type,\ - tbmn.nm_id\ - FROM tb_biz_meta_name tbmn\ - ORDER BY tbmn.nm_id;" - - try: - db = connect_db() - meta_name = db.select(meta_name_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", meta_name[0], meta_name[1]) - return result diff --git a/API-SERVICE/ServiceApiList/sitemng/__init__.py b/API-SERVICE/ServiceApiList/sitemng/__init__.py deleted file mode 100644 index b6e690fd..00000000 --- a/API-SERVICE/ServiceApiList/sitemng/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import * diff --git a/API-SERVICE/ServiceApiList/sitemng/getCodeInfo.py b/API-SERVICE/ServiceApiList/sitemng/getCodeInfo.py deleted file mode 100644 index bdeadb13..00000000 --- a/API-SERVICE/ServiceApiList/sitemng/getCodeInfo.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import Dict -from ServiceUtils.CommonUtil import connect_db, get_exception_info, convert_data - - -def api(groupId) -> Dict: - get_code_info_query = f'SELECT code_id, code_nm \ - FROM tb_code_detail \ - WHERE code_group_id = {convert_data(groupId)};' - try: - db = connect_db() - code_list = db.select(get_code_info_query) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - code_info = [] - if len(code_list[0]): - code_info = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} - for code_detail in code_list[0]] - - body = {"list": code_info} - result = {"result": 1, "errorMessage": "", "data": body} - - return result diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 4af8b63e..ecc69b31 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -1,128 +1,3 @@ -[metaNameList] -method = GET -url = /portal/api/meta/metaNameList -sub_dir = meta - -[getMetaNameDetail] -method = GET -url = /portal/api/meta/getMetaNameDetail -sub_dir = meta - -[insertMetaName] -method = POST -url = /portal/api/meta/insertMetaName -sub_dir = meta - -[updateMetaName] -method = POST -url = /portal/api/meta/updateMetaName -sub_dir = meta - -[metaMapList] -method = GET -url = /portal/api/meta/metaMapList -sub_dir = meta - -[useMetaNameList] -method = GET -url = /portal/api/meta/useMetaNameList -sub_dir = meta - -[insertMetaMap] -method = POST -url = /portal/api/meta/insertMetaMap -sub_dir = meta - -[getBizMetaList] -method = GET -url = /portal/api/meta/getBizMetaList -sub_dir = meta - -[getBizMetaDetail] -method = GET -url = /portal/api/meta/getBizMetaDetail -sub_dir = meta - -[insertBizMeta] -method = POST -url = /portal/api/meta/insertBizMeta -sub_dir = meta - -[updateBizMeta] -method = POST -url = /portal/api/meta/updateBizMeta -sub_dir = meta - -[getCategoryList] -method = GET -url = /portal/api/meta/getCategoryList -sub_dir = meta - -[updateCategory] -method = POST -url = /portal/api/meta/updateCategory -sub_dir = meta - -[addChildCategory] -method = POST -url = /portal/api/meta/addChildCategory -sub_dir = meta - -[insertUseBoardData] -method = POST -url = /portal/api/meta/insertUseBoardData -sub_dir = meta - -[updateUseBoardData] -method = POST -url = /portal/api/meta/updateUseBoardData -sub_dir = meta - -[deleteUseBoardData] -method = POST -url = /portal/api/meta/deleteUseBoardData -sub_dir = meta - -[getUseBoardDataList] -method = GET -url = /portal/api/meta/getUseBoardDataList -sub_dir = meta - -[getUseBoardDataDetail] -method = GET -url = /portal/api/meta/getUseBoardDataDetail -sub_dir = meta - -[insertBizMetaData] -method = POST -url = /portal/api/meta/insertBizMetaData -sub_dir = meta - -[getCategoryTree] -method = GET -url = /portal/api/meta/getCategoryTree -sub_dir = meta - -[getBizMetaDetailDq] -method = GET -url = /portal/api/meta/getBizMetaDetailDq -sub_dir = meta - -[getBizMetaDetailFiles] -method = GET -url = /portal/api/meta/getBizMetaDetailFiles -sub_dir = meta - -[getBizMetaDetailSample] -method = GET -url = /portal/api/meta/getBizMetaDetailSample -sub_dir = meta - -[insertSampleData] -method = POST -url = /portal/api/meta/insertSampleData -sub_dir = meta - [getElsBizMetaList] method = POST url = /portal/api/meta/getElsBizMetaList diff --git a/API-SERVICE/conf/sitemng/api_config.ini b/API-SERVICE/conf/sitemng/api_config.ini deleted file mode 100644 index c361546c..00000000 --- a/API-SERVICE/conf/sitemng/api_config.ini +++ /dev/null @@ -1,4 +0,0 @@ -[getCodeInfo] -method = GET -url = /portal/api/sitemng/getCodeInfo -sub_dir = sitemng \ No newline at end of file diff --git a/API-SERVICE/conf/sitemng/config.ini b/API-SERVICE/conf/sitemng/config.ini deleted file mode 100644 index cc55be15..00000000 --- a/API-SERVICE/conf/sitemng/config.ini +++ /dev/null @@ -1,19 +0,0 @@ -[test_db] -host = 192.168.100.126 -port = 25432 -user = dpsi -password = hello.sitemng12#$ -database = ktportal -schema = sitemng - -[commercial_db] -host = 192.168.100.126 -port = 25432 -user = dpsi -password = hello.sitemng12#$ -database = ktportal -schema = sitemng - -[secret_info] -name = user-katech-access-token -secret = jwt-secrect-b-iris diff --git a/API-SERVICE/conf/sitemng/logging.conf b/API-SERVICE/conf/sitemng/logging.conf deleted file mode 100644 index 6a6c0ba0..00000000 --- a/API-SERVICE/conf/sitemng/logging.conf +++ /dev/null @@ -1,42 +0,0 @@ -[loggers] -keys = root,trace - -[logger_root] -level = INFO -handlers = console,rotatingFileHandler - -[logger_trace] -level = INFO -qualname = trace -handlers = traceHandler -propagate = 0 - -[formatters] -keys = default,trace - -[formatter_default] -format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s - -[formatter_trace] -format = %(asctime)s %(message)s - -[handlers] -keys = console,rotatingFileHandler,traceHandler - -[handler_console] -class = StreamHandler -args = (sys.stdout,) -formatter = default -level = INFO - -[handler_rotatingFileHandler] -class = handlers.RotatingFileHandler -formatter = default -args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/sitemng/sitemng.log', 'a', 20000000, 10) -level = INFO - -[handler_traceHandler] -class = handlers.TimedRotatingFileHandler -formatter = trace -args = ('Sitemng-Trace.log', 'D', 1) -level = INFO From 55a5ef9281b0331f4f891b4c1d0516c269d87e49 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 26 Oct 2022 11:14:38 +0900 Subject: [PATCH 179/236] =?UTF-8?q?kt=20=EA=B0=9C=EB=B0=9C=20IP=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/conf/config.ini | 6 +++--- API-SERVICE/conf/common/config.ini | 6 +++--- API-SERVICE/conf/meta/config.ini | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 717e4681..c712ccdb 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -13,10 +13,10 @@ database = ktportal schema = sitemng [commercial_db] -host = 192.168.100.126 -port = 25432 +host = 10.220.184.63 +port = 5432 user = dpsi -password = hello.sitemng12#$ +password = 22DOCean.@!~ database = ktportal schema = sitemng diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 4c5b83de..f59f4446 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -7,10 +7,10 @@ database = ktportal schema = users,meta,sitemng,board,analysis,sysconfig [commercial_db] -host = 192.168.100.126 -port = 25432 +host = 10.220.184.63 +port = 5432 user = dpmanager -password = hello.dp12#$ +password = 22DOCean.@!~ database = ktportal schema = users,meta,sitemng,board,analysis,sysconfig diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index bfc964f4..78804d64 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -7,10 +7,10 @@ database = ktportal schema = meta [commercial_db] -host = 192.168.100.126 -port = 25432 +host = 10.220.184.63 +port = 5432 user = dpme -password = hello.meta12#$ +password = 22DOCean.@!~ database = ktportal schema = meta From 0a029e37bdba864fa43002ee74a3af053f9d43fa Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 26 Oct 2022 13:37:41 +0900 Subject: [PATCH 180/236] =?UTF-8?q?pkg=20=EC=83=9D=EC=84=B1=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20init=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Manager/__init__.py | 1 + API-SERVICE/ELKSearch/Utils/__init__.py | 1 + API-SERVICE/ELKSearch/__init__.py | 2 ++ requirements.txt | 1 + 4 files changed, 5 insertions(+) create mode 100644 API-SERVICE/ELKSearch/__init__.py diff --git a/API-SERVICE/ELKSearch/Manager/__init__.py b/API-SERVICE/ELKSearch/Manager/__init__.py index e69de29b..b6e690fd 100644 --- a/API-SERVICE/ELKSearch/Manager/__init__.py +++ b/API-SERVICE/ELKSearch/Manager/__init__.py @@ -0,0 +1 @@ +from . import * diff --git a/API-SERVICE/ELKSearch/Utils/__init__.py b/API-SERVICE/ELKSearch/Utils/__init__.py index e69de29b..b6e690fd 100644 --- a/API-SERVICE/ELKSearch/Utils/__init__.py +++ b/API-SERVICE/ELKSearch/Utils/__init__.py @@ -0,0 +1 @@ +from . import * diff --git a/API-SERVICE/ELKSearch/__init__.py b/API-SERVICE/ELKSearch/__init__.py new file mode 100644 index 00000000..781be988 --- /dev/null +++ b/API-SERVICE/ELKSearch/__init__.py @@ -0,0 +1,2 @@ +from .Manager import * +from .Utils import * diff --git a/requirements.txt b/requirements.txt index e02efd4c..241e673c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,5 +3,6 @@ psycopg2-binary==2.9.3 asyncssh==2.12.0 aiohttp==3.8.3 + elasticsearch==7.17.6 mobigen-router mobigen-service \ No newline at end of file From 355efebfe9507f148cbdbb0c0190d7ead4672149 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 26 Oct 2022 16:55:04 +0900 Subject: [PATCH 181/236] =?UTF-8?q?fix=20:=20=EC=BF=A0=ED=82=A4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=98=B5=EC=85=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/RouteUtil.py | 2 +- API-SERVICE/ApiService/ApiServiceConfig.py | 1 + .../ServiceApiList/common/commonSelect.py | 3 +- .../ServiceApiList/common/commonToken.py | 2 +- .../ServiceApiList/common/userLogin.py | 9 +++- API-SERVICE/ServiceUtils/CommonUtil.py | 44 +++++++++---------- API-SERVICE/conf/common/config.ini | 8 ++++ API-SERVICE/conf/meta/config.ini | 12 ++--- 8 files changed, 48 insertions(+), 33 deletions(-) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index d5605882..3d6ae10f 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -27,7 +27,7 @@ def make_route_response(result, api_name, access_token): add_cookie_api_list = config.secret_info["add_cookie_api"].split(",") if api_name in add_cookie_api_list: response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=True, httponly=True) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) return response diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index e04f15c7..a5b6bb6a 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -19,6 +19,7 @@ class ApiServiceConfig: secret_info: Dict user_info: Dict + lamp_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index 53c50f51..b48f6c84 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -1,6 +1,6 @@ from typing import Dict, List, Optional from ApiService.ApiServiceConfig import config -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data, kt_lamp +from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data from pydantic import BaseModel from fastapi.logger import logger @@ -130,5 +130,4 @@ def api(select_info: commonSelect) -> Dict: if select_info.page_info: result["data"].update(total_cnt[0][0]) - # kt_lamp() return result diff --git a/API-SERVICE/ServiceApiList/common/commonToken.py b/API-SERVICE/ServiceApiList/common/commonToken.py index ea04d952..f6a02357 100644 --- a/API-SERVICE/ServiceApiList/common/commonToken.py +++ b/API-SERVICE/ServiceApiList/common/commonToken.py @@ -41,5 +41,5 @@ def api(request: Request) -> Dict: response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=True, httponly=True) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) return response diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index f1f9c35d..1ac8ae40 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -3,7 +3,7 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta -from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data +from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data, kt_lamp from ApiService.ApiServiceConfig import config @@ -28,6 +28,7 @@ def make_insert_query(login: dict): def api(login: userLogin) -> Dict: + # kt_lamp("OUT_REQ", "userLogin") try: db = connect_db() user_info, _ = db.select( @@ -43,6 +44,8 @@ def api(login: userLogin) -> Dict: except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} + # kt_lamp("OUT_RES", "userLogin", res_type="S", + # res_code = "DC_ERROR", res_desc = f'{login.emp_id}.{except_name}') else: token_data = make_token_data(user_info) access_token = create_token( @@ -51,5 +54,7 @@ def api(login: userLogin) -> Dict: response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=True, httponly=True) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) + + # kt_lamp("OUT_RES", "userLogin") return response diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 1b3dd3bb..e406726b 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -15,6 +15,7 @@ import jwt import traceback import logging +import uuid lamp = logging.getLogger("trace") @@ -75,6 +76,7 @@ def prepare_config(root_path) -> None: config.server_port = args.port config.db_type = f'{args.db_type}_db' config.db_info = api_router_cfg[config.db_type] + config.lamp_info = api_router_cfg["lamp_info"] config.conn_pool = make_connection_pool(config.db_info) if config.category == "common": config.secret_info = api_router_cfg["secret_info"] @@ -190,29 +192,27 @@ def make_token_data(user: Dict) -> Dict: return token_data -lamp_form = { - "timestamp": "", - "service": "", - "operation": "", - "transactionId": "", - "logType": "", - "host": {"name": "", "ip": ""}, -} - - -def kt_lamp(log_type: str, operation: str, dest_info: Dict, res_info: Dict, transaction_id: str = None): - lamp_form["service"] = "" +def kt_lamp(log_type: str, operation: str, res_type: str = "I", res_code: str = "", res_desc: str = ""): + lamp_form = {} + now = datetime.now() + lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f') + lamp_form["service"] = config.lamp_info["service_code"] lamp_form["operation"] = operation - lamp_form["transactionId"] = transaction_id + lamp_form["transactionId"] = f'{lamp_form["service"]}_{uuid.uuid4()}' lamp_form["logType"] = log_type - lamp_form["host"]["name"] = socket.gethostname() - lamp_form["host"]["ip"] = socket.gethostbyname(lamp_form["host"]["name"]) - - if log_type == "": - pass - elif log_type == "": - pass - elif log_type == "": - pass + + lamp_form["host"] = {} + lamp_form["host"]["name"] = config.lamp_info["host_name"] + lamp_form["host"]["ip"] = config.lamp_info["host_ip"] + + if log_type == "OUT_REQ": + lamp_form["destination"] = {} + lamp_form["destination"]["name"] = config.lamp_info["dest_name"] + lamp_form["destination"]["ip"] = config.lamp_info["dest_ip"] + elif log_type == "OUT_RES" or log_type == "IN_RES": + lamp_form["response"] = {} + lamp_form["response"]["type"] = res_type + lamp_form["response"]["code"] = res_code + lamp_form["response"]["desc"] = res_desc lamp.info(lamp_form) diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index f59f4446..1f2872ff 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -24,3 +24,11 @@ token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm,aut_group_cd,data [user_info] table = user_bas id_column = emp_id + +[lamp_info] +service_code = PG016701 +prefix = service +host_name = host +host_ip = 192.168.101.44 +dest_name = dest +dest_ip = 192.168.100.126 \ No newline at end of file diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index 78804d64..aae1468d 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -14,8 +14,10 @@ password = 22DOCean.@!~ database = ktportal schema = meta -[secret_info] -name = user-katech-access-token -secret = jwt-secrect-b-iris - - +[lamp_info] +service_code = PG016701 +prefix = service +host_name = host +host_ip = 192.168.101.44 +dest_name = dest +dest_ip = 192.168.100.126 From 44622a3166790ee6a06559545d1efb1661396a8a Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 27 Oct 2022 11:51:57 +0900 Subject: [PATCH 182/236] =?UTF-8?q?[AIPLATFORM-631=20]=20kt=20lamp=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 15 +++- API-ROUTER/ApiRoute/ApiRouteConfig.py | 1 + API-ROUTER/RouterUtils/CommonUtil.py | 83 ++++++++++++++----- API-ROUTER/RouterUtils/RouteUtil.py | 9 +- API-ROUTER/conf/config.ini | 10 ++- API-ROUTER/conf/logging.conf | 6 +- .../ServiceApiList/common/userLogin.py | 10 ++- API-SERVICE/ServiceUtils/CommonUtil.py | 25 +----- API-SERVICE/conf/common/config.ini | 6 +- API-SERVICE/conf/common/logging.conf | 4 +- API-SERVICE/conf/meta/logging.conf | 4 +- 11 files changed, 111 insertions(+), 62 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 5e59fc85..cba6566c 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,12 +3,14 @@ import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config -from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers +from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, kt_lamp from RouterUtils.RouteUtil import bypass_msg, call_remote_func, get_api_info, make_route_response from pydantic import BaseModel from starlette.requests import Request from urllib import parse import logging +import uuid + trace_logger = logging.getLogger("trace") @@ -81,8 +83,15 @@ async def route_api(self, request: Request) -> Dict: body = None headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) + + transaction_id = f'{config.lamp_info["service_code"]}_{uuid.uuid4()}' + headers["transactionId"] = transaction_id + try: api_info, api_params = get_api_info(route_url) + # lamp 1 + kt_lamp("IN_REQ", transaction_id, api_info["api_nm"]) + if method == "POST": body = await request.json() @@ -91,7 +100,6 @@ async def route_api(self, request: Request) -> Dict: logger.info( f'\n- api_info : {api_info}\n- api_params : {api_params} \ \n- req body : {body}, params_query : {params_query}') - if api_info["mode"] == "MESSAGE PASSING": result, access_token = await bypass_msg(api_info, params_query, body, headers) else: @@ -100,4 +108,7 @@ async def route_api(self, request: Request) -> Dict: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} + # lamp 6 + kt_lamp("IN_RES", transaction_id, api_info["api_nm"]) + return make_route_response(result, api_info["api_nm"], access_token) diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index 92132ab6..ebb4748f 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -20,6 +20,7 @@ class ApiRouteConfig: api_params: List[Dict] secret_info: Dict + lamp_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-ROUTER/RouterUtils/CommonUtil.py b/API-ROUTER/RouterUtils/CommonUtil.py index 748ce7c8..85e17892 100644 --- a/API-ROUTER/RouterUtils/CommonUtil.py +++ b/API-ROUTER/RouterUtils/CommonUtil.py @@ -9,10 +9,16 @@ from psycopg2 import pool import sys import traceback +import logging +from datetime import datetime + +lamp = logging.getLogger("trace") + def convert_data(data) -> str: return f'\'{str(data)}\'' + def set_log_path(): parser = configparser.ConfigParser() parser.read(f'{config.root_path}/conf/logging.conf', encoding='utf-8') @@ -23,25 +29,26 @@ def set_log_path(): with open(f'{config.root_path}/conf/logging.conf', 'w') as f: parser.write(f) + def get_config(config_name: str): ano_cfg = {} conf = configparser.ConfigParser() - config_path =config.root_path+f'/conf/{config_name}' - conf.read(config_path, encoding = 'utf-8') + config_path = config.root_path+f'/conf/{config_name}' + conf.read(config_path, encoding='utf-8') for section in conf.sections(): - ano_cfg[section]={} + ano_cfg[section] = {} for option in conf.options(section): - ano_cfg[section][option]=conf.get(section, option) + ano_cfg[section][option] = conf.get(section, option) return ano_cfg def parser_params() -> Any: - parser=argparse.ArgumentParser() - parser.add_argument("--host", type = str, default = "127.0.0.1") - parser.add_argument("--port", type = int, default = 18000) - parser.add_argument("--db_type", default = "test") + parser = argparse.ArgumentParser() + parser.add_argument("--host", type=str, default="127.0.0.1") + parser.add_argument("--port", type=int, default=18000) + parser.add_argument("--db_type", default="test") return parser.parse_args() @@ -49,15 +56,17 @@ def parser_params() -> Any: def prepare_config(root_path) -> None: args = parser_params() config.root_path = root_path - api_router_cfg=get_config("config.ini") - config.api_config=get_config("api_config.ini") - config.db_type=f'{args.db_type}_db' - config.server_host=args.host - config.server_port=args.port - config.db_info=api_router_cfg[config.db_type] + api_router_cfg = get_config("config.ini") + config.api_config = get_config("api_config.ini") + config.db_type = f'{args.db_type}_db' + config.server_host = args.host + config.server_port = args.port + config.db_info = api_router_cfg[config.db_type] config.conn_pool = make_connection_pool(config.db_info) - config.remote_info=api_router_cfg["remote"] - config.secret_info=api_router_cfg["secret_info"] + config.remote_info = api_router_cfg["remote"] + config.secret_info = api_router_cfg["secret_info"] + config.lamp_info = api_router_cfg["lamp_info"] + def make_connection_pool(db_info): conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], @@ -68,29 +77,31 @@ def make_connection_pool(db_info): options=f'-c search_path={db_info["schema"]}', connect_timeout=10) return conn_pool + def connect_db(): db = PostgresManager() return db + def save_file_for_reload(): with open(f'{config.root_path}/server.py', "a") as fd: fd.write(" ") -def make_res_msg(result, err_msg, data = None, column_names = None): - header_list=[] + +def make_res_msg(result, err_msg, data=None, column_names=None): + header_list = [] for column_name in column_names: - header={"column_name": column_name} + header = {"column_name": column_name} header_list.append(header) if data is None or column_names is None: - res_msg={"result": result, "errorMessage": err_msg} + res_msg = {"result": result, "errorMessage": err_msg} else: - res_msg={"result": result, "errorMessage": err_msg, + res_msg = {"result": result, "errorMessage": err_msg, "body": data, "header": header_list} return res_msg - def get_exception_info(): ex_type, ex_value, ex_traceback = sys.exc_info() trace_back = traceback.extract_tb(ex_traceback) @@ -99,9 +110,35 @@ def get_exception_info(): f'\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}') return ex_type.__name__ + def delete_headers(headers: Dict, delete_header: List) -> Dict: for delete in delete_header: if headers.get(delete): del(headers[delete]) return headers - \ No newline at end of file + + +def kt_lamp(log_type: str, transaction_id: str, operation: str, res_type: str = "I", res_code: str = "", res_desc: str = ""): + lamp_form = {} + now = datetime.now() + lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + lamp_form["service"] = config.lamp_info["service_code"] + lamp_form["operation"] = f'{config.lamp_info["prefix"]}_{operation}' + lamp_form["transactionId"] = transaction_id + lamp_form["logType"] = log_type + + lamp_form["host"] = {} + lamp_form["host"]["name"] = config.lamp_info["host_name"] + lamp_form["host"]["ip"] = config.lamp_info["host_ip"] + + if log_type == "OUT_REQ": + lamp_form["destination"] = {} + lamp_form["destination"]["name"] = config.lamp_info["dest_name"] + lamp_form["destination"]["ip"] = config.lamp_info["dest_ip"] + elif log_type == "OUT_RES" or log_type == "IN_RES": + lamp_form["response"] = {} + lamp_form["response"]["type"] = res_type + lamp_form["response"]["code"] = res_code + lamp_form["response"]["desc"] = res_desc + + lamp.info(lamp_form) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index 3d6ae10f..9f349b07 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -4,7 +4,7 @@ from fastapi.responses import JSONResponse from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config -from RouterUtils.CommonUtil import get_exception_info +from RouterUtils.CommonUtil import get_exception_info, kt_lamp from typing import Dict @@ -46,8 +46,10 @@ def get_api_info(route_url): async def bypass_msg(api_info, params_query, body, headers): - method = api_info["mthd"] + # lamp 2 + kt_lamp("OUT_REQ", headers["transactionId"], api_info["api_nm"]) + method = api_info["mthd"] url = make_url(api_info["srvr_nm"], api_info["url"]) if url is None: return {"result": 0, "errorMessage": "The server info does not exist."} @@ -72,6 +74,9 @@ async def bypass_msg(api_info, params_query, body, headers): else: logger.error(f'Method Not Allowed. {method}') result = {"result": 0, "errorMessage": "Method Not Allowed."} + + # lamp 5 + kt_lamp("OUT_RES", headers["transactionId"], api_info["api_nm"]) return result, access_token diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index c712ccdb..5f0184a5 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -22,4 +22,12 @@ schema = sitemng [secret_info] cookie_name = user-docean-access-token -add_cookie_api = userLogin,commonLogout,commonToken \ No newline at end of file +add_cookie_api = userLogin,commonLogout,commonToken + +[lamp_info] +service_code = PG016701 +prefix = router +host_name = portal +host_ip = 192.168.100.126 +dest_name = portal +dest_ip = 192.168.100.126 \ No newline at end of file diff --git a/API-ROUTER/conf/logging.conf b/API-ROUTER/conf/logging.conf index 5d627442..0fe35ec3 100644 --- a/API-ROUTER/conf/logging.conf +++ b/API-ROUTER/conf/logging.conf @@ -18,7 +18,7 @@ keys = default,trace format = %(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s [formatter_trace] -format = %(asctime)s %(message)s +format = %(message)s [handlers] keys = console,rotatingFileHandler,traceHandler @@ -36,8 +36,8 @@ args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-ROUTER/log/A level = INFO [handler_traceHandler] -class = handlers.TimedRotatingFileHandler +class = handlers.RotatingFileHandler formatter = trace -args = ('Router-Trace.log', 'D', 1) +args = ('Router-Trace.log', 'a', 20000000, 10) level = INFO diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 1ac8ae40..ac2449cf 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -1,5 +1,6 @@ from typing import Dict, Optional from pydantic import BaseModel +from fastapi import Request from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta @@ -27,8 +28,10 @@ def make_insert_query(login: dict): return f'INSERT INTO user_bas ({columns}) VALUES ({values});' -def api(login: userLogin) -> Dict: - # kt_lamp("OUT_REQ", "userLogin") +def api(login: userLogin, request: Request) -> Dict: + transaction_id = request.headers.get("transactionId") + kt_lamp("OUT_REQ", transaction_id, "userLogin") + try: db = connect_db() user_info, _ = db.select( @@ -56,5 +59,6 @@ def api(login: userLogin) -> Dict: response.set_cookie( key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) - # kt_lamp("OUT_RES", "userLogin") + kt_lamp("OUT_RES", transaction_id, "userLogin", + res_desc=f'{login.emp_id}') return response diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index e406726b..7a04485a 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -3,7 +3,6 @@ import configparser import argparse import traceback - import socket from fastapi.logger import logger from fastapi import Request, HTTPException, status @@ -15,7 +14,6 @@ import jwt import traceback import logging -import uuid lamp = logging.getLogger("trace") @@ -140,21 +138,6 @@ def convert_error_message(exception_name: str): return error_message -def get_transaciton_id(request: Request): - try: - transaction_id = request.headers.get("accept") - - except Exception: - transaction_id = 'TEST Message' - ''' - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=f"Transaction information does not exist." - ) - ''' - return transaction_id - - ##### for user info ##### class IncorrectUserName(Exception): pass @@ -192,13 +175,13 @@ def make_token_data(user: Dict) -> Dict: return token_data -def kt_lamp(log_type: str, operation: str, res_type: str = "I", res_code: str = "", res_desc: str = ""): +def kt_lamp(log_type: str, transaction_id: str, operation: str, res_type: str = "I", res_code: str = "", res_desc: str = ""): lamp_form = {} now = datetime.now() - lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f') + lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] lamp_form["service"] = config.lamp_info["service_code"] - lamp_form["operation"] = operation - lamp_form["transactionId"] = f'{lamp_form["service"]}_{uuid.uuid4()}' + lamp_form["operation"] = f'{config.lamp_info["prefix"]}_{operation}' + lamp_form["transactionId"] = transaction_id lamp_form["logType"] = log_type lamp_form["host"] = {} diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 1f2872ff..365b3fc2 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -28,7 +28,7 @@ id_column = emp_id [lamp_info] service_code = PG016701 prefix = service -host_name = host -host_ip = 192.168.101.44 -dest_name = dest +host_name = portal +host_ip = 192.168.100.126 +dest_name = portal dest_ip = 192.168.100.126 \ No newline at end of file diff --git a/API-SERVICE/conf/common/logging.conf b/API-SERVICE/conf/common/logging.conf index 41940e97..c7422717 100644 --- a/API-SERVICE/conf/common/logging.conf +++ b/API-SERVICE/conf/common/logging.conf @@ -36,8 +36,8 @@ args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/ level = INFO [handler_traceHandler] -class = handlers.TimedRotatingFileHandler +class = handlers.RotatingFileHandler formatter = trace -args = ('Common-Trace.log', 'D', 1) +args = ('Common-Trace.log', 'a', 20000000, 10) level = INFO diff --git a/API-SERVICE/conf/meta/logging.conf b/API-SERVICE/conf/meta/logging.conf index 444fb4db..6229c99f 100644 --- a/API-SERVICE/conf/meta/logging.conf +++ b/API-SERVICE/conf/meta/logging.conf @@ -36,8 +36,8 @@ args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/ level = INFO [handler_traceHandler] -class = handlers.TimedRotatingFileHandler +class = handlers.RotatingFileHandler formatter = trace -args = ('Meta-Trace.log', 'D', 1) +args = ('Meta-Trace.log', 'a', 20000000, 10) level = INFO From 9246255e2ab523f15857058fe3b23235f5a28045 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 27 Oct 2022 13:26:42 +0900 Subject: [PATCH 183/236] =?UTF-8?q?44622a3:=20[AIPLATFORM-631=20]=20kt=20l?= =?UTF-8?q?amp=20API=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/CommonUtil.py | 47 ++++++++++++++-------------- API-ROUTER/conf/config.ini | 3 +- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/API-ROUTER/RouterUtils/CommonUtil.py b/API-ROUTER/RouterUtils/CommonUtil.py index 85e17892..c36cd8dc 100644 --- a/API-ROUTER/RouterUtils/CommonUtil.py +++ b/API-ROUTER/RouterUtils/CommonUtil.py @@ -119,26 +119,27 @@ def delete_headers(headers: Dict, delete_header: List) -> Dict: def kt_lamp(log_type: str, transaction_id: str, operation: str, res_type: str = "I", res_code: str = "", res_desc: str = ""): - lamp_form = {} - now = datetime.now() - lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] - lamp_form["service"] = config.lamp_info["service_code"] - lamp_form["operation"] = f'{config.lamp_info["prefix"]}_{operation}' - lamp_form["transactionId"] = transaction_id - lamp_form["logType"] = log_type - - lamp_form["host"] = {} - lamp_form["host"]["name"] = config.lamp_info["host_name"] - lamp_form["host"]["ip"] = config.lamp_info["host_ip"] - - if log_type == "OUT_REQ": - lamp_form["destination"] = {} - lamp_form["destination"]["name"] = config.lamp_info["dest_name"] - lamp_form["destination"]["ip"] = config.lamp_info["dest_ip"] - elif log_type == "OUT_RES" or log_type == "IN_RES": - lamp_form["response"] = {} - lamp_form["response"]["type"] = res_type - lamp_form["response"]["code"] = res_code - lamp_form["response"]["desc"] = res_desc - - lamp.info(lamp_form) + if operation in config.lamp_info["api_list"].split(","): + lamp_form = {} + now = datetime.now() + lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + lamp_form["service"] = config.lamp_info["service_code"] + lamp_form["operation"] = f'{config.lamp_info["prefix"]}_{operation}' + lamp_form["transactionId"] = transaction_id + lamp_form["logType"] = log_type + + lamp_form["host"] = {} + lamp_form["host"]["name"] = config.lamp_info["host_name"] + lamp_form["host"]["ip"] = config.lamp_info["host_ip"] + + if log_type == "OUT_REQ": + lamp_form["destination"] = {} + lamp_form["destination"]["name"] = config.lamp_info["dest_name"] + lamp_form["destination"]["ip"] = config.lamp_info["dest_ip"] + elif log_type == "OUT_RES" or log_type == "IN_RES": + lamp_form["response"] = {} + lamp_form["response"]["type"] = res_type + lamp_form["response"]["code"] = res_code + lamp_form["response"]["desc"] = res_desc + + lamp.info(lamp_form) diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 5f0184a5..bc6d2b6e 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -30,4 +30,5 @@ prefix = router host_name = portal host_ip = 192.168.100.126 dest_name = portal -dest_ip = 192.168.100.126 \ No newline at end of file +dest_ip = 192.168.100.126 +api_list = userLogin \ No newline at end of file From 6de013bfc4be4dfba4fc997565e81288a65a8f7e Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 31 Oct 2022 15:19:03 +0900 Subject: [PATCH 184/236] =?UTF-8?q?fix=20:=20kt=20=EC=83=81=EC=9A=A9=20?= =?UTF-8?q?=EA=B8=B0=EB=8F=99=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=B0=B8?= =?UTF-8?q?=EC=A1=B0=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 6 +++++- API-ROUTER/RouterUtils/RouteUtil.py | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index cba6566c..2edd0edc 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,7 +3,7 @@ import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config -from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, kt_lamp +# from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, kt_lamp # 함수 내부에 import로 수정 from RouterUtils.RouteUtil import bypass_msg, call_remote_func, get_api_info, make_route_response from pydantic import BaseModel from starlette.requests import Request @@ -45,6 +45,7 @@ def __init__(self) -> None: self.set_route() def set_route(self) -> None: + from RouterUtils.CommonUtil import connect_db self.router.add_api_route( "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"]) @@ -71,12 +72,15 @@ def set_route(self) -> None: tags=[f'service [ {conf_api_info["sub_dir"]} ]']) def reload_api(self): + from RouterUtils.CommonUtil import save_file_for_reload logger.info("Reload API Info") save_file_for_reload() result = {"result": 1, "errorMessage": ""} return result async def route_api(self, request: Request) -> Dict: + # 함수 내부에 import로 수정 + from RouterUtils.CommonUtil import get_exception_info, delete_headers, kt_lamp route_url = request.url.path method = request.method access_token = "" diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index 9f349b07..2bf0a43e 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -4,7 +4,7 @@ from fastapi.responses import JSONResponse from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config -from RouterUtils.CommonUtil import get_exception_info, kt_lamp +#from RouterUtils.CommonUtil import get_exception_info, kt_lamp from typing import Dict @@ -46,6 +46,8 @@ def get_api_info(route_url): async def bypass_msg(api_info, params_query, body, headers): + from RouterUtils.CommonUtil import kt_lamp + # lamp 2 kt_lamp("OUT_REQ", headers["transactionId"], api_info["api_nm"]) @@ -90,6 +92,8 @@ async def run_cmd(cmd: str): async def call_remote_func(api_info, api_params, input_params) -> Dict: + from RouterUtils.CommonUtil import get_exception_info + command_input = "" try: data = input_params[api_params["nm"]] From 2b8ea15a5616ca0dcaea17f51b743af853b65085 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 31 Oct 2022 16:45:42 +0900 Subject: [PATCH 185/236] =?UTF-8?q?api=20param=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/RouterUtils/RouteUtil.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index 2bf0a43e..fc4ff3b2 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -33,14 +33,13 @@ def make_route_response(result, api_name, access_token): def get_api_info(route_url): api_info = None - api_params = None + api_params = [] for api in config.api_info: if api["route_url"] == route_url: api_info = api for params in config.api_params: if params["api_nm"] == api["api_nm"]: - api_params = params - break + api_params.append(params) break return api_info, api_params @@ -95,15 +94,16 @@ async def call_remote_func(api_info, api_params, input_params) -> Dict: from RouterUtils.CommonUtil import get_exception_info command_input = "" - try: - data = input_params[api_params["nm"]] - if not data: - data = api_params["deflt_val"] - command_input += f' --{api_params["nm"]} {data}' - except KeyError: - logger.error( - f'parameter set default value. [{api_params["nm"]}]') - command_input += f' --{api_params["nm"]} {api_params["deflt_val"]}' + for api_param in api_params: + try: + data = input_params[api_param["nm"]] + if not data: + data = api_param["deflt_val"] + command_input += f' --{api_param["nm"]} {data}' + except KeyError: + logger.error( + f'parameter set default value. [{api_param["nm"]}]') + command_input += f' --{api_param["nm"]} {api_param["deflt_val"]}' cmd = f'{api_info["cmd"]} {command_input}' From 2b3f47b332abf9dfd40a20d444372c02d34cada4 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 1 Nov 2022 15:26:12 +0900 Subject: [PATCH 186/236] =?UTF-8?q?[AIPLATFORM-973]=20feat:=20elasticsearc?= =?UTF-8?q?h=20=EB=AA=A8=EB=93=88=20config=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/.gitignore | 2 - API-SERVICE/ELKSearch/conf/config.ini | 9 + API-SERVICE/ELKSearch/conf/db_config.ini | 15 ++ API-SERVICE/ELKSearch/conf/mapping.json | 205 +++++++++++++++++++++++ 4 files changed, 229 insertions(+), 2 deletions(-) create mode 100644 API-SERVICE/ELKSearch/conf/config.ini create mode 100644 API-SERVICE/ELKSearch/conf/db_config.ini create mode 100644 API-SERVICE/ELKSearch/conf/mapping.json diff --git a/API-SERVICE/ELKSearch/.gitignore b/API-SERVICE/ELKSearch/.gitignore index 53817731..fd1b0921 100644 --- a/API-SERVICE/ELKSearch/.gitignore +++ b/API-SERVICE/ELKSearch/.gitignore @@ -1,4 +1,2 @@ /.idea/ -test/DataBaseUtils/* -conf/* *.iml \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini new file mode 100644 index 00000000..88916149 --- /dev/null +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -0,0 +1,9 @@ +[kt] +host = 192.168.101.44 +port = 39200 +index = kt_biz_meta + +[local] +host = localhost +port = 9200 +index = biz_meta \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini new file mode 100644 index 00000000..72cbca67 --- /dev/null +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -0,0 +1,15 @@ +[local_db] +host = localhost +port = 5432 +user = postgres +password = 0312 +database = dataportal +schema = meta + +[kt_db] +host = 192.168.100.126 +port = 25432 +user = dpme +password = hello.meta12#$ +database = ktportal +schema = meta diff --git a/API-SERVICE/ELKSearch/conf/mapping.json b/API-SERVICE/ELKSearch/conf/mapping.json new file mode 100644 index 00000000..ff2c2117 --- /dev/null +++ b/API-SERVICE/ELKSearch/conf/mapping.json @@ -0,0 +1,205 @@ +{ + "settings": { + "queries.cache.enabled": "true", + "refresh_interval":"10s", + "max_shingle_diff": 10, + "analysis": { + "tokenizer": { + "nori_user_dic": { + "type": "nori_tokenizer", + "decompound_mode": "discard", + "user_dictionary": "user_dic.txt" + } + }, + "filter": { + "nori_pos": { + "type": "nori_part_of_speech", + "stoptags": [ + "E", "J", "SC", "SE", "SF", "SP", "SSC", "SSO", "SY", "VCN", "VCP", "VSV", "VX", "XPN", "XSA", "XSN", "XSV" + ] + }, + "synonym": { + "type": "synonym_graph", + "synonyms_path": "synonyms.txt" + }, + "stopwords": { + "type": "stop", + "stopwords_path": "stopwords.txt" + }, + "shingle_ten": { + "type": "shingle", + "token_separator": "", + "max_shingle_size": 10 + } + }, + "analyzer": { + "korean_analyzer": { + "tokenizer": "nori_user_dic", + "filter": [ + "nori_pos", "nori_readingform", "lowercase", "synonym", "stopwords", "remove_duplicates", "shingle_ten" + ] + } + } + } + }, + "mappings": { + "properties": { + "biz_dataset_id": { + "type": "keyword" + }, + "data_nm": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + }, + "fielddata": true + }, + "data_desc": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "ctgry": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "ctgry_id": { + "type": "keyword" + }, + "src_url": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "kywrd": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "reg_date": { + "type": "date" + }, + "recnt_amd_date": { + "type": "date" + }, + "lnk_date": { + "type": "date" + }, + "prv_forml": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "data_eng_nm": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "data_type": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "data_clas": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "law_review_ncst_yn": { + "type": "keyword" + }, + "secur_review_ncst_yn": { + "type": "keyword" + }, + "data_upd_cycl": { + "type": "keyword" + }, + "tkcgr": { + "type": "keyword" + }, + "tkcg_dept": { + "type": "keyword" + }, + "rqtr": { + "type": "keyword" + }, + "rqt_dept": { + "type": "keyword" + }, + "retv_num": { + "type": "integer" + }, + "intrst_data_num": { + "type": "integer" + }, + "downl_num": { + "type": "integer" + }, + "src_sys": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + }, + "file_size": { + "type": "text", + "fields": { + "korean_analyzer": { + "type": "text", + "analyzer": "korean_analyzer", + "search_analyzer": "standard" + } + } + } + } + } +} \ No newline at end of file From 56a358781ce1309057df931241b2074ff8e361ec Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 1 Nov 2022 15:27:11 +0900 Subject: [PATCH 187/236] =?UTF-8?q?[AIPLATFORM-1015]=20feat:=20els?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=ED=95=A0=20db=20util=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/database_utils.py | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 API-SERVICE/ELKSearch/Utils/database_utils.py diff --git a/API-SERVICE/ELKSearch/Utils/database_utils.py b/API-SERVICE/ELKSearch/Utils/database_utils.py new file mode 100644 index 00000000..87970218 --- /dev/null +++ b/API-SERVICE/ELKSearch/Utils/database_utils.py @@ -0,0 +1,99 @@ +import argparse +import configparser +from psycopg2 import pool +from typing import List, Dict, Tuple, Any +from ELKSearch.Manager.manager import ElasticSearchManager + + +class ApiServiceConfig: + root_path: str + category: str + + db_type: str + db_info: Dict + + els_type: str + els_info: Dict + check: bool + + conn_pool: pool.SimpleConnectionPool + es: ElasticSearchManager + + +config = ApiServiceConfig + + +def get_config(config_name: str): + ano_cfg = {} + + conf = configparser.ConfigParser() + config_path = config.root_path+f"/ELKSearch/conf/{config_name}" + conf.read(config_path, encoding='utf-8') + for section in conf.sections(): + ano_cfg[section] = {} + for option in conf.options(section): + ano_cfg[section][option] = conf.get(section, option) + + return ano_cfg + + +def parser_params() -> Any: + parser = argparse.ArgumentParser() + parser.add_argument("--category", default="local") + parser.add_argument("--db_type", default="local") + parser.add_argument("--check", default=True) + + return parser.parse_args() + + +def prepare_config(root_path) -> None: + args = parser_params() + config.root_path = root_path + config.category = args.category + + db_config = get_config("db_config.ini") + els_config = get_config("config.ini") + + config.els_type = args.category + config.els_info = els_config[args.category] + config.es = ElasticSearchManager(**config.els_info) + config.check = args.check + + config.db_type = f'{args.db_type}_db' + config.db_info = db_config[config.db_type] + config.conn_pool = make_connection_pool(config.db_info) + + +def make_connection_pool(db_info): + conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], + password=db_info["password"], + host=db_info["host"], + port=db_info["port"], + database=db_info["database"], + options=f'-c search_path={db_info["schema"]}', connect_timeout=10) + return conn_pool + + +def connect_db(): + conn = config.conn_pool.getconn() + return conn + + +def execute(conn, cursor, sql) -> None: + cursor.execute(sql) + conn.commit() + + +def select(conn, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], List[Any]]: + cursor = conn.cursor() + execute(conn, cursor, sql) + column_names = [desc[0] for desc in cursor.description] + if count is None: + rows = cursor.fetchall() + else: + rows = cursor.fetchmany(count) + + result = [] + for row in rows: + result.append(dict(zip(column_names, row))) + return result, column_names From 37a484e946141fbbd677e47acc9a6d456e3469be Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 1 Nov 2022 15:32:13 +0900 Subject: [PATCH 188/236] =?UTF-8?q?[AIPLATFORM-1015]=20feat:=20biz=5Fmeta?= =?UTF-8?q?=20index=20update=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/els_update.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 API-SERVICE/els_update.py diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py new file mode 100644 index 00000000..598067ec --- /dev/null +++ b/API-SERVICE/els_update.py @@ -0,0 +1,39 @@ +import os +from pathlib import Path +from datetime import datetime +from elasticsearch import helpers +from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, config + +root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) +prepare_config(root_path) + + +def main(): + bulk_meta_item = list() + prepare_config(root_path) + es = config.es + db = connect_db() + + db_query = f"SELECT * FROM vw_biz_meta_bas " + if config.check: + today = datetime.today().date() + condition = f"WHERE DATE(recnt_amd_date) > DATE('{today}')" \ + f"OR DATE(reg_date) >= DATE('{today}')" + db_query = db_query + condition + + meta_wrap_list = select(db,db_query)[0] + + try: + for meta_wrap in meta_wrap_list: + els_dict = dict() + els_dict["_id"] = meta_wrap["biz_dataset_id"] + els_dict["_source"] = meta_wrap + els_dict["_source"]["biz_dataset_id"] = meta_wrap["biz_dataset_id"] + bulk_meta_item.append(els_dict) + helpers.bulk(es.conn, bulk_meta_item, index=es.index) + except Exception as e: + print(e) + + +if __name__ == "__main__": + main() From 00e8135b5e08adddb5ab9a78dc6cb51e93309dab Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 1 Nov 2022 17:01:09 +0900 Subject: [PATCH 189/236] =?UTF-8?q?[AIPLATFORM-1015]=20feat:=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=EC=97=86=EB=8A=94=20=ED=95=A8=EC=88=98=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ELKSearch/Utils/elasticsearch_utils.py | 49 +------------------ 1 file changed, 1 insertion(+), 48 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index fd855ae1..5067dcde 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -1,5 +1,4 @@ -from typing import Union, Optional, List, Dict, Any -from elasticsearch import Elasticsearch +from typing import Dict, Any def is_space(text: str) -> int: @@ -15,52 +14,6 @@ def make_query(operator, field, value) -> Dict[Any, Any]: return query -def div_keyword(keywords: list) -> Dict[Any, Any]: - keyword_dict = {"match": []} - for word in keywords: - if is_space(word): - keyword_dict["match"].extend(word.split(" ")) - else: - keyword_dict["match"].append(word) - return keyword_dict - - -def set_dict_list(option_items: Union[list, dict], - operator: str, field: Optional[str] = None - ) -> List[Dict[Any, Any]]: - query_list = [] - for item in option_items: - if field: - # option_item type list - query = make_query(operator, field, item) - else: - # option item type dict - query = make_query(operator, item, option_items[item]) - query_list.append(query) - return query_list - - -def update_els_data( - es: Elasticsearch, db_data_list: List[Dict], col_key: str -) -> object: - """ - CronJob update to elasticsearch index data - :param es: elasticsearch object - :param db_data_list: insert data ex) [{col1: val1, col2: val2}, ...] - :param col_key: data primary key - :return: elasticsearch helpers object - """ - els_bulk_items = list() - - for row_data in db_data_list: - mapping_dict = dict() - mapping_dict["_id"] = row_data[col_key] - mapping_dict["_source"] = row_data - els_bulk_items.append(mapping_dict) - - return es.insert_bulk(els_bulk_items) - - def base_search_query(action: str, sub_action: str, item_list: list) -> Dict: item_dict = {sub_action: []} From a09a0b3884c877403d12c16ffc5603b57b6859b9 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 3 Nov 2022 13:50:59 +0900 Subject: [PATCH 190/236] =?UTF-8?q?[AIPLATFORM-1015]=20chore:=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/database_utils.py | 6 +++--- API-SERVICE/els_update.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/database_utils.py b/API-SERVICE/ELKSearch/Utils/database_utils.py index 87970218..aaee666b 100644 --- a/API-SERVICE/ELKSearch/Utils/database_utils.py +++ b/API-SERVICE/ELKSearch/Utils/database_utils.py @@ -5,7 +5,7 @@ from ELKSearch.Manager.manager import ElasticSearchManager -class ApiServiceConfig: +class ElsSearchConfig: root_path: str category: str @@ -20,7 +20,7 @@ class ApiServiceConfig: es: ElasticSearchManager -config = ApiServiceConfig +config = ElsSearchConfig def get_config(config_name: str): @@ -41,7 +41,7 @@ def parser_params() -> Any: parser = argparse.ArgumentParser() parser.add_argument("--category", default="local") parser.add_argument("--db_type", default="local") - parser.add_argument("--check", default=True) + parser.add_argument("--check", default="True") return parser.parse_args() diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 598067ec..6a3958dc 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -15,7 +15,7 @@ def main(): db = connect_db() db_query = f"SELECT * FROM vw_biz_meta_bas " - if config.check: + if config.check == "True": today = datetime.today().date() condition = f"WHERE DATE(recnt_amd_date) > DATE('{today}')" \ f"OR DATE(reg_date) >= DATE('{today}')" From 4b84c96ee4e8fc10b2c425fea35e60d0e11c6bae Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 4 Nov 2022 09:48:02 +0900 Subject: [PATCH 191/236] =?UTF-8?q?fix:=20access-token=EC=97=90=20None?= =?UTF-8?q?=EC=9D=B4=20=EB=93=A4=EC=96=B4=EA=B0=80=EB=8A=94=20=ED=98=84?= =?UTF-8?q?=EC=83=81=20=EC=9E=84=EC=8B=9C=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++++ API-SERVICE/ServiceApiList/common/commonLogout.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8e247578..a69c7ce3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,7 @@ __pycache__/ .DS_Store .idea *.log +build +mobigen_*.egg* +dist +.python-* \ No newline at end of file diff --git a/API-SERVICE/ServiceApiList/common/commonLogout.py b/API-SERVICE/ServiceApiList/common/commonLogout.py index 387fd053..910c3e8d 100644 --- a/API-SERVICE/ServiceApiList/common/commonLogout.py +++ b/API-SERVICE/ServiceApiList/common/commonLogout.py @@ -31,7 +31,7 @@ def api(request: Request) -> Dict: except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} - f_delete = False + # f_delete = False # 쿠기를 삭제하지 않으면 user-docean-access-token에 None 값이 들어가고 이는 Exception 발생을 야기 else: result = {"result": 1, "errorMessage": ""} response = JSONResponse(content=result) From ad49acf94403da1aa6fba34acf3a48ca4a29c01f Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 4 Nov 2022 14:31:29 +0900 Subject: [PATCH 192/236] =?UTF-8?q?[AIPLATFORM-1015]=20feat:=20config=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Manager/manager.py | 6 +++--- API-SERVICE/ELKSearch/Utils/model.py | 2 +- API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py | 1 + API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py index 2fd37a97..18060e21 100644 --- a/API-SERVICE/ELKSearch/Manager/manager.py +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -6,11 +6,11 @@ class ElasticSearchManager: def __init__( self, - host: str = "192.168.101.44", - port: str = "39200", + host: str = "10.217.59.133", + port: str = "9200", page: int = 1, size: int = 10, - index: str = "kt_biz_meta", + index: str = "biz_meta", ): """ set elasticsearch connect && DSL query setting function diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index 60e3c8a9..a0712f59 100644 --- a/API-SERVICE/ELKSearch/Utils/model.py +++ b/API-SERVICE/ELKSearch/Utils/model.py @@ -14,7 +14,7 @@ class SortOption(BaseModel): class InputModel(BaseModel): - index: str = "kt_biz_meta" + index: str = "biz_meta" from_: int = Field(1, alias="from") size: int = 10 resultField: list = [] diff --git a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py index 35d97789..26a9d989 100644 --- a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py @@ -6,6 +6,7 @@ def api(input: InputModel) -> Dict: + input.index = "biz_meta" data_dict = dict() from_ = input.from_ - 1 data_type = { diff --git a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py index 7aa074de..a4e98a02 100644 --- a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py @@ -13,7 +13,7 @@ def api(size: int, keyword: str) -> Dict: field = "data_nm" query = {field: keyword} try: - es = ElasticSearchManager() + es = ElasticSearchManager(index="biz_meta") es.size = size prefix_data = es.prefix(query,[field]) From 4318f31cf12ada6553d95b5bd305c48493050b20 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 7 Nov 2022 10:17:34 +0900 Subject: [PATCH 193/236] =?UTF-8?q?fix:=20user=5Fbas=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=A0=95=EB=B3=B4=20=EB=B3=80=EA=B2=BD=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20user=5Ftype=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/userLogin.py | 3 ++- API-SERVICE/conf/common/config.ini | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index ac2449cf..1a217008 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -18,6 +18,7 @@ class userLogin(BaseModel): aut_group_cd: Optional[str] = 'ROLE_USER' data_clas_cd: Optional[str] = 'GRADE3' sttus: Optional[str] = 'SBSC' + user_type: str def make_insert_query(login: dict): @@ -47,7 +48,7 @@ def api(login: userLogin, request: Request) -> Dict: except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} - # kt_lamp("OUT_RES", "userLogin", res_type="S", + # kt_lamp("OUT_RES", "userLogin", res_type="S",` # res_code = "DC_ERROR", res_desc = f'{login.emp_id}.{except_name}') else: token_data = make_token_data(user_info) diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 365b3fc2..b7faaf6c 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -19,7 +19,7 @@ secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 expire_min = 30 cookie_name = user-docean-access-token -token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm,aut_group_cd,data_clas_cd +token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm,aut_group_cd,data_clas_cd,user_type [user_info] table = user_bas From c368bcbdedd17687e8a605c1dc450cb3be688266 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 7 Nov 2022 17:25:18 +0900 Subject: [PATCH 194/236] =?UTF-8?q?[AIPLATFORM-1015]=20feat:=20elasticsear?= =?UTF-8?q?ch=20config=20=EA=B4=80=EB=A6=AC=20=EB=B0=A9=EB=B2=95=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/database_utils.py | 8 ++++---- API-SERVICE/ELKSearch/conf/config.ini | 16 +++++++++++++--- API-SERVICE/ELKSearch/conf/db_config.ini | 18 +++++++++++++++++- .../ServiceApiList/meta/getElsBizMetaList.py | 6 ++++-- .../ServiceApiList/meta/getPrefixBizMeta.py | 5 ++++- 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/database_utils.py b/API-SERVICE/ELKSearch/Utils/database_utils.py index aaee666b..7937671c 100644 --- a/API-SERVICE/ELKSearch/Utils/database_utils.py +++ b/API-SERVICE/ELKSearch/Utils/database_utils.py @@ -23,11 +23,11 @@ class ElsSearchConfig: config = ElsSearchConfig -def get_config(config_name: str): +def get_config(root_path,config_name: str): ano_cfg = {} conf = configparser.ConfigParser() - config_path = config.root_path+f"/ELKSearch/conf/{config_name}" + config_path = root_path+f"/ELKSearch/conf/{config_name}" conf.read(config_path, encoding='utf-8') for section in conf.sections(): ano_cfg[section] = {} @@ -51,8 +51,8 @@ def prepare_config(root_path) -> None: config.root_path = root_path config.category = args.category - db_config = get_config("db_config.ini") - els_config = get_config("config.ini") + db_config = get_config(root_path,"db_config.ini") + els_config = get_config(root_path,"config.ini") config.els_type = args.category config.els_info = els_config[args.category] diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 88916149..3632f4fb 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -1,9 +1,19 @@ [kt] -host = 192.168.101.44 +host = 10.217.59.133 +port = 9200 +index = biz_meta + +[katech] +host = 10.10.20.59 port = 39200 -index = kt_biz_meta +index = biz_meta [local] host = localhost port = 9200 -index = biz_meta \ No newline at end of file +index = biz_meta + +[test] +host = 192.168.101.44 +port = 39200 +index = kt_biz_meta \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini index 72cbca67..12062d5f 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -7,9 +7,25 @@ database = dataportal schema = meta [kt_db] +host = 10.220.184.63 +port = 5432 +user = dpme +password = 22DOCean.@!~ +database = ktportal +schema = meta + +[katech_db] +host = 10.10.20.60 +port = 5432 +user = dpmanager +password = hello.dp12#$ +database = dataportal +schema = meta + +[test] host = 192.168.100.126 port = 25432 user = dpme password = hello.meta12#$ database = ktportal -schema = meta +schema = meta \ No newline at end of file diff --git a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py index 26a9d989..9ff075fe 100644 --- a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py @@ -2,11 +2,13 @@ from ELKSearch.Manager.manager import ElasticSearchManager from ELKSearch.Utils.model import InputModel from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query +from ELKSearch.Utils.database_utils import get_config from ServiceUtils.CommonUtil import get_exception_info +from ApiService.ApiServiceConfig import config def api(input: InputModel) -> Dict: - input.index = "biz_meta" + els_config = get_config(config.root_path,"config.ini")["kt"] data_dict = dict() from_ = input.from_ - 1 data_type = { @@ -17,7 +19,7 @@ def api(input: InputModel) -> Dict: "T": "totalCount" } try: - es = ElasticSearchManager(index=input.index, page=from_, size=input.size) + es = ElasticSearchManager(page=from_, size=input.size, **els_config) es.set_sort(input.sortOption) action = "query" diff --git a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py index a4e98a02..68ca484a 100644 --- a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py @@ -1,6 +1,8 @@ from typing import Dict from ELKSearch.Manager.manager import ElasticSearchManager from ServiceUtils.CommonUtil import get_exception_info +from ELKSearch.Utils.database_utils import get_config +from ApiService.ApiServiceConfig import config def api(size: int, keyword: str) -> Dict: @@ -10,10 +12,11 @@ def api(size: int, keyword: str) -> Dict: :param keyword: type dict, ex) {"data_name" : "테"} :return: """ + els_config = get_config(config.root_path,"config.ini")["kt"] field = "data_nm" query = {field: keyword} try: - es = ElasticSearchManager(index="biz_meta") + es = ElasticSearchManager(**els_config) es.size = size prefix_data = es.prefix(query,[field]) From c8fe2e0c90c4d63adfeca72d7836f5eb06d561cc Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 15:07:52 +0900 Subject: [PATCH 195/236] =?UTF-8?q?[AIPLATFORM-1015]=20chore:=20db=20confi?= =?UTF-8?q?g=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/conf/config.ini | 5 ----- API-SERVICE/ELKSearch/conf/db_config.ini | 8 -------- 2 files changed, 13 deletions(-) diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 3632f4fb..88a7c88d 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -3,11 +3,6 @@ host = 10.217.59.133 port = 9200 index = biz_meta -[katech] -host = 10.10.20.59 -port = 39200 -index = biz_meta - [local] host = localhost port = 9200 diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini index 12062d5f..af1d197c 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -14,14 +14,6 @@ password = 22DOCean.@!~ database = ktportal schema = meta -[katech_db] -host = 10.10.20.60 -port = 5432 -user = dpmanager -password = hello.dp12#$ -database = dataportal -schema = meta - [test] host = 192.168.100.126 port = 25432 From 576ca6e2bc7ceb8a09024efa46182deb0c52ac19 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 10 Nov 2022 14:01:56 +0900 Subject: [PATCH 196/236] =?UTF-8?q?[AIPLATFORM-1078]=20feat:=20elasticsear?= =?UTF-8?q?ch=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/conf/config.ini | 9 +++++++-- API-SERVICE/ELKSearch/conf/db_config.ini | 2 +- API-SERVICE/conf/meta/api_config.ini | 12 +++++++++++- API-SERVICE/els_update.py | 6 +++--- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 88a7c88d..58146ffd 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -8,7 +8,12 @@ host = localhost port = 9200 index = biz_meta -[test] +[assets] host = 192.168.101.44 port = 39200 -index = kt_biz_meta \ No newline at end of file +index = kt_biz_asset + +[data] +host = 192.168.101.44 +port = 39200 +index = kt_biz_data diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini index af1d197c..3ef075ed 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -14,7 +14,7 @@ password = 22DOCean.@!~ database = ktportal schema = meta -[test] +[test_db] host = 192.168.100.126 port = 25432 user = dpme diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index ecc69b31..10134075 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -1,6 +1,16 @@ +[getBizMetaData] +method = POST +url = /portal/api/meta/getBizMetaData +sub_dir = meta + +[getElsBizMetaList] +method = POST +url = /portal/api/meta/getBizMetaContent +sub_dir = meta + [getElsBizMetaList] method = POST -url = /portal/api/meta/getElsBizMetaList +url = /portal/api/meta/getBizMetaAsset sub_dir = meta [getPrefixBizMeta] diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 6a3958dc..250f01ae 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -13,11 +13,10 @@ def main(): prepare_config(root_path) es = config.es db = connect_db() - - db_query = f"SELECT * FROM vw_biz_meta_bas " + db_query = f"SELECT * FROM vw_{config.els_type}_biz_meta_bas " if config.check == "True": today = datetime.today().date() - condition = f"WHERE DATE(recnt_amd_date) > DATE('{today}')" \ + condition = f"WHERE DATE(amd_date) > DATE('{today}')" \ f"OR DATE(reg_date) >= DATE('{today}')" db_query = db_query + condition @@ -26,6 +25,7 @@ def main(): try: for meta_wrap in meta_wrap_list: els_dict = dict() + meta_wrap["upd_pam_date"] = datetime.strptime(meta_wrap["upd_pam_date"], '%Y-%m-%d').date() els_dict["_id"] = meta_wrap["biz_dataset_id"] els_dict["_source"] = meta_wrap els_dict["_source"]["biz_dataset_id"] = meta_wrap["biz_dataset_id"] From 9ded71507acbf8efa60b6bbc3561810fac5bf911 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 11 Nov 2022 16:40:06 +0900 Subject: [PATCH 197/236] =?UTF-8?q?fix:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20&=20=ED=86=A0=ED=81=B0=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/userLogin.py | 3 +-- API-SERVICE/conf/common/config.ini | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 1a217008..acbe5580 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -15,8 +15,7 @@ class userLogin(BaseModel): user_nm: str email: str dept_nm: str - aut_group_cd: Optional[str] = 'ROLE_USER' - data_clas_cd: Optional[str] = 'GRADE3' + innt_aut_group_cd: Optional[str] = 'ROLE_USER' sttus: Optional[str] = 'SBSC' user_type: str diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index b7faaf6c..4663bced 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -19,7 +19,7 @@ secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 expire_min = 30 cookie_name = user-docean-access-token -token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm,aut_group_cd,data_clas_cd,user_type +token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm,innt_aut_group_cd,user_type,tmp_aut_group_cd,tmp_aut_alc_user,tmp_aut_alc_date,tmp_aut_exp_date [user_info] table = user_bas From 5751d4dd4758ba40a8fd89e970c43d2069f5bb16 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 11 Nov 2022 17:35:00 +0900 Subject: [PATCH 198/236] =?UTF-8?q?fix:=20=ED=85=8C=EC=9D=B4=EB=B8=94=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=9C=20postgres=20timestamp=20to=20python=20datetime=20?= =?UTF-8?q?=EB=B3=80=ED=99=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceUtils/CommonUtil.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 7a04485a..22ae37da 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -171,7 +171,10 @@ def create_token(data: dict, expires_delta: Optional[timedelta] = None): def make_token_data(user: Dict) -> Dict: token_data_column = config.secret_info["token_data_column"].split(",") - token_data = {column: user[column] for column in token_data_column} + # token_data = {column: user[column] for column in token_data_column} + token_data = {column: datetime.strftime(user[column], "%Y-%m-%d %H:%M:%S.%f") \ + if type(user[column]) != str else user[column] for column in token_data_column} + logger.info(token_data) return token_data From df2b67c7b1edd4423360ff3c77bac28e89c3a472 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 11 Nov 2022 17:51:35 +0900 Subject: [PATCH 199/236] =?UTF-8?q?fix:=20=ED=85=8C=EC=9D=B4=EB=B8=94=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=9C=20postgres=20timestamp=20to=20python=20datetime=20?= =?UTF-8?q?=EB=B3=80=ED=99=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceUtils/CommonUtil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 22ae37da..814ac2fd 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -173,7 +173,7 @@ def make_token_data(user: Dict) -> Dict: token_data_column = config.secret_info["token_data_column"].split(",") # token_data = {column: user[column] for column in token_data_column} token_data = {column: datetime.strftime(user[column], "%Y-%m-%d %H:%M:%S.%f") \ - if type(user[column]) != str else user[column] for column in token_data_column} + if isinstance(user[column], datetime) else user[column] for column in token_data_column} logger.info(token_data) return token_data From add0b4367de2180636d142135b83cde080ec4ec4 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 14 Nov 2022 10:28:26 +0900 Subject: [PATCH 200/236] =?UTF-8?q?[AIPLATFORM-1078]=20feat:=20DB=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81,=20el?= =?UTF-8?q?s=20=EA=B2=80=EC=83=89=20api=20=EC=B6=94=EA=B0=80=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/conf/config.ini | 12 ++-- .../ServiceApiList/meta/getBizMetaAsset.py | 63 ++++++++++++++++++ .../ServiceApiList/meta/getBizMetaContent.py | 65 +++++++++++++++++++ .../ServiceApiList/meta/getBizMetaData.py | 64 ++++++++++++++++++ .../ServiceApiList/meta/getPrefixBizMeta.py | 5 +- API-SERVICE/conf/meta/api_config.ini | 13 ++-- API-SERVICE/els_update.py | 1 + 7 files changed, 212 insertions(+), 11 deletions(-) create mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py create mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaContent.py create mode 100644 API-SERVICE/ServiceApiList/meta/getBizMetaData.py diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 58146ffd..2aa4f0c1 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -1,19 +1,21 @@ -[kt] +[commercial] host = 10.217.59.133 port = 9200 -index = biz_meta [local] host = localhost port = 9200 -index = biz_meta -[assets] +[test] host = 192.168.101.44 port = 39200 -index = kt_biz_asset [data] host = 192.168.101.44 port = 39200 index = kt_biz_data + +[assets] +host = 192.168.101.44 +port = 39200 +index = kt_biz_asset \ No newline at end of file diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py new file mode 100644 index 00000000..b1dae259 --- /dev/null +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -0,0 +1,63 @@ +from copy import deepcopy +from typing import Dict +from ELKSearch.Manager.manager import ElasticSearchManager +from ELKSearch.Utils.model import InputModel +from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query +from ELKSearch.Utils.database_utils import get_config +from ServiceUtils.CommonUtil import get_exception_info +from ApiService.ApiServiceConfig import config + + +def api(input: InputModel) -> Dict: + index = "kt_biz_asset" + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + from_ = input.from_ - 1 + data_dict = dict() + + try: + es = ElasticSearchManager(page=from_, size=input.size, + index=index, **els_config) + es.set_sort(input.sortOption) + + action = "query" + sub_action = "must" + for item in input.searchOption: + if item.field in ["data_nm", "data_desc"]: + item.field = item.field + ".korean_analyzer" + query_dict = base_search_query(action,sub_action,input.searchOption) + + sub_action = "filter" + item_dict = base_search_query(action,sub_action,input.filterOption) + query_dict.update(item_dict) + search_query = make_query(action,"bool", query_dict) + es.body.update(search_query) + data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) + es.body["query"]["bool"]["filter"].append(data_type) + + sort_list = [{item.field: item.order} for item in input.sortOption] + es.set_sort(sort_list) + search_data = es.search(input.resultField) + + # assets index count n + body = deepcopy(es.body) + del body["sort"] + data_dict["assets"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + + # assets index count y = n+y + body["query"]["bool"]["filter"] = body["query"]["bool"]["filter"][:-1] + data_dict["content"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + + # meta index count + data_dict["meta"] = es.conn.count(index="kt_biz_data", body=body)["count"] + + data_dict["total"] = data_dict["meta"] + data_dict["content"] + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + search_list = [data["_source"] for data in search_data["hits"]["hits"]] + data_dict["searchList"] = search_list + result = {"result": 1, "errorMessage": "", "data": data_dict} + + return result diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py new file mode 100644 index 00000000..858df790 --- /dev/null +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -0,0 +1,65 @@ +from copy import deepcopy +from typing import Dict +from ELKSearch.Manager.manager import ElasticSearchManager +from ELKSearch.Utils.model import InputModel +from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query +from ELKSearch.Utils.database_utils import get_config +from ServiceUtils.CommonUtil import get_exception_info +from ApiService.ApiServiceConfig import config + + +def api(input: InputModel) -> Dict: + index = "kt_biz_asset" + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + from_ = input.from_ - 1 + data_dict = dict() + + try: + es = ElasticSearchManager(page=from_, size=input.size, + index=index, **els_config) + es.set_sort(input.sortOption) + + action = "query" + sub_action = "must" + for item in input.searchOption: + if item.field in ["data_nm", "data_desc"]: + item.field = item.field + ".korean_analyzer" + query_dict = base_search_query(action,sub_action,input.searchOption) + + sub_action = "filter" + item_dict = base_search_query(action,sub_action,input.filterOption) + query_dict.update(item_dict) + search_query = make_query(action,"bool", query_dict) + es.body.update(search_query) + + sort_list = [{item.field: item.order} for item in input.sortOption] + es.set_sort(sort_list) + search_data = es.search(input.resultField) + + # count + body = deepcopy(es.body) + del body["sort"] + data_dict["content"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + + # assets index count n + data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) + body["query"]["bool"]["filter"].append(data_type) + print(body) + data_dict["assets"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + + # meta index count + body = deepcopy(es.body) + del body["sort"] + data_dict["meta"] = es.conn.count(index="kt_biz_data", body=body)["count"] + + data_dict["total"] = data_dict["meta"] + data_dict["content"] + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + search_list = [data["_source"] for data in search_data["hits"]["hits"]] + data_dict["searchList"] = search_list + result = {"result": 1, "errorMessage": "", "data": data_dict} + + return result diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py new file mode 100644 index 00000000..75579458 --- /dev/null +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -0,0 +1,64 @@ +from copy import deepcopy +from typing import Dict +from ELKSearch.Manager.manager import ElasticSearchManager +from ELKSearch.Utils.model import InputModel +from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query +from ELKSearch.Utils.database_utils import get_config +from ServiceUtils.CommonUtil import get_exception_info +from ApiService.ApiServiceConfig import config + + +def api(input: InputModel) -> Dict: + index = "kt_biz_data" + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + from_ = input.from_ - 1 + data_dict = dict() + + try: + es = ElasticSearchManager(page=from_, size=input.size, + index=index, **els_config) + es.set_sort(input.sortOption) + + action = "query" + sub_action = "must" + for item in input.searchOption: + if item.field in ["data_nm", "data_desc"]: + item.field = item.field + ".korean_analyzer" + query_dict = base_search_query(action,sub_action,input.searchOption) + + sub_action = "filter" + item_dict = base_search_query(action,sub_action,input.filterOption) + query_dict.update(item_dict) + search_query = make_query(action,"bool", query_dict) + es.body.update(search_query) + + sort_list = [{item.field: item.order} for item in input.sortOption] + es.set_sort(sort_list) + search_data = es.search(input.resultField) + + body = deepcopy(es.body) + del body["sort"] + data_dict["content"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + + # assets index count n + data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) + body["query"]["bool"]["filter"].append(data_type) + print(body) + data_dict["assets"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + + # meta index count + body = deepcopy(es.body) + del body["sort"] + data_dict["meta"] = es.conn.count(index="kt_biz_data", body=body)["count"] + + data_dict["total"] = data_dict["meta"] + data_dict["content"] + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + search_list = [data["_source"] for data in search_data["hits"]["hits"]] + data_dict["searchList"] = search_list + result = {"result": 1, "errorMessage": "", "data": data_dict} + + return result diff --git a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py index 68ca484a..02a29410 100644 --- a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py @@ -12,11 +12,12 @@ def api(size: int, keyword: str) -> Dict: :param keyword: type dict, ex) {"data_name" : "테"} :return: """ - els_config = get_config(config.root_path,"config.ini")["kt"] + index = ["kt_biz_data", "kt_biz_asset"] + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] field = "data_nm" query = {field: keyword} try: - es = ElasticSearchManager(**els_config) + es = ElasticSearchManager(index=index,**els_config) es.size = size prefix_data = es.prefix(query,[field]) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 10134075..39792797 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -3,17 +3,22 @@ method = POST url = /portal/api/meta/getBizMetaData sub_dir = meta -[getElsBizMetaList] +[getBizMetaContent] method = POST url = /portal/api/meta/getBizMetaContent sub_dir = meta -[getElsBizMetaList] +[getBizMetaAsset] method = POST url = /portal/api/meta/getBizMetaAsset sub_dir = meta [getPrefixBizMeta] -method = GET +method = POST url = /portal/api/meta/getPrefixBizMeta -sub_dir = meta \ No newline at end of file +sub_dir = meta + +[getElsBizMetaList] +method = POST +url = /portal/api/meta/getElsBizMetaList +sub_dir = meta diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 250f01ae..90e83a8e 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -29,6 +29,7 @@ def main(): els_dict["_id"] = meta_wrap["biz_dataset_id"] els_dict["_source"] = meta_wrap els_dict["_source"]["biz_dataset_id"] = meta_wrap["biz_dataset_id"] + # es.insert(meta_wrap,meta_wrap["biz_dataset_id"]) bulk_meta_item.append(els_dict) helpers.bulk(es.conn, bulk_meta_item, index=es.index) except Exception as e: From 7c1fd756d1ce71616efc09a13784126fccb63e95 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 15 Nov 2022 10:42:24 +0900 Subject: [PATCH 201/236] =?UTF-8?q?[AIPLATFORM-1078]=20feat:=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=EC=A0=9C=EC=96=B4=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EC=95=84=EC=9D=B4=EB=94=94=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=9E=85=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaContent.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index b1dae259..411d26fc 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel) -> Dict: +def api(input: InputModel,u_id: str) -> Dict: index = "kt_biz_asset" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index 858df790..0559fafe 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel) -> Dict: +def api(input: InputModel,u_id: str) -> Dict: index = "kt_biz_asset" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index 75579458..f128b8d1 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel) -> Dict: +def api(input: InputModel,u_id: str) -> Dict: index = "kt_biz_data" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 From e62e5338b5db0ba522a77445ab5cb124fd736a0c Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 16 Nov 2022 10:06:07 +0900 Subject: [PATCH 202/236] =?UTF-8?q?fix:=20u=5Fid=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EC=9D=98=20default=20=EA=B0=92=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaContent.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index 411d26fc..10fea620 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str) -> Dict: +def api(input: InputModel,u_id: str="") -> Dict: index = "kt_biz_asset" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index 0559fafe..278e3bed 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str) -> Dict: +def api(input: InputModel,u_id: str="") -> Dict: index = "kt_biz_asset" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index f128b8d1..ee07dcca 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str) -> Dict: +def api(input: InputModel,u_id: str="") -> Dict: index = "kt_biz_data" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 From f54ff2be7c7285c12122aa7aa6324656a236473d Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 16 Nov 2022 10:11:05 +0900 Subject: [PATCH 203/236] =?UTF-8?q?feat:=20=EC=B9=B4=EC=9A=B4=ED=8C=85=20?= =?UTF-8?q?=ED=95=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=ED=82=A4=20=EA=B0=92?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py | 8 ++++---- API-SERVICE/ServiceApiList/meta/getBizMetaContent.py | 9 ++++----- API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 9 ++++----- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index 10fea620..2646d57b 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -41,16 +41,16 @@ def api(input: InputModel,u_id: str="") -> Dict: # assets index count n body = deepcopy(es.body) del body["sort"] - data_dict["assets"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # assets index count y = n+y body["query"]["bool"]["filter"] = body["query"]["bool"]["filter"][:-1] - data_dict["content"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # meta index count - data_dict["meta"] = es.conn.count(index="kt_biz_data", body=body)["count"] + data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] - data_dict["total"] = data_dict["meta"] + data_dict["content"] + data_dict["totalCount"] = data_dict["M"] + data_dict["C"] except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index 278e3bed..ea3e81f6 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -39,20 +39,19 @@ def api(input: InputModel,u_id: str="") -> Dict: # count body = deepcopy(es.body) del body["sort"] - data_dict["content"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # assets index count n data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) body["query"]["bool"]["filter"].append(data_type) - print(body) - data_dict["assets"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # meta index count body = deepcopy(es.body) del body["sort"] - data_dict["meta"] = es.conn.count(index="kt_biz_data", body=body)["count"] + data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] - data_dict["total"] = data_dict["meta"] + data_dict["content"] + data_dict["totalCount"] = data_dict["M"] + data_dict["C"] except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index ee07dcca..3b41bd3b 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -38,20 +38,19 @@ def api(input: InputModel,u_id: str="") -> Dict: body = deepcopy(es.body) del body["sort"] - data_dict["content"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # assets index count n data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) body["query"]["bool"]["filter"].append(data_type) - print(body) - data_dict["assets"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # meta index count body = deepcopy(es.body) del body["sort"] - data_dict["meta"] = es.conn.count(index="kt_biz_data", body=body)["count"] + data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] - data_dict["total"] = data_dict["meta"] + data_dict["content"] + data_dict["totalCount"] = data_dict["M"] + data_dict["C"] except Exception: except_name = get_exception_info() From cc437dba24b747c22c2343e47fbc1a92a344b260 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 16 Nov 2022 13:34:36 +0900 Subject: [PATCH 204/236] =?UTF-8?q?fix:=20method=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/meta/api_config.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 39792797..985da770 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -14,7 +14,7 @@ url = /portal/api/meta/getBizMetaAsset sub_dir = meta [getPrefixBizMeta] -method = POST +method = GET url = /portal/api/meta/getPrefixBizMeta sub_dir = meta From 30847f243dcc7bc71223241df176336572f5aa63 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 18 Nov 2022 11:13:05 +0900 Subject: [PATCH 205/236] =?UTF-8?q?fix:=20user=5Fbas=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=A0=95=EB=B3=B4=20=EB=B3=80=EA=B2=BD=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=BB=AC=EB=9F=BC=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/userLogin.py | 17 ++++++++++++++++- API-SERVICE/conf/common/logging.conf | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index acbe5580..af6041c1 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -3,18 +3,33 @@ from fastapi import Request from fastapi.logger import logger from fastapi.responses import JSONResponse -from datetime import timedelta +from datetime import datetime, timedelta from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data, kt_lamp from ApiService.ApiServiceConfig import config class userLogin(BaseModel): + """ + { + "user_id":"e2851973-2239-4a44-8feb-00d5a3fb23ef", + "emp_id":"11181059", + "cmpno":"11181059", + "user_nm":"swyang", + "email":"swyang", + "dept_nm":"swyang", + "user_type":"SITE_USER" + } + """ user_id: str emp_id: str cmpno: str user_nm: str email: str dept_nm: str + tmp_aut_group_cd: Optional[str] = 'ROLE_USER' + tmp_aut_alc_user: str = user_id + tmp_aut_alc_date: datetime = datetime.now() + tmp_aut_exp_date: datetime = datetime.now() innt_aut_group_cd: Optional[str] = 'ROLE_USER' sttus: Optional[str] = 'SBSC' user_type: str diff --git a/API-SERVICE/conf/common/logging.conf b/API-SERVICE/conf/common/logging.conf index c7422717..77fe8d64 100644 --- a/API-SERVICE/conf/common/logging.conf +++ b/API-SERVICE/conf/common/logging.conf @@ -32,7 +32,7 @@ level = INFO [handler_rotatingFileHandler] class = handlers.RotatingFileHandler formatter = default -args = ('/Users/cbc/DEV/Mobigen/API_DataPortal/KT/AP_API_Router/API-SERVICE/log/common/common.log', 'a', 20000000, 10) +args = ('/Users/swyang/Desktop/workspace/API_ROUTER_KT/API-SERVICE/log/common/common.log', 'a', 20000000, 10) level = INFO [handler_traceHandler] From daf6c15a9e5a5083a21b6b536893c5a1512edcfe Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 18 Nov 2022 11:25:05 +0900 Subject: [PATCH 206/236] =?UTF-8?q?fix:=20user=5Fbas=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EC=A0=95=EB=B3=B4=20=EB=B3=80=EA=B2=BD=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=BB=AC=EB=9F=BC=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/userLogin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index af6041c1..a4565856 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -27,7 +27,7 @@ class userLogin(BaseModel): email: str dept_nm: str tmp_aut_group_cd: Optional[str] = 'ROLE_USER' - tmp_aut_alc_user: str = user_id + tmp_aut_alc_user: str = "" tmp_aut_alc_date: datetime = datetime.now() tmp_aut_exp_date: datetime = datetime.now() innt_aut_group_cd: Optional[str] = 'ROLE_USER' From a46039ab9d935bfee49e9acdca809a6c0f9e820c Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 18 Nov 2022 13:42:50 +0900 Subject: [PATCH 207/236] =?UTF-8?q?fix:=20=ED=85=8C=EC=9D=B4=EB=B8=94=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20=EC=BB=AC=EB=9F=BC=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/userLogin.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index a4565856..40c6d376 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -26,14 +26,16 @@ class userLogin(BaseModel): user_nm: str email: str dept_nm: str - tmp_aut_group_cd: Optional[str] = 'ROLE_USER' - tmp_aut_alc_user: str = "" - tmp_aut_alc_date: datetime = datetime.now() - tmp_aut_exp_date: datetime = datetime.now() innt_aut_group_cd: Optional[str] = 'ROLE_USER' sttus: Optional[str] = 'SBSC' user_type: str +class TmpAuthUser(userLogin): + tmp_aut_group_cd: Optional[str] = None + tmp_aut_alc_user: Optional[str] = None + tmp_aut_alc_date: Optional[datetime] = None + tmp_aut_exp_date: Optional[datetime] = None + def make_insert_query(login: dict): login["reg_user"] = login["user_id"] @@ -65,7 +67,7 @@ def api(login: userLogin, request: Request) -> Dict: # kt_lamp("OUT_RES", "userLogin", res_type="S",` # res_code = "DC_ERROR", res_desc = f'{login.emp_id}.{except_name}') else: - token_data = make_token_data(user_info) + token_data = make_token_data(TmpAuthUser(**user_info).dict()) access_token = create_token( data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) result = {"result": 1, "errorMessage": ""} From f41d6b3bc643356cc9ed1245380a66d899aea241 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Tue, 22 Nov 2022 14:10:12 +0900 Subject: [PATCH 208/236] =?UTF-8?q?feat:=20knime=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=ED=86=A0=ED=81=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/common/commonLogout.py | 1 + .../ServiceApiList/common/commonToken.py | 2 +- .../ServiceApiList/common/userLogin.py | 38 +++++++++++++++++-- API-SERVICE/ServiceUtils/CommonUtil.py | 6 +-- API-SERVICE/conf/common/config.ini | 2 + 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/commonLogout.py b/API-SERVICE/ServiceApiList/common/commonLogout.py index 910c3e8d..814b07c5 100644 --- a/API-SERVICE/ServiceApiList/common/commonLogout.py +++ b/API-SERVICE/ServiceApiList/common/commonLogout.py @@ -37,4 +37,5 @@ def api(request: Request) -> Dict: response = JSONResponse(content=result) if f_delete: response.delete_cookie(key=config.secret_info["cookie_name"]) + response.delete_cookie(key=config.secret_info["knime_cookie_name"]) return response diff --git a/API-SERVICE/ServiceApiList/common/commonToken.py b/API-SERVICE/ServiceApiList/common/commonToken.py index f6a02357..b50c5c30 100644 --- a/API-SERVICE/ServiceApiList/common/commonToken.py +++ b/API-SERVICE/ServiceApiList/common/commonToken.py @@ -36,7 +36,7 @@ def api(request: Request) -> Dict: else: token_data = make_token_data(user) access_token = create_token(data=token_data, expires_delta=timedelta( - minutes=int(config.secret_info["expire_min"]))) + minutes=int(config.secret_info["expire_min"])), secret_key=config.secret_info["secret_key"], algorithm=config.secret_info["algorithm"]) result = {"result": 1, "errorMessage": ""} response = JSONResponse(content=result) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 40c6d376..8f64879a 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -1,5 +1,7 @@ +import hashlib +import hmac from typing import Dict, Optional -from pydantic import BaseModel +from pydantic import BaseModel, SecretStr from fastapi import Request from fastapi.logger import logger from fastapi.responses import JSONResponse @@ -21,6 +23,7 @@ class userLogin(BaseModel): } """ user_id: str + password: str = "1234" emp_id: str cmpno: str user_nm: str @@ -30,6 +33,9 @@ class userLogin(BaseModel): sttus: Optional[str] = 'SBSC' user_type: str + class Config: + fields = {"password": {"exclude": True}} + class TmpAuthUser(userLogin): tmp_aut_group_cd: Optional[str] = None tmp_aut_alc_user: Optional[str] = None @@ -37,6 +43,7 @@ class TmpAuthUser(userLogin): tmp_aut_exp_date: Optional[datetime] = None + def make_insert_query(login: dict): login["reg_user"] = login["user_id"] login["reg_date"] = "NOW()" @@ -56,9 +63,9 @@ def api(login: userLogin, request: Request) -> Dict: if not user_info: time_zone = 'Asia/Seoul' db.execute(f"SET TIMEZONE={convert_data(time_zone)}") - login_query = make_insert_query(login.__dict__) + login_query = make_insert_query(login.dict()) db.execute(login_query) - user_info = login.__dict__ + user_info = login.dict() else: user_info = user_info[0] except Exception: @@ -69,13 +76,36 @@ def api(login: userLogin, request: Request) -> Dict: else: token_data = make_token_data(TmpAuthUser(**user_info).dict()) access_token = create_token( - data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) + data=token_data, + expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), + secret_key=config.secret_info["secret_key"], + algorithm=config.secret_info["algorithm"] + ) + + knime_token = knime_secret({"id": login.user_id, "password": login.password}) + print(knime_token) + result = {"result": 1, "errorMessage": ""} response = JSONResponse(content=result) response.set_cookie( key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) + response.set_cookie( + key=config.secret_info["knime_cookie_name"], value=knime_token, max_age=3600, secure=False, httponly=True) kt_lamp("OUT_RES", transaction_id, "userLogin", res_desc=f'{login.emp_id}') return response + +def get_hash256(str: str, key: str): + return hmac.new(key.encode(), str.encode(), digestmod=hashlib.sha256).hexdigest() + +def knime_secret(data: Dict): + token = create_token( + data=data, + expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), + secret_key=config.secret_info["secret_key"], + algorithm=config.secret_info["algorithm"] + ) + print(token) + return get_hash256(token, config.secret_info["knime_secret_key"]) diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 814ac2fd..4cd955a2 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -154,7 +154,7 @@ def get_user(user_name: str): return user -def create_token(data: dict, expires_delta: Optional[timedelta] = None): +def create_token(data: dict, secret_key, algorithm, expires_delta: Optional[timedelta] = None): to_encode = data.copy() if expires_delta: expire = datetime.now(timezone('Asia/Seoul')) + expires_delta @@ -164,9 +164,7 @@ def create_token(data: dict, expires_delta: Optional[timedelta] = None): logger.info(f'commonToken Expire : {expire}') to_encode.update({"exp": expire}) - encoded_jwt = jwt.encode( - to_encode, config.secret_info["secret_key"], algorithm=config.secret_info["algorithm"]) - return encoded_jwt + return jwt.encode(to_encode, secret_key, algorithm=algorithm) def make_token_data(user: Dict) -> Dict: diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 4663bced..505441b6 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -20,6 +20,8 @@ algorithm = HS256 expire_min = 30 cookie_name = user-docean-access-token token_data_column = user_id,emp_id,cmpno,user_nm,email,dept_nm,innt_aut_group_cd,user_type,tmp_aut_group_cd,tmp_aut_alc_user,tmp_aut_alc_date,tmp_aut_exp_date +knime_cookie_name = knime_auth_token +knime_secret_key = docean_knime_auth_256 [user_info] table = user_bas From 998c4e04e0d1595991b63f50cc6746d9e9b8ab42 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Tue, 22 Nov 2022 14:21:10 +0900 Subject: [PATCH 209/236] =?UTF-8?q?feat:=20commonSelect=20where=EB=AC=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20null=20=ED=99=95=EC=9D=B8=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=86=A0=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/commonSelect.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index b48f6c84..eecca9d2 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -70,6 +70,8 @@ def make_where_value(where): value_list = ", ".join( map(convert_data, where.value.split(","))) value = f'( {value_list} )' + if where.compare_op in ["is", "is not"]: + value = where.value else: value = convert_data(where.value) return value From a28b30ccd802c96beca0176147e05d9ff173c831 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 23 Nov 2022 14:20:53 +0900 Subject: [PATCH 210/236] =?UTF-8?q?feat:=20knime=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=95=94=ED=98=B8=ED=99=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/common/userLogin.py | 25 ++++++------------- API-SERVICE/ServiceUtils/crypto.py | 23 +++++++++++++++++ 2 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 API-SERVICE/ServiceUtils/crypto.py diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 8f64879a..ac25dc99 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -1,13 +1,12 @@ -import hashlib -import hmac from typing import Dict, Optional -from pydantic import BaseModel, SecretStr +from pydantic import BaseModel from fastapi import Request from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import datetime, timedelta from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data, kt_lamp from ApiService.ApiServiceConfig import config +from ServiceUtils.crypto import AESCipher class userLogin(BaseModel): @@ -82,8 +81,7 @@ def api(login: userLogin, request: Request) -> Dict: algorithm=config.secret_info["algorithm"] ) - knime_token = knime_secret({"id": login.user_id, "password": login.password}) - print(knime_token) + knime_token = knime_encrypt(login.user_id + "|^|" + login.password, config.secret_info["knime_secret_key"]) result = {"result": 1, "errorMessage": ""} @@ -97,15 +95,8 @@ def api(login: userLogin, request: Request) -> Dict: res_desc=f'{login.emp_id}') return response -def get_hash256(str: str, key: str): - return hmac.new(key.encode(), str.encode(), digestmod=hashlib.sha256).hexdigest() - -def knime_secret(data: Dict): - token = create_token( - data=data, - expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), - secret_key=config.secret_info["secret_key"], - algorithm=config.secret_info["algorithm"] - ) - print(token) - return get_hash256(token, config.secret_info["knime_secret_key"]) + +def knime_encrypt(data: str, key: str): + return AESCipher(key).encrypt(data).decode() + + diff --git a/API-SERVICE/ServiceUtils/crypto.py b/API-SERVICE/ServiceUtils/crypto.py new file mode 100644 index 00000000..af4b1b85 --- /dev/null +++ b/API-SERVICE/ServiceUtils/crypto.py @@ -0,0 +1,23 @@ +from hashlib import md5 +from base64 import b64decode +from base64 import b64encode + +from Crypto.Cipher import AES +from Crypto.Random import get_random_bytes +from Crypto.Util.Padding import pad, unpad + + +class AESCipher: + def __init__(self, key): + self.key = md5(key.encode('utf8')).digest() + + def encrypt(self, data): + iv = get_random_bytes(AES.block_size) + self.cipher = AES.new(self.key, AES.MODE_CBC, iv) + return b64encode(iv + self.cipher.encrypt(pad(data.encode('utf-8'), + AES.block_size))) + + def decrypt(self, data): + raw = b64decode(data) + self.cipher = AES.new(self.key, AES.MODE_CBC, raw[:AES.block_size]) + return unpad(self.cipher.decrypt(raw[AES.block_size:]), AES.block_size) \ No newline at end of file From 0a066c9f390775d0103afdb3399c9d9314c0723a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 23 Nov 2022 14:51:38 +0900 Subject: [PATCH 211/236] =?UTF-8?q?fix:=20SearchOption=20field=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B2=98=EB=A6=AC=EB=A5=BC=20list=20type?= =?UTF-8?q?=EB=8F=84=20=EC=9E=91=EB=8F=99=20=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py | 10 ++++++++-- API-SERVICE/ServiceApiList/meta/getBizMetaContent.py | 10 ++++++++-- API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 10 ++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index 2646d57b..4eaca2ae 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -22,8 +22,14 @@ def api(input: InputModel,u_id: str="") -> Dict: action = "query" sub_action = "must" for item in input.searchOption: - if item.field in ["data_nm", "data_desc"]: - item.field = item.field + ".korean_analyzer" + tmp = [] + for field in item.field: + if field in ["data_nm", "data_desc"]: + col = field + ".korean_analyzer" + else: + col = field + tmp.append(col) + item.field = tmp query_dict = base_search_query(action,sub_action,input.searchOption) sub_action = "filter" diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index ea3e81f6..b7fd0384 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -22,8 +22,14 @@ def api(input: InputModel,u_id: str="") -> Dict: action = "query" sub_action = "must" for item in input.searchOption: - if item.field in ["data_nm", "data_desc"]: - item.field = item.field + ".korean_analyzer" + tmp = [] + for field in item.field: + if field in ["data_nm", "data_desc"]: + col = field + ".korean_analyzer" + else: + col = field + tmp.append(col) + item.field = tmp query_dict = base_search_query(action,sub_action,input.searchOption) sub_action = "filter" diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index 3b41bd3b..fce993e0 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -22,8 +22,14 @@ def api(input: InputModel,u_id: str="") -> Dict: action = "query" sub_action = "must" for item in input.searchOption: - if item.field in ["data_nm", "data_desc"]: - item.field = item.field + ".korean_analyzer" + tmp = [] + for field in item.field: + if field in ["data_nm", "data_desc"]: + col = field + ".korean_analyzer" + else: + col = field + tmp.append(col) + item.field = tmp query_dict = base_search_query(action,sub_action,input.searchOption) sub_action = "filter" From b9351b1f82a2da0300adca6f802553ebe217990a Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 23 Nov 2022 15:32:57 +0900 Subject: [PATCH 212/236] =?UTF-8?q?fix:=20commonSelect=20null=20check=20qu?= =?UTF-8?q?ery=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +- .../ServiceApiList/common/commonSelect.py | 32 ++++--- .../ServiceApiList/common/commonToken.py | 19 +++-- .../ServiceApiList/common/userLogin.py | 45 +++++----- API-SERVICE/ServiceUtils/CommonUtil.py | 85 +++++++++++++------ API-SERVICE/ServiceUtils/crypto.py | 9 +- 6 files changed, 117 insertions(+), 78 deletions(-) diff --git a/.gitignore b/.gitignore index a69c7ce3..f794df8a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,7 @@ __pycache__/ build mobigen_*.egg* dist -.python-* \ No newline at end of file +.python-version +.env +.vscode +.coverage \ No newline at end of file diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index eecca9d2..143575ca 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -67,10 +67,9 @@ def convert_compare_op(compare_str): def make_where_value(where): if where.compare_op == "IN" or where.compare_op == "NOT IN": - value_list = ", ".join( - map(convert_data, where.value.split(","))) - value = f'( {value_list} )' - if where.compare_op in ["is", "is not"]: + value_list = ", ".join(map(convert_data, where.value.split(","))) + value = f"( {value_list} )" + elif where.compare_op in ["is", "is not"]: value = where.value else: value = convert_data(where.value) @@ -86,26 +85,31 @@ def make_where_info(where_info: List[whereInfo]): for sub_info in info.sub: sub_value = make_where_value(sub_info) sub_where = f"{sub_where} {sub_info.op} {sub_info.table_nm}.{sub_info.key} {convert_compare_op(sub_info.compare_op)} {sub_value}" - where = f'{where} {info.op} ({sub_where})' + where = f"{where} {info.op} ({sub_where})" else: - where = f'{where} {info.op} {info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}' - return f'WHERE {where}' + where = f"{where} {info.op} {info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}" + return f"WHERE {where}" def make_select_query(select_info: commonSelect): join, where, order, page = "", "", "", "" - join_info, where_info, order_info, page_info = select_info.join_info, select_info.where_info, select_info.order_info, select_info.page_info + join_info, where_info, order_info, page_info = ( + select_info.join_info, + select_info.where_info, + select_info.order_info, + select_info.page_info, + ) if join_info: - join = f'JOIN {join_info.table_nm} ON {select_info.table_nm}.{select_info.key} = {join_info.table_nm}.{join_info.key}' + join = f"JOIN {join_info.table_nm} ON {select_info.table_nm}.{select_info.key} = {join_info.table_nm}.{join_info.key}" if where_info: where = make_where_info(where_info) if order_info: - order = f'ORDER BY {order_info.table_nm}.{order_info.key} {order_info.order}' + order = f"ORDER BY {order_info.table_nm}.{order_info.key} {order_info.order}" if page_info: - page = f'LIMIT {page_info.per_page} OFFSET ({page_info.per_page} * {page_info.cur_page - 1})' + page = f"LIMIT {page_info.per_page} OFFSET ({page_info.per_page} * {page_info.cur_page - 1})" - select_query = f'SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};' - count_query = f'SELECT count(*) FROM {select_info.table_nm} {join} {where};' + select_query = f"SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};" + count_query = f"SELECT count(*) FROM {select_info.table_nm} {join} {where};" return select_query, count_query @@ -114,7 +118,7 @@ def api(select_info: commonSelect) -> Dict: get_column_info = f"SELECT eng_nm, kor_nm FROM tbl_item_coln_dtl \ WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {convert_data(select_info.table_nm)});" get_query, total_cnt_query = make_select_query(select_info) - logger.info(f'Get Query : {get_query}') + logger.info(f"Get Query : {get_query}") try: db = connect_db() diff --git a/API-SERVICE/ServiceApiList/common/commonToken.py b/API-SERVICE/ServiceApiList/common/commonToken.py index b50c5c30..873225f8 100644 --- a/API-SERVICE/ServiceApiList/common/commonToken.py +++ b/API-SERVICE/ServiceApiList/common/commonToken.py @@ -19,12 +19,12 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: access_token = "" try: - recv_access_token = request.cookies.get( - config.secret_info["cookie_name"]) + recv_access_token = request.cookies.get(config.secret_info["cookie_name"]) if not recv_access_token: raise TokenDoesNotExist - payload = jwt.decode(token=recv_access_token, - key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) + payload = jwt.decode( + token=recv_access_token, key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"] + ) username = payload[config.user_info["id_column"]] user = get_user(username) if not user[0]: @@ -35,11 +35,16 @@ def api(request: Request) -> Dict: result = {"result": 0, "errorMessage": except_name} else: token_data = make_token_data(user) - access_token = create_token(data=token_data, expires_delta=timedelta( - minutes=int(config.secret_info["expire_min"])), secret_key=config.secret_info["secret_key"], algorithm=config.secret_info["algorithm"]) + access_token = create_token( + data=token_data, + expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), + secret_key=config.secret_info["secret_key"], + algorithm=config.secret_info["algorithm"], + ) result = {"result": 1, "errorMessage": ""} response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True + ) return response diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index ac25dc99..14c61fcd 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -11,16 +11,17 @@ class userLogin(BaseModel): """ - { - "user_id":"e2851973-2239-4a44-8feb-00d5a3fb23ef", - "emp_id":"11181059", - "cmpno":"11181059", - "user_nm":"swyang", - "email":"swyang", - "dept_nm":"swyang", - "user_type":"SITE_USER" - } + { + "user_id":"e2851973-2239-4a44-8feb-00d5a3fb23ef", + "emp_id":"11181059", + "cmpno":"11181059", + "user_nm":"swyang", + "email":"swyang", + "dept_nm":"swyang", + "user_type":"SITE_USER" + } """ + user_id: str password: str = "1234" emp_id: str @@ -28,13 +29,14 @@ class userLogin(BaseModel): user_nm: str email: str dept_nm: str - innt_aut_group_cd: Optional[str] = 'ROLE_USER' - sttus: Optional[str] = 'SBSC' + innt_aut_group_cd: Optional[str] = "ROLE_USER" + sttus: Optional[str] = "SBSC" user_type: str class Config: fields = {"password": {"exclude": True}} + class TmpAuthUser(userLogin): tmp_aut_group_cd: Optional[str] = None tmp_aut_alc_user: Optional[str] = None @@ -42,13 +44,12 @@ class TmpAuthUser(userLogin): tmp_aut_exp_date: Optional[datetime] = None - def make_insert_query(login: dict): login["reg_user"] = login["user_id"] login["reg_date"] = "NOW()" columns = ", ".join(login.keys()) values = ", ".join(map(convert_data, login.values())) - return f'INSERT INTO user_bas ({columns}) VALUES ({values});' + return f"INSERT INTO user_bas ({columns}) VALUES ({values});" def api(login: userLogin, request: Request) -> Dict: @@ -57,10 +58,9 @@ def api(login: userLogin, request: Request) -> Dict: try: db = connect_db() - user_info, _ = db.select( - f'SELECT * FROM user_bas WHERE emp_id = {convert_data(login.emp_id)};') + user_info, _ = db.select(f"SELECT * FROM user_bas WHERE emp_id = {convert_data(login.emp_id)};") if not user_info: - time_zone = 'Asia/Seoul' + time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") login_query = make_insert_query(login.dict()) db.execute(login_query) @@ -78,7 +78,7 @@ def api(login: userLogin, request: Request) -> Dict: data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), secret_key=config.secret_info["secret_key"], - algorithm=config.secret_info["algorithm"] + algorithm=config.secret_info["algorithm"], ) knime_token = knime_encrypt(login.user_id + "|^|" + login.password, config.secret_info["knime_secret_key"]) @@ -87,16 +87,15 @@ def api(login: userLogin, request: Request) -> Dict: response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) + key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True + ) response.set_cookie( - key=config.secret_info["knime_cookie_name"], value=knime_token, max_age=3600, secure=False, httponly=True) + key=config.secret_info["knime_cookie_name"], value=knime_token, max_age=3600, secure=False, httponly=True + ) - kt_lamp("OUT_RES", transaction_id, "userLogin", - res_desc=f'{login.emp_id}') + kt_lamp("OUT_RES", transaction_id, "userLogin", res_desc=f"{login.emp_id}") return response def knime_encrypt(data: str, key: str): return AESCipher(key).encrypt(data).decode() - - diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 4cd955a2..97c0e1db 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -25,18 +25,22 @@ def convert_data(data) -> str: return data if data[0] == "`": return data[1:] - return f'\'{data.strip()}\'' + return f"'{data.strip()}'" def set_log_path(): parser = configparser.ConfigParser() parser.read( - f'{config.root_path}/conf/{config.category}/logging.conf', encoding='utf-8') + f"{config.root_path}/conf/{config.category}/logging.conf", encoding="utf-8" + ) - parser.set("handler_rotatingFileHandler", "args", - f"('{config.root_path}/log/{config.category}/{config.category}.log', 'a', 20000000, 10)") + parser.set( + "handler_rotatingFileHandler", + "args", + f"('{config.root_path}/log/{config.category}/{config.category}.log', 'a', 20000000, 10)", + ) - with open(f'{config.root_path}/conf/{config.category}/logging.conf', 'w') as f: + with open(f"{config.root_path}/conf/{config.category}/logging.conf", "w") as f: parser.write(f) @@ -44,8 +48,8 @@ def get_config(config_name: str): ano_cfg = {} conf = configparser.ConfigParser() - config_path = config.root_path+f"/conf/{config.category}/{config_name}" - conf.read(config_path, encoding='utf-8') + config_path = config.root_path + f"/conf/{config.category}/{config_name}" + conf.read(config_path, encoding="utf-8") for section in conf.sections(): ano_cfg[section] = {} for option in conf.options(section): @@ -72,7 +76,7 @@ def prepare_config(root_path) -> None: config.api_config = get_config("api_config.ini") config.server_host = args.host config.server_port = args.port - config.db_type = f'{args.db_type}_db' + config.db_type = f"{args.db_type}_db" config.db_info = api_router_cfg[config.db_type] config.lamp_info = api_router_cfg["lamp_info"] config.conn_pool = make_connection_pool(config.db_info) @@ -82,12 +86,17 @@ def prepare_config(root_path) -> None: def make_connection_pool(db_info): - conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], - password=db_info["password"], - host=db_info["host"], - port=db_info["port"], - database=db_info["database"], - options=f'-c search_path={db_info["schema"]}', connect_timeout=10) + conn_pool = pool.SimpleConnectionPool( + 1, + 20, + user=db_info["user"], + password=db_info["password"], + host=db_info["host"], + port=db_info["port"], + database=db_info["database"], + options=f'-c search_path={db_info["schema"]}', + connect_timeout=10, + ) return conn_pool @@ -105,8 +114,10 @@ def make_res_msg(result, err_msg, data=None, column_names=None, kor_column_names header_list = [] for index, column_name in enumerate(column_names): if kor_column_names: - header = {"column_name": column_name, - "kor_column_name": kor_column_names[index]} + header = { + "column_name": column_name, + "kor_column_name": kor_column_names[index], + } else: header = {"column_name": column_name} header_list.append(header) @@ -114,8 +125,11 @@ def make_res_msg(result, err_msg, data=None, column_names=None, kor_column_names if data is None or column_names is None: res_msg = {"result": result, "errorMessage": err_msg} else: - res_msg = {"result": result, "errorMessage": err_msg, - "data": {"body": data, "header": header_list}} + res_msg = { + "result": result, + "errorMessage": err_msg, + "data": {"body": data, "header": header_list}, + } return res_msg @@ -124,7 +138,8 @@ def get_exception_info(): trace_back = traceback.extract_tb(ex_traceback) trace_log = "\n".join([str(trace) for trace in trace_back]) logger.error( - f'\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}') + f"\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}" + ) return ex_type.__name__ @@ -150,18 +165,21 @@ class IncorrectPassword(Exception): def get_user(user_name: str): db = connect_db() user = db.select( - f'SELECT * FROM {config.user_info["table"]} WHERE {config.user_info["id_column"]} = {convert_data(user_name)}') + f'SELECT * FROM {config.user_info["table"]} WHERE {config.user_info["id_column"]} = {convert_data(user_name)}' + ) return user -def create_token(data: dict, secret_key, algorithm, expires_delta: Optional[timedelta] = None): +def create_token( + data: dict, secret_key, algorithm, expires_delta: Optional[timedelta] = None +): to_encode = data.copy() if expires_delta: - expire = datetime.now(timezone('Asia/Seoul')) + expires_delta + expire = datetime.now(timezone("Asia/Seoul")) + expires_delta else: - expire = datetime.now(timezone('Asia/Seoul')) + timedelta(minutes=15) + expire = datetime.now(timezone("Asia/Seoul")) + timedelta(minutes=15) - logger.info(f'commonToken Expire : {expire}') + logger.info(f"commonToken Expire : {expire}") to_encode.update({"exp": expire}) return jwt.encode(to_encode, secret_key, algorithm=algorithm) @@ -170,16 +188,27 @@ def create_token(data: dict, secret_key, algorithm, expires_delta: Optional[time def make_token_data(user: Dict) -> Dict: token_data_column = config.secret_info["token_data_column"].split(",") # token_data = {column: user[column] for column in token_data_column} - token_data = {column: datetime.strftime(user[column], "%Y-%m-%d %H:%M:%S.%f") \ - if isinstance(user[column], datetime) else user[column] for column in token_data_column} + token_data = { + column: datetime.strftime(user[column], "%Y-%m-%d %H:%M:%S.%f") + if isinstance(user[column], datetime) + else user[column] + for column in token_data_column + } logger.info(token_data) return token_data -def kt_lamp(log_type: str, transaction_id: str, operation: str, res_type: str = "I", res_code: str = "", res_desc: str = ""): +def kt_lamp( + log_type: str, + transaction_id: str, + operation: str, + res_type: str = "I", + res_code: str = "", + res_desc: str = "", +): lamp_form = {} now = datetime.now() - lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + lamp_form["timestamp"] = now.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] lamp_form["service"] = config.lamp_info["service_code"] lamp_form["operation"] = f'{config.lamp_info["prefix"]}_{operation}' lamp_form["transactionId"] = transaction_id diff --git a/API-SERVICE/ServiceUtils/crypto.py b/API-SERVICE/ServiceUtils/crypto.py index af4b1b85..0ea078a1 100644 --- a/API-SERVICE/ServiceUtils/crypto.py +++ b/API-SERVICE/ServiceUtils/crypto.py @@ -9,15 +9,14 @@ class AESCipher: def __init__(self, key): - self.key = md5(key.encode('utf8')).digest() + self.key = md5(key.encode("utf8")).digest() def encrypt(self, data): iv = get_random_bytes(AES.block_size) self.cipher = AES.new(self.key, AES.MODE_CBC, iv) - return b64encode(iv + self.cipher.encrypt(pad(data.encode('utf-8'), - AES.block_size))) + return b64encode(iv + self.cipher.encrypt(pad(data.encode("utf-8"), AES.block_size))) def decrypt(self, data): raw = b64decode(data) - self.cipher = AES.new(self.key, AES.MODE_CBC, raw[:AES.block_size]) - return unpad(self.cipher.decrypt(raw[AES.block_size:]), AES.block_size) \ No newline at end of file + self.cipher = AES.new(self.key, AES.MODE_CBC, raw[: AES.block_size]) + return unpad(self.cipher.decrypt(raw[AES.block_size :]), AES.block_size) From 96026bbcb4e7f70f39ff1cbe02644fcca38f4674 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 24 Nov 2022 08:45:13 +0900 Subject: [PATCH 213/236] =?UTF-8?q?feat:=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20totalcount=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaContent.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index 4eaca2ae..ee3f918a 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -56,7 +56,7 @@ def api(input: InputModel,u_id: str="") -> Dict: # meta index count data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] - data_dict["totalCount"] = data_dict["M"] + data_dict["C"] + data_dict["totalCount"] = sum(data_dict.values()) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index b7fd0384..9d583915 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -57,7 +57,7 @@ def api(input: InputModel,u_id: str="") -> Dict: del body["sort"] data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] - data_dict["totalCount"] = data_dict["M"] + data_dict["C"] + data_dict["totalCount"] = sum(data_dict.values()) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index fce993e0..cf871efc 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -56,7 +56,7 @@ def api(input: InputModel,u_id: str="") -> Dict: del body["sort"] data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] - data_dict["totalCount"] = data_dict["M"] + data_dict["C"] + data_dict["totalCount"] = sum(data_dict.values()) except Exception: except_name = get_exception_info() From a7562a8b7ab1e37a139d41fa7145ce6864a64ac0 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 24 Nov 2022 17:10:34 +0900 Subject: [PATCH 214/236] =?UTF-8?q?[AIPLATFORM-1167]=20feat:=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EA=B2=80=EC=83=89=20prefix=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index 5067dcde..724ebc0d 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -26,7 +26,8 @@ def base_search_query(action: str, sub_action: str, item_list: list) -> Dict: key = "multi_match" detail = { "fields": item.field, - "operator": item.operator + "operator": item.operator, + "type": "phrase_prefix" } query = make_query(key,action,words) query[key].update(detail) From c6064c8d60f11c9436dc60ba655615a6ca907861 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 28 Nov 2022 11:22:38 +0900 Subject: [PATCH 215/236] =?UTF-8?q?feat:=20admin=EC=9D=BC=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=9C=A0=EC=A0=80=EB=AA=A9=EB=A1=9D=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EA=B0=80=EB=8A=A5=ED=86=A0=EB=A1=9D=20api=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/users.py | 55 ++++++++++++++++++++++ API-SERVICE/ServiceUtils/CommonUtil.py | 15 ++++-- API-SERVICE/conf/common/api_config.ini | 5 ++ 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 API-SERVICE/ServiceApiList/common/users.py diff --git a/API-SERVICE/ServiceApiList/common/users.py b/API-SERVICE/ServiceApiList/common/users.py new file mode 100644 index 00000000..bef06b38 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/users.py @@ -0,0 +1,55 @@ +from typing import Dict +from fastapi.logger import logger +from jose import jwt +from ServiceUtils.CommonUtil import get_exception_info, get_user, get_all_users +from ApiService.ApiServiceConfig import config +from starlette.requests import Request + + +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(Exception): + pass + + + """ + { + "user_id": "a0d24b3a-ce8f-4a03-adec-f120ae1d2817", + "emp_id": "12345678", + "cmpno": "12345678", + "user_nm": "홍길동", + "email": "test@test.com", + "dept_nm": "데이터사업팀", + "innt_aut_group_cd": "ROLE_USER", + "user_type": "SITE_USER", + "tmp_aut_group_cd": null, + "tmp_aut_alc_user": null, + "tmp_aut_alc_date": null, + "tmp_aut_exp_date": null, + "exp": 1669597196 + } + """ +def api(request: Request) -> Dict: + try: + recv_access_token = request.cookies.get( + config.secret_info["cookie_name"]) + if not recv_access_token: + raise TokenDoesNotExist + payload = jwt.decode(token=recv_access_token, + key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) + username = payload[config.user_info["id_column"]] + user = get_user(username, "SITE_ADMIN") if payload["user_type"] == "SITE_ADMIN" else None + if not user: + raise InvalidUserInfo + + users = get_all_users() + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": "", "data": {"body": users}} + + return result diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 97c0e1db..193f0846 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -162,13 +162,20 @@ class IncorrectPassword(Exception): pass -def get_user(user_name: str): +def get_user(user_name: str, user_type: str = None): db = connect_db() - user = db.select( - f'SELECT * FROM {config.user_info["table"]} WHERE {config.user_info["id_column"]} = {convert_data(user_name)}' - ) + query = f'SELECT * FROM {config.user_info["table"]} WHERE {config.user_info["id_column"]} = {convert_data(user_name)}' + query += f" and user_type = '{user_type}'" if user_type else "" + user = db.select(query) return user +def get_all_users(): + db = connect_db() + query = f"SELECT * FROM {config.user_info['table']}" + users = db.select(query) + + return users + def create_token( data: dict, secret_key, algorithm, expires_delta: Optional[timedelta] = None diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index b314e2c4..619d9e90 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -27,3 +27,8 @@ sub_dir = common method = GET url = /portal/api/common/user/commonUserInfo sub_dir = common + +[users] +method = GET +url = /portal/api/common/ad/users +sub_dir = common From e02e4d440376930a696dab7a1b6a2c7913434037 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 28 Nov 2022 15:49:45 +0900 Subject: [PATCH 216/236] =?UTF-8?q?[AIPLATFORM-1179]=20feat:=20email=20?= =?UTF-8?q?=EB=B0=9C=EC=86=A1=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/conf/db_config.ini | 10 +++++- API-SERVICE/send_email.py | 39 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/send_email.py diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini index 3ef075ed..5078ca3a 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -20,4 +20,12 @@ port = 25432 user = dpme password = hello.meta12#$ database = ktportal -schema = meta \ No newline at end of file +schema = meta + +[email_db] +host = 192.168.100.126 +port = 25432 +user = dpme +password = hello.meta12#$ +database = ktportal +schema = sitemng diff --git a/API-SERVICE/send_email.py b/API-SERVICE/send_email.py new file mode 100644 index 00000000..377c6d9e --- /dev/null +++ b/API-SERVICE/send_email.py @@ -0,0 +1,39 @@ +import os +import smtplib +from pathlib import Path +from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, execute + +root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) +prepare_config(root_path) + + +def main(): + # batch 1분에 한번씩 status를 req에서 send로 변경해준다 + from_addr = "DataOcean@kt.com" + host = "14.63.245.51" + port = 25 + query = "SELECT * FROM email_dsp_hst WHERE sttus = 'REQ'" + db = connect_db() + send_list = select(db,query)[0] + + for email_info in send_list: + try: + msg = ( + f"subject: {email_info['title']}\n" + f"from: {from_addr}\n" + f"to: {email_info['rcv_adr']}\n" + f"{email_info['sbst']}\n" + ) + with smtplib.SMTP(host, port) as smtp: + smtp.sendmail(from_addr,email_info['rcv_adr'],msg) + except Exception as e: + print(e) + else: + # update status + query = f"UPDATE email_dsp_hst SET sttus = 'SEND'"\ + f"WHERE email_id = '{email_info['email_id']}'" + execute(db,db.cursor(),query) + + +if __name__ == "__main__": + main() \ No newline at end of file From 8f1cae479c3b82ee7649c72446e14a4cc5730243 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 28 Nov 2022 17:09:05 +0900 Subject: [PATCH 217/236] =?UTF-8?q?[AIPLATFORM-1179]=20feat:=20email=20con?= =?UTF-8?q?fig=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/conf/config.ini | 10 +++++++++- API-SERVICE/ELKSearch/conf/db_config.ini | 1 + API-SERVICE/send_email.py | 15 ++++++++++----- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 2aa4f0c1..19035ddd 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -1,3 +1,4 @@ +# API-SERVICE elasticsearch config [commercial] host = 10.217.59.133 port = 9200 @@ -10,6 +11,7 @@ port = 9200 host = 192.168.101.44 port = 39200 +# els_update.py elasticsearch config [data] host = 192.168.101.44 port = 39200 @@ -18,4 +20,10 @@ index = kt_biz_data [assets] host = 192.168.101.44 port = 39200 -index = kt_biz_asset \ No newline at end of file +index = kt_biz_asset + +# send_email.py email config +[email] +host = 14.63.245.51 +port = 25 +from_addr = DataOcean@kt.com \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini index 5078ca3a..1412bc7e 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -22,6 +22,7 @@ password = hello.meta12#$ database = ktportal schema = meta +# send_email.py config [email_db] host = 192.168.100.126 port = 25432 diff --git a/API-SERVICE/send_email.py b/API-SERVICE/send_email.py index 377c6d9e..e35a9d57 100644 --- a/API-SERVICE/send_email.py +++ b/API-SERVICE/send_email.py @@ -1,17 +1,22 @@ import os import smtplib from pathlib import Path -from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, execute +from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, execute, config root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) prepare_config(root_path) def main(): - # batch 1분에 한번씩 status를 req에서 send로 변경해준다 - from_addr = "DataOcean@kt.com" - host = "14.63.245.51" - port = 25 + """ + :argument + category = email + db_type = email_db + """ + # batch 1분에 한번씩 email을 전송하고 status를 req에서 send로 변경한다 + from_addr = config.els_info["from_addr"] + host = config.els_info["host"] + port = config.els_info["port"] query = "SELECT * FROM email_dsp_hst WHERE sttus = 'REQ'" db = connect_db() send_list = select(db,query)[0] From 0577b2f3dad3bb4b6adb5136cdd97533163dbe97 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Tue, 29 Nov 2022 15:49:38 +0900 Subject: [PATCH 218/236] =?UTF-8?q?fix:=20user=5Fbas=20=EC=A0=91=EA=B7=BC?= =?UTF-8?q?=EA=B6=8C=ED=95=9C=20=EC=84=A4=EC=A0=95=EC=97=90=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=EB=90=9C=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?&=20=EC=A4=91=EB=B3=B5=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/common/commonLogout.py | 26 ++------- .../ServiceApiList/common/commonSelect.py | 27 ++++++--- .../ServiceApiList/common/commonToken.py | 28 +++------- .../ServiceApiList/common/commonUserInfo.py | 29 ++-------- .../ServiceApiList/common/userLogin.py | 9 +++ API-SERVICE/ServiceApiList/common/users.py | 55 ------------------- API-SERVICE/ServiceUtils/CommonUtil.py | 38 +++++++++---- API-SERVICE/ServiceUtils/exceptions.py | 6 ++ API-SERVICE/conf/common/api_config.ini | 5 -- API-SERVICE/requirements.txt | 35 ++++++++++++ 10 files changed, 116 insertions(+), 142 deletions(-) delete mode 100644 API-SERVICE/ServiceApiList/common/users.py create mode 100644 API-SERVICE/ServiceUtils/exceptions.py create mode 100644 API-SERVICE/requirements.txt diff --git a/API-SERVICE/ServiceApiList/common/commonLogout.py b/API-SERVICE/ServiceApiList/common/commonLogout.py index 814b07c5..21b28da5 100644 --- a/API-SERVICE/ServiceApiList/common/commonLogout.py +++ b/API-SERVICE/ServiceApiList/common/commonLogout.py @@ -3,33 +3,19 @@ from fastapi.responses import JSONResponse from jose import jwt from starlette.requests import Request -from ServiceUtils.CommonUtil import get_exception_info, get_user -from ApiService.ApiServiceConfig import config - - -class InvalidUserInfo(Exception): - pass - -class TokenDoesNotExist(Exception): - pass +from ServiceUtils import CommonUtil as utils +from ApiService.ApiServiceConfig import config def api(request: Request) -> Dict: f_delete = True try: - recv_access_token = request.cookies.get( - config.secret_info["cookie_name"]) - if not recv_access_token: - raise TokenDoesNotExist - payload = jwt.decode(token=recv_access_token, - key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) - username = payload[config.user_info["id_column"]] - user = get_user(username) - if not user[0]: - raise InvalidUserInfo + token = utils.get_token_from_cookie(request) + payload = utils.jwt_decode(token) + user = utils.get_user_info(payload) except Exception: - except_name = get_exception_info() + except_name = utils.get_exception_info() result = {"result": 0, "errorMessage": except_name} # f_delete = False # 쿠기를 삭제하지 않으면 user-docean-access-token에 None 값이 들어가고 이는 Exception 발생을 야기 else: diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index 143575ca..45226544 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -1,8 +1,10 @@ from typing import Dict, List, Optional -from ApiService.ApiServiceConfig import config -from ServiceUtils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data from pydantic import BaseModel from fastapi.logger import logger +from fastapi.requests import Request + +from ApiService.ApiServiceConfig import config +from ServiceUtils import CommonUtil as utils class joinInfo(BaseModel): @@ -67,12 +69,12 @@ def convert_compare_op(compare_str): def make_where_value(where): if where.compare_op == "IN" or where.compare_op == "NOT IN": - value_list = ", ".join(map(convert_data, where.value.split(","))) + value_list = ", ".join(map(utils.convert_data, where.value.split(","))) value = f"( {value_list} )" elif where.compare_op in ["is", "is not"]: value = where.value else: - value = convert_data(where.value) + value = utils.convert_data(where.value) return value @@ -114,25 +116,32 @@ def make_select_query(select_info: commonSelect): return select_query, count_query -def api(select_info: commonSelect) -> Dict: +def api(select_info: commonSelect, request: Request) -> Dict: + token = utils.get_token_from_cookie(request) + payload = utils.jwt_decode(token) + user_type = payload["user_type"] + + if select_info.table_nm == "user_bas" and not user_type == "SITE_ADMIN": + return {"result": 0, "errorMessage": "not allowed user"} + get_column_info = f"SELECT eng_nm, kor_nm FROM tbl_item_coln_dtl \ - WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {convert_data(select_info.table_nm)});" + WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {utils.convert_data(select_info.table_nm)});" get_query, total_cnt_query = make_select_query(select_info) logger.info(f"Get Query : {get_query}") try: - db = connect_db() + db = utils.connect_db() select_data, _ = db.select(get_query) if select_info.page_info: total_cnt = db.select(total_cnt_query) except Exception: - except_name = get_exception_info() + except_name = utils.get_exception_info() result = {"result": 0, "errorMessage": except_name} else: column_info, _ = db.select(get_column_info) kor_nm_list = [map_data["kor_nm"] for map_data in column_info] eng_nm_list = [map_data["eng_nm"] for map_data in column_info] - result = make_res_msg(1, "", select_data, eng_nm_list, kor_nm_list) + result = utils.make_res_msg(1, "", select_data, eng_nm_list, kor_nm_list) if select_info.page_info: result["data"].update(total_cnt[0][0]) diff --git a/API-SERVICE/ServiceApiList/common/commonToken.py b/API-SERVICE/ServiceApiList/common/commonToken.py index 873225f8..fb5449f8 100644 --- a/API-SERVICE/ServiceApiList/common/commonToken.py +++ b/API-SERVICE/ServiceApiList/common/commonToken.py @@ -3,39 +3,27 @@ from fastapi.responses import JSONResponse from datetime import timedelta from jose import jwt -from ServiceUtils.CommonUtil import get_exception_info, get_user, create_token, make_token_data +from ServiceUtils import CommonUtil as utils +from ServiceUtils.exceptions import TokenDoesNotExist, InvalidUserInfo from ApiService.ApiServiceConfig import config from starlette.requests import Request -class InvalidUserInfo(Exception): - pass -class TokenDoesNotExist(Exception): - pass - def api(request: Request) -> Dict: access_token = "" try: - recv_access_token = request.cookies.get(config.secret_info["cookie_name"]) - if not recv_access_token: - raise TokenDoesNotExist - payload = jwt.decode( - token=recv_access_token, key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"] - ) - username = payload[config.user_info["id_column"]] - user = get_user(username) - if not user[0]: - raise InvalidUserInfo - user = user[0][0] + token = utils.get_token_from_cookie(request) + payload = utils.jwt_decode(token) + user = utils.get_user_info(payload) except Exception: - except_name = get_exception_info() + except_name = utils.get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - token_data = make_token_data(user) - access_token = create_token( + token_data = utils.make_token_data(user) + access_token = utils.create_token( data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), secret_key=config.secret_info["secret_key"], diff --git a/API-SERVICE/ServiceApiList/common/commonUserInfo.py b/API-SERVICE/ServiceApiList/common/commonUserInfo.py index 9a81d960..6548da09 100644 --- a/API-SERVICE/ServiceApiList/common/commonUserInfo.py +++ b/API-SERVICE/ServiceApiList/common/commonUserInfo.py @@ -1,34 +1,17 @@ from typing import Dict from fastapi.logger import logger -from jose import jwt -from ServiceUtils.CommonUtil import get_exception_info, get_user -from ApiService.ApiServiceConfig import config +from ServiceUtils import CommonUtil as utils from starlette.requests import Request -class InvalidUserInfo(Exception): - pass - - -class TokenDoesNotExist(Exception): - pass - - def api(request: Request) -> Dict: try: - recv_access_token = request.cookies.get( - config.secret_info["cookie_name"]) - if not recv_access_token: - raise TokenDoesNotExist - payload = jwt.decode(token=recv_access_token, - key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) - username = payload[config.user_info["id_column"]] - user = get_user(username) - if not user[0]: - raise InvalidUserInfo - user = user[0][0] + token = utils.get_token_from_cookie(request) + payload = utils.jwt_decode(token) + user = utils.get_user_info(payload) + logger.info(f"CommonUserInfo :: {user}") except Exception: - except_name = get_exception_info() + except_name = utils.get_exception_info() result = {"result": 0, "errorMessage": except_name} else: result = {"result": 1, "errorMessage": "", "data": {"body": payload}} diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 14c61fcd..1f686b1b 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -19,6 +19,15 @@ class userLogin(BaseModel): "email":"swyang", "dept_nm":"swyang", "user_type":"SITE_USER" + }, + { + "user_id":"0f25ac7d-abfe-41db-b6fb-6c1d929c95f8", + "emp_id":"11181344", + "cmpno":"11181344", + "user_nm":"테스터", + "email":"test@test.com", + "dept_nm":"테스터부서", + "user_type":"SITE_ADMIN" } """ diff --git a/API-SERVICE/ServiceApiList/common/users.py b/API-SERVICE/ServiceApiList/common/users.py deleted file mode 100644 index bef06b38..00000000 --- a/API-SERVICE/ServiceApiList/common/users.py +++ /dev/null @@ -1,55 +0,0 @@ -from typing import Dict -from fastapi.logger import logger -from jose import jwt -from ServiceUtils.CommonUtil import get_exception_info, get_user, get_all_users -from ApiService.ApiServiceConfig import config -from starlette.requests import Request - - -class InvalidUserInfo(Exception): - pass - - -class TokenDoesNotExist(Exception): - pass - - - """ - { - "user_id": "a0d24b3a-ce8f-4a03-adec-f120ae1d2817", - "emp_id": "12345678", - "cmpno": "12345678", - "user_nm": "홍길동", - "email": "test@test.com", - "dept_nm": "데이터사업팀", - "innt_aut_group_cd": "ROLE_USER", - "user_type": "SITE_USER", - "tmp_aut_group_cd": null, - "tmp_aut_alc_user": null, - "tmp_aut_alc_date": null, - "tmp_aut_exp_date": null, - "exp": 1669597196 - } - """ -def api(request: Request) -> Dict: - try: - recv_access_token = request.cookies.get( - config.secret_info["cookie_name"]) - if not recv_access_token: - raise TokenDoesNotExist - payload = jwt.decode(token=recv_access_token, - key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) - username = payload[config.user_info["id_column"]] - user = get_user(username, "SITE_ADMIN") if payload["user_type"] == "SITE_ADMIN" else None - if not user: - raise InvalidUserInfo - - users = get_all_users() - - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = {"result": 1, "errorMessage": "", "data": {"body": users}} - - return result diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 193f0846..87b22c93 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -1,23 +1,48 @@ from datetime import datetime, timedelta +from ServiceUtils.exceptions import TokenDoesNotExist, InvalidUserInfo from pytz import timezone import configparser import argparse import traceback -import socket from fastapi.logger import logger -from fastapi import Request, HTTPException, status +from fastapi.requests import Request from typing import Any, Optional, Dict from ApiService.ApiServiceConfig import config from ServiceConnectManager import PostgresManager from psycopg2 import pool import sys -import jwt +from jose import jwt import traceback import logging lamp = logging.getLogger("trace") +def get_token_from_cookie(request: Request): + recv_access_token = request.cookies.get(config.secret_info["cookie_name"]) + if not recv_access_token: + raise TokenDoesNotExist + return recv_access_token + + +def jwt_decode(token): + return jwt.decode( + token=token, + key=config.secret_info["secret_key"], + algorithms=config.secret_info["algorithm"], + ) + + +def get_user_info(payload): + username = payload[config.user_info["id_column"]] + user = get_user(username) + if not user[0]: + raise InvalidUserInfo + user = user[0][0] + + return user + + def convert_data(data) -> str: data = str(data) if data: @@ -169,13 +194,6 @@ def get_user(user_name: str, user_type: str = None): user = db.select(query) return user -def get_all_users(): - db = connect_db() - query = f"SELECT * FROM {config.user_info['table']}" - users = db.select(query) - - return users - def create_token( data: dict, secret_key, algorithm, expires_delta: Optional[timedelta] = None diff --git a/API-SERVICE/ServiceUtils/exceptions.py b/API-SERVICE/ServiceUtils/exceptions.py new file mode 100644 index 00000000..3e5cd97d --- /dev/null +++ b/API-SERVICE/ServiceUtils/exceptions.py @@ -0,0 +1,6 @@ +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(Exception): + pass \ No newline at end of file diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 619d9e90..b314e2c4 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -27,8 +27,3 @@ sub_dir = common method = GET url = /portal/api/common/user/commonUserInfo sub_dir = common - -[users] -method = GET -url = /portal/api/common/ad/users -sub_dir = common diff --git a/API-SERVICE/requirements.txt b/API-SERVICE/requirements.txt new file mode 100644 index 00000000..c845ddd3 --- /dev/null +++ b/API-SERVICE/requirements.txt @@ -0,0 +1,35 @@ +aiohttp==3.8.3 +aiosignal==1.2.0 +anyio==3.6.2 +asgiref==3.5.2 +async-timeout==4.0.2 +asyncssh==2.12.0 +attrs==22.1.0 +certifi==2022.9.24 +cffi==1.15.1 +charset-normalizer==2.1.1 +click==8.1.3 +cryptography==38.0.3 +ecdsa==0.18.0 +elasticsearch==7.17.6 +fastapi==0.83.0 +frozenlist==1.3.1 +h11==0.14.0 +idna==3.4 +multidict==6.0.2 +psycopg2-binary==2.9.3 +pyasn1==0.4.8 +pycparser==2.21 +pycryptodome==3.15.0 +pydantic==1.10.2 +PyJWT==2.6.0 +python-jose==3.3.0 +pytz==2022.6 +rsa==4.9 +six==1.16.0 +sniffio==1.3.0 +starlette==0.19.1 +typing_extensions==4.4.0 +urllib3==1.26.12 +uvicorn==0.16.0 +yarl==1.8.1 From 0b9026842ab349c77c775877d39f3721c59822e9 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Tue, 29 Nov 2022 16:06:51 +0900 Subject: [PATCH 219/236] =?UTF-8?q?fix:=20common=20select=20=EC=8B=9C=20ta?= =?UTF-8?q?ble=5Fname=EC=9D=B4=20user=5Fbas=20=EC=9D=B4=EB=A9=B4=20token?= =?UTF-8?q?=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/commonSelect.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index 45226544..e085a907 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -117,12 +117,13 @@ def make_select_query(select_info: commonSelect): def api(select_info: commonSelect, request: Request) -> Dict: - token = utils.get_token_from_cookie(request) - payload = utils.jwt_decode(token) - user_type = payload["user_type"] + if select_info.table_nm == "user_bas": + token = utils.get_token_from_cookie(request) + payload = utils.jwt_decode(token) + user_type = payload["user_type"] - if select_info.table_nm == "user_bas" and not user_type == "SITE_ADMIN": - return {"result": 0, "errorMessage": "not allowed user"} + if not user_type == "SITE_ADMIN": + return {"result": 0, "errorMessage": "not allowed user"} get_column_info = f"SELECT eng_nm, kor_nm FROM tbl_item_coln_dtl \ WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {utils.convert_data(select_info.table_nm)});" From d750b105b1f73cade577c41cd5d1763c07349423 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 29 Nov 2022 17:32:34 +0900 Subject: [PATCH 220/236] =?UTF-8?q?[AIPLATFORM-1179]=20feat:=20email=20tem?= =?UTF-8?q?plate=20=EC=A0=81=EC=9A=A9=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ELKSearch/conf/template/exTemplate.html | 41 +++++++++++++++++++ API-SERVICE/send_email.py | 38 +++++++++++------ 2 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 API-SERVICE/ELKSearch/conf/template/exTemplate.html diff --git a/API-SERVICE/ELKSearch/conf/template/exTemplate.html b/API-SERVICE/ELKSearch/conf/template/exTemplate.html new file mode 100644 index 00000000..b6e856ec --- /dev/null +++ b/API-SERVICE/ELKSearch/conf/template/exTemplate.html @@ -0,0 +1,41 @@ + + + + + + + + +
+
+

+ +

+
+ + + + + + + + + +
+ TITLE + +
+
+

메일 전송 테스트

+

SBST

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/API-SERVICE/send_email.py b/API-SERVICE/send_email.py index e35a9d57..6949994e 100644 --- a/API-SERVICE/send_email.py +++ b/API-SERVICE/send_email.py @@ -1,6 +1,8 @@ import os import smtplib from pathlib import Path +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, execute, config root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) @@ -14,31 +16,43 @@ def main(): db_type = email_db """ # batch 1분에 한번씩 email을 전송하고 status를 req에서 send로 변경한다 - from_addr = config.els_info["from_addr"] - host = config.els_info["host"] - port = config.els_info["port"] query = "SELECT * FROM email_dsp_hst WHERE sttus = 'REQ'" db = connect_db() send_list = select(db,query)[0] + from_addr = config.els_info["from_addr"] + host = config.els_info["host"] + port = config.els_info["port"] + for email_info in send_list: try: - msg = ( - f"subject: {email_info['title']}\n" - f"from: {from_addr}\n" - f"to: {email_info['rcv_adr']}\n" - f"{email_info['sbst']}\n" - ) + message = MIMEMultipart("alternative") + message["Subject"] = email_info['title'] + message["From"] = from_addr + message["To"] = email_info['rcv_adr'] + + with open(f'{config.root_path}/ELKSearch/conf/template/exTemplate.html', "r") as fd: + html = "\n".join(fd.readlines()) + + html = html.replace("TITLE", email_info['title']) + html = html.replace("SBST", email_info['sbst']) + html_part = MIMEText(html, "html") + message.attach(html_part) + with smtplib.SMTP(host, port) as smtp: - smtp.sendmail(from_addr,email_info['rcv_adr'],msg) + # smtp.sendmail(from_addr,email_info['rcv_adr'],message) + smtp.send_message(message) except Exception as e: + print(0) print(e) else: # update status - query = f"UPDATE email_dsp_hst SET sttus = 'SEND'"\ + print(1) + query = f"UPDATE email_dsp_hst SET sttus = 'SEND'" \ f"WHERE email_id = '{email_info['email_id']}'" execute(db,db.cursor(),query) + break if __name__ == "__main__": - main() \ No newline at end of file + main() From 91a729f31418d60ceab140840379bdd1887660dc Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Nov 2022 13:43:45 +0900 Subject: [PATCH 221/236] =?UTF-8?q?[AIPLATFORM-1199]=20feat:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=99=84=EC=84=B1=20API=20method=20GET->POST=EB=A1=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(Team=20repo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py | 12 +++++++++--- API-SERVICE/conf/meta/api_config.ini | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py index 02a29410..ce3bfb0c 100644 --- a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py @@ -1,11 +1,17 @@ from typing import Dict +from pydantic import BaseModel from ELKSearch.Manager.manager import ElasticSearchManager from ServiceUtils.CommonUtil import get_exception_info from ELKSearch.Utils.database_utils import get_config from ApiService.ApiServiceConfig import config -def api(size: int, keyword: str) -> Dict: +class Prefix(BaseModel): + size: int + keyword: str + + +def api(input: Prefix) -> Dict: """ Auto Complete data_nm DB의 Like 검색과 유사함 @@ -15,10 +21,10 @@ def api(size: int, keyword: str) -> Dict: index = ["kt_biz_data", "kt_biz_asset"] els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] field = "data_nm" - query = {field: keyword} + query = {field: input.keyword} try: es = ElasticSearchManager(index=index,**els_config) - es.size = size + es.size = input.size prefix_data = es.prefix(query,[field]) except Exception: diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 985da770..39792797 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -14,7 +14,7 @@ url = /portal/api/meta/getBizMetaAsset sub_dir = meta [getPrefixBizMeta] -method = GET +method = POST url = /portal/api/meta/getPrefixBizMeta sub_dir = meta From f39afc92a234c91cb52d7f12dc45604570cda557 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 30 Nov 2022 16:58:58 +0900 Subject: [PATCH 222/236] =?UTF-8?q?feat:=20LADAP=20=EC=97=B0=EB=8F=99=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 51 ++++--- .../RouterConnectManager/PostgresManager.py | 9 +- API-ROUTER/RouterUtils/CommonUtil.py | 62 ++++++--- API-ROUTER/RouterUtils/RouteUtil.py | 42 ++++-- API-ROUTER/server.py | 14 +- API-ROUTER/setup.py | 12 +- API-SERVICE/ApiService/ApiService.py | 13 +- API-SERVICE/ApiService/ApiServiceConfig.py | 1 + API-SERVICE/ELKSearch/Manager/manager.py | 31 +++-- API-SERVICE/ELKSearch/Utils/database_utils.py | 29 ++-- .../ELKSearch/Utils/elasticsearch_utils.py | 11 +- API-SERVICE/ServiceApiList/common/__init__.py | 1 - .../ServiceApiList/common/commonExecute.py | 11 +- .../ServiceApiList/common/commonSelect.py | 4 +- .../ServiceApiList/common/commonToken.py | 9 +- .../ServiceApiList/common/ldap/__init__.py | 0 .../ServiceApiList/common/ldap/login.py | 125 ++++++++++++++++++ .../ServiceApiList/common/ldap/utils.py | 20 +++ .../ServiceApiList/common/userLogin.py | 30 ++++- .../ServiceApiList/meta/getBizMetaAsset.py | 19 +-- .../ServiceApiList/meta/getBizMetaContent.py | 19 +-- .../ServiceApiList/meta/getBizMetaData.py | 19 +-- .../ServiceApiList/meta/getElsBizMetaList.py | 20 +-- .../ServiceApiList/meta/getPrefixBizMeta.py | 10 +- .../ServiceConnectManager/PostgresManager.py | 7 +- API-SERVICE/ServiceUtils/CommonUtil.py | 21 ++- API-SERVICE/ServiceUtils/exceptions.py | 2 +- API-SERVICE/conf/common/api_config.ini | 7 + API-SERVICE/conf/common/config.ini | 8 +- API-SERVICE/els_update.py | 12 +- API-SERVICE/requirements.txt | 35 ----- API-SERVICE/send_email.py | 22 ++- API-SERVICE/server.py | 13 +- API-SERVICE/setup.py | 12 +- requirements.txt | 6 +- 35 files changed, 478 insertions(+), 229 deletions(-) create mode 100644 API-SERVICE/ServiceApiList/common/ldap/__init__.py create mode 100644 API-SERVICE/ServiceApiList/common/ldap/login.py create mode 100644 API-SERVICE/ServiceApiList/common/ldap/utils.py delete mode 100644 API-SERVICE/requirements.txt diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 2edd0edc..6aa09558 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,8 +3,14 @@ import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config + # from RouterUtils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, kt_lamp # 함수 내부에 import로 수정 -from RouterUtils.RouteUtil import bypass_msg, call_remote_func, get_api_info, make_route_response +from RouterUtils.RouteUtil import ( + bypass_msg, + call_remote_func, + get_api_info, + make_route_response, +) from pydantic import BaseModel from starlette.requests import Request from urllib import parse @@ -46,33 +52,41 @@ def __init__(self) -> None: def set_route(self) -> None: from RouterUtils.CommonUtil import connect_db + self.router.add_api_route( - "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"]) + "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"] + ) db = connect_db() - config.api_info, _ = db.select('SELECT * FROM api_item_bas;') - config.api_params, _ = db.select('SELECT * FROM api_item_param_dtl;') + config.api_info, _ = db.select("SELECT * FROM api_item_bas;") + config.api_params, _ = db.select("SELECT * FROM api_item_param_dtl;") - config.api_server_info, _ = db.select( - 'SELECT * FROM api_item_server_dtl') + config.api_server_info, _ = db.select("SELECT * FROM api_item_server_dtl") for api in config.api_info: method = str(api["mthd"]).split(",") self.router.add_api_route( - api["route_url"], self.route_api, methods=method, tags=[f'Route Category ({api["srvr_nm"]})']) + api["route_url"], + self.route_api, + methods=method, + tags=[f'Route Category ({api["srvr_nm"]})'], + ) for api_name, conf_api_info in config.api_config.items(): module_name = f'RouterApiList.{conf_api_info["sub_dir"]}.{api_name}' spec = importlib.util.find_spec(module_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{conf_api_info["url"]}', - module.api, methods=[ - conf_api_info["method"]], - tags=[f'service [ {conf_api_info["sub_dir"]} ]']) + self.router.add_api_route( + f'{conf_api_info["url"]}', + module.api, + methods=[conf_api_info["method"]], + tags=[f'service [ {conf_api_info["sub_dir"]} ]'], + ) def reload_api(self): from RouterUtils.CommonUtil import save_file_for_reload + logger.info("Reload API Info") save_file_for_reload() result = {"result": 1, "errorMessage": ""} @@ -81,12 +95,14 @@ def reload_api(self): async def route_api(self, request: Request) -> Dict: # 함수 내부에 import로 수정 from RouterUtils.CommonUtil import get_exception_info, delete_headers, kt_lamp + route_url = request.url.path method = request.method access_token = "" body = None - headers = delete_headers(dict(request.headers), [ - "content-length", "user-agent"]) + headers = delete_headers( + dict(request.headers), ["content-length", "user-agent"] + ) transaction_id = f'{config.lamp_info["service_code"]}_{uuid.uuid4()}' headers["transactionId"] = transaction_id @@ -102,10 +118,13 @@ async def route_api(self, request: Request) -> Dict: params_query = parse.unquote(str(request.query_params)) logger.info( - f'\n- api_info : {api_info}\n- api_params : {api_params} \ - \n- req body : {body}, params_query : {params_query}') + f"\n- api_info : {api_info}\n- api_params : {api_params} \ + \n- req body : {body}, params_query : {params_query}" + ) if api_info["mode"] == "MESSAGE PASSING": - result, access_token = await bypass_msg(api_info, params_query, body, headers) + result, access_token = await bypass_msg( + api_info, params_query, body, headers + ) else: result = await call_remote_func(api_info, api_params, body) except Exception: diff --git a/API-ROUTER/RouterConnectManager/PostgresManager.py b/API-ROUTER/RouterConnectManager/PostgresManager.py index a56b6d6e..514a6b25 100644 --- a/API-ROUTER/RouterConnectManager/PostgresManager.py +++ b/API-ROUTER/RouterConnectManager/PostgresManager.py @@ -26,22 +26,23 @@ def execute(self, sql: str) -> None: def multiple_excute(self, sql_list: list) -> None: try: for index, sql in enumerate(sql_list): - logger.info( - f'PostgresManager Multiple Execute. ({index}. {sql})') + logger.info(f"PostgresManager Multiple Execute. ({index}. {sql})") self.cursor.execute(sql) self.conn.commit() except (Exception, psycopg2.DatabaseError): self.conn.rollback() raise psycopg2.DatabaseError - def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], List[Any]]: + def select( + self, sql: str, count: int = None + ) -> Tuple[List[Dict[Any, Any]], List[Any]]: self.execute(sql) column_names = [desc[0] for desc in self.cursor.description] if count is None: rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - logger.info(f'PostgresManager Select Execute. ({sql})') + logger.info(f"PostgresManager Select Execute. ({sql})") result = [] for row in rows: diff --git a/API-ROUTER/RouterUtils/CommonUtil.py b/API-ROUTER/RouterUtils/CommonUtil.py index c36cd8dc..c20f9036 100644 --- a/API-ROUTER/RouterUtils/CommonUtil.py +++ b/API-ROUTER/RouterUtils/CommonUtil.py @@ -16,17 +16,20 @@ def convert_data(data) -> str: - return f'\'{str(data)}\'' + return f"'{str(data)}'" def set_log_path(): parser = configparser.ConfigParser() - parser.read(f'{config.root_path}/conf/logging.conf', encoding='utf-8') + parser.read(f"{config.root_path}/conf/logging.conf", encoding="utf-8") - parser.set("handler_rotatingFileHandler", "args", - f"('{config.root_path}/log/API-Router.log', 'a', 20000000, 10)") + parser.set( + "handler_rotatingFileHandler", + "args", + f"('{config.root_path}/log/API-Router.log', 'a', 20000000, 10)", + ) - with open(f'{config.root_path}/conf/logging.conf', 'w') as f: + with open(f"{config.root_path}/conf/logging.conf", "w") as f: parser.write(f) @@ -34,8 +37,8 @@ def get_config(config_name: str): ano_cfg = {} conf = configparser.ConfigParser() - config_path = config.root_path+f'/conf/{config_name}' - conf.read(config_path, encoding='utf-8') + config_path = config.root_path + f"/conf/{config_name}" + conf.read(config_path, encoding="utf-8") for section in conf.sections(): ano_cfg[section] = {} for option in conf.options(section): @@ -58,7 +61,7 @@ def prepare_config(root_path) -> None: config.root_path = root_path api_router_cfg = get_config("config.ini") config.api_config = get_config("api_config.ini") - config.db_type = f'{args.db_type}_db' + config.db_type = f"{args.db_type}_db" config.server_host = args.host config.server_port = args.port config.db_info = api_router_cfg[config.db_type] @@ -69,12 +72,17 @@ def prepare_config(root_path) -> None: def make_connection_pool(db_info): - conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], - password=db_info["password"], - host=db_info["host"], - port=db_info["port"], - database=db_info["database"], - options=f'-c search_path={db_info["schema"]}', connect_timeout=10) + conn_pool = pool.SimpleConnectionPool( + 1, + 20, + user=db_info["user"], + password=db_info["password"], + host=db_info["host"], + port=db_info["port"], + database=db_info["database"], + options=f'-c search_path={db_info["schema"]}', + connect_timeout=10, + ) return conn_pool @@ -84,7 +92,7 @@ def connect_db(): def save_file_for_reload(): - with open(f'{config.root_path}/server.py', "a") as fd: + with open(f"{config.root_path}/server.py", "a") as fd: fd.write(" ") @@ -97,8 +105,12 @@ def make_res_msg(result, err_msg, data=None, column_names=None): if data is None or column_names is None: res_msg = {"result": result, "errorMessage": err_msg} else: - res_msg = {"result": result, "errorMessage": err_msg, - "body": data, "header": header_list} + res_msg = { + "result": result, + "errorMessage": err_msg, + "body": data, + "header": header_list, + } return res_msg @@ -107,22 +119,30 @@ def get_exception_info(): trace_back = traceback.extract_tb(ex_traceback) trace_log = "\n".join([str(trace) for trace in trace_back]) logger.error( - f'\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}') + f"\n- Exception Type : {ex_type}\n- Exception Message : {str(ex_value).strip()}\n- Exception Log : \n{trace_log}" + ) return ex_type.__name__ def delete_headers(headers: Dict, delete_header: List) -> Dict: for delete in delete_header: if headers.get(delete): - del(headers[delete]) + del headers[delete] return headers -def kt_lamp(log_type: str, transaction_id: str, operation: str, res_type: str = "I", res_code: str = "", res_desc: str = ""): +def kt_lamp( + log_type: str, + transaction_id: str, + operation: str, + res_type: str = "I", + res_code: str = "", + res_desc: str = "", +): if operation in config.lamp_info["api_list"].split(","): lamp_form = {} now = datetime.now() - lamp_form["timestamp"] = now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + lamp_form["timestamp"] = now.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] lamp_form["service"] = config.lamp_info["service_code"] lamp_form["operation"] = f'{config.lamp_info["prefix"]}_{operation}' lamp_form["transactionId"] = transaction_id diff --git a/API-ROUTER/RouterUtils/RouteUtil.py b/API-ROUTER/RouterUtils/RouteUtil.py index fc4ff3b2..bfa3f73a 100644 --- a/API-ROUTER/RouterUtils/RouteUtil.py +++ b/API-ROUTER/RouterUtils/RouteUtil.py @@ -4,7 +4,8 @@ from fastapi.responses import JSONResponse from urllib.parse import ParseResult from ApiRoute.ApiRouteConfig import config -#from RouterUtils.CommonUtil import get_exception_info, kt_lamp + +# from RouterUtils.CommonUtil import get_exception_info, kt_lamp from typing import Dict @@ -16,7 +17,13 @@ def make_url(server_name: str, url_path: str): else: netloc = server_info["domn_nm"] url = ParseResult( - scheme="http", netloc=netloc, path=url_path, params="", query="", fragment="") + scheme="http", + netloc=netloc, + path=url_path, + params="", + query="", + fragment="", + ) logger.info(f"Message Passing Url : {url.geturl()}") return url.geturl() return None @@ -27,7 +34,12 @@ def make_route_response(result, api_name, access_token): add_cookie_api_list = config.secret_info["add_cookie_api"].split(",") if api_name in add_cookie_api_list: response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True) + key=config.secret_info["cookie_name"], + value=access_token, + max_age=3600, + secure=False, + httponly=True, + ) return response @@ -64,16 +76,14 @@ async def bypass_msg(api_info, params_query, body, headers): params[parser_param[0]] = parser_param[1] async with session.get(url, params=params, headers=headers) as response: - access_token = response.cookies.get( - config.secret_info["cookie_name"]) + access_token = response.cookies.get(config.secret_info["cookie_name"]) result = await response.json() elif method == "POST": async with session.post(url, json=body, headers=headers) as response: - access_token = response.cookies.get( - config.secret_info["cookie_name"]) + access_token = response.cookies.get(config.secret_info["cookie_name"]) result = await response.json() else: - logger.error(f'Method Not Allowed. {method}') + logger.error(f"Method Not Allowed. {method}") result = {"result": 0, "errorMessage": "Method Not Allowed."} # lamp 5 @@ -82,11 +92,16 @@ async def bypass_msg(api_info, params_query, body, headers): async def run_cmd(cmd: str): - async with asyncssh.connect(host=config.remote_info["host"], port=int(config.remote_info["port"]), - username=config.remote_info["id"], password=config.remote_info["password"], known_hosts=None) as conn: - logger.info(f'Run Cmd : {cmd}') + async with asyncssh.connect( + host=config.remote_info["host"], + port=int(config.remote_info["port"]), + username=config.remote_info["id"], + password=config.remote_info["password"], + known_hosts=None, + ) as conn: + logger.info(f"Run Cmd : {cmd}") result = await conn.run(cmd, check=True) - logger.info(f'Command Result : {result.stdout}') + logger.info(f"Command Result : {result.stdout}") return result.stdout @@ -101,8 +116,7 @@ async def call_remote_func(api_info, api_params, input_params) -> Dict: data = api_param["deflt_val"] command_input += f' --{api_param["nm"]} {data}' except KeyError: - logger.error( - f'parameter set default value. [{api_param["nm"]}]') + logger.error(f'parameter set default value. [{api_param["nm"]}]') command_input += f' --{api_param["nm"]} {api_param["deflt_val"]}' cmd = f'{api_info["cmd"]} {command_input}' diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index b3576ae2..d3bf1133 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -12,8 +12,8 @@ app = FastAPI() app.include_router(api_router.router) -if __name__ == '__main__': - log_dir = f'{config.root_path}/log' +if __name__ == "__main__": + log_dir = f"{config.root_path}/log" if os.path.isdir(log_dir): print(f"Directory Exists") else: @@ -21,6 +21,10 @@ os.makedirs(log_dir) set_log_path() - uvicorn.run("server:app", host=config.server_host, port=config.server_port, - reload=True, log_config=f'{config.root_path}/conf/logging.conf') - \ No newline at end of file + uvicorn.run( + "server:app", + host=config.server_host, + port=config.server_port, + reload=True, + log_config=f"{config.root_path}/conf/logging.conf", + ) diff --git a/API-ROUTER/setup.py b/API-ROUTER/setup.py index c5a88685..413981ed 100644 --- a/API-ROUTER/setup.py +++ b/API-ROUTER/setup.py @@ -1,10 +1,10 @@ from setuptools import setup, find_packages setup( - name='mobigen_router', - version='0.5', - author='mobigen', - author_email='cbccbs@mobigen.co.kr', - python_requires='>=3.6', - packages=find_packages(exclude=['docs', 'tests*', '__pycache__/']), + name="mobigen_router", + version="0.5", + author="mobigen", + author_email="cbccbs@mobigen.co.kr", + python_requires=">=3.6", + packages=find_packages(exclude=["docs", "tests*", "__pycache__/"]), ) diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index 42d06c81..a90816dd 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -11,12 +11,15 @@ def __init__(self) -> None: def set_route(self) -> None: for api_name, api_info in config.api_config.items(): - if config.category == api_info["sub_dir"]: + if config.category in api_info["sub_dir"]: module_name = f'ServiceApiList.{api_info["sub_dir"]}.{api_name}' + logger.info(module_name) spec = importlib.util.find_spec(module_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) - self.router.add_api_route(f'{api_info["url"]}', - module.api, methods=[ - api_info["method"]], - tags=[f'service [ {api_info["sub_dir"]} ]']) + self.router.add_api_route( + f'{api_info["url"]}', + module.api, + methods=[api_info["method"]], + tags=[f'service [ {api_info["sub_dir"]} ]'], + ) diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index a5b6bb6a..9bfcdd56 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -20,6 +20,7 @@ class ApiServiceConfig: secret_info: Dict user_info: Dict lamp_info: Dict + ldap_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-SERVICE/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py index 18060e21..4cc8ba7e 100644 --- a/API-SERVICE/ELKSearch/Manager/manager.py +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -5,12 +5,12 @@ class ElasticSearchManager: def __init__( - self, - host: str = "10.217.59.133", - port: str = "9200", - page: int = 1, - size: int = 10, - index: str = "biz_meta", + self, + host: str = "10.217.59.133", + port: str = "9200", + page: int = 1, + size: int = 10, + index: str = "biz_meta", ): """ set elasticsearch connect && DSL query setting function @@ -42,13 +42,18 @@ def set_default_option(self) -> Dict[Any, Any]: def set_sort(self, sort: list) -> None: self.body["sort"] = sort - def set_pagination(self,size: int, from_: int) -> None: + def set_pagination(self, size: int, from_: int) -> None: self.size = size self.cur_from = size * from_ def search(self, source=...): - return self.conn.search(index=self.index, body=self.body, from_=self.cur_from, - size=self.size,_source=source) + return self.conn.search( + index=self.index, + body=self.body, + from_=self.cur_from, + size=self.size, + _source=source, + ) def insert(self, body: dict, doc_id: str) -> None: return self.conn.index(index=self.index, body=body, id=doc_id) @@ -65,8 +70,10 @@ def delete(self, field: str, data: Union[str, list]): """ delete_data = {field: data} delete_command = make_query("query", "term", delete_data) - return self.conn.delete_by_query(index=self.index,body=delete_command) + return self.conn.delete_by_query(index=self.index, body=delete_command) def prefix(self, keyword: dict, source=...): - prefix_query = make_query("query","prefix", keyword) - return self.conn.search(index=self.index, body=prefix_query, size=self.size, _source=source) + prefix_query = make_query("query", "prefix", keyword) + return self.conn.search( + index=self.index, body=prefix_query, size=self.size, _source=source + ) diff --git a/API-SERVICE/ELKSearch/Utils/database_utils.py b/API-SERVICE/ELKSearch/Utils/database_utils.py index 7937671c..e08d7411 100644 --- a/API-SERVICE/ELKSearch/Utils/database_utils.py +++ b/API-SERVICE/ELKSearch/Utils/database_utils.py @@ -23,12 +23,12 @@ class ElsSearchConfig: config = ElsSearchConfig -def get_config(root_path,config_name: str): +def get_config(root_path, config_name: str): ano_cfg = {} conf = configparser.ConfigParser() - config_path = root_path+f"/ELKSearch/conf/{config_name}" - conf.read(config_path, encoding='utf-8') + config_path = root_path + f"/ELKSearch/conf/{config_name}" + conf.read(config_path, encoding="utf-8") for section in conf.sections(): ano_cfg[section] = {} for option in conf.options(section): @@ -51,26 +51,31 @@ def prepare_config(root_path) -> None: config.root_path = root_path config.category = args.category - db_config = get_config(root_path,"db_config.ini") - els_config = get_config(root_path,"config.ini") + db_config = get_config(root_path, "db_config.ini") + els_config = get_config(root_path, "config.ini") config.els_type = args.category config.els_info = els_config[args.category] config.es = ElasticSearchManager(**config.els_info) config.check = args.check - config.db_type = f'{args.db_type}_db' + config.db_type = f"{args.db_type}_db" config.db_info = db_config[config.db_type] config.conn_pool = make_connection_pool(config.db_info) def make_connection_pool(db_info): - conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], - password=db_info["password"], - host=db_info["host"], - port=db_info["port"], - database=db_info["database"], - options=f'-c search_path={db_info["schema"]}', connect_timeout=10) + conn_pool = pool.SimpleConnectionPool( + 1, + 20, + user=db_info["user"], + password=db_info["password"], + host=db_info["host"], + port=db_info["port"], + database=db_info["database"], + options=f'-c search_path={db_info["schema"]}', + connect_timeout=10, + ) return conn_pool diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index 724ebc0d..e7035597 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -27,19 +27,16 @@ def base_search_query(action: str, sub_action: str, item_list: list) -> Dict: detail = { "fields": item.field, "operator": item.operator, - "type": "phrase_prefix" + "type": "phrase_prefix", } - query = make_query(key,action,words) + query = make_query(key, action, words) query[key].update(detail) else: key = "match" - detail = { - action: words, - "operator": item.operator - } + detail = {action: words, "operator": item.operator} query = make_query(key, item.field[0], detail) # query 추가 item_dict[sub_action].append(query) else: continue - return item_dict \ No newline at end of file + return item_dict diff --git a/API-SERVICE/ServiceApiList/common/__init__.py b/API-SERVICE/ServiceApiList/common/__init__.py index bf95bd29..b6e690fd 100644 --- a/API-SERVICE/ServiceApiList/common/__init__.py +++ b/API-SERVICE/ServiceApiList/common/__init__.py @@ -1,2 +1 @@ from . import * - diff --git a/API-SERVICE/ServiceApiList/common/commonExecute.py b/API-SERVICE/ServiceApiList/common/commonExecute.py index 1addf5cc..c6109ced 100644 --- a/API-SERVICE/ServiceApiList/common/commonExecute.py +++ b/API-SERVICE/ServiceApiList/common/commonExecute.py @@ -13,15 +13,16 @@ class commonExecute(BaseModel): def make_insert_query(excute: commonExecute): columns = ", ".join(excute.data.keys()) values = ", ".join(map(convert_data, excute.data.values())) - return f'INSERT INTO {excute.table_nm} ({columns}) VALUES ({values});' + return f"INSERT INTO {excute.table_nm} ({columns}) VALUES ({values});" def make_update_query(excute: commonExecute): where = [] update_data = [ - f'{key} = {convert_data(value)}' for key, value in excute.data.items()] + f"{key} = {convert_data(value)}" for key, value in excute.data.items() + ] for key in excute.key: - where.append(f'{key} = {convert_data(excute.data.get(key))}') + where.append(f"{key} = {convert_data(excute.data.get(key))}") return f'UPDATE {excute.table_nm} SET {",".join(update_data)}\ WHERE {" AND ".join(where)};' @@ -29,7 +30,7 @@ def make_update_query(excute: commonExecute): def make_delete_query(excute: commonExecute): where = [] for key in excute.key: - where.append(f'{key} = {convert_data(excute.data.get(key))}') + where.append(f"{key} = {convert_data(excute.data.get(key))}") return f'DELETE FROM {excute.table_nm} WHERE {" AND ".join(where)};' @@ -54,7 +55,7 @@ def api(excute_list: List[commonExecute]) -> Dict: query_list.append(make_execute_query(excute)) db = connect_db() - time_zone = 'Asia/Seoul' + time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") db.multiple_excute(query_list) except Exception: diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index e085a907..3dd9fcda 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -110,7 +110,9 @@ def make_select_query(select_info: commonSelect): if page_info: page = f"LIMIT {page_info.per_page} OFFSET ({page_info.per_page} * {page_info.cur_page - 1})" - select_query = f"SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};" + select_query = ( + f"SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};" + ) count_query = f"SELECT count(*) FROM {select_info.table_nm} {join} {where};" return select_query, count_query diff --git a/API-SERVICE/ServiceApiList/common/commonToken.py b/API-SERVICE/ServiceApiList/common/commonToken.py index fb5449f8..39d346e7 100644 --- a/API-SERVICE/ServiceApiList/common/commonToken.py +++ b/API-SERVICE/ServiceApiList/common/commonToken.py @@ -9,9 +9,6 @@ from starlette.requests import Request - - - def api(request: Request) -> Dict: access_token = "" try: @@ -33,6 +30,10 @@ def api(request: Request) -> Dict: response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True + key=config.secret_info["cookie_name"], + value=access_token, + max_age=3600, + secure=False, + httponly=True, ) return response diff --git a/API-SERVICE/ServiceApiList/common/ldap/__init__.py b/API-SERVICE/ServiceApiList/common/ldap/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ServiceApiList/common/ldap/login.py b/API-SERVICE/ServiceApiList/common/ldap/login.py new file mode 100644 index 00000000..d9b143e9 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/ldap/login.py @@ -0,0 +1,125 @@ +from datetime import datetime, timedelta +from operator import eq +from pydantic import Field, BaseModel +from fastapi.requests import Request +from fastapi.responses import JSONResponse +from typing import Dict, Optional + +from ServiceApiList.common.ldap.utils import run_cmd +from ApiService.ApiServiceConfig import config +from ServiceUtils.CommonUtil import ( + kt_lamp, + get_exception_info, + connect_db, + convert_data, + create_token, + make_token_data, +) +from ServiceUtils.crypto import AESCipher + + +class User(BaseModel): + emp_id: str = Field(min_length=8, max_length=8, description="emp_id") + password: str = Field(default=None, description="password") + + +class UserBas(User): + user_id: str + cmpno: str + user_nm: str + email: str + dept_nm: str + innt_aut_group_cd: Optional[str] = "ROLE_USER" + sttus: Optional[str] = "SBSC" + user_type: str + + class Config: + fields = {"password": {"exclude": True}} + + +class TmpAuthUserBas(UserBas): + tmp_aut_group_cd: Optional[str] = None + tmp_aut_alc_user: Optional[str] = None + tmp_aut_alc_date: Optional[datetime] = None + tmp_aut_exp_date: Optional[datetime] = None + + +def make_insert_query(user: Dict): + user["reg_user"] = user["user_id"] + user["reg_date"] = "NOW()" + columns = ", ".join(user.keys()) + values = ", ".join(map(convert_data, user.values())) + return f"INSERT INTO user_bas ({columns}) VALUES ({values});" + + +def knime_encrypt(data: str, key: str): + return AESCipher(key).encrypt(data).decode() + + +# login +async def api(user: User, request: Request): + transaction_id = request.headers.get("transactionId") + kt_lamp("OUT_REQ", transaction_id, "userLogin") + + try: + output = await run_cmd( + config.ldap_info["host"], + int(config.ldap_info["port"]), + config.ldap_info["user"], + config.ldap_info["password"], + f"{user.emp_id}/{user.password}", + ) + output = output.split(" ", 1) + + # 인증 실패 + if output[0] == "false": + return JSONResponse(content={"result": 0, "errorMessage": output[1]}) + + # 인증 성공(but user_bas에 없다면 생성) + db = connect_db() + user_info, _ = db.select(f"SELECT * FROM user_bas WHERE emp_id = {convert_data(user.emp_id)};") + if not user_info: + time_zone = "Asia/Seoul" + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + login_query = make_insert_query() + db.execute(login_query) + user_info = user.dict() + else: + user_info = user_info[0] + + token_data = make_token_data(TmpAuthUserBas(**user_info).dict()) + access_token = create_token( + data=token_data, + expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), + secret_key=config.secret_info["secret_key"], + algorithm=config.secret_info["algorithm"], + ) + + knime_token = knime_encrypt( + user.emp_id + "|^|" + user.password, + config.secret_info["secret_key"], + ) + + print(AESCipher(config.secret_info["secret_key"]).decrypt(knime_token).decode()) + + response = JSONResponse(content={"result": 1, "errorMessage": ""}) + response.set_cookie( + key=config.secret_info["cookie_name"], + value=access_token, + max_age=3600, + secure=False, + httponly=True, + ) + response.set_cookie( + key=config.secret_info["knime_cookie_name"], + value=knime_token, + max_age=3600, + secure=False, + httponly=True, + ) + except Exception: + except_name = get_exception_info() + response = JSONResponse(content={"result": 0, "errorMessage": except_name}) + + kt_lamp("OUT_RES", transaction_id, "userLogin", res_desc=f"{user.emp_id}") + return response diff --git a/API-SERVICE/ServiceApiList/common/ldap/utils.py b/API-SERVICE/ServiceApiList/common/ldap/utils.py new file mode 100644 index 00000000..729de452 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/ldap/utils.py @@ -0,0 +1,20 @@ +from fastapi.logger import logger +import asyncssh + + +async def run_cmd(host: str, port: int, username: str, password: str, cmd: str) -> str: + # async with asyncssh.connect(host=host, port=port, + # username=username, password=password, known_hosts=None) as conn: + # logger.info(f'Run Cmd : {cmd}') + # result = await conn.run(cmd, check=True) + # logger.info(f'Command Result : {result.stdout}') + # return result.stdout + import random + + logger.info("remote call :: " + cmd) + return random.choice( + [ + "true", + "false [SYS_FAIL] AuthenticationException: [comment: 인증에 실패했습니다., data 0005", + ] + ) diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 1f686b1b..88f13294 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -4,7 +4,14 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import datetime, timedelta -from ServiceUtils.CommonUtil import get_exception_info, connect_db, convert_data, create_token, make_token_data, kt_lamp +from ServiceUtils.CommonUtil import ( + get_exception_info, + connect_db, + convert_data, + create_token, + make_token_data, + kt_lamp, +) from ApiService.ApiServiceConfig import config from ServiceUtils.crypto import AESCipher @@ -67,7 +74,9 @@ def api(login: userLogin, request: Request) -> Dict: try: db = connect_db() - user_info, _ = db.select(f"SELECT * FROM user_bas WHERE emp_id = {convert_data(login.emp_id)};") + user_info, _ = db.select( + f"SELECT * FROM user_bas WHERE emp_id = {convert_data(login.emp_id)};" + ) if not user_info: time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") @@ -90,16 +99,27 @@ def api(login: userLogin, request: Request) -> Dict: algorithm=config.secret_info["algorithm"], ) - knime_token = knime_encrypt(login.user_id + "|^|" + login.password, config.secret_info["knime_secret_key"]) + knime_token = knime_encrypt( + login.user_id + "|^|" + login.password, + config.secret_info["knime_secret_key"], + ) result = {"result": 1, "errorMessage": ""} response = JSONResponse(content=result) response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token, max_age=3600, secure=False, httponly=True + key=config.secret_info["cookie_name"], + value=access_token, + max_age=3600, + secure=False, + httponly=True, ) response.set_cookie( - key=config.secret_info["knime_cookie_name"], value=knime_token, max_age=3600, secure=False, httponly=True + key=config.secret_info["knime_cookie_name"], + value=knime_token, + max_age=3600, + secure=False, + httponly=True, ) kt_lamp("OUT_RES", transaction_id, "userLogin", res_desc=f"{login.emp_id}") diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index ee3f918a..d4a40b48 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -8,15 +8,16 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str="") -> Dict: +def api(input: InputModel, u_id: str = "") -> Dict: index = "kt_biz_asset" - els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 data_dict = dict() try: - es = ElasticSearchManager(page=from_, size=input.size, - index=index, **els_config) + es = ElasticSearchManager( + page=from_, size=input.size, index=index, **els_config + ) es.set_sort(input.sortOption) action = "query" @@ -30,14 +31,16 @@ def api(input: InputModel,u_id: str="") -> Dict: col = field tmp.append(col) item.field = tmp - query_dict = base_search_query(action,sub_action,input.searchOption) + query_dict = base_search_query(action, sub_action, input.searchOption) sub_action = "filter" - item_dict = base_search_query(action,sub_action,input.filterOption) + item_dict = base_search_query(action, sub_action, input.filterOption) query_dict.update(item_dict) - search_query = make_query(action,"bool", query_dict) + search_query = make_query(action, "bool", query_dict) es.body.update(search_query) - data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) + data_type = make_query( + "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "N"} + ) es.body["query"]["bool"]["filter"].append(data_type) sort_list = [{item.field: item.order} for item in input.sortOption] diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index 9d583915..7d48c8b8 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -8,15 +8,16 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str="") -> Dict: +def api(input: InputModel, u_id: str = "") -> Dict: index = "kt_biz_asset" - els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 data_dict = dict() try: - es = ElasticSearchManager(page=from_, size=input.size, - index=index, **els_config) + es = ElasticSearchManager( + page=from_, size=input.size, index=index, **els_config + ) es.set_sort(input.sortOption) action = "query" @@ -30,12 +31,12 @@ def api(input: InputModel,u_id: str="") -> Dict: col = field tmp.append(col) item.field = tmp - query_dict = base_search_query(action,sub_action,input.searchOption) + query_dict = base_search_query(action, sub_action, input.searchOption) sub_action = "filter" - item_dict = base_search_query(action,sub_action,input.filterOption) + item_dict = base_search_query(action, sub_action, input.filterOption) query_dict.update(item_dict) - search_query = make_query(action,"bool", query_dict) + search_query = make_query(action, "bool", query_dict) es.body.update(search_query) sort_list = [{item.field: item.order} for item in input.sortOption] @@ -48,7 +49,9 @@ def api(input: InputModel,u_id: str="") -> Dict: data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # assets index count n - data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) + data_type = make_query( + "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "N"} + ) body["query"]["bool"]["filter"].append(data_type) data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index cf871efc..95f7d56e 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -8,15 +8,16 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str="") -> Dict: +def api(input: InputModel, u_id: str = "") -> Dict: index = "kt_biz_data" - els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 data_dict = dict() try: - es = ElasticSearchManager(page=from_, size=input.size, - index=index, **els_config) + es = ElasticSearchManager( + page=from_, size=input.size, index=index, **els_config + ) es.set_sort(input.sortOption) action = "query" @@ -30,12 +31,12 @@ def api(input: InputModel,u_id: str="") -> Dict: col = field tmp.append(col) item.field = tmp - query_dict = base_search_query(action,sub_action,input.searchOption) + query_dict = base_search_query(action, sub_action, input.searchOption) sub_action = "filter" - item_dict = base_search_query(action,sub_action,input.filterOption) + item_dict = base_search_query(action, sub_action, input.filterOption) query_dict.update(item_dict) - search_query = make_query(action,"bool", query_dict) + search_query = make_query(action, "bool", query_dict) es.body.update(search_query) sort_list = [{item.field: item.order} for item in input.sortOption] @@ -47,7 +48,9 @@ def api(input: InputModel,u_id: str="") -> Dict: data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # assets index count n - data_type = make_query("match","conts_dataset_reg_yn",{'operator': 'OR', 'query': "N"}) + data_type = make_query( + "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "N"} + ) body["query"]["bool"]["filter"].append(data_type) data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] diff --git a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py index 9ff075fe..a18d488c 100644 --- a/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ServiceApiList/meta/getElsBizMetaList.py @@ -8,7 +8,7 @@ def api(input: InputModel) -> Dict: - els_config = get_config(config.root_path,"config.ini")["kt"] + els_config = get_config(config.root_path, "config.ini")["kt"] data_dict = dict() from_ = input.from_ - 1 data_type = { @@ -16,7 +16,7 @@ def api(input: InputModel) -> Dict: "C": "contentsCount", "A": "assetsCount", "M": "metaCount", - "T": "totalCount" + "T": "totalCount", } try: es = ElasticSearchManager(page=from_, size=input.size, **els_config) @@ -27,12 +27,12 @@ def api(input: InputModel) -> Dict: for item in input.searchOption: if item.field in ["data_nm", "data_desc"]: item.field = item.field + ".korean_analyzer" - query_dict = base_search_query(action,sub_action,input.searchOption) + query_dict = base_search_query(action, sub_action, input.searchOption) sub_action = "filter" - item_dict = base_search_query(action,sub_action,input.filterOption) + item_dict = base_search_query(action, sub_action, input.filterOption) query_dict.update(item_dict) - search_query = make_query(action,"bool", query_dict) + search_query = make_query(action, "bool", query_dict) es.body.update(search_query) sort_list = [{item.field: item.order} for item in input.sortOption] @@ -40,7 +40,7 @@ def api(input: InputModel) -> Dict: search_data = es.search(input.resultField) i = None - for j,item in enumerate(item_dict["filter"]): + for j, item in enumerate(item_dict["filter"]): if "data_type" in item["match"].keys(): i = j break @@ -49,7 +49,9 @@ def api(input: InputModel) -> Dict: for key_nm, eng_nm in data_type.items(): if i is None: - cnt_query = make_query("match","data_type",{'operator': 'OR', 'query': key_nm}) + cnt_query = make_query( + "match", "data_type", {"operator": "OR", "query": key_nm} + ) item_dict["filter"].append(cnt_query) i = -1 else: @@ -59,8 +61,8 @@ def api(input: InputModel) -> Dict: del item_dict["filter"][i] query_dict.update(item_dict) - cnt_query = make_query("query","bool",query_dict) - cnt = es.conn.count(index=es.index,body=cnt_query)["count"] + cnt_query = make_query("query", "bool", query_dict) + cnt = es.conn.count(index=es.index, body=cnt_query)["count"] data_dict[eng_nm] = cnt except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py index 02a29410..cb6d518a 100644 --- a/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ServiceApiList/meta/getPrefixBizMeta.py @@ -13,19 +13,21 @@ def api(size: int, keyword: str) -> Dict: :return: """ index = ["kt_biz_data", "kt_biz_asset"] - els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] field = "data_nm" query = {field: keyword} try: - es = ElasticSearchManager(index=index,**els_config) + es = ElasticSearchManager(index=index, **els_config) es.size = size - prefix_data = es.prefix(query,[field]) + prefix_data = es.prefix(query, [field]) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - prefix_data = [data["_source"]["data_nm"] for data in prefix_data["hits"]["hits"]] + prefix_data = [ + data["_source"]["data_nm"] for data in prefix_data["hits"]["hits"] + ] result = {"result": 1, "errorMessage": "", "data": prefix_data} return result diff --git a/API-SERVICE/ServiceConnectManager/PostgresManager.py b/API-SERVICE/ServiceConnectManager/PostgresManager.py index aa5a92a9..38e1d593 100644 --- a/API-SERVICE/ServiceConnectManager/PostgresManager.py +++ b/API-SERVICE/ServiceConnectManager/PostgresManager.py @@ -18,13 +18,12 @@ def connect(self): def execute(self, sql: str) -> None: self.cursor.execute(sql) self.conn.commit() - logger.info(f'PostgresManager Execute Result. ({sql})') + logger.info(f"PostgresManager Execute Result. ({sql})") def multiple_excute(self, sql_list: list) -> None: try: for index, sql in enumerate(sql_list): - logger.info( - f'PostgresManager Multiple Execute. ({index}. {sql})') + logger.info(f"PostgresManager Multiple Execute. ({index}. {sql})") self.cursor.execute(sql) self.conn.commit() except (Exception, psycopg2.DatabaseError): @@ -38,7 +37,7 @@ def select(self, sql: str, count: int = None) -> Tuple[List[Dict[Any, Any]], Lis rows = self.cursor.fetchall() else: rows = self.cursor.fetchmany(count) - #logger.info(f'PostgresManager Select Execute. ({sql})') + # logger.info(f'PostgresManager Select Execute. ({sql})') result = [] for row in rows: diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 87b22c93..0fd537d0 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -27,10 +27,10 @@ def get_token_from_cookie(request: Request): def jwt_decode(token): return jwt.decode( - token=token, - key=config.secret_info["secret_key"], - algorithms=config.secret_info["algorithm"], - ) + token=token, + key=config.secret_info["secret_key"], + algorithms=config.secret_info["algorithm"], + ) def get_user_info(payload): @@ -55,9 +55,7 @@ def convert_data(data) -> str: def set_log_path(): parser = configparser.ConfigParser() - parser.read( - f"{config.root_path}/conf/{config.category}/logging.conf", encoding="utf-8" - ) + parser.read(f"{config.root_path}/conf/{config.category}/logging.conf", encoding="utf-8") parser.set( "handler_rotatingFileHandler", @@ -108,6 +106,7 @@ def prepare_config(root_path) -> None: if config.category == "common": config.secret_info = api_router_cfg["secret_info"] config.user_info = api_router_cfg["user_info"] + config.ldap_info = api_router_cfg["ldap_info"] def make_connection_pool(db_info): @@ -189,15 +188,15 @@ class IncorrectPassword(Exception): def get_user(user_name: str, user_type: str = None): db = connect_db() - query = f'SELECT * FROM {config.user_info["table"]} WHERE {config.user_info["id_column"]} = {convert_data(user_name)}' + query = ( + f'SELECT * FROM {config.user_info["table"]} WHERE {config.user_info["id_column"]} = {convert_data(user_name)}' + ) query += f" and user_type = '{user_type}'" if user_type else "" user = db.select(query) return user -def create_token( - data: dict, secret_key, algorithm, expires_delta: Optional[timedelta] = None -): +def create_token(data: dict, secret_key, algorithm, expires_delta: Optional[timedelta] = None): to_encode = data.copy() if expires_delta: expire = datetime.now(timezone("Asia/Seoul")) + expires_delta diff --git a/API-SERVICE/ServiceUtils/exceptions.py b/API-SERVICE/ServiceUtils/exceptions.py index 3e5cd97d..98fb70e5 100644 --- a/API-SERVICE/ServiceUtils/exceptions.py +++ b/API-SERVICE/ServiceUtils/exceptions.py @@ -3,4 +3,4 @@ class InvalidUserInfo(Exception): class TokenDoesNotExist(Exception): - pass \ No newline at end of file + pass diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index b314e2c4..7a545196 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -27,3 +27,10 @@ sub_dir = common method = GET url = /portal/api/common/user/commonUserInfo sub_dir = common + +[login] +method = POST +url = /portal/api/common/login +sub_dir = common.ldap + + diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 505441b6..6f841e4e 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -33,4 +33,10 @@ prefix = service host_name = portal host_ip = 192.168.100.126 dest_name = portal -dest_ip = 192.168.100.126 \ No newline at end of file +dest_ip = 192.168.100.126 + +[ldap_info] +host = ... +port = 22 +user = ... +password = ... diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 90e83a8e..8c4c5f00 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -16,16 +16,20 @@ def main(): db_query = f"SELECT * FROM vw_{config.els_type}_biz_meta_bas " if config.check == "True": today = datetime.today().date() - condition = f"WHERE DATE(amd_date) > DATE('{today}')" \ - f"OR DATE(reg_date) >= DATE('{today}')" + condition = ( + f"WHERE DATE(amd_date) > DATE('{today}')" + f"OR DATE(reg_date) >= DATE('{today}')" + ) db_query = db_query + condition - meta_wrap_list = select(db,db_query)[0] + meta_wrap_list = select(db, db_query)[0] try: for meta_wrap in meta_wrap_list: els_dict = dict() - meta_wrap["upd_pam_date"] = datetime.strptime(meta_wrap["upd_pam_date"], '%Y-%m-%d').date() + meta_wrap["upd_pam_date"] = datetime.strptime( + meta_wrap["upd_pam_date"], "%Y-%m-%d" + ).date() els_dict["_id"] = meta_wrap["biz_dataset_id"] els_dict["_source"] = meta_wrap els_dict["_source"]["biz_dataset_id"] = meta_wrap["biz_dataset_id"] diff --git a/API-SERVICE/requirements.txt b/API-SERVICE/requirements.txt deleted file mode 100644 index c845ddd3..00000000 --- a/API-SERVICE/requirements.txt +++ /dev/null @@ -1,35 +0,0 @@ -aiohttp==3.8.3 -aiosignal==1.2.0 -anyio==3.6.2 -asgiref==3.5.2 -async-timeout==4.0.2 -asyncssh==2.12.0 -attrs==22.1.0 -certifi==2022.9.24 -cffi==1.15.1 -charset-normalizer==2.1.1 -click==8.1.3 -cryptography==38.0.3 -ecdsa==0.18.0 -elasticsearch==7.17.6 -fastapi==0.83.0 -frozenlist==1.3.1 -h11==0.14.0 -idna==3.4 -multidict==6.0.2 -psycopg2-binary==2.9.3 -pyasn1==0.4.8 -pycparser==2.21 -pycryptodome==3.15.0 -pydantic==1.10.2 -PyJWT==2.6.0 -python-jose==3.3.0 -pytz==2022.6 -rsa==4.9 -six==1.16.0 -sniffio==1.3.0 -starlette==0.19.1 -typing_extensions==4.4.0 -urllib3==1.26.12 -uvicorn==0.16.0 -yarl==1.8.1 diff --git a/API-SERVICE/send_email.py b/API-SERVICE/send_email.py index e35a9d57..5d5df066 100644 --- a/API-SERVICE/send_email.py +++ b/API-SERVICE/send_email.py @@ -1,7 +1,13 @@ import os import smtplib from pathlib import Path -from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, execute, config +from ELKSearch.Utils.database_utils import ( + prepare_config, + connect_db, + select, + execute, + config, +) root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) prepare_config(root_path) @@ -19,7 +25,7 @@ def main(): port = config.els_info["port"] query = "SELECT * FROM email_dsp_hst WHERE sttus = 'REQ'" db = connect_db() - send_list = select(db,query)[0] + send_list = select(db, query)[0] for email_info in send_list: try: @@ -30,15 +36,17 @@ def main(): f"{email_info['sbst']}\n" ) with smtplib.SMTP(host, port) as smtp: - smtp.sendmail(from_addr,email_info['rcv_adr'],msg) + smtp.sendmail(from_addr, email_info["rcv_adr"], msg) except Exception as e: print(e) else: # update status - query = f"UPDATE email_dsp_hst SET sttus = 'SEND'"\ - f"WHERE email_id = '{email_info['email_id']}'" - execute(db,db.cursor(),query) + query = ( + f"UPDATE email_dsp_hst SET sttus = 'SEND'" + f"WHERE email_id = '{email_info['email_id']}'" + ) + execute(db, db.cursor(), query) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 17423c34..65a38862 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -12,8 +12,8 @@ app = FastAPI() app.include_router(api_router.router) -if __name__ == '__main__': - log_dir = f'{config.root_path}/log/{config.category}' +if __name__ == "__main__": + log_dir = f"{config.root_path}/log/{config.category}" if os.path.isdir(log_dir): print(f"Directory Exists") else: @@ -21,5 +21,10 @@ os.makedirs(log_dir) set_log_path() - uvicorn.run("server:app", host=config.server_host, port=config.server_port, - reload=True, log_config=f'{config.root_path}/conf/{config.category}/logging.conf') + uvicorn.run( + "server:app", + host=config.server_host, + port=config.server_port, + reload=True, + log_config=f"{config.root_path}/conf/{config.category}/logging.conf", + ) diff --git a/API-SERVICE/setup.py b/API-SERVICE/setup.py index 7c5f78d2..5f37cfa8 100644 --- a/API-SERVICE/setup.py +++ b/API-SERVICE/setup.py @@ -1,10 +1,10 @@ from setuptools import setup, find_packages setup( - name='mobigen_service', - version='0.5', - author='mobigen', - author_email='cbccbs@mobigen.co.kr', - python_requires='>=3.6', - packages=find_packages(exclude=['docs', 'tests*', '__pycache__/']), + name="mobigen_service", + version="0.5", + author="mobigen", + author_email="cbccbs@mobigen.co.kr", + python_requires=">=3.6", + packages=find_packages(exclude=["docs", "tests*", "__pycache__/"]), ) diff --git a/requirements.txt b/requirements.txt index 241e673c..680e041b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,8 @@ aiohttp==3.8.3 elasticsearch==7.17.6 mobigen-router - mobigen-service \ No newline at end of file + mobigen-service +pydantic~=1.10.2 +starlette~=0.19.1 +setuptools~=58.1.0 +pytz~=2022.6 \ No newline at end of file From 244d8f049d52b5aa183b260bba5e7ea0eeb08e6d Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Dec 2022 09:28:24 +0900 Subject: [PATCH 223/236] =?UTF-8?q?[AIPLATFORM-1205]=20feat:=20=EC=B5=9C?= =?UTF-8?q?=EA=B7=BC=20=EB=A7=8E=EC=9D=B4=20=EA=B2=80=EC=83=89=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=ED=82=A4=EC=9B=8C=EB=93=9C=20=EC=B6=94=EC=B6=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ranking_word.py | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 API-SERVICE/ranking_word.py diff --git a/API-SERVICE/ranking_word.py b/API-SERVICE/ranking_word.py new file mode 100644 index 00000000..13b483df --- /dev/null +++ b/API-SERVICE/ranking_word.py @@ -0,0 +1,64 @@ +import os +import re +import ast +from pathlib import Path +from datetime import datetime +from collections import Counter +from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, config, execute +root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) + + +# todo: 이재중 책임님께 ranking용 db table 추가 명세 작성후 요청 +def main(): + """ + param: + parameter는 els_update.py 에서 공통으로 사용 + - db_type: conf/config.ini or ELKSearch/conf/db_config.ini + - check: type str, False or True, True=누적,False=갱신 + + """ + prepare_config(root_path) + db = connect_db() + + # 검색어 로그 불러오기 + search_file_name = f"{root_path}/log/meta/{datetime.today().date().strftime('%Y%m%d')}_search.log" + with open(search_file_name,"r") as fp: + search_log_file = fp.read().split("\n")[:-1] + + # 필터링할 단어 리스트 불러오기 + fword_file_name = f"{root_path}/ELKSearch/conf/bad_word.txt" + with open(fword_file_name, "r") as fp: + bad_word_list = fp.read().split("\n") + + # 자모만 들어가 있는 오타 제외 + today_search_word = [] + for words in search_log_file: + result = [word for word in ast.literal_eval(words) if re.search("[ㄱ-ㅎㅏ-ㅣ]",word) is None] + today_search_word = today_search_word + result + + # 단어 필터링 + today_search_word = [word for word in today_search_word if word not in bad_word_list] + today_search_word = Counter(today_search_word) + + # check True : 누적 / False: 갱신 + if config.check == "True": + query = "SELECT * FROM tb_recommend_keyword" + recommend_word = select(db,query)[0] + + for word in recommend_word: + key = word["keyword"] + cnt = word["count"] + if key in today_search_word.keys(): + today_search_word[key] = today_search_word[key] + cnt + else: + today_search_word[key] = cnt + + for word, cnt in today_search_word.most_common(10): + query = "INSERT INTO tb_recommend_keyword(keyword,count,use_yn)" \ + f"VALUES ('{word}',{cnt}, 'N') ON CONFLICT (keyword) DO UPDATE " \ + f"SET count = {cnt};" + execute(db,db.cursor(),query) + + +if __name__ == "__main__": + main() \ No newline at end of file From d15c8cfeaff1c06db6ca013a560104d98dd6abb6 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Dec 2022 10:46:41 +0900 Subject: [PATCH 224/236] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=EB=B6=84=EB=A6=AC=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?input=20model=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/model.py | 1 + API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaContent.py | 2 +- API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index a0712f59..3517ccce 100644 --- a/API-SERVICE/ELKSearch/Utils/model.py +++ b/API-SERVICE/ELKSearch/Utils/model.py @@ -14,6 +14,7 @@ class SortOption(BaseModel): class InputModel(BaseModel): + u_id: str index: str = "biz_meta" from_: int = Field(1, alias="from") size: int = 10 diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index ee3f918a..d0d86b4a 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str="") -> Dict: +def api(input: InputModel) -> Dict: index = "kt_biz_asset" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index 9d583915..a192e6f1 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str="") -> Dict: +def api(input: InputModel) -> Dict: index = "kt_biz_asset" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index cf871efc..ee4c3296 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -8,7 +8,7 @@ from ApiService.ApiServiceConfig import config -def api(input: InputModel,u_id: str="") -> Dict: +def api(input: InputModel) -> Dict: index = "kt_biz_data" els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] from_ = input.from_ - 1 From 3543d8ace8c6d9c03177a70b33e9a8d4f276efdb Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Dec 2022 14:45:08 +0900 Subject: [PATCH 225/236] =?UTF-8?q?[AIPLATFORM-1205]feat:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20API=20=ED=98=B8=EC=B6=9C=EC=8B=9C=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=EC=96=B4=EB=A5=BC=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=ED=95=B4=EC=A3=BC=EB=8A=94=20=ED=95=AD?= =?UTF-8?q?=EB=AA=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/model.py | 1 + API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py | 6 ++++++ API-SERVICE/ServiceApiList/meta/getBizMetaContent.py | 6 ++++++ API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 6 ++++++ 4 files changed, 19 insertions(+) diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index 3517ccce..46f77852 100644 --- a/API-SERVICE/ELKSearch/Utils/model.py +++ b/API-SERVICE/ELKSearch/Utils/model.py @@ -14,6 +14,7 @@ class SortOption(BaseModel): class InputModel(BaseModel): + chk: bool = False u_id: str index: str = "biz_meta" from_: int = Field(1, alias="from") diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index d0d86b4a..0b9fed00 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -1,5 +1,6 @@ from copy import deepcopy from typing import Dict +from datetime import datetime from ELKSearch.Manager.manager import ElasticSearchManager from ELKSearch.Utils.model import InputModel from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query @@ -15,6 +16,11 @@ def api(input: InputModel) -> Dict: data_dict = dict() try: + if input.chk and len(input.searchOption): + with open(f"{config.root_path}/log/{config.category}/{datetime.today().strftime('%Y%m%d')}_search.log","a") as fp: + for search in input.searchOption: + fp.write(f"{str(search.keywords)}\n") + es = ElasticSearchManager(page=from_, size=input.size, index=index, **els_config) es.set_sort(input.sortOption) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index a192e6f1..df36f94c 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -1,5 +1,6 @@ from copy import deepcopy from typing import Dict +from datetime import datetime from ELKSearch.Manager.manager import ElasticSearchManager from ELKSearch.Utils.model import InputModel from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query @@ -15,6 +16,11 @@ def api(input: InputModel) -> Dict: data_dict = dict() try: + if input.chk and len(input.searchOption): + with open(f"{config.root_path}/log/{config.category}/{datetime.today().strftime('%Y%m%d')}_search.log","a") as fp: + for search in input.searchOption: + fp.write(f"{str(search.keywords)}\n") + es = ElasticSearchManager(page=from_, size=input.size, index=index, **els_config) es.set_sort(input.sortOption) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index ee4c3296..5eb6f21a 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -1,5 +1,6 @@ from copy import deepcopy from typing import Dict +from datetime import datetime from ELKSearch.Manager.manager import ElasticSearchManager from ELKSearch.Utils.model import InputModel from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query @@ -15,6 +16,11 @@ def api(input: InputModel) -> Dict: data_dict = dict() try: + if input.chk and len(input.searchOption): + with open(f"{config.root_path}/log/{config.category}/{datetime.today().strftime('%Y%m%d')}_search.log","a") as fp: + for search in input.searchOption: + fp.write(f"{str(search.keywords)}\n") + es = ElasticSearchManager(page=from_, size=input.size, index=index, **els_config) es.set_sort(input.sortOption) From 1aa278ea23a5f14e3c06f4d2d6b3bd8a6cbc10cd Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Dec 2022 15:13:35 +0900 Subject: [PATCH 226/236] =?UTF-8?q?[AIPLATFORM-1205]=20feat:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=EC=96=B4=20=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=ED=9B=84=20?= =?UTF-8?q?DB=EC=97=90=20insert=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ranking_word.py | 41 ++++++++++--------------------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/API-SERVICE/ranking_word.py b/API-SERVICE/ranking_word.py index 13b483df..f61cf4a6 100644 --- a/API-SERVICE/ranking_word.py +++ b/API-SERVICE/ranking_word.py @@ -17,47 +17,28 @@ def main(): - check: type str, False or True, True=누적,False=갱신 """ + today = datetime.today().date().strftime('%Y%m%d') prepare_config(root_path) db = connect_db() # 검색어 로그 불러오기 - search_file_name = f"{root_path}/log/meta/{datetime.today().date().strftime('%Y%m%d')}_search.log" + search_file_name = f"{root_path}/log/meta/{today}_search.log" with open(search_file_name,"r") as fp: search_log_file = fp.read().split("\n")[:-1] - # 필터링할 단어 리스트 불러오기 - fword_file_name = f"{root_path}/ELKSearch/conf/bad_word.txt" - with open(fword_file_name, "r") as fp: - bad_word_list = fp.read().split("\n") - - # 자모만 들어가 있는 오타 제외 today_search_word = [] for words in search_log_file: - result = [word for word in ast.literal_eval(words) if re.search("[ㄱ-ㅎㅏ-ㅣ]",word) is None] + result = [word for word in ast.literal_eval(words)] today_search_word = today_search_word + result - # 단어 필터링 - today_search_word = [word for word in today_search_word if word not in bad_word_list] - today_search_word = Counter(today_search_word) - - # check True : 누적 / False: 갱신 - if config.check == "True": - query = "SELECT * FROM tb_recommend_keyword" - recommend_word = select(db,query)[0] - - for word in recommend_word: - key = word["keyword"] - cnt = word["count"] - if key in today_search_word.keys(): - today_search_word[key] = today_search_word[key] + cnt - else: - today_search_word[key] = cnt - - for word, cnt in today_search_word.most_common(10): - query = "INSERT INTO tb_recommend_keyword(keyword,count,use_yn)" \ - f"VALUES ('{word}',{cnt}, 'N') ON CONFLICT (keyword) DO UPDATE " \ - f"SET count = {cnt};" - execute(db,db.cursor(),query) + query = "INSERT INTO srhwd_find_tmscnt_sum VALUES " + values = "" + if len(today_search_word): + for word, cnt in Counter(today_search_word).items(): + item = f"('{word}',{cnt},'{datetime.today().date()}')," + values = values + item + query = query + values[:-1] + execute(db,db.cursor(), query) if __name__ == "__main__": From 0bea65a56a7faf9ca597fa8629c5c1df48c6ac53 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Dec 2022 17:01:15 +0900 Subject: [PATCH 227/236] =?UTF-8?q?[AIPLATFORM-1208]=20feat:=20elasticsear?= =?UTF-8?q?ch=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=8C=8C=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/els_update.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 90e83a8e..56621aff 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -9,15 +9,24 @@ def main(): + today = datetime.today().date() bulk_meta_item = list() prepare_config(root_path) es = config.es db = connect_db() - db_query = f"SELECT * FROM vw_{config.els_type}_biz_meta_bas " - if config.check == "True": - today = datetime.today().date() + + if config.category == "data": + table_name = "vw_ifs_tbl_txn" + condition = f"WHERE DATE(tbl_first_cret_dt) > DATE('{today}')" \ + f"OR DATE(tbl_last_chg_dt) >= DATE('{today}')" + else: + table_name = "vw_assets_biz_meta_bas" condition = f"WHERE DATE(amd_date) > DATE('{today}')" \ f"OR DATE(reg_date) >= DATE('{today}')" + + db_query = f"SELECT * FROM {table_name} " + + if config.check == "True": db_query = db_query + condition meta_wrap_list = select(db,db_query)[0] @@ -25,7 +34,8 @@ def main(): try: for meta_wrap in meta_wrap_list: els_dict = dict() - meta_wrap["upd_pam_date"] = datetime.strptime(meta_wrap["upd_pam_date"], '%Y-%m-%d').date() + if config.category != "data": + meta_wrap["upd_pam_date"] = datetime.strptime(meta_wrap["upd_pam_date"], '%Y-%m-%d').date() els_dict["_id"] = meta_wrap["biz_dataset_id"] els_dict["_source"] = meta_wrap els_dict["_source"]["biz_dataset_id"] = meta_wrap["biz_dataset_id"] From 917405d4d5fe4bb724754a1b57dde0b3918ad0f5 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Thu, 1 Dec 2022 17:39:31 +0900 Subject: [PATCH 228/236] =?UTF-8?q?fix:=20common=20select=20=EC=9B=90?= =?UTF-8?q?=EB=B3=B5(user=5Fbas=20=EC=A0=91=EA=B7=BC=20=EA=B6=8C=ED=95=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/commonSelect.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index e085a907..5657a023 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -117,14 +117,6 @@ def make_select_query(select_info: commonSelect): def api(select_info: commonSelect, request: Request) -> Dict: - if select_info.table_nm == "user_bas": - token = utils.get_token_from_cookie(request) - payload = utils.jwt_decode(token) - user_type = payload["user_type"] - - if not user_type == "SITE_ADMIN": - return {"result": 0, "errorMessage": "not allowed user"} - get_column_info = f"SELECT eng_nm, kor_nm FROM tbl_item_coln_dtl \ WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {utils.convert_data(select_info.table_nm)});" get_query, total_cnt_query = make_select_query(select_info) From a66454bf98b389440f741f0134e5787fe9b0eef1 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 2 Dec 2022 13:31:03 +0900 Subject: [PATCH 229/236] =?UTF-8?q?feat:=20LADAP=20=EC=97=B0=EB=8F=99=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8&OTP=EB=B0=9C=EC=86=A1=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/common/commonSelect.py | 4 +- .../ServiceApiList/common/ldap/checkOTP.py | 52 ++++++++ .../ServiceApiList/common/ldap/createOTP.py | 44 +++++++ .../ServiceApiList/common/ldap/info.py | 17 +++ .../ServiceApiList/common/ldap/login.py | 116 ++---------------- .../ServiceApiList/common/ldap/otp_store.py | 44 +++++++ .../ServiceApiList/common/ldap/schemas.py | 54 ++++++++ .../ServiceApiList/common/ldap/utils.py | 96 +++++++++++++-- .../ServiceApiList/common/userLogin.py | 4 +- API-SERVICE/ServiceUtils/CommonUtil.py | 13 ++ API-SERVICE/conf/common/api_config.ini | 16 +++ API-SERVICE/server.py | 1 + 12 files changed, 344 insertions(+), 117 deletions(-) create mode 100644 API-SERVICE/ServiceApiList/common/ldap/checkOTP.py create mode 100644 API-SERVICE/ServiceApiList/common/ldap/createOTP.py create mode 100644 API-SERVICE/ServiceApiList/common/ldap/info.py create mode 100644 API-SERVICE/ServiceApiList/common/ldap/otp_store.py create mode 100644 API-SERVICE/ServiceApiList/common/ldap/schemas.py diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index 3dd9fcda..e085a907 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -110,9 +110,7 @@ def make_select_query(select_info: commonSelect): if page_info: page = f"LIMIT {page_info.per_page} OFFSET ({page_info.per_page} * {page_info.cur_page - 1})" - select_query = ( - f"SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};" - ) + select_query = f"SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};" count_query = f"SELECT count(*) FROM {select_info.table_nm} {join} {where};" return select_query, count_query diff --git a/API-SERVICE/ServiceApiList/common/ldap/checkOTP.py b/API-SERVICE/ServiceApiList/common/ldap/checkOTP.py new file mode 100644 index 00000000..72c80b80 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/ldap/checkOTP.py @@ -0,0 +1,52 @@ +from .otp_store import OTP +from fastapi.logger import logger +from fastapi.responses import JSONResponse +from datetime import timedelta + +from ServiceUtils.CommonUtil import ( + make_token_data, + create_token, + connect_db, + convert_data, +) +from ServiceUtils.exceptions import InvalidUserInfo +from ApiService.ApiServiceConfig import config +from .schemas import TmpAuthUserBas + + +class OTPMissMatch(Exception): + ... + + +def api(id: str, otp: int): + try: + is_ok = OTP.check_otp(id, otp) + if not is_ok: + raise OTPMissMatch(f"invalid OTP :: {otp}") + + db = connect_db() + user_info, _ = db.select(f"SELECT * FROM user_bas WHERE emp_id = {convert_data(id)};") + if not user_info: + raise InvalidUserInfo + user_info = user_info[0] + token_data = make_token_data(TmpAuthUserBas(**user_info).dict(by_alias=True)) + access_token = create_token( + data=token_data, + expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), + secret_key=config.secret_info["secret_key"], + algorithm=config.secret_info["algorithm"], + ) + + response = JSONResponse(content={"result": 1, "errorMessage": ""}) + response.set_cookie( + key=config.secret_info["cookie_name"], + value=access_token, + max_age=3600, + secure=False, + httponly=True, + ) + except Exception as e: + logger.error(e) + response = JSONResponse(content={"result": 0, "errorMessage": str(e)}) + + return response diff --git a/API-SERVICE/ServiceApiList/common/ldap/createOTP.py b/API-SERVICE/ServiceApiList/common/ldap/createOTP.py new file mode 100644 index 00000000..90313f5e --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/ldap/createOTP.py @@ -0,0 +1,44 @@ +from .otp_store import OTP +from .utils import ldap_info +from fastapi.responses import JSONResponse +from fastapi.requests import Request +from fastapi.logger import logger + +from ApiService.ApiServiceConfig import config +from ServiceUtils.CommonUtil import knime_decrpyt +from ServiceUtils.exceptions import TokenDoesNotExist, InvalidUserInfo + + +async def api(id: str, request: Request): + try: + if config.secret_info["knime_cookie_name"] in request.cookies: + token = request.cookies[config.secret_info["knime_cookie_name"]] + data = knime_decrpyt(token) + if id not in data: + raise InvalidUserInfo(f"user {id} not authenticate") + else: + raise TokenDoesNotExist("TokenDoesNotExist") + + ldap_user_info = await ldap_info(id) + mobile = ldap_user_info.mobile + otp = OTP.create() + OTP.add_otp(id, otp) + + # sms to mobile + # TODO: ldap insert to table + """ + insert into sdk_sms_send + (user_id, schedule_type, subject, sms_msg, callback_url, now_date, send_date, callback, dest_info, reserved1, reserved2) + values + ('ktsaup0519', '0', 'otp', '[사내접근제어 DOCEAN] 인증번호 [123456] 입니다. 3분안에 입력해주세요.', null, + date_format(now(), '%Y%m%d%H%i%S'), date_format(now()+2, '%Y%m%d%H%i%S'), + '15883391', '양석우', '01099858980', '991456', '91312828'); + """ + + logger.info(f"CREATE OTP :: {otp}") + response = JSONResponse(content={"result": 1, "errorMessage": ""}) + except Exception as e: + logger.error(e) + response = JSONResponse(content={"result": 0, "errorMessage": str(e)}) + + return response diff --git a/API-SERVICE/ServiceApiList/common/ldap/info.py b/API-SERVICE/ServiceApiList/common/ldap/info.py new file mode 100644 index 00000000..4cf00b10 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/ldap/info.py @@ -0,0 +1,17 @@ +from fastapi.requests import Request +from fastapi.logger import logger +from fastapi.responses import JSONResponse +from ServiceUtils import CommonUtil as utils +from .utils import ldap_info + + +async def api(request: Request): + try: + user = utils.get_user_info(request) + ldap_user_info = await ldap_info(user["cmpno"]) + + response = JSONResponse(content={"result": 1, "errorMessage": "", "data": {"body": ldap_user_info.dict()}}) + except Exception as e: + logger.error(e) + response = JSONResponse(content={"result": 0, "errorMessage": str(e)}) + return response diff --git a/API-SERVICE/ServiceApiList/common/ldap/login.py b/API-SERVICE/ServiceApiList/common/ldap/login.py index d9b143e9..252fc0d3 100644 --- a/API-SERVICE/ServiceApiList/common/ldap/login.py +++ b/API-SERVICE/ServiceApiList/common/ldap/login.py @@ -1,115 +1,25 @@ -from datetime import datetime, timedelta -from operator import eq -from pydantic import Field, BaseModel from fastapi.requests import Request from fastapi.responses import JSONResponse -from typing import Dict, Optional +from fastapi.logger import logger -from ServiceApiList.common.ldap.utils import run_cmd +from .utils import ldap_auth, ldap_info +from ServiceUtils.CommonUtil import kt_lamp, knime_encrypt from ApiService.ApiServiceConfig import config -from ServiceUtils.CommonUtil import ( - kt_lamp, - get_exception_info, - connect_db, - convert_data, - create_token, - make_token_data, -) -from ServiceUtils.crypto import AESCipher - - -class User(BaseModel): - emp_id: str = Field(min_length=8, max_length=8, description="emp_id") - password: str = Field(default=None, description="password") - - -class UserBas(User): - user_id: str - cmpno: str - user_nm: str - email: str - dept_nm: str - innt_aut_group_cd: Optional[str] = "ROLE_USER" - sttus: Optional[str] = "SBSC" - user_type: str - - class Config: - fields = {"password": {"exclude": True}} - - -class TmpAuthUserBas(UserBas): - tmp_aut_group_cd: Optional[str] = None - tmp_aut_alc_user: Optional[str] = None - tmp_aut_alc_date: Optional[datetime] = None - tmp_aut_exp_date: Optional[datetime] = None - - -def make_insert_query(user: Dict): - user["reg_user"] = user["user_id"] - user["reg_date"] = "NOW()" - columns = ", ".join(user.keys()) - values = ", ".join(map(convert_data, user.values())) - return f"INSERT INTO user_bas ({columns}) VALUES ({values});" - - -def knime_encrypt(data: str, key: str): - return AESCipher(key).encrypt(data).decode() +from .schemas import LoginInfo # login -async def api(user: User, request: Request): +async def api(info: LoginInfo, request: Request): transaction_id = request.headers.get("transactionId") kt_lamp("OUT_REQ", transaction_id, "userLogin") try: - output = await run_cmd( - config.ldap_info["host"], - int(config.ldap_info["port"]), - config.ldap_info["user"], - config.ldap_info["password"], - f"{user.emp_id}/{user.password}", - ) - output = output.split(" ", 1) + if await ldap_auth(info.id, info.password): + ldap_user_info = await ldap_info(info.id) - # 인증 실패 - if output[0] == "false": - return JSONResponse(content={"result": 0, "errorMessage": output[1]}) + knime_token = knime_encrypt(info.id + "|^|" + info.password) - # 인증 성공(but user_bas에 없다면 생성) - db = connect_db() - user_info, _ = db.select(f"SELECT * FROM user_bas WHERE emp_id = {convert_data(user.emp_id)};") - if not user_info: - time_zone = "Asia/Seoul" - db.execute(f"SET TIMEZONE={convert_data(time_zone)}") - login_query = make_insert_query() - db.execute(login_query) - user_info = user.dict() - else: - user_info = user_info[0] - - token_data = make_token_data(TmpAuthUserBas(**user_info).dict()) - access_token = create_token( - data=token_data, - expires_delta=timedelta(minutes=int(config.secret_info["expire_min"])), - secret_key=config.secret_info["secret_key"], - algorithm=config.secret_info["algorithm"], - ) - - knime_token = knime_encrypt( - user.emp_id + "|^|" + user.password, - config.secret_info["secret_key"], - ) - - print(AESCipher(config.secret_info["secret_key"]).decrypt(knime_token).decode()) - - response = JSONResponse(content={"result": 1, "errorMessage": ""}) - response.set_cookie( - key=config.secret_info["cookie_name"], - value=access_token, - max_age=3600, - secure=False, - httponly=True, - ) + response = JSONResponse(content={"result": 1, "errorMessage": "", "data": {"body": ldap_user_info.dict()}}) response.set_cookie( key=config.secret_info["knime_cookie_name"], value=knime_token, @@ -117,9 +27,9 @@ async def api(user: User, request: Request): secure=False, httponly=True, ) - except Exception: - except_name = get_exception_info() - response = JSONResponse(content={"result": 0, "errorMessage": except_name}) + except Exception as e: + logger.error(e) + response = JSONResponse(content={"result": 0, "errorMessage": str(e)}) - kt_lamp("OUT_RES", transaction_id, "userLogin", res_desc=f"{user.emp_id}") + kt_lamp("OUT_RES", transaction_id, "userLogin", res_desc=f"{info.id}") return response diff --git a/API-SERVICE/ServiceApiList/common/ldap/otp_store.py b/API-SERVICE/ServiceApiList/common/ldap/otp_store.py new file mode 100644 index 00000000..c8ce9252 --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/ldap/otp_store.py @@ -0,0 +1,44 @@ +import hashlib +import time +import threading +import random +from fastapi.logger import logger + + +class OTP: + otp_db = dict() + + @classmethod + def get_hash(cls, data) -> str: + return hashlib.sha256(str(data).encode()).hexdigest() + + @classmethod + def create(cls): + return random.randrange(1000000) + + @classmethod + def add_otp(cls, id: str, otp: int): + def del_expired_otp(otp_db, id): + time.sleep(180) + del otp_db[id] + logger.info(f"expired otp :: {id}") + + hash = cls.get_hash(otp) + cls.otp_db[id] = hash + logger.info(f"otp_store :: {cls.otp_db}") + threading.Thread( + daemon=True, + target=del_expired_otp, + args=( + cls.otp_db, + id, + ), + ).start() + + @classmethod + def check_otp(cls, id: str, otp: int) -> bool: + hash = cls.get_hash(otp) + if id in cls.otp_db and cls.otp_db[id] == hash: + del cls.otp_db[id] + return True + return False diff --git a/API-SERVICE/ServiceApiList/common/ldap/schemas.py b/API-SERVICE/ServiceApiList/common/ldap/schemas.py new file mode 100644 index 00000000..8f154e2b --- /dev/null +++ b/API-SERVICE/ServiceApiList/common/ldap/schemas.py @@ -0,0 +1,54 @@ +from datetime import datetime +from pydantic import Field, BaseModel +from typing import Optional, Union + + +class LoginInfo(BaseModel): + id: str = Field(alias="cmpno", min_length=8, max_length=8) + password: str = Field(default=None) + + class Config: + fields = {"password": {"exclude": True}} + + +class UserBas(LoginInfo): + user_id: str + emp_id: str + user_nm: str + email: str + dept_nm: str + innt_aut_group_cd: Optional[str] = "ROLE_USER" + sttus: Optional[str] = "SBSC" + user_type: str + + +class TmpAuthUserBas(UserBas): + tmp_aut_group_cd: Optional[str] = None + tmp_aut_alc_user: Optional[str] = None + tmp_aut_alc_date: Optional[datetime] = None + tmp_aut_exp_date: Optional[datetime] = None + + +class LdapUserInfo(BaseModel): + { + "userName": "홍길동", + "deptCD": 481253, + "mobile": "010-6290-5249", + "deptName": "", + "agencyCD": 481226, + "agencyName": "", + "positionCD": "", + "positionName": "AI/BigData사업본부...", + "companyName": "KT협력사", + "email": "9132824@ktfriends.com", + } + user_name: str = Field(alias="userName") + mobile: str + dept_cd: int = Field(alias="deptCD") + dept_name: str = Field(alias="deptName") + agency_cd: int = Field(alias="agencyCD") + agency_name: str = Field(alias="agencyName") + position_cd: Union[int, str] = Field(alias="positionCD") + position_name: str = Field(alias="positionName") + company_name: str = Field(alias="companyName") + email: str diff --git a/API-SERVICE/ServiceApiList/common/ldap/utils.py b/API-SERVICE/ServiceApiList/common/ldap/utils.py index 729de452..2cb1f753 100644 --- a/API-SERVICE/ServiceApiList/common/ldap/utils.py +++ b/API-SERVICE/ServiceApiList/common/ldap/utils.py @@ -1,8 +1,42 @@ from fastapi.logger import logger +from typing import Union import asyncssh +from ServiceUtils.crypto import AESCipher +from ServiceUtils.exceptions import InvalidUserInfo +from ApiService.ApiServiceConfig import config +from .schemas import LdapUserInfo -async def run_cmd(host: str, port: int, username: str, password: str, cmd: str) -> str: + +async def ldap_auth(id: str, pwd: str) -> bool: + output = await run_cmd( + config.ldap_info["host"], + int(config.ldap_info["port"]), + config.ldap_info["user"], + config.ldap_info["password"], + f"AUTH {id} {pwd}", + ) + output = output.split(" ", 1) + if output[0] == "false": + raise InvalidUserInfo(output[1]) + return True + + +async def ldap_info(id: str) -> LdapUserInfo: + output = await run_cmd( + config.ldap_info["host"], + int(config.ldap_info["port"]), + config.ldap_info["user"], + config.ldap_info["password"], + f"UINFO {id}", + ) + if type(output) == str: + raise InvalidUserInfo(output.split(" ", 1)[1]) + return LdapUserInfo(**output) + + +async def run_cmd(host: str, port: int, username: str, password: str, cmd: str) -> Union[str, dict]: + logger.info("remote call :: " + cmd) # async with asyncssh.connect(host=host, port=port, # username=username, password=password, known_hosts=None) as conn: # logger.info(f'Run Cmd : {cmd}') @@ -11,10 +45,56 @@ async def run_cmd(host: str, port: int, username: str, password: str, cmd: str) # return result.stdout import random - logger.info("remote call :: " + cmd) - return random.choice( - [ - "true", - "false [SYS_FAIL] AuthenticationException: [comment: 인증에 실패했습니다., data 0005", - ] - ) + if "AUTH" in cmd: + return random.choice( + [ + "true", + "false [SYS_FAIL] AuthenticationException: [comment: 인증에 실패했습니다., data 0005", + ] + ) + elif "UINFO" in cmd: + try: + return { + "12345678": { + "userName": "홍길동", + "deptCD": 481253, + "mobile": "010-6290-5249", + "deptName": "", + "agencyCD": 481226, + "agencyName": "", + "positionCD": "", + "positionName": "AI/BigData사업본부...", + "companyName": "KT협력사", + "email": "9132824@ktfriends.com", + }, + "11181059": { + "userName": "고길동", + "deptCD": 481253, + "mobile": "010-6290-5249", + "deptName": "", + "agencyCD": 481226, + "agencyName": "", + "positionCD": "", + "positionName": "AI/BigData사업본부...", + "companyName": "KT협력사", + "email": "9132824@ktfriends.com", + }, + "11181344": { + "userName": "나길동", + "deptCD": 481253, + "mobile": "010-6290-5249", + "deptName": "", + "agencyCD": 481226, + "agencyName": "", + "positionCD": "", + "positionName": "AI/BigData사업본부...", + "companyName": "KT협력사", + "email": "9132824@ktfriends.com", + }, + }[cmd.split(" ")[1]] + except Exception: + return "false CredentialException: [comment: 존재하지 않는 사용자 계정입니다., data 0001]" + + +def knime_encrypt(data: str, key: str): + return AESCipher(key).encrypt(data).decode() diff --git a/API-SERVICE/ServiceApiList/common/userLogin.py b/API-SERVICE/ServiceApiList/common/userLogin.py index 88f13294..9f87c09c 100644 --- a/API-SERVICE/ServiceApiList/common/userLogin.py +++ b/API-SERVICE/ServiceApiList/common/userLogin.py @@ -74,9 +74,7 @@ def api(login: userLogin, request: Request) -> Dict: try: db = connect_db() - user_info, _ = db.select( - f"SELECT * FROM user_bas WHERE emp_id = {convert_data(login.emp_id)};" - ) + user_info, _ = db.select(f"SELECT * FROM user_bas WHERE emp_id = {convert_data(login.emp_id)};") if not user_info: time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index 0fd537d0..b4908d8b 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -14,10 +14,19 @@ from jose import jwt import traceback import logging +from ServiceUtils.crypto import AESCipher lamp = logging.getLogger("trace") +def knime_encrypt(data: str): + return AESCipher(config.secret_info["knime_secret_key"]).encrypt(data).decode() + + +def knime_decrpyt(data: str): + return AESCipher(config.secret_info["knime_secret_key"]).decrypt(data).decode() + + def get_token_from_cookie(request: Request): recv_access_token = request.cookies.get(config.secret_info["cookie_name"]) if not recv_access_token: @@ -43,6 +52,10 @@ def get_user_info(payload): return user +def get_user_info(request: Request): + return get_user_info(jwt_decode(get_token_from_cookie(request))) + + def convert_data(data) -> str: data = str(data) if data: diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 7a545196..e3f0714a 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -33,4 +33,20 @@ method = POST url = /portal/api/common/login sub_dir = common.ldap +[info] +method = GET +url = /portal/api/common/info +sub_dir = common.ldap + +[createOTP] +method = POST +url = /portal/api/common/otp +sub_dir = common.ldap + +[checkOTP] +method = GET +url = /portal/api/common/otp +sub_dir = common.ldap + + diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 65a38862..db89ea16 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -12,6 +12,7 @@ app = FastAPI() app.include_router(api_router.router) + if __name__ == "__main__": log_dir = f"{config.root_path}/log/{config.category}" if os.path.isdir(log_dir): From 1044a31986d515527219817b925cf1aafa035d20 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 2 Dec 2022 13:43:07 +0900 Subject: [PATCH 230/236] =?UTF-8?q?fix:=20common=20select=20user=5Fbas=20?= =?UTF-8?q?=EA=B6=8C=ED=95=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/commonSelect.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index 5657a023..ca5beb34 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -117,6 +117,14 @@ def make_select_query(select_info: commonSelect): def api(select_info: commonSelect, request: Request) -> Dict: + if select_info.table_nm == "user_bas": + token = utils.get_token_from_cookie(request) + payload = utils.jwt_decode(token) + user_type = payload["user_type"] + + if not user_type == "SITE_ADMIN": + return {"result": 0, "errorMessage": "not allowed user"} + get_column_info = f"SELECT eng_nm, kor_nm FROM tbl_item_coln_dtl \ WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {utils.convert_data(select_info.table_nm)});" get_query, total_cnt_query = make_select_query(select_info) From b066b0b4f0f560b00392b1159c622cc3ea200702 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 2 Dec 2022 15:40:19 +0900 Subject: [PATCH 231/236] =?UTF-8?q?fix:=20field=EA=B0=80=20null=EA=B0=92?= =?UTF-8?q?=EC=9D=B8=EC=A7=80=20=EC=B2=B4=ED=81=AC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/els_update.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 3f59ab94..a1def5bf 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -35,7 +35,8 @@ def main(): for meta_wrap in meta_wrap_list: els_dict = dict() if config.category != "data": - meta_wrap["upd_pam_date"] = datetime.strptime(meta_wrap["upd_pam_date"], '%Y-%m-%d').date() + if meta_wrap["upd_pam_date"]: + meta_wrap["upd_pam_date"] = datetime.strptime(meta_wrap["upd_pam_date"], '%Y-%m-%d') els_dict["_id"] = meta_wrap["biz_dataset_id"] els_dict["_source"] = meta_wrap els_dict["_source"]["biz_dataset_id"] = meta_wrap["biz_dataset_id"] From a2f85e8ad0835d63e5e43fec98890b5179ef5b79 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 2 Dec 2022 17:27:59 +0900 Subject: [PATCH 232/236] =?UTF-8?q?fix:=20=EC=BD=94=EB=93=9C=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/commonSelect.py | 4 ++-- API-SERVICE/ServiceUtils/CommonUtil.py | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/commonSelect.py b/API-SERVICE/ServiceApiList/common/commonSelect.py index ca5beb34..e085a907 100644 --- a/API-SERVICE/ServiceApiList/common/commonSelect.py +++ b/API-SERVICE/ServiceApiList/common/commonSelect.py @@ -122,8 +122,8 @@ def api(select_info: commonSelect, request: Request) -> Dict: payload = utils.jwt_decode(token) user_type = payload["user_type"] - if not user_type == "SITE_ADMIN": - return {"result": 0, "errorMessage": "not allowed user"} + if not user_type == "SITE_ADMIN": + return {"result": 0, "errorMessage": "not allowed user"} get_column_info = f"SELECT eng_nm, kor_nm FROM tbl_item_coln_dtl \ WHERE tbl_id = (SELECT tbl_id FROM tbl_item_bas WHERE tbl_nm = {utils.convert_data(select_info.table_nm)});" diff --git a/API-SERVICE/ServiceUtils/CommonUtil.py b/API-SERVICE/ServiceUtils/CommonUtil.py index b4908d8b..c1434e1a 100644 --- a/API-SERVICE/ServiceUtils/CommonUtil.py +++ b/API-SERVICE/ServiceUtils/CommonUtil.py @@ -52,10 +52,6 @@ def get_user_info(payload): return user -def get_user_info(request: Request): - return get_user_info(jwt_decode(get_token_from_cookie(request))) - - def convert_data(data) -> str: data = str(data) if data: From 3e8d20a4559171a86e3716d053db5339fff0a42d Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 2 Dec 2022 17:28:21 +0900 Subject: [PATCH 233/236] =?UTF-8?q?fix:=20OTP=20=EB=B0=9C=EA=B8=89=206?= =?UTF-8?q?=EC=9E=90=EB=A6=AC=20=EA=B3=A0=EC=A0=95=ED=86=A0=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/common/ldap/checkOTP.py | 4 ++-- API-SERVICE/ServiceApiList/common/ldap/createOTP.py | 7 ++++--- API-SERVICE/ServiceApiList/common/ldap/info.py | 1 + API-SERVICE/ServiceApiList/common/ldap/otp_store.py | 9 +++++---- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/API-SERVICE/ServiceApiList/common/ldap/checkOTP.py b/API-SERVICE/ServiceApiList/common/ldap/checkOTP.py index 72c80b80..61bdc8b6 100644 --- a/API-SERVICE/ServiceApiList/common/ldap/checkOTP.py +++ b/API-SERVICE/ServiceApiList/common/ldap/checkOTP.py @@ -1,4 +1,3 @@ -from .otp_store import OTP from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta @@ -9,6 +8,7 @@ connect_db, convert_data, ) +from .otp_store import OTP from ServiceUtils.exceptions import InvalidUserInfo from ApiService.ApiServiceConfig import config from .schemas import TmpAuthUserBas @@ -18,7 +18,7 @@ class OTPMissMatch(Exception): ... -def api(id: str, otp: int): +def api(id: str, otp: str): try: is_ok = OTP.check_otp(id, otp) if not is_ok: diff --git a/API-SERVICE/ServiceApiList/common/ldap/createOTP.py b/API-SERVICE/ServiceApiList/common/ldap/createOTP.py index 90313f5e..48b62e5e 100644 --- a/API-SERVICE/ServiceApiList/common/ldap/createOTP.py +++ b/API-SERVICE/ServiceApiList/common/ldap/createOTP.py @@ -1,9 +1,9 @@ -from .otp_store import OTP -from .utils import ldap_info from fastapi.responses import JSONResponse from fastapi.requests import Request from fastapi.logger import logger +from .otp_store import OTP +from .utils import ldap_info from ApiService.ApiServiceConfig import config from ServiceUtils.CommonUtil import knime_decrpyt from ServiceUtils.exceptions import TokenDoesNotExist, InvalidUserInfo @@ -36,7 +36,8 @@ async def api(id: str, request: Request): """ logger.info(f"CREATE OTP :: {otp}") - response = JSONResponse(content={"result": 1, "errorMessage": ""}) + # TODO response의 otp 제거 (상용패치시) + response = JSONResponse(content={"result": 1, "errorMessage": "", "otp": otp}) except Exception as e: logger.error(e) response = JSONResponse(content={"result": 0, "errorMessage": str(e)}) diff --git a/API-SERVICE/ServiceApiList/common/ldap/info.py b/API-SERVICE/ServiceApiList/common/ldap/info.py index 4cf00b10..6688faa6 100644 --- a/API-SERVICE/ServiceApiList/common/ldap/info.py +++ b/API-SERVICE/ServiceApiList/common/ldap/info.py @@ -1,6 +1,7 @@ from fastapi.requests import Request from fastapi.logger import logger from fastapi.responses import JSONResponse + from ServiceUtils import CommonUtil as utils from .utils import ldap_info diff --git a/API-SERVICE/ServiceApiList/common/ldap/otp_store.py b/API-SERVICE/ServiceApiList/common/ldap/otp_store.py index c8ce9252..2a0e983e 100644 --- a/API-SERVICE/ServiceApiList/common/ldap/otp_store.py +++ b/API-SERVICE/ServiceApiList/common/ldap/otp_store.py @@ -14,13 +14,14 @@ def get_hash(cls, data) -> str: @classmethod def create(cls): - return random.randrange(1000000) + return "".join([str(random.randrange(10)) for i in range(6)]) @classmethod - def add_otp(cls, id: str, otp: int): + def add_otp(cls, id: str, otp: str): def del_expired_otp(otp_db, id): time.sleep(180) - del otp_db[id] + if id in otp_db: + del otp_db[id] logger.info(f"expired otp :: {id}") hash = cls.get_hash(otp) @@ -36,7 +37,7 @@ def del_expired_otp(otp_db, id): ).start() @classmethod - def check_otp(cls, id: str, otp: int) -> bool: + def check_otp(cls, id: str, otp: str) -> bool: hash = cls.get_hash(otp) if id in cls.otp_db and cls.otp_db[id] == hash: del cls.otp_db[id] From 710cb2cf810f673c36fa66813d116b60a83cad79 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 7 Dec 2022 09:36:52 +0900 Subject: [PATCH 234/236] =?UTF-8?q?[AIPLATFORM-1257]=20fix:=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=EC=96=B4=20=EA=B2=B0=EA=B3=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApiList/meta/getBizMetaAsset.py | 18 +++++++++--------- .../ServiceApiList/meta/getBizMetaContent.py | 15 +++++++-------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py index 686c1ce3..5238c1b2 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaAsset.py @@ -9,7 +9,6 @@ from ApiService.ApiServiceConfig import config - def api(input: InputModel) -> Dict: index = "kt_biz_asset" els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] @@ -44,25 +43,26 @@ def api(input: InputModel) -> Dict: query_dict.update(item_dict) search_query = make_query(action, "bool", query_dict) es.body.update(search_query) - data_type = make_query( - "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "N"} - ) - es.body["query"]["bool"]["filter"].append(data_type) sort_list = [{item.field: item.order} for item in input.sortOption] es.set_sort(sort_list) search_data = es.search(input.resultField) - # assets index count n + # count body = deepcopy(es.body) del body["sort"] data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] - # assets index count y = n+y - body["query"]["bool"]["filter"] = body["query"]["bool"]["filter"][:-1] + # assets index count y + data_type = make_query( + "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "Y"} + ) + body["query"]["bool"]["filter"].append(data_type) data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] - # meta index count + # meta index assets + body = deepcopy(es.body) + del body["sort"] data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] data_dict["totalCount"] = sum(data_dict.values()) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py index 1c93cec6..283d2b8d 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaContent.py @@ -43,26 +43,25 @@ def api(input: InputModel) -> Dict: query_dict.update(item_dict) search_query = make_query(action, "bool", query_dict) es.body.update(search_query) + data_type = make_query( + "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "Y"} + ) + es.body["query"]["bool"]["filter"].append(data_type) sort_list = [{item.field: item.order} for item in input.sortOption] es.set_sort(sort_list) search_data = es.search(input.resultField) - # count + # assets index count y body = deepcopy(es.body) del body["sort"] data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] - # assets index count n - data_type = make_query( - "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "N"} - ) - body["query"]["bool"]["filter"].append(data_type) + # assets index assets n = n+y + body["query"]["bool"]["filter"] = body["query"]["bool"]["filter"][:-1] data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # meta index count - body = deepcopy(es.body) - del body["sort"] data_dict["M"] = es.conn.count(index="kt_biz_data", body=body)["count"] data_dict["totalCount"] = sum(data_dict.values()) From 5d48d978037a00cc19fdadff2a31353d8813b25f Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 7 Dec 2022 10:12:22 +0900 Subject: [PATCH 235/236] =?UTF-8?q?[AIPLATFORM-1257]=20fix:=20=EB=A9=94?= =?UTF-8?q?=ED=83=80=EB=8D=B0=EC=9D=B4=ED=84=B0=20=ED=83=AD=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ServiceApiList/meta/getBizMetaData.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py index 618ef897..30586ef5 100644 --- a/API-SERVICE/ServiceApiList/meta/getBizMetaData.py +++ b/API-SERVICE/ServiceApiList/meta/getBizMetaData.py @@ -50,14 +50,14 @@ def api(input: InputModel) -> Dict: body = deepcopy(es.body) del body["sort"] - data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # assets index count n data_type = make_query( - "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "N"} + "match", "conts_dataset_reg_yn", {"operator": "OR", "query": "Y"} ) body["query"]["bool"]["filter"].append(data_type) - data_dict["A"] = es.conn.count(index="kt_biz_asset", body=body)["count"] + data_dict["C"] = es.conn.count(index="kt_biz_asset", body=body)["count"] # meta index count body = deepcopy(es.body) From ecc61376c4e6e310363381ace95e2bb6b968d19f Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 15 Dec 2022 15:20:00 +0900 Subject: [PATCH 236/236] =?UTF-8?q?feat:=20kt=20data=20input=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/data_insert.py | 71 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 API-SERVICE/data_insert.py diff --git a/API-SERVICE/data_insert.py b/API-SERVICE/data_insert.py new file mode 100644 index 00000000..c4a92a6c --- /dev/null +++ b/API-SERVICE/data_insert.py @@ -0,0 +1,71 @@ +import os +import uuid +import sqlalchemy +import pandas as pd +from pathlib import Path +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker, scoped_session +from sqlalchemy.ext.declarative import declarative_base +from ELKSearch.Utils.database_utils import prepare_config +# root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) +# prepare_config(root_path) + + +def get_table(table_name,session): + return sqlalchemy.Table(table_name,sqlalchemy.MetaData(),autoload=True,autoload_with=session.get_bind()) + + +""" +d-ocean sample data 입력 + +[default 값] +p.key = 기타 +datatype = 기본 +src_sys = d-ocean (전부 대문자로 치환) +data_upd_cycle = M + +[ID 값으로 변환] +kywrd = 텍스트로 그냥 입력 +ctgry - meta_change_ctgry_dtl +prv_forml - biz_meta_fltr_bas +src_sys - biz_meta_fltr_bas + +""" +insert_db = create_engine(f"postgresql://dpme:hello.meta12#$@192.168.100.126:25432/ktportal", + connect_args={'options': '-csearch_path=meta'}) + +# insert_db = create_engine(f"postgresql://postgres:0312@localhost:5432/ktportal", +# connect_args={'options': '-csearch_path=meta'}) + +sess = scoped_session(sessionmaker(autocommit=True, autoflush=False, bind=insert_db)) +base = declarative_base() + +data = pd.DataFrame(pd.read_excel("./d-ocean_sample.xlsx")) +print(data.head()) +print(data.columns) + +####### 샘플 데이터 수정 ####### + + +####### 데이터 DB INSERT ####### +table_name = "test" +table_name = table_name.lower() + + +data.columns = [col.lower() for col in list(data.columns)] +table = get_table(table_name,sess) +columns = table.columns.keys() + +data = data.replace('', None) +for col in list(data.columns): + data[col] = data[col].astype(str) + if col not in columns: + sess.execute('ALTER TABLE {} ADD {} TEXT'.format(table_name, col)) + +del data["bm"] +del data["pkey"] +del data["datatype"] +data["biz_dataset_id"] = [uuid.uuid4() for i in range(0,len(data))] + +with insert_db.connect() as conn: + data.to_sql(table_name,con=conn,if_exists='replace', index=False, index_label=False)