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/323] 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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] 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/323] 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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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/323] =?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 bc5ac23d2a58ec439cddb523a5528c3c1cecb99f Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 15:09:39 +0900 Subject: [PATCH 116/323] =?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/conf/config.ini | 12 ++++---- 2 files changed, 31 insertions(+), 30 deletions(-) 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/conf/config.ini b/API-ROUTER/conf/config.ini index f6daccc9..08143a57 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 = dataportal +schema = sitemng [secret_info] name = user-katech-access-token From 03c12900d02ea2940e5fbafa22d84e528098dd22 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 28 Jun 2022 15:29:26 +0900 Subject: [PATCH 117/323] =?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 fbc8896325d2a1b12190d237ee924ad2609684f0 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 29 Jun 2022 16:26:56 +0900 Subject: [PATCH 118/323] =?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 | 70 +++++++++++++++++++-------------- API-ROUTER/conf/logging.conf | 31 +++++++-------- API-ROUTER/server.py | 8 ++-- 4 files changed, 61 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 feb58ad0..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 @@ -105,3 +114,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/logging.conf b/API-ROUTER/conf/logging.conf index 024db4ae..a87f16cc 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/Katech/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 4b3091f54791e6faeb8e48c859bddb2044454768 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 30 Jun 2022 13:51:25 +0900 Subject: [PATCH 119/323] =?UTF-8?q?feat=20:=20api=20=EC=B6=9C=EB=A0=A5=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/getBizMetaList.py | 45 ++++++++++++------- API-SERVICE/ApiList/sitemng/getCodeGroupId.py | 2 +- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 4fb1cecd..82befd2f 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,7 +8,9 @@ def api(request: Request, perPage: int, curPage: int, - keyWordList: List[str] = Query(None)) -> Dict: + keyword1: str = "", + keyword2: str = "", + keyword3: str = ""): user_info = get_token_info(request.headers) curPage = curPage - 1 @@ -24,32 +24,42 @@ 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 = [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 " # 검색 조건 추가 - 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 " + 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] - v_meta_wrap_query = v_meta_wrap_query.format(order_condition[:-5] + " desc") + 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) @@ -58,11 +68,12 @@ def api(request: Request, 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 = {"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} + 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 diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py index ea9462a7..8fd0047d 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -20,5 +20,5 @@ def api(groupId, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = code_info[0] + result = make_res_msg(1, "", code_info[0], code_info[1]) return result From ec40253163c257b1d57d06955060ed02900308d0 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 30 Jun 2022 14:09:48 +0900 Subject: [PATCH 120/323] =?UTF-8?q?feat=20:=20=EC=B6=9C=EB=A0=A5=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/sitemng/getCodeGroupId.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py index 8fd0047d..13ecea13 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -20,5 +20,5 @@ def api(groupId, request: Request) -> Dict: result = {"result": 0, "errorMessage": err} logger.error(err) else: - result = make_res_msg(1, "", code_info[0], code_info[1]) + result = {"result": 1, "errorMessage": "", "data": code_info[0]} return result From a7554ec29b12e6cc118e684c5c3c96a31a0447a1 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 30 Jun 2022 15:24:03 +0900 Subject: [PATCH 121/323] =?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-SERVICE/ApiService/ApiService.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 27 +++++++++++++++++-------- API-SERVICE/conf/meta/logging.conf | 30 +++++++++++++--------------- API-SERVICE/server.py | 8 +++++--- 4 files changed, 39 insertions(+), 28 deletions(-) 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..fa7600c9 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/Katech/AP_API_Router/API-SERVICE/log/meta/meta.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 cf8416d8bf843ded43f98a2b03e933da4a387848 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 30 Jun 2022 16:22:35 +0900 Subject: [PATCH 122/323] =?UTF-8?q?feat:=20=EC=BD=94=EB=93=9C=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=ED=8E=98=EC=9D=B4=EC=A7=95=20=EC=A1=B0=ED=9A=8C=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/ApiList/sitemng/getCodeList.py | 69 ++++++++++++++++++++++ API-SERVICE/conf/sitemng/api_config.ini | 5 ++ 2 files changed, 74 insertions(+) create mode 100644 API-SERVICE/ApiList/sitemng/getCodeList.py diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py new file mode 100644 index 00000000..9cfccb0b --- /dev/null +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -0,0 +1,69 @@ +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(request: Request, + perPage: int, + curPage: int, + gropId: str, + keyword: str = ""): + + user_info = get_token_info(request.headers) + curPage = curPage - 1 + total_cnt_query = "SELECT count(*) as cnt FROM tb_code_detail" + code_list_query = """ + select + *, + row_number () over ( + order by + {0} + ) as rowNo + from + tb_code_detail + """ + + try: + db = connect_db(config.db_info) + + code_list_query = code_list_query + f" WHERE code_group_id = {convert_data(gropId)}" + total_cnt_query = total_cnt_query + f" WHERE code_group_id = {convert_data(gropId)}" + + if len(keyword): + order_condition = f"code_nm similar to '%{keyword}%' " + search_condition = f"and code_nm like '%{keyword}%'" + # 검색 조건 추가 + code_list_query = code_list_query + search_condition + total_cnt_query = total_cnt_query + search_condition + + # 마지막 ' and ' 삭제 + code_list_query = code_list_query.format( + order_condition + " desc") + else: + order_condition = "reg_date asc" + code_list_query = code_list_query.format(order_condition) + + paging_condition = f" limit {perPage} offset ({perPage} * {curPage})" + code_list_query = code_list_query + paging_condition + logger.info(code_list_query) + + code_list = db.select(code_list_query) + total_cnt = db.select(total_cnt_query) + + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + else: + logger.info(code_list[0]) + if len(code_list[0]): + result = {"totalcount": total_cnt[0][0]['cnt']} + result["list"] = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} + for code_detail in code_list[0]] + return result + else: + body = {"totalcount": total_cnt[0][0]['cnt'], "list": code_list[0]} + result = {"result": 1, "errorMessage": "", "data": body} + return result diff --git a/API-SERVICE/conf/sitemng/api_config.ini b/API-SERVICE/conf/sitemng/api_config.ini index cb74e26b..194f458b 100644 --- a/API-SERVICE/conf/sitemng/api_config.ini +++ b/API-SERVICE/conf/sitemng/api_config.ini @@ -1,4 +1,9 @@ [getCodeGroupId] method = GET url = /portal/api/sitemng/getCodeInfo +sub_dir = sitemng + +[getCodeList] +method = GET +url = /portal/api/sitemng/getCodeList sub_dir = sitemng \ No newline at end of file From 1bfd30739f6b833fdfbf4c432224998b3836595e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 30 Jun 2022 16:23:20 +0900 Subject: [PATCH 123/323] =?UTF-8?q?chore:=20=EC=97=90=EB=9F=AC=20=EB=A6=AC?= =?UTF-8?q?=ED=84=B4=20=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/ApiList/sitemng/getCodeList.py | 1 + 1 file changed, 1 insertion(+) diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index 9cfccb0b..93061fe9 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -56,6 +56,7 @@ def api(request: Request, except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) + return result else: logger.info(code_list[0]) if len(code_list[0]): From 2d5faec91af72656218d41da7bb7f9e203b9295c Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 30 Jun 2022 16:28:13 +0900 Subject: [PATCH 124/323] =?UTF-8?q?chore:=20debug=EC=9A=A9=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=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/sitemng/getCodeList.py | 1 - 1 file changed, 1 deletion(-) diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index 93061fe9..f994de3e 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -58,7 +58,6 @@ def api(request: Request, logger.error(err) return result else: - logger.info(code_list[0]) if len(code_list[0]): result = {"totalcount": total_cnt[0][0]['cnt']} result["list"] = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} From 7ec828daeb60be6390064cddfccea0a4cb3c18de Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 1 Jul 2022 10:27:12 +0900 Subject: [PATCH 125/323] =?UTF-8?q?feat=20:=20getCodeList=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=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/sitemng/getCodeList.py | 17 ++++++------ API-SERVICE/conf/sitemng/logging.conf | 30 ++++++++++------------ 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index f994de3e..32f7a499 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -29,8 +29,10 @@ def api(request: Request, try: db = connect_db(config.db_info) - code_list_query = code_list_query + f" WHERE code_group_id = {convert_data(gropId)}" - total_cnt_query = total_cnt_query + f" WHERE code_group_id = {convert_data(gropId)}" + code_list_query = code_list_query + \ + f" WHERE code_group_id = {convert_data(gropId)}" + total_cnt_query = total_cnt_query + \ + f" WHERE code_group_id = {convert_data(gropId)}" if len(keyword): order_condition = f"code_nm similar to '%{keyword}%' " @@ -59,11 +61,10 @@ def api(request: Request, return result else: if len(code_list[0]): - result = {"totalcount": total_cnt[0][0]['cnt']} - result["list"] = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} - for code_detail in code_list[0]] - return result + body = {"totalcount": total_cnt[0][0]['cnt']} + body["list"] = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} + for code_detail in code_list[0]] else: body = {"totalcount": total_cnt[0][0]['cnt'], "list": code_list[0]} - result = {"result": 1, "errorMessage": "", "data": body} - return result + result = {"result": 1, "errorMessage": "", "data": body} + return result diff --git a/API-SERVICE/conf/sitemng/logging.conf b/API-SERVICE/conf/sitemng/logging.conf index fbcc4113..d30a36ee 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/Katech/AP_API_Router/API-SERVICE/log/sitemng/sitemng.log', 'a', 20000000, 10) +level = DEBUG From 3883abcc410755adfabe3ae1cb42c50ca8bc5b62 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 1 Jul 2022 10:46:42 +0900 Subject: [PATCH 126/323] =?UTF-8?q?fix=20:=20getCodeList=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/sitemng/getCodeList.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index 32f7a499..12b6c157 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -60,11 +60,11 @@ def api(request: Request, logger.error(err) return result else: + code_info = [] if len(code_list[0]): - body = {"totalcount": total_cnt[0][0]['cnt']} - body["list"] = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} - for code_detail in code_list[0]] - else: - body = {"totalcount": total_cnt[0][0]['cnt'], "list": 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 = {"totalcount": total_cnt[0][0]['cnt'], "list": code_info} result = {"result": 1, "errorMessage": "", "data": body} return result From b29030ac55cf6570175f5776c88662a35078943d Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 4 Jul 2022 15:58:27 +0900 Subject: [PATCH 127/323] =?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 | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 82befd2f..f66ddfc0 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -64,16 +64,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 3021b1519e436e471667a6d0d3ecaee1d2b578dd Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 4 Jul 2022 16:23:08 +0900 Subject: [PATCH 128/323] =?UTF-8?q?[AIPLATFORM-420]=20feat:=20getBizMetaLi?= =?UTF-8?q?stByIds=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiList/meta/getBizMetaListByIds.py | 31 +++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 5 +++ 2 files changed, 36 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/getBizMetaListByIds.py diff --git a/API-SERVICE/ApiList/meta/getBizMetaListByIds.py b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py new file mode 100644 index 00000000..93474167 --- /dev/null +++ b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py @@ -0,0 +1,31 @@ +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, datasetIdList: str) -> Dict: + user_info = get_token_info(request.headers) + v_meta_wrap_query = 'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id in ({0})' + + try: + db = connect_db(config.db_info) + dataset_id_list = ','.join( + [convert_data(biz_dataset_id) for biz_dataset_id in datasetIdList.split(",")] + ) + meta_wrap = db.select(v_meta_wrap_query.format(dataset_id_list)) + + except Exception as err: + result = {"result": 0, "errorMessage": err} + logger.error(err) + + else: + result = make_res_msg(1,"",meta_wrap[0],[]) + result["data"].pop("header") + result["data"]["list"] = result["data"]["body"] + del result["data"]["body"] + logger.info(result) + + return result diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 54ebee13..58a021f1 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -101,4 +101,9 @@ sub_dir = meta [getCategoryTree] method = POST url = /portal/api/meta/getCategoryTree +sub_dir = meta + +[getBizMetaListByIds] +method = GET +url = /portal/api/meta/getBizMetaListByIds sub_dir = meta \ No newline at end of file From e6340d8c656fc7a3264d99721bc26140eac8b829 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 4 Jul 2022 16:39:04 +0900 Subject: [PATCH 129/323] =?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 f66ddfc0..6747a814 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -64,12 +64,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 75cee5ce31d50ec01e969a93b48e4ec7c26fae04 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 5 Jul 2022 14:10:34 +0900 Subject: [PATCH 130/323] =?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/getBizMetaList.py | 6 +++--- API-SERVICE/ApiList/meta/getCategoryTree.py | 2 -- API-SERVICE/ApiList/meta/insertMetaName.py | 6 +++--- API-SERVICE/ApiList/meta/updateUseBoardData.py | 1 - 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 +++--- 13 files changed, 36 insertions(+), 39 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 0e74bf19..70e75796 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 a87f16cc..6aed4f64 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/Katech/AP_API_Router/API-ROUTER/log/API-Router.log', 'a', 20000000, 10) -level = DEBUG +level = INFO diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 6747a814..8f58d4cf 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,6 +1,5 @@ -from lib2to3.pytree import convert from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_token_info, make_res_msg +from Utils.CommonUtil import connect_db, get_token_info from fastapi.logger import logger from starlette.requests import Request @@ -68,7 +67,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 diff --git a/API-SERVICE/ApiList/meta/getCategoryTree.py b/API-SERVICE/ApiList/meta/getCategoryTree.py index 54645ff2..916e0d32 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -1,8 +1,6 @@ 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 fastapi.logger import logger from starlette.requests import Request 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/ApiList/meta/updateUseBoardData.py b/API-SERVICE/ApiList/meta/updateUseBoardData.py index 1da73228..47b07b37 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -1,5 +1,4 @@ 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 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 fa7600c9..6395bb2f 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/Katech/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 d30a36ee..5c387396 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/Katech/AP_API_Router/API-SERVICE/log/sitemng/sitemng.log', 'a', 20000000, 10) -level = DEBUG +level = INFO From 8308b9eb4a1b5a9d8a5a43cb5d12d3f631ae9627 Mon Sep 17 00:00:00 2001 From: cbc Date: Tue, 5 Jul 2022 17:19:01 +0900 Subject: [PATCH 131/323] =?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 | 36 ++++++++-------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 8f58d4cf..7a4650e0 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -1,5 +1,5 @@ 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,34 +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}%'") + + 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)}' - # 마지막 ' 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") + 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} @@ -67,8 +58,7 @@ 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 + return result \ No newline at end of file From 72d35c11aea177b18156605eac82045c1b3db87a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 6 Jul 2022 10:35:50 +0900 Subject: [PATCH 132/323] =?UTF-8?q?feat:=20=EC=BF=BC=EB=A6=AC=20=ED=98=95?= =?UTF-8?q?=EC=8B=9D=20=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=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/addChildCategory.py | 8 +-- .../ApiList/meta/deleteUseBoardData.py | 6 +-- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 8 ++- API-SERVICE/ApiList/meta/getBizMetaList.py | 21 ++------ .../ApiList/meta/getBizMetaListByIds.py | 6 +-- API-SERVICE/ApiList/meta/getCategoryList.py | 11 ++-- API-SERVICE/ApiList/meta/getCategoryTree.py | 7 +-- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 8 ++- .../ApiList/meta/getUseBoardDataDetail.py | 9 ++-- .../ApiList/meta/getUseBoardDataList.py | 10 ++-- 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 | 18 +++---- .../ApiList/meta/insertUseBoardData.py | 6 +-- API-SERVICE/ApiList/meta/metaMapList.py | 27 ++++------ API-SERVICE/ApiList/meta/metaNameList.py | 51 +++++++++---------- API-SERVICE/ApiList/meta/updateBizMeta.py | 7 +-- API-SERVICE/ApiList/meta/updateCategory.py | 8 +-- API-SERVICE/ApiList/meta/updateMetaName.py | 7 +-- .../ApiList/meta/updateUseBoardData.py | 6 +-- API-SERVICE/ApiList/meta/useMetaNameList.py | 40 +++++++-------- 22 files changed, 121 insertions(+), 208 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 9183363a..c86f8714 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): @@ -13,10 +12,7 @@ class addChildCategory(BaseModel): node_nm: str -# 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 5930ca05..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],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/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 7a4650e0..23255d5b 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 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) @@ -61,4 +48,4 @@ def api(request: Request, 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/getBizMetaListByIds.py b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py index 93474167..22ea6fd1 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaListByIds.py +++ b/API-SERVICE/ApiList/meta/getBizMetaListByIds.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, datasetIdList: str) -> Dict: - user_info = get_token_info(request.headers) +def api(datasetIdList: str) -> Dict: v_meta_wrap_query = 'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id in ({0})' try: 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 916e0d32..186fa028 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -1,13 +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.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..57c0680f 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -1,15 +1,13 @@ 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" + query = "SELECT * FROM v_biz_meta_name" else: query = f'SELECT * FROM tb_biz_meta_name WHERE nm_id = {convert_data(nameId)}' diff --git a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py index 319f51e6..bc93f5f7 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -1,15 +1,12 @@ 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(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)};' +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 c2a8fefc..5e9b8ab2 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -1,21 +1,17 @@ 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');" try: db = connect_db(config.db_info) - use_data, eng_columns = db.select(get_use_data_query) - logger.error(f'USE DATA : {use_data}') + use_data, _ = db.select(get_use_data_query) 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..9672df16 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..fc749fa6 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("'") @@ -36,19 +33,16 @@ 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: - raise ValueError + raise Exception # 특수문자 체크 if list(filter(lambda eng_nm: eng_nm in symbol_list, insert.eng_nm)): - raise ValueError + raise Exception 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 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..d2148d9d 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -1,24 +1,19 @@ 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..f03f55d4 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): @@ -13,10 +12,7 @@ class UpdateCategory(BaseModel): node_nm: str -# 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..5b90f386 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.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, Field from fastapi.logger import logger -from starlette.requests import Request class UpdatetMetaName(BaseModel): @@ -15,9 +14,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 47b07b37..0677ea33 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -1,10 +1,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 -from starlette.requests import Request from datetime import datetime, timedelta @@ -15,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 ae735e581df87c131817b7d908929b73e5cb1963 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 6 Jul 2022 10:56:27 +0900 Subject: [PATCH 133/323] =?UTF-8?q?feat:=20sitemng=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=ED=86=B5=EC=9D=BC?= 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/sitemng/getCodeGroupId.py | 15 +++--- API-SERVICE/ApiList/sitemng/getCodeList.py | 47 ++++++------------- 3 files changed, 32 insertions(+), 48 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index 23255d5b..a90e63a8 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 from fastapi.logger import logger @@ -7,10 +8,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: @@ -21,18 +22,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) @@ -40,6 +41,7 @@ def api(perPage: int, except Exception as err: result = {"result": 0, "errorMessage": err} logger.error(err) + return result else: search_list = [] if len(meta_wrap[0]): diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py index 13ecea13..72e198bd 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -1,17 +1,16 @@ 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) diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index 12b6c157..9364bf8b 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -1,56 +1,39 @@ 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(request: Request, - perPage: int, +def api(perPage: int, curPage: int, gropId: str, - keyword: str = ""): + keyword: str = "") -> Dict: - user_info = get_token_info(request.headers) curPage = curPage - 1 - total_cnt_query = "SELECT count(*) as cnt FROM tb_code_detail" - code_list_query = """ - select - *, - row_number () over ( - order by - {0} - ) as rowNo - from - tb_code_detail - """ + total_cnt_query = "SELECT count(*) AS cnt FROM tb_code_detail" + code_list_query = "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM tb_code_detail" try: db = connect_db(config.db_info) - - code_list_query = code_list_query + \ - f" WHERE code_group_id = {convert_data(gropId)}" - total_cnt_query = total_cnt_query + \ - f" WHERE code_group_id = {convert_data(gropId)}" + common_condition = f" WHERE code_group_id = {convert_data(gropId)}" + code_list_query = code_list_query + common_condition + total_cnt_query = total_cnt_query + common_condition if len(keyword): - order_condition = f"code_nm similar to '%{keyword}%' " - search_condition = f"and code_nm like '%{keyword}%'" - # 검색 조건 추가 + # keyword 검색 조건 추가 + order_condition = f"code_nm SIMILAR to '%{keyword}%' DESC" + search_condition = f"AND code_nm LIKE '%{keyword}%'" + code_list_query = code_list_query + search_condition total_cnt_query = total_cnt_query + search_condition - - # 마지막 ' and ' 삭제 - code_list_query = code_list_query.format( - order_condition + " desc") + code_list_query = code_list_query.format(order_condition) else: - order_condition = "reg_date asc" + order_condition = "reg_date ASC" code_list_query = code_list_query.format(order_condition) - paging_condition = f" limit {perPage} offset ({perPage} * {curPage})" + paging_condition = f" LIMIT {perPage} OFFSET ({perPage} * {curPage})" code_list_query = code_list_query + paging_condition - logger.info(code_list_query) code_list = db.select(code_list_query) total_cnt = db.select(total_cnt_query) From 07773e3cac14ec45b6b740743b993c3156673756 Mon Sep 17 00:00:00 2001 From: lum0380 Date: Wed, 6 Jul 2022 14:02:22 +0900 Subject: [PATCH 134/323] =?UTF-8?q?feat:=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/getBizMetaList.py | 10 ++++------ .../ApiList/meta/getBizMetaListByIds.py | 10 ++++------ API-SERVICE/ApiList/meta/getCategoryList.py | 9 ++++----- API-SERVICE/ApiList/meta/getCategoryTree.py | 9 ++++----- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 9 ++++----- .../ApiList/meta/getUseBoardDataDetail.py | 9 ++++----- .../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 | 9 ++++----- API-SERVICE/ApiList/meta/metaMapList.py | 9 ++++----- 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 | 9 ++++----- API-SERVICE/ApiList/meta/updateUseBoardData.py | 9 ++++----- API-SERVICE/ApiList/meta/useMetaNameList.py | 7 +++---- API-SERVICE/ApiList/sitemng/getCodeGroupId.py | 18 +++++++----------- API-SERVICE/ApiList/sitemng/getCodeList.py | 9 ++++----- API-SERVICE/ConnectManager/PostgresManager.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 11 +++++++++++ 26 files changed, 111 insertions(+), 134 deletions(-) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index c86f8714..40f4bc3e 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): @@ -19,9 +18,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/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index a90e63a8..f46d87bf 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.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(perPage: int, @@ -38,10 +37,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) - return result + 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/getBizMetaListByIds.py b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py index 22ea6fd1..6bf4dbef 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaListByIds.py +++ b/API-SERVICE/ApiList/meta/getBizMetaListByIds.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, make_res_msg +from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info from Utils.DataBaseUtil import convert_data @@ -14,11 +14,9 @@ def api(datasetIdList: str) -> Dict: [convert_data(biz_dataset_id) for biz_dataset_id in datasetIdList.split(",")] ) meta_wrap = db.select(v_meta_wrap_query.format(dataset_id_list)) - - 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_wrap[0],[]) result["data"].pop("header") 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 57c0680f..0ff31b59 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 9672df16..0a1d8ea8 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 fc749fa6..dfb03560 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 Exception 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..0fde493b 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -1,8 +1,7 @@ from typing import Dict 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 +44,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 d2148d9d..aae6071f 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.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: @@ -18,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 f03f55d4..e0c331fa 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 @@ -21,9 +20,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 5b90f386..fa0f7bdd 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.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, Field -from fastapi.logger import logger class UpdatetMetaName(BaseModel): @@ -25,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..be09aece 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: @@ -26,8 +25,8 @@ def api() -> Dict: 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_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 72e198bd..61395481 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py @@ -1,23 +1,19 @@ 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 def api(groupId) -> Dict: - get_code_info_query = f'SELECT\ - code_id, \ - code_nm \ - FROM tb_code_detail \ + 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) - 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": code_info[0]} + result = code_info[0] return result diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index 9364bf8b..6a8109ab 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -1,6 +1,6 @@ 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 fastapi.logger import logger from Utils.DataBaseUtil import convert_data @@ -38,10 +38,9 @@ def api(perPage: int, code_list = db.select(code_list_query) total_cnt = db.select(total_cnt_query) - except Exception as err: - result = {"result": 0, "errorMessage": err} - logger.error(err) - return result + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} else: code_info = [] if len(code_list[0]): 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..6a4224ff 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -10,6 +10,8 @@ from retry import retry import psycopg2 import jwt +import sys +import traceback def set_log_path(): @@ -99,3 +101,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 d96b775a981d15e1db3986da5cad5529ebdfecfb Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 8 Jul 2022 11:02:16 +0900 Subject: [PATCH 135/323] =?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 | 28 +++++++++++----------- API-ROUTER/Utils/CommonUtil.py | 15 +++++------- API-ROUTER/conf/config.ini | 10 +++++++- API-ROUTER/safe_start.sh | 8 +++++-- API-ROUTER/start.sh | 10 +++++--- API-SERVICE/ApiService/ApiServiceConfig.py | 2 ++ API-SERVICE/Utils/CommonUtil.py | 14 ++++++++++- API-SERVICE/conf/meta/config.ini | 11 ++++++++- API-SERVICE/conf/sitemng/config.ini | 10 +++++++- API-SERVICE/safe_start.sh | 8 +++++-- API-SERVICE/start.sh | 8 +++++-- 13 files changed, 96 insertions(+), 42 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 e45c2038..9aeae07e 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: ex_type, ex_value, trace_log = get_exception_info() @@ -113,7 +113,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: ex_type, ex_value, trace_log = get_exception_info() @@ -129,7 +129,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: @@ -144,7 +144,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: @@ -159,7 +159,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: @@ -177,7 +177,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;') @@ -199,7 +199,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;') @@ -225,7 +225,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( @@ -244,7 +244,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 = [] @@ -280,7 +280,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 = [] @@ -320,7 +320,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)};') @@ -343,13 +343,13 @@ 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"]) + "content-length", "user-agent"]) logger.info(f'Request Headers : {headers}') user_info = get_token_info(request.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 70e75796..e0ae3b76 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) #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.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 08143a57..71ed13ed 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 = dataportal +schema = sitemng + +[commercial_db] host = 192.168.100.126 port = 25432 user = dpsi diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh index 8fa73b56..2f40f0fe 100644 --- 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,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} --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 4d7d7ab8..6e75714b 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -1,21 +1,25 @@ app_name=API-Router router_host=$1 router_port=$2 +router_db=$3 input() { if [[ $router_host == "" ]];then router_host=192.168.100.126 fi if [[ $router_port == "" ]];then - router_port=9010 + router_port=8010 + 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 &" + 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 "########## Start Application (${app_name}) ##########" 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 6a4224ff..0864f231 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -45,6 +45,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() @@ -58,7 +59,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"] @@ -110,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 = "UNIQUE_VIOLATION" + else: + error_message = exception_name + + return error_message diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index eb8bc5a8..03027d6f 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -1,4 +1,4 @@ -[meta] +[test_db] host = 192.168.100.126 port = 25432 user = dpme @@ -6,6 +6,15 @@ password = hello.meta12#$ database = dataportal schema = meta +[commercial_db] +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 diff --git a/API-SERVICE/conf/sitemng/config.ini b/API-SERVICE/conf/sitemng/config.ini index 8caa72fd..f0a79869 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 = dataportal +schema = sitemng + +[commercial_db] host = 192.168.100.126 port = 25432 user = dpsi diff --git a/API-SERVICE/safe_start.sh b/API-SERVICE/safe_start.sh index 29615580..fe6650f3 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,9 +49,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} --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 & + 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 e686cca5..484bfd8f 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,13 +14,16 @@ 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 & + 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 57476211f09f6fe0a45d3ae63e4c27d5d06effd4 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 12 Jul 2022 13:28:33 +0900 Subject: [PATCH 136/323] =?UTF-8?q?feat=20:=20common=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 --- API-SERVICE/ApiList/common/addTableColumn.py | 61 ++++++++++ API-SERVICE/ApiList/common/commonDelete.py | 26 +++++ 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 | 29 +++++ API-SERVICE/ApiList/common/createTable.py | 109 ++++++++++++++++++ API-SERVICE/ApiList/common/delTableColumn.py | 39 +++++++ API-SERVICE/ApiList/common/deleteTable.py | 31 +++++ API-SERVICE/conf/common/api_config.ini | 44 +++++++ API-SERVICE/conf/common/config.ini | 19 +++ API-SERVICE/conf/common/logging.conf | 28 +++++ 12 files changed, 472 insertions(+) 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-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py new file mode 100644 index 00000000..3efd6bf1 --- /dev/null +++ b/API-SERVICE/ApiList/common/addTableColumn.py @@ -0,0 +1,61 @@ +from typing import Dict, List +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_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() + + 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};' + 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..f6f29713 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonDelete.py @@ -0,0 +1,26 @@ +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/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..d2ede80f --- /dev/null +++ b/API-SERVICE/ApiList/common/commonUpdate.py @@ -0,0 +1,29 @@ +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 new file mode 100644 index 00000000..416d1c01 --- /dev/null +++ b/API-SERVICE/ApiList/common/createTable.py @@ -0,0 +1,109 @@ +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..35010679 --- /dev/null +++ b/API-SERVICE/conf/common/api_config.ini @@ -0,0 +1,44 @@ +[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 + +[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] +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..70deaf72 --- /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 = dataportal +schema = users,meta,sitemng,board,analysis,sysconfig + +[commercial_db] +host = 192.168.100.126 +port = 25432 +user = dpmanager +password = hello.dp12#$ +database = dataportal +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 + From 1ffd86c06ee650471b3b860ac0aa845d74655ad8 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 13 Jul 2022 12:00:46 +0900 Subject: [PATCH 137/323] =?UTF-8?q?feat=20:=20getCodeInfo=20=ED=8F=AC?= =?UTF-8?q?=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/common/addTableColumn.py | 51 +++++++++++++++++-- API-SERVICE/ApiList/common/createTable.py | 4 +- API-SERVICE/ApiList/sitemng/getCodeGroupId.py | 11 +++- API-SERVICE/conf/common/logging.conf | 2 +- 4 files changed, 59 insertions(+), 9 deletions(-) diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py index 3efd6bf1..186b6297 100644 --- a/API-SERVICE/ApiList/common/addTableColumn.py +++ b/API-SERVICE/ApiList/common/addTableColumn.py @@ -4,7 +4,6 @@ from Utils.CommonUtil import connect_db from Utils.DataBaseUtil import convert_data from pydantic import BaseModel -from starlette.requests import Request class addTableColumn(BaseModel): @@ -13,8 +12,54 @@ class addTableColumn(BaseModel): 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 get_type(data_type, length=None): @@ -39,9 +84,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)};' diff --git a/API-SERVICE/ApiList/common/createTable.py b/API-SERVICE/ApiList/common/createTable.py index 416d1c01..3a6446a6 100644 --- a/API-SERVICE/ApiList/common/createTable.py +++ b/API-SERVICE/ApiList/common/createTable.py @@ -55,9 +55,9 @@ 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) + #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/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeGroupId.py index 61395481..37403c3d 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py +++ b/API-SERVICE/ApiList/sitemng/getCodeGroupId.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] + 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/common/logging.conf b/API-SERVICE/conf/common/logging.conf index b8a39ccf..395206e4 100644 --- a/API-SERVICE/conf/common/logging.conf +++ b/API-SERVICE/conf/common/logging.conf @@ -23,6 +23,6 @@ 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/cbc/DEV/Mobigen/API_DataPortal/Katech/AP_API_Router/API-SERVICE/log/common/common.log', 'a', 20000000, 10) level = INFO From 40181e8e1460e9b43b6696947e8d78acd86a1ce9 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 13 Jul 2022 13:15:17 +0900 Subject: [PATCH 138/323] =?UTF-8?q?fix:=20API,=20=EC=8B=A4=ED=96=89=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=8F=99?= =?UTF-8?q?=EC=9D=BC=20=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiList/sitemng/{getCodeGroupId.py => getCodeInfo.py} | 0 API-SERVICE/conf/sitemng/api_config.ini | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename API-SERVICE/ApiList/sitemng/{getCodeGroupId.py => getCodeInfo.py} (100%) diff --git a/API-SERVICE/ApiList/sitemng/getCodeGroupId.py b/API-SERVICE/ApiList/sitemng/getCodeInfo.py similarity index 100% rename from API-SERVICE/ApiList/sitemng/getCodeGroupId.py rename to API-SERVICE/ApiList/sitemng/getCodeInfo.py diff --git a/API-SERVICE/conf/sitemng/api_config.ini b/API-SERVICE/conf/sitemng/api_config.ini index 194f458b..5625b22f 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 From eeb1169c0f6ac01088240994ba2e15ff9c6b4694 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 15 Jul 2022 14:03:15 +0900 Subject: [PATCH 139/323] =?UTF-8?q?feat=20:=20error=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=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/common/addTableColumn.py | 23 ++++--------------- API-SERVICE/ApiList/common/createTable.py | 17 -------------- API-SERVICE/ApiList/common/delTableColumn.py | 8 +++---- API-SERVICE/ApiList/common/deleteTable.py | 8 +++---- API-SERVICE/ConnectManager/PostgresManager.py | 12 ++++++++++ 5 files changed, 24 insertions(+), 44 deletions(-) diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py index 186b6297..4a1b63fe 100644 --- a/API-SERVICE/ApiList/common/addTableColumn.py +++ b/API-SERVICE/ApiList/common/addTableColumn.py @@ -1,7 +1,7 @@ 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 @@ -62,21 +62,6 @@ class addTableColumn(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 api(add_table_columns: List[addTableColumn]) -> Dict: try: db = connect_db(config.db_info) @@ -95,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/createTable.py b/API-SERVICE/ApiList/common/createTable.py index 3a6446a6..8e92216d 100644 --- a/API-SERVICE/ApiList/common/createTable.py +++ b/API-SERVICE/ApiList/common/createTable.py @@ -36,26 +36,9 @@ 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"]} {info["type"]} {" ".join(info["constraint"])}') 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/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index 30eda8ff..ffce6638 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -1,6 +1,7 @@ import psycopg2 from typing import List, Dict, Tuple, Any from fastapi.logger import logger +from Utils.CommonUtil import get_exception_info from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query @@ -27,6 +28,17 @@ def execute(self, sql: str) -> None: self.conn.commit() logger.info(f'PostgresManager Execute Result. ({sql})') + def multiple_excute(self, sql_list: list): + try: + for sql in sql_list: + self.cursor.execute(sql) + except Exception: + self.conn.rollback() + except_name = get_exception_info() + raise Exception(except_name) + else: + self.conn.commit() + 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] From 79d40cca48830dba11669a676959fc747dd42323 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 15 Jul 2022 15:49:35 +0900 Subject: [PATCH 140/323] =?UTF-8?q?feat=20:=20=EB=8B=A4=EC=A4=91=20Insert?= =?UTF-8?q?=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/ConnectManager/PostgresManager.py | 19 ++++++++++-- .../ApiList/common/commonMutiInsert.py | 30 +++++++++++++++++++ API-SERVICE/ConnectManager/PostgresManager.py | 15 +++++----- API-SERVICE/conf/common/api_config.ini | 5 ++++ 4 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 API-SERVICE/ApiList/common/commonMutiInsert.py diff --git a/API-ROUTER/ConnectManager/PostgresManager.py b/API-ROUTER/ConnectManager/PostgresManager.py index ca14b5ba..ad32fed8 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/PostgresManager.py @@ -23,8 +23,23 @@ def connect(self): 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) diff --git a/API-SERVICE/ApiList/common/commonMutiInsert.py b/API-SERVICE/ApiList/common/commonMutiInsert.py new file mode 100644 index 00000000..307c50db --- /dev/null +++ b/API-SERVICE/ApiList/common/commonMutiInsert.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/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index ffce6638..aee60a04 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -1,7 +1,6 @@ import psycopg2 from typing import List, Dict, Tuple, Any from fastapi.logger import logger -from Utils.CommonUtil import get_exception_info from Utils.DataBaseUtil import make_insert_query, make_update_query, make_delete_query @@ -28,16 +27,16 @@ def execute(self, sql: str) -> None: self.conn.commit() logger.info(f'PostgresManager Execute Result. ({sql})') - def multiple_excute(self, sql_list: list): + def multiple_excute(self, sql_list: list) -> None: try: - for sql in sql_list: + for index, sql in enumerate(sql_list): + logger.info( + f'PostgresManager Multiple Execute. ({index}. {sql})') self.cursor.execute(sql) - except Exception: - self.conn.rollback() - except_name = get_exception_info() - raise Exception(except_name) - else: 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) diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 35010679..6fc3c9e5 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -13,6 +13,11 @@ method = POST url = /portal/api/common/commonInsert sub_dir = common +[commonMutiInsert] +method = POST +url = /portal/api/common/commonMutiInsert +sub_dir = common + [commonUpdate] method = POST url = /portal/api/common/commonUpdate From 1bfa94c6bd2379db25dced95055824d42edf6e57 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 15 Jul 2022 17:26:36 +0900 Subject: [PATCH 141/323] =?UTF-8?q?fix=20:=20common=20api=20config=20?= =?UTF-8?q?=EC=98=A4=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 --- .../ApiList/common/{commonMutiInsert.py => commonMultInsert.py} | 0 API-SERVICE/conf/common/api_config.ini | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename API-SERVICE/ApiList/common/{commonMutiInsert.py => commonMultInsert.py} (100%) diff --git a/API-SERVICE/ApiList/common/commonMutiInsert.py b/API-SERVICE/ApiList/common/commonMultInsert.py similarity index 100% rename from API-SERVICE/ApiList/common/commonMutiInsert.py rename to API-SERVICE/ApiList/common/commonMultInsert.py diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 6fc3c9e5..f7a482dc 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -15,7 +15,7 @@ sub_dir = common [commonMutiInsert] method = POST -url = /portal/api/common/commonMutiInsert +url = /portal/api/common/commonMultiInsert sub_dir = common [commonUpdate] From 3bc6e72bdf9072a189de2c099baed4ecf779e723 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 18 Jul 2022 08:32:15 +0900 Subject: [PATCH 142/323] =?UTF-8?q?feat=20:=20config=20=EC=98=A4=ED=83=80?= =?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 --- .../common/{commonMultInsert.py => commonMultiInsert.py} | 0 API-SERVICE/conf/common/api_config.ini | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename API-SERVICE/ApiList/common/{commonMultInsert.py => commonMultiInsert.py} (100%) diff --git a/API-SERVICE/ApiList/common/commonMultInsert.py b/API-SERVICE/ApiList/common/commonMultiInsert.py similarity index 100% rename from API-SERVICE/ApiList/common/commonMultInsert.py rename to API-SERVICE/ApiList/common/commonMultiInsert.py diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index f7a482dc..ac5a6eea 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -13,7 +13,7 @@ method = POST url = /portal/api/common/commonInsert sub_dir = common -[commonMutiInsert] +[commonMultiInsert] method = POST url = /portal/api/common/commonMultiInsert sub_dir = common From 129ab954cdf6dda47e5f4e5dd3b4e9d6b53faa72 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 18 Jul 2022 10:16:17 +0900 Subject: [PATCH 143/323] =?UTF-8?q?feat=20:=20getCodeinfo=20=EC=B6=9C?= =?UTF-8?q?=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 --- .../ApiList/common/commonMultiExcute.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 API-SERVICE/ApiList/common/commonMultiExcute.py diff --git a/API-SERVICE/ApiList/common/commonMultiExcute.py b/API-SERVICE/ApiList/common/commonMultiExcute.py new file mode 100644 index 00000000..51cb8f20 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonMultiExcute.py @@ -0,0 +1,32 @@ +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 commonMultiExcute(BaseModel): + method: str + table_nm: str + data: Dict + + +def api(excute_list: List[commonMultiExcute]) -> Dict: + insert_query_list = [] + for excute in excute_list: + pass + #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 From 672c24c452eb22af92261dffb555864aeb0403c0 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 18 Jul 2022 10:20:28 +0900 Subject: [PATCH 144/323] =?UTF-8?q?feat=20:=20getCodeInfo=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=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/sitemng/getCodeInfo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/sitemng/getCodeInfo.py b/API-SERVICE/ApiList/sitemng/getCodeInfo.py index 37403c3d..e5cb639e 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeInfo.py +++ b/API-SERVICE/ApiList/sitemng/getCodeInfo.py @@ -5,7 +5,7 @@ def api(groupId) -> Dict: - get_code_info_query = f'SELECT code_id, code_nm \ + get_code_info_query = f'SELECT code_id, code_nm, data_1, data_2 \ FROM tb_code_detail \ WHERE code_group_id = {convert_data(groupId)};' try: @@ -17,7 +17,7 @@ def api(groupId) -> Dict: else: code_info = [] if len(code_list[0]): - code_info = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} + code_info = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"], "data_1": code_detail["data_1"], "data_2": code_detail["data_2"]} for code_detail in code_list[0]] body = {"list": code_info} From 0d0323766e3fa107d5d25f7b1b8e0a0ca06005c4 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 19 Jul 2022 14:14:50 +0900 Subject: [PATCH 145/323] =?UTF-8?q?feat=20:=20commonSelect=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 --- .../ApiList/common/commonMultiExcute.py | 36 +++++++--- API-SERVICE/ApiList/common/commonSelect.py | 72 ++++++++++++++++--- .../ApiList/common/commonSelect_origin.py | 25 +++++++ API-SERVICE/conf/common/api_config.ini | 7 +- 4 files changed, 121 insertions(+), 19 deletions(-) create mode 100644 API-SERVICE/ApiList/common/commonSelect_origin.py diff --git a/API-SERVICE/ApiList/common/commonMultiExcute.py b/API-SERVICE/ApiList/common/commonMultiExcute.py index 51cb8f20..912a233b 100644 --- a/API-SERVICE/ApiList/common/commonMultiExcute.py +++ b/API-SERVICE/ApiList/common/commonMultiExcute.py @@ -1,4 +1,4 @@ -from typing import Dict, List +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 @@ -9,20 +9,36 @@ class commonMultiExcute(BaseModel): method: str table_nm: str data: Dict + key: Optional[str] = None -def api(excute_list: List[commonMultiExcute]) -> Dict: - insert_query_list = [] - for excute in excute_list: - pass - #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});') +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(insert_query_list) + db.multiple_excute(query_list) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} 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/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index ac5a6eea..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 @@ -18,6 +18,11 @@ 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 0c2a52b5d5cb2330ba08071e208c84a78769b8c6 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 20 Jul 2022 10:25:27 +0900 Subject: [PATCH 146/323] =?UTF-8?q?feat=20:=20commonExcute=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 --- .../common/{commonMultiExcute.py => commonExcute.py} | 6 +++--- API-SERVICE/conf/common/api_config.ini | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename API-SERVICE/ApiList/common/{commonMultiExcute.py => commonExcute.py} (91%) diff --git a/API-SERVICE/ApiList/common/commonMultiExcute.py b/API-SERVICE/ApiList/common/commonExcute.py similarity index 91% rename from API-SERVICE/ApiList/common/commonMultiExcute.py rename to API-SERVICE/ApiList/common/commonExcute.py index 912a233b..2f286780 100644 --- a/API-SERVICE/ApiList/common/commonMultiExcute.py +++ b/API-SERVICE/ApiList/common/commonExcute.py @@ -5,14 +5,14 @@ from pydantic import BaseModel -class commonMultiExcute(BaseModel): +class commonExcute(BaseModel): method: str table_nm: str data: Dict key: Optional[str] = None -def make_query(excute: commonMultiExcute): +def make_query(excute: commonExcute): method = excute.method query = None if method == "INSERT": @@ -31,7 +31,7 @@ def make_query(excute: commonMultiExcute): return query -def api(excute_list: List[commonMultiExcute]) -> Dict: +def api(excute_list: List[commonExcute]) -> Dict: query_list = [] try: for excute in excute_list: diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 9a78de2e..36ec9a17 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -18,9 +18,9 @@ method = POST url = /portal/api/common/commonMultiInsert sub_dir = common -[commonMultiExcute] +[commonExcute] method = POST -url = /portal/api/common/commonMultiExcute +url = /portal/api/common/commonExcute sub_dir = common [commonUpdate] From ef5f742ceb32fc3c25e31861d3c96da1a3998ba1 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 26 Jul 2022 13:24:30 +0900 Subject: [PATCH 147/323] =?UTF-8?q?feat=20:=20comon=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-SERVICE/ApiList/common/commonExcute.py | 2 +- API-SERVICE/ApiList/common/commonSelect.py | 27 +++++++++++++++++++++- API-SERVICE/Utils/DataBaseUtil.py | 4 +++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonExcute.py b/API-SERVICE/ApiList/common/commonExcute.py index 2f286780..6431cdc1 100644 --- a/API-SERVICE/ApiList/common/commonExcute.py +++ b/API-SERVICE/ApiList/common/commonExcute.py @@ -1,8 +1,8 @@ from typing import Dict, List, Optional +from pydantic import BaseModel 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 commonExcute(BaseModel): diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 91227f0d..61199f94 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -15,6 +15,7 @@ class whereInfo(BaseModel): table_nm: str key: str value: str + compare_op: str op: Optional[str] = "" @@ -38,6 +39,24 @@ 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_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 @@ -46,7 +65,13 @@ def make_select_query(select_info: commonMatchSelect): 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 info.compare_op == "IN" or info.compare_op == "NOT IN": + value_list = ", ".join( + map(convert_data, info.value.split(","))) + value = f'( {value_list} )' + else: + value = convert_data(info.value) + where = f'{where} {info.op} {info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}' if order_info: order = f'ORDER BY {order_info.table_nm}.{order_info.key} {order_info.order}' if page_info: diff --git a/API-SERVICE/Utils/DataBaseUtil.py b/API-SERVICE/Utils/DataBaseUtil.py index a19a3942..9ce183e0 100644 --- a/API-SERVICE/Utils/DataBaseUtil.py +++ b/API-SERVICE/Utils/DataBaseUtil.py @@ -3,7 +3,9 @@ def convert_data(data) -> str: - return f'\'{str(data)}\'' + if data == "now()" or data == "NOW()": + return data + return f'\'{str(data).strip()}\'' def make_table_info_query(db: str, table: str) -> str: From f2ef998b432c3c628919e1c73328a4fa8c305a00 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 27 Jul 2022 11:21:25 +0900 Subject: [PATCH 148/323] =?UTF-8?q?feat=20:=20connecion=20pool,=20commonAP?= =?UTF-8?q?I=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/commonSelect.py | 38 ++++++++++++++----- API-SERVICE/ApiService/ApiServiceConfig.py | 2 + API-SERVICE/ConnectManager/PostgresManager.py | 18 ++++----- API-SERVICE/Utils/CommonUtil.py | 18 ++++++--- 4 files changed, 51 insertions(+), 25 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 61199f94..0ed5511b 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -11,12 +11,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): @@ -57,27 +66,38 @@ def convert_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: - if info.compare_op == "IN" or info.compare_op == "NOT IN": - value_list = ", ".join( - map(convert_data, info.value.split(","))) - value = f'( {value_list} )' + 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: - value = convert_data(info.value) - where = f'{where} {info.op} {info.table_nm}.{info.key} {convert_compare_op(info.compare_op)} {value}' + 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 + return f'SELECT * FROM {select_info.table_nm} {join} {where} {order} {page};' def api(select_info: commonMatchSelect) -> Dict: diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 2b83bd10..b56e6ed1 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -1,4 +1,5 @@ from typing import Dict, List +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 aee60a04..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 @@ -72,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 0864f231..d3856b77 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -9,6 +9,7 @@ from ConnectManager import PostgresManager from retry import retry import psycopg2 +from psycopg2 import pool import jwt import sys import traceback @@ -61,15 +62,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_info): + db = PostgresManager() return db From 5cb8e219a01fb7f89fd82b517ad938a27d2cadbd Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 28 Jul 2022 09:10:38 +0900 Subject: [PATCH 149/323] =?UTF-8?q?feat=20:=20commonSelect=20totalcount=20?= =?UTF-8?q?=EC=82=B0=EC=B6=9C=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 --- API-SERVICE/ApiList/common/commonSelect.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 0ed5511b..baedc73c 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -97,22 +97,22 @@ def make_select_query(select_info: commonMatchSelect): 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})' - return 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 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) + get_query, total_cnt_query = make_select_query(select_info) logger.info(f'Get Query : {get_query}') try: db = connect_db(config.db_info) 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} From 338e8c1a67b00a873862016b9b8aa57187e30b55 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 1 Aug 2022 17:12:43 +0900 Subject: [PATCH 150/323] =?UTF-8?q?feat=20:=20comonExcute=20where=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=202=EA=B0=9C=20=EC=9D=B4=EC=83=81=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=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/common/commonExcute.py | 11 ++++++++--- API-SERVICE/ApiList/common/commonSelect.py | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonExcute.py b/API-SERVICE/ApiList/common/commonExcute.py index 6431cdc1..e1f11b3f 100644 --- a/API-SERVICE/ApiList/common/commonExcute.py +++ b/API-SERVICE/ApiList/common/commonExcute.py @@ -9,11 +9,12 @@ class commonExcute(BaseModel): method: str table_nm: str data: Dict - key: Optional[str] = None + key: Optional[List[str]] = None def make_query(excute: commonExcute): method = excute.method + where = [] query = None if method == "INSERT": columns = ", ".join(excute.data.keys()) @@ -22,10 +23,14 @@ def make_query(excute: commonExcute): 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 diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index baedc73c..c78eaad9 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -104,7 +104,7 @@ def make_select_query(select_info: commonMatchSelect): 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)});" + 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}') From 358afb69c406d18c3b0fdec2788cdcb9fee7df77 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 2 Aug 2022 14:44:52 +0900 Subject: [PATCH 151/323] =?UTF-8?q?feat:=20insertBizMetaData=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=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 | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py index 9fbb21ba..60b61cbd 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -7,14 +7,11 @@ 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 @@ -28,6 +25,17 @@ class insertBizMetaData(BaseModel): updt_nxt_date: str data_nm: str data_desc: str + adm_dep: str + ltst_amd_dt: str + prv_shap: str + adm_dep_hp: str + lang: str + file_type: str + updt_date: str + copyright: str + license: str + render_url: str + file_read_authority: str def api(biz_meta_data: insertBizMetaData) -> Dict: From 2d3d6293debb3f90671327bb5faf611c10f19b59 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 3 Aug 2022 16:24:36 +0900 Subject: [PATCH 152/323] =?UTF-8?q?feat:=20insertBizMetaData=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=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/insertBizMetaData.py | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py index 60b61cbd..2014c01b 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -7,35 +7,28 @@ class insertBizMetaData(BaseModel): - rqt_dep: str + adm_dep: str + adm_dep_hp: str admr_nm: str - rqt_nm: str + copyright: str ctgry: str - reg_date: str - file_size: str - open_scope: str - data_shap: str - src_sys: str - src_url: str - kywrd: str + data_desc: str + data_nm: str data_prv_desk: str + data_shap: 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 - adm_dep: str - ltst_amd_dt: str - prv_shap: str - adm_dep_hp: str - lang: str + file_read_authority: str file_type: str - updt_date: str - copyright: str + kywrd: str + lang: str license: str - render_url: str - file_read_authority: str + reg_date: str + retv_num: str + rqt_dep: str + src_sys: str + src_url: str + updt_date: str + updt_nxt_date: str def api(biz_meta_data: insertBizMetaData) -> Dict: From 266ad1d084c684e6beb503710f2bd2b3b7bd0051 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 4 Aug 2022 10:31:36 +0900 Subject: [PATCH 153/323] =?UTF-8?q?feat=20:=20commonExcute=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B3=B4=EC=99=84(=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EC=8B=9C=20=EC=B9=B4=EC=9A=B4=ED=8A=B8=20=EC=A6=9D?= =?UTF-8?q?=EA=B0=80=20=EA=B4=80=EB=A0=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/Utils/DataBaseUtil.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/API-SERVICE/Utils/DataBaseUtil.py b/API-SERVICE/Utils/DataBaseUtil.py index 9ce183e0..e275448a 100644 --- a/API-SERVICE/Utils/DataBaseUtil.py +++ b/API-SERVICE/Utils/DataBaseUtil.py @@ -5,6 +5,8 @@ def convert_data(data) -> str: if data == "now()" or data == "NOW()": return data + if data[0] == "`": + return data[1:] return f'\'{str(data).strip()}\'' From 327259263dce5767e4a36a4461287a73c9742bcc Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:17:56 +0900 Subject: [PATCH 154/323] =?UTF-8?q?fix=20:=20convert=5Fdata=20=EC=9D=B4?= =?UTF-8?q?=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/Utils/DataBaseUtil.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/Utils/DataBaseUtil.py b/API-SERVICE/Utils/DataBaseUtil.py index e275448a..711a3c87 100644 --- a/API-SERVICE/Utils/DataBaseUtil.py +++ b/API-SERVICE/Utils/DataBaseUtil.py @@ -3,11 +3,13 @@ def convert_data(data) -> str: - if data == "now()" or data == "NOW()": - return data - if data[0] == "`": - return data[1:] - return f'\'{str(data).strip()}\'' + 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: From 94b67adcbaf3ac2a806d7b03bc5e52fc56aeea45 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 9 Aug 2022 15:27:17 +0900 Subject: [PATCH 155/323] =?UTF-8?q?feat=20:=20timezone=20=EC=84=A4?= =?UTF-8?q?=EC=A0=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/common/commonExcute.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/API-SERVICE/ApiList/common/commonExcute.py b/API-SERVICE/ApiList/common/commonExcute.py index e1f11b3f..4ee0ee7b 100644 --- a/API-SERVICE/ApiList/common/commonExcute.py +++ b/API-SERVICE/ApiList/common/commonExcute.py @@ -43,6 +43,8 @@ def api(excute_list: List[commonExcute]) -> Dict: query_list.append(make_query(excute)) db = connect_db(config.db_info) + 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() From 6e145401b9365580a62bd4a435103ab37bb1b860 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 16 Aug 2022 15:23:37 +0900 Subject: [PATCH 156/323] =?UTF-8?q?[AIPLATFORM-483]=20feat=20:=20db=20relo?= =?UTF-8?q?ad=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/ApiRoute/ApiRoute.py | 10 ++++++++++ API-ROUTER/Utils/CommonUtil.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 9aeae07e..2e431364 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -1,3 +1,4 @@ +from cgitb import reset from fastapi.logger import logger from typing import Dict, List import importlib.util @@ -65,6 +66,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(config.db_info) api_info, _ = db.select('SELECT * FROM tb_api_info;') @@ -174,6 +178,12 @@ 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: diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index e0ae3b76..dfa5bf96 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -111,4 +111,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 From d55fd34898dcac4aa746b2762063cb1f433627da Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:30:12 +0900 Subject: [PATCH 157/323] =?UTF-8?q?fix=20:=20=20=EC=98=A4=ED=83=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 --- .../ApiList/common/{commonExcute.py => commonExecute.py} | 6 +++--- API-SERVICE/conf/common/api_config.ini | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename API-SERVICE/ApiList/common/{commonExcute.py => commonExecute.py} (93%) diff --git a/API-SERVICE/ApiList/common/commonExcute.py b/API-SERVICE/ApiList/common/commonExecute.py similarity index 93% rename from API-SERVICE/ApiList/common/commonExcute.py rename to API-SERVICE/ApiList/common/commonExecute.py index 4ee0ee7b..ac05f176 100644 --- a/API-SERVICE/ApiList/common/commonExcute.py +++ b/API-SERVICE/ApiList/common/commonExecute.py @@ -5,14 +5,14 @@ from Utils.DataBaseUtil import convert_data -class commonExcute(BaseModel): +class commonExecute(BaseModel): method: str table_nm: str data: Dict key: Optional[List[str]] = None -def make_query(excute: commonExcute): +def make_query(excute: commonExecute): method = excute.method where = [] query = None @@ -36,7 +36,7 @@ def make_query(excute: commonExcute): return query -def api(excute_list: List[commonExcute]) -> Dict: +def api(excute_list: List[commonExecute]) -> Dict: query_list = [] try: for excute in excute_list: diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 36ec9a17..6aea9c45 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -18,9 +18,9 @@ method = POST url = /portal/api/common/commonMultiInsert sub_dir = common -[commonExcute] +[commonExecute] method = POST -url = /portal/api/common/commonExcute +url = /portal/api/common/commonExecute sub_dir = common [commonUpdate] From a85c7c87939c6f9c8a2e5211d1119b28ba578692 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 18 Aug 2022 15:06:05 +0900 Subject: [PATCH 158/323] =?UTF-8?q?[AIPLATFORM-432]=20feat=20:=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-ROUTER/ApiList/service/TEST_1.py | 2 - API-ROUTER/ApiList/service/TEST_2.py | 2 - API-ROUTER/ApiRoute/ApiRoute.py | 108 ++++++------------ API-ROUTER/ApiRoute/ApiRouteConfig.py | 2 + API-ROUTER/ConnectManager/PostgresManager.py | 14 +-- API-ROUTER/Utils/CommonUtil.py | 35 +++--- API-ROUTER/Utils/RouteUtil.py | 21 ++-- API-SERVICE/ApiList/common/addTableColumn.py | 2 +- API-SERVICE/ApiList/common/commonDelete.py | 2 +- API-SERVICE/ApiList/common/commonExecute.py | 2 +- API-SERVICE/ApiList/common/commonInsert.py | 2 +- .../ApiList/common/commonMultiInsert.py | 2 +- API-SERVICE/ApiList/common/commonSelect.py | 2 +- .../ApiList/common/commonSelectForPaging.py | 2 +- .../ApiList/common/commonSelect_origin.py | 2 +- API-SERVICE/ApiList/common/commonUpdate.py | 2 +- API-SERVICE/ApiList/common/createTable.py | 2 +- API-SERVICE/ApiList/common/delTableColumn.py | 2 +- API-SERVICE/ApiList/common/deleteTable.py | 2 +- API-SERVICE/ApiList/meta/addChildCategory.py | 2 +- .../ApiList/meta/deleteUseBoardData.py | 2 +- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 2 +- API-SERVICE/ApiList/meta/getBizMetaList.py | 5 +- .../ApiList/meta/getBizMetaListByIds.py | 7 +- API-SERVICE/ApiList/meta/getCategoryList.py | 2 +- API-SERVICE/ApiList/meta/getCategoryTree.py | 2 +- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 2 +- .../ApiList/meta/getUseBoardDataDetail.py | 2 +- .../ApiList/meta/getUseBoardDataList.py | 2 +- API-SERVICE/ApiList/meta/insertBizMeta.py | 2 +- API-SERVICE/ApiList/meta/insertBizMetaData.py | 2 +- API-SERVICE/ApiList/meta/insertMetaMap.py | 2 +- API-SERVICE/ApiList/meta/insertMetaName.py | 2 +- .../ApiList/meta/insertUseBoardData.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 +- .../ApiList/meta/updateUseBoardData.py | 2 +- API-SERVICE/ApiList/meta/useMetaNameList.py | 2 +- API-SERVICE/ApiList/sitemng/getCodeInfo.py | 2 +- API-SERVICE/ApiList/sitemng/getCodeList.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 2 +- 44 files changed, 116 insertions(+), 150 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 2e431364..87f476d1 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -1,11 +1,10 @@ -from cgitb import reset 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, 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 @@ -69,7 +68,7 @@ def set_route(self) -> None: self.router.add_api_route( "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"]) - db = connect_db(config.db_info) + db = connect_db() api_info, _ = db.select('SELECT * FROM tb_api_info;') config.api_server_info, _ = db.select( @@ -97,13 +96,11 @@ 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: - 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;') @@ -117,13 +114,11 @@ 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: - 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,14 +128,12 @@ 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: - 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,14 +141,12 @@ 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: - 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,14 +154,12 @@ 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: - 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;') @@ -185,19 +174,16 @@ def reload_api(self): return result 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;') 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) @@ -209,7 +195,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;') @@ -221,10 +207,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( @@ -235,16 +219,14 @@ 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( 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) @@ -254,7 +236,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 = [] @@ -278,10 +260,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": ""} @@ -290,7 +270,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 = [] @@ -318,10 +298,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": ""} @@ -330,16 +308,12 @@ 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)};') - 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": ""} @@ -351,25 +325,19 @@ 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)}") headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) - logger.info(f'Request Headers : {headers}') - - user_info = get_token_info(request.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] 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/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 ad32fed8..aef61edc 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/PostgresManager.py @@ -2,23 +2,17 @@ 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 diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index dfa5bf96..47351c6d 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 @@ -36,7 +35,6 @@ def get_config(config_name: str): return ano_cfg - def parser_params() -> Any: parser=argparse.ArgumentParser() parser.add_argument("--host", type = str, default = "127.0.0.1") @@ -45,7 +43,6 @@ 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) #Path(os.getcwd()).parent @@ -55,23 +52,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 +86,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,14 +97,13 @@ 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) - 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: for delete in delete_header: 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) diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py index 4a1b63fe..d85b81d6 100644 --- a/API-SERVICE/ApiList/common/addTableColumn.py +++ b/API-SERVICE/ApiList/common/addTableColumn.py @@ -64,7 +64,7 @@ class addTableColumn(BaseModel): def api(add_table_columns: List[addTableColumn]) -> Dict: try: - db = connect_db(config.db_info) + db = connect_db() for add_table_column in add_table_columns: table_name = add_table_column.table_nm.lower() diff --git a/API-SERVICE/ApiList/common/commonDelete.py b/API-SERVICE/ApiList/common/commonDelete.py index f6f29713..f2cf8134 100644 --- a/API-SERVICE/ApiList/common/commonDelete.py +++ b/API-SERVICE/ApiList/common/commonDelete.py @@ -15,7 +15,7 @@ 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 = connect_db() db.execute(delete_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/common/commonExecute.py b/API-SERVICE/ApiList/common/commonExecute.py index ac05f176..0097c26f 100644 --- a/API-SERVICE/ApiList/common/commonExecute.py +++ b/API-SERVICE/ApiList/common/commonExecute.py @@ -42,7 +42,7 @@ def api(excute_list: List[commonExecute]) -> Dict: 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) diff --git a/API-SERVICE/ApiList/common/commonInsert.py b/API-SERVICE/ApiList/common/commonInsert.py index b2703ec0..21ac42f8 100644 --- a/API-SERVICE/ApiList/common/commonInsert.py +++ b/API-SERVICE/ApiList/common/commonInsert.py @@ -16,7 +16,7 @@ def api(common: commonInsert) -> Dict: insert_query = f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(insert_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/common/commonMultiInsert.py b/API-SERVICE/ApiList/common/commonMultiInsert.py index 307c50db..f00079b3 100644 --- a/API-SERVICE/ApiList/common/commonMultiInsert.py +++ b/API-SERVICE/ApiList/common/commonMultiInsert.py @@ -19,7 +19,7 @@ def api(common_list: List[commonMultiInsert]) -> Dict: f'INSERT INTO {common.table_nm} ({columns}) VALUES ({values});') try: - db = connect_db(config.db_info) + db = connect_db() db.multiple_excute(insert_query_list) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index c78eaad9..ff715533 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -109,7 +109,7 @@ def api(select_info: commonMatchSelect) -> Dict: 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 = db.select(total_cnt_query) diff --git a/API-SERVICE/ApiList/common/commonSelectForPaging.py b/API-SERVICE/ApiList/common/commonSelectForPaging.py index 1c3ac9aa..180d7ca9 100644 --- a/API-SERVICE/ApiList/common/commonSelectForPaging.py +++ b/API-SERVICE/ApiList/common/commonSelectForPaging.py @@ -17,7 +17,7 @@ def api(table_nm: str, perPage: int, curPage: int) -> Dict: total_cnt_query = f"SELECT count(*) AS totalCount FROM {table_nm};" try: - db = connect_db(config.db_info) + db = connect_db() use_data, _ = db.select(get_query) total_cnt = db.select(total_cnt_query) except Exception: diff --git a/API-SERVICE/ApiList/common/commonSelect_origin.py b/API-SERVICE/ApiList/common/commonSelect_origin.py index 3bdc7505..7ed77c9c 100644 --- a/API-SERVICE/ApiList/common/commonSelect_origin.py +++ b/API-SERVICE/ApiList/common/commonSelect_origin.py @@ -10,7 +10,7 @@ def api(table_nm: str) -> Dict: WHERE table_id = (SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_nm)});" try: - db = connect_db(config.db_info) + db = connect_db() use_data, _ = db.select(get_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/common/commonUpdate.py b/API-SERVICE/ApiList/common/commonUpdate.py index d2ede80f..80fe158c 100644 --- a/API-SERVICE/ApiList/common/commonUpdate.py +++ b/API-SERVICE/ApiList/common/commonUpdate.py @@ -18,7 +18,7 @@ def api(common: commonUpdate) -> Dict: WHERE {common.key} = {convert_data(common.data.get(common.key))};' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(update_query) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/common/createTable.py b/API-SERVICE/ApiList/common/createTable.py index 8e92216d..6b15c8cf 100644 --- a/API-SERVICE/ApiList/common/createTable.py +++ b/API-SERVICE/ApiList/common/createTable.py @@ -70,7 +70,7 @@ def api(create_table: createTable) -> Dict: table_name = create_table.table_nm.lower() try: - db = connect_db(config.db_info) + db = connect_db() ddl = make_ddl(category, table_name, default_info) db.execute(f"DROP TABLE IF EXISTS {table_name}") db.execute(ddl) diff --git a/API-SERVICE/ApiList/common/delTableColumn.py b/API-SERVICE/ApiList/common/delTableColumn.py index 3f10cf8d..8f0f4bed 100644 --- a/API-SERVICE/ApiList/common/delTableColumn.py +++ b/API-SERVICE/ApiList/common/delTableColumn.py @@ -20,7 +20,7 @@ def api(del_table_column: delTableColumn) -> Dict: del_column_query = f'ALTER TABLE {table_name} DROP {del_table_column.eng_nm};' try: - db = connect_db(config.db_info) + db = connect_db() db.execute(del_column_query) get_table_id_query = f'SELECT id FROM tb_table_list WHERE table_nm = {convert_data(table_name)};' diff --git a/API-SERVICE/ApiList/common/deleteTable.py b/API-SERVICE/ApiList/common/deleteTable.py index 12059f6b..ceb7fd15 100644 --- a/API-SERVICE/ApiList/common/deleteTable.py +++ b/API-SERVICE/ApiList/common/deleteTable.py @@ -19,7 +19,7 @@ def api(delete_table: deleteTable) -> Dict: 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 = connect_db() db.execute(drop_query) db.execute(delete_board_name) except Exception: diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 40f4bc3e..38b4a73f 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -16,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..d81286a0 100644 --- a/API-SERVICE/ApiList/meta/deleteUseBoardData.py +++ b/API-SERVICE/ApiList/meta/deleteUseBoardData.py @@ -13,7 +13,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..1d6a8adf 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -9,7 +9,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/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py index f46d87bf..bbe0324b 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getBizMetaList.py @@ -14,7 +14,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 = [] @@ -45,7 +45,8 @@ def api(perPage: int, 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 diff --git a/API-SERVICE/ApiList/meta/getBizMetaListByIds.py b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py index 6bf4dbef..6cece1ca 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaListByIds.py +++ b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py @@ -9,16 +9,17 @@ def api(datasetIdList: str) -> Dict: v_meta_wrap_query = 'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id in ({0})' try: - db = connect_db(config.db_info) + db = connect_db() dataset_id_list = ','.join( - [convert_data(biz_dataset_id) for biz_dataset_id in datasetIdList.split(",")] + [convert_data(biz_dataset_id) + for biz_dataset_id in datasetIdList.split(",")] ) meta_wrap = db.select(v_meta_wrap_query.format(dataset_id_list)) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - result = make_res_msg(1,"",meta_wrap[0],[]) + result = make_res_msg(1, "", meta_wrap[0], []) result["data"].pop("header") result["data"]["list"] = result["data"]["body"] del result["data"]["body"] diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index a9f20ff2..afcbfea4 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -7,7 +7,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..e60aa7cf 100644 --- a/API-SERVICE/ApiList/meta/getCategoryTree.py +++ b/API-SERVICE/ApiList/meta/getCategoryTree.py @@ -7,7 +7,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 0ff31b59..3b3d7a2b 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -11,7 +11,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..7166f60a 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -10,7 +10,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 cde092e2..7606d1b3 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataList.py @@ -9,7 +9,7 @@ def api() -> 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/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index ca0c2248..f739eca4 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -12,7 +12,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 2014c01b..2418798f 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -36,7 +36,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 0a1d8ea8..023465fa 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -36,7 +36,7 @@ def api(insert: NmIdList) -> Dict: WHERE item_id IS NOT NULL" 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 dfb03560..e3036f0b 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -24,7 +24,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/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index 0fde493b..f91f8a66 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -18,7 +18,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..542c94af 100644 --- a/API-SERVICE/ApiList/meta/metaMapList.py +++ b/API-SERVICE/ApiList/meta/metaMapList.py @@ -15,7 +15,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..a1fea5f3 100644 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ b/API-SERVICE/ApiList/meta/metaNameList.py @@ -28,7 +28,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..fb12a4d5 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -12,7 +12,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 e0c331fa..b053ed26 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -18,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..92dc2e22 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -22,7 +22,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..d97b9d2d 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -18,7 +18,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 be09aece..27f28409 100644 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ b/API-SERVICE/ApiList/meta/useMetaNameList.py @@ -22,7 +22,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 as err: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/sitemng/getCodeInfo.py b/API-SERVICE/ApiList/sitemng/getCodeInfo.py index e5cb639e..11024c51 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeInfo.py +++ b/API-SERVICE/ApiList/sitemng/getCodeInfo.py @@ -9,7 +9,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() diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index 6a8109ab..e41d94a6 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -15,7 +15,7 @@ def api(perPage: int, code_list_query = "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM tb_code_detail" try: - db = connect_db(config.db_info) + db = connect_db() common_condition = f" WHERE code_group_id = {convert_data(gropId)}" code_list_query = code_list_query + common_condition total_cnt_query = total_cnt_query + common_condition diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index d3856b77..7e760287 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -76,7 +76,7 @@ def make_connection_pool(db_info): return conn_pool -def connect_db(db_info): +def connect_db(): db = PostgresManager() return db From 75a556743f04e20160a480dec2e7cc69fb4620f8 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Fri, 19 Aug 2022 09:17:52 +0900 Subject: [PATCH 159/323] =?UTF-8?q?feat=20:=20db=20pool=20=EC=9D=B4?= =?UTF-8?q?=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/ConnectManager/PostgresManager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/API-ROUTER/ConnectManager/PostgresManager.py b/API-ROUTER/ConnectManager/PostgresManager.py index aef61edc..7dae8f9e 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/PostgresManager.py @@ -68,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) From 30bc2d1961e545020451f910ab7ddcb8bc69ee1d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 29 Aug 2022 14:39:01 +0900 Subject: [PATCH 160/323] =?UTF-8?q?fix=20:=20=EB=B2=84=EA=B7=B8=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 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 87f476d1..f2732448 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -178,7 +178,7 @@ def get_api_list(self) -> Dict: 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 +197,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"]}') From ac088216527b751f93f30306d1085a6bb81cf186 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 4 Aug 2022 14:37:11 +0900 Subject: [PATCH 161/323] =?UTF-8?q?feat:=20elasticsearch=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiList/meta/getElsBizMetaDetail.py | 0 API-SERVICE/ApiList/meta/getElsBizMetaList.py | 0 API-SERVICE/ApiList/meta/insertElsBizMeta.py | 0 API-SERVICE/ApiList/meta/updateElsBizMeta.py | 0 API-SERVICE/Utils/ESUtils.py | 36 +++++++++++++++++++ API-SERVICE/Utils/__init__.py | 3 +- 6 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/meta/getElsBizMetaDetail.py create mode 100644 API-SERVICE/ApiList/meta/getElsBizMetaList.py create mode 100644 API-SERVICE/ApiList/meta/insertElsBizMeta.py create mode 100644 API-SERVICE/ApiList/meta/updateElsBizMeta.py create mode 100644 API-SERVICE/Utils/ESUtils.py diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaDetail.py b/API-SERVICE/ApiList/meta/getElsBizMetaDetail.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ApiList/meta/insertElsBizMeta.py b/API-SERVICE/ApiList/meta/insertElsBizMeta.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ApiList/meta/updateElsBizMeta.py b/API-SERVICE/ApiList/meta/updateElsBizMeta.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py new file mode 100644 index 00000000..746985c1 --- /dev/null +++ b/API-SERVICE/Utils/ESUtils.py @@ -0,0 +1,36 @@ +from elasticsearch import Elasticsearch +from pydantic import BaseModel + + +class ESBizMeta(BaseModel): + biz_dataset_id: str + 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 connect_es(host: str = "localhost",port: str = "9200"): + es = Elasticsearch(f"http://{host}:{port}") + return es + + +class ESSearch: + pass diff --git a/API-SERVICE/Utils/__init__.py b/API-SERVICE/Utils/__init__.py index 71791818..c0ef5313 100644 --- a/API-SERVICE/Utils/__init__.py +++ b/API-SERVICE/Utils/__init__.py @@ -1,2 +1,3 @@ from .CommonUtil import * -from .DataBaseUtil import * \ No newline at end of file +from .DataBaseUtil import * +from .ESUtils import * \ No newline at end of file From 8a65857f1da55b14e0fba26b92b0693c882043c0 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 8 Aug 2022 14:59:51 +0900 Subject: [PATCH 162/323] =?UTF-8?q?feat:=20elasticsearch=EC=97=90=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=9E=85=EB=A0=A5=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/insertElsBizMeta.py | 47 ++++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 31 +++++++++++-- 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertElsBizMeta.py b/API-SERVICE/ApiList/meta/insertElsBizMeta.py index e69de29b..d209ba97 100644 --- a/API-SERVICE/ApiList/meta/insertElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertElsBizMeta.py @@ -0,0 +1,47 @@ +import uuid +from typing import Dict +from Utils.CommonUtil import get_exception_info +from pydantic import BaseModel +from Utils.ESUtils import connect_es + + +class BizMeta(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: BizMeta) -> Dict: + uid = uuid.uuid4() + index = "biz_meta" + try: + es = connect_es() + + biz_meta_data = biz_meta_data.dict() + biz_meta_data["biz_dataset_id"] = uid + es.index(index=index,body=biz_meta_data) + + 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 58a021f1..f3cc6ad4 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -99,11 +99,36 @@ url = /portal/api/meta/insertBizMetaData sub_dir = meta [getCategoryTree] -method = POST +method = GET url = /portal/api/meta/getCategoryTree sub_dir = meta -[getBizMetaListByIds] +[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 + +[insertElsBizMeta] +method = POST +url = /portal/api/meta/insertElsBizMeta +sub_dir = meta + +[getElsBizMetaList] method = GET -url = /portal/api/meta/getBizMetaListByIds +url = /portal/api/meta/getElsBizMetaList sub_dir = meta \ No newline at end of file From 34d4ab224e573c6bdf4bb3cc9e54c81bcdcf8894 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 8 Aug 2022 15:00:02 +0900 Subject: [PATCH 163/323] =?UTF-8?q?feat:=20elasticsearch=EC=97=90=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EA=B2=80=EC=83=89=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/getElsBizMetaList.py | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index e69de29b..7c259ef7 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -0,0 +1,86 @@ +from typing import Dict +from Utils.CommonUtil import get_exception_info +from Utils.ESUtils import connect_es + + +def is_space(text:str) -> int: + if " " in text: + return 1 + else: + return 0 + + +def filter_keywords(keywords: list) -> dict: + keywords_dics = { + "phrase":[], + "keywords": [] + } + for keyword in keywords: + k = keyword.replace(" ","") + if len(k) < 1: + continue + if is_space(keyword): + keywords_dics["phrase"].append(keyword) + else: + keywords_dics["keywords"].append(keyword) + return keywords_dics + + +def make_query(op,field,value): + query = {op: {field: value}} + return query + + +def api(perPage: int = 12, + curPage: int = 1, + keyword1: str = "", + keyword2: str = "", + keyword3: str = "", + sort_field: str = "_score", + sort_order: str = "desc") -> Dict: + index = "biz_meta" + curPage = curPage - 1 + + body = { + "from": curPage, + "size": perPage, + "sort":[ + # _score는 default 값이 내림차순 + {sort_field: sort_order} + ], + "query": { + "bool": {} + } + } + try: + es = connect_es() + keyword_dict = filter_keywords([keyword1,keyword2,keyword3]) + must_query_list = [] + + if len(keyword_dict.values()): + if len(keyword_dict["keywords"]): + for keyword in keyword_dict["keywords"]: + term = make_query("match","data_nm",keyword) + must_query_list.append(term) + + if len(keyword_dict["phrase"]): + for phrase_key in keyword_dict["phrase"]: + phrase = make_query("match_phrase","data_nm",phrase_key) + must_query_list.append(phrase) + else: + query = {"match_all": {}} + must_query_list.append(query) + + body["query"]["bool"]["must"] = must_query_list + biz_meta_elk = es.search(index=index,body=body) + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + search_list = [data["_source"] for data in biz_meta_elk["hits"]["hits"]] + data = {"totalcount": biz_meta_elk["hits"]["total"]["value"], + "searchList": search_list} + result = {"result": 1, "errorMessage": "", "data": data} + + return result From 2af410aa9b499d7e68be4f247119aef6f3c0e1eb Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 8 Aug 2022 15:01:17 +0900 Subject: [PATCH 164/323] =?UTF-8?q?chore:=20Els=20detail=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=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/getElsBizMetaDetail.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 API-SERVICE/ApiList/meta/getElsBizMetaDetail.py diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaDetail.py b/API-SERVICE/ApiList/meta/getElsBizMetaDetail.py deleted file mode 100644 index e69de29b..00000000 From ddb5829a22e6f414dffa7a3e720955ee31e3fc36 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 9 Aug 2022 15:51:20 +0900 Subject: [PATCH 165/323] =?UTF-8?q?fix:=20=EB=B3=80=EA=B2=BD=EB=90=9C=20me?= =?UTF-8?q?ta=5Fmap=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertElsBizMeta.py | 29 ++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertElsBizMeta.py b/API-SERVICE/ApiList/meta/insertElsBizMeta.py index d209ba97..b7ee9f3d 100644 --- a/API-SERVICE/ApiList/meta/insertElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertElsBizMeta.py @@ -7,26 +7,27 @@ class BizMeta(BaseModel): adm_dep: str - rqt_dep: str + adm_dep_hp: str admr_nm: str - rqt_nm: str + copyright: str ctgry: str - reg_date: str - ltst_amd_dt: str - prv_shap: str - file_size: str - open_scope: str + data_desc: str + data_nm: str + data_prv_desk: str data_shap: str + data_updt_cyc: str + file_read_authority: str + file_type: str + kywrd: str + lang: str + license: str + reg_date: str + retv_num: str + rqt_dep: 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_date: str updt_nxt_date: str - data_nm: str - data_desc: str def api(biz_meta_data: BizMeta) -> Dict: From a7b65f19176035e888764e5db18e0acdb0edab34 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 10 Aug 2022 17:05:40 +0900 Subject: [PATCH 166/323] =?UTF-8?q?refactor:=20Elasticsearch=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/Utils/ESUtils.py | 111 +++++++++++++++++++++++++++-------- 1 file changed, 87 insertions(+), 24 deletions(-) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index 746985c1..dce6a4ba 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -2,29 +2,11 @@ from pydantic import BaseModel -class ESBizMeta(BaseModel): - biz_dataset_id: str - 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 is_space(text:str) -> int: + if " " in text: + return 1 + else: + return 0 def connect_es(host: str = "localhost",port: str = "9200"): @@ -32,5 +14,86 @@ def connect_es(host: str = "localhost",port: str = "9200"): return es +def make_query(op,field,value): + query = {op: {field: value}} + return query + + class ESSearch: - pass + def __init__(self,host: str = "localhost", + port: str = "9200", + cur_from: int = 0, + size: int = 10, + index: str = "biz_meta", + sort_list: list = []): + """ + + :param cur_from: 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 = cur_from + self.sort_list = sort_list + self.keyword_dict = dict() + self.es = self.connect() + self.base_query = self.set_base_query() + + def connect(self) -> object: + es = Elasticsearch(f"http://{self.host}:{self.port}") + return es + + def set_base_query(self) -> dict: + base_query = { + "from": self.cur_from, + "size": self.size, + "sort": self.sort_list, + "query": {"bool": dict()} + } + return base_query + + def div_keyword(self,keyword_list: list): + self.keyword_dict = { + "match_phrase": [], + "match": [] + } + for keyword in keyword_list: + k = keyword.replace(" ","") + if len(k) < 1: + continue + if is_space(keyword): + self.keyword_dict["match_phrase"].append(keyword) + else: + self.keyword_dict["match"].append(keyword) + + def set_filter(self,filter_dict:dict): + filter_query = [] + if len(filter_dict.values()): + for field,value in filter_dict.items(): + filter_condition = make_query("match",field,value) + filter_query.append(filter_condition) + self.base_query["query"]["bool"]["filter"] = filter_query + + def set_match(self, operator: str = None): + must_query_list = [] + if len(self.keyword_dict.values()): + if len(self.keyword_dict["match"]) and operator is not None: + op_query_dict = make_query("data_nm", "query", ' '.join(self.keyword_dict["match"])) + op_query_dict["data_nm"]["operator"] = operator + term = make_query("match", "data_nm", op_query_dict["data_nm"]) + must_query_list.append(term) + if len(self.keyword_dict["match"]) and operator is None: + for keyword in self.keyword_dict["keywords"]: + term = make_query("match","data_nm",keyword) + must_query_list.append(term) + if len(self.keyword_dict["match_phrase"]): + for phrase_key in self.keyword_dict["phrase"]: + phrase = make_query("match_phrase","data_nm",phrase_key) + must_query_list.append(phrase) + else: + query = {"match_all": {}} + must_query_list.append(query) + + self.base_query["query"]["bool"]["must"] = must_query_list From b78a23b497ace93652ba15d989e9ce45edcc8423 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 12 Aug 2022 11:18:30 +0900 Subject: [PATCH 167/323] =?UTF-8?q?chore:=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=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/Utils/ESUtils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index dce6a4ba..7f5e8a2c 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -79,7 +79,7 @@ def set_filter(self,filter_dict:dict): def set_match(self, operator: str = None): must_query_list = [] if len(self.keyword_dict.values()): - if len(self.keyword_dict["match"]) and operator is not None: + if len(self.keyword_dict["match"]) and operator in ["or","OR"]: op_query_dict = make_query("data_nm", "query", ' '.join(self.keyword_dict["match"])) op_query_dict["data_nm"]["operator"] = operator term = make_query("match", "data_nm", op_query_dict["data_nm"]) From cc58808dbfcd631cbc7a65c2c943d91ea5c7b2fa Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 17 Aug 2022 13:27:11 +0900 Subject: [PATCH 168/323] =?UTF-8?q?feat:=20ESUtils=20class=20=EB=B0=8F=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getElsBizMetaList.py | 71 ++----------------- API-SERVICE/ApiList/meta/insertElsBizMeta.py | 8 +-- API-SERVICE/Utils/ESUtils.py | 66 ++++++++--------- 3 files changed, 43 insertions(+), 102 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 7c259ef7..c50acbcb 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -1,34 +1,6 @@ from typing import Dict from Utils.CommonUtil import get_exception_info -from Utils.ESUtils import connect_es - - -def is_space(text:str) -> int: - if " " in text: - return 1 - else: - return 0 - - -def filter_keywords(keywords: list) -> dict: - keywords_dics = { - "phrase":[], - "keywords": [] - } - for keyword in keywords: - k = keyword.replace(" ","") - if len(k) < 1: - continue - if is_space(keyword): - keywords_dics["phrase"].append(keyword) - else: - keywords_dics["keywords"].append(keyword) - return keywords_dics - - -def make_query(op,field,value): - query = {op: {field: value}} - return query +from Utils.ESUtils import ESSearch def api(perPage: int = 12, @@ -36,43 +8,12 @@ def api(perPage: int = 12, keyword1: str = "", keyword2: str = "", keyword3: str = "", - sort_field: str = "_score", - sort_order: str = "desc") -> Dict: - index = "biz_meta" - curPage = curPage - 1 - - body = { - "from": curPage, - "size": perPage, - "sort":[ - # _score는 default 값이 내림차순 - {sort_field: sort_order} - ], - "query": { - "bool": {} - } - } + sort_field: str = "_score") -> Dict: try: - es = connect_es() - keyword_dict = filter_keywords([keyword1,keyword2,keyword3]) - must_query_list = [] - - if len(keyword_dict.values()): - if len(keyword_dict["keywords"]): - for keyword in keyword_dict["keywords"]: - term = make_query("match","data_nm",keyword) - must_query_list.append(term) - - if len(keyword_dict["phrase"]): - for phrase_key in keyword_dict["phrase"]: - phrase = make_query("match_phrase","data_nm",phrase_key) - must_query_list.append(phrase) - else: - query = {"match_all": {}} - must_query_list.append(query) - - body["query"]["bool"]["must"] = must_query_list - biz_meta_elk = es.search(index=index,body=body) + es = ESSearch(cur_from=curPage,size=perPage) + es.div_keyword([keyword1,keyword2,keyword3]) + es.set_match() + biz_meta_elk = es.conn.search(index=es.index,body=es.body) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/insertElsBizMeta.py b/API-SERVICE/ApiList/meta/insertElsBizMeta.py index b7ee9f3d..79b7471f 100644 --- a/API-SERVICE/ApiList/meta/insertElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertElsBizMeta.py @@ -2,7 +2,7 @@ from typing import Dict from Utils.CommonUtil import get_exception_info from pydantic import BaseModel -from Utils.ESUtils import connect_es +from Utils.ESUtils import ESSearch class BizMeta(BaseModel): @@ -32,13 +32,11 @@ class BizMeta(BaseModel): def api(biz_meta_data: BizMeta) -> Dict: uid = uuid.uuid4() - index = "biz_meta" try: - es = connect_es() - + es = ESSearch() biz_meta_data = biz_meta_data.dict() biz_meta_data["biz_dataset_id"] = uid - es.index(index=index,body=biz_meta_data) + es.conn.index(index=es.index,body=biz_meta_data) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index 7f5e8a2c..ed936f60 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -2,30 +2,33 @@ from pydantic import BaseModel -def is_space(text:str) -> int: +def is_space(text: str) -> int: if " " in text: return 1 else: return 0 -def connect_es(host: str = "localhost",port: str = "9200"): +def connect_es(host: str = "localhost", port: str = "9200"): es = Elasticsearch(f"http://{host}:{port}") return es -def make_query(op,field,value): +def make_query(op, field, value): query = {op: {field: value}} return query class ESSearch: - def __init__(self,host: str = "localhost", - port: str = "9200", - cur_from: int = 0, - size: int = 10, - index: str = "biz_meta", - sort_list: list = []): + def __init__( + self, + host: str = "localhost", + port: str = "9200", + cur_from: int = 0, + size: int = 10, + index: str = "biz_meta", + sort_list: list = [], + ): """ :param cur_from: elasticsearch default value = 0 @@ -35,32 +38,29 @@ def __init__(self,host: str = "localhost", self.port = port self.size = size self.index = index - self.cur_from = cur_from + self.cur_from = cur_from - 1 self.sort_list = sort_list self.keyword_dict = dict() - self.es = self.connect() - self.base_query = self.set_base_query() + self.conn = self.connect() + self.body = self.set_body() def connect(self) -> object: es = Elasticsearch(f"http://{self.host}:{self.port}") return es - def set_base_query(self) -> dict: - base_query = { + def set_body(self) -> dict: + body = { "from": self.cur_from, "size": self.size, "sort": self.sort_list, "query": {"bool": dict()} } - return base_query + return body - def div_keyword(self,keyword_list: list): - self.keyword_dict = { - "match_phrase": [], - "match": [] - } + def div_keyword(self, keyword_list: list): + self.keyword_dict = {"match_phrase": [], "match": []} for keyword in keyword_list: - k = keyword.replace(" ","") + k = keyword.replace(" ", "") if len(k) < 1: continue if is_space(keyword): @@ -68,32 +68,34 @@ def div_keyword(self,keyword_list: list): else: self.keyword_dict["match"].append(keyword) - def set_filter(self,filter_dict:dict): + def set_filter(self, filter_dict: dict): filter_query = [] if len(filter_dict.values()): - for field,value in filter_dict.items(): - filter_condition = make_query("match",field,value) + for field, value in filter_dict.items(): + filter_condition = make_query("match", field, value) filter_query.append(filter_condition) - self.base_query["query"]["bool"]["filter"] = filter_query + self.body["query"]["bool"]["filter"] = filter_query def set_match(self, operator: str = None): must_query_list = [] if len(self.keyword_dict.values()): - if len(self.keyword_dict["match"]) and operator in ["or","OR"]: - op_query_dict = make_query("data_nm", "query", ' '.join(self.keyword_dict["match"])) + if len(self.keyword_dict["match"]) and operator in ["or", "OR"]: + op_query_dict = make_query( + "data_nm", "query", " ".join(self.keyword_dict["match"]) + ) op_query_dict["data_nm"]["operator"] = operator term = make_query("match", "data_nm", op_query_dict["data_nm"]) must_query_list.append(term) if len(self.keyword_dict["match"]) and operator is None: - for keyword in self.keyword_dict["keywords"]: - term = make_query("match","data_nm",keyword) + for keyword in self.keyword_dict["match"]: + term = make_query("match", "data_nm", keyword) must_query_list.append(term) if len(self.keyword_dict["match_phrase"]): - for phrase_key in self.keyword_dict["phrase"]: - phrase = make_query("match_phrase","data_nm",phrase_key) + for phrase_key in self.keyword_dict["match_phrase"]: + phrase = make_query("match_phrase", "data_nm", phrase_key) must_query_list.append(phrase) else: query = {"match_all": {}} must_query_list.append(query) - self.base_query["query"]["bool"]["must"] = must_query_list + self.body["query"]["bool"]["must"] = must_query_list From 63a83aa8579ee3af57c5f885bf8d91d62cf27532 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 17 Aug 2022 17:16:38 +0900 Subject: [PATCH 169/323] =?UTF-8?q?feat:=20elasticsearch=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EC=A0=95=EB=A0=AC=20?= =?UTF-8?q?=ED=95=98=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/getElsBizMetaList.py | 3 ++- API-SERVICE/Utils/ESUtils.py | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index c50acbcb..5422db5d 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -8,10 +8,11 @@ def api(perPage: int = 12, keyword1: str = "", keyword2: str = "", keyword3: str = "", - sort_field: str = "_score") -> Dict: + sort: str = "_score:desc") -> Dict: try: es = ESSearch(cur_from=curPage,size=perPage) es.div_keyword([keyword1,keyword2,keyword3]) + es.set_sort(sort) es.set_match() biz_meta_elk = es.conn.search(index=es.index,body=es.body) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index ed936f60..88031a1b 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -26,8 +26,7 @@ def __init__( port: str = "9200", cur_from: int = 0, size: int = 10, - index: str = "biz_meta", - sort_list: list = [], + index: str = "biz_meta" ): """ @@ -39,7 +38,6 @@ def __init__( self.size = size self.index = index self.cur_from = cur_from - 1 - self.sort_list = sort_list self.keyword_dict = dict() self.conn = self.connect() self.body = self.set_body() @@ -55,7 +53,12 @@ def set_body(self) -> dict: "sort": self.sort_list, "query": {"bool": dict()} } - return body + return self.body + + def set_sort(self, sort: str) -> None: + sort = sort.replace("score", "_score").split(",") + sort = [{field: order for field, order in [sort_item.split(":") for sort_item in sort]}] + self.body["sort"] = sort def div_keyword(self, keyword_list: list): self.keyword_dict = {"match_phrase": [], "match": []} From b2be3e9c72be214cda3873d6d88c4b15cb665341 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 17 Aug 2022 17:17:31 +0900 Subject: [PATCH 170/323] =?UTF-8?q?feat:=20=ED=8E=98=EC=9D=B4=EC=A7=95=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80,?= =?UTF-8?q?=20search=20=EA=B8=B0=EB=B3=B8=20=EC=BF=BC=EB=A6=AC=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/Utils/ESUtils.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index 88031a1b..f1b82f33 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -47,11 +47,11 @@ def connect(self) -> object: return es def set_body(self) -> dict: - body = { - "from": self.cur_from, - "size": self.size, - "sort": self.sort_list, - "query": {"bool": dict()} + self.body = { + "from": 0, + "size": 10, + "sort": [], + "query": {"bool": [{"match_all": {}}]} } return self.body @@ -60,7 +60,11 @@ def set_sort(self, sort: str) -> None: sort = [{field: order for field, order in [sort_item.split(":") for sort_item in sort]}] self.body["sort"] = sort - def div_keyword(self, keyword_list: list): + def set_pagination(self) -> None: + self.body["from"] = self.cur_from + self.body["size"] = self.size + + def div_keyword(self, keyword_list: list) -> None: self.keyword_dict = {"match_phrase": [], "match": []} for keyword in keyword_list: k = keyword.replace(" ", "") @@ -71,7 +75,7 @@ def div_keyword(self, keyword_list: list): else: self.keyword_dict["match"].append(keyword) - def set_filter(self, filter_dict: dict): + def set_filter(self, filter_dict: dict) -> None: filter_query = [] if len(filter_dict.values()): for field, value in filter_dict.items(): @@ -79,7 +83,7 @@ def set_filter(self, filter_dict: dict): filter_query.append(filter_condition) self.body["query"]["bool"]["filter"] = filter_query - def set_match(self, operator: str = None): + def set_match(self, operator: str = None) -> None: must_query_list = [] if len(self.keyword_dict.values()): if len(self.keyword_dict["match"]) and operator in ["or", "OR"]: @@ -97,8 +101,5 @@ def set_match(self, operator: str = None): for phrase_key in self.keyword_dict["match_phrase"]: phrase = make_query("match_phrase", "data_nm", phrase_key) must_query_list.append(phrase) - else: - query = {"match_all": {}} - must_query_list.append(query) - self.body["query"]["bool"]["must"] = must_query_list + self.body["query"]["bool"]["must"] = must_query_list From 7ded3abbc78f8fb3ef17ea569648a5a15be60c27 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 23 Aug 2022 10:50:24 +0900 Subject: [PATCH 171/323] =?UTF-8?q?refactor:=20elasticsearch=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 --- .../ConnectManager/ElasticSearchManager.py | 78 +++++++++++ API-SERVICE/Utils/ESUtils.py | 124 +++++------------- 2 files changed, 110 insertions(+), 92 deletions(-) create mode 100644 API-SERVICE/ConnectManager/ElasticSearchManager.py diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py new file mode 100644 index 00000000..4a667347 --- /dev/null +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -0,0 +1,78 @@ +from elasticsearch import Elasticsearch +from Utils.ESUtils import set_dict_list, make_query, set_find_option + + +class ESSearch: + def __init__( + self, + host: str = "localhost", + port: str = "9200", + cur_from: int = 0, + 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 cur_from: 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 = cur_from - 1 + self.keyword_dict = dict() + self.conn = self.connect() + self.body = self.set_body() + + def connect(self) -> object: + es = Elasticsearch(f"http://{self.host}:{self.port}") + return es + + def set_body(self) -> dict: + self.body = { + "from": 0, + "size": 10, + "sort": [], + "query": {"bool": [{"match_all": {}}]} + } + return self.body + + def set_sort(self, sort: str) -> None: + sort = sort.replace("score", "_score").split(",") + sort = [{field: order for field, order in [sort_item.split(":") for sort_item in sort]}] + self.body["sort"] = sort + + def set_pagination(self) -> None: + self.body["from"] = self.cur_from + self.body["size"] = self.size + + def set_filter(self, filter_option: str) -> None: + filter_list = set_find_option(filter_option) + if len(filter_list): + self.body["query"]["bool"]["filter"] = set_dict_list(filter_list[0], "match") + + def set_match(self, operator: str = None) -> None: + must_query_list = [] + field = "data_nm" + option = "match" + + # if len(self.keyword_dict.values()): + if len(self.keyword_dict[option]) and operator in ["or", "OR"]: + keyword = " ".join(self.keyword_dict[option]) + op_query_dict = make_query(field, "query", keyword) + op_query_dict[field]["operator"] = operator + term = make_query(option, field, op_query_dict[field]) + must_query_list.append(term) + + if len(self.keyword_dict[option]) and operator is None: + must_query_list = set_dict_list(self.keyword_dict[option], option, field) + + if len(self.keyword_dict["match_phrase"]): + option = "match_phrase" + must_query_list = set_dict_list(self.keyword_dict[option],option,field) + + self.body["query"]["bool"]["must"] = must_query_list diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index f1b82f33..f5ee50d3 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -1,7 +1,3 @@ -from elasticsearch import Elasticsearch -from pydantic import BaseModel - - def is_space(text: str) -> int: if " " in text: return 1 @@ -9,97 +5,41 @@ def is_space(text: str) -> int: return 0 -def connect_es(host: str = "localhost", port: str = "9200"): - es = Elasticsearch(f"http://{host}:{port}") - return es - - def make_query(op, field, value): query = {op: {field: value}} return query -class ESSearch: - def __init__( - self, - host: str = "localhost", - port: str = "9200", - cur_from: int = 0, - size: int = 10, - index: str = "biz_meta" - ): - """ - - :param cur_from: 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 = cur_from - 1 - self.keyword_dict = dict() - self.conn = self.connect() - self.body = self.set_body() - - def connect(self) -> object: - es = Elasticsearch(f"http://{self.host}:{self.port}") - return es - - def set_body(self) -> dict: - self.body = { - "from": 0, - "size": 10, - "sort": [], - "query": {"bool": [{"match_all": {}}]} - } - return self.body - - def set_sort(self, sort: str) -> None: - sort = sort.replace("score", "_score").split(",") - sort = [{field: order for field, order in [sort_item.split(":") for sort_item in sort]}] - self.body["sort"] = sort - - def set_pagination(self) -> None: - self.body["from"] = self.cur_from - self.body["size"] = self.size - - def div_keyword(self, keyword_list: list) -> None: - self.keyword_dict = {"match_phrase": [], "match": []} - for keyword in keyword_list: - k = keyword.replace(" ", "") - if len(k) < 1: - continue - if is_space(keyword): - self.keyword_dict["match_phrase"].append(keyword) - else: - self.keyword_dict["match"].append(keyword) - - def set_filter(self, filter_dict: dict) -> None: - filter_query = [] - if len(filter_dict.values()): - for field, value in filter_dict.items(): - filter_condition = make_query("match", field, value) - filter_query.append(filter_condition) - self.body["query"]["bool"]["filter"] = filter_query - - def set_match(self, operator: str = None) -> None: - must_query_list = [] - if len(self.keyword_dict.values()): - if len(self.keyword_dict["match"]) and operator in ["or", "OR"]: - op_query_dict = make_query( - "data_nm", "query", " ".join(self.keyword_dict["match"]) - ) - op_query_dict["data_nm"]["operator"] = operator - term = make_query("match", "data_nm", op_query_dict["data_nm"]) - must_query_list.append(term) - if len(self.keyword_dict["match"]) and operator is None: - for keyword in self.keyword_dict["match"]: - term = make_query("match", "data_nm", keyword) - must_query_list.append(term) - if len(self.keyword_dict["match_phrase"]): - for phrase_key in self.keyword_dict["match_phrase"]: - phrase = make_query("match_phrase", "data_nm", phrase_key) - must_query_list.append(phrase) +def div_keyword(keyword_list: list) -> dict: + keyword_dict = {"match_phrase": [], "match": []} + for keyword in keyword_list: + k = keyword.replace(" ","") + if len(k) < 1: + continue + if is_space(keyword): + keyword_dict["match_phrase"].append(keyword) + else: + keyword_dict["match"].append(keyword) + return keyword_dict + + +def set_find_option(find_option: str) -> list: + """ + :param find_option: type str, ex) "key1:val1,key2:val2" + :return: type list , ex) [{key1: val1, key2: val2}] + """ + find_option = find_option.replace("score", "_score").split(",") + find_option = [{key: value for key, value in [option_item.split(":") for option_item in find_option]}] + return find_option + + +def set_dict_list(item_list, operator, field=None): + query_list = [] + for item in item_list: + if field: + query = make_query(operator,field,item) + else: + query = make_query(operator,item,item_list[item]) + query_list.append(query) + return query_list - self.body["query"]["bool"]["must"] = must_query_list From 23ab22a9301c73ca6175265c142c3a6206d5ccf0 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 23 Aug 2022 17:17:05 +0900 Subject: [PATCH 172/323] =?UTF-8?q?feat:=20elasticsearch=20data=20CRUD=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80,=20annotation=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 --- .../ConnectManager/ElasticSearchManager.py | 59 ++++++++++++++----- API-SERVICE/Utils/ESUtils.py | 19 ++++-- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 4a667347..41734a9d 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -1,4 +1,5 @@ -from elasticsearch import Elasticsearch +from typing import Optional, Union, Dict, Any +from elasticsearch import Elasticsearch, helpers from Utils.ESUtils import set_dict_list, make_query, set_find_option @@ -7,7 +8,7 @@ def __init__( self, host: str = "localhost", port: str = "9200", - cur_from: int = 0, + cur_from: int = 1, size: int = 10, index: str = "biz_meta" ): @@ -32,7 +33,7 @@ def connect(self) -> object: es = Elasticsearch(f"http://{self.host}:{self.port}") return es - def set_body(self) -> dict: + def set_body(self) -> Dict[Any,Any]: self.body = { "from": 0, "size": 10, @@ -42,37 +43,67 @@ def set_body(self) -> dict: return self.body def set_sort(self, sort: str) -> None: - sort = sort.replace("score", "_score").split(",") - sort = [{field: order for field, order in [sort_item.split(":") for sort_item in sort]}] - self.body["sort"] = sort + """ + :param sort: type str, ex) "key1:val1,key2:val2" + """ + self.body["sort"] = set_find_option(sort) def set_pagination(self) -> None: self.body["from"] = self.cur_from self.body["size"] = self.size def set_filter(self, filter_option: str) -> None: + """ + :param filter_option: type str, ex) "key1:val1,key2:val2" + """ filter_list = set_find_option(filter_option) if len(filter_list): self.body["query"]["bool"]["filter"] = set_dict_list(filter_list[0], "match") - def set_match(self, operator: str = None) -> None: + def set_match(self, operator: Optional[str] = None) -> None: + """ + :param operator: search operator, type str ex) (AND, OR) + """ must_query_list = [] field = "data_nm" option = "match" + if len(self.keyword_dict[option]) and operator is None: + must_query_list = set_dict_list(self.keyword_dict[option], option, field) + + if len(self.keyword_dict["match_phrase"]): + option = "match_phrase" + must_query_list = set_dict_list(self.keyword_dict[option],option,field) + # if len(self.keyword_dict.values()): - if len(self.keyword_dict[option]) and operator in ["or", "OR"]: + if len(self.keyword_dict[option]) and operator.upper() == "OR": keyword = " ".join(self.keyword_dict[option]) op_query_dict = make_query(field, "query", keyword) op_query_dict[field]["operator"] = operator term = make_query(option, field, op_query_dict[field]) must_query_list.append(term) - if len(self.keyword_dict[option]) and operator is None: - must_query_list = set_dict_list(self.keyword_dict[option], option, field) + self.body["query"]["bool"]["must"] = must_query_list - if len(self.keyword_dict["match_phrase"]): - option = "match_phrase" - must_query_list = set_dict_list(self.keyword_dict[option],option,field) + def insert(self, body: dict, es_id: str) -> None: + self.conn.index(index=self.index, body=body, id=es_id) - self.body["query"]["bool"]["must"] = must_query_list + def insert_bulk(self, data: list) -> None: + helpers.bulk(self.conn, data, index=self.index) + + def update(self, body: dict, es_id: str): + self.conn.update(index=self.index, id=es_id, body=body) + + def delete(self, field: str, data: Union[str, list]) -> None: + """ + 단수 : { 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) + self.conn.delete_by_query(index=self.index,body=delete_command) + + def search(self) -> Dict[Any, Any]: + return self.conn.search(index=self.index, body=self.body) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index f5ee50d3..4115324a 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -1,3 +1,6 @@ +from typing import Union, Optional, List, Dict, Any + + def is_space(text: str) -> int: if " " in text: return 1 @@ -5,12 +8,12 @@ def is_space(text: str) -> int: return 0 -def make_query(op, field, value): +def make_query(op, field, value) -> Dict[Any,Any]: query = {op: {field: value}} return query -def div_keyword(keyword_list: list) -> dict: +def div_keyword(keyword_list: list) -> Dict[Any,Any]: keyword_dict = {"match_phrase": [], "match": []} for keyword in keyword_list: k = keyword.replace(" ","") @@ -23,7 +26,7 @@ def div_keyword(keyword_list: list) -> dict: return keyword_dict -def set_find_option(find_option: str) -> list: +def set_find_option(find_option: str) -> List[Dict[Any, Any]]: """ :param find_option: type str, ex) "key1:val1,key2:val2" :return: type list , ex) [{key1: val1, key2: val2}] @@ -33,13 +36,17 @@ def set_find_option(find_option: str) -> list: return find_option -def set_dict_list(item_list, operator, field=None): +def set_dict_list(option_items: Union[list, dict], + operator: str, field: Optional[str] = None + ) -> List[Dict[Any, Any]]: query_list = [] - for item in item_list: + for item in option_items: if field: + # option_item type list query = make_query(operator,field,item) else: - query = make_query(operator,item,item_list[item]) + # option item type dict + query = make_query(operator,item,option_items[item]) query_list.append(query) return query_list From 39acbb1e51f9ca94759cd08a3630948df93f9481 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 25 Aug 2022 08:54:18 +0900 Subject: [PATCH 173/323] =?UTF-8?q?feat:=20elasticsearch=20index=20data=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(batch=20job)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/Utils/ESUtils.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index 4115324a..c41b9625 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -1,4 +1,5 @@ from typing import Union, Optional, List, Dict, Any +from Utils.DataBaseUtil import convert_data def is_space(text: str) -> int: @@ -50,3 +51,27 @@ def set_dict_list(option_items: Union[list, dict], query_list.append(query) return query_list + +def update_els_data(db: object, es: object, st: str, et: str) -> None: + """ + CronJob update to elasticsearch index data + :param db: postgresql db connector object + :param es: elasticsearch object + :param st: start time, type str + :param et: end time, type str + :return: None + """ + db_query = f"SELECT * FROM v_biz_meta_wrap " \ + f"WHERE to_date(updt_date,'YY-MM-DD') " \ + f"BETWEEN {convert_data(st)} AND {convert_data(et)}" + + meta_wrap_list = db.select(db_query)[0] + bulk_meta_item = list() + + for meta_wrap in meta_wrap_list: + test_dict = dict() + test_dict["_id"] = meta_wrap["biz_dataset_id"] + test_dict["_source"] = meta_wrap + bulk_meta_item.append(test_dict) + + es.insert_bulk(bulk_meta_item) From 551c154280260705f8a4d6d33e195fa95dfc8cfe Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 25 Aug 2022 09:11:38 +0900 Subject: [PATCH 174/323] =?UTF-8?q?feat:=20parameter,=20return=20=EA=B0=92?= =?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 --- .../ConnectManager/ElasticSearchManager.py | 61 ++++++++++--------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 41734a9d..6f904ffb 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -25,7 +25,6 @@ def __init__( self.size = size self.index = index self.cur_from = cur_from - 1 - self.keyword_dict = dict() self.conn = self.connect() self.body = self.set_body() @@ -38,13 +37,13 @@ def set_body(self) -> Dict[Any,Any]: "from": 0, "size": 10, "sort": [], - "query": {"bool": [{"match_all": {}}]} + "query": {"bool": dict()} } return self.body def set_sort(self, sort: str) -> None: """ - :param sort: type str, ex) "key1:val1,key2:val2" + :param sort: type str, ex) "field_name:asc,field_name:desc" """ self.body["sort"] = set_find_option(sort) @@ -60,41 +59,43 @@ def set_filter(self, filter_option: str) -> None: if len(filter_list): self.body["query"]["bool"]["filter"] = set_dict_list(filter_list[0], "match") - def set_match(self, operator: Optional[str] = None) -> None: + def set_match(self, keyword_dict: dict, operator: Optional[str] = None, field: str = "data_nm") -> None: """ + :param keyword_dict: type dict + :param field: search field, type str :param operator: search operator, type str ex) (AND, OR) """ - must_query_list = [] - field = "data_nm" - option = "match" - - if len(self.keyword_dict[option]) and operator is None: - must_query_list = set_dict_list(self.keyword_dict[option], option, field) - - if len(self.keyword_dict["match_phrase"]): - option = "match_phrase" - must_query_list = set_dict_list(self.keyword_dict[option],option,field) - - # if len(self.keyword_dict.values()): - if len(self.keyword_dict[option]) and operator.upper() == "OR": - keyword = " ".join(self.keyword_dict[option]) - op_query_dict = make_query(field, "query", keyword) - op_query_dict[field]["operator"] = operator - term = make_query(option, field, op_query_dict[field]) - must_query_list.append(term) - - self.body["query"]["bool"]["must"] = must_query_list + if len(keyword_dict.values()): + must_query_list = [] + option = "match" + + if len(keyword_dict[option]) and operator is None: + must_query_list = set_dict_list(keyword_dict[option], option, field) + + if len(keyword_dict["match_phrase"]): + option = "match_phrase" + must_query_list = set_dict_list(keyword_dict[option],option,field) + + if len(keyword_dict[option]) and operator.upper() == "OR": + keyword = " ".join(keyword_dict[option]) + op_query_dict = make_query(field, "query", keyword) + op_query_dict[field]["operator"] = operator + term = make_query(option, field, op_query_dict[field]) + must_query_list.append(term) + self.body["query"]["bool"]["must"] = must_query_list + else: + self.body["query"]["bool"]["must"] = {"match_all": {}} def insert(self, body: dict, es_id: str) -> None: - self.conn.index(index=self.index, body=body, id=es_id) + return self.conn.index(index=self.index, body=body, id=es_id) - def insert_bulk(self, data: list) -> None: - helpers.bulk(self.conn, data, index=self.index) + def insert_bulk(self, data: list): + return helpers.bulk(self.conn, data, index=self.index) def update(self, body: dict, es_id: str): - self.conn.update(index=self.index, id=es_id, body=body) + return self.conn.update(index=self.index, id=es_id, body=body) - def delete(self, field: str, data: Union[str, list]) -> None: + def delete(self, field: str, data: Union[str, list]): """ 단수 : { query: { term: _id}} 복수 : { query : { term : []}} @@ -103,7 +104,7 @@ def delete(self, field: str, data: Union[str, list]) -> None: """ delete_data = {field: data} delete_command = make_query("query", "term", delete_data) - self.conn.delete_by_query(index=self.index,body=delete_command) + return self.conn.delete_by_query(index=self.index,body=delete_command) def search(self) -> Dict[Any, Any]: return self.conn.search(index=self.index, body=self.body) From e1051d96b7a368c23bc2448d9a983c1b6ac2bf7c Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 25 Aug 2022 10:10:00 +0900 Subject: [PATCH 175/323] =?UTF-8?q?chore:=20table=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/Utils/ESUtils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index c41b9625..0256f5fb 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -61,7 +61,7 @@ def update_els_data(db: object, es: object, st: str, et: str) -> None: :param et: end time, type str :return: None """ - db_query = f"SELECT * FROM v_biz_meta_wrap " \ + db_query = f"SELECT * FROM v_biz_meta_info " \ f"WHERE to_date(updt_date,'YY-MM-DD') " \ f"BETWEEN {convert_data(st)} AND {convert_data(et)}" From 421ac51cd97634a7537c62534e9994fe31365731 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 29 Aug 2022 13:09:18 +0900 Subject: [PATCH 176/323] =?UTF-8?q?feat:=20filter,=20sort=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EA=B0=92=20=EC=88=98=EC=A0=95=20=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getElsBizMetaList.py | 23 ++++++------ .../ConnectManager/ElasticSearchManager.py | 36 +++++++++---------- API-SERVICE/Utils/ESUtils.py | 10 ------ 3 files changed, 30 insertions(+), 39 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 5422db5d..8c5ced6d 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -1,27 +1,30 @@ from typing import Dict +from Utils.ESUtils import div_keyword from Utils.CommonUtil import get_exception_info -from Utils.ESUtils import ESSearch +from ConnectManager.ElasticSearchManager import ESSearch def api(perPage: int = 12, curPage: int = 1, - keyword1: str = "", - keyword2: str = "", - keyword3: str = "", - sort: str = "_score:desc") -> Dict: + keywordList: list = [], + sortOption: list = [], + filterOption: dict = dict(), + matchOption: str = "AND") -> Dict: try: + keyword_dict = div_keyword(keywordList) es = ESSearch(cur_from=curPage,size=perPage) - es.div_keyword([keyword1,keyword2,keyword3]) - es.set_sort(sort) - es.set_match() - biz_meta_elk = es.conn.search(index=es.index,body=es.body) + es.set_sort(sortOption) + if len(filterOption): + es.set_filter(filterOption) + es.set_match(keyword_dict,matchOption) + biz_meta_elk = es.search() except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: search_list = [data["_source"] for data in biz_meta_elk["hits"]["hits"]] - data = {"totalcount": biz_meta_elk["hits"]["total"]["value"], + data = {"totalCount": biz_meta_elk["hits"]["total"]["value"], "searchList": search_list} result = {"result": 1, "errorMessage": "", "data": data} diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 6f904ffb..60ddaea8 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -1,6 +1,6 @@ from typing import Optional, Union, Dict, Any from elasticsearch import Elasticsearch, helpers -from Utils.ESUtils import set_dict_list, make_query, set_find_option +from Utils.ESUtils import set_dict_list, make_query class ESSearch: @@ -17,8 +17,8 @@ def __init__( :param host: elasticsearch host ip addr, default = localhost :param port: elasticsearch ip port number, default = 9200 :param index: - :param cur_from: elasticsearch default value = 0 - :param size: elasticsearch default value = 10 + :param cur_from: curPage, elasticsearch default value = 0 + :param size: perPage, elasticsearch default value = 10 """ self.host = host self.port = port @@ -34,32 +34,30 @@ def connect(self) -> object: def set_body(self) -> Dict[Any,Any]: self.body = { - "from": 0, - "size": 10, + "from": self.cur_from, + "size": self.size, "sort": [], "query": {"bool": dict()} } return self.body - def set_sort(self, sort: str) -> None: - """ - :param sort: type str, ex) "field_name:asc,field_name:desc" - """ - self.body["sort"] = set_find_option(sort) + def set_sort(self, sort: list) -> None: + self.body["sort"] = sort def set_pagination(self) -> None: self.body["from"] = self.cur_from self.body["size"] = self.size - def set_filter(self, filter_option: str) -> None: - """ - :param filter_option: type str, ex) "key1:val1,key2:val2" - """ - filter_list = set_find_option(filter_option) - if len(filter_list): - self.body["query"]["bool"]["filter"] = set_dict_list(filter_list[0], "match") + def set_filter(self, filter_option: dict) -> None: + filter_list = [] + if "data_srttn" in filter_option.keys() and "전체" in filter_option["data_srttn"]: + filter_option.pop("data_srttn") + + for option, items in filter_option.items(): + filter_list.extend([make_query("match",option,item) for item in items]) + self.body["query"]["bool"]["filter"] = filter_list - def set_match(self, keyword_dict: dict, operator: Optional[str] = None, field: str = "data_nm") -> None: + def set_match(self, keyword_dict: dict, operator: Optional[str] = "AND", field: str = "data_nm") -> None: """ :param keyword_dict: type dict :param field: search field, type str @@ -69,7 +67,7 @@ def set_match(self, keyword_dict: dict, operator: Optional[str] = None, field: s must_query_list = [] option = "match" - if len(keyword_dict[option]) and operator is None: + if len(keyword_dict[option]) and operator.upper() == "AND": must_query_list = set_dict_list(keyword_dict[option], option, field) if len(keyword_dict["match_phrase"]): diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index 0256f5fb..b7c08c9d 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -27,16 +27,6 @@ def div_keyword(keyword_list: list) -> Dict[Any,Any]: return keyword_dict -def set_find_option(find_option: str) -> List[Dict[Any, Any]]: - """ - :param find_option: type str, ex) "key1:val1,key2:val2" - :return: type list , ex) [{key1: val1, key2: val2}] - """ - find_option = find_option.replace("score", "_score").split(",") - find_option = [{key: value for key, value in [option_item.split(":") for option_item in find_option]}] - return find_option - - def set_dict_list(option_items: Union[list, dict], operator: str, field: Optional[str] = None ) -> List[Dict[Any, Any]]: From 939a2e0e3326c7fee4fda9bf542abd376d51cd1a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 29 Aug 2022 15:29:55 +0900 Subject: [PATCH 177/323] =?UTF-8?q?feat:=20return=20=EA=B0=92=EC=97=90=20d?= =?UTF-8?q?ata=20count=20=ED=95=AD=EB=AA=A9=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getElsBizMetaList.py | 26 ++++++++++++++++--- API-SERVICE/Utils/ESUtils.py | 12 +++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 8c5ced6d..03acf575 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -1,5 +1,5 @@ from typing import Dict -from Utils.ESUtils import div_keyword +from Utils.ESUtils import div_keyword, make_query, get_srttn_count from Utils.CommonUtil import get_exception_info from ConnectManager.ElasticSearchManager import ESSearch @@ -9,13 +9,33 @@ def api(perPage: int = 12, keywordList: list = [], sortOption: list = [], filterOption: dict = dict(), + dataSrttn: str = "전체", matchOption: str = "AND") -> Dict: + + data_srttn = { + # search_keyword: (result_key, result_data) + "전체": ["totalCount", None], + "보유데이터": ["hasCount", None], + "연동데이터": ["innerCount", None], + "외부데이터": ["externalCount", None], + "해외데이터": ["overseaCount", None] + } + try: keyword_dict = div_keyword(keywordList) es = ESSearch(cur_from=curPage,size=perPage) es.set_sort(sortOption) + if len(filterOption): + count_name = data_srttn[dataSrttn][0] es.set_filter(filterOption) + filter_srttn = make_query("match","data_srttn",dataSrttn) + es.body["query"]["bool"]["filter"].append(filter_srttn) + data_srttn.pop(dataSrttn) + else: + count_name = "totalCount" + + data = get_srttn_count(data_srttn,es) es.set_match(keyword_dict,matchOption) biz_meta_elk = es.search() @@ -24,8 +44,8 @@ def api(perPage: int = 12, result = {"result": 0, "errorMessage": except_name} else: search_list = [data["_source"] for data in biz_meta_elk["hits"]["hits"]] - data = {"totalCount": biz_meta_elk["hits"]["total"]["value"], - "searchList": search_list} + data[count_name] = biz_meta_elk["hits"]["total"]["value"] + data["searchList"] = search_list result = {"result": 1, "errorMessage": "", "data": data} return result diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index b7c08c9d..af557388 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -65,3 +65,15 @@ def update_els_data(db: object, es: object, st: str, et: str) -> None: bulk_meta_item.append(test_dict) es.insert_bulk(bulk_meta_item) + + +def get_srttn_count(data_srttn:dict,es: object): + cnt_dict = dict() + + for ko_nm,cnt_nm in data_srttn.items(): + es.body["query"]["bool"]["filter"][-1] = make_query("match","data_srttn",ko_nm) + search_result = es.search() + cnt_dict[cnt_nm[0]] = search_result["hits"]["total"]["value"] + + return cnt_dict + From 432de2850eba5397a8ed3f3d08318fc4e1b31b3a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 29 Aug 2022 17:28:34 +0900 Subject: [PATCH 178/323] =?UTF-8?q?feat:=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EC=8B=A4=ED=96=89=20=EC=88=9C=EC=84=9C?= =?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/ApiList/meta/getElsBizMetaList.py | 7 +++++-- API-SERVICE/ConnectManager/ElasticSearchManager.py | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 03acf575..27c846d8 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -27,18 +27,21 @@ def api(perPage: int = 12, es.set_sort(sortOption) if len(filterOption): - count_name = data_srttn[dataSrttn][0] es.set_filter(filterOption) + + if len(dataSrttn) and dataSrttn != "전체": + count_name = data_srttn[dataSrttn][0] filter_srttn = make_query("match","data_srttn",dataSrttn) es.body["query"]["bool"]["filter"].append(filter_srttn) data_srttn.pop(dataSrttn) else: count_name = "totalCount" - data = get_srttn_count(data_srttn,es) es.set_match(keyword_dict,matchOption) biz_meta_elk = es.search() + data = get_srttn_count(data_srttn,es) + except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 60ddaea8..c01267df 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -50,8 +50,8 @@ def set_pagination(self) -> None: def set_filter(self, filter_option: dict) -> None: filter_list = [] - if "data_srttn" in filter_option.keys() and "전체" in filter_option["data_srttn"]: - filter_option.pop("data_srttn") + # if "data_srttn" in filter_option.keys() and "전체" in filter_option["data_srttn"]: + # filter_option.pop("data_srttn") for option, items in filter_option.items(): filter_list.extend([make_query("match",option,item) for item in items]) From 1bafeb7cf1530f616e0c73cefb2b1d83fda0e2d4 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 30 Aug 2022 15:49:36 +0900 Subject: [PATCH 179/323] =?UTF-8?q?fix:=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95,=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=95=A8=EC=88=98=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/getElsBizMetaList.py | 40 +++++++++++-------- API-SERVICE/Utils/ESUtils.py | 10 ----- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 27c846d8..93e0f616 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -1,5 +1,6 @@ from typing import Dict -from Utils.ESUtils import div_keyword, make_query, get_srttn_count +from copy import deepcopy +from Utils.ESUtils import div_keyword, make_query from Utils.CommonUtil import get_exception_info from ConnectManager.ElasticSearchManager import ESSearch @@ -14,12 +15,13 @@ def api(perPage: int = 12, data_srttn = { # search_keyword: (result_key, result_data) - "전체": ["totalCount", None], - "보유데이터": ["hasCount", None], - "연동데이터": ["innerCount", None], - "외부데이터": ["externalCount", None], - "해외데이터": ["overseaCount", None] + "전체": "totalCount", + "보유데이터": "hasCount", + "연동데이터": "innerCount", + "외부데이터": "externalCount", + "해외데이터": "overseaCount" } + data = dict() try: keyword_dict = div_keyword(keywordList) @@ -29,25 +31,31 @@ def api(perPage: int = 12, if len(filterOption): es.set_filter(filterOption) - if len(dataSrttn) and dataSrttn != "전체": - count_name = data_srttn[dataSrttn][0] + es.set_match(keyword_dict,matchOption) + + for ko_nm, eng_nm in data_srttn.items(): + cnt_body_query = {"query": deepcopy(es.body["query"])} + + if "filter" not in cnt_body_query["query"]["bool"].keys(): + cnt_body_query["query"]["bool"]["filter"] = [] + + if ko_nm != "전체": + filter_srttn = make_query("match","data_srttn",ko_nm) + cnt_body_query["query"]["bool"]["filter"].append(filter_srttn) + + cnt = es.conn.count(index=es.index,body=cnt_body_query)["count"] + data[eng_nm] = cnt + + if dataSrttn != "전체": filter_srttn = make_query("match","data_srttn",dataSrttn) es.body["query"]["bool"]["filter"].append(filter_srttn) - data_srttn.pop(dataSrttn) - else: - count_name = "totalCount" - es.set_match(keyword_dict,matchOption) biz_meta_elk = es.search() - - data = get_srttn_count(data_srttn,es) - except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: search_list = [data["_source"] for data in biz_meta_elk["hits"]["hits"]] - data[count_name] = biz_meta_elk["hits"]["total"]["value"] data["searchList"] = search_list result = {"result": 1, "errorMessage": "", "data": data} diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index af557388..0dd63912 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -67,13 +67,3 @@ def update_els_data(db: object, es: object, st: str, et: str) -> None: es.insert_bulk(bulk_meta_item) -def get_srttn_count(data_srttn:dict,es: object): - cnt_dict = dict() - - for ko_nm,cnt_nm in data_srttn.items(): - es.body["query"]["bool"]["filter"][-1] = make_query("match","data_srttn",ko_nm) - search_result = es.search() - cnt_dict[cnt_nm[0]] = search_result["hits"]["total"]["value"] - - return cnt_dict - From 8bee8fb120774d71066aa5c76a4f5163a9f02f1e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 30 Aug 2022 15:50:23 +0900 Subject: [PATCH 180/323] =?UTF-8?q?feat:=20=EB=B3=80=EA=B2=BD=EB=90=9C=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EB=82=B4=EC=9A=A9=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertElsBizMeta.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertElsBizMeta.py b/API-SERVICE/ApiList/meta/insertElsBizMeta.py index 79b7471f..e570e9e2 100644 --- a/API-SERVICE/ApiList/meta/insertElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertElsBizMeta.py @@ -2,7 +2,7 @@ from typing import Dict from Utils.CommonUtil import get_exception_info from pydantic import BaseModel -from Utils.ESUtils import ESSearch +from ConnectManager.ElasticSearchManager import ESSearch class BizMeta(BaseModel): @@ -36,7 +36,7 @@ def api(biz_meta_data: BizMeta) -> Dict: es = ESSearch() biz_meta_data = biz_meta_data.dict() biz_meta_data["biz_dataset_id"] = uid - es.conn.index(index=es.index,body=biz_meta_data) + es.insert(biz_meta_data, biz_meta_data["biz_dataset_id"]) except Exception: except_name = get_exception_info() From 7dbe2f48cb9f0f91690fd89457f199243c8c2471 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 31 Aug 2022 12:24:27 +0900 Subject: [PATCH 181/323] =?UTF-8?q?feat:=20getElsBizMetaList=EC=9D=98=20pa?= =?UTF-8?q?rameter=20=EC=A0=95=EB=A6=AC,=20div=5Fkeyword=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=A1=B0=EA=B1=B4=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/ApiList/meta/getElsBizMetaList.py | 37 +++++++++++-------- API-SERVICE/Utils/ESUtils.py | 19 ++++++---- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 93e0f616..f66f1db3 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -1,17 +1,22 @@ -from typing import Dict +from typing import Dict, Optional from copy import deepcopy +from pydantic import BaseModel from Utils.ESUtils import div_keyword, make_query from Utils.CommonUtil import get_exception_info from ConnectManager.ElasticSearchManager import ESSearch -def api(perPage: int = 12, - curPage: int = 1, - keywordList: list = [], - sortOption: list = [], - filterOption: dict = dict(), - dataSrttn: str = "전체", - matchOption: str = "AND") -> Dict: +class SearchOption(BaseModel): + perPage: int = 12 + curPage: int = 1 + keywordList: Optional[list] = None + sortOption: Optional[list] = [] + filterOption: dict = dict() + dataSrttn: str = "전체" + matchOption: str = "AND" + + +def api(search_option: SearchOption) -> Dict: data_srttn = { # search_keyword: (result_key, result_data) @@ -24,14 +29,14 @@ def api(perPage: int = 12, data = dict() try: - keyword_dict = div_keyword(keywordList) - es = ESSearch(cur_from=curPage,size=perPage) - es.set_sort(sortOption) + keyword_dict = div_keyword(search_option.keywordList) + es = ESSearch(cur_from=search_option.curPage,size=search_option.perPage) + es.set_sort(search_option.sortOption) - if len(filterOption): - es.set_filter(filterOption) + if len(search_option.filterOption): + es.set_filter(search_option.filterOption) - es.set_match(keyword_dict,matchOption) + es.set_match(keyword_dict,search_option.matchOption) for ko_nm, eng_nm in data_srttn.items(): cnt_body_query = {"query": deepcopy(es.body["query"])} @@ -46,8 +51,8 @@ def api(perPage: int = 12, cnt = es.conn.count(index=es.index,body=cnt_body_query)["count"] data[eng_nm] = cnt - if dataSrttn != "전체": - filter_srttn = make_query("match","data_srttn",dataSrttn) + if search_option.dataSrttn != "전체": + filter_srttn = make_query("match","data_srttn",search_option.dataSrttn) es.body["query"]["bool"]["filter"].append(filter_srttn) biz_meta_elk = es.search() diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index 0dd63912..525f301d 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -16,14 +16,17 @@ def make_query(op, field, value) -> Dict[Any,Any]: def div_keyword(keyword_list: list) -> Dict[Any,Any]: keyword_dict = {"match_phrase": [], "match": []} - for keyword in keyword_list: - k = keyword.replace(" ","") - if len(k) < 1: - continue - if is_space(keyword): - keyword_dict["match_phrase"].append(keyword) - else: - keyword_dict["match"].append(keyword) + if keyword_list is None: + return keyword_dict + else: + for keyword in keyword_list: + k = keyword.replace(" ","") + if len(k) < 1: + continue + if is_space(keyword): + keyword_dict["match_phrase"].append(keyword) + else: + keyword_dict["match"].append(keyword) return keyword_dict From a014d7266cc57adac03b9c84b2ed2d88e6b5e88a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Sep 2022 09:39:16 +0900 Subject: [PATCH 182/323] =?UTF-8?q?feat:=20biz=5Fmeta=20index=EC=9D=98=20d?= =?UTF-8?q?ocument=20=EC=82=AD=EC=A0=9C=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/deleteElsBizMeta.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/deleteElsBizMeta.py diff --git a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py new file mode 100644 index 00000000..0857014a --- /dev/null +++ b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py @@ -0,0 +1,16 @@ +from Utils.CommonUtil import get_exception_info +from ConnectManager.ElasticSearchManager import ESSearch + + +def api(biz_dataset_id: str): + try: + es = ESSearch() + es.delete("biz_dataset_id", biz_dataset_id) + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 1, "errorMessage": ""} + return result + From 28c164b6651fcbb7d5de6898027cec7de4742f1e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 2 Sep 2022 09:07:48 +0900 Subject: [PATCH 183/323] =?UTF-8?q?[AIPLATFORM-477]=20chore:=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=EC=97=86=EB=8A=94=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateElsBizMeta.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 API-SERVICE/ApiList/meta/updateElsBizMeta.py diff --git a/API-SERVICE/ApiList/meta/updateElsBizMeta.py b/API-SERVICE/ApiList/meta/updateElsBizMeta.py deleted file mode 100644 index e69de29b..00000000 From 06c6a8195c76747b5674a5e6bf8c738cbbdcd536 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 2 Sep 2022 09:44:21 +0900 Subject: [PATCH 184/323] =?UTF-8?q?[AIPLATFORM-477]=20feat:=20deleteElsBiz?= =?UTF-8?q?Meta=20api=20config=20=EC=B6=94=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 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index f3cc6ad4..56b59f28 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -131,4 +131,10 @@ sub_dir = meta [getElsBizMetaList] method = GET url = /portal/api/meta/getElsBizMetaList -sub_dir = meta \ No newline at end of file +sub_dir = meta + +[deleteElsBizMeta] +method = GET +url = /portal/api/meta/deleteElsBizMeta +sub_dir = meta + From 36cbec021131f27be26006aedc69752907b01925 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 2 Sep 2022 13:46:55 +0900 Subject: [PATCH 185/323] =?UTF-8?q?[AIPLATFORM-477]=20feat:=20=ED=95=9C?= =?UTF-8?q?=EC=9E=90=EC=97=B0=20column=EB=AA=85=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/insertElsBizMeta.py | 41 ++++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/API-SERVICE/ApiList/meta/insertElsBizMeta.py b/API-SERVICE/ApiList/meta/insertElsBizMeta.py index e570e9e2..8e5cae2d 100644 --- a/API-SERVICE/ApiList/meta/insertElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertElsBizMeta.py @@ -6,28 +6,37 @@ class BizMeta(BaseModel): + biz_dataset_id: str + src_url: str + kywrd: str + ctgry: str + data_updt_cyc: str adm_dep: str - adm_dep_hp: str admr_nm: str - copyright: str - ctgry: str + file_read_authority: str + retv_num: str data_desc: str - data_nm: str data_prv_desk: str - data_shap: str - data_updt_cyc: str - file_read_authority: str - file_type: str - kywrd: str - lang: str license: str + lang: str + adm_dep_hp: str + data_nm: str + updt_nxt_dt: str + updt_dt: str + reg_dt: str + reg_user: str + amd_user: str reg_date: str - retv_num: str - rqt_dep: str - src_sys: str - src_url: str - updt_date: str - updt_nxt_date: str + amd_date: str + data_shap: str + data_srttn: str + data_limit: str + othr_use_notes: str + data_eng_nm: str + downl_num: str + attnt_data_num: str + share_num: str + contents: str def api(biz_meta_data: BizMeta) -> Dict: From 4377b3ae1958e879b1279d9a77e99dbcde20aaf6 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 2 Sep 2022 15:58:44 +0900 Subject: [PATCH 186/323] =?UTF-8?q?[AIPLATFORM-477]=20fix:=20=ED=95=9C?= =?UTF-8?q?=EA=B8=80=20token=EB=8F=84=20=EA=B2=80=EC=83=89=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EC=88=98=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/ConnectManager/ElasticSearchManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index c01267df..99d023a4 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -57,7 +57,7 @@ def set_filter(self, filter_option: dict) -> None: filter_list.extend([make_query("match",option,item) for item in items]) self.body["query"]["bool"]["filter"] = filter_list - def set_match(self, keyword_dict: dict, operator: Optional[str] = "AND", field: str = "data_nm") -> None: + def set_match(self, keyword_dict: dict, operator: Optional[str] = "AND", field: str = "data_nm.korean_analyzer") -> None: """ :param keyword_dict: type dict :param field: search field, type str From 76b608fb8c8a7f99f9fe2dd072cefd21f38f4030 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 2 Sep 2022 15:59:05 +0900 Subject: [PATCH 187/323] =?UTF-8?q?[AIPLATFORM-477]=20fix:=20api=20method?= =?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/conf/meta/api_config.ini | 42 ++++++++++++++-------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 56b59f28..8963fafd 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -103,25 +103,25 @@ 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 +;[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 [insertElsBizMeta] method = POST @@ -129,12 +129,12 @@ url = /portal/api/meta/insertElsBizMeta sub_dir = meta [getElsBizMetaList] -method = GET +method = POST url = /portal/api/meta/getElsBizMetaList sub_dir = meta [deleteElsBizMeta] -method = GET +method = POST url = /portal/api/meta/deleteElsBizMeta sub_dir = meta From 0a9f2a70b205ea0575647647c77d9e3b4f1d0a32 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 5 Sep 2022 13:36:07 +0900 Subject: [PATCH 188/323] =?UTF-8?q?[AIPLATFORM-662]=20fix:=20pagination=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 --- API-SERVICE/ApiList/meta/getElsBizMetaList.py | 6 ++++-- API-SERVICE/ConnectManager/ElasticSearchManager.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index f66f1db3..52d0438a 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -27,10 +27,12 @@ def api(search_option: SearchOption) -> Dict: "해외데이터": "overseaCount" } data = dict() - + search_option.curPage = search_option.curPage - 1 + from_page = search_option.curPage * search_option.perPage try: + # 숫자랑 특수문자 조회 keyword_dict = div_keyword(search_option.keywordList) - es = ESSearch(cur_from=search_option.curPage,size=search_option.perPage) + es = ESSearch(cur_from=from_page,size=search_option.perPage) es.set_sort(search_option.sortOption) if len(search_option.filterOption): diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 99d023a4..ba2320b9 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -24,7 +24,7 @@ def __init__( self.port = port self.size = size self.index = index - self.cur_from = cur_from - 1 + self.cur_from = cur_from self.conn = self.connect() self.body = self.set_body() From 2bfc890067053ec4dfd1ce7c692568da8f3ca4af Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 6 Sep 2022 15:47:01 +0900 Subject: [PATCH 189/323] =?UTF-8?q?[AIPLATFORM-565]=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EA=B8=B0=EB=8A=A5=20=EB=B0=8F=20remote=20?= =?UTF-8?q?call=20=EA=B8=B0=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/RouteUtil.py | 5 +- API-SERVICE/ApiList/common/addTableColumn.py | 89 ------------------ API-SERVICE/ApiList/common/commonDelete.py | 26 ------ API-SERVICE/ApiList/common/commonInsert.py | 27 ------ .../ApiList/common/commonMultiInsert.py | 30 ------ API-SERVICE/ApiList/common/commonRegister.py | 39 ++++++++ .../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/ApiService/ApiServiceConfig.py | 1 + API-SERVICE/Utils/CommonUtil.py | 1 + API-SERVICE/conf/common/api_config.ini | 44 +-------- API-SERVICE/conf/common/config.ini | 4 + 16 files changed, 50 insertions(+), 466 deletions(-) delete mode 100644 API-SERVICE/ApiList/common/addTableColumn.py delete mode 100644 API-SERVICE/ApiList/common/commonDelete.py delete mode 100644 API-SERVICE/ApiList/common/commonInsert.py delete mode 100644 API-SERVICE/ApiList/common/commonMultiInsert.py create mode 100644 API-SERVICE/ApiList/common/commonRegister.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/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 69b84dec..c323f5ba 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -83,6 +83,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() + res_msg = {"result": result, "errorMessage": except_name} logger.error(f'SSH connection failed: {except_name}') - - return eval(result) + res_msg = {"result": result, "errorMessage": "", "body": eval(result)} + return res_msg diff --git a/API-SERVICE/ApiList/common/addTableColumn.py b/API-SERVICE/ApiList/common/addTableColumn.py deleted file mode 100644 index d85b81d6..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() - - 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 f2cf8134..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() - 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/commonInsert.py b/API-SERVICE/ApiList/common/commonInsert.py deleted file mode 100644 index 21ac42f8..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() - 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 f00079b3..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() - 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/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py new file mode 100644 index 00000000..37b9933d --- /dev/null +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -0,0 +1,39 @@ +from typing import Dict +from pydantic import BaseModel +from fastapi.logger import logger +from passlib.context import CryptContext +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from ApiService.ApiServiceConfig import config + +pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") + + +class commonRegister(BaseModel): + data: Dict + + +def make_query(register: commonRegister): + columns = ", ".join(register.data.keys()) + register.data[config.user_info["pass_key"]] = pwd_context.hash( + register.data[config.user_info["pass_key"]]) + values = ", ".join(map(convert_data, register.data.values())) + query = f'INSERT INTO {config.user_info["table"]} ({columns}) VALUES ({values});' + return query + + +def api(register: commonRegister) -> Dict: + try: + query = make_query(register) + + db = connect_db() + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + 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/commonSelectForPaging.py b/API-SERVICE/ApiList/common/commonSelectForPaging.py deleted file mode 100644 index 180d7ca9..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() - 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 7ed77c9c..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() - 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 80fe158c..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() - 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 6b15c8cf..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() - 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 8f0f4bed..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() - 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 ceb7fd15..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() - 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/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index b56e6ed1..ea498c84 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/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 7e760287..54097287 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -64,6 +64,7 @@ def prepare_config() -> None: 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"] + config.user_info = api_router_cfg["user_info"] def make_connection_pool(db_info): diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 6aea9c45..073a8fc0 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -3,52 +3,12 @@ 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 - [commonExecute] method = POST url = /portal/api/common/commonExecute sub_dir = common -[commonUpdate] -method = POST -url = /portal/api/common/commonUpdate -sub_dir = common - -[commonDelete] +[commonRegister] method = POST -url = /portal/api/common/commonDelete +url = /portal/api/common/user/commonRegister 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 index 70deaf72..95ce8cda 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -17,3 +17,7 @@ schema = users,meta,sitemng,board,analysis,sysconfig [secret_info] name = user-katech-access-token secret = jwt-secrect-b-iris + +[user_info] +table = tb_user_info +pass_key = user_password \ No newline at end of file From 3357a67d8d0bff31c592a10cce63e0950f1dccc8 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 6 Sep 2022 16:34:54 +0900 Subject: [PATCH 190/323] =?UTF-8?q?chore:=20elasticsearch=20port=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/ConnectManager/ElasticSearchManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index ba2320b9..edca85db 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -7,7 +7,7 @@ class ESSearch: def __init__( self, host: str = "localhost", - port: str = "9200", + port: str = "39200", cur_from: int = 1, size: int = 10, index: str = "biz_meta" From 84d82a3f00db5b62287fd8dd674ef78e6a3d31ff Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 7 Sep 2022 09:56:57 +0900 Subject: [PATCH 191/323] =?UTF-8?q?[AIPLATFORM-678]=20=EA=B3=B5=ED=86=B5?= =?UTF-8?q?=20=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/Utils/CommonUtil.py | 12 ---- API-SERVICE/ApiList/common/commonLogin.py | 71 ++++++++++++++++++++ API-SERVICE/ApiList/common/commonRegister.py | 12 ++-- API-SERVICE/ApiService/ApiServiceConfig.py | 5 +- API-SERVICE/Utils/CommonUtil.py | 14 ++-- API-SERVICE/conf/common/api_config.ini | 5 ++ API-SERVICE/conf/common/config.ini | 8 ++- 7 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 API-SERVICE/ApiList/common/commonLogin.py diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 47351c6d..9e0d840d 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -1,7 +1,6 @@ import os import configparser import argparse -import starlette.datastructures from fastapi.logger import logger from pathlib import Path from typing import Any, Dict, List @@ -86,17 +85,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: - 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() trace_back = traceback.extract_tb(ex_traceback) diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py new file mode 100644 index 00000000..189fc564 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -0,0 +1,71 @@ +from typing import Dict, Optional +from pydantic import BaseModel +from fastapi.logger import logger +from datetime import datetime, timedelta +from jose import jwt +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from ApiService.ApiServiceConfig import config + + +class IncorrectUserName(Exception): + pass + + +class IncorrectPassword(Exception): + pass + + +class commonLogin(BaseModel): + data: Dict + + +def verify_password(plain_password, hashed_password): + return config.pwd_context.verify(plain_password, hashed_password) + + +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)}') + print(f"USER: {user[0]}") + return user + + +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 + + +def create_token(data: dict, expires_delta: Optional[timedelta] = None): + to_encode = data.copy() + if expires_delta: + expire = datetime.utcnow() + expires_delta + else: + expire = datetime.utcnow() + timedelta(minutes=15) + 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 api(login: commonLogin) -> Dict: + try: + user = authenticate_user( + login.data[config.user_info["id_column"]], login.data[config.user_info["password_column"]]) + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + access_token = create_token( + data={"sub": user[config.user_info["id_column"]]}, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) + result = {"result": 1, "errorMessage": "", "data": { + "access_token": access_token, "token_type": "bearer"}} + + return result diff --git a/API-SERVICE/ApiList/common/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py index 37b9933d..1b1cc4a6 100644 --- a/API-SERVICE/ApiList/common/commonRegister.py +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -1,24 +1,24 @@ from typing import Dict from pydantic import BaseModel from fastapi.logger import logger -from passlib.context import CryptContext from Utils.CommonUtil import connect_db, get_exception_info from Utils.DataBaseUtil import convert_data from ApiService.ApiServiceConfig import config -pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") - class commonRegister(BaseModel): data: Dict def make_query(register: commonRegister): + password_column = config.user_info["password_column"] + user_info_table = config.user_info["table"] + columns = ", ".join(register.data.keys()) - register.data[config.user_info["pass_key"]] = pwd_context.hash( - register.data[config.user_info["pass_key"]]) + register.data[password_column] = config.pwd_context.hash( + register.data[password_column]) values = ", ".join(map(convert_data, register.data.values())) - query = f'INSERT INTO {config.user_info["table"]} ({columns}) VALUES ({values});' + query = f'INSERT INTO {user_info_table} ({columns}) VALUES ({values});' return query diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index ea498c84..96f9d969 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -1,5 +1,6 @@ -from typing import Dict, List +from typing import Dict from psycopg2 import pool +from passlib.context import CryptContext class ApiServiceConfig: @@ -19,6 +20,8 @@ class ApiServiceConfig: secret_info: Dict user_info: Dict + pwd_context: CryptContext + conn_pool: pool.SimpleConnectionPool diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 54097287..c18f3e2c 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -5,14 +5,13 @@ from fastapi.logger import logger from pathlib import Path from typing import Any -from ApiService.ApiServiceConfig import config -from ConnectManager import PostgresManager -from retry import retry -import psycopg2 +from passlib.context import CryptContext from psycopg2 import pool import jwt import sys import traceback +from ApiService.ApiServiceConfig import config +from ConnectManager import PostgresManager def set_log_path(): @@ -63,8 +62,11 @@ def prepare_config() -> 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"] - config.user_info = api_router_cfg["user_info"] + if config.category == "common": + config.secret_info = api_router_cfg["secret_info"] + config.user_info = api_router_cfg["user_info"] + config.pwd_context = CryptContext( + schemes=["bcrypt"], deprecated="auto") def make_connection_pool(db_info): diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 073a8fc0..3af7b83f 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -12,3 +12,8 @@ sub_dir = common method = POST url = /portal/api/common/user/commonRegister sub_dir = common + +[commonLogin] +method = POST +url = /portal/api/common/user/commonLogin +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 index 95ce8cda..5c1597fe 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -15,9 +15,11 @@ database = dataportal 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 = 360 [user_info] table = tb_user_info -pass_key = user_password \ No newline at end of file +id_column = user_id +password_column = user_password \ No newline at end of file From 7b37580f6a33021e1a8641403140d4db75bc643d Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 7 Sep 2022 14:26:10 +0900 Subject: [PATCH 192/323] =?UTF-8?q?[AIPLATFORM-678]=20JWT=20=EC=9C=A0?= =?UTF-8?q?=ED=9A=A8=EC=84=B1=20=EC=B2=B4=ED=81=AC=20=EB=B0=8F=20=EC=9E=AC?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=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/common/commonLogin.py | 1 + API-SERVICE/ApiList/common/commonToken.py | 61 +++++++++++++++++++++++ API-SERVICE/conf/common/api_config.ini | 5 ++ API-SERVICE/conf/common/config.ini | 3 +- 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/common/commonToken.py diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 189fc564..2d6d2e92 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -36,6 +36,7 @@ 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 diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py new file mode 100644 index 00000000..d53410f5 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -0,0 +1,61 @@ +from typing import Dict, Optional +from fastapi.logger import logger +from datetime import datetime, timedelta +from jose import jwt +from Utils.CommonUtil import connect_db, get_exception_info +from Utils.DataBaseUtil import convert_data +from ApiService.ApiServiceConfig import config +from starlette.requests import Request + + +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(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.utcnow() + expires_delta + else: + expire = datetime.utcnow() + timedelta(minutes=15) + 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 api(request: Request) -> Dict: + try: + access_token = request.headers.get(config.secret_info["header_name"]) + if not access_token: + raise TokenDoesNotExist + payload = jwt.decode(token=access_token, + key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) + + username = payload["sub"] + 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: + access_token = create_token(data={"sub": user[config.user_info["id_column"]]}, expires_delta=timedelta( + minutes=int(config.secret_info["expire_min"]))) + + result = {"result": 1, "errorMessage": "", "data": { + "access_token": access_token, "token_type": "bearer"}} + return result diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 3af7b83f..7fcf8bba 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -16,4 +16,9 @@ sub_dir = common [commonLogin] method = POST url = /portal/api/common/user/commonLogin +sub_dir = common + +[commonToken] +method = GET +url = /portal/api/common/user/commonToken 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 index 5c1597fe..151084b6 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -17,7 +17,8 @@ schema = users,meta,sitemng,board,analysis,sysconfig [secret_info] secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 -expire_min = 360 +expire_min = 5 +header_name = Authorization [user_info] table = tb_user_info From 90ac6b9a4254ed7c8e6776f66e45b1c2a1be980a Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 7 Sep 2022 16:26:57 +0900 Subject: [PATCH 193/323] =?UTF-8?q?[AIPLATFORM-678]=20remote=20call=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-ROUTER/Utils/RouteUtil.py | 4 ++-- API-SERVICE/ApiList/common/commonLogin.py | 3 +-- API-SERVICE/ApiList/common/commonToken.py | 13 ++++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index c323f5ba..ad42fbbf 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -83,7 +83,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() - res_msg = {"result": result, "errorMessage": except_name} + res_msg = {"result": 0, "errorMessage": except_name} logger.error(f'SSH connection failed: {except_name}') - res_msg = {"result": result, "errorMessage": "", "body": eval(result)} + res_msg = {"result": 1, "errorMessage": "", "data": eval(result)} return res_msg diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 2d6d2e92..6b7eafb8 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -66,7 +66,6 @@ def api(login: commonLogin) -> Dict: else: access_token = create_token( data={"sub": user[config.user_info["id_column"]]}, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) - result = {"result": 1, "errorMessage": "", "data": { - "access_token": access_token, "token_type": "bearer"}} + result = {"result": 1, "errorMessage": "", "data": access_token} return result diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py index d53410f5..c55e250c 100644 --- a/API-SERVICE/ApiList/common/commonToken.py +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -6,6 +6,7 @@ from Utils.DataBaseUtil import convert_data from ApiService.ApiServiceConfig import config from starlette.requests import Request +from pytz import timezone class InvalidUserInfo(Exception): @@ -26,9 +27,11 @@ def get_user(user_name: str): def create_token(data: dict, expires_delta: Optional[timedelta] = None): to_encode = data.copy() if expires_delta: - expire = datetime.utcnow() + expires_delta + expire = datetime.now(timezone('Asia/Seoul')) + expires_delta else: - expire = datetime.utcnow() + timedelta(minutes=15) + expire = datetime.now(timezone('Asia/Seoul')) + timedelta(minutes=15) + + print(f'commonToken Expire : {expire}') to_encode.update({"exp": expire}) encoded_jwt = jwt.encode( @@ -43,7 +46,7 @@ def api(request: Request) -> Dict: raise TokenDoesNotExist payload = jwt.decode(token=access_token, key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) - + print(f'commonToken payload : {payload}') username = payload["sub"] user = get_user(username) if not user[0]: @@ -56,6 +59,6 @@ def api(request: Request) -> Dict: access_token = create_token(data={"sub": user[config.user_info["id_column"]]}, expires_delta=timedelta( minutes=int(config.secret_info["expire_min"]))) - result = {"result": 1, "errorMessage": "", "data": { - "access_token": access_token, "token_type": "bearer"}} + result = {"result": 1, "errorMessage": "", "data": access_token} + return result From 0bff5926dc050f7e801eb8705bfe16af02edde66 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:26:42 +0900 Subject: [PATCH 194/323] =?UTF-8?q?[AIPLATFORM-678]=20user=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A0=9C=EA=B3=B5=20API,=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-SERVICE/ApiList/common/commonExecute.py | 7 ++- API-SERVICE/ApiList/common/commonLogin.py | 39 ++++---------- API-SERVICE/ApiList/common/commonLogout.py | 33 ++++++++++++ API-SERVICE/ApiList/common/commonRegister.py | 7 ++- API-SERVICE/ApiList/common/commonSelect.py | 3 +- API-SERVICE/ApiList/common/commonToken.py | 43 ++++----------- API-SERVICE/ApiList/common/commonUserInfo.py | 36 +++++++++++++ API-SERVICE/ApiList/meta/addChildCategory.py | 3 +- .../ApiList/meta/deleteUseBoardData.py | 3 +- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 3 +- .../ApiList/meta/getBizMetaListByIds.py | 3 +- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 3 +- .../ApiList/meta/getUseBoardDataDetail.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 +- .../ApiList/meta/insertUseBoardData.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/sitemng/getCodeInfo.py | 3 +- API-SERVICE/ApiList/sitemng/getCodeList.py | 3 +- API-SERVICE/ConnectManager/PostgresManager.py | 17 ------ API-SERVICE/Utils/CommonUtil.py | 53 +++++++++++++++---- API-SERVICE/Utils/DataBaseUtil.py | 41 -------------- API-SERVICE/Utils/ESUtils.py | 14 +++-- API-SERVICE/Utils/__init__.py | 3 +- API-SERVICE/conf/common/api_config.ini | 10 ++++ API-SERVICE/conf/common/config.ini | 7 +-- 31 files changed, 176 insertions(+), 188 deletions(-) create mode 100644 API-SERVICE/ApiList/common/commonLogout.py create mode 100644 API-SERVICE/ApiList/common/commonUserInfo.py delete mode 100644 API-SERVICE/Utils/DataBaseUtil.py diff --git a/API-SERVICE/ApiList/common/commonExecute.py b/API-SERVICE/ApiList/common/commonExecute.py index 0097c26f..613a8d49 100644 --- a/API-SERVICE/ApiList/common/commonExecute.py +++ b/API-SERVICE/ApiList/common/commonExecute.py @@ -1,8 +1,7 @@ from typing import Dict, List, Optional from pydantic import BaseModel from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from Utils.CommonUtil import connect_db, get_exception_info, convert_data class commonExecute(BaseModel): @@ -12,7 +11,7 @@ class commonExecute(BaseModel): key: Optional[List[str]] = None -def make_query(excute: commonExecute): +def make_execute_query(excute: commonExecute): method = excute.method where = [] query = None @@ -40,7 +39,7 @@ def api(excute_list: List[commonExecute]) -> Dict: query_list = [] try: for excute in excute_list: - query_list.append(make_query(excute)) + query_list.append(make_execute_query(excute)) db = connect_db() time_zone = 'Asia/Seoul' diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 6b7eafb8..3c1e6c63 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -1,10 +1,9 @@ -from typing import Dict, Optional +from typing import Dict from pydantic import BaseModel from fastapi.logger import logger -from datetime import datetime, timedelta -from jose import jwt -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from fastapi.responses import JSONResponse +from datetime import timedelta +from Utils.CommonUtil import get_exception_info, get_user, create_token, make_token_data from ApiService.ApiServiceConfig import config @@ -24,14 +23,6 @@ def verify_password(plain_password, hashed_password): return config.pwd_context.verify(plain_password, hashed_password) -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)}') - print(f"USER: {user[0]}") - return user - - def authenticate_user(username: str, password: str): user = get_user(username) if not user[0]: @@ -43,29 +34,19 @@ def authenticate_user(username: str, password: str): return user -def create_token(data: dict, expires_delta: Optional[timedelta] = None): - to_encode = data.copy() - if expires_delta: - expire = datetime.utcnow() + expires_delta - else: - expire = datetime.utcnow() + timedelta(minutes=15) - 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 api(login: commonLogin) -> Dict: try: user = authenticate_user( login.data[config.user_info["id_column"]], login.data[config.user_info["password_column"]]) except Exception: except_name = get_exception_info() + access_token = "" result = {"result": 0, "errorMessage": except_name} else: + + token_data = make_token_data(user) access_token = create_token( - data={"sub": user[config.user_info["id_column"]]}, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) - result = {"result": 1, "errorMessage": "", "data": access_token} + data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) + result = {"result": 1, "errorMessage": ""} - return result + return JSONResponse(content=result, headers={config.secret_info["header_name"]: access_token}) diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py new file mode 100644 index 00000000..3fd3243e --- /dev/null +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -0,0 +1,33 @@ +from typing import Dict +from fastapi.logger import logger +from jose import jwt +from starlette.requests import Request +from Utils.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: + try: + access_token = request.headers.get(config.secret_info["header_name"]) + if not access_token: + raise TokenDoesNotExist + payload = jwt.decode(token=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} + else: + result = {"result": 1, "errorMessage": ""} + return result diff --git a/API-SERVICE/ApiList/common/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py index 1b1cc4a6..c77f41b9 100644 --- a/API-SERVICE/ApiList/common/commonRegister.py +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -1,8 +1,7 @@ from typing import Dict from pydantic import BaseModel from fastapi.logger import logger -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from Utils.CommonUtil import connect_db, get_exception_info, convert_data from ApiService.ApiServiceConfig import config @@ -10,7 +9,7 @@ class commonRegister(BaseModel): data: Dict -def make_query(register: commonRegister): +def make_register_query(register: commonRegister): password_column = config.user_info["password_column"] user_info_table = config.user_info["table"] @@ -24,7 +23,7 @@ def make_query(register: commonRegister): def api(register: commonRegister) -> Dict: try: - query = make_query(register) + query = make_register_query(register) db = connect_db() time_zone = 'Asia/Seoul' diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index ff715533..d9d44545 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -1,7 +1,6 @@ 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 Utils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data from pydantic import BaseModel from fastapi.logger import logger diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py index c55e250c..0edd9b65 100644 --- a/API-SERVICE/ApiList/common/commonToken.py +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -1,12 +1,11 @@ -from typing import Dict, Optional +from typing import Dict from fastapi.logger import logger -from datetime import datetime, timedelta +from fastapi.responses import JSONResponse +from datetime import timedelta from jose import jwt -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from Utils.CommonUtil import get_exception_info, get_user, create_token, make_token_data from ApiService.ApiServiceConfig import config from starlette.requests import Request -from pytz import timezone class InvalidUserInfo(Exception): @@ -17,28 +16,6 @@ class TokenDoesNotExist(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) - - print(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 api(request: Request) -> Dict: try: access_token = request.headers.get(config.secret_info["header_name"]) @@ -46,19 +23,19 @@ def api(request: Request) -> Dict: raise TokenDoesNotExist payload = jwt.decode(token=access_token, key=config.secret_info["secret_key"], algorithms=config.secret_info["algorithm"]) - print(f'commonToken payload : {payload}') - username = payload["sub"] + 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() + access_token = "" result = {"result": 0, "errorMessage": except_name} else: - access_token = create_token(data={"sub": user[config.user_info["id_column"]]}, expires_delta=timedelta( + 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": ""} - result = {"result": 1, "errorMessage": "", "data": access_token} - - return result + return JSONResponse(content=result, headers={config.secret_info["header_name"]: access_token}) diff --git a/API-SERVICE/ApiList/common/commonUserInfo.py b/API-SERVICE/ApiList/common/commonUserInfo.py new file mode 100644 index 00000000..b7b70e01 --- /dev/null +++ b/API-SERVICE/ApiList/common/commonUserInfo.py @@ -0,0 +1,36 @@ +from typing import Dict +from fastapi.logger import logger +from jose import jwt +from Utils.CommonUtil import get_exception_info, get_user, make_res_msg +from ApiService.ApiServiceConfig import config +from starlette.requests import Request + + +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(Exception): + pass + + +def api(request: Request) -> Dict: + try: + access_token = request.headers.get(config.secret_info["header_name"]) + if not access_token: + raise TokenDoesNotExist + payload = jwt.decode(token=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() + access_token = "" + result = {"result": 0, "errorMessage": except_name} + else: + result = {"result": 0, "errorMessage": "", "data": {"body": payload}} + + return result diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 38b4a73f..03131aa6 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -1,8 +1,7 @@ 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 Utils.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/ApiList/meta/deleteUseBoardData.py index d81286a0..d3f73d94 100644 --- a/API-SERVICE/ApiList/meta/deleteUseBoardData.py +++ b/API-SERVICE/ApiList/meta/deleteUseBoardData.py @@ -1,7 +1,6 @@ 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 Utils.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/ApiList/meta/getBizMetaDetail.py index 1d6a8adf..b033802e 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ b/API-SERVICE/ApiList/meta/getBizMetaDetail.py @@ -1,7 +1,6 @@ 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 Utils.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/getBizMetaListByIds.py b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py index 6cece1ca..0b565146 100644 --- a/API-SERVICE/ApiList/meta/getBizMetaListByIds.py +++ b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py @@ -1,8 +1,7 @@ from fastapi.logger import logger 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 Utils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data def api(datasetIdList: str) -> Dict: diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py index 3b3d7a2b..8b95557f 100644 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ b/API-SERVICE/ApiList/meta/getMetaNameDetail.py @@ -1,7 +1,6 @@ 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 Utils.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/ApiList/meta/getUseBoardDataDetail.py index 7166f60a..fe781969 100644 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py @@ -1,7 +1,6 @@ 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 Utils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data def api(apyr: str) -> Dict: diff --git a/API-SERVICE/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py index f739eca4..4f61e30c 100644 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertBizMeta.py @@ -1,8 +1,7 @@ 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 Utils.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/ApiList/meta/insertBizMetaData.py index 2418798f..940815db 100644 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ b/API-SERVICE/ApiList/meta/insertBizMetaData.py @@ -1,8 +1,7 @@ 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 Utils.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/ApiList/meta/insertMetaMap.py index 023465fa..d27d2ead 100644 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ b/API-SERVICE/ApiList/meta/insertMetaMap.py @@ -2,8 +2,7 @@ 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 +from Utils.CommonUtil import connect_db, get_exception_info, convert_data class NmIdList(BaseModel): diff --git a/API-SERVICE/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py index e3036f0b..e3ee075e 100644 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ b/API-SERVICE/ApiList/meta/insertMetaName.py @@ -2,8 +2,7 @@ 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 Utils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel, Field diff --git a/API-SERVICE/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py index f91f8a66..1982fcd8 100644 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ b/API-SERVICE/ApiList/meta/insertUseBoardData.py @@ -1,8 +1,7 @@ from typing import Dict import uuid from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from Utils.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/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py index fb12a4d5..2f35aa9c 100644 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateBizMeta.py @@ -1,7 +1,6 @@ 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 Utils.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/ApiList/meta/updateCategory.py index b053ed26..3170bab8 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -1,7 +1,6 @@ import uuid from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info -from Utils.DataBaseUtil import convert_data +from Utils.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/ApiList/meta/updateMetaName.py index 92dc2e22..9da58eab 100644 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ b/API-SERVICE/ApiList/meta/updateMetaName.py @@ -1,7 +1,6 @@ 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 Utils.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/ApiList/meta/updateUseBoardData.py index d97b9d2d..1748cf64 100644 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ b/API-SERVICE/ApiList/meta/updateUseBoardData.py @@ -1,7 +1,6 @@ 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 Utils.CommonUtil import connect_db, get_exception_info, convert_data from pydantic import BaseModel from datetime import datetime, timedelta diff --git a/API-SERVICE/ApiList/sitemng/getCodeInfo.py b/API-SERVICE/ApiList/sitemng/getCodeInfo.py index 11024c51..b8b96bec 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeInfo.py +++ b/API-SERVICE/ApiList/sitemng/getCodeInfo.py @@ -1,7 +1,6 @@ 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 Utils.CommonUtil import connect_db, get_exception_info, convert_data def api(groupId) -> Dict: diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index e41d94a6..ec8540f9 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -1,8 +1,7 @@ from typing import Dict from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info +from Utils.CommonUtil import connect_db, get_exception_info, convert_data from fastapi.logger import logger -from Utils.DataBaseUtil import convert_data def api(perPage: int, diff --git a/API-SERVICE/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index bcd67555..fdddf67d 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/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,22 +45,6 @@ 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() diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index c18f3e2c..677283e0 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,10 +1,11 @@ +from datetime import datetime, timedelta +from pytz import timezone import os import configparser import argparse -import starlette.datastructures from fastapi.logger import logger from pathlib import Path -from typing import Any +from typing import Any, Optional, Dict from passlib.context import CryptContext from psycopg2 import pool import jwt @@ -14,6 +15,16 @@ from ConnectManager import PostgresManager +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( @@ -107,15 +118,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) @@ -133,3 +135,32 @@ def convert_error_message(exception_name: str): error_message = exception_name return error_message + + +##### for user info ##### +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 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/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index 525f301d..ddd507ea 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -1,5 +1,5 @@ from typing import Union, Optional, List, Dict, Any -from Utils.DataBaseUtil import convert_data +from Utils.CommonUtil import convert_data def is_space(text: str) -> int: @@ -9,18 +9,18 @@ def is_space(text: str) -> int: return 0 -def make_query(op, field, value) -> Dict[Any,Any]: +def make_query(op, field, value) -> Dict[Any, Any]: query = {op: {field: value}} return query -def div_keyword(keyword_list: list) -> Dict[Any,Any]: +def div_keyword(keyword_list: list) -> Dict[Any, Any]: keyword_dict = {"match_phrase": [], "match": []} if keyword_list is None: return keyword_dict else: for keyword in keyword_list: - k = keyword.replace(" ","") + k = keyword.replace(" ", "") if len(k) < 1: continue if is_space(keyword): @@ -37,10 +37,10 @@ def set_dict_list(option_items: Union[list, dict], for item in option_items: if field: # option_item type list - query = make_query(operator,field,item) + query = make_query(operator, field, item) else: # option item type dict - query = make_query(operator,item,option_items[item]) + query = make_query(operator, item, option_items[item]) query_list.append(query) return query_list @@ -68,5 +68,3 @@ def update_els_data(db: object, es: object, st: str, et: str) -> None: bulk_meta_item.append(test_dict) es.insert_bulk(bulk_meta_item) - - diff --git a/API-SERVICE/Utils/__init__.py b/API-SERVICE/Utils/__init__.py index c0ef5313..2fb0e584 100644 --- a/API-SERVICE/Utils/__init__.py +++ b/API-SERVICE/Utils/__init__.py @@ -1,3 +1,2 @@ from .CommonUtil import * -from .DataBaseUtil import * -from .ESUtils import * \ No newline at end of file +from .ESUtils import * diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index 7fcf8bba..e1842ecd 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -18,7 +18,17 @@ method = POST url = /portal/api/common/user/commonLogin sub_dir = common +[commonLogout] +method = POST +url = /portal/api/common/user/commonLogout +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 \ No newline at end of file diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 151084b6..71be209d 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -17,10 +17,11 @@ schema = users,meta,sitemng,board,analysis,sysconfig [secret_info] secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 -expire_min = 5 -header_name = Authorization +expire_min = 30 +header_name = user-katech-access-token +token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role [user_info] table = tb_user_info id_column = user_id -password_column = user_password \ No newline at end of file +password_column = user_password From 5767c1959ef8682c09b148bd09d645eee6d45444 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 13 Sep 2022 15:14:06 +0900 Subject: [PATCH 195/323] =?UTF-8?q?[AIPLATFORM-678]=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=84=B0=20=EC=9D=B8=EC=A6=9D=ED=97=A4=EB=8D=94=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EA=B8=B0=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/ApiRoute/ApiRoute.py | 32 +++++++++++++++++++--------- API-ROUTER/Utils/RouteUtil.py | 37 +++++++++++++++------------------ API-ROUTER/conf/config.ini | 4 ++-- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index f2732448..03bccd68 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -2,6 +2,7 @@ from typing import Dict, List import importlib.util from fastapi import APIRouter +from fastapi.responses import JSONResponse 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 @@ -323,7 +324,10 @@ 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") + req_access_token = request.headers.get( + config.secret_info["header_name"]) + res_access_token = None + access_token = "" headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) @@ -342,12 +346,9 @@ async def route_api(self, request: Request) -> Dict: if len(api_info) == 0: return {"result": 0, "errorMessage": "This is an unregistered API."} - if content_type == "application/json": + body = None + if method == "POST": body = await request.json() - api_info["msg_type"] = "JSON" - else: - body = await request.body() - api_info["msg_type"] = "BINARY" params_query = parse.unquote(str(request.query_params)) logger.info( @@ -357,10 +358,21 @@ async def route_api(self, request: Request) -> Dict: 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}') + logger.info(f'mode : {api_info["mode"]}') if api_info["mode"] == "MESSAGE PASSING": - result = await bypass_msg(api_info, params_query, body, headers) + result, res_access_token = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) - return result + + remove_header_api_list = config.secret_info["remove_header_api"].split( + ",") + + if api_info["api_nm"] not in remove_header_api_list: + if res_access_token is None: + if req_access_token is not None: + access_token = req_access_token + else: + access_token = res_access_token + + logger.info(f'access token : {access_token}') + return JSONResponse(content=result, headers={config.secret_info["header_name"]: access_token}) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index ad42fbbf..f352644a 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/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: @@ -38,18 +37,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.headers.get( + config.secret_info["header_name"]) 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: + access_token = response.headers.get( + config.secret_info["header_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): @@ -62,20 +61,18 @@ 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}' diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 71ed13ed..258e0f31 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -21,5 +21,5 @@ database = dataportal schema = sitemng [secret_info] -name = user-katech-access-token -secret = jwt-secrect-b-iris \ No newline at end of file +header_name = user-katech-access-token +remove_header_api = commonLogout \ No newline at end of file From c2ea256d2adb535f736dda62708aac61489fff03 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 14 Sep 2022 09:57:43 +0900 Subject: [PATCH 196/323] =?UTF-8?q?[AIPLATFORM-678]=20=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=20=EC=BF=A0=ED=82=A4=20=EC=B6=94=EA=B0=80=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 | 25 ++++---------------- API-ROUTER/ApiRoute/ApiRouteConfig.py | 2 +- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 6 +---- API-ROUTER/conf/config.ini | 4 ---- API-SERVICE/ApiList/common/commonLogin.py | 9 +++++-- API-SERVICE/ApiList/common/commonLogout.py | 15 ++++++++---- API-SERVICE/ApiList/common/commonToken.py | 14 +++++++---- API-SERVICE/ApiList/common/commonUserInfo.py | 8 +++---- API-SERVICE/conf/common/config.ini | 4 ++-- 10 files changed, 40 insertions(+), 49 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 03bccd68..6a7593c4 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -2,7 +2,6 @@ from typing import Dict, List import importlib.util from fastapi import APIRouter -from fastapi.responses import JSONResponse 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 @@ -324,10 +323,6 @@ def del_api(self, api_nm: str) -> Dict: async def route_api(self, request: Request) -> Dict: route_url = request.url.path method = request.method - req_access_token = request.headers.get( - config.secret_info["header_name"]) - res_access_token = None - access_token = "" headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) @@ -355,24 +350,12 @@ async def route_api(self, request: Request) -> Dict: 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'\nDB - api_info : {api_info}\nDB - api_params : {api_params}') logger.info(f'mode : {api_info["mode"]}') if api_info["mode"] == "MESSAGE PASSING": - result, res_access_token = await bypass_msg(api_info, params_query, body, headers) + result = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) - - remove_header_api_list = config.secret_info["remove_header_api"].split( - ",") - - if api_info["api_nm"] not in remove_header_api_list: - if res_access_token is None: - if req_access_token is not None: - access_token = req_access_token - else: - access_token = res_access_token - - logger.info(f'access token : {access_token}') - return JSONResponse(content=result, headers={config.secret_info["header_name"]: access_token}) + return result diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index 77cac735..eacc42c8 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -16,7 +16,7 @@ class ApiRouteConfig: api_config: Dict api_server_info: List[Dict] - secret_info: Dict + #secret_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 9e0d840d..a8bdea5d 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -53,7 +53,7 @@ def prepare_config() -> None: 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.secret_info=api_router_cfg["secret_info"] def make_connection_pool(db_info): conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index f352644a..0f2a93aa 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -37,18 +37,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.headers.get( - config.secret_info["header_name"]) result = await response.json() elif method == "POST": async with session.post(url, json=body, headers=headers) as response: - access_token = response.headers.get( - config.secret_info["header_name"]) result = await response.json() else: logger.error(f'Method Not Allowed. {method}') result = {"result": 0, "errorMessage": "Method Not Allowed."} - return result, access_token + return result async def run_cmd(cmd: str): diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 258e0f31..98f7a391 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -19,7 +19,3 @@ user = dpsi password = hello.sitemng12#$ database = dataportal schema = sitemng - -[secret_info] -header_name = user-katech-access-token -remove_header_api = commonLogout \ No newline at end of file diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 3c1e6c63..a70e5151 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -1,3 +1,5 @@ +from http import cookies +from http.cookiejar import Cookie from typing import Dict from pydantic import BaseModel from fastapi.logger import logger @@ -35,12 +37,12 @@ def authenticate_user(username: str, password: str): def api(login: commonLogin) -> Dict: + access_token = "" try: user = authenticate_user( login.data[config.user_info["id_column"]], login.data[config.user_info["password_column"]]) except Exception: except_name = get_exception_info() - access_token = "" result = {"result": 0, "errorMessage": except_name} else: @@ -49,4 +51,7 @@ def api(login: commonLogin) -> Dict: data=token_data, expires_delta=timedelta(minutes=int(config.secret_info["expire_min"]))) result = {"result": 1, "errorMessage": ""} - return JSONResponse(content=result, headers={config.secret_info["header_name"]: access_token}) + response = JSONResponse(content=result) + response.set_cookie( + key=config.secret_info["cookie_name"], value=access_token) + return response diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index 3fd3243e..6a02ea82 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -1,5 +1,6 @@ from typing import Dict from fastapi.logger import logger +from fastapi.responses import JSONResponse from jose import jwt from starlette.requests import Request from Utils.CommonUtil import get_exception_info, get_user @@ -15,11 +16,13 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: + f_delete = True try: - access_token = request.headers.get(config.secret_info["header_name"]) - if not access_token: + recv_access_token = request.cookies.get( + config.secret_info["cookie_name"]) + if not recv_access_token: raise TokenDoesNotExist - payload = jwt.decode(token=access_token, + 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) @@ -28,6 +31,10 @@ def api(request: Request) -> Dict: except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} + f_delete = False else: result = {"result": 1, "errorMessage": ""} - return result + response = JSONResponse(content=result) + if f_delete: + response.delete_cookie(key=config.secret_info["cookie_name"]) + return response diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py index 0edd9b65..bcd52d7c 100644 --- a/API-SERVICE/ApiList/common/commonToken.py +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -17,11 +17,13 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: + access_token = "" try: - access_token = request.headers.get(config.secret_info["header_name"]) - if not access_token: + recv_access_token = request.cookies.get( + config.secret_info["cookie_name"]) + if not recv_access_token: raise TokenDoesNotExist - payload = jwt.decode(token=access_token, + 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) @@ -30,7 +32,6 @@ def api(request: Request) -> Dict: user = user[0][0] except Exception: except_name = get_exception_info() - access_token = "" result = {"result": 0, "errorMessage": except_name} else: token_data = make_token_data(user) @@ -38,4 +39,7 @@ def api(request: Request) -> Dict: minutes=int(config.secret_info["expire_min"]))) result = {"result": 1, "errorMessage": ""} - return JSONResponse(content=result, headers={config.secret_info["header_name"]: access_token}) + response = JSONResponse(content=result) + response.set_cookie( + key=config.secret_info["cookie_name"], value=access_token) + return response diff --git a/API-SERVICE/ApiList/common/commonUserInfo.py b/API-SERVICE/ApiList/common/commonUserInfo.py index b7b70e01..b522716c 100644 --- a/API-SERVICE/ApiList/common/commonUserInfo.py +++ b/API-SERVICE/ApiList/common/commonUserInfo.py @@ -16,10 +16,11 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: try: - access_token = request.headers.get(config.secret_info["header_name"]) - if not access_token: + recv_access_token = request.cookies.get( + config.secret_info["cookie_name"]) + if not recv_access_token: raise TokenDoesNotExist - payload = jwt.decode(token=access_token, + 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) @@ -28,7 +29,6 @@ def api(request: Request) -> Dict: user = user[0][0] except Exception: except_name = get_exception_info() - access_token = "" result = {"result": 0, "errorMessage": except_name} else: result = {"result": 0, "errorMessage": "", "data": {"body": payload}} diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 71be209d..5e45c2c7 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 -header_name = user-katech-access-token -token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role +cookie_name = user-katech-access-token +token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role,user_uuid [user_info] table = tb_user_info From caf9e26bd695f09ff9ed18d56312d390ee5c27d6 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 14 Sep 2022 10:18:47 +0900 Subject: [PATCH 197/323] =?UTF-8?q?[AIPLATFORM-678]=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=84=B0=20=EC=9D=B8=EC=A6=9D=20=EC=BF=A0=ED=82=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EA=B8=B0=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/ApiRoute/ApiRoute.py | 12 +++++++++--- API-ROUTER/Utils/CommonUtil.py | 2 +- API-ROUTER/Utils/RouteUtil.py | 6 +++++- API-ROUTER/conf/config.ini | 3 +++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 6a7593c4..8972af6e 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -2,6 +2,7 @@ from typing import Dict, List import importlib.util from fastapi import APIRouter +from fastapi.responses import JSONResponse 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 @@ -323,7 +324,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 - + access_token = "" headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) @@ -355,7 +356,12 @@ async def route_api(self, request: Request) -> Dict: logger.info(f'mode : {api_info["mode"]}') 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) - return result + response = JSONResponse(content=result) + response.set_cookie( + key=config.secret_info["cookie_name"], value=access_token) + return response + + # return result diff --git a/API-ROUTER/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index a8bdea5d..9e0d840d 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -53,7 +53,7 @@ def prepare_config() -> None: 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.secret_info=api_router_cfg["secret_info"] def make_connection_pool(db_info): conn_pool = pool.SimpleConnectionPool(1, 20, user=db_info["user"], diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 0f2a93aa..31796efc 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -37,14 +37,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 98f7a391..872235e1 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -19,3 +19,6 @@ user = dpsi password = hello.sitemng12#$ database = dataportal schema = sitemng + +[secret_info] +cookie_name = user-katech-access-token \ No newline at end of file From 696796b2d9307dfd776641a46c6a6e3be85d0715 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 14 Sep 2022 13:47:06 +0900 Subject: [PATCH 198/323] =?UTF-8?q?[AIPLATFORM-678]=20=ED=8A=B9=EC=A0=95?= =?UTF-8?q?=20API=EC=97=90=EB=A7=8C=20=EC=BF=A0=ED=82=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EB=90=98=EB=8F=84=EB=A1=9D=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/conf/config.ini | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 8972af6e..376453df 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -327,7 +327,6 @@ async def route_api(self, request: Request) -> Dict: access_token = "" headers = delete_headers(dict(request.headers), [ "content-length", "user-agent"]) - try: db = connect_db() api_info, _ = db.select( @@ -348,7 +347,7 @@ async def route_api(self, request: Request) -> Dict: params_query = parse.unquote(str(request.query_params)) logger.info( - f'Req - body : {body}, query params : {params_query}') + f'\nReq - body : {body}\nquery params : {params_query}') api_info["meth"] = method logger.info( @@ -359,9 +358,10 @@ async def route_api(self, request: Request) -> Dict: result, access_token = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) + response = JSONResponse(content=result) - response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token) + add_cookie_api_list = config.secret_info["add_cookie_api"].split(",") + if api_info["api_nm"] in add_cookie_api_list: + response.set_cookie( + key=config.secret_info["cookie_name"], value=access_token) return response - - # return result diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 872235e1..580cdc22 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -21,4 +21,5 @@ database = dataportal schema = sitemng [secret_info] -cookie_name = user-katech-access-token \ No newline at end of file +cookie_name = user-katech-access-token +add_cookie_api = commonLogin,commonToken \ No newline at end of file From e797e166cafe89a8ee584d2dd70c9afc30c93291 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 14 Sep 2022 13:47:21 +0900 Subject: [PATCH 199/323] =?UTF-8?q?[AIPLATFORM-704]=20feat:=20els=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=ED=95=84=ED=84=B0=20=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?OR=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20/=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=A0=80=EC=9E=A5,=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20id=20=EB=B3=80=EC=88=98=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 --- .../ConnectManager/ElasticSearchManager.py | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index edca85db..107224f3 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -48,14 +48,17 @@ def set_pagination(self) -> None: self.body["from"] = self.cur_from self.body["size"] = self.size - def set_filter(self, filter_option: dict) -> None: - filter_list = [] - # if "data_srttn" in filter_option.keys() and "전체" in filter_option["data_srttn"]: - # filter_option.pop("data_srttn") - - for option, items in filter_option.items(): - filter_list.extend([make_query("match",option,item) for item in items]) - self.body["query"]["bool"]["filter"] = filter_list + def set_filter(self, filter_option: dict, filter_oper: str = "OR") -> None: + if filter_oper == "OR": + query = " ".join([" ".join(values) for values in filter_option.values()]) + fields = list(filter_option.keys()) + filter_dict = {"multi_match":{"query":query,"fields":fields}} + self.body["query"]["bool"]["filter"] = filter_dict + else: + filter_list = [] + for option, items in filter_option.items(): + filter_list.extend([make_query("match",option,item) for item in items]) + self.body["query"]["bool"]["filter"] = filter_list def set_match(self, keyword_dict: dict, operator: Optional[str] = "AND", field: str = "data_nm.korean_analyzer") -> None: """ @@ -84,14 +87,14 @@ def set_match(self, keyword_dict: dict, operator: Optional[str] = "AND", field: else: self.body["query"]["bool"]["must"] = {"match_all": {}} - def insert(self, body: dict, es_id: str) -> None: - return self.conn.index(index=self.index, body=body, id=es_id) + def insert(self, body: dict, doc_id: str) -> None: + return self.conn.index(index=self.index, body=body, id=doc_id) def insert_bulk(self, data: list): return helpers.bulk(self.conn, data, index=self.index) - def update(self, body: dict, es_id: str): - return self.conn.update(index=self.index, id=es_id, body=body) + 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]): """ From a84e71d7bacd9fe0d4bdbd519ce8725ad3b3c3b3 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 14 Sep 2022 14:20:52 +0900 Subject: [PATCH 200/323] =?UTF-8?q?[AIPLATFORM-678]=20logout=20=EA=B8=B0?= =?UTF-8?q?=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 --- API-ROUTER/conf/config.ini | 2 +- API-SERVICE/ApiList/common/commonLogout.py | 15 ++++++++------- API-SERVICE/ApiList/common/commonUserInfo.py | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 580cdc22..ade332db 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -22,4 +22,4 @@ schema = sitemng [secret_info] cookie_name = user-katech-access-token -add_cookie_api = commonLogin,commonToken \ No newline at end of file +add_cookie_api = commonLogin,commonLogout,commonToken \ No newline at end of file diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index 6a02ea82..79fbd938 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -1,6 +1,6 @@ from typing import Dict from fastapi.logger import logger -from fastapi.responses import JSONResponse +#from fastapi.responses import JSONResponse from jose import jwt from starlette.requests import Request from Utils.CommonUtil import get_exception_info, get_user @@ -16,7 +16,7 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: - f_delete = True + #f_delete = True try: recv_access_token = request.cookies.get( config.secret_info["cookie_name"]) @@ -31,10 +31,11 @@ def api(request: Request) -> Dict: except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} - f_delete = False + #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 + #response = JSONResponse(content=result) + # if f_delete: + # response.delete_cookie(key=config.secret_info["cookie_name"]) + # return response + return result diff --git a/API-SERVICE/ApiList/common/commonUserInfo.py b/API-SERVICE/ApiList/common/commonUserInfo.py index b522716c..cf47dd94 100644 --- a/API-SERVICE/ApiList/common/commonUserInfo.py +++ b/API-SERVICE/ApiList/common/commonUserInfo.py @@ -31,6 +31,6 @@ def api(request: Request) -> Dict: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - result = {"result": 0, "errorMessage": "", "data": {"body": payload}} + result = {"result": 1, "errorMessage": "", "data": {"body": payload}} return result From 7fc1cee341bf75b0cec0d59cea6178870561f06e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 14 Sep 2022 15:01:35 +0900 Subject: [PATCH 201/323] =?UTF-8?q?[AIPLATFORM-704]=20fix:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20query=20filter=20=ED=83=80=EC=9E=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/getElsBizMetaList.py | 3 ++- API-SERVICE/ConnectManager/ElasticSearchManager.py | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 52d0438a..2cea1705 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -13,6 +13,7 @@ class SearchOption(BaseModel): sortOption: Optional[list] = [] filterOption: dict = dict() dataSrttn: str = "전체" + filterOperator: str = "AND" matchOption: str = "AND" @@ -36,7 +37,7 @@ def api(search_option: SearchOption) -> Dict: es.set_sort(search_option.sortOption) if len(search_option.filterOption): - es.set_filter(search_option.filterOption) + es.set_filter(search_option.filterOption,search_option.filterOperator) es.set_match(keyword_dict,search_option.matchOption) diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 107224f3..557be4f6 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -6,7 +6,7 @@ class ESSearch: def __init__( self, - host: str = "localhost", + host: str = "192.168.101.44", port: str = "39200", cur_from: int = 1, size: int = 10, @@ -49,13 +49,12 @@ def set_pagination(self) -> None: self.body["size"] = self.size def set_filter(self, filter_option: dict, filter_oper: str = "OR") -> None: + filter_list = [] if filter_oper == "OR": query = " ".join([" ".join(values) for values in filter_option.values()]) fields = list(filter_option.keys()) - filter_dict = {"multi_match":{"query":query,"fields":fields}} - self.body["query"]["bool"]["filter"] = filter_dict + self.body["query"]["bool"]["filter"] = [{"multi_match":{"query":query,"fields":fields}}] else: - filter_list = [] for option, items in filter_option.items(): filter_list.extend([make_query("match",option,item) for item in items]) self.body["query"]["bool"]["filter"] = filter_list From 0bb2e757298504a40f5479c5cbabfb8bfac568a7 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 14 Sep 2022 15:23:33 +0900 Subject: [PATCH 202/323] =?UTF-8?q?[AIPLATFORM-704]=20fix:=20filter=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=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/getElsBizMetaList.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 2cea1705..12f9a1ac 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -36,7 +36,7 @@ def api(search_option: SearchOption) -> Dict: es = ESSearch(cur_from=from_page,size=search_option.perPage) es.set_sort(search_option.sortOption) - if len(search_option.filterOption): + if any(search_option.filterOption.values()): es.set_filter(search_option.filterOption,search_option.filterOperator) es.set_match(keyword_dict,search_option.matchOption) From 29c0aba6968d483922601f12824a9829017640f2 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 14 Sep 2022 15:30:12 +0900 Subject: [PATCH 203/323] =?UTF-8?q?[AIPLATFORM-704]=20chore:=20filterOpera?= =?UTF-8?q?tor=20default=20=EB=B3=80=EC=88=98=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/getElsBizMetaList.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 12f9a1ac..be5ba079 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -13,7 +13,7 @@ class SearchOption(BaseModel): sortOption: Optional[list] = [] filterOption: dict = dict() dataSrttn: str = "전체" - filterOperator: str = "AND" + filterOperator: str = "OR" matchOption: str = "AND" From 7760deaacf14d8494a262e5e12d7c28754e6f392 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 15 Sep 2022 10:50:03 +0900 Subject: [PATCH 204/323] =?UTF-8?q?[AIPLATFORM-714]=20=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=20=EC=9D=B8=EC=A6=9D=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/common/commonLogout.py | 15 ++-- API-SERVICE/ApiList/common/emailAthnCnfm.py | 36 +++++++++ API-SERVICE/ApiList/common/emailAthnSend.py | 79 +++++++++++++++++++ API-SERVICE/ApiService/ApiServiceConfig.py | 1 + API-SERVICE/ConnectManager/PostgresManager.py | 2 - API-SERVICE/Utils/CommonUtil.py | 1 + API-SERVICE/conf/common/api_config.ini | 10 +++ API-SERVICE/conf/common/config.ini | 9 +++ .../conf/common/template/emailAthnSend.html | 40 ++++++++++ 9 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 API-SERVICE/ApiList/common/emailAthnCnfm.py create mode 100644 API-SERVICE/ApiList/common/emailAthnSend.py create mode 100644 API-SERVICE/conf/common/template/emailAthnSend.html diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index 79fbd938..6a02ea82 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -1,6 +1,6 @@ from typing import Dict from fastapi.logger import logger -#from fastapi.responses import JSONResponse +from fastapi.responses import JSONResponse from jose import jwt from starlette.requests import Request from Utils.CommonUtil import get_exception_info, get_user @@ -16,7 +16,7 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: - #f_delete = True + f_delete = True try: recv_access_token = request.cookies.get( config.secret_info["cookie_name"]) @@ -31,11 +31,10 @@ def api(request: Request) -> Dict: except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} - #f_delete = False + 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 - return result + response = JSONResponse(content=result) + if f_delete: + response.delete_cookie(key=config.secret_info["cookie_name"]) + return response diff --git a/API-SERVICE/ApiList/common/emailAthnCnfm.py b/API-SERVICE/ApiList/common/emailAthnCnfm.py new file mode 100644 index 00000000..c8bd2733 --- /dev/null +++ b/API-SERVICE/ApiList/common/emailAthnCnfm.py @@ -0,0 +1,36 @@ +from typing import Dict +from fastapi.logger import logger +from pydantic import BaseModel +from Utils.CommonUtil import get_exception_info, connect_db, convert_data + + +class EmailAuthFail(Exception): + pass + + +class emailAthnCnfm(BaseModel): + email: str + athn_no: str + + +def api(email_confirm: emailAthnCnfm) -> Dict: + try: + db = connect_db() + email_info, _ = db.select( + f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_confirm.email)}') + + if email_info[0]["athn_no"] == email_confirm.athn_no: + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + db.execute(f"UPDATE tb_email_athn_info \ + SET athn_yn='Y', athn_date=NOW() WHERE email={convert_data(email_confirm.email)};") + else: + raise EmailAuthFail + logger.info("Successfully Auth Confirm.") + 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/emailAthnSend.py b/API-SERVICE/ApiList/common/emailAthnSend.py new file mode 100644 index 00000000..16679c81 --- /dev/null +++ b/API-SERVICE/ApiList/common/emailAthnSend.py @@ -0,0 +1,79 @@ +from typing import Dict +from fastapi.logger import logger +from pydantic import BaseModel +import smtplib +import string +import random +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from Utils.CommonUtil import get_exception_info, connect_db, convert_data +from ApiService.ApiServiceConfig import config + + +class emailAthnSend(BaseModel): + email: str + + +def make_auth_no(): + string_pool = string.ascii_letters + string.digits + auth_no = "" + for _ in range(int(config.email_auth["auth_no_len"])): + auth_no += random.choice(string_pool) + return auth_no + + +def make_email_auth_query(email, auth_no, exist_mail): + if exist_mail: + query = f"UPDATE tb_email_athn_info \ + SET athn_no={convert_data(auth_no)}, send_date=NOW() WHERE email={convert_data(email)};" + else: + query = f"INSERT INTO tb_email_athn_info (email, athn_no, athn_yn, send_date) \ + VALUES ({convert_data(email)}, {convert_data(auth_no)}, 'N', NOW());" + return query + + +def send_mail(auth_no, receiver_addr): + message = MIMEMultipart("alternative") + message["Subject"] = config.email_auth["subject"] + message["From"] = config.email_auth["login_user"] + message["To"] = receiver_addr + + with open(f'{config.root_path}/conf/common/template/emailAthnSend.html', "r") as fd: + html = "\n".join(fd.readlines()) + + html = html.replace("AUTH_NO", auth_no) + html_part = MIMEText(html, "html") + message.attach(html_part) + + stmp = smtplib.SMTP( + host=config.email_auth["server_addr"], port=int(config.email_auth["port"])) + stmp.ehlo() + stmp.starttls() + stmp.login(config.email_auth["login_user"], + config.email_auth["login_pass"]) + stmp.sendmail(config.email_auth["login_user"], + receiver_addr, message.as_string()) + stmp.quit() + + +def api(email_auth: emailAthnSend) -> Dict: + try: + auth_no = make_auth_no() + db = connect_db() + exist_mail, _ = db.select( + f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}') + + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + query = make_email_auth_query(email_auth.email, auth_no, exist_mail) + db.execute(query) + + send_mail(auth_no, email_auth.email) + logger.info("Successfully sent the mail.") + 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/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 96f9d969..9336d4fb 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -21,6 +21,7 @@ class ApiServiceConfig: secret_info: Dict user_info: Dict pwd_context: CryptContext + email_auth: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-SERVICE/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index fdddf67d..aa5a92a9 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -49,7 +49,5 @@ 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/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 677283e0..1f4a3be0 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -78,6 +78,7 @@ def prepare_config() -> None: config.user_info = api_router_cfg["user_info"] config.pwd_context = CryptContext( schemes=["bcrypt"], deprecated="auto") + config.email_auth = api_router_cfg["email_auth"] def make_connection_pool(db_info): diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index e1842ecd..be890366 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -31,4 +31,14 @@ sub_dir = common [commonUserInfo] method = GET url = /portal/api/common/user/commonUserInfo +sub_dir = common + +[emailAthnSend] +method = POST +url = /portal/api/common/user/emailAthnSend +sub_dir = common + +[emailAthnCnfm] +method = POST +url = /portal/api/common/user/emailAthnCnfm 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 index 5e45c2c7..5b331ba2 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -14,6 +14,7 @@ password = hello.dp12#$ database = dataportal schema = users,meta,sitemng,board,analysis,sysconfig +# commonLogin, commonLogout, commonRegister, commonToken, commonUserInfo [secret_info] secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 @@ -25,3 +26,11 @@ token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_rol table = tb_user_info id_column = user_id password_column = user_password + +[email_auth] +auth_no_len = 10 +subject = [자동차 산업데이터 포털]회원가입을 위한 인증 메일입니다. +server_addr = mail.w.bigdata-car.kr +port = 587 +login_user = admin@bigdata-car.kr +login_pass = admin@katech22 \ No newline at end of file diff --git a/API-SERVICE/conf/common/template/emailAthnSend.html b/API-SERVICE/conf/common/template/emailAthnSend.html new file mode 100644 index 00000000..4c75431a --- /dev/null +++ b/API-SERVICE/conf/common/template/emailAthnSend.html @@ -0,0 +1,40 @@ + + + + + + + + +
+
+

+ +

+
+ + + + + + + + + +
+ 한자연 사용자 인증 알림 +
+
+

한자연에서 사용자 인증을 위해 보낸 인증번호입니다.

+

AUTH_NO

+
+
+
+
+
+ + + \ No newline at end of file From 57be8d523ae7e337b684816d35d5e5a3beab9f3f Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 15 Sep 2022 13:56:27 +0900 Subject: [PATCH 205/323] =?UTF-8?q?[AIPLATFORM-714]=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=20=EC=9D=B8=EC=A6=9D=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/ApiList/common/emailAthnSend.py | 34 ++++++++++++---- API-SERVICE/conf/common/config.ini | 3 +- .../conf/common/template/pwdEmailAthn.html | 40 +++++++++++++++++++ 3 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 API-SERVICE/conf/common/template/pwdEmailAthn.html diff --git a/API-SERVICE/ApiList/common/emailAthnSend.py b/API-SERVICE/ApiList/common/emailAthnSend.py index 16679c81..0ccdc118 100644 --- a/API-SERVICE/ApiList/common/emailAthnSend.py +++ b/API-SERVICE/ApiList/common/emailAthnSend.py @@ -10,8 +10,17 @@ from ApiService.ApiServiceConfig import config +class EmailAlreadyAuth(Exception): + pass + + +class EmailNotExist(Exception): + pass + + class emailAthnSend(BaseModel): email: str + msg_type: str # register or password def make_auth_no(): @@ -32,14 +41,18 @@ def make_email_auth_query(email, auth_no, exist_mail): return query -def send_mail(auth_no, receiver_addr): +def send_mail(auth_no, receiver_addr, msg_type): message = MIMEMultipart("alternative") - message["Subject"] = config.email_auth["subject"] + message["Subject"] = config.email_auth[f"subject_{msg_type}"] message["From"] = config.email_auth["login_user"] message["To"] = receiver_addr - with open(f'{config.root_path}/conf/common/template/emailAthnSend.html', "r") as fd: - html = "\n".join(fd.readlines()) + if msg_type == "register": + with open(f'{config.root_path}/conf/common/template/emailAthnSend.html', "r") as fd: + html = "\n".join(fd.readlines()) + else: + with open(f'{config.root_path}/conf/common/template/pwdEmailAthn.html', "r") as fd: + html = "\n".join(fd.readlines()) html = html.replace("AUTH_NO", auth_no) html_part = MIMEText(html, "html") @@ -51,8 +64,7 @@ def send_mail(auth_no, receiver_addr): stmp.starttls() stmp.login(config.email_auth["login_user"], config.email_auth["login_pass"]) - stmp.sendmail(config.email_auth["login_user"], - receiver_addr, message.as_string()) + stmp.send_message(message) stmp.quit() @@ -63,12 +75,20 @@ def api(email_auth: emailAthnSend) -> Dict: exist_mail, _ = db.select( f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}') + if email_auth.msg_type == "register" and len(exist_mail) != 0: + if exist_mail[0]["athn_yn"] == "Y": + raise EmailAlreadyAuth + + if email_auth.msg_type == "password" and len(exist_mail) == 0: + raise EmailNotExist + + send_mail(auth_no, email_auth.email, email_auth.msg_type) + time_zone = 'Asia/Seoul' db.execute(f"SET TIMEZONE={convert_data(time_zone)}") query = make_email_auth_query(email_auth.email, auth_no, exist_mail) db.execute(query) - send_mail(auth_no, email_auth.email) logger.info("Successfully sent the mail.") except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 5b331ba2..3ea94c04 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -29,7 +29,8 @@ password_column = user_password [email_auth] auth_no_len = 10 -subject = [자동차 산업데이터 포털]회원가입을 위한 인증 메일입니다. +subject_register = [자동차 산업데이터 포털]회원가입을 위한 인증 메일입니다. +subject_password = [자동차 산업데이터 포털]비밀번호 변경을 위한 인증 메일입니다. server_addr = mail.w.bigdata-car.kr port = 587 login_user = admin@bigdata-car.kr diff --git a/API-SERVICE/conf/common/template/pwdEmailAthn.html b/API-SERVICE/conf/common/template/pwdEmailAthn.html new file mode 100644 index 00000000..5a5e4088 --- /dev/null +++ b/API-SERVICE/conf/common/template/pwdEmailAthn.html @@ -0,0 +1,40 @@ + + + + + + + + +
+
+

+ +

+
+ + + + + + + + + +
+ 한자연 비밀번호 찾기 인증 알림 +
+
+

한자연에서 비밀번호 찾기을 위해 보낸 인증번호입니다.

+

AUTH_NO

+
+
+
+
+
+ + + \ No newline at end of file From 92c04d02e29ed8b9c62828231d6d36a15fa15e59 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 15 Sep 2022 15:56:38 +0900 Subject: [PATCH 206/323] =?UTF-8?q?[AIPLATFORM-714]=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=B3=80=EA=B2=BD=20=EC=9D=B8=EC=A6=9D=20?= =?UTF-8?q?=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-SERVICE/ApiList/common/emailAthnSend.py | 13 ++++++------- API-SERVICE/conf/common/config.ini | 1 + API-SERVICE/conf/common/template/pwdEmailAthn.html | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/API-SERVICE/ApiList/common/emailAthnSend.py b/API-SERVICE/ApiList/common/emailAthnSend.py index 0ccdc118..a3367879 100644 --- a/API-SERVICE/ApiList/common/emailAthnSend.py +++ b/API-SERVICE/ApiList/common/emailAthnSend.py @@ -10,7 +10,7 @@ from ApiService.ApiServiceConfig import config -class EmailAlreadyAuth(Exception): +class EmailNotAuth(Exception): pass @@ -75,12 +75,11 @@ def api(email_auth: emailAthnSend) -> Dict: exist_mail, _ = db.select( f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}') - if email_auth.msg_type == "register" and len(exist_mail) != 0: - if exist_mail[0]["athn_yn"] == "Y": - raise EmailAlreadyAuth - - if email_auth.msg_type == "password" and len(exist_mail) == 0: - raise EmailNotExist + if email_auth.msg_type == "password": + if len(exist_mail) == 0: + raise EmailNotExist + if exist_mail[0]["athn_yn"] == "N": + raise EmailNotAuth send_mail(auth_no, email_auth.email, email_auth.msg_type) diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 3ea94c04..fbdec11c 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -27,6 +27,7 @@ table = tb_user_info id_column = user_id password_column = user_password +# emailAthnSend, emailAthnCnfm [email_auth] auth_no_len = 10 subject_register = [자동차 산업데이터 포털]회원가입을 위한 인증 메일입니다. diff --git a/API-SERVICE/conf/common/template/pwdEmailAthn.html b/API-SERVICE/conf/common/template/pwdEmailAthn.html index 5a5e4088..cab284f0 100644 --- a/API-SERVICE/conf/common/template/pwdEmailAthn.html +++ b/API-SERVICE/conf/common/template/pwdEmailAthn.html @@ -11,7 +11,7 @@

+

From 0e81458e6275fb98153006e09f52c39521c60e7c Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 15 Sep 2022 16:28:36 +0900 Subject: [PATCH 207/323] =?UTF-8?q?[AIPLATFORM-704]=20fix:=20filter=20OR?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=20=EC=A1=B0=EA=B1=B4=EB=AC=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/ApiList/meta/getElsBizMetaList.py | 4 ++++ API-SERVICE/ConnectManager/ElasticSearchManager.py | 2 +- API-SERVICE/Utils/ESUtils.py | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index be5ba079..b67b358c 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -56,6 +56,10 @@ def api(search_option: SearchOption) -> Dict: if search_option.dataSrttn != "전체": filter_srttn = make_query("match","data_srttn",search_option.dataSrttn) + + if "filter" not in es.body["query"]["bool"].keys(): + es.body["query"]["bool"]["filter"] = [] + es.body["query"]["bool"]["filter"].append(filter_srttn) biz_meta_elk = es.search() diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 557be4f6..4efedd61 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -65,7 +65,7 @@ def set_match(self, keyword_dict: dict, operator: Optional[str] = "AND", field: :param field: search field, type str :param operator: search operator, type str ex) (AND, OR) """ - if len(keyword_dict.values()): + if any(keyword_dict.values()): must_query_list = [] option = "match" diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py index ddd507ea..09c6c395 100644 --- a/API-SERVICE/Utils/ESUtils.py +++ b/API-SERVICE/Utils/ESUtils.py @@ -16,14 +16,14 @@ def make_query(op, field, value) -> Dict[Any, Any]: def div_keyword(keyword_list: list) -> Dict[Any, Any]: keyword_dict = {"match_phrase": [], "match": []} - if keyword_list is None: + if keyword_list is None or len(keyword_list) == 0: return keyword_dict else: for keyword in keyword_list: k = keyword.replace(" ", "") if len(k) < 1: continue - if is_space(keyword): + elif is_space(keyword): keyword_dict["match_phrase"].append(keyword) else: keyword_dict["match"].append(keyword) From 9b578a3ee0a0350587e8be5196ba3d5f04f6624d Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 15 Sep 2022 16:29:49 +0900 Subject: [PATCH 208/323] =?UTF-8?q?[AIPLATFORM-704]=20fix:=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=20=EC=95=9E=EB=92=A4=20=EA=B3=B5=EB=B0=B1=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20=EA=B5=AC=EB=AC=B8=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/ConnectManager/ElasticSearchManager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py index 4efedd61..90ff909d 100644 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ b/API-SERVICE/ConnectManager/ElasticSearchManager.py @@ -52,6 +52,7 @@ def set_filter(self, filter_option: dict, filter_oper: str = "OR") -> None: filter_list = [] if filter_oper == "OR": query = " ".join([" ".join(values) for values in filter_option.values()]) + query = query.strip() fields = list(filter_option.keys()) self.body["query"]["bool"]["filter"] = [{"multi_match":{"query":query,"fields":fields}}] else: From a7d9d2937cd6336aea756a0748e6aa2522a57907 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 20 Sep 2022 09:17:55 +0900 Subject: [PATCH 209/323] =?UTF-8?q?[AIPLATFORM-432]=20feat:=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-ROUTER/ApiRoute/ApiRoute.py | 268 +------------------ API-ROUTER/ApiRoute/ApiRouteConfig.py | 1 - API-ROUTER/ConnectManager/PostgresManager.py | 18 -- API-ROUTER/Utils/CommonUtil.py | 4 +- API-ROUTER/Utils/DataBaseUtil.py | 35 --- API-ROUTER/Utils/RouteUtil.py | 7 +- API-ROUTER/Utils/__init__.py | 1 - 7 files changed, 12 insertions(+), 322 deletions(-) delete mode 100644 API-ROUTER/Utils/DataBaseUtil.py diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 376453df..f3abb1d1 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -4,8 +4,7 @@ from fastapi import APIRouter from fastapi.responses import JSONResponse 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.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, convert_data from Utils.RouteUtil import bypass_msg, call_remote_func from pydantic import BaseModel from starlette.requests import Request @@ -42,30 +41,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"]) @@ -90,237 +65,12 @@ 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) -> 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 - 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: - 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 @@ -334,31 +84,25 @@ async def route_api(self, request: Request) -> Dict: api_info = api_info[0] api_params, _ = db.select( f'SELECT * FROM tb_api_params 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."} - - body = None 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}') - api_info["meth"] = method logger.info( - f'\nDB - api_info : {api_info}\nDB - api_params : {api_params}') + f'\nReq - body : {body}\nquery params : {params_query}') - logger.info(f'mode : {api_info["mode"]}') if api_info["mode"] == "MESSAGE PASSING": result, access_token = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) - response = JSONResponse(content=result) add_cookie_api_list = config.secret_info["add_cookie_api"].split(",") if api_info["api_nm"] in add_cookie_api_list: diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index eacc42c8..428e74c3 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -16,7 +16,6 @@ class ApiRouteConfig: api_config: Dict api_server_info: List[Dict] - #secret_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-ROUTER/ConnectManager/PostgresManager.py b/API-ROUTER/ConnectManager/PostgresManager.py index 7dae8f9e..a56b6d6e 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/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/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 9e0d840d..50fa4bbd 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -7,10 +7,12 @@ from ApiRoute.ApiRouteConfig import config from ConnectManager 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') 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/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 31796efc..898593c1 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -26,7 +26,7 @@ async def bypass_msg(api_info, params_query, body, headers): url = make_url(api_info["ctgry"], api_info["url"]) if url is None: - return {"result": 0, "errorMessage": "The server info does not exist."} + return {"result": 0, "errorMessage": "The server info does not exist."}, "" async with aiohttp.ClientSession() as session: if method == "GET": @@ -61,7 +61,6 @@ async def run_cmd(cmd: str): async def call_remote_func(api_info, api_params, input_params) -> Dict: - logger.error(f'IN PARAM : {input_params}, API PARAM : {api_params}') command_input = "" for param in api_params: try: @@ -81,6 +80,6 @@ async def call_remote_func(api_info, api_params, input_params) -> Dict: except Exception: except_name = get_exception_info() res_msg = {"result": 0, "errorMessage": except_name} - logger.error(f'SSH connection failed: {except_name}') - res_msg = {"result": 1, "errorMessage": "", "data": eval(result)} + else: + res_msg = {"result": 1, "errorMessage": "", "data": eval(result)} return res_msg diff --git a/API-ROUTER/Utils/__init__.py b/API-ROUTER/Utils/__init__.py index 25cfbf49..22c1052e 100644 --- a/API-ROUTER/Utils/__init__.py +++ b/API-ROUTER/Utils/__init__.py @@ -1,3 +1,2 @@ from .CommonUtil import * -from .DataBaseUtil import * from .RouteUtil import * From da5f6a24e46ce3ad70e66294c72e38b6962f6d0a Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 20 Sep 2022 10:46:50 +0900 Subject: [PATCH 210/323] =?UTF-8?q?[AIPLATFORM-678]=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=ED=99=95=EC=9D=B8=20=EB=B0=8F=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=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/common/commonLogin.py | 25 +------------- API-SERVICE/ApiList/common/commonPassword.py | 36 ++++++++++++++++++++ API-SERVICE/Utils/CommonUtil.py | 23 +++++++++++++ API-SERVICE/conf/common/api_config.ini | 5 +++ 4 files changed, 65 insertions(+), 24 deletions(-) create mode 100644 API-SERVICE/ApiList/common/commonPassword.py diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index a70e5151..1d5a27c4 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -5,37 +5,14 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta -from Utils.CommonUtil import get_exception_info, get_user, create_token, make_token_data +from Utils.CommonUtil import get_exception_info, create_token, make_token_data, authenticate_user from ApiService.ApiServiceConfig import config -class IncorrectUserName(Exception): - pass - - -class IncorrectPassword(Exception): - pass - - class commonLogin(BaseModel): data: Dict -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 - - def api(login: commonLogin) -> Dict: access_token = "" try: diff --git a/API-SERVICE/ApiList/common/commonPassword.py b/API-SERVICE/ApiList/common/commonPassword.py new file mode 100644 index 00000000..4d46129a --- /dev/null +++ b/API-SERVICE/ApiList/common/commonPassword.py @@ -0,0 +1,36 @@ +from typing import Dict, Optional +from pydantic import BaseModel +from fastapi.logger import logger +from Utils.CommonUtil import connect_db, get_exception_info, convert_data, authenticate_user +from ApiService.ApiServiceConfig import config + + +class commonPassword(BaseModel): + data: Dict + new_password: Optional[str] = "" + + +def api(password: commonPassword) -> Dict: + try: + db = connect_db() + user_id = password.data.get(config.user_info["id_column"]) + cur_password = password.data.get(config.user_info["password_column"]) + new_password = password.new_password + user_info_table = config.user_info["table"] + + user = authenticate_user(user_id, cur_password) + if new_password: + logger.info("Change Password") + time_zone = 'Asia/Seoul' + encrypt_password = config.pwd_context.hash(new_password) + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + db.execute( + f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(encrypt_password)} \ + WHERE {config.user_info["id_column"]} = {convert_data(user_id)};') + 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/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 1f4a3be0..8571a04e 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -165,3 +165,26 @@ 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 + + +class IncorrectUserName(Exception): + pass + + +class IncorrectPassword(Exception): + pass + + +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 be890366..a51d859c 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -33,6 +33,11 @@ method = GET url = /portal/api/common/user/commonUserInfo sub_dir = common +[commonPassword] +method = POST +url = /portal/api/common/user/commonPassword +sub_dir = common + [emailAthnSend] method = POST url = /portal/api/common/user/emailAthnSend From 6f8aadd2a6f52e2c92bb6bf5a0ac83531f6545bd Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 20 Sep 2022 13:43:59 +0900 Subject: [PATCH 211/323] =?UTF-8?q?[AIPLATFORM-432]=20feat=20:=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=95=EB=A6=AC=20(commonAPI)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/commonExecute.py | 40 +++++++++++++------- API-SERVICE/ApiList/common/commonLogin.py | 2 - API-SERVICE/ApiList/common/commonPassword.py | 14 +++---- API-SERVICE/ApiList/common/commonSelect.py | 36 ++++++++++-------- API-SERVICE/Utils/CommonUtil.py | 16 ++++---- 5 files changed, 61 insertions(+), 47 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonExecute.py b/API-SERVICE/ApiList/common/commonExecute.py index 613a8d49..d5fa5863 100644 --- a/API-SERVICE/ApiList/common/commonExecute.py +++ b/API-SERVICE/ApiList/common/commonExecute.py @@ -1,6 +1,5 @@ from typing import Dict, List, Optional from pydantic import BaseModel -from ApiService.ApiServiceConfig import config from Utils.CommonUtil import connect_db, get_exception_info, convert_data @@ -11,25 +10,38 @@ class commonExecute(BaseModel): 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 - 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});' + query = make_insert_query(excute) 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)};' + query = make_update_query(excute) 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)};' + query = make_delete_query(excute) else: raise ValueError(f"Invalid Method. ({method}))") return query diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 1d5a27c4..c503e2b9 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -1,5 +1,3 @@ -from http import cookies -from http.cookiejar import Cookie from typing import Dict from pydantic import BaseModel from fastapi.logger import logger diff --git a/API-SERVICE/ApiList/common/commonPassword.py b/API-SERVICE/ApiList/common/commonPassword.py index 4d46129a..f753ad32 100644 --- a/API-SERVICE/ApiList/common/commonPassword.py +++ b/API-SERVICE/ApiList/common/commonPassword.py @@ -11,21 +11,19 @@ class commonPassword(BaseModel): def api(password: commonPassword) -> Dict: + user_id = password.data.get(config.user_info["id_column"]) + cur_password = password.data.get(config.user_info["password_column"]) + new_password = password.new_password + user_info_table = config.user_info["table"] try: db = connect_db() - user_id = password.data.get(config.user_info["id_column"]) - cur_password = password.data.get(config.user_info["password_column"]) - new_password = password.new_password - user_info_table = config.user_info["table"] - - user = authenticate_user(user_id, cur_password) + authenticate_user(user_id, cur_password) if new_password: logger.info("Change Password") time_zone = 'Asia/Seoul' - encrypt_password = config.pwd_context.hash(new_password) db.execute(f"SET TIMEZONE={convert_data(time_zone)}") db.execute( - f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(encrypt_password)} \ + f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))} \ WHERE {config.user_info["id_column"]} = {convert_data(user_id)};') except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index d9d44545..18c2ea10 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -38,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 @@ -65,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(","))) @@ -75,33 +75,39 @@ def make_where_info(where): return value -def make_select_query(select_info: commonMatchSelect): +def make_where_info(where_info: List[whereInfo]): + 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) -> 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) diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 8571a04e..33627422 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -139,6 +139,14 @@ def convert_error_message(exception_name: str): ##### for user info ##### +class IncorrectUserName(Exception): + pass + + +class IncorrectPassword(Exception): + pass + + def get_user(user_name: str): db = connect_db() user = db.select( @@ -167,14 +175,6 @@ def make_token_data(user: Dict) -> Dict: return token_data -class IncorrectUserName(Exception): - pass - - -class IncorrectPassword(Exception): - pass - - def verify_password(plain_password, hashed_password): return config.pwd_context.verify(plain_password, hashed_password) From 4bea8a7389ee713b51a224c90a65fe3430cd3d67 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 20 Sep 2022 15:30:49 +0900 Subject: [PATCH 212/323] =?UTF-8?q?[AIPLATFORM-678]=20feat:=20jwt=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B6=94=EA=B0=80=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=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-SERVICE/ApiList/common/commonSelect.py | 1 + API-SERVICE/conf/common/config.ini | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 18c2ea10..14c98398 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -76,6 +76,7 @@ def make_where_value(where): def make_where_info(where_info: List[whereInfo]): + where = "" for info in where_info: value = make_where_value(info) if info.sub: diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index fbdec11c..76f6aeaa 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -20,7 +20,7 @@ secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 expire_min = 30 cookie_name = user-katech-access-token -token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role,user_uuid +token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role,user_uuidblng_org_cd,blng_org_nm,blng_org_desc [user_info] table = tb_user_info From f0ee3f74a7592b911f3be1fb57f15e2dba0bf1f7 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 21 Sep 2022 09:53:14 +0900 Subject: [PATCH 213/323] =?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=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=8F=20=EC=84=A4=EC=A0=95=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiList/meta/deleteUseBoardData.py | 23 ---- API-SERVICE/ApiList/meta/getBizMetaDetail.py | 23 ---- API-SERVICE/ApiList/meta/getBizMetaList.py | 52 --------- .../ApiList/meta/getBizMetaListByIds.py | 27 ----- API-SERVICE/ApiList/meta/getMetaNameDetail.py | 24 ---- .../ApiList/meta/getUseBoardDataDetail.py | 23 ---- .../ApiList/meta/getUseBoardDataList.py | 23 ---- API-SERVICE/ApiList/meta/insertBizMeta.py | 28 ----- API-SERVICE/ApiList/meta/insertBizMetaData.py | 55 --------- API-SERVICE/ApiList/meta/insertMetaMap.py | 80 ------------- API-SERVICE/ApiList/meta/insertMetaName.py | 45 -------- .../ApiList/meta/insertUseBoardData.py | 52 --------- API-SERVICE/ApiList/meta/metaMapList.py | 25 ----- API-SERVICE/ApiList/meta/metaNameList.py | 40 ------- API-SERVICE/ApiList/meta/updateBizMeta.py | 28 ----- API-SERVICE/ApiList/meta/updateMetaName.py | 31 ------ .../ApiList/meta/updateUseBoardData.py | 49 -------- API-SERVICE/ApiList/meta/useMetaNameList.py | 32 ------ API-SERVICE/conf/meta/api_config.ini | 105 ------------------ API-SERVICE/conf/meta/config.ini | 1 - 20 files changed, 766 deletions(-) delete mode 100644 API-SERVICE/ApiList/meta/deleteUseBoardData.py delete mode 100644 API-SERVICE/ApiList/meta/getBizMetaDetail.py delete mode 100644 API-SERVICE/ApiList/meta/getBizMetaList.py delete mode 100644 API-SERVICE/ApiList/meta/getBizMetaListByIds.py delete mode 100644 API-SERVICE/ApiList/meta/getMetaNameDetail.py delete mode 100644 API-SERVICE/ApiList/meta/getUseBoardDataDetail.py delete mode 100644 API-SERVICE/ApiList/meta/getUseBoardDataList.py delete mode 100644 API-SERVICE/ApiList/meta/insertBizMeta.py delete mode 100644 API-SERVICE/ApiList/meta/insertBizMetaData.py delete mode 100644 API-SERVICE/ApiList/meta/insertMetaMap.py delete mode 100644 API-SERVICE/ApiList/meta/insertMetaName.py delete mode 100644 API-SERVICE/ApiList/meta/insertUseBoardData.py delete mode 100644 API-SERVICE/ApiList/meta/metaMapList.py delete mode 100644 API-SERVICE/ApiList/meta/metaNameList.py delete mode 100644 API-SERVICE/ApiList/meta/updateBizMeta.py delete mode 100644 API-SERVICE/ApiList/meta/updateMetaName.py delete mode 100644 API-SERVICE/ApiList/meta/updateUseBoardData.py delete mode 100644 API-SERVICE/ApiList/meta/useMetaNameList.py diff --git a/API-SERVICE/ApiList/meta/deleteUseBoardData.py b/API-SERVICE/ApiList/meta/deleteUseBoardData.py deleted file mode 100644 index d3f73d94..00000000 --- a/API-SERVICE/ApiList/meta/deleteUseBoardData.py +++ /dev/null @@ -1,23 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/getBizMetaDetail.py b/API-SERVICE/ApiList/meta/getBizMetaDetail.py deleted file mode 100644 index b033802e..00000000 --- a/API-SERVICE/ApiList/meta/getBizMetaDetail.py +++ /dev/null @@ -1,23 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/getBizMetaList.py b/API-SERVICE/ApiList/meta/getBizMetaList.py deleted file mode 100644 index bbe0324b..00000000 --- a/API-SERVICE/ApiList/meta/getBizMetaList.py +++ /dev/null @@ -1,52 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/getBizMetaListByIds.py b/API-SERVICE/ApiList/meta/getBizMetaListByIds.py deleted file mode 100644 index 0b565146..00000000 --- a/API-SERVICE/ApiList/meta/getBizMetaListByIds.py +++ /dev/null @@ -1,27 +0,0 @@ -from fastapi.logger import logger -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data - - -def api(datasetIdList: str) -> Dict: - v_meta_wrap_query = 'SELECT * FROM v_biz_meta_wrap WHERE biz_dataset_id in ({0})' - - try: - db = connect_db() - dataset_id_list = ','.join( - [convert_data(biz_dataset_id) - for biz_dataset_id in datasetIdList.split(",")] - ) - meta_wrap = db.select(v_meta_wrap_query.format(dataset_id_list)) - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - else: - result = make_res_msg(1, "", meta_wrap[0], []) - result["data"].pop("header") - result["data"]["list"] = result["data"]["body"] - del result["data"]["body"] - logger.info(result) - - return result diff --git a/API-SERVICE/ApiList/meta/getMetaNameDetail.py b/API-SERVICE/ApiList/meta/getMetaNameDetail.py deleted file mode 100644 index 8b95557f..00000000 --- a/API-SERVICE/ApiList/meta/getMetaNameDetail.py +++ /dev/null @@ -1,24 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, make_res_msg, get_exception_info, convert_data - - -def api(nameId: str = None) -> Dict: - if nameId is None: - query = "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/ApiList/meta/getUseBoardDataDetail.py b/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py deleted file mode 100644 index fe781969..00000000 --- a/API-SERVICE/ApiList/meta/getUseBoardDataDetail.py +++ /dev/null @@ -1,23 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/getUseBoardDataList.py b/API-SERVICE/ApiList/meta/getUseBoardDataList.py deleted file mode 100644 index 7606d1b3..00000000 --- a/API-SERVICE/ApiList/meta/getUseBoardDataList.py +++ /dev/null @@ -1,23 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -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;' - 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/ApiList/meta/insertBizMeta.py b/API-SERVICE/ApiList/meta/insertBizMeta.py deleted file mode 100644 index 4f61e30c..00000000 --- a/API-SERVICE/ApiList/meta/insertBizMeta.py +++ /dev/null @@ -1,28 +0,0 @@ -import uuid -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/insertBizMetaData.py b/API-SERVICE/ApiList/meta/insertBizMetaData.py deleted file mode 100644 index 940815db..00000000 --- a/API-SERVICE/ApiList/meta/insertBizMetaData.py +++ /dev/null @@ -1,55 +0,0 @@ -import uuid -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel - - -class insertBizMetaData(BaseModel): - adm_dep: str - adm_dep_hp: str - admr_nm: str - copyright: str - ctgry: str - data_desc: str - data_nm: str - data_prv_desk: str - data_shap: str - data_updt_cyc: str - file_read_authority: str - file_type: str - kywrd: str - lang: str - license: str - reg_date: str - retv_num: str - rqt_dep: str - src_sys: str - src_url: str - updt_date: str - updt_nxt_date: 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/ApiList/meta/insertMetaMap.py b/API-SERVICE/ApiList/meta/insertMetaMap.py deleted file mode 100644 index d27d2ead..00000000 --- a/API-SERVICE/ApiList/meta/insertMetaMap.py +++ /dev/null @@ -1,80 +0,0 @@ -import uuid -from typing import Dict -from pydantic import BaseModel -from ApiService.ApiServiceConfig import config -from Utils.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" - - 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] - 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) - - 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(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/ApiList/meta/insertMetaName.py b/API-SERVICE/ApiList/meta/insertMetaName.py deleted file mode 100644 index e3ee075e..00000000 --- a/API-SERVICE/ApiList/meta/insertMetaName.py +++ /dev/null @@ -1,45 +0,0 @@ -import uuid -import string -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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 Exception - - # 특수문자 체크 - if list(filter(lambda eng_nm: eng_nm in symbol_list, insert.eng_nm)): - raise Exception - - 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/ApiList/meta/insertUseBoardData.py b/API-SERVICE/ApiList/meta/insertUseBoardData.py deleted file mode 100644 index 1982fcd8..00000000 --- a/API-SERVICE/ApiList/meta/insertUseBoardData.py +++ /dev/null @@ -1,52 +0,0 @@ -from typing import Dict -import uuid -from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import connect_db, get_exception_info, convert_data -from pydantic import BaseModel -from datetime import datetime, timedelta - - -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": except_name} - else: - result = {"result": 1, "errorMessage": ""} - - return result diff --git a/API-SERVICE/ApiList/meta/metaMapList.py b/API-SERVICE/ApiList/meta/metaMapList.py deleted file mode 100644 index 542c94af..00000000 --- a/API-SERVICE/ApiList/meta/metaMapList.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 - - -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/ApiList/meta/metaNameList.py b/API-SERVICE/ApiList/meta/metaNameList.py deleted file mode 100644 index a1fea5f3..00000000 --- a/API-SERVICE/ApiList/meta/metaNameList.py +++ /dev/null @@ -1,40 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/updateBizMeta.py b/API-SERVICE/ApiList/meta/updateBizMeta.py deleted file mode 100644 index 2f35aa9c..00000000 --- a/API-SERVICE/ApiList/meta/updateBizMeta.py +++ /dev/null @@ -1,28 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/updateMetaName.py b/API-SERVICE/ApiList/meta/updateMetaName.py deleted file mode 100644 index 9da58eab..00000000 --- a/API-SERVICE/ApiList/meta/updateMetaName.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/updateUseBoardData.py b/API-SERVICE/ApiList/meta/updateUseBoardData.py deleted file mode 100644 index 1748cf64..00000000 --- a/API-SERVICE/ApiList/meta/updateUseBoardData.py +++ /dev/null @@ -1,49 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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/ApiList/meta/useMetaNameList.py b/API-SERVICE/ApiList/meta/useMetaNameList.py deleted file mode 100644 index 27f28409..00000000 --- a/API-SERVICE/ApiList/meta/useMetaNameList.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import Dict -from ApiService.ApiServiceConfig import config -from Utils.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 as err: - 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/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 8963fafd..5d3f2f87 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -1,58 +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 @@ -68,61 +13,11 @@ 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 - [insertElsBizMeta] method = POST url = /portal/api/meta/insertElsBizMeta diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index 03027d6f..e36d3146 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -14,7 +14,6 @@ password = hello.meta12#$ database = dataportal schema = meta - [secret_info] name = user-katech-access-token secret = jwt-secrect-b-iris From a777fafaca4a0734543c650097f836cb47e19e99 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Thu, 22 Sep 2022 13:57:07 +0900 Subject: [PATCH 214/323] =?UTF-8?q?wheel=5Ftest=20=EC=BD=94=EB=93=9C=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/conf/common/config.ini | 2 +- setup.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 setup.py diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 76f6aeaa..673f97cc 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -20,7 +20,7 @@ secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 expire_min = 30 cookie_name = user-katech-access-token -token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role,user_uuidblng_org_cd,blng_org_nm,blng_org_desc +token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role,user_uuid,blng_org_cd,blng_org_nm,blng_org_desc [user_info] table = tb_user_info diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..a8fe34d6 --- /dev/null +++ b/setup.py @@ -0,0 +1,12 @@ +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__/']), + # packages=['ConnectManager'] +) From 493c4fc3f9222343cd50eb0adabc362a4326db8e Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 5 Oct 2022 13:23:30 +0900 Subject: [PATCH 215/323] =?UTF-8?q?[AIPLATFORM-432]=20=ED=95=9C=EC=9E=90?= =?UTF-8?q?=EC=97=B0=20api=20route=20=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 | 48 ++++++++++----------------- API-ROUTER/ApiRoute/ApiRouteConfig.py | 3 ++ API-ROUTER/Utils/RouteUtil.py | 24 ++++++++++++++ 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index f3abb1d1..ba952e7e 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -4,8 +4,8 @@ from fastapi import APIRouter from fastapi.responses import JSONResponse from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers, convert_data -from Utils.RouteUtil import bypass_msg, call_remote_func +from Utils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers +from Utils.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 @@ -45,25 +45,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;') - + config.api_info, _ = db.select('SELECT * FROM tb_api_info;') + config.api_params, _ = db.select('SELECT * FROM tb_api_params;') config.api_server_info, _ = db.select( 'SELECT * FROM tb_api_server_info') - for api in api_info: + for api in config.api_info: method = str(api["meth"]).split(",") self.router.add_api_route( 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' + for api_name, conf_api_info in config.api_config.items(): + module_path = f'{config.root_path}/ApiList/{conf_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=["service"]) + self.router.add_api_route(f'{conf_api_info["url_prefix"]}/{conf_api_info["sub_dir"]}/{api_name}', + module.api, methods=[conf_api_info["method"]], tags=["service"]) def reload_api(self): logger.info("Reload API Info") @@ -75,37 +75,25 @@ 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"]) try: - 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] - api_params, _ = db.select( - f'SELECT * FROM tb_api_params 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, access_token = await bypass_msg(api_info, params_query, body, headers) else: result = await call_remote_func(api_info, api_params, body) - response = JSONResponse(content=result) - add_cookie_api_list = config.secret_info["add_cookie_api"].split(",") - if api_info["api_nm"] in add_cookie_api_list: - response.set_cookie( - key=config.secret_info["cookie_name"], value=access_token) - return response + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + + 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 428e74c3..6c91176c 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] conn_pool: pool.SimpleConnectionPool diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 898593c1..03fa97b1 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/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 Utils.CommonUtil import get_exception_info @@ -21,6 +22,29 @@ 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 + 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["meth"] From 9b5eb60a924ef4bd812c92d7551be08786835249 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 5 Oct 2022 13:58:52 +0900 Subject: [PATCH 216/323] =?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/Utils/RouteUtil.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 03fa97b1..181915ff 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -86,16 +86,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 afe4bf943d454dbf07232a1ad966330838bc282a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 11 Oct 2022 11:15:38 +0900 Subject: [PATCH 217/323] =?UTF-8?q?[AIPLATFORM-704]=20feat:=20elasticsearc?= =?UTF-8?q?h=20=EA=B2=80=EC=83=89=20=EA=B3=B5=ED=86=B5=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/ELKSearch/.gitignore | 4 + API-SERVICE/ELKSearch/Manager/__init__.py | 0 API-SERVICE/ELKSearch/Manager/manager.py | 50 ++++++++++ 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, 170 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..d72d0ec9 --- /dev/null +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -0,0 +1,50 @@ +from typing import Dict, Any +from elasticsearch import Elasticsearch + + +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) 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..2034162e --- /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 + from_: int = Field(1, alias="from") + size: int = 10 + resultField: list = [] + sortOption: List[SortOption] = [] + searchOption: List[ConfigOption] = [] + filterOption: List[ConfigOption] = [] From 66539b07877818482a3137d841c7acf2033467b6 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 11 Oct 2022 11:16:19 +0900 Subject: [PATCH 218/323] =?UTF-8?q?[AIPLATFORM-704]=20feat:=20els=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=ED=8C=A8=ED=82=A4=EC=A7=80=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=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/getElsBizMetaList.py | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index b67b358c..89cf1b6e 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -1,74 +1,74 @@ -from typing import Dict, Optional -from copy import deepcopy -from pydantic import BaseModel -from Utils.ESUtils import div_keyword, make_query +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 Utils.CommonUtil import get_exception_info -from ConnectManager.ElasticSearchManager import ESSearch -class SearchOption(BaseModel): - perPage: int = 12 - curPage: int = 1 - keywordList: Optional[list] = None - sortOption: Optional[list] = [] - filterOption: dict = dict() - dataSrttn: str = "전체" - filterOperator: str = "OR" - matchOption: str = "AND" - - -def api(search_option: SearchOption) -> Dict: - +def api(input: InputModel) -> Dict: data_srttn = { # search_keyword: (result_key, result_data) - "전체": "totalCount", "보유데이터": "hasCount", "연동데이터": "innerCount", "외부데이터": "externalCount", - "해외데이터": "overseaCount" + "해외데이터": "overseaCount", + "전체": "totalCount" } - data = dict() - search_option.curPage = search_option.curPage - 1 - from_page = search_option.curPage * search_option.perPage - try: - # 숫자랑 특수문자 조회 - keyword_dict = div_keyword(search_option.keywordList) - es = ESSearch(cur_from=from_page,size=search_option.perPage) - es.set_sort(search_option.sortOption) - - if any(search_option.filterOption.values()): - es.set_filter(search_option.filterOption,search_option.filterOperator) + data_dict = dict() + from_ = input.from_ - 1 - es.set_match(keyword_dict,search_option.matchOption) + try: + es = ElasticSearchManager(page=from_, size=input.size) + es.set_sort(input.sortOption) + + ############ search option ############ + action = "query" + sub_action = "must" + query_dict = base_search_query(action,sub_action,input.searchOption) + + # ############ filter option ############ + 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 option ############ + sort_list = [{item.field: item.order} for item in input.sortOption] + es.set_sort(sort_list) + search_data = es.search(input.resultField) + + # ############ data_srttn ############ + i = None + for j,item in enumerate(item_dict["filter"]): + if "data_srttn" in item["match"].keys(): + i = j + break + else: + i = None for ko_nm, eng_nm in data_srttn.items(): - cnt_body_query = {"query": deepcopy(es.body["query"])} - - if "filter" not in cnt_body_query["query"]["bool"].keys(): - cnt_body_query["query"]["bool"]["filter"] = [] - - if ko_nm != "전체": - filter_srttn = make_query("match","data_srttn",ko_nm) - cnt_body_query["query"]["bool"]["filter"].append(filter_srttn) - - cnt = es.conn.count(index=es.index,body=cnt_body_query)["count"] - data[eng_nm] = cnt - - if search_option.dataSrttn != "전체": - filter_srttn = make_query("match","data_srttn",search_option.dataSrttn) + if i is None: + cnt_query = make_query("match","data_srttn",{'operator': 'OR', 'query': ko_nm}) + item_dict["filter"].append(cnt_query) + i = -1 + else: + item_dict["filter"][i]["match"]["data_srttn"]["query"] = ko_nm - if "filter" not in es.body["query"]["bool"].keys(): - es.body["query"]["bool"]["filter"] = [] + if ko_nm == "전체": + del item_dict["filter"][i] - es.body["query"]["bool"]["filter"].append(filter_srttn) + 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 - biz_meta_elk = es.search() except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} else: - search_list = [data["_source"] for data in biz_meta_elk["hits"]["hits"]] - data["searchList"] = search_list - result = {"result": 1, "errorMessage": "", "data": data} + 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 fc622f42e0b75433676ab9d7927202a7ae60dda2 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 11 Oct 2022 11:20:12 +0900 Subject: [PATCH 219/323] =?UTF-8?q?[AIPLATFORM-704]=20feat:=20insert,=20de?= =?UTF-8?q?lete,=20update=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-SERVICE/ELKSearch/Manager/manager.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py index d72d0ec9..bee3b11a 100644 --- a/API-SERVICE/ELKSearch/Manager/manager.py +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -1,5 +1,6 @@ -from typing import Dict, Any +from typing import Dict, Any, Union from elasticsearch import Elasticsearch +from ELKSearch.Utils.elasticsearch_utils import make_query class ElasticSearchManager: @@ -48,3 +49,20 @@ def set_pagination(self,size: int, from_: int) -> None: 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) \ No newline at end of file From c71cd41d39f2679a8b0e4df3f12e5bb151060e60 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 11 Oct 2022 11:21:05 +0900 Subject: [PATCH 220/323] =?UTF-8?q?[AIPLATFORM-704]=20feat:=20elasticsearc?= =?UTF-8?q?h=20pkg=20=EC=BD=94=EB=93=9C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/deleteElsBizMeta.py | 4 ++-- API-SERVICE/ApiList/meta/insertElsBizMeta.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py index 0857014a..df65ecab 100644 --- a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py @@ -1,10 +1,10 @@ from Utils.CommonUtil import get_exception_info -from ConnectManager.ElasticSearchManager import ESSearch +from ELKSearch.Manager.manager import ElasticSearchManager def api(biz_dataset_id: str): try: - es = ESSearch() + es = ElasticSearchManager() es.delete("biz_dataset_id", biz_dataset_id) except Exception: diff --git a/API-SERVICE/ApiList/meta/insertElsBizMeta.py b/API-SERVICE/ApiList/meta/insertElsBizMeta.py index 8e5cae2d..5f3a5716 100644 --- a/API-SERVICE/ApiList/meta/insertElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/insertElsBizMeta.py @@ -2,7 +2,7 @@ from typing import Dict from Utils.CommonUtil import get_exception_info from pydantic import BaseModel -from ConnectManager.ElasticSearchManager import ESSearch +from ELKSearch.Manager.manager import ElasticSearchManager class BizMeta(BaseModel): @@ -42,7 +42,7 @@ class BizMeta(BaseModel): def api(biz_meta_data: BizMeta) -> Dict: uid = uuid.uuid4() try: - es = ESSearch() + es = ElasticSearchManager() biz_meta_data = biz_meta_data.dict() biz_meta_data["biz_dataset_id"] = uid es.insert(biz_meta_data, biz_meta_data["biz_dataset_id"]) From ee2cdf0c48d237e124195ce5c1b046ca9a7e61f0 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 11 Oct 2022 11:25:06 +0900 Subject: [PATCH 221/323] =?UTF-8?q?[AIPLATFORM-704]=20feat:=20=EA=B5=AC?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConnectManager/ElasticSearchManager.py | 111 ------------------ API-SERVICE/Utils/ESUtils.py | 70 ----------- API-SERVICE/Utils/__init__.py | 1 - 3 files changed, 182 deletions(-) delete mode 100644 API-SERVICE/ConnectManager/ElasticSearchManager.py delete mode 100644 API-SERVICE/Utils/ESUtils.py diff --git a/API-SERVICE/ConnectManager/ElasticSearchManager.py b/API-SERVICE/ConnectManager/ElasticSearchManager.py deleted file mode 100644 index 90ff909d..00000000 --- a/API-SERVICE/ConnectManager/ElasticSearchManager.py +++ /dev/null @@ -1,111 +0,0 @@ -from typing import Optional, Union, Dict, Any -from elasticsearch import Elasticsearch, helpers -from Utils.ESUtils import set_dict_list, make_query - - -class ESSearch: - def __init__( - self, - host: str = "192.168.101.44", - port: str = "39200", - cur_from: 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 cur_from: curPage, elasticsearch default value = 0 - :param size: perPage, elasticsearch default value = 10 - """ - self.host = host - self.port = port - self.size = size - self.index = index - self.cur_from = cur_from - self.conn = self.connect() - self.body = self.set_body() - - def connect(self) -> object: - es = Elasticsearch(f"http://{self.host}:{self.port}") - return es - - def set_body(self) -> Dict[Any,Any]: - self.body = { - "from": self.cur_from, - "size": self.size, - "sort": [], - "query": {"bool": dict()} - } - return self.body - - def set_sort(self, sort: list) -> None: - self.body["sort"] = sort - - def set_pagination(self) -> None: - self.body["from"] = self.cur_from - self.body["size"] = self.size - - def set_filter(self, filter_option: dict, filter_oper: str = "OR") -> None: - filter_list = [] - if filter_oper == "OR": - query = " ".join([" ".join(values) for values in filter_option.values()]) - query = query.strip() - fields = list(filter_option.keys()) - self.body["query"]["bool"]["filter"] = [{"multi_match":{"query":query,"fields":fields}}] - else: - for option, items in filter_option.items(): - filter_list.extend([make_query("match",option,item) for item in items]) - self.body["query"]["bool"]["filter"] = filter_list - - def set_match(self, keyword_dict: dict, operator: Optional[str] = "AND", field: str = "data_nm.korean_analyzer") -> None: - """ - :param keyword_dict: type dict - :param field: search field, type str - :param operator: search operator, type str ex) (AND, OR) - """ - if any(keyword_dict.values()): - must_query_list = [] - option = "match" - - if len(keyword_dict[option]) and operator.upper() == "AND": - must_query_list = set_dict_list(keyword_dict[option], option, field) - - if len(keyword_dict["match_phrase"]): - option = "match_phrase" - must_query_list = set_dict_list(keyword_dict[option],option,field) - - if len(keyword_dict[option]) and operator.upper() == "OR": - keyword = " ".join(keyword_dict[option]) - op_query_dict = make_query(field, "query", keyword) - op_query_dict[field]["operator"] = operator - term = make_query(option, field, op_query_dict[field]) - must_query_list.append(term) - self.body["query"]["bool"]["must"] = must_query_list - else: - self.body["query"]["bool"]["must"] = {"match_all": {}} - - def insert(self, body: dict, doc_id: str) -> None: - return self.conn.index(index=self.index, body=body, id=doc_id) - - def insert_bulk(self, data: list): - return helpers.bulk(self.conn, data, index=self.index) - - 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 search(self) -> Dict[Any, Any]: - return self.conn.search(index=self.index, body=self.body) diff --git a/API-SERVICE/Utils/ESUtils.py b/API-SERVICE/Utils/ESUtils.py deleted file mode 100644 index 09c6c395..00000000 --- a/API-SERVICE/Utils/ESUtils.py +++ /dev/null @@ -1,70 +0,0 @@ -from typing import Union, Optional, List, Dict, Any -from Utils.CommonUtil import convert_data - - -def is_space(text: str) -> int: - if " " in text: - return 1 - else: - return 0 - - -def make_query(op, field, value) -> Dict[Any, Any]: - query = {op: {field: value}} - return query - - -def div_keyword(keyword_list: list) -> Dict[Any, Any]: - keyword_dict = {"match_phrase": [], "match": []} - if keyword_list is None or len(keyword_list) == 0: - return keyword_dict - else: - for keyword in keyword_list: - k = keyword.replace(" ", "") - if len(k) < 1: - continue - elif is_space(keyword): - keyword_dict["match_phrase"].append(keyword) - else: - keyword_dict["match"].append(keyword) - 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(db: object, es: object, st: str, et: str) -> None: - """ - CronJob update to elasticsearch index data - :param db: postgresql db connector object - :param es: elasticsearch object - :param st: start time, type str - :param et: end time, type str - :return: None - """ - db_query = f"SELECT * FROM v_biz_meta_info " \ - f"WHERE to_date(updt_date,'YY-MM-DD') " \ - f"BETWEEN {convert_data(st)} AND {convert_data(et)}" - - meta_wrap_list = db.select(db_query)[0] - bulk_meta_item = list() - - for meta_wrap in meta_wrap_list: - test_dict = dict() - test_dict["_id"] = meta_wrap["biz_dataset_id"] - test_dict["_source"] = meta_wrap - bulk_meta_item.append(test_dict) - - es.insert_bulk(bulk_meta_item) diff --git a/API-SERVICE/Utils/__init__.py b/API-SERVICE/Utils/__init__.py index 2fb0e584..3b5ce1cc 100644 --- a/API-SERVICE/Utils/__init__.py +++ b/API-SERVICE/Utils/__init__.py @@ -1,2 +1 @@ from .CommonUtil import * -from .ESUtils import * From be794b178542250e7e26d354aa1075ef36b728fb Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 11 Oct 2022 16:53:17 +0900 Subject: [PATCH 222/323] =?UTF-8?q?[AIPLATFORM-815]=20feat:=20=EC=B9=B4?= =?UTF-8?q?=ED=85=8C=EA=B3=A0=EB=A6=AC=20counting=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 --- .../ApiList/meta/getCategoryIdCount.py | 25 +++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 4 +++ 2 files changed, 29 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/getCategoryIdCount.py diff --git a/API-SERVICE/ApiList/meta/getCategoryIdCount.py b/API-SERVICE/ApiList/meta/getCategoryIdCount.py new file mode 100644 index 00000000..818c637e --- /dev/null +++ b/API-SERVICE/ApiList/meta/getCategoryIdCount.py @@ -0,0 +1,25 @@ +from typing import Dict +from ELKSearch.Manager.manager import ElasticSearchManager +from ELKSearch.Utils.elasticsearch_utils import make_query +from Utils.CommonUtil import get_exception_info + + +def api(nms) -> Dict: + data_dict = {} + key = "ctgry" + try: + ctgry_nm_list = nms.split(",") + es = ElasticSearchManager() + for c_id in ctgry_nm_list: + cnt_query = make_query("query","match_phrase",{key: c_id}) + cnt = es.conn.count(index=es.index, body=cnt_query)["count"] + data_dict[c_id] = cnt + + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + else: + pass + result = {"result": 1, "errorMessage": "", "data": data_dict} + + return result diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 5d3f2f87..019aba63 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -33,3 +33,7 @@ method = POST url = /portal/api/meta/deleteElsBizMeta sub_dir = meta +[getCategoryIdCount] +method = GET +url = /portal/api/meta/getCategoryIdCount +sub_dir = meta \ No newline at end of file From ddbb946c7dd489bfb37d823014c06bd05b23f384 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 11 Oct 2022 17:09:44 +0900 Subject: [PATCH 223/323] =?UTF-8?q?[AIPLATFORM-815]=20fix:=20API=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=EC=A3=BC?= =?UTF-8?q?=EC=86=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meta/{getCategoryIdCount.py => getCategoryNmCount.py} | 0 API-SERVICE/conf/meta/api_config.ini | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename API-SERVICE/ApiList/meta/{getCategoryIdCount.py => getCategoryNmCount.py} (100%) diff --git a/API-SERVICE/ApiList/meta/getCategoryIdCount.py b/API-SERVICE/ApiList/meta/getCategoryNmCount.py similarity index 100% rename from API-SERVICE/ApiList/meta/getCategoryIdCount.py rename to API-SERVICE/ApiList/meta/getCategoryNmCount.py diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 019aba63..b48a2ad0 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -33,7 +33,7 @@ method = POST url = /portal/api/meta/deleteElsBizMeta sub_dir = meta -[getCategoryIdCount] +[getCategoryNmCount] method = GET -url = /portal/api/meta/getCategoryIdCount +url = /portal/api/meta/getCategoryNmCount sub_dir = meta \ No newline at end of file From b09a83ee22606c319653c2324701a797efb12b6e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 12 Oct 2022 08:54:18 +0900 Subject: [PATCH 224/323] =?UTF-8?q?[AIPLATFORM-815]=20feat:=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=EA=B0=92=EC=A4=91=20+=20=EB=AC=B8=EC=9E=90=EB=A5=BC?= =?UTF-8?q?=20=5F=20=EB=AC=B8=EC=9E=90=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/getCategoryNmCount.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getCategoryNmCount.py b/API-SERVICE/ApiList/meta/getCategoryNmCount.py index 818c637e..c097f4ec 100644 --- a/API-SERVICE/ApiList/meta/getCategoryNmCount.py +++ b/API-SERVICE/ApiList/meta/getCategoryNmCount.py @@ -13,7 +13,7 @@ def api(nms) -> Dict: for c_id in ctgry_nm_list: cnt_query = make_query("query","match_phrase",{key: c_id}) cnt = es.conn.count(index=es.index, body=cnt_query)["count"] - data_dict[c_id] = cnt + data_dict[c_id.replace("+","_")] = cnt except Exception: except_name = get_exception_info() From a0447125ff82d54ec0f178c79175b2993a6f91b8 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Wed, 12 Oct 2022 11:04:13 +0900 Subject: [PATCH 225/323] =?UTF-8?q?[AIPLATFORM-850]=20email=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=EC=9D=84=20=ED=86=B5=ED=95=9C=20=ED=8C=A8=EC=8A=A4?= =?UTF-8?q?=EC=9B=8C=EB=93=9C=20=EB=B3=80=EA=B2=BD=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 --- API-SERVICE/ApiList/common/emailAthnPass.py | 45 +++++++++++++++++++++ API-SERVICE/conf/common/api_config.ini | 5 +++ 2 files changed, 50 insertions(+) create mode 100644 API-SERVICE/ApiList/common/emailAthnPass.py diff --git a/API-SERVICE/ApiList/common/emailAthnPass.py b/API-SERVICE/ApiList/common/emailAthnPass.py new file mode 100644 index 00000000..8b6c7b03 --- /dev/null +++ b/API-SERVICE/ApiList/common/emailAthnPass.py @@ -0,0 +1,45 @@ +from typing import Dict +from fastapi.logger import logger +from pydantic import BaseModel +from Utils.CommonUtil import get_exception_info, connect_db, convert_data +from ApiService.ApiServiceConfig import config + + +class EmailAuthFail(Exception): + pass + + +class emailAthnPass(BaseModel): + email: str + athn_no: str + new_password: str + + +def api(email_athn_pass: emailAthnPass) -> Dict: + user_id = email_athn_pass.email + new_password = email_athn_pass.new_password + user_info_table = config.user_info["table"] + try: + db = connect_db() + email_info, _ = db.select( + f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}') + + if email_info[0]["athn_no"] == email_athn_pass.athn_no: + time_zone = 'Asia/Seoul' + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + if email_info[0]["athn_yn"] == "Y": + db.execute( + f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))} \ + WHERE {config.user_info["id_column"]} = {convert_data(user_id)};') + else: + raise EmailAuthFail + else: + raise EmailAuthFail + logger.info("Successfully Auth Password.") + 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/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index a51d859c..d7aa0655 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -46,4 +46,9 @@ sub_dir = common [emailAthnCnfm] method = POST url = /portal/api/common/user/emailAthnCnfm +sub_dir = common + +[emailAthnPass] +method = POST +url = /portal/api/common/user/emailAthnPass sub_dir = common \ No newline at end of file From a50f37cbd981e753fb4ae3afb2f68b1b5affae60 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 13 Oct 2022 09:35:24 +0900 Subject: [PATCH 226/323] =?UTF-8?q?[AIPLATFORM-815]=20feat:=20index?= =?UTF-8?q?=EB=AA=85=20=EC=B4=88=EA=B8=B0=ED=99=94,=20=ED=95=9C=EA=B8=80?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=EC=96=B4=20analyzer=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/getElsBizMetaList.py | 3 +++ API-SERVICE/ELKSearch/Utils/model.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 89cf1b6e..f92ad071 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -24,6 +24,9 @@ def api(input: InputModel) -> Dict: ############ search option ############ 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) # ############ filter option ############ diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index 2034162e..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 + index: str = "biz_meta" from_: int = Field(1, alias="from") size: int = 10 resultField: list = [] From a5da6f1e9d17f0e1a4726189bfd98f41aa841eee Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 13 Oct 2022 16:45:34 +0900 Subject: [PATCH 227/323] =?UTF-8?q?[AIPLATFORM-875]=20feat:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=EC=96=B4=20=EC=9E=90=EB=8F=99=EC=99=84=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 --- API-SERVICE/ApiList/meta/getPrefixBizMeta.py | 27 ++++++++++++++++++++ API-SERVICE/ELKSearch/Manager/manager.py | 6 ++++- API-SERVICE/conf/meta/api_config.ini | 5 ++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/meta/getPrefixBizMeta.py diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py new file mode 100644 index 00000000..4a02235c --- /dev/null +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -0,0 +1,27 @@ +from typing import Dict +from ELKSearch.Manager.manager import ElasticSearchManager +from Utils.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/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py index bee3b11a..bc393f6c 100644 --- a/API-SERVICE/ELKSearch/Manager/manager.py +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -65,4 +65,8 @@ 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) \ No newline at end of file + 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/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index b48a2ad0..0001d46b 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -36,4 +36,9 @@ sub_dir = meta [getCategoryNmCount] method = GET url = /portal/api/meta/getCategoryNmCount +sub_dir = meta + +[getPrefixBizMeta] +method = GET +url = /portal/api/meta/getPrefixBizMeta sub_dir = meta \ No newline at end of file From d413ddfa887a405f0a3928ad3c4299d1409a46b2 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 17 Oct 2022 10:55:38 +0900 Subject: [PATCH 228/323] =?UTF-8?q?feat=20:=20=EC=83=98=ED=94=8C=20meta=20?= =?UTF-8?q?insert=20=EC=9A=A9=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/ApiRoute/ApiRoute.py | 1 - API-ROUTER/ApiRoute/ApiRouteConfig.py | 1 + API-SERVICE/ApiList/common/commonLogin.py | 1 - API-SERVICE/ApiList/meta/metaInsert.py | 41 +++++++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 5 +++ API-SERVICE/conf/sitemng/api_config.ini | 2 +- 6 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 API-SERVICE/ApiList/meta/metaInsert.py diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index ba952e7e..87ee9292 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -2,7 +2,6 @@ from typing import Dict, List import importlib.util from fastapi import APIRouter -from fastapi.responses import JSONResponse from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers from Utils.RouteUtil import bypass_msg, call_remote_func, get_api_info, make_route_response diff --git a/API-ROUTER/ApiRoute/ApiRouteConfig.py b/API-ROUTER/ApiRoute/ApiRouteConfig.py index 6c91176c..92132ab6 100644 --- a/API-ROUTER/ApiRoute/ApiRouteConfig.py +++ b/API-ROUTER/ApiRoute/ApiRouteConfig.py @@ -19,6 +19,7 @@ class ApiRouteConfig: api_info: List[Dict] api_params: List[Dict] + secret_info: Dict conn_pool: pool.SimpleConnectionPool diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index c503e2b9..5898ce79 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -20,7 +20,6 @@ def api(login: commonLogin) -> Dict: 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"]))) diff --git a/API-SERVICE/ApiList/meta/metaInsert.py b/API-SERVICE/ApiList/meta/metaInsert.py new file mode 100644 index 00000000..292c0eb7 --- /dev/null +++ b/API-SERVICE/ApiList/meta/metaInsert.py @@ -0,0 +1,41 @@ +from typing import Dict +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db, get_exception_info, convert_data +import os +import base64 + + +def print_files_in_dir(root_dir, file_name): + files = os.listdir(root_dir) + print(len(files)) + for file in files: + path = os.path.join(root_dir, file, file_name) + print(path) + + +def api() -> Dict: + eda_path = "/Users/cbc/Downloads/EDA_FILE" + try: + db = connect_db() + files = os.listdir(eda_path) + for index, rid in enumerate(files): + print(index) + path = os.path.join(eda_path, rid, "profile_report_merged.html") + with open(path, "rb") as fd: + data = fd.read() + data_base64 = base64.b64encode(data).decode('ascii') + insert_data = f'data:text/html;base64,{data_base64}' + print(f'LEN : {len(insert_data)}') + # print(insert_data) + query = f'UPDATE meta_temp SET file_data = {convert_data(insert_data)}\ + WHERE gimi9_rid = {convert_data(rid)}' + 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/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 0001d46b..abd2a157 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -41,4 +41,9 @@ sub_dir = meta [getPrefixBizMeta] method = GET url = /portal/api/meta/getPrefixBizMeta +sub_dir = meta + +[metaInsert] +method = GET +url = /portal/api/sitemng/metaInsert sub_dir = meta \ 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 5625b22f..69e125b0 100644 --- a/API-SERVICE/conf/sitemng/api_config.ini +++ b/API-SERVICE/conf/sitemng/api_config.ini @@ -6,4 +6,4 @@ sub_dir = sitemng [getCodeList] method = GET url = /portal/api/sitemng/getCodeList -sub_dir = sitemng \ No newline at end of file +sub_dir = sitemng From e9c2ca746dd6681565b1480cc8c7ae4bbd45369e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 25 Oct 2022 16:12:41 +0900 Subject: [PATCH 229/323] =?UTF-8?q?[AIPLATFORM-973]=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/ApiList/meta/getElsBizMetaList.py | 19 ++++++++++++++++--- API-SERVICE/ELKSearch/Utils/model.py | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index f92ad071..deb28cc5 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -5,6 +5,20 @@ from Utils.CommonUtil import get_exception_info +def extra_filter(option_list): + els_katech_option = ["ctgry","data_shap","data_prv_desk"] + for item in option_list: + for col in els_katech_option: + if col in item.field: + item.field.append(f"re_{col}") + index = item.field.index(col) + del item.field[index] + item.keywords = [v.replace(" ","") for v in item.keywords] + if item.field in ["data_nm", "data_desc"]: + item.field = item.field + ".korean_analyzer" + return option_list + + def api(input: InputModel) -> Dict: data_srttn = { # search_keyword: (result_key, result_data) @@ -24,13 +38,12 @@ def api(input: InputModel) -> Dict: ############ search option ############ action = "query" sub_action = "must" - for item in input.searchOption: - if item.field in ["data_nm", "data_desc"]: - item.field = item.field + ".korean_analyzer" + input.searchOption = extra_filter(input.searchOption) query_dict = base_search_query(action,sub_action,input.searchOption) # ############ filter option ############ sub_action = "filter" + input.filterOption = extra_filter(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) diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index a0712f59..235b9809 100644 --- a/API-SERVICE/ELKSearch/Utils/model.py +++ b/API-SERVICE/ELKSearch/Utils/model.py @@ -3,7 +3,7 @@ class ConfigOption(BaseModel): - field: Union[list, str] + field: list keywords: list operator: str From e7f5b717229ac05867b802c1d9dd8c273cd10b72 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 31 Oct 2022 09:46:11 +0900 Subject: [PATCH 230/323] =?UTF-8?q?fix:=20=EB=A9=94=EC=9D=BC=EB=B0=9C?= =?UTF-8?q?=EC=86=A1=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/conf/common/config.ini | 6 +++--- API-SERVICE/conf/common/template/emailAthnSend.html | 4 ++-- API-SERVICE/conf/common/template/pwdEmailAthn.html | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 673f97cc..1aabc5ca 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -20,7 +20,7 @@ secret_key = 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7 algorithm = HS256 expire_min = 30 cookie_name = user-katech-access-token -token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role,user_uuid,blng_org_cd,blng_org_nm,blng_org_desc +token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_role,user_uuid,blng_org_cd,blng_org_nm,blng_org_desc [user_info] table = tb_user_info @@ -30,8 +30,8 @@ password_column = user_password # emailAthnSend, emailAthnCnfm [email_auth] auth_no_len = 10 -subject_register = [자동차 산업데이터 포털]회원가입을 위한 인증 메일입니다. -subject_password = [자동차 산업데이터 포털]비밀번호 변경을 위한 인증 메일입니다. +subject_register = [자동차데이터포털]회원가입을 위한 인증 메일입니다. +subject_password = [자동차데이터포털]비밀번호 변경을 위한 인증 메일입니다. server_addr = mail.w.bigdata-car.kr port = 587 login_user = admin@bigdata-car.kr diff --git a/API-SERVICE/conf/common/template/emailAthnSend.html b/API-SERVICE/conf/common/template/emailAthnSend.html index 4c75431a..1968d00c 100644 --- a/API-SERVICE/conf/common/template/emailAthnSend.html +++ b/API-SERVICE/conf/common/template/emailAthnSend.html @@ -18,13 +18,13 @@

- 한자연 사용자 인증 알림 + 자동차데이터포털 사용자 인증 알림

From ae6b8669a3d0faea5b0ee2e4fc7db112413510f0 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 25 Aug 2023 08:30:27 +0900 Subject: [PATCH 314/323] =?UTF-8?q?[AIPLATFORM-2129]=20chore:=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/sitemng/template/notyEmail.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/conf/sitemng/template/notyEmail.html b/API-SERVICE/conf/sitemng/template/notyEmail.html index bff3886c..bcf1c20a 100644 --- a/API-SERVICE/conf/sitemng/template/notyEmail.html +++ b/API-SERVICE/conf/sitemng/template/notyEmail.html @@ -22,8 +22,8 @@

-

CONTENT1

-

CONTENT2

+

CONTENTS1

+

CONTENTS2

From 94c877e435bce3f5755aa91943bfbcf95a8e13ea Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 25 Aug 2023 08:42:19 +0900 Subject: [PATCH 315/323] =?UTF-8?q?[AIPLATFORM-2129]=20feat:=20html=20?= =?UTF-8?q?=EB=A7=81=ED=81=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/sitemng/template/notyEmail.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/API-SERVICE/conf/sitemng/template/notyEmail.html b/API-SERVICE/conf/sitemng/template/notyEmail.html index bcf1c20a..ec42acb7 100644 --- a/API-SERVICE/conf/sitemng/template/notyEmail.html +++ b/API-SERVICE/conf/sitemng/template/notyEmail.html @@ -23,7 +23,9 @@

CONTENTS1

-

CONTENTS2

+

+ 바로가기 +

From 8dede09b6139487b92f2255de8a2c56c08401ab9 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Aug 2023 08:45:11 +0900 Subject: [PATCH 316/323] =?UTF-8?q?fix:=20category=20count=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EA=B7=9C=EC=B9=99=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/getCategoryNmCount.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getCategoryNmCount.py b/API-SERVICE/ApiList/meta/getCategoryNmCount.py index 84ccdb8b..655b0371 100644 --- a/API-SERVICE/ApiList/meta/getCategoryNmCount.py +++ b/API-SERVICE/ApiList/meta/getCategoryNmCount.py @@ -8,15 +8,16 @@ def api(nms) -> Dict: data_dict = {} - key = "ctgry" + key = "re_ctgry" els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] try: ctgry_nm_list = nms.split(",") es = ElasticSearchManager(**els_config) for c_id in ctgry_nm_list: - cnt_query = make_query("query", "match_phrase", {key: c_id}) + c_v = c_id.replace(" ","") + cnt_query = make_query("query", "match_phrase", {key: c_v}) cnt = es.conn.count(index=es.index, body=cnt_query)["count"] - data_dict[c_id.replace("+", "_")] = cnt + data_dict[c_id.replace(" ", "_")] = cnt except Exception: except_name = get_exception_info() From 5d5086b5c2f25465a4937e5062bfbf03570a1eaa Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Aug 2023 13:07:23 +0900 Subject: [PATCH 317/323] =?UTF-8?q?feat:=20email=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/analysisRequestEmail.html | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 API-SERVICE/conf/sitemng/template/analysisRequestEmail.html diff --git a/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html b/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html new file mode 100644 index 00000000..81847859 --- /dev/null +++ b/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html @@ -0,0 +1,38 @@ + + + + + + +
+
+

+ +

+
+

-

한자연에서 사용자 인증을 위해 보낸 인증번호입니다.

+

자동차데이터포털에서 사용자 인증을 위해 보낸 인증번호입니다.

AUTH_NO

diff --git a/API-SERVICE/conf/common/template/pwdEmailAthn.html b/API-SERVICE/conf/common/template/pwdEmailAthn.html index cab284f0..b1629f17 100644 --- a/API-SERVICE/conf/common/template/pwdEmailAthn.html +++ b/API-SERVICE/conf/common/template/pwdEmailAthn.html @@ -18,13 +18,13 @@

- 한자연 비밀번호 찾기 인증 알림 + 자동차데이터포털 비밀번호 찾기 인증 알림

-

한자연에서 비밀번호 찾기을 위해 보낸 인증번호입니다.

+

자동차데이터포털에서 비밀번호 찾기을 위해 보낸 인증번호입니다.

AUTH_NO

From 778917287ea706f546f3cf2476c7bde166ef5fbd Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 31 Oct 2022 16:35:48 +0900 Subject: [PATCH 231/323] =?UTF-8?q?fix=20:=20api=20param=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=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/Utils/RouteUtil.py | 26 ++++++++++++++------------ API-SERVICE/ApiList/meta/metaInsert.py | 15 ++++++++++++--- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 181915ff..8ca84253 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -3,6 +3,8 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from urllib.parse import ParseResult + +from regex import W from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import get_exception_info from typing import Dict @@ -33,14 +35,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 @@ -86,15 +87,16 @@ async def run_cmd(cmd: str): async def call_remote_func(api_info, api_params, input_params) -> Dict: 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}' diff --git a/API-SERVICE/ApiList/meta/metaInsert.py b/API-SERVICE/ApiList/meta/metaInsert.py index 292c0eb7..953f9cb3 100644 --- a/API-SERVICE/ApiList/meta/metaInsert.py +++ b/API-SERVICE/ApiList/meta/metaInsert.py @@ -18,6 +18,7 @@ def api() -> Dict: try: db = connect_db() files = os.listdir(eda_path) + id_cnt = 0 for index, rid in enumerate(files): print(index) path = os.path.join(eda_path, rid, "profile_report_merged.html") @@ -27,9 +28,17 @@ def api() -> Dict: insert_data = f'data:text/html;base64,{data_base64}' print(f'LEN : {len(insert_data)}') # print(insert_data) - query = f'UPDATE meta_temp SET file_data = {convert_data(insert_data)}\ - WHERE gimi9_rid = {convert_data(rid)}' - db.execute(query) + # query = f'UPDATE meta_temp SET file_data = {convert_data(insert_data)}\ + # WHERE gimi9_rid = {convert_data(rid)}' + select_query = f'select biz_dataset_id from meta_temp where gimi9_rid = {convert_data(rid)}' + select_res, _ = db.select(select_query) + if select_res: + biz_dataset_id = select_res[0]["biz_dataset_id"] + query = f'INSERT INTO tb_meta_html (biz_dataset_id, file_data) VALUES ({convert_data(biz_dataset_id)}, {convert_data(insert_data)});' + db.execute(query) + else: + id_cnt += 1 + print(f'id_cnt : {id_cnt}') except Exception: except_name = get_exception_info() From 344ec6ede1359de2de101bc9dd1a2a1da77fdf61 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Mon, 31 Oct 2022 16:40:16 +0900 Subject: [PATCH 232/323] =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?import=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/Utils/RouteUtil.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index 8ca84253..c15f122c 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -3,8 +3,6 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from urllib.parse import ParseResult - -from regex import W from ApiRoute.ApiRouteConfig import config from Utils.CommonUtil import get_exception_info from typing import Dict From afd387348273fe4a4510a4b2124cd86b450a0f60 Mon Sep 17 00:00:00 2001 From: CBC <39294675+cbccbs@users.noreply.github.com> Date: Tue, 1 Nov 2022 09:52:06 +0900 Subject: [PATCH 233/323] =?UTF-8?q?=ED=95=9C=EC=9E=90=EC=97=B0=20=EC=83=81?= =?UTF-8?q?=EC=9A=A9=20DB=20=EC=A0=95=EB=B3=B4=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-ROUTER/conf/config.ini | 4 ++-- API-SERVICE/conf/common/config.ini | 4 ++-- API-SERVICE/conf/meta/config.ini | 4 ++-- API-SERVICE/conf/sitemng/config.ini | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index ade332db..9324d7ea 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -13,8 +13,8 @@ database = dataportal schema = sitemng [commercial_db] -host = 192.168.100.126 -port = 25432 +host = 192.168.54.60 +port = 5432 user = dpsi password = hello.sitemng12#$ database = dataportal diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 1aabc5ca..d2c9d32e 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -7,8 +7,8 @@ database = dataportal schema = users,meta,sitemng,board,analysis,sysconfig [commercial_db] -host = 192.168.100.126 -port = 25432 +host = 192.168.54.60 +port = 5432 user = dpmanager password = hello.dp12#$ database = dataportal diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index e36d3146..5f54c92e 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -7,8 +7,8 @@ database = dataportal schema = meta [commercial_db] -host = 192.168.100.126 -port = 25432 +host = 192.168.54.60 +port = 5432 user = dpme password = hello.meta12#$ database = dataportal diff --git a/API-SERVICE/conf/sitemng/config.ini b/API-SERVICE/conf/sitemng/config.ini index f0a79869..ec342771 100644 --- a/API-SERVICE/conf/sitemng/config.ini +++ b/API-SERVICE/conf/sitemng/config.ini @@ -7,8 +7,8 @@ database = dataportal schema = sitemng [commercial_db] -host = 192.168.100.126 -port = 25432 +host = 192.168.54.60 +port = 5432 user = dpsi password = hello.sitemng12#$ database = dataportal From aaeffb4fccb2abe4bf9a45e41cc04ddcf57a99b2 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 2 Nov 2022 13:41:21 +0900 Subject: [PATCH 234/323] =?UTF-8?q?build:=20router,=20service=20=EB=B3=84?= =?UTF-8?q?=20requirements.txt=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/requirements.txt | 35 +++++++++++++++++++++++++++++++++++ API-SERVICE/requirements.txt | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 API-ROUTER/requirements.txt create mode 100644 API-SERVICE/requirements.txt diff --git a/API-ROUTER/requirements.txt b/API-ROUTER/requirements.txt new file mode 100644 index 00000000..3231aff7 --- /dev/null +++ b/API-ROUTER/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 +bcrypt==4.0.1 +certifi==2022.9.24 +cffi==1.15.1 +charset-normalizer==2.0.12 +click==8.1.3 +cryptography==38.0.1 +decorator==5.1.1 +fastapi==0.75.2 +frozenlist==1.3.1 +h11==0.14.0 +idna==3.4 +multidict==6.0.2 +paramiko==2.10.3 +psycopg2==2.8.6 +py==1.11.0 +pycparser==2.21 +pydantic==1.10.2 +PyJWT==2.6.0 +PyNaCl==1.5.0 +requests==2.27.1 +retry==0.9.2 +six==1.16.0 +sniffio==1.3.0 +starlette==0.17.1 +typing_extensions==4.4.0 +urllib3==1.26.12 +uvicorn==0.16.0 +yarl==1.8.1 diff --git a/API-SERVICE/requirements.txt b/API-SERVICE/requirements.txt new file mode 100644 index 00000000..a9bb4ee4 --- /dev/null +++ b/API-SERVICE/requirements.txt @@ -0,0 +1,36 @@ +anyio==3.6.2 +asgiref==3.5.2 +bcrypt==4.0.1 +certifi==2022.9.24 +cffi==1.15.1 +charset-normalizer==2.0.12 +click==8.1.3 +cryptography==38.0.1 +decorator==5.1.1 +ecdsa==0.18.0 +elastic-transport==8.4.0 +elasticsearch==8.4.3 +fastapi==0.75.2 +h11==0.14.0 +idna==3.4 +jose==1.0.0 +paramiko==2.10.3 +passlib==1.7.4 +psycopg2==2.8.6 +py==1.11.0 +pyasn1==0.4.8 +pycparser==2.21 +pydantic==1.10.2 +PyJWT==2.6.0 +PyNaCl==1.5.0 +python-jose==3.3.0 +pytz==2022.5 +requests==2.27.1 +retry==0.9.2 +rsa==4.9 +six==1.16.0 +sniffio==1.3.0 +starlette==0.17.1 +typing_extensions==4.4.0 +urllib3==1.26.12 +uvicorn==0.16.0 From 68d09760a5bded7c4eceef4a83b0a9c03639da29 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 2 Nov 2022 15:35:13 +0900 Subject: [PATCH 235/323] =?UTF-8?q?fix:=20python=20=EB=B2=84=EC=A0=84?= =?UTF-8?q?=EC=97=85=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=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-ROUTER/safe_start.sh | 4 ++-- API-ROUTER/start.sh | 4 ++-- API-SERVICE/safe_start.sh | 4 ++-- API-SERVICE/start.sh | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/API-ROUTER/safe_start.sh b/API-ROUTER/safe_start.sh index 2f40f0fe..476fbeb8 100644 --- a/API-ROUTER/safe_start.sh +++ b/API-ROUTER/safe_start.sh @@ -45,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} --db_type ${router_db} 1> /dev/null 2>&1 &" + router_exec="nohup python3 ${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} 1> /dev/null 2>&1 & + nohup python3 ${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 6e75714b..7363e659 100644 --- a/API-ROUTER/start.sh +++ b/API-ROUTER/start.sh @@ -17,9 +17,9 @@ 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} --db_type ${router_db} 1> /dev/null 2>&1 &" + router_exec="nohup python3 ${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} 1> /dev/null 2>&1 & + nohup python3 ${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 fe6650f3..5d2a4c5b 100644 --- a/API-SERVICE/safe_start.sh +++ b/API-SERVICE/safe_start.sh @@ -49,9 +49,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} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 &" + router_exec="nohup python3 ${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} --db_type ${router_db} 1> /dev/null 2>&1 & + nohup python3 ${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 484bfd8f..95f4f281 100644 --- a/API-SERVICE/start.sh +++ b/API-SERVICE/start.sh @@ -21,9 +21,9 @@ 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} --category ${category} --db_type ${router_db} 1> /dev/null 2>&1 &" + router_exec="nohup python3 ${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} --db_type ${router_db} 1> /dev/null 2>&1 & + nohup python3 ${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 e056e3c9a9a0c9d52815f93fb067a3412aabb8b2 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 4 Nov 2022 13:15:02 +0900 Subject: [PATCH 236/323] =?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 | 2 ++ API-SERVICE/ApiList/common/commonLogout.py | 10 +++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 8e247578..448f0533 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ __pycache__/ .DS_Store .idea *.log +.vscode +.python-* diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index 6a02ea82..4d29d1d4 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -18,12 +18,12 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: f_delete = True 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]: @@ -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 else: result = {"result": 1, "errorMessage": ""} response = JSONResponse(content=result) From 1ab603cedede3d903880a1e9a3c1edf7065645e6 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 09:15:13 +0900 Subject: [PATCH 237/323] =?UTF-8?q?[AIPLATFORM-1065]=20feat:=20elasticsear?= =?UTF-8?q?ch=20config=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 | 19 +++ API-SERVICE/ELKSearch/conf/db_config.ini | 31 ++++ API-SERVICE/ELKSearch/conf/mapping.json | 205 +++++++++++++++++++++++ 3 files changed, 255 insertions(+) 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/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini new file mode 100644 index 00000000..3632f4fb --- /dev/null +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -0,0 +1,19 @@ +[kt] +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 +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 new file mode 100644 index 00000000..12062d5f --- /dev/null +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -0,0 +1,31 @@ +[local_db] +host = localhost +port = 5432 +user = postgres +password = 0312 +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 \ No newline at end of file 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 60a535d5ffe3e9a6b4fc3cda2b1580c0046de78d Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 09:15:53 +0900 Subject: [PATCH 238/323] =?UTF-8?q?[AIPLATFORM-1065]=20feat:=20elasticsear?= =?UTF-8?q?ch=20config=20=EA=B4=80=EB=A6=AC=EB=A5=BC=20=EC=9C=84=ED=95=9C?= =?UTF-8?q?=20util=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/.gitignore | 2 - API-SERVICE/ELKSearch/Manager/__init__.py | 1 + API-SERVICE/ELKSearch/Utils/__init__.py | 1 + API-SERVICE/ELKSearch/Utils/database_utils.py | 99 +++++++++++++++++++ .../ELKSearch/Utils/elasticsearch_utils.py | 49 +-------- API-SERVICE/ELKSearch/Utils/model.py | 2 +- 6 files changed, 103 insertions(+), 51 deletions(-) create mode 100644 API-SERVICE/ELKSearch/Utils/database_utils.py 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/Manager/__init__.py b/API-SERVICE/ELKSearch/Manager/__init__.py index e69de29b..b9742821 100644 --- a/API-SERVICE/ELKSearch/Manager/__init__.py +++ b/API-SERVICE/ELKSearch/Manager/__init__.py @@ -0,0 +1 @@ +from . import * \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/Utils/__init__.py b/API-SERVICE/ELKSearch/Utils/__init__.py index e69de29b..b9742821 100644 --- a/API-SERVICE/ELKSearch/Utils/__init__.py +++ b/API-SERVICE/ELKSearch/Utils/__init__.py @@ -0,0 +1 @@ +from . import * \ No newline at end of file diff --git a/API-SERVICE/ELKSearch/Utils/database_utils.py b/API-SERVICE/ELKSearch/Utils/database_utils.py new file mode 100644 index 00000000..7937671c --- /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 ElsSearchConfig: + 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 = ElsSearchConfig + + +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') + 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(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_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 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: []} diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index 235b9809..a0712f59 100644 --- a/API-SERVICE/ELKSearch/Utils/model.py +++ b/API-SERVICE/ELKSearch/Utils/model.py @@ -3,7 +3,7 @@ class ConfigOption(BaseModel): - field: list + field: Union[list, str] keywords: list operator: str From 34a8b3c946d74115313c7b529c7761908fca8927 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 09:16:31 +0900 Subject: [PATCH 239/323] =?UTF-8?q?[AIPLATFORM-1065]=20feat:=20config=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=20=EC=BD=94=EB=93=9C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getElsBizMetaList.py | 7 +++++-- API-SERVICE/ApiList/meta/getPrefixBizMeta.py | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index deb28cc5..b2618d71 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -2,7 +2,9 @@ from ELKSearch.Manager.manager import ElasticSearchManager from ELKSearch.Utils.model import InputModel from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query -from Utils.CommonUtil import get_exception_info +from ELKSearch.Utils.database_utils import get_config +from ServiceUtils.CommonUtil import get_exception_info +from ApiService.ApiServiceConfig import config def extra_filter(option_list): @@ -30,9 +32,10 @@ def api(input: InputModel) -> Dict: } data_dict = dict() from_ = input.from_ - 1 + els_config = get_config(config.root_path,"config.ini")["katech"] try: - es = ElasticSearchManager(page=from_, size=input.size) + es = ElasticSearchManager(page=from_, size=input.size, **els_config) es.set_sort(input.sortOption) ############ search option ############ diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 4a02235c..1eb4c7b4 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -1,6 +1,8 @@ from typing import Dict from ELKSearch.Manager.manager import ElasticSearchManager from Utils.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: @@ -12,8 +14,9 @@ def api(size: int, keyword: str) -> Dict: """ field = "data_nm" query = {field: keyword} + els_config = get_config(config.root_path,"config.ini")["katech"] try: - es = ElasticSearchManager() + es = ElasticSearchManager(**els_config) es.size = size prefix_data = es.prefix(query,[field]) From 2a4205e0fc7009c91ad013fca755efde6f2f8fe8 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 10:51:27 +0900 Subject: [PATCH 240/323] =?UTF-8?q?[AIPLATFORM-1065]=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=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=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/els_update.py | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 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..a479112f --- /dev/null +++ b/API-SERVICE/els_update.py @@ -0,0 +1,45 @@ +import os +import re +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 v_biz_meta_info " + if config.check == "True": + today = datetime.today().date() + 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] + + try: + for meta_wrap in meta_wrap_list: + els_dict = dict() + + meta_wrap["re_ctgry"] = re.sub("[ ]","",str(meta_wrap["ctgry"])) + meta_wrap["re_data_shap"] = re.sub("[ ]","",str(meta_wrap["data_shap"])) + meta_wrap["re_data_prv_desk"] = re.sub("[ ]","",str(meta_wrap["data_prv_desk"])) + + 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 b4f133134df7212fed8456b5337bf6e5324640a2 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Tue, 8 Nov 2022 13:17:25 +0900 Subject: [PATCH 241/323] =?UTF-8?q?fix:=20=ED=8C=8C=EC=9D=BC=EB=B8=8C?= =?UTF-8?q?=EB=9D=BC=EC=9A=B0=EC=A0=80=20api=20=EC=A0=91=EC=86=8D=EC=A0=95?= =?UTF-8?q?=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-ROUTER/conf/config.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/API-ROUTER/conf/config.ini b/API-ROUTER/conf/config.ini index 9324d7ea..314350b0 100644 --- a/API-ROUTER/conf/config.ini +++ b/API-ROUTER/conf/config.ini @@ -1,8 +1,8 @@ [remote] -host = 192.168.101.44 -port = 10022 -id = deep -password = !deep@win#human$5 +host = 10.10.20.59 +port = 20022 +id = root +password = root123 [test_db] host = 192.168.100.126 From 35185eff75bd5f6af6e13f3777a775bcccc13405 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 13:46:16 +0900 Subject: [PATCH 242/323] =?UTF-8?q?[AIPLATFORM-1065]=20fix:=20library=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/getElsBizMetaList.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index b2618d71..38cee77e 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -3,7 +3,7 @@ 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 Utils.CommonUtil import get_exception_info from ApiService.ApiServiceConfig import config From 1cfa6a437c9d5674e73411f177cdb3de36359a45 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 15:05:44 +0900 Subject: [PATCH 243/323] =?UTF-8?q?[AIPLATFORM-1065]=20fix:=20db=20config?= =?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/ELKSearch/conf/db_config.ini | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini index 12062d5f..9f21d3bc 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -14,6 +14,14 @@ password = 22DOCean.@!~ database = ktportal schema = meta +[remote_db] +host = 10.10.20.60 +port = 5432 +user = dpmanager +password = hello.dp12#$ +database = dataportal +schema = meta + [katech_db] host = 10.10.20.60 port = 5432 From 3a35b20c64d4599e62d213663e754561b413a33b Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Nov 2022 15:06:58 +0900 Subject: [PATCH 244/323] =?UTF-8?q?[AIPLATFORM-1065]=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..1deec9af 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -1,8 +1,3 @@ -[kt] -host = 10.217.59.133 -port = 9200 -index = biz_meta - [katech] host = 10.10.20.59 port = 39200 diff --git a/API-SERVICE/ELKSearch/conf/db_config.ini b/API-SERVICE/ELKSearch/conf/db_config.ini index 9f21d3bc..4c825b93 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -6,14 +6,6 @@ password = 0312 database = dataportal schema = meta -[kt_db] -host = 10.220.184.63 -port = 5432 -user = dpme -password = 22DOCean.@!~ -database = ktportal -schema = meta - [remote_db] host = 10.10.20.60 port = 5432 From 8ab3df72ddcc1e833ebe5a68ac8c6f77f5deb42e Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 9 Nov 2022 15:25:03 +0900 Subject: [PATCH 245/323] =?UTF-8?q?fix:=20=ED=8C=A8=EC=8A=A4=EC=9B=8C?= =?UTF-8?q?=EB=93=9C=20=ED=8F=89=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 --- .gitignore | 1 + API-SERVICE/ApiList/common/commonRegister.py | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 448f0533..8453c31c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ __pycache__/ *.log .vscode .python-* +.coverage \ No newline at end of file diff --git a/API-SERVICE/ApiList/common/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py index c77f41b9..9b209529 100644 --- a/API-SERVICE/ApiList/common/commonRegister.py +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -13,11 +13,12 @@ def make_register_query(register: commonRegister): password_column = config.user_info["password_column"] user_info_table = config.user_info["table"] + # at 221109 by seokwoo-yang, password 평문 필요 요청 + register.data["user_normal"] = register.data[password_column] + register.data[password_column] = config.pwd_context.hash(register.data[password_column]) columns = ", ".join(register.data.keys()) - register.data[password_column] = config.pwd_context.hash( - register.data[password_column]) values = ", ".join(map(convert_data, register.data.values())) - query = f'INSERT INTO {user_info_table} ({columns}) VALUES ({values});' + query = f"INSERT INTO {user_info_table} ({columns}) VALUES ({values});" return query @@ -26,7 +27,7 @@ def api(register: commonRegister) -> Dict: query = make_register_query(register) db = connect_db() - time_zone = 'Asia/Seoul' + time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") db.execute(query) except Exception: From b25a6d3ceb567e5fd0faa8ca938fd93a3125c041 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 11 Nov 2022 10:13:50 +0900 Subject: [PATCH 246/323] =?UTF-8?q?[AIPLATFORM-1078]=20feat:=20config=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=EB=B0=A9=EB=B2=95=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/getElsBizMetaList.py | 2 +- API-SERVICE/ApiList/meta/getPrefixBizMeta.py | 2 +- API-SERVICE/ELKSearch/conf/config.ini | 4 ++-- API-SERVICE/ELKSearch/conf/db_config.ini | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 38cee77e..259bc09b 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -32,7 +32,7 @@ def api(input: InputModel) -> Dict: } data_dict = dict() from_ = input.from_ - 1 - els_config = get_config(config.root_path,"config.ini")["katech"] + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: es = ElasticSearchManager(page=from_, size=input.size, **els_config) diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 1eb4c7b4..09c45a50 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -14,7 +14,7 @@ def api(size: int, keyword: str) -> Dict: """ field = "data_nm" query = {field: keyword} - els_config = get_config(config.root_path,"config.ini")["katech"] + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: es = ElasticSearchManager(**els_config) es.size = size diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 1deec9af..13386bac 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -1,4 +1,4 @@ -[katech] +[commercial] host = 10.10.20.59 port = 39200 index = biz_meta @@ -11,4 +11,4 @@ index = biz_meta [test] host = 192.168.101.44 port = 39200 -index = kt_biz_meta \ No newline at end of file +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 index 4c825b93..6abb6a40 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -14,7 +14,7 @@ password = hello.dp12#$ database = dataportal schema = meta -[katech_db] +[commercial_db] host = 10.10.20.60 port = 5432 user = dpmanager @@ -22,10 +22,10 @@ password = hello.dp12#$ database = dataportal schema = meta -[test] +[test_db] host = 192.168.100.126 port = 25432 user = dpme password = hello.meta12#$ -database = ktportal +database = dataportal schema = meta \ No newline at end of file From 7c76f03bb5e6927cdada79b950761d37f9798237 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 11 Nov 2022 10:32:00 +0900 Subject: [PATCH 247/323] =?UTF-8?q?[AIPLATFORM-1078]=20feat:=20init=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/__init__.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 API-SERVICE/ELKSearch/__init__.py 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 * From 6b76d915936a9481d3b27ba6ed88c1dc67cf9eaf Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 15 Nov 2022 14:50:53 +0900 Subject: [PATCH 248/323] =?UTF-8?q?feat:=20normal=5Fpassword=20update=20?= =?UTF-8?q?=EA=B5=AC=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/ApiList/common/commonPassword.py | 4 ++-- API-SERVICE/conf/common/config.ini | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonPassword.py b/API-SERVICE/ApiList/common/commonPassword.py index f753ad32..d5c5621c 100644 --- a/API-SERVICE/ApiList/common/commonPassword.py +++ b/API-SERVICE/ApiList/common/commonPassword.py @@ -23,8 +23,8 @@ def api(password: commonPassword) -> Dict: time_zone = 'Asia/Seoul' db.execute(f"SET TIMEZONE={convert_data(time_zone)}") db.execute( - f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))} \ - WHERE {config.user_info["id_column"]} = {convert_data(user_id)};') + f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))},' + f' {config.user_info["normal_password"]} = {convert_data(new_password)} WHERE {config.user_info["id_column"]} = {convert_data(user_id)};') except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index d2c9d32e..8cf70689 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -26,6 +26,7 @@ token_data_column = user_id,email,login_type,moblphon,user_nm,user_type,user_rol table = tb_user_info id_column = user_id password_column = user_password +normal_password = user_normal # emailAthnSend, emailAthnCnfm [email_auth] From 097ebb2b05bec30433bc9c646b2a6dacb6cddadf Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 16 Nov 2022 08:58:23 +0900 Subject: [PATCH 249/323] =?UTF-8?q?fix:=20elasticsearch=20config=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/deleteElsBizMeta.py | 5 ++++- API-SERVICE/ApiList/meta/getCategoryNmCount.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py index df65ecab..1e95f664 100644 --- a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py @@ -1,10 +1,13 @@ from Utils.CommonUtil import get_exception_info from ELKSearch.Manager.manager import ElasticSearchManager +from ApiService.ApiServiceConfig import config +from ELKSearch.Utils.database_utils import get_config def api(biz_dataset_id: str): + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: - es = ElasticSearchManager() + es = ElasticSearchManager(**els_config) es.delete("biz_dataset_id", biz_dataset_id) except Exception: diff --git a/API-SERVICE/ApiList/meta/getCategoryNmCount.py b/API-SERVICE/ApiList/meta/getCategoryNmCount.py index c097f4ec..4e01c987 100644 --- a/API-SERVICE/ApiList/meta/getCategoryNmCount.py +++ b/API-SERVICE/ApiList/meta/getCategoryNmCount.py @@ -2,14 +2,17 @@ from ELKSearch.Manager.manager import ElasticSearchManager from ELKSearch.Utils.elasticsearch_utils import make_query from Utils.CommonUtil import get_exception_info +from ELKSearch.Utils.database_utils import get_config +from ApiService.ApiServiceConfig import config def api(nms) -> Dict: data_dict = {} key = "ctgry" + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: ctgry_nm_list = nms.split(",") - es = ElasticSearchManager() + es = ElasticSearchManager(**els_config) for c_id in ctgry_nm_list: cnt_query = make_query("query","match_phrase",{key: c_id}) cnt = es.conn.count(index=es.index, body=cnt_query)["count"] From ce2ab26e2c36302b783b0ee3e2dac271f1591975 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 22 Nov 2022 14:59:32 +0900 Subject: [PATCH 250/323] =?UTF-8?q?[AIPLATFORM-817]=20feat:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=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/getElsBizMetaList.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 259bc09b..73a7ed42 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -1,4 +1,5 @@ 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 @@ -35,6 +36,11 @@ def api(input: InputModel) -> Dict: els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: + if 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, **els_config) es.set_sort(input.sortOption) From cbcc74b373e3e8b505edc4efaa06803bd06cb277 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 22 Nov 2022 15:03:03 +0900 Subject: [PATCH 251/323] =?UTF-8?q?[AIPLATFORM-817]=20feat:=20=EC=B6=94?= =?UTF-8?q?=EC=B2=9C=20=EA=B2=80=EC=83=89=EC=96=B4=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=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/recommend_word.py | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 API-SERVICE/recommend_word.py diff --git a/API-SERVICE/recommend_word.py b/API-SERVICE/recommend_word.py new file mode 100644 index 00000000..88863cee --- /dev/null +++ b/API-SERVICE/recommend_word.py @@ -0,0 +1,51 @@ +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__)))) + + +def main(): + 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 875ea66f9ac8b8a24c292943f965390e51956bb3 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 22 Nov 2022 15:26:16 +0900 Subject: [PATCH 252/323] =?UTF-8?q?[AIPLATFORM-817]=20feat:=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=EB=A7=81=ED=95=A0=20=EB=8B=A8=EC=96=B4=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=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/bad_word.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 API-SERVICE/ELKSearch/conf/bad_word.txt diff --git a/API-SERVICE/ELKSearch/conf/bad_word.txt b/API-SERVICE/ELKSearch/conf/bad_word.txt new file mode 100644 index 00000000..e69de29b From 5a53e998d84e9f71d262257ff1c92f1f13a09680 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 22 Nov 2022 15:46:49 +0900 Subject: [PATCH 253/323] =?UTF-8?q?[AIPLATFORM-817]=20chore:=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A3=BC=EC=84=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/recommend_word.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/API-SERVICE/recommend_word.py b/API-SERVICE/recommend_word.py index 88863cee..26c96478 100644 --- a/API-SERVICE/recommend_word.py +++ b/API-SERVICE/recommend_word.py @@ -9,21 +9,33 @@ 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) From eb4c103fe04047ab6d8e5c95e42b119aeeb5b9d9 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 25 Nov 2022 09:18:39 +0900 Subject: [PATCH 254/323] =?UTF-8?q?[AIPLATFORM-1167]=20feat:=20katech=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EA=B2=80=EC=83=89=20prefix?= =?UTF-8?q?=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/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 0bee99488498c7d21ccd0eff2e20271e1826f8df Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 25 Nov 2022 09:39:42 +0900 Subject: [PATCH 255/323] =?UTF-8?q?feat:=20=EB=B9=84=EC=86=8D=EC=96=B4=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=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 --- API-SERVICE/ELKSearch/conf/bad_word.txt | 1532 +++++++++++++++++++++++ 1 file changed, 1532 insertions(+) diff --git a/API-SERVICE/ELKSearch/conf/bad_word.txt b/API-SERVICE/ELKSearch/conf/bad_word.txt index e69de29b..8ff9da46 100644 --- a/API-SERVICE/ELKSearch/conf/bad_word.txt +++ b/API-SERVICE/ELKSearch/conf/bad_word.txt @@ -0,0 +1,1532 @@ +넌씨눈 +개새끼 +따먹었어 +ㄷㅇㅂ +시펄 +빠구울 +쓰레기 새끼 +된장녀 +지껄이 +브랄 +십팔넘 +개씁년 +썅놈 +병크 +씨블 +졸좋 +새뀌 +찌랄 +애미랄 +니씨브랄 +죽어버려 +개너미 +zaji +줘패 +버지뜨더 +쫀 맛 +창넘 +늬미 +개지랄 +니미기 +쇡끼 +닝기리 +ㅈ.ㄴ +버지물마셔 +자지넣자 +보지자지 +bozi +인간말종 +존잼 +씌벨 +존똑 +조오웃 +개쓰레기 +씨이붕 +샹년 +대갈 +십8 +똥구녁 +me췬 +쳐쑤셔박어 +슈우벌 +씨새발끼 +개후라들놈 +좆만한놈 +호냥년 +18ㅅㅔ키 +뒤졌 +개똥 +로 꺼.져 +띠불 +도랏 +성폭행 +ㅈ같네 +젖같 +족까 +젖까 +이기야 +씹새 +우미쑤셔 +조온만 +씨섹끼 +미핀놈 +한녀 +미튄 +똥 +씨벨 +싸가지없 +시팔년 +왕버지 +빠가니 +ㅈ1랄 +허졉 +족까내 +게에가튼 +샛기 +띠블넘 +누나강간 +씨바알 +개같 +존나아 +노무노무 +미친구멍 +그1켬 +뻐큐 +개샛기 +뼝신 +좋오웃 +씹창 +씨입새에 +허접 +G랄 +촌씨브라리 +개소리 +보지따먹기 +빨치산 +ㅄ +시이붕 +보지녀 +허벌자식 +샊히 +씹탱 +슈1발 +너거애비 +좃넘 +조오지 +씨블년 +새키 +사까시 +걸레년 +애애무 +엠븽신 +좃대가리 +병신세리 +십지랄 +쳐- +애미 +sex해 +ㅎㅃ +시바앙 +빠가새 +내조지 +병신 +십자슥 +공지 +뒤지길 +18세ㅋㅣ +똘아이 +shit +닳은년 +젓떠 +존쎼 +빻은 +눈깔파 +오랄 +졏같 +졸귀 +존나게 +싸물어 +처먹 +벌창 +사까쉬 +십자석 +니뿡 +이새끼 +보라니 +손놈 +뒤져요 +좃까리 +짱개 +후1빨 +ㅅㄲ들 +정액마셔 +에미 +시이풀 +쉬불 +씨뻘 +조개따조? +ㅂ크 +웅앵 +내버지 +십부랄 +로린 +개에걸래 +유우우방것 +새킈 +니미럴 +꼴랑 +버지쑤셔 +쉰내 +보짓물 +쌍눔 +지1뢰 +애무 +씨비 +쓰바 +시밸 +돌앗구만 +쓰래기같 +개쉐뀌 +돈년 +존트 +쓰발 +새끼라 +새1끼 +불알 +니믜 +존귘 +빠구리 +처먹고 +성괴 +친 ㅅㄲ +씨입새 +클리토리스 +친 놈 +느금마 +시방색희 +레1친 +바주카자지 +개쩌 +개.웃 +보전깨 +보지벌리 +쌍놈 +좃만이 +빠라 +미치ㄴ +럼들 +족같내 +존쎄 +ㅅㅐㄲㅣ +십팔새끼 +띠이발 +아오 ㅅㅂ +개같이 +꼴보기 +뒤져야 +꺼져요 +거지같은 +색희 +좇 +지뢀 +새끼 +미친~ +은년 +보지뚫어 +씨댕 +ㅈ리 +뒈져 +조온나 +씹덕 +젓물냄새 +망해라 +성교 +버어어지이 +미: 놈 +삼일한 +ㅈㄴ +똥꾸뇽 +노네들 +가슴주물럭 +개거얼레 +존예 +엿이나 +쎄리 +존내 +좃빠라라 +남미새 +친 년 +뒤질 +귀두 +헐렁보지 +돌앗나 +개독 +좁밥 +난자마셔 +창놈 +꺼지세요 +착짱죽짱 +유방쪼물딱 +달달이 +세키 +보지보지 +유방주물럭 +좃간년 +봉알 +가슴빨아 +보지빨어 +덜은새끼 +십세 +ㅆㅣ바 +미놈 +돈새끼 +시이팔 +딴년 +bitch +씨부렬 +18num +로꺼져 +섬숭이 +보지벌려 +잡것 +젖 같 +호모 +후장꽂아 +닥치세 +시벌 +노무현 +애미보지 +애미자지 +ㅅ1발 +애에미 +보지정액 +염뵹 +닥1 +돌은넘 +ㅆㅣㅂㅏ +설거지론 +쌔리 +엠창 +붕신 +자지구멍 +지뢰 +절라 +좋만 +ㅅ.ㅂ +퐁퐁남 +쎄끼 +시입세에 +쉬버 +내꺼핧아 +극혐 +18놈 +시이펄 +ㄱㅐㅅㅐㄲl +에에무 +허벌보지 +보적보 +시부럴 +상폐녀 +쓉새 +십탱구리 +쉬빡 +후우자앙 +조센징 +쉬이이 +혀로보지핧기 +씹쌔 +지1랄 +버지뚫어 +또라인 +니애뷔 +스벌 +개좆 +쌍년 +젓물 +나쁜새끼 +씹할 +시팔넘 +뒤진다 +한 년 +여자따묵기 +자기핧아 +ㅈ같 +사새끼 +지이랄 +덬 +적까 +개붕알 +개자지 +쉬붕 +시-발 +ㅆ1ㄺ +죵나 +좆년 +개애거얼래 +씨팍 +친노마 +후려 +허덥 +엠-창 +개떡 +가슴핧아 +십셰리 +구씹 +씹자지 +곱창났 +빠네 +디졌 +D쥐고 +씨바 +뚫린입 +조가튼 +걸레보지 +쪽1바리 +병-신 +병딱 +시이불 +따먹자 +ㅌㅓㄹㅐㄱㅣ +보지털 +막간년 +개씨발 +실프 +좃만한것 +십세리 +미친쉐이 +띠이이벌 +또오라아이 +개늠 +니뽕 +쓰레기새 +보지뜨더 +찍찍이 +씨불알 +쌍쌍보지 +젓까 +뻑유 +싑창 +씨밸 +ㅉ질한 +시팔놈 +취좃 +조오온니 +강간 +미친씨부랄 +유방쪼물럭 +새ㄲㅣ +잠지물마셔 +빙신 +걔잡지랄 +좀마니 +미:놈 +괘새끼 +돌은새끼 +조개마셔줘 +암캐년 +괴에가튼? +뚝배기 +색퀴 +좆새끼 +쉬이붕 +허젚 +조개벌려조 +뒷치기 +빠가냐 +운디네 +쪼녜 +자지 +존싫 +쉬박 +병맛 +시새발끼 +쌕스 +쥰트 +조개핧아줘? +씹미랄 +후라덜 +조까 +시탱 +엠빙신 +어미강간 +시빡 +꼴값 +십탱굴이 +슈ㅣ발 +ㅆㅂ +친놈 +졸웃 +좆만아 +십새 +걔섀 +호로자 +씨버럼 +어미쑤시자 +쒸8 +18ㅅㅔㅋㅣ +젓밥 +호로자슥 +좃물 +여어엄 +버따리자지 +늬믜 +펨코 +촌씨브랭이 +이따위 +느그매 +머리텅 +d쥐고 +보지털뽑아 +세엑스 +젖같은 +게지랄놈 +새1키 +뻨큐 +삐걱 +🚬 +개놈 +왕털보지 +썌끼 +입 털 +쿰.척 +시발새끼 +색끼 +년놈 +영자 +늑음 +미시친발 +개걸레 +가슴쪼물딱 +등신 +써글년 +씨뎅 +맛이간년 +쌍넘 +씨입세에 +애에비 +좃도 +버어지 +개넷 +시입세 +좃까 +개젓가튼넘 +미친쇄리 +주글년 +조개보지 +죽여불고 +개후라새끼 +죶 +씹물 +개간 +씹쌔끼 +항문쑤셔 +조개쑤셔줘 +쓰파 +섹쓰 +막대쑤셔줘? +씨벌년 +개 새끼 +ㅈㅏ위 +띠벌 +쉬밸년 +보지머리박기 +에에미 +존ㄴ나 +퐁퐁녀 +또-라-이 +죤내 +정신나갓 +시이벌 +허버리년 +드응신 +빠아구우리 +쉬팔 +쉬이팔 +jonna +게이 +시불 +버지벌료 +노알라 +상년 +좆나 +잡년 +따아알따아리 +슈벌 +뇌1텅 +새.끼 +그켬 +졸잼 +맛간년 +보슬아치 +개아기 +보지구녕 +거지같 +빠간가 +트랜스젠더 +대에가리 +글러먹 +첫빠 +빙신쉐이 +게젓 +쓰1레기 +씝창 +시팔 +좆빨아 +닥-쳐 +듣보 +떠라이 +me친 +씨부럴 +ㅅ1ㄲ +18세키 +시팔새끼 +존니 +십부럴 +잠지뚫어 +ㄱㅅㄲ +흐젚 +버어지이 +같은 새끼 +씹선 +믜친 +좆까 +씨박색히 +ㅆㅂㄹㅁ +스ㄹㅜ +애미잡년 +미친개 +졀리 +싸가지 없 +찌질 +병1신 +썅늠 +항문 +시방쉑희 +개떵 +jaji +존낙 +난자먹어 +개애걸래 +흐접 +좆같은새끼 +존버 +미치인 +보지핧아줄까 +외1퀴 +슨상님 +보징어 +공지사항 +띠블 +자지빨아 +허벌자지 +쥰나 +보지쥐어짜 +레친 +미친놈 +에무 +자지털 +버어어지 +수셔 +먹.끔 +에라이 퉤 +레기같 +유두빨어 +아아가리 +개씨블 +다꺼져 +쳐받는 +따알따리 +허어벌 +이그니스 +유우까압 +쉬이풀 +대애가리 +꼬추 +자지정개 +개작두년 +쫂 +조오우까튼 +미틴놈 +개씨발넘 +개씁자지 +도라이 +D지고 +버지따먹기 +쉑갸 +자지핧아줘 +쪽본 +조-ㅈ +쿰척 +조오까튼 +18새끼 +미티넘 +봊 +씹새끼 +개에거얼래 +젼나 +pennis +쳐발라 +보지핧아줘 +십창녀 +여엄병 +좆까라 +좃마무리 +18ㅅㅐㄲㅣ +스.루 +옘병 +페니스 +미틴년 +엠플레버 +미틴넘 +자박꼼 +시미발친 +호로잡 +막대쑤셔줘 +자지꽂아 +띠발뇬 +뻑큐 +쉽세 +주둥이 +에라이퉷 +jot같 +여미새 +d져 +고환 +내꺼빨아 +버짓물 +개부달 +걔잡년 +미친색 +창녀버지 +좆도 +졸귘 +지랄 +병닥 +젖탱이 +ㅆ1ㅂ +좃물냄새 +사까시이 +씨빠빠 +까내리 +정액먹어 +조개넓은년 +엠생 +버지벌려 +섹스하자 +병신셰리 +띠부우울 +씨박색희 +자지뜨더 +젓냄새 +씨이벌 +음경 +개후라년 +뇌 텅 +조옴마니 +염병 +앙기모띠 +개색뀌 +씨팍세끼 +어미따먹자 +기자레기 +자압것 +씹탱이 +씨발 +찌질이 +젖밥 +눈나 +젼낰 +십쉐끼 +젓마무리 +개에가튼 +엿먹어라 +그나물에 +미쳤니 +ㅆㅣ발 +개자식 +ㅆㅣ댕 +찎찎이 +씹자슥 +소음순 +지롤 +시바알 +씨입 +ㅁ친 +개지랄놈 +쉬펄 +씨뷰렬 +니애비 +내미럴 +ㅁㅣ췬 +penis +김치녀 +ㅅㅡ루 +친년 +ㅂㅊ +닥2 +빠큐 +보지에자지너 +씨걸 +왕털잠지 +정자핧아 +호로 +돌았네 +띠벨 +졸맛 +띠이벌 +조낸 +ㅆㅂㄻ +잠짓물마셔 +쌔끼 +개저가튼 +졸멋 +씨벌쉐이 +씨퐁뇬 +개념빠가 +띠빌 +빠굴 +따먹는다 +맘충 +젓만이 +서버 +쉬방 +씌댕 +돌았구만 +시벌탱 +왕털버지 +롬들 +파친 +븅신 +및힌 +그지 같 +존잘 +보지틀래기 +씨빨 +씹년 +개작두넘 +개나대 +뽀지 +쥰니 +보지물 +조개속물 +조개핧아줘 +애미좃물 +드으응신 +부왘 +내자지 +펑글 +유방핧어 +졀라 +잠지털 +후장뚫어 +좀쓰레기 +야dong +섀키 +앰창 +걸-레 +fuck +흐졉 +가슴쪼물락 +게세끼 +쓰바새끼 +ㅆㅣ8 +취ㅈ +씨퐁자지 +곱창나 +자지구녕 +개새기 +ㅆㄺ +새꺄 +씹세 +졸예 +꼭지 +조온니 +디져라 +띠이버얼 +씨븡 +큰보지 +개잡년 +쓰벌 +망돌 +그지같 +버지냄새 +젓가튼 +18년 +지이라알 +왜저럼 +쉐끼 +존1 +꼴깝 +가슴조물락 +개가튼뇬 +개저엇 +양아치 +조오또 +먹.금 +개넘 +돌으년 +외퀴 +니할애비 +빠가씹새 +괴가튼 +씨팔 +존나 +명존 +이 새끼 +먹끔 +엠뷩신 +조옷만 +쓰댕 +개가튼 +호로자식 +ㅇㅍㅊㅌ +따아알따리 +보지찌져 +덜떨어 +십녀 +씨이팔 +뒷잇치기 +d지고 +띠이바알 +계새끼 +ㅅ.ㄲ +잡놈 +더어엉신 +젗같 +씹보지 +개부랄 +조온 +버지털 +자지쓰레기 +yadong +꼴갑 +wlfkf +뚫린 입 +씹지랄 +조온마니 +뇌텅 +개고치 +더럽네 +시발년 +nflavor +왕자지 +띠브울 +좃가튼뇬 +개라슥 +염병할 +뒤치기 +여자ㄸㅏ묵기 +존 나 +니아비 +씹브랄 +기레기 +18nom +따먹을까 +구1씹 +오크 +배빵 +김대중 +버지썰어 +조우까튼 +개같은년 +색갸 +정자마셔 +화낭년 +발놈 +쥰내 +시박색히 +가슴만져 +뒤져라 +니아범 +보지핧아 +자지핧아 +닝기미 +시발 +조개벌려조? +개가튼년 +쥐랄 +죠낸 +세끼 +시이발 +졏 같 +쉬팍 +쉬이발 +운영자 +소추 +보지벌리자 +조개마셔줘? +mi친 +쉬이벌 +개보지년 +쪽바리 +강간한다 +dogbaby +미쳣네 +ㅂㅅ +죽여 버리고 +느금 +헤으응 +유방만져 +띠팔 +띠바 +요년 +염-병 +보지핧어 +촌씨브랑이 +굿보지 +도른 +미칭럼 +시1발 +존귀 +씨퐁 +유두핧어 +흉자 +따먹어야지 +대-가-리 +쪼다 +좃보지 +씌발 +뻐규 +좃냄새 +노친네 +씨바라 +미쳤나 +껒여 +미칀 +씹쉐뀌 +허벌년 +믜칀 +쇅끼 +쉬이이이 +씨1발 +시바시바 +쌍보지 +돌앗네 +동생강간 +쉬빨 +pussy +개마이 +개셈 +개년 +좀물 +머리 텅 +맛없는년 +동성애자 +십탱 +좆 +색키 +새77ㅣ +씹탱굴이 +보지구멍 +뷰웅신 +쒸발 +정액발사 +쎅쓰 +보지털어 +유방핧아 +정액짜 +가슴빨어 +개젓 +씨벌 +ㅅ발 +ㅅ루 +조깟 +쉽알넘 +짬지 +텐덕 +십팔 +씨8 +니년 +개잡지랄 +보지 +미1친 +사까아시 +씨팍새끼 +닥전 +보쥐 +젓대가리 +쪼다새끼 +ㅂㄹ +세엑쓰 +씨이발 +씨펄 +게부럴 +병신씨발 +보픈카 +씹팔넘 +미친구녕 +쯰질 +허좁 +미-친 +친구년 +쬰잘 +쬲 +띠부울 +씨븡새끼 +뼈큐 +닥쳐라 +좆만한새끼 +뇌-텅텅 +좃빠구리 +후라덜넘 +보지찢어 +씨댕이 +썅 +십세이 +미치누 +레기네 +존좋 +개걸래 +벌창같은년 +쪼까튼 +별창 +쒸댕 +조개쑤셔줘? +좆물 +찌1질 +종나 +거시기 +좋만한것 +빻았 +섹끼 +유방 +jazi +지-랄 +먹1금 +싹스 +자지빨어 +시바 +눈새 +씨발년 +지럴 +줬같은 +친ㅅㄲ +씨ㅂㅏ +노옴 +싸개 +좆먹어 +sibal +따먹어 +니미 +가슴핧어 +좆밥 +조오올라 +씹창녀 +젓같내 +조녜 +쉑쓰 +씌팔 +ㅅㄲ네 +로 꺼져 +쓰브랄쉽세 +mi쳤 +졸싫 +씹못 +쓰벨 +등-신 +펨베 +짱깨 +쌍-판 +🖕 +뇌피셜 +존마니 +좃만아 +쎄엑스 +나빼썅 +와꾸 +십떼끼 +게새끼 +닥후 +시미친발 +ㅆㄹㄱ +시박쉑히 +좃깟네 +씨발병신 +찝째끼 +시파 +핑끄 +자지핧어 +개보지 +ya동 +호로짜식 +띠이이발 +씨불 +버짓물마셔 +뽄새 +ㅁㅊ +꺼.지 +디지고 +빠굴이 +슈발 +씹 +대가리 +엿같 +개-새-끼 +boji +게늠 +졌같은 +좆같은놈 +개후라 +후장뚫어18세키 +띠펄 +십쉐 +엔플레버 +좃빠네 +버지빨어 +조오가튼 +색히 +쉬탱 +머갈 +미친ㅋ +존.나 +쌕쓰 +개씨발자슥 +붕알 +한년 +凸 +부랄 +섹스해 +에애무 +쳐먹 +닥쳐 +누보햄 +점물 +씨팍넘 +조개따조 +뒤지겠 +좃털 +게저엇 +쓰루 +뽄세 +ㅅㅍ +죽여뿌고 +ㅅ끼 +ㅉ +씹버지 +따먹었지 +게자식 +골빈 +써글 +핑프 +씨뱅가리 +쉬발 +또라이 +좃만한쉐이 +쎅스 +ㅅㅋ +쳐마 +미친넘 +잠지 +새끼야 +똥구뇽 +ㅂㅁㄱ +쉬이바 +니애미 +후1려 +아닥 +시키가 +유깝 +에에비 +대음순 +찌질한 +븅쉰 +같은새끼 +사까아시이 +보짓물마셔 +김여사 +조또 +항문수셔 +젓나 +시친발미 +씨발롬 +노무 +ㅎㅌㅊ +씌뎅 +씹뻐럴 +쒸펄 +정액핧아 +앰 +슈레기 +자지빨아줘 +딸달이 +sex +시팍 +버지구멍 +fuckyou +ㅇㅒ쁜 +이년 +빠아가 +먹금 +씹부랄 +존1나 +미친 새 +유우방 +화냥년 +걸래년 +빡새끼 +아오 시바 +sex하자 +쉬방새 +씨빡 +쪽발 +딸딸이 +에비 +미친 +떠어라이 +성교해 +저년 +개지랄넘 +죠온나 +여자ㄸㅏ먹기 +호좁 +씹빵구 +방점뱅 +존맛 +처먹을 +시발놈 +빙띤 +자지쑤셔 +지랼 +유방빨아 +좁빠라라 +왕잠지 +섹스 +씨파넘 +띠발 +씨볼탱 +짱꼴라 +자지박어 +창녀 +니아범? +보지빨아 +싸가지 +주길년 +유발조물락 +tlqkf +젓가튼쉐이 +창년벼지 +미틴것 +시팍새끼 +시바라지 +ㅈㄹ +버지핧아 +미췬 +짱골라 +미친년 +애자 +후장 +존웃 +뷰웅시인 +저엊 +쉬벌 +개저씨 +달딸이 +샊기 +쫀귀 +젓같은 +쫀맛 +ㅆㅣ +성교하자 +골1빈 +벵신 +씹팔 +빠가야로 +글러 먹 +십창 +씨이불 +눈깔 파 +니기미 +뽕알 +후.려 +시빨 +ㅆㅣ팍넘 +십버지 +창년 +오르가즘 +붜지 +빠아아라 +쉬이이이이 +애미씨뱅 +미친새 +저엇 +ㄱㅐㅈㅏ +미틴 +씨방세 +엑윽 +썅년 +개련 +짱께 +색스 +육갑 +걸레같은년 +떠어라아이 +여자따먹기 +후우장 +창남 +시댕이 +엄창 +18ㅅㅐ끼 +미친새끼 +정신나갔 +씨부랄 +샤발 +죽여버리고 +씨벌탱 +쉬이펄 +시뷰렬 +좇같 +시볼탱 +은새끼 +쉬이불 +나쁜 새끼 +쉽쌔 +개새 +닌기미 +씨입세 +미친쇠리 +돌았나 +런년 +즤랄 +아가리 +내미랄 +빠아구리 +씨가랭넘 +도랐 +씨가랭년 +자위 +입털 +쫓같 +멜리스 +존멋 +보지박어 +좃부랄 +ㅅㅌㅊ +쌔엑스 +시바류 +허벌 +쉬이방 +썅뇬 +작은보지 +터래기터래기 +뒤이치기 +자지뜯어 +뒤져야지 +애에무 +왕털자지 +쒸팔 +디질 +조올라 +정자먹어 +섹히 +보지물마셔 +버지빨아 +시뷰럴 +느그 +시부울 +쓰뎅 +me틴 +개불랄 +뇬 +개거얼래 +죤나 +풀발 +씨가랭놈 +쉬풀 +씨붕 +zazi +씹치 +마스터 +좃또 +에라이 퉷 +난자핧아 +ㅅ1ㅂ +호졉 +빠가십새 +따먹기 +니미랄 +뷩딱 +미친눔 +쉬이빨 +퍄퍄 +꽃휴 +쳐먹고 +뒤지고싶 +걸레핀년 +또오라이 +쫀1 +쑤셔 +씌8 +지 랄 +개씁블 +씨박쉑히 +좃 +ㅆㅣ뎅 +뷰우웅신 +아오시바 +개세 +정병 +씨브럴 +웅엥 +개섹 +보지에자지껴 +자지짤라 +캐럿닷컴 +골 빈 +디-질 +더러운년 +꼬라지 +더엉신 +띠풀 +병1크 +mi틴 +씨퐁보지 +씹귀 +둄마 +뇨온 +버지구녕 +좆만한년 +시방새 +씨퐁넘 +호로새끼 +유두 +조오오조 +세꺄 +깨쌔끼 +씹뽀지 +백보지 +허벌레 +호루자슥 +공알 +씨뷰럴 +새퀴 +보지벌료 +아오ㅅㅂ +내씨발 +극1혐 +애비 +씹자석 +시부렬 +시녀 +유우깝 +막대핧아줘 +꼴뵈기 +쓰렉 +개색휘 +후빨 +크리토리스 +이프리트 +십때끼 +좆털 +내잠지 +레기다 +개쓰래기 +게가튼 +시붕 +ㅅㅂ +야동 +씨방새 +뒤져버 +에라이퉤 +졸라 +주둥아리 +미띤 \ No newline at end of file From bde9b20791a85c7035b700a72f4b5b4a19dcf03f Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 25 Nov 2022 10:38:19 +0900 Subject: [PATCH 256/323] =?UTF-8?q?fix:=20=EC=9B=90=EA=B2=A9=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=8B=9C=EC=A0=80=EC=BD=9C=20=EC=8B=9C=20=ED=8C=8C?= =?UTF-8?q?=EB=9D=BC=EB=AF=B8=ED=84=B0=EC=9D=98=20=EB=9D=84=EC=96=B4?= =?UTF-8?q?=EC=93=B0=EA=B8=B0=20=ED=97=88=EC=9A=A9=ED=86=A0=EB=A1=9D=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/Utils/RouteUtil.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index c15f122c..e80b2c2a 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -15,8 +15,7 @@ def make_url(server_name: str, url_path: str): netloc = server_info["ip_adr"] else: netloc = server_info["domn_nm"] - url = ParseResult( - scheme="http", netloc=netloc, path=url_path, params="", query="", fragment="") + url = ParseResult(scheme="http", netloc=netloc, path=url_path, params="", query="", fragment="") logger.info(f"Message Passing Url : {url.geturl()}") return url.geturl() return None @@ -26,8 +25,7 @@ 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) + response.set_cookie(key=config.secret_info["cookie_name"], value=access_token) return response @@ -60,26 +58,29 @@ 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."} return result, access_token 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 @@ -90,10 +91,9 @@ async def call_remote_func(api_info, api_params, input_params) -> Dict: data = input_params[api_param["nm"]] if not data: data = api_param["deflt_val"] - command_input += f' --{api_param["nm"]} {data}' + 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}' From c515442447e39a26deb3fb72a9da5c44e2dbdff8 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 25 Nov 2022 10:56:39 +0900 Subject: [PATCH 257/323] =?UTF-8?q?feat:=20=EA=B2=80=EC=83=89=EC=96=B4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=A1=B0=EA=B1=B4=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/getElsBizMetaList.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 73a7ed42..bc81d370 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -17,12 +17,20 @@ def extra_filter(option_list): index = item.field.index(col) del item.field[index] item.keywords = [v.replace(" ","") for v in item.keywords] - if item.field in ["data_nm", "data_desc"]: - item.field = item.field + ".korean_analyzer" + + tmp = [] + for field in item.field: + if item.field in ["data_nm", "data_desc"]: + col = field + ".korean_analyzer" + else: + col = field + tmp.append(col) + item.field = tmp + return option_list -def api(input: InputModel) -> Dict: +def api(input: InputModel, chk: int = 0) -> Dict: data_srttn = { # search_keyword: (result_key, result_data) "보유데이터": "hasCount", @@ -36,7 +44,7 @@ def api(input: InputModel) -> Dict: els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: - if len(input.searchOption): + if 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") From ae319d8fbc90dac94e463b4598b29d5b9376d8b5 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Nov 2022 14:07:42 +0900 Subject: [PATCH 258/323] =?UTF-8?q?[AIPLATFORM-817]=20feat:=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80,=20=EC=8B=9C=EC=8A=A4=ED=85=9C=EC=9D=98=20API=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=EC=9D=84=20=EA=B5=AC=EB=B6=84=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EC=9C=84=ED=95=9C=20=EB=B3=80=EC=88=98=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/getElsBizMetaList.py | 4 ++-- API-SERVICE/ELKSearch/Utils/model.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index bc81d370..77e8510d 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -30,7 +30,7 @@ def extra_filter(option_list): return option_list -def api(input: InputModel, chk: int = 0) -> Dict: +def api(input: InputModel) -> Dict: data_srttn = { # search_keyword: (result_key, result_data) "보유데이터": "hasCount", @@ -44,7 +44,7 @@ def api(input: InputModel, chk: int = 0) -> Dict: els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: - if chk and len(input.searchOption): + 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") diff --git a/API-SERVICE/ELKSearch/Utils/model.py b/API-SERVICE/ELKSearch/Utils/model.py index a0712f59..9a79ced4 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 index: str = "biz_meta" from_: int = Field(1, alias="from") size: int = 10 From 4213ae8b16b726f342ead7d943b1772c2f83abc4 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Nov 2022 14:16:03 +0900 Subject: [PATCH 259/323] =?UTF-8?q?[AIPLATFORM-817]=20feat:=20prefix=20met?= =?UTF-8?q?hod=20get=20->=20post=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/getPrefixBizMeta.py | 12 +++++++++--- API-SERVICE/conf/meta/api_config.ini | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 09c45a50..725c5499 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -1,11 +1,17 @@ from typing import Dict +from pydantic import BaseModel from ELKSearch.Manager.manager import ElasticSearchManager from Utils.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 검색과 유사함 @@ -13,11 +19,11 @@ def api(size: int, keyword: str) -> Dict: :return: """ field = "data_nm" - query = {field: keyword} + query = {field: input.keyword} els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: es = ElasticSearchManager(**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 abd2a157..2cbd6805 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -39,7 +39,7 @@ url = /portal/api/meta/getCategoryNmCount sub_dir = meta [getPrefixBizMeta] -method = GET +method = POST url = /portal/api/meta/getPrefixBizMeta sub_dir = meta From f87927c35312048cb1d6256801108cad10bd28fc Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Nov 2022 16:57:39 +0900 Subject: [PATCH 260/323] =?UTF-8?q?[AIPLATFORM-1203]=20feat:=20elasticsear?= =?UTF-8?q?ch=20document=20=ED=95=AD=EB=AA=A9=20delete,=20update=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/ApiList/meta/deleteElsBizMeta.py | 3 ++- API-SERVICE/ApiList/meta/updateElsBizMeta.py | 26 ++++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 5 ++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/meta/updateElsBizMeta.py diff --git a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py index 1e95f664..90dac4be 100644 --- a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py @@ -1,10 +1,11 @@ +from typing import Dict from Utils.CommonUtil import get_exception_info from ELKSearch.Manager.manager import ElasticSearchManager from ApiService.ApiServiceConfig import config from ELKSearch.Utils.database_utils import get_config -def api(biz_dataset_id: str): +def api(biz_dataset_id) -> Dict: els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: es = ElasticSearchManager(**els_config) diff --git a/API-SERVICE/ApiList/meta/updateElsBizMeta.py b/API-SERVICE/ApiList/meta/updateElsBizMeta.py new file mode 100644 index 00000000..9f96589a --- /dev/null +++ b/API-SERVICE/ApiList/meta/updateElsBizMeta.py @@ -0,0 +1,26 @@ +import re +from typing import Dict +from Utils.CommonUtil import get_exception_info, connect_db, convert_data +from ELKSearch.Manager.manager import ElasticSearchManager +from ELKSearch.Utils.database_utils import get_config +from ELKSearch.Utils.elasticsearch_utils import data_process +from ApiService.ApiServiceConfig import config + + +def api(biz_dataset_id: str) -> Dict: + els_dict = dict() + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + query = f"SELECT * FROM v_biz_meta_info WHERE biz_dataset_id = {convert_data(biz_dataset_id)}" + try: + db = connect_db() + es = ElasticSearchManager(**els_config) + biz_data = db.select(query)[0][0] + + els_dict = data_process(biz_data) + es.insert(els_dict,biz_dataset_id) + 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 2cbd6805..5042e393 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -46,4 +46,9 @@ sub_dir = meta [metaInsert] method = GET url = /portal/api/sitemng/metaInsert +sub_dir = meta + +[updateElsBizMeta] +method = POST +url = /portal/api/meta/updateElsBizMeta sub_dir = meta \ No newline at end of file From b8511d4c4fd5309988993915e22dad4a0695ce53 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Nov 2022 16:58:49 +0900 Subject: [PATCH 261/323] =?UTF-8?q?[AIPLATFORM-1203]=20feat:=20biz=5Fmeta?= =?UTF-8?q?=20=EA=B0=80=EA=B3=B5=20=EC=BD=94=EB=93=9C=20=ED=95=A8=EC=88=98?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ELKSearch/Utils/elasticsearch_utils.py | 16 +++++++++++++++- API-SERVICE/els_update.py | 11 ++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index 724ebc0d..dc80b289 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -1,3 +1,4 @@ +import re from typing import Dict, Any @@ -42,4 +43,17 @@ def base_search_query(action: str, sub_action: str, item_list: list) -> Dict: item_dict[sub_action].append(query) else: continue - return item_dict \ No newline at end of file + return item_dict + + +def data_process(data): + # D-Ocean Project Function + els_dict = dict() + data["re_ctgry"] = re.sub("[ ]","",str(data["ctgry"])) + data["re_data_shap"] = re.sub("[ ]","",str(data["data_shap"])) + data["re_data_prv_desk"] = re.sub("[ ]","",str(data["data_prv_desk"])) + + els_dict["_id"] = data["biz_dataset_id"] + els_dict["_source"] = data + els_dict["_source"]["biz_dataset_id"] = data["biz_dataset_id"] + return els_dict \ No newline at end of file diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index a479112f..262e9029 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -4,6 +4,7 @@ from datetime import datetime from elasticsearch import helpers from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, config +from ELKSearch.Utils.elasticsearch_utils import data_process root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) prepare_config(root_path) @@ -26,15 +27,7 @@ def main(): try: for meta_wrap in meta_wrap_list: - els_dict = dict() - - meta_wrap["re_ctgry"] = re.sub("[ ]","",str(meta_wrap["ctgry"])) - meta_wrap["re_data_shap"] = re.sub("[ ]","",str(meta_wrap["data_shap"])) - meta_wrap["re_data_prv_desk"] = re.sub("[ ]","",str(meta_wrap["data_prv_desk"])) - - els_dict["_id"] = meta_wrap["biz_dataset_id"] - els_dict["_source"] = meta_wrap - els_dict["_source"]["biz_dataset_id"] = meta_wrap["biz_dataset_id"] + els_dict = data_process(meta_wrap) bulk_meta_item.append(els_dict) helpers.bulk(es.conn, bulk_meta_item, index=es.index) except Exception as e: From a74dff1e57d60b3cba171a87ba6d15790d6c9f24 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Nov 2022 17:12:16 +0900 Subject: [PATCH 262/323] =?UTF-8?q?[AIPLATFORM-1206]=20feat:=20data=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=EC=8B=9C=20status=EA=B0=80?= =?UTF-8?q?=20C=EC=9D=B8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A7=8C=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 262e9029..d0c8c993 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -19,8 +19,9 @@ def main(): db_query = f"SELECT * FROM v_biz_meta_info " 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}'))" \ + "AND status = 'C'" db_query = db_query + condition meta_wrap_list = select(db,db_query)[0] From 9c6a32bd4653943a69c73054df17e7f7eeb5757b Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Dec 2022 09:22:38 +0900 Subject: [PATCH 263/323] =?UTF-8?q?[AIPLATFORM-1206]=20feat:=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20=EC=88=9C=EC=84=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/els_update.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index d0c8c993..9aae71bd 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -16,12 +16,11 @@ def main(): es = config.es db = connect_db() - db_query = f"SELECT * FROM v_biz_meta_info " + db_query = f"SELECT * FROM v_biz_meta_info WHERE status = 'C'" if config.check == "True": today = datetime.today().date() - condition = f"WHERE (DATE(amd_date) >= DATE('{today}')" \ - f"OR DATE(reg_date) >= DATE('{today}'))" \ - "AND status = 'C'" + condition = f"AND (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] From d02eae9e1d8e474ea60c344bc7f720f0dbd2b5ba Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 1 Dec 2022 16:10:06 +0900 Subject: [PATCH 264/323] =?UTF-8?q?[AIPLATFORM-1206]=20chore:=20status=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=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/els_update.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index 9aae71bd..e9b95cbb 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -16,7 +16,7 @@ def main(): es = config.es db = connect_db() - db_query = f"SELECT * FROM v_biz_meta_info WHERE status = 'C'" + db_query = f"SELECT * FROM v_biz_meta_info WHERE status = 'D'" if config.check == "True": today = datetime.today().date() condition = f"AND (DATE(amd_date) >= DATE('{today}')" \ From b5db39c2938ed3ff8f5c21c794095115c239ec58 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 2 Dec 2022 11:10:00 +0900 Subject: [PATCH 265/323] =?UTF-8?q?[AIPLATFORM-1203]=20feat:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=99=84=EC=84=B1=20els=20config=20=EB=B3=80=EC=88=98?= =?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/getPrefixBizMeta.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 725c5499..a50edf2b 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -1,4 +1,4 @@ -from typing import Dict +from typing import Dict, Optional from pydantic import BaseModel from ELKSearch.Manager.manager import ElasticSearchManager from Utils.CommonUtil import get_exception_info @@ -9,6 +9,8 @@ class Prefix(BaseModel): size: int keyword: str + index: Optional[str] = "" + field: Optional[str] = "" def api(input:Prefix) -> Dict: @@ -18,13 +20,17 @@ def api(input:Prefix) -> Dict: :param keyword: type dict, ex) {"data_name" : "테"} :return: """ - field = "data_nm" - query = {field: input.keyword} + if input.field == "": + input.field = "data_nm" + query = {input.field: input.keyword} els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: + if input.index != "": + els_config["index"] = input.index es = ElasticSearchManager(**els_config) + es.size = input.size - prefix_data = es.prefix(query,[field]) + prefix_data = es.prefix(query,[input.field]) except Exception: except_name = get_exception_info() From 1f924a1de1640c90724b7adfe43657e25b62bd1f Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Fri, 2 Dec 2022 13:51:28 +0900 Subject: [PATCH 266/323] =?UTF-8?q?style:=20black=20=ED=8F=AC=EB=A7=B7?= =?UTF-8?q?=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-ROUTER/ApiRoute/ApiRoute.py | 59 ++++++---- API-ROUTER/ConnectManager/PostgresManager.py | 9 +- API-ROUTER/Utils/CommonUtil.py | 101 +++++++++++------- API-ROUTER/Utils/RouteUtil.py | 9 +- API-ROUTER/server.py | 15 ++- API-SERVICE/ApiList/common/commonExecute.py | 11 +- API-SERVICE/ApiList/common/commonLogin.py | 18 +++- API-SERVICE/ApiList/common/commonLogout.py | 4 +- API-SERVICE/ApiList/common/commonPassword.py | 12 ++- API-SERVICE/ApiList/common/commonRegister.py | 4 +- API-SERVICE/ApiList/common/commonSelect.py | 32 +++--- API-SERVICE/ApiList/common/commonToken.py | 19 ++-- API-SERVICE/ApiList/common/commonUserInfo.py | 10 +- API-SERVICE/ApiList/common/emailAthnCnfm.py | 11 +- API-SERVICE/ApiList/common/emailAthnPass.py | 8 +- API-SERVICE/ApiList/common/emailAthnSend.py | 19 ++-- API-SERVICE/ApiList/meta/addChildCategory.py | 4 +- API-SERVICE/ApiList/meta/deleteElsBizMeta.py | 3 +- API-SERVICE/ApiList/meta/getCategoryList.py | 2 +- .../ApiList/meta/getCategoryNmCount.py | 6 +- API-SERVICE/ApiList/meta/getElsBizMetaList.py | 29 ++--- API-SERVICE/ApiList/meta/getPrefixBizMeta.py | 8 +- API-SERVICE/ApiList/meta/metaInsert.py | 12 +-- API-SERVICE/ApiList/meta/updateCategory.py | 4 +- API-SERVICE/ApiList/sitemng/getCodeInfo.py | 15 ++- API-SERVICE/ApiList/sitemng/getCodeList.py | 17 +-- API-SERVICE/ApiService/ApiService.py | 17 +-- API-SERVICE/ConnectManager/PostgresManager.py | 11 +- API-SERVICE/ELKSearch/Manager/__init__.py | 2 +- API-SERVICE/ELKSearch/Manager/manager.py | 31 +++--- API-SERVICE/ELKSearch/Utils/__init__.py | 2 +- API-SERVICE/ELKSearch/Utils/database_utils.py | 29 ++--- .../ELKSearch/Utils/elasticsearch_utils.py | 11 +- API-SERVICE/Utils/CommonUtil.py | 73 ++++++++----- API-SERVICE/els_update.py | 16 +-- API-SERVICE/recommend_word.py | 39 +++++-- API-SERVICE/server.py | 13 ++- 37 files changed, 428 insertions(+), 257 deletions(-) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 87ee9292..84fe5f32 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -3,8 +3,18 @@ import importlib.util from fastapi import APIRouter from ApiRoute.ApiRouteConfig import config -from Utils.CommonUtil import connect_db, save_file_for_reload, get_exception_info, delete_headers -from Utils.RouteUtil import bypass_msg, call_remote_func, get_api_info, make_route_response +from Utils.CommonUtil import ( + connect_db, + save_file_for_reload, + get_exception_info, + delete_headers, +) +from Utils.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 @@ -41,28 +51,37 @@ def __init__(self) -> None: def set_route(self) -> None: 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 tb_api_info;') - config.api_params, _ = db.select('SELECT * FROM tb_api_params;') - config.api_server_info, _ = db.select( - 'SELECT * FROM tb_api_server_info') + config.api_info, _ = db.select("SELECT * FROM tb_api_info;") + config.api_params, _ = db.select("SELECT * FROM tb_api_params;") + config.api_server_info, _ = db.select("SELECT * FROM tb_api_server_info") for api in config.api_info: method = str(api["meth"]).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["ctgry"]})'], + ) for api_name, conf_api_info in config.api_config.items(): - module_path = f'{config.root_path}/ApiList/{conf_api_info["sub_dir"]}/{api_name}.py' + module_path = ( + f'{config.root_path}/ApiList/{conf_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'{conf_api_info["url_prefix"]}/{conf_api_info["sub_dir"]}/{api_name}', - module.api, methods=[conf_api_info["method"]], tags=["service"]) + self.router.add_api_route( + f'{conf_api_info["url_prefix"]}/{conf_api_info["sub_dir"]}/{api_name}', + module.api, + methods=[conf_api_info["method"]], + tags=["service"], + ) def reload_api(self): logger.info("Reload API Info") @@ -75,8 +94,9 @@ async def route_api(self, request: Request) -> Dict: 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"] + ) try: api_info, api_params = get_api_info(route_url) if method == "POST": @@ -84,11 +104,14 @@ 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/ConnectManager/PostgresManager.py b/API-ROUTER/ConnectManager/PostgresManager.py index a56b6d6e..514a6b25 100644 --- a/API-ROUTER/ConnectManager/PostgresManager.py +++ b/API-ROUTER/ConnectManager/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/Utils/CommonUtil.py b/API-ROUTER/Utils/CommonUtil.py index 50fa4bbd..94309475 100644 --- a/API-ROUTER/Utils/CommonUtil.py +++ b/API-ROUTER/Utils/CommonUtil.py @@ -10,94 +10,119 @@ import sys import traceback + 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) + 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() + def prepare_config() -> None: - 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=f'{args.db_type}_db' - config.server_host=args.host - config.server_port=args.port - config.db_info=api_router_cfg[config.db_type] + 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 = 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"] + 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 + 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=[] + +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, - "body": data, "header": header_list} + 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) 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 - \ No newline at end of file diff --git a/API-ROUTER/Utils/RouteUtil.py b/API-ROUTER/Utils/RouteUtil.py index e80b2c2a..8abf2e0e 100644 --- a/API-ROUTER/Utils/RouteUtil.py +++ b/API-ROUTER/Utils/RouteUtil.py @@ -15,7 +15,14 @@ def make_url(server_name: str, url_path: str): netloc = server_info["ip_adr"] else: netloc = server_info["domn_nm"] - url = ParseResult(scheme="http", netloc=netloc, path=url_path, params="", query="", fragment="") + url = ParseResult( + scheme="http", + netloc=netloc, + path=url_path, + params="", + query="", + fragment="", + ) logger.info(f"Message Passing Url : {url.geturl()}") return url.geturl() return None diff --git a/API-ROUTER/server.py b/API-ROUTER/server.py index ae726867..acc59b09 100644 --- a/API-ROUTER/server.py +++ b/API-ROUTER/server.py @@ -10,14 +10,19 @@ 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") + print("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}/conf/logging.conf') + 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-SERVICE/ApiList/common/commonExecute.py b/API-SERVICE/ApiList/common/commonExecute.py index d5fa5863..7f0fc4c1 100644 --- a/API-SERVICE/ApiList/common/commonExecute.py +++ b/API-SERVICE/ApiList/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/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 5898ce79..1a6d326b 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -3,7 +3,12 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta -from Utils.CommonUtil import get_exception_info, create_token, make_token_data, authenticate_user +from Utils.CommonUtil import ( + get_exception_info, + create_token, + make_token_data, + authenticate_user, +) from ApiService.ApiServiceConfig import config @@ -15,17 +20,20 @@ def api(login: commonLogin) -> Dict: access_token = "" try: user = authenticate_user( - login.data[config.user_info["id_column"]], login.data[config.user_info["password_column"]]) + login.data[config.user_info["id_column"]], + login.data[config.user_info["password_column"]], + ) 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"]))) + 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) + response.set_cookie(key=config.secret_info["cookie_name"], value=access_token) return response diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index 4d29d1d4..5eced69a 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -22,7 +22,9 @@ def api(request: Request) -> Dict: 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"] + 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) diff --git a/API-SERVICE/ApiList/common/commonPassword.py b/API-SERVICE/ApiList/common/commonPassword.py index d5c5621c..28b897ce 100644 --- a/API-SERVICE/ApiList/common/commonPassword.py +++ b/API-SERVICE/ApiList/common/commonPassword.py @@ -1,7 +1,12 @@ from typing import Dict, Optional from pydantic import BaseModel from fastapi.logger import logger -from Utils.CommonUtil import connect_db, get_exception_info, convert_data, authenticate_user +from Utils.CommonUtil import ( + connect_db, + get_exception_info, + convert_data, + authenticate_user, +) from ApiService.ApiServiceConfig import config @@ -20,11 +25,12 @@ def api(password: commonPassword) -> Dict: authenticate_user(user_id, cur_password) if new_password: logger.info("Change Password") - time_zone = 'Asia/Seoul' + time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") db.execute( f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))},' - f' {config.user_info["normal_password"]} = {convert_data(new_password)} WHERE {config.user_info["id_column"]} = {convert_data(user_id)};') + f' {config.user_info["normal_password"]} = {convert_data(new_password)} WHERE {config.user_info["id_column"]} = {convert_data(user_id)};' + ) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/ApiList/common/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py index 9b209529..223a5abf 100644 --- a/API-SERVICE/ApiList/common/commonRegister.py +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -15,7 +15,9 @@ def make_register_query(register: commonRegister): # at 221109 by seokwoo-yang, password 평문 필요 요청 register.data["user_normal"] = register.data[password_column] - register.data[password_column] = config.pwd_context.hash(register.data[password_column]) + register.data[password_column] = config.pwd_context.hash( + register.data[password_column] + ) columns = ", ".join(register.data.keys()) values = ", ".join(map(convert_data, register.data.values())) query = f"INSERT INTO {user_info_table} ({columns}) VALUES ({values});" diff --git a/API-SERVICE/ApiList/common/commonSelect.py b/API-SERVICE/ApiList/common/commonSelect.py index 14c98398..f77e89f6 100644 --- a/API-SERVICE/ApiList/common/commonSelect.py +++ b/API-SERVICE/ApiList/common/commonSelect.py @@ -67,9 +67,8 @@ 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} )' + value_list = ", ".join(map(convert_data, where.value.split(","))) + value = f"( {value_list} )" else: value = convert_data(where.value) return value @@ -84,26 +83,33 @@ 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 @@ -112,7 +118,7 @@ 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}') + logger.info(f"Get Query : {get_query}") try: db = connect_db() diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py index bcd52d7c..19319bd4 100644 --- a/API-SERVICE/ApiList/common/commonToken.py +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -19,12 +19,14 @@ 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 +37,12 @@ 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"]))) + 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) + response.set_cookie(key=config.secret_info["cookie_name"], value=access_token) return response diff --git a/API-SERVICE/ApiList/common/commonUserInfo.py b/API-SERVICE/ApiList/common/commonUserInfo.py index cf47dd94..37aa8d4f 100644 --- a/API-SERVICE/ApiList/common/commonUserInfo.py +++ b/API-SERVICE/ApiList/common/commonUserInfo.py @@ -16,12 +16,14 @@ class TokenDoesNotExist(Exception): def api(request: Request) -> Dict: 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]: diff --git a/API-SERVICE/ApiList/common/emailAthnCnfm.py b/API-SERVICE/ApiList/common/emailAthnCnfm.py index c8bd2733..0dc94fd5 100644 --- a/API-SERVICE/ApiList/common/emailAthnCnfm.py +++ b/API-SERVICE/ApiList/common/emailAthnCnfm.py @@ -17,13 +17,16 @@ def api(email_confirm: emailAthnCnfm) -> Dict: try: db = connect_db() email_info, _ = db.select( - f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_confirm.email)}') + f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_confirm.email)}" + ) if email_info[0]["athn_no"] == email_confirm.athn_no: - time_zone = 'Asia/Seoul' + time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") - db.execute(f"UPDATE tb_email_athn_info \ - SET athn_yn='Y', athn_date=NOW() WHERE email={convert_data(email_confirm.email)};") + db.execute( + f"UPDATE tb_email_athn_info \ + SET athn_yn='Y', athn_date=NOW() WHERE email={convert_data(email_confirm.email)};" + ) else: raise EmailAuthFail logger.info("Successfully Auth Confirm.") diff --git a/API-SERVICE/ApiList/common/emailAthnPass.py b/API-SERVICE/ApiList/common/emailAthnPass.py index 8b6c7b03..0ceb3042 100644 --- a/API-SERVICE/ApiList/common/emailAthnPass.py +++ b/API-SERVICE/ApiList/common/emailAthnPass.py @@ -22,15 +22,17 @@ def api(email_athn_pass: emailAthnPass) -> Dict: try: db = connect_db() email_info, _ = db.select( - f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}') + f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}" + ) if email_info[0]["athn_no"] == email_athn_pass.athn_no: - time_zone = 'Asia/Seoul' + time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") if email_info[0]["athn_yn"] == "Y": db.execute( f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))} \ - WHERE {config.user_info["id_column"]} = {convert_data(user_id)};') + WHERE {config.user_info["id_column"]} = {convert_data(user_id)};' + ) else: raise EmailAuthFail else: diff --git a/API-SERVICE/ApiList/common/emailAthnSend.py b/API-SERVICE/ApiList/common/emailAthnSend.py index a3367879..d1c09bdf 100644 --- a/API-SERVICE/ApiList/common/emailAthnSend.py +++ b/API-SERVICE/ApiList/common/emailAthnSend.py @@ -48,10 +48,14 @@ def send_mail(auth_no, receiver_addr, msg_type): message["To"] = receiver_addr if msg_type == "register": - with open(f'{config.root_path}/conf/common/template/emailAthnSend.html', "r") as fd: + with open( + f"{config.root_path}/conf/common/template/emailAthnSend.html", "r" + ) as fd: html = "\n".join(fd.readlines()) else: - with open(f'{config.root_path}/conf/common/template/pwdEmailAthn.html', "r") as fd: + with open( + f"{config.root_path}/conf/common/template/pwdEmailAthn.html", "r" + ) as fd: html = "\n".join(fd.readlines()) html = html.replace("AUTH_NO", auth_no) @@ -59,11 +63,11 @@ def send_mail(auth_no, receiver_addr, msg_type): message.attach(html_part) stmp = smtplib.SMTP( - host=config.email_auth["server_addr"], port=int(config.email_auth["port"])) + host=config.email_auth["server_addr"], port=int(config.email_auth["port"]) + ) stmp.ehlo() stmp.starttls() - stmp.login(config.email_auth["login_user"], - config.email_auth["login_pass"]) + stmp.login(config.email_auth["login_user"], config.email_auth["login_pass"]) stmp.send_message(message) stmp.quit() @@ -73,7 +77,8 @@ def api(email_auth: emailAthnSend) -> Dict: auth_no = make_auth_no() db = connect_db() exist_mail, _ = db.select( - f'SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}') + f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}" + ) if email_auth.msg_type == "password": if len(exist_mail) == 0: @@ -83,7 +88,7 @@ def api(email_auth: emailAthnSend) -> Dict: send_mail(auth_no, email_auth.email, email_auth.msg_type) - time_zone = 'Asia/Seoul' + time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") query = make_email_auth_query(email_auth.email, auth_no, exist_mail) db.execute(query) diff --git a/API-SERVICE/ApiList/meta/addChildCategory.py b/API-SERVICE/ApiList/meta/addChildCategory.py index 03131aa6..4816ed40 100644 --- a/API-SERVICE/ApiList/meta/addChildCategory.py +++ b/API-SERVICE/ApiList/meta/addChildCategory.py @@ -11,8 +11,8 @@ class addChildCategory(BaseModel): 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())});' + 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() diff --git a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py index 1e95f664..d3d8bbec 100644 --- a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py @@ -5,7 +5,7 @@ def api(biz_dataset_id: str): - 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]] try: es = ElasticSearchManager(**els_config) es.delete("biz_dataset_id", biz_dataset_id) @@ -16,4 +16,3 @@ def api(biz_dataset_id: str): else: result = {"result": 1, "errorMessage": ""} return result - diff --git a/API-SERVICE/ApiList/meta/getCategoryList.py b/API-SERVICE/ApiList/meta/getCategoryList.py index afcbfea4..76716c82 100644 --- a/API-SERVICE/ApiList/meta/getCategoryList.py +++ b/API-SERVICE/ApiList/meta/getCategoryList.py @@ -4,7 +4,7 @@ def api() -> Dict: - category_query = 'SELECT * FROM tb_category ORDER BY prnts_id, node_id;' + category_query = "SELECT * FROM tb_category ORDER BY prnts_id, node_id;" try: db = connect_db() diff --git a/API-SERVICE/ApiList/meta/getCategoryNmCount.py b/API-SERVICE/ApiList/meta/getCategoryNmCount.py index 4e01c987..84ccdb8b 100644 --- a/API-SERVICE/ApiList/meta/getCategoryNmCount.py +++ b/API-SERVICE/ApiList/meta/getCategoryNmCount.py @@ -9,14 +9,14 @@ def api(nms) -> Dict: data_dict = {} key = "ctgry" - 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]] try: ctgry_nm_list = nms.split(",") es = ElasticSearchManager(**els_config) for c_id in ctgry_nm_list: - cnt_query = make_query("query","match_phrase",{key: c_id}) + cnt_query = make_query("query", "match_phrase", {key: c_id}) cnt = es.conn.count(index=es.index, body=cnt_query)["count"] - data_dict[c_id.replace("+","_")] = cnt + data_dict[c_id.replace("+", "_")] = cnt except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 73a7ed42..c4d25202 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -9,14 +9,14 @@ def extra_filter(option_list): - els_katech_option = ["ctgry","data_shap","data_prv_desk"] + els_katech_option = ["ctgry", "data_shap", "data_prv_desk"] for item in option_list: for col in els_katech_option: if col in item.field: item.field.append(f"re_{col}") index = item.field.index(col) del item.field[index] - item.keywords = [v.replace(" ","") for v in item.keywords] + item.keywords = [v.replace(" ", "") for v in item.keywords] if item.field in ["data_nm", "data_desc"]: item.field = item.field + ".korean_analyzer" return option_list @@ -29,15 +29,18 @@ def api(input: InputModel) -> Dict: "연동데이터": "innerCount", "외부데이터": "externalCount", "해외데이터": "overseaCount", - "전체": "totalCount" + "전체": "totalCount", } data_dict = dict() from_ = input.from_ - 1 - 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]] try: if len(input.searchOption): - with open(f"{config.root_path}/log/{config.category}/{datetime.today().strftime('%Y%m%d')}_search.log","a") as fp: + 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") @@ -48,14 +51,14 @@ def api(input: InputModel) -> Dict: action = "query" sub_action = "must" input.searchOption = extra_filter(input.searchOption) - query_dict = base_search_query(action,sub_action,input.searchOption) + query_dict = base_search_query(action, sub_action, input.searchOption) # ############ filter option ############ sub_action = "filter" input.filterOption = extra_filter(input.filterOption) - 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 option ############ @@ -65,7 +68,7 @@ def api(input: InputModel) -> Dict: # ############ data_srttn ############ i = None - for j,item in enumerate(item_dict["filter"]): + for j, item in enumerate(item_dict["filter"]): if "data_srttn" in item["match"].keys(): i = j break @@ -74,7 +77,9 @@ def api(input: InputModel) -> Dict: for ko_nm, eng_nm in data_srttn.items(): if i is None: - cnt_query = make_query("match","data_srttn",{'operator': 'OR', 'query': ko_nm}) + cnt_query = make_query( + "match", "data_srttn", {"operator": "OR", "query": ko_nm} + ) item_dict["filter"].append(cnt_query) i = -1 else: @@ -84,8 +89,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: diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 09c45a50..7e8de4c1 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -14,17 +14,19 @@ def api(size: int, keyword: str) -> Dict: """ field = "data_nm" query = {field: keyword} - 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]] try: es = ElasticSearchManager(**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/ApiList/meta/metaInsert.py b/API-SERVICE/ApiList/meta/metaInsert.py index 953f9cb3..6eb4a1a6 100644 --- a/API-SERVICE/ApiList/meta/metaInsert.py +++ b/API-SERVICE/ApiList/meta/metaInsert.py @@ -24,21 +24,21 @@ def api() -> Dict: path = os.path.join(eda_path, rid, "profile_report_merged.html") with open(path, "rb") as fd: data = fd.read() - data_base64 = base64.b64encode(data).decode('ascii') - insert_data = f'data:text/html;base64,{data_base64}' - print(f'LEN : {len(insert_data)}') + data_base64 = base64.b64encode(data).decode("ascii") + insert_data = f"data:text/html;base64,{data_base64}" + print(f"LEN : {len(insert_data)}") # print(insert_data) # query = f'UPDATE meta_temp SET file_data = {convert_data(insert_data)}\ # WHERE gimi9_rid = {convert_data(rid)}' - select_query = f'select biz_dataset_id from meta_temp where gimi9_rid = {convert_data(rid)}' + select_query = f"select biz_dataset_id from meta_temp where gimi9_rid = {convert_data(rid)}" select_res, _ = db.select(select_query) if select_res: biz_dataset_id = select_res[0]["biz_dataset_id"] - query = f'INSERT INTO tb_meta_html (biz_dataset_id, file_data) VALUES ({convert_data(biz_dataset_id)}, {convert_data(insert_data)});' + query = f"INSERT INTO tb_meta_html (biz_dataset_id, file_data) VALUES ({convert_data(biz_dataset_id)}, {convert_data(insert_data)});" db.execute(query) else: id_cnt += 1 - print(f'id_cnt : {id_cnt}') + print(f"id_cnt : {id_cnt}") except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/updateCategory.py b/API-SERVICE/ApiList/meta/updateCategory.py index 3170bab8..73bbb3e2 100644 --- a/API-SERVICE/ApiList/meta/updateCategory.py +++ b/API-SERVICE/ApiList/meta/updateCategory.py @@ -11,11 +11,11 @@ class UpdateCategory(BaseModel): def api(update: UpdateCategory) -> Dict: - query = f'UPDATE tb_category\ + 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)};' + WHERE node_id = {convert_data(update.node_id)};" try: db = connect_db() db.execute(query) diff --git a/API-SERVICE/ApiList/sitemng/getCodeInfo.py b/API-SERVICE/ApiList/sitemng/getCodeInfo.py index b8b96bec..b7d0e961 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeInfo.py +++ b/API-SERVICE/ApiList/sitemng/getCodeInfo.py @@ -4,9 +4,9 @@ def api(groupId) -> Dict: - get_code_info_query = f'SELECT code_id, code_nm, data_1, data_2 \ + get_code_info_query = f"SELECT code_id, code_nm, data_1, data_2 \ FROM tb_code_detail \ - WHERE code_group_id = {convert_data(groupId)};' + WHERE code_group_id = {convert_data(groupId)};" try: db = connect_db() code_list = db.select(get_code_info_query) @@ -16,8 +16,15 @@ def api(groupId) -> Dict: else: code_info = [] if len(code_list[0]): - code_info = [{"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"], "data_1": code_detail["data_1"], "data_2": code_detail["data_2"]} - for code_detail in code_list[0]] + code_info = [ + { + "code_id": code_detail["code_id"], + "code_nm": code_detail["code_nm"], + "data_1": code_detail["data_1"], + "data_2": code_detail["data_2"], + } + for code_detail in code_list[0] + ] body = {"list": code_info} result = {"result": 1, "errorMessage": "", "data": body} diff --git a/API-SERVICE/ApiList/sitemng/getCodeList.py b/API-SERVICE/ApiList/sitemng/getCodeList.py index ec8540f9..74a01ff3 100644 --- a/API-SERVICE/ApiList/sitemng/getCodeList.py +++ b/API-SERVICE/ApiList/sitemng/getCodeList.py @@ -4,14 +4,13 @@ from fastapi.logger import logger -def api(perPage: int, - curPage: int, - gropId: str, - keyword: str = "") -> Dict: +def api(perPage: int, curPage: int, gropId: str, keyword: str = "") -> Dict: curPage = curPage - 1 total_cnt_query = "SELECT count(*) AS cnt FROM tb_code_detail" - code_list_query = "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM tb_code_detail" + code_list_query = ( + "SELECT *, row_number () OVER (ORDER BY {0}) AS rowNo FROM tb_code_detail" + ) try: db = connect_db() @@ -43,9 +42,11 @@ def api(perPage: int, 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]] + code_info = [ + {"code_id": code_detail["code_id"], "code_nm": code_detail["code_nm"]} + for code_detail in code_list[0] + ] - body = {"totalcount": total_cnt[0][0]['cnt'], "list": code_info} + body = {"totalcount": total_cnt[0][0]["cnt"], "list": code_info} result = {"result": 1, "errorMessage": "", "data": body} return result diff --git a/API-SERVICE/ApiService/ApiService.py b/API-SERVICE/ApiService/ApiService.py index f0d518cb..a853b89f 100644 --- a/API-SERVICE/ApiService/ApiService.py +++ b/API-SERVICE/ApiService/ApiService.py @@ -12,13 +12,16 @@ 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_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) + 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"]} ]']) + 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/ConnectManager/PostgresManager.py b/API-SERVICE/ConnectManager/PostgresManager.py index aa5a92a9..3c2154b4 100644 --- a/API-SERVICE/ConnectManager/PostgresManager.py +++ b/API-SERVICE/ConnectManager/PostgresManager.py @@ -18,27 +18,28 @@ 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): 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-SERVICE/ELKSearch/Manager/__init__.py b/API-SERVICE/ELKSearch/Manager/__init__.py index b9742821..b6e690fd 100644 --- a/API-SERVICE/ELKSearch/Manager/__init__.py +++ b/API-SERVICE/ELKSearch/Manager/__init__.py @@ -1 +1 @@ -from . import * \ No newline at end of file +from . import * diff --git a/API-SERVICE/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py index bc393f6c..1d5e0685 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 = "192.168.101.44", - port: str = "39200", - page: int = 1, - size: int = 10, - index: str = "biz_meta", + 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 @@ -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/__init__.py b/API-SERVICE/ELKSearch/Utils/__init__.py index b9742821..b6e690fd 100644 --- a/API-SERVICE/ELKSearch/Utils/__init__.py +++ b/API-SERVICE/ELKSearch/Utils/__init__.py @@ -1 +1 @@ -from . import * \ No newline at end of file +from . import * 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/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 33627422..ac4a43ec 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -22,18 +22,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) @@ -41,8 +45,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): @@ -63,31 +67,34 @@ def parser_params() -> Any: def prepare_config() -> None: args = parser_params() - config.root_path = str( - Path(os.path.dirname(os.path.abspath(__file__))).parent) + 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_type = f'{args.db_type}_db' + 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) if config.category == "common": config.secret_info = api_router_cfg["secret_info"] config.user_info = api_router_cfg["user_info"] - config.pwd_context = CryptContext( - schemes=["bcrypt"], deprecated="auto") + config.pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") config.email_auth = api_router_cfg["email_auth"] 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 +112,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 +123,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 +136,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,22 +163,26 @@ 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, 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}) encoded_jwt = jwt.encode( - to_encode, config.secret_info["secret_key"], algorithm=config.secret_info["algorithm"]) + to_encode, + config.secret_info["secret_key"], + algorithm=config.secret_info["algorithm"], + ) return encoded_jwt diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index a479112f..6f29ddb2 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -18,19 +18,23 @@ def main(): db_query = f"SELECT * FROM v_biz_meta_info " 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["re_ctgry"] = re.sub("[ ]","",str(meta_wrap["ctgry"])) - meta_wrap["re_data_shap"] = re.sub("[ ]","",str(meta_wrap["data_shap"])) - meta_wrap["re_data_prv_desk"] = re.sub("[ ]","",str(meta_wrap["data_prv_desk"])) + meta_wrap["re_ctgry"] = re.sub("[ ]", "", str(meta_wrap["ctgry"])) + meta_wrap["re_data_shap"] = re.sub("[ ]", "", str(meta_wrap["data_shap"])) + meta_wrap["re_data_prv_desk"] = re.sub( + "[ ]", "", str(meta_wrap["data_prv_desk"]) + ) els_dict["_id"] = meta_wrap["biz_dataset_id"] els_dict["_source"] = meta_wrap diff --git a/API-SERVICE/recommend_word.py b/API-SERVICE/recommend_word.py index 26c96478..b3c63fea 100644 --- a/API-SERVICE/recommend_word.py +++ b/API-SERVICE/recommend_word.py @@ -4,7 +4,14 @@ 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 +from ELKSearch.Utils.database_utils import ( + prepare_config, + connect_db, + select, + config, + execute, +) + root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) @@ -20,8 +27,10 @@ def main(): 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_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] # 필터링할 단어 리스트 불러오기 @@ -32,17 +41,23 @@ def main(): # 자모만 들어가 있는 오타 제외 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) + 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 = [ + 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] + recommend_word = select(db, query)[0] for word in recommend_word: key = word["keyword"] @@ -53,11 +68,13 @@ def main(): 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 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 + main() diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 265ead3a..4e12cb82 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -10,8 +10,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: @@ -19,5 +19,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", + ) From 73c8119587e1a6d0aa323a6f336787a340ebd53d Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 5 Dec 2022 14:47:44 +0900 Subject: [PATCH 267/323] =?UTF-8?q?fix:=20user=5Frole=EC=9D=84=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EC=97=AC=20=EA=B6=8C=ED=95=9C=EC=9D=B4=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EC=9C=A0=EC=A0=80=EB=8A=94=20=EC=8B=A0?= =?UTF-8?q?=EA=B7=9C=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C=EB=A1=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=ED=86=A0=EB=A1=9D=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/__init__.py | 0 API-SERVICE/ApiList/common/__init__.py | 0 API-SERVICE/ApiList/common/commonLogin.py | 4 ++ API-SERVICE/ApiList/common/commonLogout.py | 10 +-- API-SERVICE/ApiList/common/commonPassword.py | 61 ++++++++++++++++++- API-SERVICE/ApiList/common/commonToken.py | 9 +-- API-SERVICE/ApiList/common/commonUserInfo.py | 12 +--- API-SERVICE/ApiList/meta/__init__.py | 0 API-SERVICE/ApiList/meta/getElsBizMetaList.py | 7 ++- API-SERVICE/ApiList/meta/getPrefixBizMeta.py | 6 +- API-SERVICE/ApiList/sitemng/__init__.py | 0 API-SERVICE/Utils/CommonUtil.py | 4 +- API-SERVICE/Utils/exceptions.py | 6 ++ API-SERVICE/conf/common/config.ini | 1 + API-SERVICE/server.py | 2 +- 15 files changed, 87 insertions(+), 35 deletions(-) create mode 100644 API-SERVICE/ApiList/__init__.py create mode 100644 API-SERVICE/ApiList/common/__init__.py create mode 100644 API-SERVICE/ApiList/meta/__init__.py create mode 100644 API-SERVICE/ApiList/sitemng/__init__.py create mode 100644 API-SERVICE/Utils/exceptions.py diff --git a/API-SERVICE/ApiList/__init__.py b/API-SERVICE/ApiList/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ApiList/common/__init__.py b/API-SERVICE/ApiList/common/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 1a6d326b..81a37bec 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -17,6 +17,10 @@ class commonLogin(BaseModel): def api(login: commonLogin) -> Dict: + """ + id_column = user_id + password_column = user_password + """ access_token = "" try: user = authenticate_user( diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index 5eced69a..b5944363 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -3,16 +3,10 @@ from fastapi.responses import JSONResponse from jose import jwt from starlette.requests import Request + from Utils.CommonUtil import get_exception_info, get_user from ApiService.ApiServiceConfig import config - - -class InvalidUserInfo(Exception): - pass - - -class TokenDoesNotExist(Exception): - pass +from Utils.exceptions import TokenDoesNotExist, InvalidUserInfo def api(request: Request) -> Dict: diff --git a/API-SERVICE/ApiList/common/commonPassword.py b/API-SERVICE/ApiList/common/commonPassword.py index 28b897ce..b8114026 100644 --- a/API-SERVICE/ApiList/common/commonPassword.py +++ b/API-SERVICE/ApiList/common/commonPassword.py @@ -1,6 +1,8 @@ from typing import Dict, Optional from pydantic import BaseModel from fastapi.logger import logger +from fastapi.requests import Request +from jose import jwt from Utils.CommonUtil import ( connect_db, get_exception_info, @@ -8,19 +10,76 @@ authenticate_user, ) from ApiService.ApiServiceConfig import config +from Utils.exceptions import InvalidUserInfo, TokenDoesNotExist class commonPassword(BaseModel): + """ + data: Dict = { + "user_id": email, + "password": current password + } + + """ + data: Dict new_password: Optional[str] = "" -def api(password: commonPassword) -> Dict: +def is_auth_role(user_role) -> bool: + auth_role = config.user_info["user_role"].split(",") + for role in user_role.split("|"): + if role in auth_role: + return True + return False + + +def reset_to_new_password(id: str, new_password: str, user_info_table: str, user_role: str) -> bool: + if not is_auth_role(user_role): + return False + db = connect_db() + time_zone = "Asia/Seoul" + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + db.execute( + f""" + UPDATE + {user_info_table} + SET + {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))}, + {config.user_info["normal_password"]} = {convert_data(new_password)} + WHERE + {config.user_info["id_column"]} = {convert_data(id)}; + """ + ) + + return True + + +def get_payload(cookies): + recv_access_token = cookies.get(config.secret_info["cookie_name"]) + if not recv_access_token: + raise TokenDoesNotExist + return jwt.decode( + token=recv_access_token, + key=config.secret_info["secret_key"], + algorithms=config.secret_info["algorithm"], + ) + + +def api(password: commonPassword, request: Request) -> Dict: user_id = password.data.get(config.user_info["id_column"]) cur_password = password.data.get(config.user_info["password_column"]) new_password = password.new_password user_info_table = config.user_info["table"] + try: + payload = get_payload(request.cookies) + user_role = payload["user_role"] + if reset_to_new_password(user_id, new_password, user_info_table, user_role): + return {"result": 1, "errorMessage": ""} + if not cur_password: + raise InvalidUserInfo("user_password") + db = connect_db() authenticate_user(user_id, cur_password) if new_password: diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py index 19319bd4..a3253f8e 100644 --- a/API-SERVICE/ApiList/common/commonToken.py +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -6,14 +6,7 @@ from Utils.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 +from Utils.exceptions import TokenDoesNotExist, InvalidUserInfo def api(request: Request) -> Dict: diff --git a/API-SERVICE/ApiList/common/commonUserInfo.py b/API-SERVICE/ApiList/common/commonUserInfo.py index 37aa8d4f..e67cabc9 100644 --- a/API-SERVICE/ApiList/common/commonUserInfo.py +++ b/API-SERVICE/ApiList/common/commonUserInfo.py @@ -1,17 +1,11 @@ from typing import Dict from fastapi.logger import logger from jose import jwt -from Utils.CommonUtil import get_exception_info, get_user, make_res_msg -from ApiService.ApiServiceConfig import config from starlette.requests import Request - -class InvalidUserInfo(Exception): - pass - - -class TokenDoesNotExist(Exception): - pass +from Utils.CommonUtil import get_exception_info, get_user, make_res_msg +from ApiService.ApiServiceConfig import config +from Utils.exceptions import TokenDoesNotExist, InvalidUserInfo def api(request: Request) -> Dict: diff --git a/API-SERVICE/ApiList/meta/__init__.py b/API-SERVICE/ApiList/meta/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 1048fa21..270953f0 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -16,7 +16,7 @@ def extra_filter(option_list): item.field.append(f"re_{col}") index = item.field.index(col) del item.field[index] - item.keywords = [v.replace(" ","") for v in item.keywords] + item.keywords = [v.replace(" ", "") for v in item.keywords] tmp = [] for field in item.field: @@ -45,7 +45,10 @@ def api(input: InputModel) -> 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: + 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") diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 04462798..af121445 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -11,7 +11,7 @@ class Prefix(BaseModel): keyword: str -def api(input:Prefix) -> Dict: +def api(input: Prefix) -> Dict: """ Auto Complete data_nm DB의 Like 검색과 유사함 @@ -20,11 +20,11 @@ def api(input:Prefix) -> Dict: """ field = "data_nm" query = {field: input.keyword} - 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]] try: es = ElasticSearchManager(**els_config) es.size = input.size - prefix_data = es.prefix(query,[field]) + prefix_data = es.prefix(query, [field]) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/sitemng/__init__.py b/API-SERVICE/ApiList/sitemng/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index ac4a43ec..d56c2e4d 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -27,9 +27,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", diff --git a/API-SERVICE/Utils/exceptions.py b/API-SERVICE/Utils/exceptions.py new file mode 100644 index 00000000..98fb70e5 --- /dev/null +++ b/API-SERVICE/Utils/exceptions.py @@ -0,0 +1,6 @@ +class InvalidUserInfo(Exception): + pass + + +class TokenDoesNotExist(Exception): + pass diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 8cf70689..5ce19ebf 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -27,6 +27,7 @@ table = tb_user_info id_column = user_id password_column = user_password normal_password = user_normal +user_role = ROLE_ADMIN,ROLE_OPER # emailAthnSend, emailAthnCnfm [email_auth] diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 4e12cb82..ee257188 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -13,7 +13,7 @@ if __name__ == "__main__": log_dir = f"{config.root_path}/log/{config.category}" if os.path.isdir(log_dir): - print(f"Directory Exists") + print("Directory Exists") else: print(f"Make log dir : {log_dir}") os.makedirs(log_dir) From 8cf49e4035987b4ce193d79b3665fd7a611dfa00 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 5 Dec 2022 15:21:19 +0900 Subject: [PATCH 268/323] =?UTF-8?q?build:=20requirements.txt=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/requirements.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/API-SERVICE/requirements.txt b/API-SERVICE/requirements.txt index a9bb4ee4..5c90f510 100644 --- a/API-SERVICE/requirements.txt +++ b/API-SERVICE/requirements.txt @@ -1,5 +1,10 @@ +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 bcrypt==4.0.1 certifi==2022.9.24 cffi==1.15.1 @@ -11,18 +16,22 @@ ecdsa==0.18.0 elastic-transport==8.4.0 elasticsearch==8.4.3 fastapi==0.75.2 +frozenlist==1.3.1 h11==0.14.0 idna==3.4 jose==1.0.0 +multidict==6.0.2 paramiko==2.10.3 passlib==1.7.4 psycopg2==2.8.6 +psycopg2-binary==2.9.5 py==1.11.0 pyasn1==0.4.8 pycparser==2.21 pydantic==1.10.2 PyJWT==2.6.0 PyNaCl==1.5.0 +python-dotenv==0.21.0 python-jose==3.3.0 pytz==2022.5 requests==2.27.1 @@ -34,3 +43,4 @@ starlette==0.17.1 typing_extensions==4.4.0 urllib3==1.26.12 uvicorn==0.16.0 +yarl==1.8.1 \ No newline at end of file From 89e5fc2d4d2e62eb9c35119cb2559a29953a4693 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 7 Dec 2022 14:05:04 +0900 Subject: [PATCH 269/323] =?UTF-8?q?feat:=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=EB=B0=9C?= =?UTF-8?q?=EC=86=A1=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/common/emailAthnPass.py | 4 +- API-SERVICE/ApiList/common/emailAthnSend.py | 43 ++--------------- API-SERVICE/ApiList/common/emailDataShare.py | 20 ++++++++ API-SERVICE/Utils/CommonUtil.py | 47 ++++++++++++++++--- API-SERVICE/conf/common/api_config.ini | 5 ++ API-SERVICE/conf/common/config.ini | 1 + .../conf/common/template/shareEmail.html | 37 +++++++++++++++ 7 files changed, 109 insertions(+), 48 deletions(-) create mode 100644 API-SERVICE/ApiList/common/emailDataShare.py create mode 100644 API-SERVICE/conf/common/template/shareEmail.html diff --git a/API-SERVICE/ApiList/common/emailAthnPass.py b/API-SERVICE/ApiList/common/emailAthnPass.py index 0ceb3042..3c81b0b6 100644 --- a/API-SERVICE/ApiList/common/emailAthnPass.py +++ b/API-SERVICE/ApiList/common/emailAthnPass.py @@ -21,9 +21,7 @@ def api(email_athn_pass: emailAthnPass) -> Dict: user_info_table = config.user_info["table"] try: db = connect_db() - email_info, _ = db.select( - f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}" - ) + email_info, _ = db.select(f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}") if email_info[0]["athn_no"] == email_athn_pass.athn_no: time_zone = "Asia/Seoul" diff --git a/API-SERVICE/ApiList/common/emailAthnSend.py b/API-SERVICE/ApiList/common/emailAthnSend.py index d1c09bdf..0d938912 100644 --- a/API-SERVICE/ApiList/common/emailAthnSend.py +++ b/API-SERVICE/ApiList/common/emailAthnSend.py @@ -1,12 +1,10 @@ from typing import Dict from fastapi.logger import logger from pydantic import BaseModel -import smtplib import string import random -from email.mime.text import MIMEText -from email.mime.multipart import MIMEMultipart -from Utils.CommonUtil import get_exception_info, connect_db, convert_data + +from Utils.CommonUtil import get_exception_info, connect_db, convert_data, send_template_mail from ApiService.ApiServiceConfig import config @@ -41,44 +39,11 @@ def make_email_auth_query(email, auth_no, exist_mail): return query -def send_mail(auth_no, receiver_addr, msg_type): - message = MIMEMultipart("alternative") - message["Subject"] = config.email_auth[f"subject_{msg_type}"] - message["From"] = config.email_auth["login_user"] - message["To"] = receiver_addr - - if msg_type == "register": - with open( - f"{config.root_path}/conf/common/template/emailAthnSend.html", "r" - ) as fd: - html = "\n".join(fd.readlines()) - else: - with open( - f"{config.root_path}/conf/common/template/pwdEmailAthn.html", "r" - ) as fd: - html = "\n".join(fd.readlines()) - - html = html.replace("AUTH_NO", auth_no) - html_part = MIMEText(html, "html") - message.attach(html_part) - - stmp = smtplib.SMTP( - host=config.email_auth["server_addr"], port=int(config.email_auth["port"]) - ) - stmp.ehlo() - stmp.starttls() - stmp.login(config.email_auth["login_user"], config.email_auth["login_pass"]) - stmp.send_message(message) - stmp.quit() - - def api(email_auth: emailAthnSend) -> Dict: try: auth_no = make_auth_no() db = connect_db() - exist_mail, _ = db.select( - f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}" - ) + exist_mail, _ = db.select(f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}") if email_auth.msg_type == "password": if len(exist_mail) == 0: @@ -86,7 +51,7 @@ def api(email_auth: emailAthnSend) -> Dict: if exist_mail[0]["athn_yn"] == "N": raise EmailNotAuth - send_mail(auth_no, email_auth.email, email_auth.msg_type) + send_template_mail(auth_no, email_auth.email, email_auth.msg_type) time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") diff --git a/API-SERVICE/ApiList/common/emailDataShare.py b/API-SERVICE/ApiList/common/emailDataShare.py new file mode 100644 index 00000000..116cd7dd --- /dev/null +++ b/API-SERVICE/ApiList/common/emailDataShare.py @@ -0,0 +1,20 @@ +from pydantic import BaseModel +from fastapi.logger import logger + +from Utils.CommonUtil import send_template_mail, get_exception_info + + +class EmailInfo(BaseModel): + email: str + msg_type: str # share + message: str + + +def api(params: EmailInfo): + try: + send_template_mail(params.message, params.email, params.msg_type) + + return {"result": 1, "errorMessage": ""} + except Exception: + except_name = get_exception_info() + return {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index d56c2e4d..0b0db0f8 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,18 +1,53 @@ -from datetime import datetime, timedelta from pytz import timezone import os import configparser import argparse +import jwt +import sys +import traceback +from datetime import datetime, timedelta from fastapi.logger import logger -from pathlib import Path from typing import Any, Optional, Dict from passlib.context import CryptContext +from pathlib import Path from psycopg2 import pool -import jwt -import sys -import traceback -from ApiService.ApiServiceConfig import config +import smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart + from ConnectManager import PostgresManager +from ApiService.ApiServiceConfig import config + + +def send_template_mail(replace_text, receiver_addr, msg_type): + message = MIMEMultipart("alternative") + message["Subject"] = config.email_auth[f"subject_{msg_type}"] + message["From"] = config.email_auth["login_user"] + message["To"] = receiver_addr + + html_part = template_html(msg_type, replace_text) + message.attach(html_part) + + stmp = smtplib.SMTP(host=config.email_auth["server_addr"], port=int(config.email_auth["port"])) + stmp.ehlo() + stmp.starttls() + stmp.login(config.email_auth["login_user"], config.email_auth["login_pass"]) + stmp.send_message(message) + stmp.quit() + + +def template_html(msg_type, msg): + template = { + "register": (f"{config.root_path}/conf/common/template/emailAthnSend.html", "AUTH_NO"), + "password": (f"{config.root_path}/conf/common/template/pwdEmailAthn.html", "AUTH_NO"), + "share": (f"{config.root_path}/conf/common/template/shareEmail.html", "URL"), + } + + with open(template[msg_type][0], "r") as fd: + html = "\n".join(fd.readlines()) + html = html.replace(template[msg_type][1], msg) + + return MIMEText(html, "html") def convert_data(data) -> str: diff --git a/API-SERVICE/conf/common/api_config.ini b/API-SERVICE/conf/common/api_config.ini index d7aa0655..83993524 100644 --- a/API-SERVICE/conf/common/api_config.ini +++ b/API-SERVICE/conf/common/api_config.ini @@ -51,4 +51,9 @@ sub_dir = common [emailAthnPass] method = POST url = /portal/api/common/user/emailAthnPass +sub_dir = common + +[emailDataShare] +method = POST +url = /portal/api/common/user/emailDataShare 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 index 5ce19ebf..90a2ceb1 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -34,6 +34,7 @@ user_role = ROLE_ADMIN,ROLE_OPER auth_no_len = 10 subject_register = [자동차데이터포털]회원가입을 위한 인증 메일입니다. subject_password = [자동차데이터포털]비밀번호 변경을 위한 인증 메일입니다. +subject_share = [자동차데이터포털] 자동차데이터포털에서 공유한 데이터입니다. server_addr = mail.w.bigdata-car.kr port = 587 login_user = admin@bigdata-car.kr diff --git a/API-SERVICE/conf/common/template/shareEmail.html b/API-SERVICE/conf/common/template/shareEmail.html new file mode 100644 index 00000000..01807d7e --- /dev/null +++ b/API-SERVICE/conf/common/template/shareEmail.html @@ -0,0 +1,37 @@ + + + + + + +
+
+

+ +

+
+ + + + + + + + + +
+ 자동차데이터포털 데이터 공유 메일 +
+
+

자동차데이터포털에서 공유한 데이터입니다.

+

URL

+
+
+
+
+
+ + + \ No newline at end of file From 519bf4935f1f4bcdfcdfde5f80b1dcfc79be9e7e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 8 Dec 2022 14:25:27 +0900 Subject: [PATCH 270/323] =?UTF-8?q?fix:=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=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/getElsBizMetaList.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 270953f0..1a5ca515 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -20,11 +20,10 @@ def extra_filter(option_list): tmp = [] for field in item.field: - if item.field in ["data_nm", "data_desc"]: + tmp.append(field) + if field in ["data_nm", "data_desc"]: col = field + ".korean_analyzer" - else: - col = field - tmp.append(col) + tmp.append(col) item.field = tmp return option_list From 2a18f95dafdc23e0126b825d9dc34dec3a6875d7 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 12 Dec 2022 14:22:42 +0900 Subject: [PATCH 271/323] =?UTF-8?q?feat:=20commonLogin=EC=8B=9C=20?= =?UTF-8?q?=ED=83=88=ED=87=B4=ED=95=9C=20=EC=9C=A0=EC=A0=80=EC=9D=98=20?= =?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/ApiList/common/commonLogin.py | 18 +++++++++--------- API-SERVICE/ApiList/common/emailAthnSend.py | 7 ++++--- API-SERVICE/Utils/CommonUtil.py | 6 ++++++ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 81a37bec..ea61a0b5 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -1,22 +1,23 @@ +from datetime import timedelta from typing import Dict -from pydantic import BaseModel -from fastapi.logger import logger + from fastapi.responses import JSONResponse -from datetime import timedelta +from pydantic import BaseModel + +from ApiService.ApiServiceConfig import config from Utils.CommonUtil import ( get_exception_info, create_token, make_token_data, authenticate_user, ) -from ApiService.ApiServiceConfig import config class commonLogin(BaseModel): data: Dict -def api(login: commonLogin) -> Dict: +def api(login: commonLogin): """ id_column = user_id password_column = user_password @@ -27,16 +28,15 @@ def api(login: commonLogin) -> Dict: login.data[config.user_info["id_column"]], login.data[config.user_info["password_column"]], ) - 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": ""} + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} response = JSONResponse(content=result) response.set_cookie(key=config.secret_info["cookie_name"], value=access_token) diff --git a/API-SERVICE/ApiList/common/emailAthnSend.py b/API-SERVICE/ApiList/common/emailAthnSend.py index 0d938912..67d3f710 100644 --- a/API-SERVICE/ApiList/common/emailAthnSend.py +++ b/API-SERVICE/ApiList/common/emailAthnSend.py @@ -1,11 +1,12 @@ +import random +import string from typing import Dict + from fastapi.logger import logger from pydantic import BaseModel -import string -import random -from Utils.CommonUtil import get_exception_info, connect_db, convert_data, send_template_mail from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import get_exception_info, connect_db, convert_data, send_template_mail class EmailNotAuth(Exception): diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 0b0db0f8..686c0352 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -192,6 +192,9 @@ class IncorrectUserName(Exception): class IncorrectPassword(Exception): pass +class LeavedUser(Exception): + pass + def get_user(user_name: str): db = connect_db() @@ -235,6 +238,9 @@ def authenticate_user(username: str, password: str): raise IncorrectUserName user = user[0][0] + if user["user_sttus"] == "SCSN": + raise LeavedUser("user_sttus :: SCSN}") + if not verify_password(password, user[config.user_info["password_column"]]): raise IncorrectPassword return user From a3579434e809833d0cfc3cb7ec205eddc4b63924 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 13 Dec 2022 09:21:25 +0900 Subject: [PATCH 272/323] =?UTF-8?q?[AIPLATFORM-1203]=20chore:=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=EC=97=86=EB=8A=94=20=EB=B3=80=EC=88=98=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/updateElsBizMeta.py | 1 - 1 file changed, 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/updateElsBizMeta.py b/API-SERVICE/ApiList/meta/updateElsBizMeta.py index 9f96589a..495dbb91 100644 --- a/API-SERVICE/ApiList/meta/updateElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateElsBizMeta.py @@ -8,7 +8,6 @@ def api(biz_dataset_id: str) -> Dict: - els_dict = dict() els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] query = f"SELECT * FROM v_biz_meta_info WHERE biz_dataset_id = {convert_data(biz_dataset_id)}" try: From 339b8d4bd5a1ba1accda6e28048a14115774f533 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 13 Dec 2022 13:52:35 +0900 Subject: [PATCH 273/323] =?UTF-8?q?[AIPLATFORM-1308]=20feat:=20email=20tem?= =?UTF-8?q?plate=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../conf/sitemng/template/shareEmail.html | 37 +++++++++++++++++++ .../conf/sitemng/template/toolApplyEmail.html | 37 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 API-SERVICE/conf/sitemng/template/shareEmail.html create mode 100644 API-SERVICE/conf/sitemng/template/toolApplyEmail.html diff --git a/API-SERVICE/conf/sitemng/template/shareEmail.html b/API-SERVICE/conf/sitemng/template/shareEmail.html new file mode 100644 index 00000000..ceff0156 --- /dev/null +++ b/API-SERVICE/conf/sitemng/template/shareEmail.html @@ -0,0 +1,37 @@ + + + + + + +
+
+

+ +

+
+ + + + + + + + + +
+ 자동차데이터포털 데이터 공유 메일 +
+
+

자동차데이터포털에서 공유한 데이터입니다.

+

URL

+
+
+
+
+
+ + + \ No newline at end of file diff --git a/API-SERVICE/conf/sitemng/template/toolApplyEmail.html b/API-SERVICE/conf/sitemng/template/toolApplyEmail.html new file mode 100644 index 00000000..068bf569 --- /dev/null +++ b/API-SERVICE/conf/sitemng/template/toolApplyEmail.html @@ -0,0 +1,37 @@ + + + + + + +
+
+

+ +

+
+ + + + + + + + + +
+ 자동차데이터포털 TITLE 신청 메일 +
+
+

CONTENTS1

+

CONTENTS2

+
+
+
+
+
+ + + \ No newline at end of file From c1f266edf2a411208afca45a16750ad0eb16c406 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 13 Dec 2022 13:52:50 +0900 Subject: [PATCH 274/323] =?UTF-8?q?[AIPLATFORM-1308]=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 | 8 +++++++- API-SERVICE/ELKSearch/conf/db_config.ini | 10 +++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 13386bac..8af0fb73 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -11,4 +11,10 @@ index = biz_meta [test] host = 192.168.101.44 port = 39200 -index = biz_meta \ No newline at end of file +index = biz_meta + +[email] +server_addr = mail.w.bigdata-car.kr +port = 587 +login_user = admin@bigdata-car.kr +login_pass = admin@katech22 \ 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 6abb6a40..f752a5bb 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -28,4 +28,12 @@ port = 25432 user = dpme password = hello.meta12#$ database = dataportal -schema = meta \ No newline at end of file +schema = meta + +[email_db] +host = 192.168.100.126 +port = 25432 +user = dpsi +password = hello.sitemng12#$ +database = dataportal +schema = sitemng \ No newline at end of file From 888fc770062eff6f7a4b5362b8334b963ad35f93 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 13 Dec 2022 13:53:16 +0900 Subject: [PATCH 275/323] =?UTF-8?q?[AIPLATFORM-1308]=20feat:=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EA=B3=B5=EC=9C=A0,=20=EB=B6=84=EC=84=9D?= =?UTF-8?q?=ED=88=B4=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=EB=B0=9C=EC=86=A1=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/send_email.py | 70 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 API-SERVICE/send_email.py diff --git a/API-SERVICE/send_email.py b/API-SERVICE/send_email.py new file mode 100644 index 00000000..5ce972e8 --- /dev/null +++ b/API-SERVICE/send_email.py @@ -0,0 +1,70 @@ +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__)))) +prepare_config(root_path) + + +def main(): + """ + :argument + category = email + db_type = email_db + """ + + # batch 1분에 한번씩 email을 전송하고 status를 req에서 send로 변경한다 + query = "SELECT * FROM tb_email_send_info WHERE sttus = 'REQ'" + db = connect_db() + send_list = select(db, query)[0] + + from_addr = config.els_info["from_addr"] + host = config.els_info["server_addr"] + port = config.els_info["port"] + + for email_info in send_list: + + try: + if email_info["tmplt_cd"] == "share": + share_chk = 1 + subject = "[자동차데이터포털] 자동차데이터포털에서 공유한 데이터입니다." + else: + share_chk = 0 + subject = f"[자동차데이터포털] {email_info['title']} 신청 메일 입니다." + message = MIMEMultipart("alternative") + message["Subject"] = subject + message["From"] = from_addr + message["To"] = email_info['rcv_adr'] + + with open(f'{config.root_path}/conf/sitemng/template/{email_info["tmplt_cd"]}Email.html', "r") as fd: + html = "\n".join(fd.readlines()) + + if share_chk: + html = html.replace("URL", email_info['contents']) + else: + content = email_info["contents"].split("|") + html = html.replace("TITLE", email_info['title']) + html = html.replace("CONTENTS1", content[0]) + html = html.replace("CONTENTS2", content[1]) + + html_part = MIMEText(html, "html") + message.attach(html_part) + + # with smtplib.SMTP(host, port) as smtp: + with smtplib.SMTP(host,port) as smtp: + smtp.login(config.els_info["login_user"],config.els_info["login_pass"]) + smtp.send_message(message) + except Exception as e: + print(e) + else: + # update status + query = f"UPDATE tb_email_send_info SET sttus = 'SEND'" \ + f"WHERE email_id = '{email_info['email_id']}'" + execute(db,db.cursor(),query) + + +if __name__ == "__main__": + main() From f12e16c4cd5e6774b74067ec9a802c7f7ce4f5f7 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Tue, 13 Dec 2022 14:36:01 +0900 Subject: [PATCH 276/323] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=9C=EC=86=A1=20=ED=9B=84=20history=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/emailAthnPass.py | 8 ++-- API-SERVICE/ApiList/common/emailAthnSend.py | 18 ++++++-- API-SERVICE/ApiList/common/emailDataShare.py | 9 +++- API-SERVICE/Utils/CommonUtil.py | 13 ++++++ API-SERVICE/requirements.txt | 4 +- requirements.txt | 43 ++++++++++++++++++-- 6 files changed, 82 insertions(+), 13 deletions(-) diff --git a/API-SERVICE/ApiList/common/emailAthnPass.py b/API-SERVICE/ApiList/common/emailAthnPass.py index 3c81b0b6..d3b5ad60 100644 --- a/API-SERVICE/ApiList/common/emailAthnPass.py +++ b/API-SERVICE/ApiList/common/emailAthnPass.py @@ -9,19 +9,21 @@ class EmailAuthFail(Exception): pass -class emailAthnPass(BaseModel): +class EmailAthnPass(BaseModel): email: str athn_no: str new_password: str -def api(email_athn_pass: emailAthnPass) -> Dict: +def api(email_athn_pass: EmailAthnPass) -> Dict: user_id = email_athn_pass.email new_password = email_athn_pass.new_password user_info_table = config.user_info["table"] try: db = connect_db() - email_info, _ = db.select(f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}") + email_info, _ = db.select( + f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}" + ) if email_info[0]["athn_no"] == email_athn_pass.athn_no: time_zone = "Asia/Seoul" diff --git a/API-SERVICE/ApiList/common/emailAthnSend.py b/API-SERVICE/ApiList/common/emailAthnSend.py index 67d3f710..86f71da2 100644 --- a/API-SERVICE/ApiList/common/emailAthnSend.py +++ b/API-SERVICE/ApiList/common/emailAthnSend.py @@ -6,7 +6,13 @@ from pydantic import BaseModel from ApiService.ApiServiceConfig import config -from Utils.CommonUtil import get_exception_info, connect_db, convert_data, send_template_mail +from Utils import insert_mail_history +from Utils.CommonUtil import ( + get_exception_info, + connect_db, + convert_data, + send_template_mail, +) class EmailNotAuth(Exception): @@ -17,7 +23,7 @@ class EmailNotExist(Exception): pass -class emailAthnSend(BaseModel): +class EmailAthnSend(BaseModel): email: str msg_type: str # register or password @@ -40,7 +46,7 @@ def make_email_auth_query(email, auth_no, exist_mail): return query -def api(email_auth: emailAthnSend) -> Dict: +def api(email_auth: EmailAthnSend) -> Dict: try: auth_no = make_auth_no() db = connect_db() @@ -53,6 +59,12 @@ def api(email_auth: emailAthnSend) -> Dict: raise EmailNotAuth send_template_mail(auth_no, email_auth.email, email_auth.msg_type) + insert_mail_history( + rcv_adr=email_auth.email, + title=config.email_auth[f"subject_{email_auth.msg_type}"], + contents=auth_no, + tmplt_cd=email_auth.msg_type, + ) time_zone = "Asia/Seoul" db.execute(f"SET TIMEZONE={convert_data(time_zone)}") diff --git a/API-SERVICE/ApiList/common/emailDataShare.py b/API-SERVICE/ApiList/common/emailDataShare.py index 116cd7dd..a5e64081 100644 --- a/API-SERVICE/ApiList/common/emailDataShare.py +++ b/API-SERVICE/ApiList/common/emailDataShare.py @@ -1,6 +1,7 @@ from pydantic import BaseModel -from fastapi.logger import logger +from ApiService.ApiServiceConfig import config +from Utils import insert_mail_history from Utils.CommonUtil import send_template_mail, get_exception_info @@ -13,6 +14,12 @@ class EmailInfo(BaseModel): def api(params: EmailInfo): try: send_template_mail(params.message, params.email, params.msg_type) + insert_mail_history( + rcv_adr=params.email, + title=config.email_auth[f"subject_{params.msg_type}"], + contents=params.message, + tmplt_cd=params.msg_type, + ) return {"result": 1, "errorMessage": ""} except Exception: diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 686c0352..d5ac26f2 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,3 +1,5 @@ +import uuid + from pytz import timezone import os import configparser @@ -19,6 +21,16 @@ from ApiService.ApiServiceConfig import config +def insert_mail_history(rcv_adr: str, title: str, contents: str, tmplt_cd: str): + db = connect_db() + sql = f""" + INSERT INTO + sitemng.tb_email_send_info (email_id, rcv_adr, title, contents, tmplt_cd, sttus, reg_date) + VALUES + ('{uuid.uuid4()}', '{rcv_adr}', '{title}', '{contents}', '{tmplt_cd}', 'SEND', '{datetime.now()}');""" + db.execute(sql) + + def send_template_mail(replace_text, receiver_addr, msg_type): message = MIMEMultipart("alternative") message["Subject"] = config.email_auth[f"subject_{msg_type}"] @@ -192,6 +204,7 @@ class IncorrectUserName(Exception): class IncorrectPassword(Exception): pass + class LeavedUser(Exception): pass diff --git a/API-SERVICE/requirements.txt b/API-SERVICE/requirements.txt index 5c90f510..e6b7c555 100644 --- a/API-SERVICE/requirements.txt +++ b/API-SERVICE/requirements.txt @@ -24,14 +24,12 @@ multidict==6.0.2 paramiko==2.10.3 passlib==1.7.4 psycopg2==2.8.6 -psycopg2-binary==2.9.5 py==1.11.0 pyasn1==0.4.8 pycparser==2.21 pydantic==1.10.2 PyJWT==2.6.0 PyNaCl==1.5.0 -python-dotenv==0.21.0 python-jose==3.3.0 pytz==2022.5 requests==2.27.1 @@ -43,4 +41,4 @@ starlette==0.17.1 typing_extensions==4.4.0 urllib3==1.26.12 uvicorn==0.16.0 -yarl==1.8.1 \ No newline at end of file +yarl==1.8.1 diff --git a/requirements.txt b/requirements.txt index ed115be4..e6b7c555 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,44 @@ +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 +bcrypt==4.0.1 +certifi==2022.9.24 +cffi==1.15.1 +charset-normalizer==2.0.12 +click==8.1.3 +cryptography==38.0.1 +decorator==5.1.1 +ecdsa==0.18.0 +elastic-transport==8.4.0 +elasticsearch==8.4.3 fastapi==0.75.2 -uvicorn==0.16.0 +frozenlist==1.3.1 +h11==0.14.0 +idna==3.4 +jose==1.0.0 +multidict==6.0.2 paramiko==2.10.3 +passlib==1.7.4 psycopg2==2.8.6 +py==1.11.0 +pyasn1==0.4.8 +pycparser==2.21 +pydantic==1.10.2 +PyJWT==2.6.0 +PyNaCl==1.5.0 +python-jose==3.3.0 +pytz==2022.5 requests==2.27.1 -retry -pyjwt +retry==0.9.2 +rsa==4.9 +six==1.16.0 +sniffio==1.3.0 +starlette==0.17.1 +typing_extensions==4.4.0 +urllib3==1.26.12 +uvicorn==0.16.0 +yarl==1.8.1 From ea3456dcd03b495abccae558132f4084fc92c969 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 13 Dec 2022 15:45:45 +0900 Subject: [PATCH 277/323] =?UTF-8?q?[AIPLATFORM-1308]=20fix:=20data=20body?= =?UTF-8?q?=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/deleteElsBizMeta.py | 9 +++++++-- API-SERVICE/ApiList/meta/updateElsBizMeta.py | 12 ++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py index ec662f0b..f3577a2a 100644 --- a/API-SERVICE/ApiList/meta/deleteElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/deleteElsBizMeta.py @@ -1,15 +1,20 @@ from typing import Dict +from pydantic import BaseModel from Utils.CommonUtil import get_exception_info from ELKSearch.Manager.manager import ElasticSearchManager from ApiService.ApiServiceConfig import config from ELKSearch.Utils.database_utils import get_config -def api(biz_dataset_id: str) -> Dict: +class DeleteData(BaseModel): + biz_dataset_id: str + + +def api(input: DeleteData) -> Dict: els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] try: es = ElasticSearchManager(**els_config) - es.delete("biz_dataset_id", biz_dataset_id) + es.delete("biz_dataset_id", input.biz_dataset_id) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/updateElsBizMeta.py b/API-SERVICE/ApiList/meta/updateElsBizMeta.py index 495dbb91..145bd26b 100644 --- a/API-SERVICE/ApiList/meta/updateElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateElsBizMeta.py @@ -1,5 +1,5 @@ -import re from typing import Dict +from pydantic import BaseModel from Utils.CommonUtil import get_exception_info, connect_db, convert_data from ELKSearch.Manager.manager import ElasticSearchManager from ELKSearch.Utils.database_utils import get_config @@ -7,16 +7,20 @@ from ApiService.ApiServiceConfig import config -def api(biz_dataset_id: str) -> Dict: +class UpdateData(BaseModel): + biz_dataset_id: str + + +def api(input: UpdateData) -> Dict: els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] - query = f"SELECT * FROM v_biz_meta_info WHERE biz_dataset_id = {convert_data(biz_dataset_id)}" + query = f"SELECT * FROM v_biz_meta_info WHERE biz_dataset_id = {convert_data(input.biz_dataset_id)}" try: db = connect_db() es = ElasticSearchManager(**els_config) biz_data = db.select(query)[0][0] els_dict = data_process(biz_data) - es.insert(els_dict,biz_dataset_id) + es.insert(els_dict,input.biz_dataset_id) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} From 4311a0eace9f722cfadb5cf1026e0ceb68df3da7 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 13 Dec 2022 16:35:11 +0900 Subject: [PATCH 278/323] =?UTF-8?q?[AIPLATFORM-1308]=20fix:=20API=20update?= =?UTF-8?q?=20els=20=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 --- API-SERVICE/ApiList/meta/updateElsBizMeta.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/updateElsBizMeta.py b/API-SERVICE/ApiList/meta/updateElsBizMeta.py index 145bd26b..293cb8f7 100644 --- a/API-SERVICE/ApiList/meta/updateElsBizMeta.py +++ b/API-SERVICE/ApiList/meta/updateElsBizMeta.py @@ -19,8 +19,8 @@ def api(input: UpdateData) -> Dict: es = ElasticSearchManager(**els_config) biz_data = db.select(query)[0][0] - els_dict = data_process(biz_data) - es.insert(els_dict,input.biz_dataset_id) + els_dict = data_process(biz_data)["_source"] + es.conn.index(index=es.index,body=els_dict,id=input.biz_dataset_id) except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} From 510824508a0d54b6284bbfbe5b2bd3cd4958ec6e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 13 Dec 2022 17:23:42 +0900 Subject: [PATCH 279/323] =?UTF-8?q?[AIPLATFORM-1308]=20fix:=20send=20email?= =?UTF-8?q?=20config=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 | 4 ++-- API-SERVICE/send_email.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 8af0fb73..bdd8d238 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -14,7 +14,7 @@ port = 39200 index = biz_meta [email] -server_addr = mail.w.bigdata-car.kr +host = mail.w.bigdata-car.kr port = 587 login_user = admin@bigdata-car.kr -login_pass = admin@katech22 \ No newline at end of file +index = admin@katech22 \ No newline at end of file diff --git a/API-SERVICE/send_email.py b/API-SERVICE/send_email.py index 5ce972e8..a3d328c3 100644 --- a/API-SERVICE/send_email.py +++ b/API-SERVICE/send_email.py @@ -21,8 +21,8 @@ def main(): db = connect_db() send_list = select(db, query)[0] - from_addr = config.els_info["from_addr"] - host = config.els_info["server_addr"] + from_addr = "admin@bigdata-car.kr" + host = config.els_info["host"] port = config.els_info["port"] for email_info in send_list: @@ -55,7 +55,7 @@ def main(): # with smtplib.SMTP(host, port) as smtp: with smtplib.SMTP(host,port) as smtp: - smtp.login(config.els_info["login_user"],config.els_info["login_pass"]) + smtp.login(from_addr,config.els_info["index"]) smtp.send_message(message) except Exception as e: print(e) From 1f3477922f4bc2e85f82390ef073275068849768 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 15 Dec 2022 09:00:29 +0900 Subject: [PATCH 280/323] =?UTF-8?q?feat:=20common=20DB=20=EC=8A=A4?= =?UTF-8?q?=ED=82=A4=EB=A7=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/conf/common/config.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 90a2ceb1..fdd0642d 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -4,7 +4,7 @@ port = 25432 user = dpmanager password = hello.dp12#$ database = dataportal -schema = users,meta,sitemng,board,analysis,sysconfig +schema = users,meta,sitemng,board,analysis,sysconfig,ckan [commercial_db] host = 192.168.54.60 @@ -12,7 +12,7 @@ port = 5432 user = dpmanager password = hello.dp12#$ database = dataportal -schema = users,meta,sitemng,board,analysis,sysconfig +schema = users,meta,sitemng,board,analysis,sysconfig,ckan # commonLogin, commonLogout, commonRegister, commonToken, commonUserInfo [secret_info] From 259d7480bcaa61a6a4238b2b406a17e2ef6a12eb Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 16 Dec 2022 09:10:44 +0900 Subject: [PATCH 281/323] =?UTF-8?q?[AIPLATFORM-1328]=20feat:=20ckan=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20els=EC=97=90=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=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 --- .../ELKSearch/Utils/elasticsearch_utils.py | 18 ++++--- API-SERVICE/ELKSearch/conf/config.ini | 18 +++++-- API-SERVICE/els_update.py | 48 ++++++++++++++++--- 3 files changed, 67 insertions(+), 17 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index 3be29fff..0df0004d 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -43,15 +43,19 @@ def base_search_query(action: str, sub_action: str, item_list: list) -> Dict: return item_dict +def default_process(els_dict, data): + els_dict["_id"] = data["biz_dataset_id"] + els_dict["_source"] = data + els_dict["_source"]["biz_dataset_id"] = data["biz_dataset_id"] + return els_dict + def data_process(data): # D-Ocean Project Function els_dict = dict() - data["re_ctgry"] = re.sub("[ ]","",str(data["ctgry"])) - data["re_data_shap"] = re.sub("[ ]","",str(data["data_shap"])) - data["re_data_prv_desk"] = re.sub("[ ]","",str(data["data_prv_desk"])) + data["re_ctgry"] = re.sub("[ ]", "", str(data["ctgry"])) + data["re_data_shap"] = re.sub("[ ]", "", str(data["data_shap"])) + data["re_data_prv_desk"] = re.sub("[ ]", "", str(data["data_prv_desk"])) - els_dict["_id"] = data["biz_dataset_id"] - els_dict["_source"] = data - els_dict["_source"]["biz_dataset_id"] = data["biz_dataset_id"] - return els_dict \ No newline at end of file + els_dict = default_process(els_dict, data) + return els_dict diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index bdd8d238..22d85936 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -1,20 +1,30 @@ +# search API config [commercial] host = 10.10.20.59 port = 39200 -index = biz_meta [local] host = localhost port = 9200 -index = biz_meta [test] host = 192.168.101.44 port = 39200 -index = biz_meta +# email config [email] host = mail.w.bigdata-car.kr port = 587 login_user = admin@bigdata-car.kr -index = admin@katech22 \ No newline at end of file +index = admin@katech22 + +# els_update config +[meta] +host = 192.168.101.44 +port = 39200 +index = biz_meta + +[ckan] +host = 192.168.101.44 +port = 39200 +index = ckan_data \ No newline at end of file diff --git a/API-SERVICE/els_update.py b/API-SERVICE/els_update.py index b97a5c4a..825eaef7 100644 --- a/API-SERVICE/els_update.py +++ b/API-SERVICE/els_update.py @@ -4,18 +4,14 @@ from datetime import datetime from elasticsearch import helpers from ELKSearch.Utils.database_utils import prepare_config, connect_db, select, config -from ELKSearch.Utils.elasticsearch_utils import data_process +from ELKSearch.Utils.elasticsearch_utils import data_process, default_process root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) prepare_config(root_path) -def main(): +def insert_meta(db, es): bulk_meta_item = list() - prepare_config(root_path) - es = config.es - db = connect_db() - db_query = f"SELECT * FROM v_biz_meta_info WHERE status = 'D'" if config.check == "True": today = datetime.today().date() @@ -34,5 +30,45 @@ def main(): print(e) +def insert_ckan(db, es): + bulk_meta_item = list() + db_query = "SELECT biz_dataset_id, data_nm, data_desc, notes, reg_date, tags, updt_dt" \ + " FROM v_biz_meta_ckan" + + if config.check == "True": + today = datetime.today().date() + condition = f"WHERE (DATE(updt_dt) >= DATE('{today}')" \ + f"OR DATE(reg_date) >= DATE('{today}'))" + db_query = db_query + condition + + ckan_wrap_list = select(db, db_query)[0] + try: + for ckan in ckan_wrap_list: + els_dict = default_process(dict(), ckan) + bulk_meta_item.append(els_dict) + helpers.bulk(es.conn, bulk_meta_item, index=es.index) + except Exception as e: + print(e) + + +def main(): + """ + :param + config dir path: {project_path}/ELKSearch/config + --category=ckan|meta, elasticsearch config + --db_type=test|commercial , database config + --check=True|False, True=today False=All + :return: + """ + prepare_config(root_path) + es = config.es + db = connect_db() + + if config.category == "meta": + insert_meta(db, es) + else: + insert_ckan(db, es) + + if __name__ == "__main__": main() From d04c20d3685d2be3d3f61662d95a1b5d1dd8d27a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 16 Dec 2022 09:16:42 +0900 Subject: [PATCH 282/323] =?UTF-8?q?[AIPLATFORM-1328]=20feat:=20ckan=20data?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=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/getElsBizMetaList.py | 41 +--------- API-SERVICE/ApiList/meta/getElsCkanList.py | 77 +++++++++++++++++++ API-SERVICE/Utils/SearchUtils.py | 42 ++++++++++ API-SERVICE/conf/meta/api_config.ini | 5 ++ 4 files changed, 128 insertions(+), 37 deletions(-) create mode 100644 API-SERVICE/ApiList/meta/getElsCkanList.py create mode 100644 API-SERVICE/Utils/SearchUtils.py diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 1a5ca515..54120cfc 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -5,6 +5,7 @@ from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query from ELKSearch.Utils.database_utils import get_config from Utils.CommonUtil import get_exception_info +from Utils.SearchUtils import search_count from ApiService.ApiServiceConfig import config @@ -30,18 +31,9 @@ def extra_filter(option_list): def api(input: InputModel) -> Dict: - data_srttn = { - # search_keyword: (result_key, result_data) - "보유데이터": "hasCount", - "연동데이터": "innerCount", - "외부데이터": "externalCount", - "해외데이터": "overseaCount", - "전체": "totalCount", - } - data_dict = dict() from_ = input.from_ - 1 + index = "biz_meta" els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] - try: if input.chk and len(input.searchOption): with open( @@ -51,7 +43,7 @@ def api(input: InputModel) -> Dict: for search in input.searchOption: fp.write(f"{str(search.keywords)}\n") - es = ElasticSearchManager(page=from_, size=input.size, **els_config) + es = ElasticSearchManager(page=from_, size=input.size, index=index, **els_config) es.set_sort(input.sortOption) ############ search option ############ @@ -73,32 +65,7 @@ def api(input: InputModel) -> Dict: es.set_sort(sort_list) search_data = es.search(input.resultField) - # ############ data_srttn ############ - i = None - for j, item in enumerate(item_dict["filter"]): - if "data_srttn" in item["match"].keys(): - i = j - break - else: - i = None - - for ko_nm, eng_nm in data_srttn.items(): - if i is None: - cnt_query = make_query( - "match", "data_srttn", {"operator": "OR", "query": ko_nm} - ) - item_dict["filter"].append(cnt_query) - i = -1 - else: - item_dict["filter"][i]["match"]["data_srttn"]["query"] = ko_nm - - if ko_nm == "전체": - 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 + data_dict = search_count(es, item_dict, query_dict) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py new file mode 100644 index 00000000..004f68be --- /dev/null +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -0,0 +1,77 @@ +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 +from ELKSearch.Utils.database_utils import get_config +from Utils.CommonUtil import get_exception_info +from Utils.SearchUtils import search_count +from ApiService.ApiServiceConfig import config + + +def extra_filter(option_list): + els_katech_option = ["ctgry", "data_shap", "data_prv_desk"] + for item in option_list: + for col in els_katech_option: + if col in item.field: + item.field.append(f"re_{col}") + index = item.field.index(col) + del item.field[index] + item.keywords = [v.replace(" ", "") for v in item.keywords] + + tmp = [] + for field in item.field: + tmp.append(field) + if field in ["data_nm", "data_desc"]: + col = field + ".korean_analyzer" + tmp.append(col) + item.field = tmp + + return option_list + + +def api(input: InputModel) -> Dict: + from_ = input.from_ - 1 + els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] + index = "ckan_data" + 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) + + ############ search option ############ + action = "query" + sub_action = "must" + query_dict = base_search_query(action, sub_action, input.searchOption) + + # ############ filter option ############ + sub_action = "filter" + input.filterOption = extra_filter(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) + es.body.update(search_query) + + # ############ sort option ############ + sort_list = [{item.field: item.order} for item in input.sortOption] + es.set_sort(sort_list) + search_data = es.search(input.resultField) + + data_dict = search_count(es, item_dict, query_dict) + + 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/Utils/SearchUtils.py b/API-SERVICE/Utils/SearchUtils.py new file mode 100644 index 00000000..fb1a916f --- /dev/null +++ b/API-SERVICE/Utils/SearchUtils.py @@ -0,0 +1,42 @@ +from ELKSearch.Utils.elasticsearch_utils import make_query + + +def search_count(es, item_dict, query_dict): + data_dict = dict() + data_srttn = { + # search_keyword: (result_key, result_data) + "보유데이터": "hasCount", + "연동데이터": "innerCount", + "외부데이터": "externalCount", + "해외데이터": "overseaCount", + "전체": "totalCount", + } + + # ############ data_srttn ############ + i = None + for j, item in enumerate(item_dict["filter"]): + if "data_srttn" in item["match"].keys(): + i = j + break + else: + i = None + + for ko_nm, eng_nm in data_srttn.items(): + if i is None: + cnt_query = make_query( + "match", "data_srttn", {"operator": "OR", "query": ko_nm} + ) + item_dict["filter"].append(cnt_query) + i = -1 + else: + item_dict["filter"][i]["match"]["data_srttn"]["query"] = ko_nm + + if ko_nm == "전체": + 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 + + return data_dict \ No newline at end of file diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 5042e393..d8b2ba32 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -51,4 +51,9 @@ sub_dir = meta [updateElsBizMeta] method = POST url = /portal/api/meta/updateElsBizMeta +sub_dir = meta + +[getElsCkanList] +method = POST +url = /portal/api/meta/getElsCkanList sub_dir = meta \ No newline at end of file From 118fafbcbf778dfe8e5a0bf3c9d66c39b8d43dc2 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 16 Dec 2022 13:47:02 +0900 Subject: [PATCH 283/323] =?UTF-8?q?[AIPLATFORM-1328]=20chore:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=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/getElsBizMetaList.py | 2 +- API-SERVICE/ApiList/meta/getElsCkanList.py | 2 +- API-SERVICE/Utils/__init__.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 54120cfc..9c12799a 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -5,7 +5,7 @@ from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query from ELKSearch.Utils.database_utils import get_config from Utils.CommonUtil import get_exception_info -from Utils.SearchUtils import search_count +from Utils.SearchUtil import search_count from ApiService.ApiServiceConfig import config diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index 004f68be..89bd4167 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -5,7 +5,7 @@ from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query from ELKSearch.Utils.database_utils import get_config from Utils.CommonUtil import get_exception_info -from Utils.SearchUtils import search_count +from Utils.SearchUtil import search_count from ApiService.ApiServiceConfig import config diff --git a/API-SERVICE/Utils/__init__.py b/API-SERVICE/Utils/__init__.py index 3b5ce1cc..df673ad5 100644 --- a/API-SERVICE/Utils/__init__.py +++ b/API-SERVICE/Utils/__init__.py @@ -1 +1,2 @@ from .CommonUtil import * +from .SearchUtil import * \ No newline at end of file From 932176676da6dd71bc8795e1973c7eac97690b0e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 16 Dec 2022 13:47:21 +0900 Subject: [PATCH 284/323] =?UTF-8?q?[AIPLATFORM-1328]=20chore:=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getElsCkanList.py | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index 89bd4167..74914343 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -9,27 +9,6 @@ from ApiService.ApiServiceConfig import config -def extra_filter(option_list): - els_katech_option = ["ctgry", "data_shap", "data_prv_desk"] - for item in option_list: - for col in els_katech_option: - if col in item.field: - item.field.append(f"re_{col}") - index = item.field.index(col) - del item.field[index] - item.keywords = [v.replace(" ", "") for v in item.keywords] - - tmp = [] - for field in item.field: - tmp.append(field) - if field in ["data_nm", "data_desc"]: - col = field + ".korean_analyzer" - tmp.append(col) - item.field = tmp - - return option_list - - def api(input: InputModel) -> Dict: from_ = input.from_ - 1 els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] @@ -53,7 +32,6 @@ def api(input: InputModel) -> Dict: # ############ filter option ############ sub_action = "filter" - input.filterOption = extra_filter(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) From 9c75056bb7008c72606a04daef30d0c585571fd8 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 16 Dec 2022 13:48:09 +0900 Subject: [PATCH 285/323] =?UTF-8?q?[AIPLATFORM-1328]=20feat:=20=ED=95=B4?= =?UTF-8?q?=EC=99=B8=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B9=B4=EC=9A=B4?= =?UTF-8?q?=ED=8C=85=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95,=20ckan=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EC=97=90=EB=8A=94=20data=5Fsrttn?= =?UTF-8?q?=EA=B0=80=20=EC=97=86=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/Utils/{SearchUtils.py => SearchUtil.py} | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) rename API-SERVICE/Utils/{SearchUtils.py => SearchUtil.py} (79%) diff --git a/API-SERVICE/Utils/SearchUtils.py b/API-SERVICE/Utils/SearchUtil.py similarity index 79% rename from API-SERVICE/Utils/SearchUtils.py rename to API-SERVICE/Utils/SearchUtil.py index fb1a916f..4b964185 100644 --- a/API-SERVICE/Utils/SearchUtils.py +++ b/API-SERVICE/Utils/SearchUtil.py @@ -1,4 +1,4 @@ -from ELKSearch.Utils.elasticsearch_utils import make_query +from ELKSearch.Utils.elasticsearch_utils import make_query def search_count(es, item_dict, query_dict): @@ -34,9 +34,16 @@ def search_count(es, item_dict, query_dict): if ko_nm == "전체": del item_dict["filter"][i] + if ko_nm == "해외데이터": + index = "ckan_data" + del item_dict["filter"][i] + i = None + else: + index = "biz_meta" + 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 = es.conn.count(index=index, body=cnt_query)["count"] data_dict[eng_nm] = cnt return data_dict \ No newline at end of file From e7bf56fe32c4e12f00810800d728d8d52095dc86 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 19 Dec 2022 09:00:10 +0900 Subject: [PATCH 286/323] =?UTF-8?q?[AIPLATFORM-1328]=20feat:=20=ED=95=B4?= =?UTF-8?q?=EC=99=B8=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B9=B4=EC=9A=B4?= =?UTF-8?q?=ED=8C=85=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95,=20ckan=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EC=97=90=EB=8A=94=20data=5Fsrttn?= =?UTF-8?q?=EA=B0=80=20=EC=97=86=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getElsCkanList.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index 74914343..6e415e17 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -9,6 +9,7 @@ from ApiService.ApiServiceConfig import config +# todo: filterOption에 data srttn 해외데이터 삭제해야함 def api(input: InputModel) -> Dict: from_ = input.from_ - 1 els_config = get_config(config.root_path, "config.ini")[config.db_type[:-3]] @@ -32,6 +33,7 @@ def api(input: InputModel) -> Dict: # ############ filter option ############ sub_action = "filter" + del input.filterOption[0] item_dict = base_search_query(action, sub_action, input.filterOption) query_dict.update(item_dict) search_query = make_query(action, "bool", query_dict) From 592b5a0f6f45d1d46fb352b1b627d1a79c9a7214 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 19 Dec 2022 09:59:50 +0900 Subject: [PATCH 287/323] =?UTF-8?q?[AIPLATFORM-1328]=20feat:=ED=95=B4?= =?UTF-8?q?=EC=99=B8=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=EB=A7=81=20=EC=B2=98=EB=A6=AC=20=EA=B5=AC?= =?UTF-8?q?=EB=AC=B8=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/getElsCkanList.py | 10 ++------ API-SERVICE/Utils/SearchUtil.py | 27 +++++++++++----------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index 74914343..fae4d5c3 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -7,6 +7,7 @@ from Utils.CommonUtil import get_exception_info from Utils.SearchUtil import search_count from ApiService.ApiServiceConfig import config +from fastapi.logger import logger def api(input: InputModel) -> Dict: @@ -30,19 +31,12 @@ def api(input: InputModel) -> Dict: sub_action = "must" query_dict = base_search_query(action, sub_action, input.searchOption) - # ############ filter option ############ - 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 option ############ sort_list = [{item.field: item.order} for item in input.sortOption] es.set_sort(sort_list) search_data = es.search(input.resultField) - data_dict = search_count(es, item_dict, query_dict) + data_dict = search_count(es, {'filter': []}, query_dict) except Exception: except_name = get_exception_info() diff --git a/API-SERVICE/Utils/SearchUtil.py b/API-SERVICE/Utils/SearchUtil.py index 4b964185..1fc5cb26 100644 --- a/API-SERVICE/Utils/SearchUtil.py +++ b/API-SERVICE/Utils/SearchUtil.py @@ -8,8 +8,8 @@ def search_count(es, item_dict, query_dict): "보유데이터": "hasCount", "연동데이터": "innerCount", "외부데이터": "externalCount", - "해외데이터": "overseaCount", "전체": "totalCount", + "해외데이터": "overseaCount" } # ############ data_srttn ############ @@ -22,24 +22,23 @@ def search_count(es, item_dict, query_dict): i = None for ko_nm, eng_nm in data_srttn.items(): - if i is None: - cnt_query = make_query( - "match", "data_srttn", {"operator": "OR", "query": ko_nm} - ) - item_dict["filter"].append(cnt_query) - i = -1 - else: - item_dict["filter"][i]["match"]["data_srttn"]["query"] = ko_nm - - if ko_nm == "전체": - del item_dict["filter"][i] - if ko_nm == "해외데이터": index = "ckan_data" - del item_dict["filter"][i] + item_dict["filter"] = [] i = None else: index = "biz_meta" + if i is None: + cnt_query = make_query( + "match", "data_srttn", {"operator": "OR", "query": ko_nm} + ) + item_dict["filter"].append(cnt_query) + i = -1 + else: + item_dict["filter"][i]["match"]["data_srttn"]["query"] = ko_nm + + if ko_nm == "전체": + del item_dict["filter"][i] query_dict.update(item_dict) cnt_query = make_query("query", "bool", query_dict) From f8cfe00688f1bf00a7869c5b4ec626ac6e2fb750 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 19 Dec 2022 10:15:34 +0900 Subject: [PATCH 288/323] =?UTF-8?q?fix:=20class=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EA=B7=9C=EC=B9=99=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/emailAthnCnfm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/common/emailAthnCnfm.py b/API-SERVICE/ApiList/common/emailAthnCnfm.py index 0dc94fd5..032b0f9d 100644 --- a/API-SERVICE/ApiList/common/emailAthnCnfm.py +++ b/API-SERVICE/ApiList/common/emailAthnCnfm.py @@ -8,12 +8,12 @@ class EmailAuthFail(Exception): pass -class emailAthnCnfm(BaseModel): +class EmailAthnCnfm(BaseModel): email: str athn_no: str -def api(email_confirm: emailAthnCnfm) -> Dict: +def api(email_confirm: EmailAthnCnfm) -> Dict: try: db = connect_db() email_info, _ = db.select( From b980b085851372ce31ac394c695dccd15f29a771 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 19 Dec 2022 10:33:50 +0900 Subject: [PATCH 289/323] =?UTF-8?q?feat:=20=ED=81=B4=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EC=96=B8=ED=8A=B8=20IP=20=EC=B6=9C=EB=A0=A5=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 --- API-ROUTER/ApiRoute/ApiRoute.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/API-ROUTER/ApiRoute/ApiRoute.py b/API-ROUTER/ApiRoute/ApiRoute.py index 84fe5f32..0668ac7b 100644 --- a/API-ROUTER/ApiRoute/ApiRoute.py +++ b/API-ROUTER/ApiRoute/ApiRoute.py @@ -53,6 +53,9 @@ def set_route(self) -> None: self.router.add_api_route( "/api/reload", self.reload_api, methods=["GET"], tags=["API Info Reload"] ) + self.router.add_api_route( + "/route/common/me", self.get_client_ip, methods=["GET"] + ) db = connect_db() config.api_info, _ = db.select("SELECT * FROM tb_api_info;") @@ -83,6 +86,9 @@ def set_route(self) -> None: tags=["service"], ) + def get_client_ip(self, request: Request): + return {"result": 1, "errorMessage": "", "data": request.scope["client"][0]} + def reload_api(self): logger.info("Reload API Info") save_file_for_reload() From 89d2d1a4c9943c06bac441feef5acc2541cad2f0 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 16 Jan 2023 14:15:00 +0900 Subject: [PATCH 290/323] =?UTF-8?q?fix:=20=EC=9D=B4=EB=A9=94=EC=9D=BC?= =?UTF-8?q?=EC=86=A1=EC=8B=A0=20=EA=B4=80=EB=A0=A8=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=20=EC=9E=84=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/Utils/database_utils.py | 3 +- API-SERVICE/Utils/CommonUtil.py | 45 +++++++++++++------ API-SERVICE/send_email.py | 40 +++++------------ 3 files changed, 46 insertions(+), 42 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/database_utils.py b/API-SERVICE/ELKSearch/Utils/database_utils.py index e08d7411..f19188d9 100644 --- a/API-SERVICE/ELKSearch/Utils/database_utils.py +++ b/API-SERVICE/ELKSearch/Utils/database_utils.py @@ -56,7 +56,8 @@ def prepare_config(root_path) -> None: config.els_type = args.category config.els_info = els_config[args.category] - config.es = ElasticSearchManager(**config.els_info) + if config.category != "email": + config.es = ElasticSearchManager(**config.els_info) config.check = args.check config.db_type = f"{args.db_type}_db" diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index d5ac26f2..f5245252 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -32,20 +32,37 @@ def insert_mail_history(rcv_adr: str, title: str, contents: str, tmplt_cd: str): def send_template_mail(replace_text, receiver_addr, msg_type): - message = MIMEMultipart("alternative") - message["Subject"] = config.email_auth[f"subject_{msg_type}"] - message["From"] = config.email_auth["login_user"] - message["To"] = receiver_addr - html_part = template_html(msg_type, replace_text) - message.attach(html_part) + send_mail( + html_part, + subject=config.email_auth[f"subject_{msg_type}"], + from_=config.email_auth["login_user"], + to_=receiver_addr, + ) + - stmp = smtplib.SMTP(host=config.email_auth["server_addr"], port=int(config.email_auth["port"])) - stmp.ehlo() - stmp.starttls() - stmp.login(config.email_auth["login_user"], config.email_auth["login_pass"]) - stmp.send_message(message) - stmp.quit() +def send_mail(msg, **kwargs): + try: + els_config = kwargs["config"] if "config" in kwargs else {} + host = kwargs.pop("email_server_host", "mail.w.bigdata-car.kr") + port = kwargs.pop("email_server_port", 587) + from_ = kwargs.pop("from_", ) + password = els_config.pop("index", "") + + message = MIMEMultipart("alternative") + message["Subject"] = kwargs.pop("subject", "") + message["From"] = from_ + message["To"] = kwargs.pop("to_", "") + message.attach(msg) + + stmp = smtplib.SMTP(host=host, port=port) + stmp.ehlo() + stmp.starttls() + stmp.login(from_, password) + stmp.send_message(message) + stmp.quit() + except Exception as e: + raise e def template_html(msg_type, msg): @@ -74,7 +91,9 @@ 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", diff --git a/API-SERVICE/send_email.py b/API-SERVICE/send_email.py index a3d328c3..24b3ab6a 100644 --- a/API-SERVICE/send_email.py +++ b/API-SERVICE/send_email.py @@ -1,9 +1,9 @@ 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 +from pathlib import Path + +from ELKSearch.Utils.database_utils import connect_db, select, execute, config, prepare_config +from Utils import send_mail root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) prepare_config(root_path) @@ -21,49 +21,33 @@ def main(): db = connect_db() send_list = select(db, query)[0] - from_addr = "admin@bigdata-car.kr" - host = config.els_info["host"] - port = config.els_info["port"] - for email_info in send_list: try: - if email_info["tmplt_cd"] == "share": - share_chk = 1 - subject = "[자동차데이터포털] 자동차데이터포털에서 공유한 데이터입니다." - else: - share_chk = 0 - subject = f"[자동차데이터포털] {email_info['title']} 신청 메일 입니다." - message = MIMEMultipart("alternative") - message["Subject"] = subject - message["From"] = from_addr - message["To"] = email_info['rcv_adr'] - - with open(f'{config.root_path}/conf/sitemng/template/{email_info["tmplt_cd"]}Email.html', "r") as fd: + with open(f'{root_path}/conf/sitemng/template/{email_info["tmplt_cd"]}Email.html', "r") as fd: html = "\n".join(fd.readlines()) - if share_chk: + if email_info["tmplt_cd"] == "share": + subject = "[자동차데이터포털] 자동차데이터포털에서 공유한 데이터입니다." html = html.replace("URL", email_info['contents']) else: + subject = f"[자동차데이터포털] {email_info['title']} 신청 메일 입니다." content = email_info["contents"].split("|") html = html.replace("TITLE", email_info['title']) html = html.replace("CONTENTS1", content[0]) html = html.replace("CONTENTS2", content[1]) + print(html) html_part = MIMEText(html, "html") - message.attach(html_part) - - # with smtplib.SMTP(host, port) as smtp: - with smtplib.SMTP(host,port) as smtp: - smtp.login(from_addr,config.els_info["index"]) - smtp.send_message(message) + send_mail(html_part, subject=subject, from_=config.els_info["login_user"], + to_=email_info['rcv_adr'], config=config.els_info) except Exception as e: print(e) else: # update status query = f"UPDATE tb_email_send_info SET sttus = 'SEND'" \ f"WHERE email_id = '{email_info['email_id']}'" - execute(db,db.cursor(),query) + execute(db, db.cursor(), query) if __name__ == "__main__": From 42bdbc0b2754653c101a4208bc8be52b1b667861 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 18 Jan 2023 16:15:20 +0900 Subject: [PATCH 291/323] =?UTF-8?q?fix:=20=EC=9D=B4=EB=A9=94=EC=9D=BC?= =?UTF-8?q?=EC=86=A1=EC=8B=A0=20=EA=B4=80=EB=A0=A8=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ELKSearch/conf/config.ini | 7 ---- API-SERVICE/Utils/CommonUtil.py | 13 +++---- .../{send_email.py => Utils/batch_email.py} | 37 +++++++------------ API-SERVICE/requirements.txt | 4 ++ API-SERVICE/server.py | 7 ++++ 5 files changed, 30 insertions(+), 38 deletions(-) rename API-SERVICE/{send_email.py => Utils/batch_email.py} (62%) diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 22d85936..56cfcb0b 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -11,13 +11,6 @@ port = 9200 host = 192.168.101.44 port = 39200 -# email config -[email] -host = mail.w.bigdata-car.kr -port = 587 -login_user = admin@bigdata-car.kr -index = admin@katech22 - # els_update config [meta] host = 192.168.101.44 diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index f5245252..0476f4e2 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,4 +1,6 @@ import uuid +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText from pytz import timezone import os @@ -14,8 +16,6 @@ from pathlib import Path from psycopg2 import pool import smtplib -from email.mime.text import MIMEText -from email.mime.multipart import MIMEMultipart from ConnectManager import PostgresManager from ApiService.ApiServiceConfig import config @@ -43,11 +43,10 @@ def send_template_mail(replace_text, receiver_addr, msg_type): def send_mail(msg, **kwargs): try: - els_config = kwargs["config"] if "config" in kwargs else {} - host = kwargs.pop("email_server_host", "mail.w.bigdata-car.kr") - port = kwargs.pop("email_server_port", 587) - from_ = kwargs.pop("from_", ) - password = els_config.pop("index", "") + host = kwargs.pop("email_server_host", config.email_auth.get("server_addr")) + port = kwargs.pop("email_server_port", config.email_auth.get("port")) + from_ = kwargs.pop("from_", config.email_auth.get("login_user")) + password = kwargs.pop("password", config.email_auth.get("login_pass")) message = MIMEMultipart("alternative") message["Subject"] = kwargs.pop("subject", "") diff --git a/API-SERVICE/send_email.py b/API-SERVICE/Utils/batch_email.py similarity index 62% rename from API-SERVICE/send_email.py rename to API-SERVICE/Utils/batch_email.py index 24b3ab6a..64e8b1f6 100644 --- a/API-SERVICE/send_email.py +++ b/API-SERVICE/Utils/batch_email.py @@ -1,30 +1,24 @@ -import os from email.mime.text import MIMEText -from pathlib import Path -from ELKSearch.Utils.database_utils import connect_db, select, execute, config, prepare_config +from ApiService.ApiServiceConfig import config +from Utils.CommonUtil import connect_db from Utils import send_mail -root_path = str(Path(os.path.dirname(os.path.abspath(__file__)))) -prepare_config(root_path) - - -def main(): - """ - :argument - category = email - db_type = email_db - """ +def get_recv_list(): # batch 1분에 한번씩 email을 전송하고 status를 req에서 send로 변경한다 query = "SELECT * FROM tb_email_send_info WHERE sttus = 'REQ'" db = connect_db() - send_list = select(db, query)[0] + send_list, _ = db.select(query) + return send_list - for email_info in send_list: +def email_handler(): + send_list = get_recv_list() + print(send_list) + for email_info in send_list: try: - with open(f'{root_path}/conf/sitemng/template/{email_info["tmplt_cd"]}Email.html', "r") as fd: + with open(f'{config.root_path}/conf/sitemng/template/{email_info["tmplt_cd"]}Email.html', "r") as fd: html = "\n".join(fd.readlines()) if email_info["tmplt_cd"] == "share": @@ -37,18 +31,13 @@ def main(): html = html.replace("CONTENTS1", content[0]) html = html.replace("CONTENTS2", content[1]) - print(html) html_part = MIMEText(html, "html") - send_mail(html_part, subject=subject, from_=config.els_info["login_user"], - to_=email_info['rcv_adr'], config=config.els_info) + send_mail(html_part, subject=subject, to_=email_info['rcv_adr']) except Exception as e: print(e) else: # update status query = f"UPDATE tb_email_send_info SET sttus = 'SEND'" \ f"WHERE email_id = '{email_info['email_id']}'" - execute(db, db.cursor(), query) - - -if __name__ == "__main__": - main() + db = connect_db() + db.execute(query) diff --git a/API-SERVICE/requirements.txt b/API-SERVICE/requirements.txt index e6b7c555..f269d1e6 100644 --- a/API-SERVICE/requirements.txt +++ b/API-SERVICE/requirements.txt @@ -1,6 +1,7 @@ aiohttp==3.8.3 aiosignal==1.2.0 anyio==3.6.2 +APScheduler==3.9.1.post1 asgiref==3.5.2 async-timeout==4.0.2 asyncssh==2.12.0 @@ -32,6 +33,7 @@ PyJWT==2.6.0 PyNaCl==1.5.0 python-jose==3.3.0 pytz==2022.5 +pytz-deprecation-shim==0.1.0.post0 requests==2.27.1 retry==0.9.2 rsa==4.9 @@ -39,6 +41,8 @@ six==1.16.0 sniffio==1.3.0 starlette==0.17.1 typing_extensions==4.4.0 +tzdata==2022.7 +tzlocal==4.2 urllib3==1.26.12 uvicorn==0.16.0 yarl==1.8.1 diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index ee257188..87302b5c 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -1,3 +1,4 @@ +from apscheduler.schedulers.background import BackgroundScheduler from fastapi import FastAPI import uvicorn from ApiService.ApiServiceConfig import config @@ -10,6 +11,12 @@ app = FastAPI() app.include_router(api_router.router) + +from Utils.batch_email import email_handler +scheduler = BackgroundScheduler() +scheduler.add_job(email_handler, "interval", seconds=10) +scheduler.start() + if __name__ == "__main__": log_dir = f"{config.root_path}/log/{config.category}" if os.path.isdir(log_dir): From 58293595bc610ec6366aedc120c97d97ac3d2fed Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Thu, 19 Jan 2023 13:43:21 +0900 Subject: [PATCH 292/323] =?UTF-8?q?fix:=20email=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD,=20=EC=8A=A4=EC=BC=80=EC=A4=84=EB=9F=AC=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=EC=83=9D=EC=84=B1=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/Utils/CommonUtil.py | 22 +++++++++++----------- API-SERVICE/conf/common/config.ini | 4 ++-- API-SERVICE/server.py | 21 ++++++++++++++------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 0476f4e2..37e649e4 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -1,24 +1,24 @@ +import argparse +import configparser +import os +import smtplib +import sys +import traceback import uuid +from datetime import datetime, timedelta from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText +from pathlib import Path +from typing import Any, Optional, Dict -from pytz import timezone -import os -import configparser -import argparse import jwt -import sys -import traceback -from datetime import datetime, timedelta from fastapi.logger import logger -from typing import Any, Optional, Dict from passlib.context import CryptContext -from pathlib import Path from psycopg2 import pool -import smtplib +from pytz import timezone -from ConnectManager import PostgresManager from ApiService.ApiServiceConfig import config +from ConnectManager import PostgresManager def insert_mail_history(rcv_adr: str, title: str, contents: str, tmplt_cd: str): diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index fdd0642d..9e8956a0 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -35,7 +35,7 @@ auth_no_len = 10 subject_register = [자동차데이터포털]회원가입을 위한 인증 메일입니다. subject_password = [자동차데이터포털]비밀번호 변경을 위한 인증 메일입니다. subject_share = [자동차데이터포털] 자동차데이터포털에서 공유한 데이터입니다. -server_addr = mail.w.bigdata-car.kr +server_addr = smtp.office365.com port = 587 login_user = admin@bigdata-car.kr -login_pass = admin@katech22 \ No newline at end of file +login_pass = Pas07054354@katech! \ No newline at end of file diff --git a/API-SERVICE/server.py b/API-SERVICE/server.py index 87302b5c..47a5b0dc 100644 --- a/API-SERVICE/server.py +++ b/API-SERVICE/server.py @@ -1,10 +1,13 @@ +import os + +import uvicorn from apscheduler.schedulers.background import BackgroundScheduler from fastapi import FastAPI -import uvicorn + +from ApiService import ApiService from ApiService.ApiServiceConfig import config from Utils.CommonUtil import prepare_config, set_log_path -from ApiService import ApiService -import os + prepare_config() api_router = ApiService() @@ -12,10 +15,14 @@ app.include_router(api_router.router) -from Utils.batch_email import email_handler -scheduler = BackgroundScheduler() -scheduler.add_job(email_handler, "interval", seconds=10) -scheduler.start() +@app.on_event("startup") +async def startup(): + if config.category == "common": + from Utils import batch_email + scheduler = BackgroundScheduler() + scheduler.add_job(batch_email.email_handler, "interval", seconds=5, id="sender") + scheduler.start() + if __name__ == "__main__": log_dir = f"{config.root_path}/log/{config.category}" From eb61939c6765fcf4851f3e223f31ef28810d6494 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 29 Mar 2023 16:25:31 +0900 Subject: [PATCH 293/323] =?UTF-8?q?[AIPLATFORM-1536]=20fix:=20updt=5Fdt=20?= =?UTF-8?q?=EB=82=A0=EC=A7=9C=20=ED=8F=AC=EB=A7=B7=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/ELKSearch/Utils/elasticsearch_utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index 0df0004d..d2f367c7 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -1,5 +1,6 @@ import re from typing import Dict, Any +from datetime import datetime def is_space(text: str) -> int: @@ -56,6 +57,8 @@ def data_process(data): data["re_ctgry"] = re.sub("[ ]", "", str(data["ctgry"])) data["re_data_shap"] = re.sub("[ ]", "", str(data["data_shap"])) data["re_data_prv_desk"] = re.sub("[ ]", "", str(data["data_prv_desk"])) + if len(data["updt_dt"]) > 26: + data["updt_dt"] = datetime.strptime(data["updt_dt"][:-3], "%Y-%m-%d %H:%M:%S.%f") els_dict = default_process(els_dict, data) return els_dict From 03973b171506b6b4fa3da465180d5cb4a81f108e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 12 Apr 2023 10:06:22 +0900 Subject: [PATCH 294/323] =?UTF-8?q?[AIPLATFORM-1560]=20feat:=20=ED=95=9C?= =?UTF-8?q?=EC=9E=90=EC=97=B0=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20ela?= =?UTF-8?q?sticsearch=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiList/meta/updateElsBizMetaBulk.py | 30 +++++++++++++++++++ .../ELKSearch/Utils/elasticsearch_utils.py | 4 ++- API-SERVICE/conf/meta/api_config.ini | 5 ++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py diff --git a/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py b/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py new file mode 100644 index 00000000..81a62566 --- /dev/null +++ b/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py @@ -0,0 +1,30 @@ +from typing import Dict +from elasticsearch import helpers +from Utils.CommonUtil import get_exception_info, connect_db +from ELKSearch.Manager.manager import ElasticSearchManager +from ELKSearch.Utils.database_utils import get_config +from ELKSearch.Utils.elasticsearch_utils import data_process +from ApiService.ApiServiceConfig import config + + +def api() -> Dict: + els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] + bulk_meta_item = list() + db_query = f"SELECT * FROM v_biz_meta_info WHERE status = 'D'" + + try: + db = connect_db() + es = ElasticSearchManager(**els_config) + + meta_wrap_list = db.select(db_query)[0] + for meta_wrap in meta_wrap_list: + els_dict = data_process(meta_wrap) + bulk_meta_item.append(els_dict) + helpers.bulk(es.conn, bulk_meta_item, index=es.index) + + 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/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index d2f367c7..fef41996 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -57,7 +57,9 @@ def data_process(data): data["re_ctgry"] = re.sub("[ ]", "", str(data["ctgry"])) data["re_data_shap"] = re.sub("[ ]", "", str(data["data_shap"])) data["re_data_prv_desk"] = re.sub("[ ]", "", str(data["data_prv_desk"])) - if len(data["updt_dt"]) > 26: + + # test 환경에서 updt_dt가 None값인 경우가 있음 + if "updt_dt" in data.keys() and data["updt_dt"] and len(data["updt_dt"]) > 26: data["updt_dt"] = datetime.strptime(data["updt_dt"][:-3], "%Y-%m-%d %H:%M:%S.%f") els_dict = default_process(els_dict, data) diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index d8b2ba32..2823a351 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -56,4 +56,9 @@ sub_dir = meta [getElsCkanList] method = POST url = /portal/api/meta/getElsCkanList +sub_dir = meta + +[updateElsBizMetaBulk] +method = POST +url = /portal/api/meta/updateElsBizMetaBulk sub_dir = meta \ No newline at end of file From b9d526d37c83e58ae88d1c1d308658368d8656e9 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Mon, 26 Jun 2023 10:50:10 +0900 Subject: [PATCH 295/323] =?UTF-8?q?feat:=20commonRegister=20keycloak=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=EC=B4=88=EA=B8=B0=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/commonRegister.py | 30 ++- API-SERVICE/ApiService/ApiServiceConfig.py | 2 + API-SERVICE/Utils/CommonUtil.py | 10 +- API-SERVICE/Utils/keycloak.py | 246 ++++++++++++++++++ API-SERVICE/conf/common/config.ini | 8 +- common_libs/libs/__init__.py | 0 common_libs/libs/database/__init__.py | 0 common_libs/libs/database/connector.py | 42 +++ common_libs/libs/database/models.py | 159 ++++++++++++ common_libs/libs/database/orm.py | 253 +++++++++++++++++++ common_libs/libs/database/tibero.py | 230 +++++++++++++++++ common_libs/libs/logging_temp.py | 7 + 12 files changed, 978 insertions(+), 9 deletions(-) create mode 100644 API-SERVICE/Utils/keycloak.py create mode 100644 common_libs/libs/__init__.py create mode 100644 common_libs/libs/database/__init__.py create mode 100644 common_libs/libs/database/connector.py create mode 100644 common_libs/libs/database/models.py create mode 100644 common_libs/libs/database/orm.py create mode 100644 common_libs/libs/database/tibero.py create mode 100644 common_libs/libs/logging_temp.py diff --git a/API-SERVICE/ApiList/common/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py index 223a5abf..08ce5c19 100644 --- a/API-SERVICE/ApiList/common/commonRegister.py +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -1,7 +1,7 @@ from typing import Dict from pydantic import BaseModel from fastapi.logger import logger -from Utils.CommonUtil import connect_db, get_exception_info, convert_data +from Utils.CommonUtil import connect_db, get_exception_info, convert_data, get_keycloak_manager from ApiService.ApiServiceConfig import config @@ -15,17 +15,37 @@ def make_register_query(register: commonRegister): # at 221109 by seokwoo-yang, password 평문 필요 요청 register.data["user_normal"] = register.data[password_column] - register.data[password_column] = config.pwd_context.hash( - register.data[password_column] - ) + register.data[password_column] = config.pwd_context.hash(register.data[password_column]) columns = ", ".join(register.data.keys()) values = ", ".join(map(convert_data, register.data.values())) query = f"INSERT INTO {user_info_table} ({columns}) VALUES ({values});" return query -def api(register: commonRegister) -> Dict: +async def api(register: commonRegister) -> Dict: try: + res = await get_keycloak_manager().generate_admin_token( + username=config.keycloak_info["admin_username"], + password=config.keycloak_info["admin_password"], + grant_type="password", + ) + admin_token = res.get("data").get("access_token") + + reg_data = { + "username": register.data["user_id"], + "firstName": register.data["user_nm"], + "email": register.data["email"], + "emailVerified": True, + "enabled": True, + "credentials": [{"value": register.data["user_password"]}], + "attributes": register.data, + } + print(config.keycloak_info["realm"]) + res = await get_keycloak_manager().create_user( + token=admin_token, realm=config.keycloak_info["realm"], **reg_data + ) + print(res) + query = make_register_query(register) db = connect_db() diff --git a/API-SERVICE/ApiService/ApiServiceConfig.py b/API-SERVICE/ApiService/ApiServiceConfig.py index 9336d4fb..65a2601c 100644 --- a/API-SERVICE/ApiService/ApiServiceConfig.py +++ b/API-SERVICE/ApiService/ApiServiceConfig.py @@ -25,5 +25,7 @@ class ApiServiceConfig: conn_pool: pool.SimpleConnectionPool + keycloak_info: Dict + config = ApiServiceConfig diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 37e649e4..615193d6 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -10,6 +10,7 @@ from email.mime.text import MIMEText from pathlib import Path from typing import Any, Optional, Dict +from Utils.keycloak import KeycloakManager import jwt from fastapi.logger import logger @@ -90,9 +91,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", @@ -144,6 +143,11 @@ def prepare_config() -> None: config.user_info = api_router_cfg["user_info"] config.pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") config.email_auth = api_router_cfg["email_auth"] + config.keycloak_info = api_router_cfg["keycloak_info"] + + +def get_keycloak_manager(): + return KeycloakManager(config.keycloak_info["keycloak_url"]) def make_connection_pool(db_info): diff --git a/API-SERVICE/Utils/keycloak.py b/API-SERVICE/Utils/keycloak.py new file mode 100644 index 00000000..c5759d75 --- /dev/null +++ b/API-SERVICE/Utils/keycloak.py @@ -0,0 +1,246 @@ +from typing import Any, Dict, List +import logging +import aiohttp +import urllib.parse + +logger = logging.getLogger() + + +class KeycloakManager: + _instance = None + + def __new__(cls, *args, **kwargs): + if not cls._instance: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__(self, base_url: str) -> None: + print("test") + self.base_url = base_url + + async def _request_to_keycloak(self, api_url, method, headers, **kwargs): + """_summary_ + + Args: + api_url (_type_): _description_ + method (_type_): _description_ + headers (_type_): _description_ + + Returns: + _type_: _description_ + """ + data = urllib.parse.urlencode(kwargs) + print(data) + async with aiohttp.ClientSession() as session: + async with session.request(url=api_url, method=method, headers=headers, data=data) as response: + print("response") + try: + ret = await response.json() + except Exception: + ret = await response.read() + return {"status_code": response.status, "data": ret} + + async def generate_admin_token(self, **kwargs) -> Dict: + """ + 관리자계정에 대한 토큰 발급 + + Args: + username (str): + password (str): + grant_type (str): refresh_token or password + + Returns: + Dict: _description_ + """ + headers = {"Content-Type": "application/x-www-form-urlencoded"} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/realms/master/protocol/openid-connect/token", + client_id="admin-cli", + method="POST", + headers=headers, + **kwargs, + ) + + async def generate_normal_token(self, realm, **kwargs) -> Dict: + """ + 일반회원의 토큰 발급 + + Args: + realm (_type_): keycloak 인증 그룹 + username (str): 계정명 + password (str): 패스워드 + grant_type (str): 인증방법('password', 'refresh_token') + client_id (str): keycloak client_id + client_secret (str): keycloak_client_id에 대응하는 secret key + + Returns: + Dict: _description_ + """ + + headers = {"Content-Type": "application/x-www-form-urlencoded"} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/realms/{realm}/protocol/openid-connect/token", + method="POST", + headers=headers, + **kwargs, + ) + + async def token_info(self, realm, **kwargs) -> Dict: + """_summary_ + + Args: + realm (_type_): _description_ + + Returns: + Dict: _description_ + """ + + headers = {"Content-Type": "application/x-www-form-urlencoded"} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/realms/{realm}/protocol/openid-connect/token/introspect", + method="POST", + headers=headers, + **kwargs, + ) + + async def create_user(self, token, realm, **kwargs): + headers = {"Content-Type": "application/json", "Authorization": "bearer " + token} + async with aiohttp.ClientSession() as session: + async with session.request( + url=f"{self.base_url}/admin/realms/{realm}/users", + method="POST", + headers=headers, + json=kwargs, + ) as response: + return {"status_code": response.status, "data": await response.read()} + + async def delete_user(self, token, realm, user_id): + headers = {"Authorization": "bearer " + token} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/admin/realms/{realm}/users/{user_id}", method="DELETE", headers=headers + ) + + async def get_user_list(self, token, realm): + headers = {"Authorization": "bearer " + token} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/admin/realms/{realm}/users", method="GET", headers=headers + ) + + async def user_info(self, token, realm): + headers = {"Authorization": "bearer " + token} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/realms/{realm}/protocol/openid-connect/userinfo", method="GET", headers=headers + ) + + async def user_info_detail(self, token, realm, user_id): + headers = {"Authorization": "bearer " + token} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/admin/realms/{realm}/users/{user_id}", method="GET", headers=headers + ) + + async def alter_user(self, token, realm, user_id, **kwargs): + print(f"kwargs :: {kwargs}") + headers = {"Content-Type": "application/json", "Authorization": "bearer " + token} + async with aiohttp.ClientSession() as session: + async with session.request( + url=f"{self.base_url}/admin/realms/{realm}/users/{user_id}", + method="PUT", + headers=headers, + json=kwargs, + ) as response: + return {"status_code": response.status, "data": await response.read()} + + async def check_user_session(self, token, realm, user_id): + headers = {"Authorization": "bearer " + token} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/admin/realms/{realm}/users/{user_id}/sessions", method="GET", headers=headers + ) + + async def logout(self, realm, **kwargs): + headers = {"Content-Type": "application/x-www-form-urlencoded"} + return await self._request_to_keycloak( + api_url=f"{self.base_url}/realms/{realm}/protocol/openid-connect/logout", + method="POST", + headers=headers, + **kwargs, + ) + + +if __name__ == "__main__": + import asyncio + + manager = KeycloakManager("http://192.168.101.44:8080") + d = asyncio.run(manager.generate_admin_token(username="admin", password="zxcv1234!", grant_type="password")) + print(f"admin_token :: {d}") + admin_access_token = d.get("data").get("access_token") + admin_refresh_token = d.get("data").get("refresh_token") + data = { + "username": "swyang", + "firstName": "seokwoo", + "lastName": "yang", + "email": "sw@mobigen.com", + "emailVerified": False, + "enabled": True, + "credentials": [{"value": "zxcv1234!"}], + "attributes": {"phoneNumber": "010-1234-5678", "gender": "male"}, + } + r = asyncio.run( + manager.create_user( + realm="kadap", + token=admin_access_token, + **data, + ) + ) + d = asyncio.run( + manager.generate_normal_token( + realm="kadap", + username="swyang", + password="zxcv1234!", + grant_type="password", + client_id="uyuni", + client_secret="04esVekOjeJZKLHBkgsCQxpbwda41aKW", + ) + ) + print(f"normal token :: {d}") + normal_access_token = d.get("data").get("access_token") + normal_refresh_token = d.get("data").get("refresh_token") + r = asyncio.run( + manager.token_info( + realm="kadap", + token=normal_access_token, + client_id="uyuni", + client_secret="04esVekOjeJZKLHBkgsCQxpbwda41aKW", + ) + ) + print(f"token info :: {r}") + r = asyncio.run(manager.user_info(realm="kadap", token=normal_access_token)) + print(f"user info :: {r}") + user_id = r.get("data").get("sub") + r = asyncio.run(manager.user_info_detail(token=admin_access_token, realm="kadap", user_id=user_id)) + print(f"detail :: {r}") + data = { + "firstName": "seokwoo", + "lastName": "yang", + "email": "sw@mobigen.com", + "emailVerified": False, + "credentials": [{"value": "zxcv1234!"}], + "attributes": {"phoneNumber": "010-1111-1234", "gender": "male"}, + } + r = asyncio.run(manager.alter_user(token=admin_access_token, realm="kadap", user_id=user_id, **data)) + print(f"alter {r}") + r = asyncio.run(manager.check_user_session(token=admin_access_token, realm="kadap", user_id=user_id)) + print(f"check :: {r}") + r = asyncio.run( + manager.logout( + realm="kadap", + grant_type="password", + refresh_token=normal_refresh_token, + client_id="uyuni", + client_secret="04esVekOjeJZKLHBkgsCQxpbwda41aKW", + ) + ) + print(f"logout :: {r}") + r = asyncio.run(manager.delete_user(token=admin_access_token, realm="kadap", user_id=user_id)) + print(f"delete :: {r}") + r = asyncio.run(manager.get_user_list(token=admin_access_token, realm="kadap")) + print(f"list :: {r}") diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index 9e8956a0..c5835e9e 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -38,4 +38,10 @@ subject_share = [자동차데이터포털] 자동차데이터포털에서 공유 server_addr = smtp.office365.com port = 587 login_user = admin@bigdata-car.kr -login_pass = Pas07054354@katech! \ No newline at end of file +login_pass = Pas07054354@katech! + +[keycloak_info] +keycloak_url = http://192.168.101.44:8080 +admin_username = admin +admin_password = zxcv1234! +realm = kadap \ No newline at end of file diff --git a/common_libs/libs/__init__.py b/common_libs/libs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/common_libs/libs/database/__init__.py b/common_libs/libs/database/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/common_libs/libs/database/connector.py b/common_libs/libs/database/connector.py new file mode 100644 index 00000000..a231e790 --- /dev/null +++ b/common_libs/libs/database/connector.py @@ -0,0 +1,42 @@ +import abc +from typing import TypeVar, Tuple, List, Dict + +from fastapi import FastAPI + +T = TypeVar("T", bound="Executor") + + +class Connector(metaclass=abc.ABCMeta): + @abc.abstractmethod + def init_app(self, app: FastAPI, **kwargs): + ... + + @abc.abstractmethod + def get_db(self) -> T: + ... + + +class Executor(metaclass=abc.ABCMeta): + @abc.abstractmethod + def query(self, **kwargs) -> T: + ... + + @abc.abstractmethod + def all(self) -> Tuple[List[dict], int]: + ... + + @abc.abstractmethod + def first(self) -> dict: + ... + + @abc.abstractmethod + def execute(self, **kwargs): + ... + + @abc.abstractmethod + def get_column_info(self, table_nm) -> List[Dict[str, str]]: + ... + + @abc.abstractmethod + def close(self): + ... diff --git a/common_libs/libs/database/models.py b/common_libs/libs/database/models.py new file mode 100644 index 00000000..76ba8240 --- /dev/null +++ b/common_libs/libs/database/models.py @@ -0,0 +1,159 @@ +from sqlalchemy.orm import Session + +from .orm import db + + +class BaseMixin: + # id = Column(Integer, primary_key=True, index=True) + # created_at = Column(DateTime, nullable=False, default=func.utc_timestamp()) + # updated_at = Column(DateTime, nullable=False, default=func.utc_timestamp(), onupdate=func.utc_timestamp()) + + def __init__(self): + self._q = None + self._session = None + self.served = None + self.id = 0 + + def all_columns(self): + return [c for c in self.__table__.columns if c.primary_key is False and c.name != "created_at"] + + def __hash__(self): + return hash(self.id) + + @classmethod + def create(cls, session: Session, auto_commit=False, **kwargs): + """ + 테이블 데이터 적재 전용 함수 + :param session: + :param auto_commit: 자동 커밋 여부 + :param kwargs: 적재 할 데이터 + :return: + """ + obj = cls() + for col in obj.all_columns(): + col_name = col.name + if col_name in kwargs: + setattr(obj, col_name, kwargs.get(col_name)) + session.add(obj) + session.flush() + if auto_commit: + session.commit() + return obj + + @classmethod + def get(cls, session: Session = None, **kwargs): + """ + Simply get a Row + :param session: + :param kwargs: + :return: + """ + sess = next(db.session()) if not session else session + query = sess.query(cls) + for key, val in kwargs.items(): + col = getattr(cls, key) + query = query.filter(col == val) + + if query.count() > 1: + raise Exception("Only one row is supposed to be returned, but got more than one.") + result = query.first() + if not session: + sess.close() + return result + + @classmethod + def filter(cls, session: Session = None, **kwargs): + """ + Simply get a Row + :param session: + :param kwargs: + :return: + """ + cond = [] + for key, val in kwargs.items(): + key = key.split("__") + if len(key) > 2: + raise Exception("No 2 more dunders") + col = getattr(cls, key[0]) + if len(key) == 1: + cond.append((col == val)) + elif len(key) == 2 and key[1] == "gt": + cond.append((col > val)) + elif len(key) == 2 and key[1] == "gte": + cond.append((col >= val)) + elif len(key) == 2 and key[1] == "lt": + cond.append((col < val)) + elif len(key) == 2 and key[1] == "lte": + cond.append((col <= val)) + elif len(key) == 2 and key[1] == "in": + cond.append((col.in_(val))) + obj = cls() + if session: + obj._session = session + obj.served = True + else: + obj._session = next(db.session()) + obj.served = False + query = obj._session.query(cls) + query = query.filter(*cond) + obj._q = query + return obj + + @classmethod + def cls_attr(cls, col_name=None): + if col_name: + col = getattr(cls, col_name) + return col + else: + return cls + + def order_by(self, *args: str): + for a in args: + if a.startswith("-"): + col_name = a[1:] + is_asc = False + else: + col_name = a + is_asc = True + col = self.cls_attr(col_name) + self._q = self._q.order_by(col.asc()) if is_asc else self._q.order_by(col.desc()) + return self + + def update(self, auto_commit: bool = False, **kwargs): + qs = self._q.update(kwargs) + get_id = self.id + ret = None + + self._session.flush() + if qs > 0: + ret = self._q.first() + if auto_commit: + self._session.commit() + return ret + + def first(self): + result = self._q.first() + self.close() + return result + + def delete(self, auto_commit: bool = False): + self._q.delete() + if auto_commit: + self._session.commit() + + def all(self): + print(self.served) + result = self._q.all() + self.close() + return result + + def count(self): + result = self._q.count() + self.close() + return result + + def close(self): + if not self.served: + self._session.close() + else: + self._session.flush() diff --git a/common_libs/libs/database/orm.py b/common_libs/libs/database/orm.py new file mode 100644 index 00000000..5e94decc --- /dev/null +++ b/common_libs/libs/database/orm.py @@ -0,0 +1,253 @@ +from typing import Dict, List, Union, Tuple + +import sqlalchemy +from fastapi import FastAPI +from sqlalchemy import Column, MetaData, and_, create_engine, not_, or_ +from sqlalchemy.orm import sessionmaker, declarative_base + +from .connector import Connector, Executor + +db = declarative_base() + + +class SQLAlchemyConnector(Connector): + def __init__(self, base=None, app: FastAPI = None, **kwargs): + self._engine = None + self._Base = base + self._session = None + self._session_instance = None + self._metadata = None + self._q = None + self._cnt = 0 + self._column_names = [] + if app is not None: + self.init_app(app=app, **kwargs) + + def init_app(self, app: FastAPI, **kwargs): + database_url = kwargs.get("DB_URL") + pool_recycle = kwargs.get("DB_POOL_RECYCLE", 900) + echo = kwargs.get("DB_ECHO", True) + + self._engine = create_engine( + database_url, + echo=echo, + pool_recycle=pool_recycle, + pool_pre_ping=True, + ) + + self._metadata = MetaData() + for schema in kwargs.get("DB_INFO").get("SCHEMA").split(","): + self._metadata.reflect(bind=self.engine, views=True, schema=schema) + + @app.on_event("startup") + def startup(): + self._engine.connect() + + @app.on_event("shutdown") + def shutdown(): + self._session.close_all() + self._engine.dispose() + + def get_db(self) -> "SQLAlchemyConnector": + if self.session is None: + raise Exception("must be called 'init_db'") + try: + self._session_instance = self._session() + yield self + finally: + self._session_instance.close() + + +class OrmExecutor(Executor): + def __init__(self, engine) -> None: + self.engine = engine + self._session = sessionmaker(autocommit=False, autoflush=False, bind=self._engine) + + def query(self, **kwargs) -> "SQLAlchemyConnector": + base_table = self.get_table(kwargs["table_nm"]) + key = kwargs["key"] + # Join + if join_info := kwargs["join_info"]: + join_table = self.get_table(join_info.table_nm) + query = self._session_instance.query(base_table, join_table).join( + join_table, + getattr(base_table.columns, key) == getattr(join_table.columns, join_info.key), + ) + else: + query = self._session_instance.query(base_table) + + # Where + if where_info := kwargs["where_info"]: + filter_val = None + for where_condition in where_info: + filter_condition = self._parse_operand( + getattr(base_table.columns, where_condition.key), + where_condition.value, + where_condition.compare_op, + ) + if sub_conditions := where_condition.sub_conditions: + for sub_condition in sub_conditions: + sub_filter_condition = self._parse_operand( + getattr(base_table.columns, sub_condition.key), + sub_condition.value, + sub_condition.compare_op, + ) + # or_ , | 사용무관 + if sub_condition.op.lower() == "or": + filter_condition = or_(filter_condition, sub_filter_condition) + elif sub_condition.op.lower() == "and": + filter_condition = and_(filter_condition, sub_filter_condition) + + if filter_val is not None: + if where_condition.op.lower() == "or": + filter_val = filter_val | filter_condition + elif where_condition.op.lower() == "and": + filter_val = filter_val & filter_condition + else: + filter_val = filter_condition + query = query.filter(filter_val) + + self._cnt = query.count() + + # Order + if order_info := kwargs["order_info"]: + order_key = getattr(base_table.columns, order_info.key) + query = query.order_by(getattr(sqlalchemy, order_info.order.lower())(order_key)) + + # Paging + if page_info := kwargs["page_info"]: + per_page = page_info.per_page + cur_page = page_info.cur_page + query = query.limit(per_page).offset((cur_page - 1) * per_page) + + self._q = query + self._column_names = [column.name for column in base_table.columns] + return self + + def all(self) -> Tuple[List[dict], int]: + data = [dict(zip(self._column_names, data)) for data in self._q.all()] + + return data, self._cnt + + def first(self): + data = self._q.first() + return data + + def execute(self, **kwargs): + """ + [ + { + "method":"INSERT", + "table_nm":"inqr_bas", + "data":{ + "id":"9bb29b2b-159e-4cee-89af-a80cfe6f0651", + "title":"test문의", + "sbst":"문으으으의", + "ctg_id":"INQR001", + "reg_user_nm":"테스터", + "cmpno":"dev-12346578", + "del_yn":"N", + "reg_user":"f142cdc2-207b-4eda-9e7d-2605e4e65571", + "reg_date":"NOW()", + "amd_user":"f142cdc2-207b-4eda-9e7d-2605e4e65571", + "amd_date":"NOW()" + } + } + ] + [ + { + "method":"UPDATE", + "table_nm":"inqr_bas", + "key": ["id"], + "data":{ + "id":"9bb29b2b-159e-4cee-89af-a80cfe6f0651", + "title":"test문의111111", + "sbst":"문으으으의" + } + } + ] + [ + { + "method":"DELETE", + "table_nm":"inqr_bas", + "key": ["id"], + "data":{ + "id":"9bb29b2b-159e-4cee-89af-a80cfe6f0651" + } + } + ] + + {"result":1,"errorMessage":""} + """ + # try: + # session.begin() + + # for row in params: + # method = row.method.lower() + # table = db.get_table(row.table_nm) + # cond = [getattr(table.columns, k) == row.data[k] for k in row.key] if row.key else [] + + # if method == "insert": + # ins = table.insert().values(**row.data) + # session.execute(ins) + # elif method == "update": + # stmt = table.update().where(*cond).values(**row.data) + # session.execute(stmt) + # elif method == "delete": + # stmt = table.delete().where(*cond) + # session.execute(stmt) + # else: + # raise NotImplementedError + + # session.commit() + # except Exception as e: + # session.rollback() + # raise e + + def get_table(self, table_nm): + for nm, t in self._metadata.tables.items(): + if table_nm in nm: + return t + + def _parse_operand(key: Column, value: Union[str, int], compare: str): + compare = compare.lower() + if compare in ["equal", "="]: + return key == value + elif compare in ["not equal", "!="]: + return key != value + elif compare in ["greater than", ">"]: + return key > value + elif compare in ["greater than or equal", ">="]: + return key >= value + elif compare in ["less than", "<"]: + return key < value + elif compare in ["less than or equal", "<="]: + return key <= value + elif compare == "like": + return key.like(value) + elif compare == "not like": + return not_(key.like(value)) + elif compare == "in": + return key.in_(value.split(",")) + elif compare == "not in": + return not_(key.in_(value.split(","))) + elif compare == "ilike": + return key.ilike(value) + else: + return + + @property + def session(self): + if self._session_instance: + return self._session_instance + + @property + def engine(self): + return self._engine + + @property + def Base(self): + return self._Base + + def get_column_info(self, table_nm) -> List[Dict[str, str]]: + ... diff --git a/common_libs/libs/database/tibero.py b/common_libs/libs/database/tibero.py new file mode 100644 index 00000000..9f357ef6 --- /dev/null +++ b/common_libs/libs/database/tibero.py @@ -0,0 +1,230 @@ +import logging +from datetime import datetime +from decimal import Decimal +from typing import Dict, List, Tuple + +import pyodbc +from fastapi import FastAPI + +from .connector import Connector, Executor + +logger = logging.getLogger() + + +class QueryExecutor(Executor): + def __init__(self, conn: pyodbc.Connection): + self.conn = conn + self._q = None + self._cntq = None + self.cur = conn.cursor() + + def query(self, **kwargs) -> "QueryExecutor": + """ + SELECT * + FROM ( + SELECT ROWNUM AS rn, subquery.* + FROM ( + SELECT * + FROM ACT_SRVY + JOIN ACT_SRV_FILE_DETLS ON ACT_SRVY.IDX = ACT_SRV_FILE_DETLS.IDX + WHERE ACT_SRVY.OFANSTP = 'CMPLT' + ) AS subquery + ) AS main_query + WHERE main_query.rn > 0; + """ + table_nm = kwargs.get("table_nm") + join_key = kwargs.get("key") + + join_clause = "" + if join_info := kwargs.get("join_info"): + t = join_info["table_nm"] + k = join_info["key"] + join_clause += f"join {t} on {table_nm}.{join_key} = {t}.{k} " + + where_clause = "" + if where_info := kwargs.get("where_info"): + where_clause += "where " + for info in where_info: + clause = self._calc_operand(f"{info['table_nm']}.{info['key']}", info["value"], info["compare_op"]) + if "sub" in info and info["sub"]: + where_clause += f"{info['op']} ({clause} " + for sub in info["sub"]: + sub_clause = self._calc_operand( + f"{sub['table_nm']}.{sub['key']}", sub["value"], sub["compare_op"] + ) + where_clause += f"{sub['op']} {sub_clause}" + where_clause += ") " + else: + where_clause += f"{info['op']} {clause} " + + order_clause = "" + if order_info := kwargs.get("order_info"): + t = order_info["table_nm"] + k = order_info["key"] + o = order_info["order"] + order_clause += f"order by {t}.{k} {str(o).upper()} " + + query = f"select * from {table_nm} " + join_clause + where_clause + order_clause + self._cntq = f"select count(*) from {table_nm} " + join_clause + where_clause + order_clause + + page_clause = "" + if page_info := kwargs.get("page_info"): + per_page = page_info["per_page"] + offset = (page_info["cur_page"] - 1) * per_page + limit = offset + per_page + page_clause += "select * from (select ROWNUM as SEQ, sq.* " + page_clause += f"from ({query}) as sq) as mq where mq.SEQ > {offset} and mq.SEQ <= {limit}" + query = page_clause + + self._q = query + logger.info(query) + return self + + def all(self) -> Tuple[List[dict], int]: + try: + rows = self.cur.execute(self._q).fetchall() + if rows: + datas = [dict(zip(self._get_headers(self.cur), self._parse_select_data(row))) for row in rows] + return datas, int(self.cur.execute(self._cntq).fetchone()[0]) + except TypeError as te: + logger.warning(te) + return + except Exception as e: + raise e + + def first(self) -> Dict: + try: + row = self.cur.execute(self._q).fetchone() + if row: + return dict(zip(self._get_headers(self.cur), self._parse_select_data(row))) + except TypeError as te: + logger.warning(te) + return + except Exception as e: + raise e + + def execute(self, **kwargs): + def parse_update_data(datas): + ret = [] + for data in datas: + if isinstance(data, str) and data.upper().startswith("NOW"): + ret.append(datetime.now()) + elif isinstance(data, str) and data.lower().startswith("`"): + pass + else: + ret.append(data) + return tuple(ret) + + method = str(kwargs.get("method")).lower() + data = kwargs.get("data") + params = parse_update_data(data.values()) + + query = "" + if method == "insert": + query += f"insert into {kwargs.get('table_nm')} " + query += f"({','.join(data.keys())}) " + query += f"values ({','.join(['?']*len(data))})" + elif method == "update": + query += f"update {kwargs.get('table_nm')} " + place_hold = [ + f"{k} = {data[k][1:]}" if isinstance(data[k], str) and data[k].startswith("`") else f"{k} = ?" + for k in data.keys() + ] + query += f"set {','.join(place_hold)} " + + k0, *ks = kwargs.get("key") + query += f"where {k0} = '{data[k0]}' " + if ks: + for k in ks: + query += f"and {k} = '{data[k]}' " + elif method == "delete": + query += f"delete from {kwargs.get('table_nm')} " + query += f"where {' and '.join([f'{k} = ?' for k in kwargs.get('key')])}" + + else: + raise Exception(f"{method} :: Mehtod not allowed") + + logger.info(f"query :: {query}") + try: + self.cur.execute(query, params) + self.conn.commit() + except Exception as e: + self.conn.rollback() + logger.error(f"error at params :: {params}") + raise e + + def _parse_select_data(self, row): + return map(lambda x: int(x) if isinstance(x, Decimal) else x, row) + + def _get_headers(self, cursor) -> list[str]: + return [d[0].lower() for d in cursor.description] + + def _calc_operand(self, k, v, operand) -> str: + if operand in ["Equal", "="]: + return f"{k} = '{v}'" + elif operand in ["Not Equal", "!="]: + return f"{k} != '{v}'" + elif operand in ["Greater Than", ">"]: + return f"{k} > '{v}'" + elif operand in ["Greater Than or Equal", ">="]: + return f"{k} >= '{v}'" + elif operand in ["Less Than", "<"]: + return f"{k} < '{v}'" + elif operand in ["Less Than or Equal", "<="]: + return f"{k} <='{v}'" + elif operand.lower() in ["ilike"]: + return f"upper({k}) like '{v}'" + elif operand.lower() in ["in"]: + v = ",".join([f"'{x}'" for x in v.split(",")]) + return f"{k} in ({v})" + else: + return f"{k} {operand} '{v}'" + + def get_column_info(self, table_nm, schema) -> List[Dict[str, str]]: + # OWNER, TABLE_NAME, COLUMN_NAME, COMMENT + query = ( + f"SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = '{table_nm.upper()}' AND OWNER = '{schema.upper()}';" + ) + logger.info(query) + self.cur.execute(query) + return [{"column_name": str(row[2]).lower(), "kor_column_name": row[3]} for row in self.cur.fetchall()] + + def close(self): + if self.cur: + self.cur.close() + + +class TiberoConnector(Connector): + def __init__(self, app: FastAPI = None, **kwargs): + self.conn = None + self.cur = None + self._q = None + self._cntq = None + if app is not None: + self.init_app(app, kwargs) + + def init_app(self, app: FastAPI, **kwargs): + def __convert_timestamp(value): + value = datetime.strptime(value.decode(), "%Y/%m/%d %H:%M:%S.%f") + return value.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] + + @app.on_event("startup") + async def startup(): + self.conn = pyodbc.connect(kwargs.get("DB_URL"), autocommit=False) + self.conn.setdecoding(pyodbc.SQL_CHAR, encoding="utf-8") + self.conn.setdecoding(pyodbc.SQL_WCHAR, encoding="utf-32le") + self.conn.setdecoding(pyodbc.SQL_WMETADATA, encoding="utf-32le") + self.conn.add_output_converter(pyodbc.SQL_TYPE_TIMESTAMP, __convert_timestamp) + self.conn.setencoding(encoding="utf-8") + + @app.on_event("shutdown") + async def shutdown(): + if self.conn: + self.conn.close() + + def get_db(self) -> "TiberoConnector": + executor = QueryExecutor(self.conn) + try: + yield executor + finally: + executor.close() diff --git a/common_libs/libs/logging_temp.py b/common_libs/libs/logging_temp.py new file mode 100644 index 00000000..e9f285d0 --- /dev/null +++ b/common_libs/libs/logging_temp.py @@ -0,0 +1,7 @@ +log_config = { + "version": 1, + "disable_existing_loggers": False, + "formatters": {"default": {"format": "%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] - %(message)s"}}, + "handlers": {"console": {"class": "logging.StreamHandler", "level": "DEBUG", "formatter": "default"}}, + "loggers": {"local": {"level": "DEBUG", "handlers": ["console"], "propagate": True}}, +} From 38b4fc1a68efb5a49ebaefa361187274859a9db9 Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Wed, 28 Jun 2023 10:36:55 +0900 Subject: [PATCH 296/323] =?UTF-8?q?fix:=20[commonLogin]=20keycloak?= =?UTF-8?q?=EC=9D=84=20=ED=86=B5=ED=95=9C=20=ED=86=A0=ED=81=B0=20=EB=B0=9C?= =?UTF-8?q?=EA=B8=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/commonLogin.py | 54 ++++++++++++++------ API-SERVICE/ApiList/common/commonLogout.py | 2 +- API-SERVICE/ApiList/common/commonPassword.py | 2 +- API-SERVICE/ApiList/common/commonRegister.py | 9 +--- API-SERVICE/ApiList/common/commonToken.py | 2 +- API-SERVICE/ApiList/common/commonUserInfo.py | 2 +- API-SERVICE/Utils/CommonUtil.py | 10 ++++ API-SERVICE/Utils/keycloak.py | 5 +- API-SERVICE/conf/common/config.ini | 4 +- 9 files changed, 58 insertions(+), 32 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index ea61a0b5..5ccceea8 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -1,5 +1,6 @@ from datetime import timedelta from typing import Dict +from fastapi.logger import logger from fastapi.responses import JSONResponse from pydantic import BaseModel @@ -8,6 +9,7 @@ from Utils.CommonUtil import ( get_exception_info, create_token, + get_keycloak_manager, make_token_data, authenticate_user, ) @@ -17,27 +19,45 @@ class commonLogin(BaseModel): data: Dict -def api(login: commonLogin): +async def api(login: commonLogin): """ id_column = user_id password_column = user_password """ - access_token = "" + dat = {} try: - user = authenticate_user( - login.data[config.user_info["id_column"]], - login.data[config.user_info["password_column"]], - ) - 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": ""} - except Exception: + user_id = login.data.get(config.user_info["id_column"], None) + if not user_id: + dat["grant_type"] = "refresh_token" + dat["refresh_token"] = login.data.get("refresh_token") + else: + dat["username"] = user_id + dat["grant_type"] = "password" + user_pwd = login.data[config.user_info["password_column"]] + authenticate_user(user_id, user_pwd) + dat["password"] = user_pwd + + token = await get_token(**dat) + + response = JSONResponse(content={"result": 1, "errorMessage": ""}) + response.set_cookie(key=config.secret_info["cookie_name"], value=token) + return response + except Exception as e: except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} + logger.error(e, exc_info=True) + return JSONResponse(content={"result": 0, "errorMessage": except_name}) + - response = JSONResponse(content=result) - response.set_cookie(key=config.secret_info["cookie_name"], value=access_token) - return response +async def get_token(grant_type, refresh_token="", username="", password=""): + client_id = config.keycloak_info["client_id"] + client_secret = config.keycloak_info["client_secret"] + realm = config.keycloak_info["realm"] + return await get_keycloak_manager().generate_normal_token( + realm=realm, + client_id=client_id, + client_secret=client_secret, + grant_type=grant_type, + refresh_token=refresh_token, + username=username, + password=password, + ) diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index b5944363..4b765689 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -1,7 +1,7 @@ from typing import Dict from fastapi.logger import logger from fastapi.responses import JSONResponse -from jose import jwt +import jwt from starlette.requests import Request from Utils.CommonUtil import get_exception_info, get_user diff --git a/API-SERVICE/ApiList/common/commonPassword.py b/API-SERVICE/ApiList/common/commonPassword.py index b8114026..781342ca 100644 --- a/API-SERVICE/ApiList/common/commonPassword.py +++ b/API-SERVICE/ApiList/common/commonPassword.py @@ -2,7 +2,7 @@ from pydantic import BaseModel from fastapi.logger import logger from fastapi.requests import Request -from jose import jwt +import jwt from Utils.CommonUtil import ( connect_db, get_exception_info, diff --git a/API-SERVICE/ApiList/common/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py index 08ce5c19..6522573e 100644 --- a/API-SERVICE/ApiList/common/commonRegister.py +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -1,7 +1,7 @@ from typing import Dict from pydantic import BaseModel from fastapi.logger import logger -from Utils.CommonUtil import connect_db, get_exception_info, convert_data, get_keycloak_manager +from Utils.CommonUtil import connect_db, get_admin_token, get_exception_info, convert_data, get_keycloak_manager from ApiService.ApiServiceConfig import config @@ -24,12 +24,7 @@ def make_register_query(register: commonRegister): async def api(register: commonRegister) -> Dict: try: - res = await get_keycloak_manager().generate_admin_token( - username=config.keycloak_info["admin_username"], - password=config.keycloak_info["admin_password"], - grant_type="password", - ) - admin_token = res.get("data").get("access_token") + admin_token = await get_admin_token() reg_data = { "username": register.data["user_id"], diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py index a3253f8e..e3f582f7 100644 --- a/API-SERVICE/ApiList/common/commonToken.py +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -2,7 +2,7 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta -from jose import jwt +import jwt from Utils.CommonUtil import get_exception_info, get_user, create_token, make_token_data from ApiService.ApiServiceConfig import config from starlette.requests import Request diff --git a/API-SERVICE/ApiList/common/commonUserInfo.py b/API-SERVICE/ApiList/common/commonUserInfo.py index e67cabc9..1d972528 100644 --- a/API-SERVICE/ApiList/common/commonUserInfo.py +++ b/API-SERVICE/ApiList/common/commonUserInfo.py @@ -1,6 +1,6 @@ from typing import Dict from fastapi.logger import logger -from jose import jwt +import jwt from starlette.requests import Request from Utils.CommonUtil import get_exception_info, get_user, make_res_msg diff --git a/API-SERVICE/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index 615193d6..c19d4fa4 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -150,6 +150,16 @@ def get_keycloak_manager(): return KeycloakManager(config.keycloak_info["keycloak_url"]) +async def get_admin_token(): + res = await get_keycloak_manager().generate_admin_token( + username=config.keycloak_info["admin_username"], + password=config.keycloak_info["admin_password"], + grant_type="password", + ) + + return res.get("data").get("access_token") + + def make_connection_pool(db_info): conn_pool = pool.SimpleConnectionPool( 1, diff --git a/API-SERVICE/Utils/keycloak.py b/API-SERVICE/Utils/keycloak.py index c5759d75..016a58bd 100644 --- a/API-SERVICE/Utils/keycloak.py +++ b/API-SERVICE/Utils/keycloak.py @@ -15,7 +15,6 @@ def __new__(cls, *args, **kwargs): return cls._instance def __init__(self, base_url: str) -> None: - print("test") self.base_url = base_url async def _request_to_keycloak(self, api_url, method, headers, **kwargs): @@ -33,7 +32,6 @@ async def _request_to_keycloak(self, api_url, method, headers, **kwargs): print(data) async with aiohttp.ClientSession() as session: async with session.request(url=api_url, method=method, headers=headers, data=data) as response: - print("response") try: ret = await response.json() except Exception: @@ -67,9 +65,10 @@ async def generate_normal_token(self, realm, **kwargs) -> Dict: Args: realm (_type_): keycloak 인증 그룹 + grant_type (str): 인증방법('password', 'refresh_token') username (str): 계정명 password (str): 패스워드 - grant_type (str): 인증방법('password', 'refresh_token') + refresh_token (str): 리프레시 토큰 client_id (str): keycloak client_id client_secret (str): keycloak_client_id에 대응하는 secret key diff --git a/API-SERVICE/conf/common/config.ini b/API-SERVICE/conf/common/config.ini index c5835e9e..7327336f 100644 --- a/API-SERVICE/conf/common/config.ini +++ b/API-SERVICE/conf/common/config.ini @@ -44,4 +44,6 @@ login_pass = Pas07054354@katech! keycloak_url = http://192.168.101.44:8080 admin_username = admin admin_password = zxcv1234! -realm = kadap \ No newline at end of file +realm = kadap +client_id = uyuni +client_secret = 04esVekOjeJZKLHBkgsCQxpbwda41aKW \ No newline at end of file From 698332c022e10f39ea79a2b09bbdfe8550f8febc Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 29 Jun 2023 15:58:57 +0900 Subject: [PATCH 297/323] =?UTF-8?q?[AIPLATFORM-1842]=20fix:=20els=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=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-SERVICE/ApiList/meta/updateElsBizMetaBulk.py | 10 +++++++--- API-SERVICE/ELKSearch/Manager/manager.py | 2 +- API-SERVICE/conf/meta/api_config.ini | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py b/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py index 81a62566..188d6a0f 100644 --- a/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py +++ b/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py @@ -8,8 +8,11 @@ def api() -> Dict: + """ + bulk로 업데이트 할 때 timeout이 발생하는 이슈가 있음 + """ els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] - bulk_meta_item = list() + # bulk_meta_item = list() db_query = f"SELECT * FROM v_biz_meta_info WHERE status = 'D'" try: @@ -19,8 +22,9 @@ def api() -> Dict: meta_wrap_list = db.select(db_query)[0] for meta_wrap in meta_wrap_list: els_dict = data_process(meta_wrap) - bulk_meta_item.append(els_dict) - helpers.bulk(es.conn, bulk_meta_item, index=es.index) + 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: except_name = get_exception_info() diff --git a/API-SERVICE/ELKSearch/Manager/manager.py b/API-SERVICE/ELKSearch/Manager/manager.py index 1d5e0685..3a527c41 100644 --- a/API-SERVICE/ELKSearch/Manager/manager.py +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -29,7 +29,7 @@ def __init__( self.body = self.set_default_option() def connect(self) -> Elasticsearch: - es = Elasticsearch(f"http://{self.host}:{self.port}") + es = Elasticsearch(f"http://{self.host}:{self.port}", timeout=30, max_retries=10, retry_on_timeout=True) return es def set_default_option(self) -> Dict[Any, Any]: diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 2823a351..9c1f8108 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -59,6 +59,6 @@ url = /portal/api/meta/getElsCkanList sub_dir = meta [updateElsBizMetaBulk] -method = POST +method = GET url = /portal/api/meta/updateElsBizMetaBulk sub_dir = meta \ No newline at end of file From dad5dfb61bc96d7ef446c1eba5d58000e7fcd19e Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 29 Jun 2023 15:59:49 +0900 Subject: [PATCH 298/323] =?UTF-8?q?[AIPLATFORM-1842]=20fix:=20ckan=20data?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=20=EC=A0=95=ED=99=95=EB=8F=84=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20query=5Fstring=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(=EC=B6=94=ED=9B=84=20counting=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=ED=95=84=EC=9A=94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/getElsCkanList.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index fae4d5c3..87af2006 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -7,7 +7,6 @@ from Utils.CommonUtil import get_exception_info from Utils.SearchUtil import search_count from ApiService.ApiServiceConfig import config -from fastapi.logger import logger def api(input: InputModel) -> Dict: @@ -27,9 +26,20 @@ def api(input: InputModel) -> Dict: es.set_sort(input.sortOption) ############ search option ############ - action = "query" - sub_action = "must" - query_dict = base_search_query(action, sub_action, input.searchOption) + search_format = "(*{0}*)" + query_dict = [] + + for query in input.searchOption: + keywords = [search_format.format(word) for keyword in query.keywords for word in keyword.split(" ")] + if len(keywords) > 1: + keywords = f" {query.operator.upper()} ".join(keywords) + else: + keywords = keywords[0] + query_dict.append({"query_string": {"query": keywords,"fields": query.field}}) + + query_dict = {"must": query_dict} + search_query = make_query("query","bool", query_dict) + es.body.update(search_query) # ############ sort option ############ sort_list = [{item.field: item.order} for item in input.sortOption] From 662acc64be94cd7284ba270a4f86998cba85ded5 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 29 Jun 2023 16:29:23 +0900 Subject: [PATCH 299/323] =?UTF-8?q?[AIPLATFORM-1842]=20feat:=20ckan=20quer?= =?UTF-8?q?y=20=ED=95=A8=EC=88=98=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/getElsCkanList.py | 15 ++------------- API-SERVICE/Utils/SearchUtil.py | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index 87af2006..4f29ede7 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -5,7 +5,7 @@ from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query from ELKSearch.Utils.database_utils import get_config from Utils.CommonUtil import get_exception_info -from Utils.SearchUtil import search_count +from Utils.SearchUtil import search_count, ckan_query from ApiService.ApiServiceConfig import config @@ -26,18 +26,7 @@ def api(input: InputModel) -> Dict: es.set_sort(input.sortOption) ############ search option ############ - search_format = "(*{0}*)" - query_dict = [] - - for query in input.searchOption: - keywords = [search_format.format(word) for keyword in query.keywords for word in keyword.split(" ")] - if len(keywords) > 1: - keywords = f" {query.operator.upper()} ".join(keywords) - else: - keywords = keywords[0] - query_dict.append({"query_string": {"query": keywords,"fields": query.field}}) - - query_dict = {"must": query_dict} + query_dict = ckan_query(input.searchOption) search_query = make_query("query","bool", query_dict) es.body.update(search_query) diff --git a/API-SERVICE/Utils/SearchUtil.py b/API-SERVICE/Utils/SearchUtil.py index 1fc5cb26..bb48103e 100644 --- a/API-SERVICE/Utils/SearchUtil.py +++ b/API-SERVICE/Utils/SearchUtil.py @@ -45,4 +45,19 @@ def search_count(es, item_dict, query_dict): cnt = es.conn.count(index=index, body=cnt_query)["count"] data_dict[eng_nm] = cnt - return data_dict \ No newline at end of file + return data_dict + + +def ckan_query(search_option) -> dict: + search_format = "(*{0}*)" + query_dict = [] + + for query in search_option: + keywords = [search_format.format(word) for keyword in query.keywords for word in keyword.split(" ")] + if len(keywords) > 1: + keywords = f" {query.operator.upper()} ".join(keywords) + else: + keywords = keywords[0] + query_dict.append({"query_string": {"query": keywords,"fields": query.field}}) + + return {"must": query_dict} From 840df11c3e7c7bffc6f2b4cec674495ccea75e63 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 29 Jun 2023 16:30:16 +0900 Subject: [PATCH 300/323] =?UTF-8?q?[AIPLATFORM-1842]=20fix:=20=EA=B5=AD?= =?UTF-8?q?=EB=82=B4,=20=ED=95=B4=EC=99=B8=20=EA=B2=80=EC=83=89=20API=20?= =?UTF-8?q?=EC=B9=B4=EC=9A=B4=ED=8C=85=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20?= =?UTF-8?q?=EA=B0=99=EA=B2=8C=20=ED=95=98=EA=B8=B0=20=EC=9C=84=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-SERVICE/ApiList/meta/getElsBizMetaList.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 9c12799a..1d927671 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -5,7 +5,7 @@ from ELKSearch.Utils.elasticsearch_utils import make_query, base_search_query from ELKSearch.Utils.database_utils import get_config from Utils.CommonUtil import get_exception_info -from Utils.SearchUtil import search_count +from Utils.SearchUtil import search_count, ckan_query from ApiService.ApiServiceConfig import config @@ -66,7 +66,8 @@ def api(input: InputModel) -> Dict: search_data = es.search(input.resultField) data_dict = search_count(es, item_dict, query_dict) - + ckan_dict = ckan_query(input.searchOption) + data_dict["overseaCount"] = search_count(es, {'filter': []}, ckan_dict)["overseaCount"] except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} From 88b3b595e15a1de6d545975bc8f7cea7caadb595 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 30 Jun 2023 07:18:56 +0900 Subject: [PATCH 301/323] =?UTF-8?q?[AIPLATFORM-1927]=20feat:=20totalCount?= =?UTF-8?q?=20=EC=A7=91=EA=B3=84=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/getElsBizMetaList.py | 2 ++ API-SERVICE/ApiList/meta/getElsCkanList.py | 1 + 2 files changed, 3 insertions(+) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 1d927671..15b00abe 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -67,7 +67,9 @@ def api(input: InputModel) -> Dict: data_dict = search_count(es, item_dict, query_dict) ckan_dict = ckan_query(input.searchOption) + data_dict["overseaCount"] = search_count(es, {'filter': []}, ckan_dict)["overseaCount"] + data_dict["totalCount"] = data_dict["totalCount"] + data_dict["overseaCount"] except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index 4f29ede7..aba068d0 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -36,6 +36,7 @@ def api(input: InputModel) -> Dict: search_data = es.search(input.resultField) data_dict = search_count(es, {'filter': []}, query_dict) + data_dict["totalCount"] = data_dict["totalCount"] + data_dict["overseaCount"] except Exception: except_name = get_exception_info() From 5259518e5e58e5d756c2d824bc4440c32b701f97 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 4 Jul 2023 09:10:10 +0900 Subject: [PATCH 302/323] =?UTF-8?q?[AIPLATFORM-1953]=20fix:=20totalCount?= =?UTF-8?q?=20=EC=A7=91=EA=B3=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/getElsBizMetaList.py | 1 - API-SERVICE/ApiList/meta/getElsCkanList.py | 1 - 2 files changed, 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getElsBizMetaList.py b/API-SERVICE/ApiList/meta/getElsBizMetaList.py index 15b00abe..b00527eb 100644 --- a/API-SERVICE/ApiList/meta/getElsBizMetaList.py +++ b/API-SERVICE/ApiList/meta/getElsBizMetaList.py @@ -69,7 +69,6 @@ def api(input: InputModel) -> Dict: ckan_dict = ckan_query(input.searchOption) data_dict["overseaCount"] = search_count(es, {'filter': []}, ckan_dict)["overseaCount"] - data_dict["totalCount"] = data_dict["totalCount"] + data_dict["overseaCount"] except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} diff --git a/API-SERVICE/ApiList/meta/getElsCkanList.py b/API-SERVICE/ApiList/meta/getElsCkanList.py index aba068d0..4f29ede7 100644 --- a/API-SERVICE/ApiList/meta/getElsCkanList.py +++ b/API-SERVICE/ApiList/meta/getElsCkanList.py @@ -36,7 +36,6 @@ def api(input: InputModel) -> Dict: search_data = es.search(input.resultField) data_dict = search_count(es, {'filter': []}, query_dict) - data_dict["totalCount"] = data_dict["totalCount"] + data_dict["overseaCount"] except Exception: except_name = get_exception_info() From 432aa00d910e3d0b6cf263ef8b74f0c4031ca73a Mon Sep 17 00:00:00 2001 From: seokwoo-yang Date: Tue, 4 Jul 2023 09:49:06 +0900 Subject: [PATCH 303/323] =?UTF-8?q?fix:=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/common/commonLogin.py | 54 ++++++-------------- API-SERVICE/ApiList/common/commonLogout.py | 2 +- API-SERVICE/ApiList/common/commonPassword.py | 2 +- API-SERVICE/ApiList/common/commonRegister.py | 21 +------- API-SERVICE/ApiList/common/commonToken.py | 2 +- API-SERVICE/ApiList/common/commonUserInfo.py | 2 +- 6 files changed, 23 insertions(+), 60 deletions(-) diff --git a/API-SERVICE/ApiList/common/commonLogin.py b/API-SERVICE/ApiList/common/commonLogin.py index 5ccceea8..ea61a0b5 100644 --- a/API-SERVICE/ApiList/common/commonLogin.py +++ b/API-SERVICE/ApiList/common/commonLogin.py @@ -1,6 +1,5 @@ from datetime import timedelta from typing import Dict -from fastapi.logger import logger from fastapi.responses import JSONResponse from pydantic import BaseModel @@ -9,7 +8,6 @@ from Utils.CommonUtil import ( get_exception_info, create_token, - get_keycloak_manager, make_token_data, authenticate_user, ) @@ -19,45 +17,27 @@ class commonLogin(BaseModel): data: Dict -async def api(login: commonLogin): +def api(login: commonLogin): """ id_column = user_id password_column = user_password """ - dat = {} + access_token = "" try: - user_id = login.data.get(config.user_info["id_column"], None) - if not user_id: - dat["grant_type"] = "refresh_token" - dat["refresh_token"] = login.data.get("refresh_token") - else: - dat["username"] = user_id - dat["grant_type"] = "password" - user_pwd = login.data[config.user_info["password_column"]] - authenticate_user(user_id, user_pwd) - dat["password"] = user_pwd - - token = await get_token(**dat) - - response = JSONResponse(content={"result": 1, "errorMessage": ""}) - response.set_cookie(key=config.secret_info["cookie_name"], value=token) - return response - except Exception as e: + user = authenticate_user( + login.data[config.user_info["id_column"]], + login.data[config.user_info["password_column"]], + ) + 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": ""} + except Exception: except_name = get_exception_info() - logger.error(e, exc_info=True) - return JSONResponse(content={"result": 0, "errorMessage": except_name}) - + result = {"result": 0, "errorMessage": except_name} -async def get_token(grant_type, refresh_token="", username="", password=""): - client_id = config.keycloak_info["client_id"] - client_secret = config.keycloak_info["client_secret"] - realm = config.keycloak_info["realm"] - return await get_keycloak_manager().generate_normal_token( - realm=realm, - client_id=client_id, - client_secret=client_secret, - grant_type=grant_type, - refresh_token=refresh_token, - username=username, - password=password, - ) + response = JSONResponse(content=result) + response.set_cookie(key=config.secret_info["cookie_name"], value=access_token) + return response diff --git a/API-SERVICE/ApiList/common/commonLogout.py b/API-SERVICE/ApiList/common/commonLogout.py index 4b765689..b5944363 100644 --- a/API-SERVICE/ApiList/common/commonLogout.py +++ b/API-SERVICE/ApiList/common/commonLogout.py @@ -1,7 +1,7 @@ from typing import Dict from fastapi.logger import logger from fastapi.responses import JSONResponse -import jwt +from jose import jwt from starlette.requests import Request from Utils.CommonUtil import get_exception_info, get_user diff --git a/API-SERVICE/ApiList/common/commonPassword.py b/API-SERVICE/ApiList/common/commonPassword.py index 781342ca..b8114026 100644 --- a/API-SERVICE/ApiList/common/commonPassword.py +++ b/API-SERVICE/ApiList/common/commonPassword.py @@ -2,7 +2,7 @@ from pydantic import BaseModel from fastapi.logger import logger from fastapi.requests import Request -import jwt +from jose import jwt from Utils.CommonUtil import ( connect_db, get_exception_info, diff --git a/API-SERVICE/ApiList/common/commonRegister.py b/API-SERVICE/ApiList/common/commonRegister.py index 6522573e..9b209529 100644 --- a/API-SERVICE/ApiList/common/commonRegister.py +++ b/API-SERVICE/ApiList/common/commonRegister.py @@ -1,7 +1,7 @@ from typing import Dict from pydantic import BaseModel from fastapi.logger import logger -from Utils.CommonUtil import connect_db, get_admin_token, get_exception_info, convert_data, get_keycloak_manager +from Utils.CommonUtil import connect_db, get_exception_info, convert_data from ApiService.ApiServiceConfig import config @@ -22,25 +22,8 @@ def make_register_query(register: commonRegister): return query -async def api(register: commonRegister) -> Dict: +def api(register: commonRegister) -> Dict: try: - admin_token = await get_admin_token() - - reg_data = { - "username": register.data["user_id"], - "firstName": register.data["user_nm"], - "email": register.data["email"], - "emailVerified": True, - "enabled": True, - "credentials": [{"value": register.data["user_password"]}], - "attributes": register.data, - } - print(config.keycloak_info["realm"]) - res = await get_keycloak_manager().create_user( - token=admin_token, realm=config.keycloak_info["realm"], **reg_data - ) - print(res) - query = make_register_query(register) db = connect_db() diff --git a/API-SERVICE/ApiList/common/commonToken.py b/API-SERVICE/ApiList/common/commonToken.py index e3f582f7..a3253f8e 100644 --- a/API-SERVICE/ApiList/common/commonToken.py +++ b/API-SERVICE/ApiList/common/commonToken.py @@ -2,7 +2,7 @@ from fastapi.logger import logger from fastapi.responses import JSONResponse from datetime import timedelta -import jwt +from jose import jwt from Utils.CommonUtil import get_exception_info, get_user, create_token, make_token_data from ApiService.ApiServiceConfig import config from starlette.requests import Request diff --git a/API-SERVICE/ApiList/common/commonUserInfo.py b/API-SERVICE/ApiList/common/commonUserInfo.py index 1d972528..e67cabc9 100644 --- a/API-SERVICE/ApiList/common/commonUserInfo.py +++ b/API-SERVICE/ApiList/common/commonUserInfo.py @@ -1,6 +1,6 @@ from typing import Dict from fastapi.logger import logger -import jwt +from jose import jwt from starlette.requests import Request from Utils.CommonUtil import get_exception_info, get_user, make_res_msg From 800d18be9412e7fb8d26aca4a5893fac94527106 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 4 Jul 2023 16:13:35 +0900 Subject: [PATCH 304/323] =?UTF-8?q?fix:=20els=20=EB=8F=99=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=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 --- API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py b/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py index 188d6a0f..919f18df 100644 --- a/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py +++ b/API-SERVICE/ApiList/meta/updateElsBizMetaBulk.py @@ -22,7 +22,7 @@ def api() -> Dict: meta_wrap_list = db.select(db_query)[0] for meta_wrap in meta_wrap_list: els_dict = data_process(meta_wrap) - es.insert(meta_wrap,meta_wrap["biz_dataset_id"]) + es.insert(els_dict["_source"],meta_wrap["biz_dataset_id"]) # bulk_meta_item.append(els_dict) # helpers.bulk(es.conn, bulk_meta_item, index=es.index) From 3f8570e450ca03085779bad767ffbe8168401b0b Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 14 Jul 2023 16:11:33 +0900 Subject: [PATCH 305/323] =?UTF-8?q?[AIPLATFORM-2015]=20feat:=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=99=84=EC=84=B1=20API=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=ED=98=95=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 --- API-SERVICE/ApiList/meta/getPrefixBizMeta.py | 35 +++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 3a472009..11c40a61 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -1,4 +1,5 @@ -from typing import Dict, Optional +from typing import Dict +from fastapi.logger import logger from pydantic import BaseModel from ELKSearch.Manager.manager import ElasticSearchManager from Utils.CommonUtil import get_exception_info @@ -7,10 +8,10 @@ class Prefix(BaseModel): + index: str size: int - keyword: str - index: Optional[str] = "" - field: Optional[str] = "" + fields: list + query: str def api(input: Prefix) -> Dict: @@ -20,18 +21,34 @@ def api(input: Prefix) -> Dict: :param keyword: type dict, ex) {"data_name" : "테"} :return: """ - if input.field == "": - input.field = "data_nm" - query = {input.field: input.keyword} + if not len(input.fields): + input.fields = ["data_nm"] els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: if input.index != "": els_config["index"] = input.index es = ElasticSearchManager(**els_config) - es.size = input.size - prefix_data = es.prefix(query,[input.field]) + input.query = f"(*{input.query}*)" + del input.index + del input.size + search_query = {"query_string": input.dict()} + logger.info(search_query) + + body = { + "query": { + "bool": { + "must": [search_query] + } + } + } + es.body = body + logger.info(es.body) + prefix_data = es.search(input.fields) + logger.info(prefix_data) + if not len(prefix_data): + return {"result": 1,"data": []} except Exception: except_name = get_exception_info() result = {"result": 0, "errorMessage": except_name} From a6e2545b49921319e1252ed3208528d42638369b Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 17 Jul 2023 07:57:19 +0900 Subject: [PATCH 306/323] =?UTF-8?q?[AIPLATFORM-2015]=20feat:=20multi=20ind?= =?UTF-8?q?ex=EB=A1=9C=20=EA=B2=80=EC=83=89=ED=95=98=EB=8A=94=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/ApiList/meta/getPrefixBizMeta.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py index 11c40a61..d6740ce8 100644 --- a/API-SERVICE/ApiList/meta/getPrefixBizMeta.py +++ b/API-SERVICE/ApiList/meta/getPrefixBizMeta.py @@ -25,8 +25,7 @@ def api(input: Prefix) -> Dict: input.fields = ["data_nm"] els_config = get_config(config.root_path,"config.ini")[config.db_type[:-3]] try: - if input.index != "": - els_config["index"] = input.index + els_config["index"] = ["biz_meta","ckan_data"] es = ElasticSearchManager(**els_config) es.size = input.size input.query = f"(*{input.query}*)" From afd0984f9feea4c140c5c11929cc8da356316a4c Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Mon, 17 Jul 2023 13:42:56 +0900 Subject: [PATCH 307/323] =?UTF-8?q?[AIPLATFORM-2015]=20fix:=20default?= =?UTF-8?q?=EA=B0=92=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 3a527c41..b0cd39ad 100644 --- a/API-SERVICE/ELKSearch/Manager/manager.py +++ b/API-SERVICE/ELKSearch/Manager/manager.py @@ -8,7 +8,7 @@ def __init__( self, host: str = "192.168.101.44", port: str = "39200", - page: int = 1, + page: int = 0, size: int = 10, index: str = "biz_meta", ): From 113ea65ecf09a39d672257a65d14d192f8db7e8a Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 25 Jul 2023 16:52:38 +0900 Subject: [PATCH 308/323] =?UTF-8?q?fix:=20datetime=20format=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=EB=AC=B8=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/elasticsearch_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py index fef41996..ec82df1a 100644 --- a/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py +++ b/API-SERVICE/ELKSearch/Utils/elasticsearch_utils.py @@ -59,8 +59,8 @@ def data_process(data): data["re_data_prv_desk"] = re.sub("[ ]", "", str(data["data_prv_desk"])) # test 환경에서 updt_dt가 None값인 경우가 있음 - if "updt_dt" in data.keys() and data["updt_dt"] and len(data["updt_dt"]) > 26: - data["updt_dt"] = datetime.strptime(data["updt_dt"][:-3], "%Y-%m-%d %H:%M:%S.%f") + if "updt_dt" in data.keys() and data["updt_dt"] and len(data["updt_dt"]) > 25: + data["updt_dt"] = datetime.strptime(data["updt_dt"], "%Y-%m-%d %H:%M:%S.%f") els_dict = default_process(els_dict, data) return els_dict From 525166d9b0cc954ee10262fde3ee4bb2bf73d680 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 1 Aug 2023 14:27:13 +0900 Subject: [PATCH 309/323] =?UTF-8?q?fix:=20db,=20server=20host=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/ELKSearch/conf/config.ini | 8 ++++---- API-SERVICE/ELKSearch/conf/db_config.ini | 2 +- API-SERVICE/conf/meta/config.ini | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/API-SERVICE/ELKSearch/conf/config.ini b/API-SERVICE/ELKSearch/conf/config.ini index 56cfcb0b..0b592cc7 100644 --- a/API-SERVICE/ELKSearch/conf/config.ini +++ b/API-SERVICE/ELKSearch/conf/config.ini @@ -1,6 +1,6 @@ # search API config [commercial] -host = 10.10.20.59 +host = 10.10.10.62 port = 39200 [local] @@ -8,16 +8,16 @@ host = localhost port = 9200 [test] -host = 192.168.101.44 +host = 10.10.10.62 port = 39200 # els_update config [meta] -host = 192.168.101.44 +host = 10.10.10.62 port = 39200 index = biz_meta [ckan] -host = 192.168.101.44 +host = 10.10.10.62 port = 39200 index = ckan_data \ 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 f752a5bb..c6beb751 100644 --- a/API-SERVICE/ELKSearch/conf/db_config.ini +++ b/API-SERVICE/ELKSearch/conf/db_config.ini @@ -15,7 +15,7 @@ database = dataportal schema = meta [commercial_db] -host = 10.10.20.60 +host = 10.10.10.34 port = 5432 user = dpmanager password = hello.dp12#$ diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index 5f54c92e..e73c1e7d 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -7,7 +7,7 @@ database = dataportal schema = meta [commercial_db] -host = 192.168.54.60 +host = 10.10.10.34 port = 5432 user = dpme password = hello.meta12#$ From fe11c0c8a67ea1625448bce03529455f5594f20f Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Tue, 8 Aug 2023 08:33:48 +0900 Subject: [PATCH 310/323] =?UTF-8?q?[AIPLATFORM-2084]=20feat:=20=ED=95=9C?= =?UTF-8?q?=EC=9E=90=EC=97=B0=20SSO=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/ConnectIRIS.py | 115 ++++++++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 5 ++ 2 files changed, 120 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/ConnectIRIS.py diff --git a/API-SERVICE/ApiList/meta/ConnectIRIS.py b/API-SERVICE/ApiList/meta/ConnectIRIS.py new file mode 100644 index 00000000..2c1813df --- /dev/null +++ b/API-SERVICE/ApiList/meta/ConnectIRIS.py @@ -0,0 +1,115 @@ +import json +import string +import random +import requests +from typing import Dict +from Utils.CommonUtil import get_exception_info, connect_db +from fastapi.logger import logger + + +base_url = "https://b-iris.mobigen.com" + + +def get_token(iris_info, header): + iris_id = iris_info[0]["iris_id"] + iris_pw = iris_info[0]["iris_pw"] + login_iris = { + "userId": iris_id, + "userPass": iris_pw + } + res = requests.post(f"{base_url}/authenticate",data=json.dumps(login_iris), verify=False, headers=header) + + return res.json() + + +def get_random_str(is_num: bool) -> str: + """ + :param is_num: + - is_num이 True이면 10자리 숫자를 임의로 반환 + - False이면 5자리 영문자를 랜덤하게 반환 + :return: + """ + if is_num: + result = [str(random.randrange(0,9)) for _ in range(0,5)] + else: + result = [random.choice(string.ascii_lowercase) for _ in range(0,5)] + return "".join(result) + + +# get +def api(user_id: str) -> Dict: + iris_query = f"select * from users.tb_iris_user_info where user_id = '{user_id}'" + header = {"Content-Type": "application/json"} + try: + db = connect_db() + # join check + iris_info = db.select(iris_query)[0] + + # join iris + if not len(iris_info): + # get user info + user_query = f"select * from users.tb_user_info where user_id = '{user_id}'" + user_info = db.select(user_query)[0][0] + + # set iris id pw + while True: + pw = get_random_str(False) + iris_pw = f"{pw[0].upper()}{pw[1:]}-{get_random_str(True)}" + iris_id = f"katech{get_random_str(False)}{get_random_str(True)}" + + logger.info("=== CREATE USER ID,PW ===") + logger.info(f"IRIS ID : {iris_id}") + logger.info(f"IRIS PW : {iris_pw}") + logger.info("==========================") + + # check duplicate iris_id + dup_query = f"select * from users.tb_iris_user_info where iris_id = '{iris_id}'" + dup_check = db.select(dup_query)[0] + logger.info(dup_check) + if not len(dup_check): + logger.info("break") + break + # insert 구문 + insert_query = f"INSERT INTO users.tb_iris_user_info (user_id, iris_id, iris_pw) " \ + f"VALUES {user_id, iris_id, iris_pw};" + logger.info(insert_query) + logger.info(db.execute(insert_query)) + + join_info = { + "userId": iris_id, + "userPass": iris_pw, + "roleCode": "USER", + "groupId": None, + "name": user_info["user_nm"], + "desc": "테스트용 아이디", + "email": user_id, + "phone": user_info["moblphon"] + } + logger.info(join_info) + + # login + iris_root = [{ + "iris_id": "root", + "iris_pw": "!dufmaQkdgkr202208" + }] + root_token = get_token(iris_root, header)["token"] + header["x-access-token"] = root_token + + logger.info(root_token) + logger.info(header) + + res = requests.post(f"{base_url}/meta/account",data=json.dumps(join_info), verify=False, headers=header) + logger.info(res.text) + + del header["x-access-token"] + + iris_info = db.select(iris_query)[0] + logger.info(iris_info) + user_token = get_token(iris_info, header) + + result = {"result": 1, "errorMessage": "", "data": user_token} + except Exception: + except_name = get_exception_info() + result = {"result": 0, "errorMessage": except_name} + + return result \ No newline at end of file diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 9c1f8108..93d528b5 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -61,4 +61,9 @@ sub_dir = meta [updateElsBizMetaBulk] method = GET url = /portal/api/meta/updateElsBizMetaBulk +sub_dir = meta + +[ConnectIRIS] +method = GET +url = /portal/api/meta/ConnectIRIS sub_dir = meta \ No newline at end of file From 93893249fc8ee9cb6bfaf9674edb47245ff115a4 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 24 Aug 2023 15:08:24 +0900 Subject: [PATCH 311/323] =?UTF-8?q?[AIPLATFORM-2129]=20feat:=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=EB=A9=94=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/Utils/batch_email.py | 5 ++- .../conf/sitemng/template/notyEmail.html | 37 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/conf/sitemng/template/notyEmail.html diff --git a/API-SERVICE/Utils/batch_email.py b/API-SERVICE/Utils/batch_email.py index 64e8b1f6..083a10dd 100644 --- a/API-SERVICE/Utils/batch_email.py +++ b/API-SERVICE/Utils/batch_email.py @@ -25,7 +25,10 @@ def email_handler(): subject = "[자동차데이터포털] 자동차데이터포털에서 공유한 데이터입니다." html = html.replace("URL", email_info['contents']) else: - subject = f"[자동차데이터포털] {email_info['title']} 신청 메일 입니다." + if email_info["tmplt_cd"] == "noty": + subject = "[자동차데이터포털] 자동차데이터포털에서 보내는 알림입니다." + else: + subject = f"[자동차데이터포털] {email_info['title']} 신청 메일입니다." content = email_info["contents"].split("|") html = html.replace("TITLE", email_info['title']) html = html.replace("CONTENTS1", content[0]) diff --git a/API-SERVICE/conf/sitemng/template/notyEmail.html b/API-SERVICE/conf/sitemng/template/notyEmail.html new file mode 100644 index 00000000..d66380da --- /dev/null +++ b/API-SERVICE/conf/sitemng/template/notyEmail.html @@ -0,0 +1,37 @@ + + + + + + +
+
+

+ +

+
+ + + + + + + + + +
+ 자동차데이터포털 알림 메일 +
+
+

CONTENT1/p> +

CONTENT2

+
+
+
+
+
+ + + \ No newline at end of file From 4f4109e0500313071b50c6d8352ae91efaedbdf9 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Thu, 24 Aug 2023 15:11:29 +0900 Subject: [PATCH 312/323] =?UTF-8?q?[AIPLATFORM-2129]=20chore:=20subject=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/Utils/batch_email.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/Utils/batch_email.py b/API-SERVICE/Utils/batch_email.py index 083a10dd..bb47f170 100644 --- a/API-SERVICE/Utils/batch_email.py +++ b/API-SERVICE/Utils/batch_email.py @@ -26,7 +26,7 @@ def email_handler(): html = html.replace("URL", email_info['contents']) else: if email_info["tmplt_cd"] == "noty": - subject = "[자동차데이터포털] 자동차데이터포털에서 보내는 알림입니다." + subject = "[자동차데이터포털] 자동차데이터포털에서 보내는 알림 메일입니다." else: subject = f"[자동차데이터포털] {email_info['title']} 신청 메일입니다." content = email_info["contents"].split("|") From 3bdd88958b1051a6632ffb72ba5ca45a30ba3bdd Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 25 Aug 2023 07:46:22 +0900 Subject: [PATCH 313/323] =?UTF-8?q?[AIPLATFORM-2129]=20chore:=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/sitemng/template/notyEmail.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/conf/sitemng/template/notyEmail.html b/API-SERVICE/conf/sitemng/template/notyEmail.html index d66380da..bff3886c 100644 --- a/API-SERVICE/conf/sitemng/template/notyEmail.html +++ b/API-SERVICE/conf/sitemng/template/notyEmail.html @@ -22,7 +22,7 @@

-

CONTENT1/p> +

CONTENT1

CONTENT2

+ + + + + + + + +
+ 자동차데이터포털 알림 메일 +
+
+

CONTANTS1

+
+

CONTANTS2

+

+
+
+ + + + + \ No newline at end of file From e958d43dda567986e17c80b0b2a84d70bf505215 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Aug 2023 13:45:13 +0900 Subject: [PATCH 318/323] =?UTF-8?q?chore:=20=EC=98=A4=ED=83=80=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/sitemng/template/analysisRequestEmail.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html b/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html index 81847859..bc7f63b9 100644 --- a/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html +++ b/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html @@ -22,9 +22,9 @@

-

CONTANTS1

+

CONTENTS1


-

CONTANTS2

+

CONTENTS2

From 061337c36ab0b28531c3d6b4b7755c65f0a6f6c1 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Aug 2023 14:14:56 +0900 Subject: [PATCH 319/323] =?UTF-8?q?chore:=20tag=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/conf/sitemng/template/analysisRequestEmail.html | 1 + 1 file changed, 1 insertion(+) diff --git a/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html b/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html index bc7f63b9..94d0e8fe 100644 --- a/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html +++ b/API-SERVICE/conf/sitemng/template/analysisRequestEmail.html @@ -24,6 +24,7 @@

CONTENTS1


+

[ 요청 데이터 목록 ]

CONTENTS2

From 88da5a86f75be58a91138f0122f0a1651bed5bc9 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Wed, 30 Aug 2023 15:28:15 +0900 Subject: [PATCH 320/323] =?UTF-8?q?feat:=20=EC=9E=84=EC=8B=9C=EB=B9=84?= =?UTF-8?q?=EB=B0=80=EB=B2=88=ED=98=B8=20=EB=B0=9C=EC=86=A1=20API=20meta?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/emailAthnSend.py | 81 +++++++++++++++++++++++ API-SERVICE/Utils/CommonUtil.py | 2 + API-SERVICE/conf/meta/api_config.ini | 6 ++ API-SERVICE/conf/meta/config.ini | 10 ++- 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 API-SERVICE/ApiList/meta/emailAthnSend.py diff --git a/API-SERVICE/ApiList/meta/emailAthnSend.py b/API-SERVICE/ApiList/meta/emailAthnSend.py new file mode 100644 index 00000000..86f71da2 --- /dev/null +++ b/API-SERVICE/ApiList/meta/emailAthnSend.py @@ -0,0 +1,81 @@ +import random +import string +from typing import Dict + +from fastapi.logger import logger +from pydantic import BaseModel + +from ApiService.ApiServiceConfig import config +from Utils import insert_mail_history +from Utils.CommonUtil import ( + get_exception_info, + connect_db, + convert_data, + send_template_mail, +) + + +class EmailNotAuth(Exception): + pass + + +class EmailNotExist(Exception): + pass + + +class EmailAthnSend(BaseModel): + email: str + msg_type: str # register or password + + +def make_auth_no(): + string_pool = string.ascii_letters + string.digits + auth_no = "" + for _ in range(int(config.email_auth["auth_no_len"])): + auth_no += random.choice(string_pool) + return auth_no + + +def make_email_auth_query(email, auth_no, exist_mail): + if exist_mail: + query = f"UPDATE tb_email_athn_info \ + SET athn_no={convert_data(auth_no)}, send_date=NOW() WHERE email={convert_data(email)};" + else: + query = f"INSERT INTO tb_email_athn_info (email, athn_no, athn_yn, send_date) \ + VALUES ({convert_data(email)}, {convert_data(auth_no)}, 'N', NOW());" + return query + + +def api(email_auth: EmailAthnSend) -> Dict: + try: + auth_no = make_auth_no() + db = connect_db() + exist_mail, _ = db.select(f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_auth.email)}") + + if email_auth.msg_type == "password": + if len(exist_mail) == 0: + raise EmailNotExist + if exist_mail[0]["athn_yn"] == "N": + raise EmailNotAuth + + send_template_mail(auth_no, email_auth.email, email_auth.msg_type) + insert_mail_history( + rcv_adr=email_auth.email, + title=config.email_auth[f"subject_{email_auth.msg_type}"], + contents=auth_no, + tmplt_cd=email_auth.msg_type, + ) + + time_zone = "Asia/Seoul" + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + query = make_email_auth_query(email_auth.email, auth_no, exist_mail) + db.execute(query) + + logger.info("Successfully sent the mail.") + 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/Utils/CommonUtil.py b/API-SERVICE/Utils/CommonUtil.py index c19d4fa4..dc1825b0 100644 --- a/API-SERVICE/Utils/CommonUtil.py +++ b/API-SERVICE/Utils/CommonUtil.py @@ -144,6 +144,8 @@ def prepare_config() -> None: config.pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") config.email_auth = api_router_cfg["email_auth"] config.keycloak_info = api_router_cfg["keycloak_info"] + if config.category == "meta": + config.email_auth = api_router_cfg["email_auth"] def get_keycloak_manager(): diff --git a/API-SERVICE/conf/meta/api_config.ini b/API-SERVICE/conf/meta/api_config.ini index 93d528b5..1537a8cf 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -66,4 +66,10 @@ sub_dir = meta [ConnectIRIS] method = GET url = /portal/api/meta/ConnectIRIS +sub_dir = meta + + +[emailAthnSend] +method = POST +url = /portal/api/meta/emailAthnSend sub_dir = meta \ No newline at end of file diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index e73c1e7d..dcdfb60f 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -18,4 +18,12 @@ schema = meta name = user-katech-access-token secret = jwt-secrect-b-iris - +[email_auth] +auth_no_len = 10 +subject_register = [자동차데이터포털]회원가입을 위한 인증 메일입니다. +subject_password = [자동차데이터포털]비밀번호 변경을 위한 인증 메일입니다. +subject_share = [자동차데이터포털] 자동차데이터포털에서 공유한 데이터입니다. +server_addr = smtp.office365.com +port = 587 +login_user = admin@bigdata-car.kr +login_pass = Pas07054354@katech! \ No newline at end of file From b8880c8dd89dea322a2d9bc5d9e558c7a0d29eb2 Mon Sep 17 00:00:00 2001 From: swish1995 Date: Wed, 30 Aug 2023 16:25:19 +0900 Subject: [PATCH 321/323] =?UTF-8?q?feat:=20=EB=B9=84=EB=B0=80=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=9D=B8=EC=A6=9D=EC=BD=94=EB=93=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20API=20meta=20=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/emailAthnCnfm.py | 39 +++++++++++++++++++ API-SERVICE/ApiList/meta/emailAthnPass.py | 47 +++++++++++++++++++++++ API-SERVICE/conf/meta/api_config.ini | 10 +++++ API-SERVICE/conf/meta/config.ini | 1 + 4 files changed, 97 insertions(+) create mode 100644 API-SERVICE/ApiList/meta/emailAthnCnfm.py create mode 100644 API-SERVICE/ApiList/meta/emailAthnPass.py diff --git a/API-SERVICE/ApiList/meta/emailAthnCnfm.py b/API-SERVICE/ApiList/meta/emailAthnCnfm.py new file mode 100644 index 00000000..032b0f9d --- /dev/null +++ b/API-SERVICE/ApiList/meta/emailAthnCnfm.py @@ -0,0 +1,39 @@ +from typing import Dict +from fastapi.logger import logger +from pydantic import BaseModel +from Utils.CommonUtil import get_exception_info, connect_db, convert_data + + +class EmailAuthFail(Exception): + pass + + +class EmailAthnCnfm(BaseModel): + email: str + athn_no: str + + +def api(email_confirm: EmailAthnCnfm) -> Dict: + try: + db = connect_db() + email_info, _ = db.select( + f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_confirm.email)}" + ) + + if email_info[0]["athn_no"] == email_confirm.athn_no: + time_zone = "Asia/Seoul" + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + db.execute( + f"UPDATE tb_email_athn_info \ + SET athn_yn='Y', athn_date=NOW() WHERE email={convert_data(email_confirm.email)};" + ) + else: + raise EmailAuthFail + logger.info("Successfully Auth Confirm.") + 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/emailAthnPass.py b/API-SERVICE/ApiList/meta/emailAthnPass.py new file mode 100644 index 00000000..d3b5ad60 --- /dev/null +++ b/API-SERVICE/ApiList/meta/emailAthnPass.py @@ -0,0 +1,47 @@ +from typing import Dict +from fastapi.logger import logger +from pydantic import BaseModel +from Utils.CommonUtil import get_exception_info, connect_db, convert_data +from ApiService.ApiServiceConfig import config + + +class EmailAuthFail(Exception): + pass + + +class EmailAthnPass(BaseModel): + email: str + athn_no: str + new_password: str + + +def api(email_athn_pass: EmailAthnPass) -> Dict: + user_id = email_athn_pass.email + new_password = email_athn_pass.new_password + user_info_table = config.user_info["table"] + try: + db = connect_db() + email_info, _ = db.select( + f"SELECT * FROM tb_email_athn_info WHERE email={convert_data(email_athn_pass.email)}" + ) + + if email_info[0]["athn_no"] == email_athn_pass.athn_no: + time_zone = "Asia/Seoul" + db.execute(f"SET TIMEZONE={convert_data(time_zone)}") + if email_info[0]["athn_yn"] == "Y": + db.execute( + f'UPDATE {user_info_table} SET {config.user_info["password_column"]} = {convert_data(config.pwd_context.hash(new_password))} \ + WHERE {config.user_info["id_column"]} = {convert_data(user_id)};' + ) + else: + raise EmailAuthFail + else: + raise EmailAuthFail + logger.info("Successfully Auth Password.") + 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 1537a8cf..ff1c1f4f 100644 --- a/API-SERVICE/conf/meta/api_config.ini +++ b/API-SERVICE/conf/meta/api_config.ini @@ -72,4 +72,14 @@ sub_dir = meta [emailAthnSend] method = POST url = /portal/api/meta/emailAthnSend +sub_dir = meta + +[emailAthnCnfm] +method = POST +url = /portal/api/meta/emailAthnCnfm +sub_dir = meta + +[emailAthnPass] +method = POST +url = /portal/api/meta/emailAthnPass sub_dir = meta \ No newline at end of file diff --git a/API-SERVICE/conf/meta/config.ini b/API-SERVICE/conf/meta/config.ini index dcdfb60f..2b7e30f7 100644 --- a/API-SERVICE/conf/meta/config.ini +++ b/API-SERVICE/conf/meta/config.ini @@ -18,6 +18,7 @@ schema = meta name = user-katech-access-token secret = jwt-secrect-b-iris +# emailAthnSend, emailAthnCnfm [email_auth] auth_no_len = 10 subject_register = [자동차데이터포털]회원가입을 위한 인증 메일입니다. From b6098f4c5986b19283a50dcf7c99bdb0a3522938 Mon Sep 17 00:00:00 2001 From: LeeYumi Date: Fri, 1 Sep 2023 15:48:27 +0900 Subject: [PATCH 322/323] =?UTF-8?q?fix:=20iris=20sso=20group=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/ConnectIRIS.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API-SERVICE/ApiList/meta/ConnectIRIS.py b/API-SERVICE/ApiList/meta/ConnectIRIS.py index 2c1813df..ad780764 100644 --- a/API-SERVICE/ApiList/meta/ConnectIRIS.py +++ b/API-SERVICE/ApiList/meta/ConnectIRIS.py @@ -79,7 +79,7 @@ def api(user_id: str) -> Dict: "userId": iris_id, "userPass": iris_pw, "roleCode": "USER", - "groupId": None, + "groupId": "62b3fa2f-f3f5-4f88-a6de-dfef48c5c37a", # Default Group "name": user_info["user_nm"], "desc": "테스트용 아이디", "email": user_id, From f928c62bd67535a60d667dc6ddb402ead7bcd866 Mon Sep 17 00:00:00 2001 From: swish1995 Date: Tue, 5 Sep 2023 12:25:33 +0900 Subject: [PATCH 323/323] =?UTF-8?q?del:=20ConnectIRIS=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=82=AD=EC=A0=9C=20meta=20?= =?UTF-8?q?=3D>=20common?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API-SERVICE/ApiList/meta/ConnectIRIS.py | 115 ------------------------ 1 file changed, 115 deletions(-) delete mode 100644 API-SERVICE/ApiList/meta/ConnectIRIS.py diff --git a/API-SERVICE/ApiList/meta/ConnectIRIS.py b/API-SERVICE/ApiList/meta/ConnectIRIS.py deleted file mode 100644 index ad780764..00000000 --- a/API-SERVICE/ApiList/meta/ConnectIRIS.py +++ /dev/null @@ -1,115 +0,0 @@ -import json -import string -import random -import requests -from typing import Dict -from Utils.CommonUtil import get_exception_info, connect_db -from fastapi.logger import logger - - -base_url = "https://b-iris.mobigen.com" - - -def get_token(iris_info, header): - iris_id = iris_info[0]["iris_id"] - iris_pw = iris_info[0]["iris_pw"] - login_iris = { - "userId": iris_id, - "userPass": iris_pw - } - res = requests.post(f"{base_url}/authenticate",data=json.dumps(login_iris), verify=False, headers=header) - - return res.json() - - -def get_random_str(is_num: bool) -> str: - """ - :param is_num: - - is_num이 True이면 10자리 숫자를 임의로 반환 - - False이면 5자리 영문자를 랜덤하게 반환 - :return: - """ - if is_num: - result = [str(random.randrange(0,9)) for _ in range(0,5)] - else: - result = [random.choice(string.ascii_lowercase) for _ in range(0,5)] - return "".join(result) - - -# get -def api(user_id: str) -> Dict: - iris_query = f"select * from users.tb_iris_user_info where user_id = '{user_id}'" - header = {"Content-Type": "application/json"} - try: - db = connect_db() - # join check - iris_info = db.select(iris_query)[0] - - # join iris - if not len(iris_info): - # get user info - user_query = f"select * from users.tb_user_info where user_id = '{user_id}'" - user_info = db.select(user_query)[0][0] - - # set iris id pw - while True: - pw = get_random_str(False) - iris_pw = f"{pw[0].upper()}{pw[1:]}-{get_random_str(True)}" - iris_id = f"katech{get_random_str(False)}{get_random_str(True)}" - - logger.info("=== CREATE USER ID,PW ===") - logger.info(f"IRIS ID : {iris_id}") - logger.info(f"IRIS PW : {iris_pw}") - logger.info("==========================") - - # check duplicate iris_id - dup_query = f"select * from users.tb_iris_user_info where iris_id = '{iris_id}'" - dup_check = db.select(dup_query)[0] - logger.info(dup_check) - if not len(dup_check): - logger.info("break") - break - # insert 구문 - insert_query = f"INSERT INTO users.tb_iris_user_info (user_id, iris_id, iris_pw) " \ - f"VALUES {user_id, iris_id, iris_pw};" - logger.info(insert_query) - logger.info(db.execute(insert_query)) - - join_info = { - "userId": iris_id, - "userPass": iris_pw, - "roleCode": "USER", - "groupId": "62b3fa2f-f3f5-4f88-a6de-dfef48c5c37a", # Default Group - "name": user_info["user_nm"], - "desc": "테스트용 아이디", - "email": user_id, - "phone": user_info["moblphon"] - } - logger.info(join_info) - - # login - iris_root = [{ - "iris_id": "root", - "iris_pw": "!dufmaQkdgkr202208" - }] - root_token = get_token(iris_root, header)["token"] - header["x-access-token"] = root_token - - logger.info(root_token) - logger.info(header) - - res = requests.post(f"{base_url}/meta/account",data=json.dumps(join_info), verify=False, headers=header) - logger.info(res.text) - - del header["x-access-token"] - - iris_info = db.select(iris_query)[0] - logger.info(iris_info) - user_token = get_token(iris_info, header) - - result = {"result": 1, "errorMessage": "", "data": user_token} - except Exception: - except_name = get_exception_info() - result = {"result": 0, "errorMessage": except_name} - - return result \ No newline at end of file