From 694d559da2ccf033ac2a9949e179a3ba6744f1a9 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Mon, 13 May 2024 17:41:28 +0300 Subject: [PATCH] done 5task, ready 0.6 & create 0.7 --- .../__pycache__/add_func.cpython-311.pyc | Bin .../__pycache__/dbconnection.cpython-311.pyc | Bin .../__pycache__/dbtable.cpython-311.pyc | Bin 9217 -> 8247 bytes .../project_config.cpython-311.pyc | Bin .../__pycache__/texts.cpython-311.pyc | Bin 1746 -> 1690 bytes {0.6_test => 0.6_stable}/config.yaml | 0 {0.6_test => 0.6_stable}/dbconnection.py | 0 {0.6_test => 0.6_stable}/dbtable.py | 14 +- {0.6_test => 0.6_stable}/main.py | 17 +- {0.6_test => 0.6_stable}/project_config.py | 0 .../__pycache__/cath_table.cpython-311.pyc | Bin 0 -> 7166 bytes .../__pycache__/dish_table.cpython-311.pyc | Bin {0.6_test => 0.6_stable}/tables/cath_table.py | 5 +- {0.6_test => 0.6_stable}/tables/dish_table.py | 0 {0.6_test => 0.6_stable}/test.py | 0 {0.6_test => 0.6_stable}/texts.py | 1 - .../__pycache__/cath_table.cpython-311.pyc | Bin 7044 -> 0 bytes .../__pycache__/add_func.cpython-311.pyc | Bin 0 -> 438 bytes .../__pycache__/dbconnection.cpython-311.pyc | Bin 0 -> 2154 bytes 0.7_indev/__pycache__/dbtable.cpython-311.pyc | Bin 0 -> 8247 bytes .../project_config.cpython-311.pyc | Bin 0 -> 1379 bytes 0.7_indev/__pycache__/texts.cpython-311.pyc | Bin 0 -> 1690 bytes 0.7_indev/config.yaml | 6 + 0.7_indev/dbconnection.py | 34 +++ 0.7_indev/dbtable.py | 116 +++++++++ 0.7_indev/main.py | 227 ++++++++++++++++++ 0.7_indev/project_config.py | 21 ++ .../__pycache__/cath_table.cpython-311.pyc | Bin 0 -> 7166 bytes .../__pycache__/dish_table.cpython-311.pyc | Bin 0 -> 14407 bytes 0.7_indev/tables/cath_table.py | 90 +++++++ 0.7_indev/tables/dish_table.py | 131 ++++++++++ 0.7_indev/test.py | 1 + 0.7_indev/texts.py | 28 +++ 33 files changed, 669 insertions(+), 22 deletions(-) rename {0.6_test => 0.6_stable}/__pycache__/add_func.cpython-311.pyc (100%) rename {0.6_test => 0.6_stable}/__pycache__/dbconnection.cpython-311.pyc (100%) rename {0.6_test => 0.6_stable}/__pycache__/dbtable.cpython-311.pyc (76%) rename {0.6_test => 0.6_stable}/__pycache__/project_config.cpython-311.pyc (100%) rename {0.6_test => 0.6_stable}/__pycache__/texts.cpython-311.pyc (85%) rename {0.6_test => 0.6_stable}/config.yaml (100%) rename {0.6_test => 0.6_stable}/dbconnection.py (100%) rename {0.6_test => 0.6_stable}/dbtable.py (90%) rename {0.6_test => 0.6_stable}/main.py (92%) rename {0.6_test => 0.6_stable}/project_config.py (100%) create mode 100644 0.6_stable/tables/__pycache__/cath_table.cpython-311.pyc rename {0.6_test => 0.6_stable}/tables/__pycache__/dish_table.cpython-311.pyc (100%) rename {0.6_test => 0.6_stable}/tables/cath_table.py (96%) rename {0.6_test => 0.6_stable}/tables/dish_table.py (100%) rename {0.6_test => 0.6_stable}/test.py (100%) rename {0.6_test => 0.6_stable}/texts.py (96%) delete mode 100644 0.6_test/tables/__pycache__/cath_table.cpython-311.pyc create mode 100644 0.7_indev/__pycache__/add_func.cpython-311.pyc create mode 100644 0.7_indev/__pycache__/dbconnection.cpython-311.pyc create mode 100644 0.7_indev/__pycache__/dbtable.cpython-311.pyc create mode 100644 0.7_indev/__pycache__/project_config.cpython-311.pyc create mode 100644 0.7_indev/__pycache__/texts.cpython-311.pyc create mode 100644 0.7_indev/config.yaml create mode 100644 0.7_indev/dbconnection.py create mode 100644 0.7_indev/dbtable.py create mode 100644 0.7_indev/main.py create mode 100644 0.7_indev/project_config.py create mode 100644 0.7_indev/tables/__pycache__/cath_table.cpython-311.pyc create mode 100644 0.7_indev/tables/__pycache__/dish_table.cpython-311.pyc create mode 100644 0.7_indev/tables/cath_table.py create mode 100644 0.7_indev/tables/dish_table.py create mode 100644 0.7_indev/test.py create mode 100644 0.7_indev/texts.py diff --git a/0.6_test/__pycache__/add_func.cpython-311.pyc b/0.6_stable/__pycache__/add_func.cpython-311.pyc similarity index 100% rename from 0.6_test/__pycache__/add_func.cpython-311.pyc rename to 0.6_stable/__pycache__/add_func.cpython-311.pyc diff --git a/0.6_test/__pycache__/dbconnection.cpython-311.pyc b/0.6_stable/__pycache__/dbconnection.cpython-311.pyc similarity index 100% rename from 0.6_test/__pycache__/dbconnection.cpython-311.pyc rename to 0.6_stable/__pycache__/dbconnection.cpython-311.pyc diff --git a/0.6_test/__pycache__/dbtable.cpython-311.pyc b/0.6_stable/__pycache__/dbtable.cpython-311.pyc similarity index 76% rename from 0.6_test/__pycache__/dbtable.cpython-311.pyc rename to 0.6_stable/__pycache__/dbtable.cpython-311.pyc index cce88531346e0e98e906cbec3b1323dc64774566..6cf211edc44faf088f7cea9721ee5929b06d06ab 100644 GIT binary patch delta 177 zcmZql*zUl$oR^o20SFXSozjGOH}dt0Fn-=VMY|*+X^;6JyfkyYl}S<2K(>NN41Z1<56Vi0sLJN^d9YDDzMDQVwJ+ am^?>W%|3&XQSt)=cJd=w{0k0QuzdhNA1x~Y delta 751 zcmdn)(CERpoR^o20SLZpI;NTPZRG0}VJzM}Mz2Q zZt;cYrKF~1=B1{DBqrsg7Wsk%*;A6@Q;PBnz>Lhi%#vFoK#|P6;?$y&_~QKB)RK(M zy!7J9K9U;D#aWD#=ZQqse_-O`RJy^#-|yY!J%jlokIWSwnF~BJH-yEe+f1^VXg9^~ z10Msg0B-3EJcVfD3C(z&@KYo1RVBpnwfX~%HH~sj)Owi?aFxSJq z0b~@b0z>nlnue1l!y!vYJr^zJBkD}9;tWSL89{6gupPyCf0|T5;ncN^B$XGo2lDwLI5hJ7I2L|lqN3i%8 K9I{2cK=T1bo7STM diff --git a/0.6_test/__pycache__/project_config.cpython-311.pyc b/0.6_stable/__pycache__/project_config.cpython-311.pyc similarity index 100% rename from 0.6_test/__pycache__/project_config.cpython-311.pyc rename to 0.6_stable/__pycache__/project_config.cpython-311.pyc diff --git a/0.6_test/__pycache__/texts.cpython-311.pyc b/0.6_stable/__pycache__/texts.cpython-311.pyc similarity index 85% rename from 0.6_test/__pycache__/texts.cpython-311.pyc rename to 0.6_stable/__pycache__/texts.cpython-311.pyc index 9ca988eeb9d910a77dd2df866b2a8f0f338119e0..a7e4b31367aaba7e632ffd012d6f473a9efc5784 100644 GIT binary patch delta 63 zcmcb_JBychIWI340}$MM=9nh1kvD*uF?sR<#@5M?nJ;aA%W{TMl2uat0)yxWK2|Z7 N3k*UKRKx+)0RVAs5>x;H delta 79 zcmbQmdx@8KIWI340}w2_=a}ZXkvD*uarWc`jIEO&Ghdplz^u-#e_`W=-52{VY`L&+ e^Lmy`jFN1U;ujc1KM1gjv0Pvff}kP}pa}q7fg0cd diff --git a/0.6_test/config.yaml b/0.6_stable/config.yaml similarity index 100% rename from 0.6_test/config.yaml rename to 0.6_stable/config.yaml diff --git a/0.6_test/dbconnection.py b/0.6_stable/dbconnection.py similarity index 100% rename from 0.6_test/dbconnection.py rename to 0.6_stable/dbconnection.py diff --git a/0.6_test/dbtable.py b/0.6_stable/dbtable.py similarity index 90% rename from 0.6_test/dbtable.py rename to 0.6_stable/dbtable.py index 5a49260..76b8670 100644 --- a/0.6_test/dbtable.py +++ b/0.6_stable/dbtable.py @@ -88,18 +88,8 @@ class DbTable: sql += " ORDER BY " sql += ", ".join(self.primary_key()) cur = self.dbconn.conn.cursor() - try: - cur.execute(sql) - return cur.fetchall() - except psycopg2.errors.UndefinedTable: - self.dbconn.conn.rollback() - self.db_drop() - self.db_init() - self.db_insert_somethings() - finally: - cur.execute(sql) - return cur.fetchall() - + cur.execute(sql) + return cur.fetchall() def select_one(self, **kwargs): conditions = [] diff --git a/0.6_test/main.py b/0.6_stable/main.py similarity index 92% rename from 0.6_test/main.py rename to 0.6_stable/main.py index be2e001..db3398c 100644 --- a/0.6_test/main.py +++ b/0.6_stable/main.py @@ -14,8 +14,11 @@ TODO: 1) Реализовать ввод порядкового номера - done 2) Удалить проверки на "русскоязычный ввод" - done 3) Устранить SQLi с помощью санации атрибутов - done -4) UPDATE для отдельных таблиц - indev +4) UPDATE для категорий - done 5) Красивый вывод - done +6) Доделать ограничение на выбор категории - done +7) Постраничный вывод - indev +8) UPDATE для блюд - indev FIXME: ''' @@ -79,7 +82,7 @@ class Main: menu = texts.show_cath_1txt print(menu) lst = CathTable().all() - + self.max_index = (len(lst)+1) for i in lst: self.cath_arr.append(str(i[0])) @@ -96,10 +99,12 @@ class Main: while True: if next_step == "4": x = int(input('Введите номер удаляемой категории(0 - для отмены): ')) - if (x == 0): - return "1" - else: - CathTable().delete(self.cath_arr[x-1]) + while (x==0)or(x<1 or x>self.max_index): + if (x == 0): + return "1" + elif(x<1 or x>self.max_index): + x = int(input('Вы вышли за пределы таблицы, повторите ввод (0 - для отмены):')) + CathTable().delete(self.cath_arr[x-1]) return "1" elif next_step == "6": #Добавление блюда в категорию diff --git a/0.6_test/project_config.py b/0.6_stable/project_config.py similarity index 100% rename from 0.6_test/project_config.py rename to 0.6_stable/project_config.py diff --git a/0.6_stable/tables/__pycache__/cath_table.cpython-311.pyc b/0.6_stable/tables/__pycache__/cath_table.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4e955fe0282f4b1c18eef6ed012074c438689e9 GIT binary patch literal 7166 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 literal 0 HcmV?d00001 diff --git a/0.6_test/tables/__pycache__/dish_table.cpython-311.pyc b/0.6_stable/tables/__pycache__/dish_table.cpython-311.pyc similarity index 100% rename from 0.6_test/tables/__pycache__/dish_table.cpython-311.pyc rename to 0.6_stable/tables/__pycache__/dish_table.cpython-311.pyc diff --git a/0.6_test/tables/cath_table.py b/0.6_stable/tables/cath_table.py similarity index 96% rename from 0.6_test/tables/cath_table.py rename to 0.6_stable/tables/cath_table.py index 6bb166b..51b0b90 100644 --- a/0.6_test/tables/cath_table.py +++ b/0.6_stable/tables/cath_table.py @@ -21,7 +21,7 @@ class CathTable(DbTable): self.dbconn.conn.commit() def find_by_name(self, name): - + cur = self.dbconn.conn.cursor() param_query = "SELECT id FROM cath WHERE cath_name = %s;" # sql_sel = "SELECT id FROM " + self.table_name() # sql_sel += " WHERE cath_name = " + "'" + name + "'" + ";" @@ -32,7 +32,7 @@ class CathTable(DbTable): def cath_update(self, old): """Функция для обновления категории """ - print(old) + print(f'''Выбрана категория для изменения: {old}''') cur = self.dbconn.conn.cursor() data = input("Введите название (1 - отмена): ").strip() @@ -50,7 +50,6 @@ class CathTable(DbTable): else: data = input("Такое название уже существует. Введите новое (1 - отмена):").strip() - print(data) param_sql = f"UPDATE cath SET cath_name = '{data}' WHERE cath_name = '{old}';" cur.execute(param_sql) self.dbconn.conn.commit() diff --git a/0.6_test/tables/dish_table.py b/0.6_stable/tables/dish_table.py similarity index 100% rename from 0.6_test/tables/dish_table.py rename to 0.6_stable/tables/dish_table.py diff --git a/0.6_test/test.py b/0.6_stable/test.py similarity index 100% rename from 0.6_test/test.py rename to 0.6_stable/test.py diff --git a/0.6_test/texts.py b/0.6_stable/texts.py similarity index 96% rename from 0.6_test/texts.py rename to 0.6_stable/texts.py index bb3e027..f616474 100644 --- a/0.6_test/texts.py +++ b/0.6_stable/texts.py @@ -18,7 +18,6 @@ show_dish_in_cath_txt = """----------------------------------------------------- 1 - возврат в просмотр категорий; 6 - добавление нового блюда; 7 - удаление блюда; - 8 - обновить категорию/блюдо; 9 - выход.""" text_choice_update = """-------------------------------------------------------------------------------------------\n diff --git a/0.6_test/tables/__pycache__/cath_table.cpython-311.pyc b/0.6_test/tables/__pycache__/cath_table.cpython-311.pyc deleted file mode 100644 index 1cde3be752a50f2663233595abfc01ceac4439bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7044 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 JUZb4)_J8Iiy0QQO diff --git a/0.7_indev/__pycache__/add_func.cpython-311.pyc b/0.7_indev/__pycache__/add_func.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d04437b877b8aec015faf51df90798f560ab5a1 GIT binary patch literal 438 zcmZ3^%ge<81Yud`X;nb_F^B^LOi;#W5g=naLkdF*V-7TdcW>CCM3@Ot;vIONuh{(r>XB zB$kw<7UdO#3|3J1rRri86Ox*koDt&@9+Q)pWENwfXBuCUT3iy7n358oR+^WrS5SG2 zH?ufCxw0rezbHN>Grb5DMj&?=D*}lIh8ujU4eocj`KK~X;g})5K<%P{<`n_Wi`-gQ zxV0{@Xnh7M0=l<|6-a@#u4E|U2C+GT#4iq;-29Z%oK(9aULY6b!(w$H@qw9{O6(h=CAB|*av(UON@Es2^3s8qv1}CU<-yke~3l;G%*2gvSMj${WZ}cwBI@z;L{djn(IH z2o?MezmB@2>5ib=>xrjBybtIH-5!X8r6I_Kkd#H+r)5i-qHc>7Q>Qjr%b4a*WvbcY zYT2~p0A(qmEC$LJ(*O{=Ps>`Ftf8+_J(s_4`#K|8GasnswUv);zuL~PEiy(HY|+$> zob7{IF27>3#7NRBdG^!gw4PB{m%sde*~nyL%O6hOP%PcFmbGjL0ZwRg?SV}cC11*0 zic-DMeRz|Om<4G52xJpABcnUTEpfZI86MgB8kj(HIQm;ZFnuSI$Y>*SjT!wN9&LoL z{-GV-ZGLe5@MiP+Cx;uHYxzAFVlNPomy9r+E%=VX2U6V=hY8yZzcXI}19ztDl<39o z* zV%C#DASb>3+c#SX2cpg3!1mnZg+~kZ;H5_JQqB3bJfP$j^c`4oYKLrhe20I6@6$Vc zn>}sdb-d@+0${mK!~1}E;N}HGWu0RwytSq0jAhq}?76k)1_8|LXK-#5;u&nb=hoNx zh#SJWh~6`Z|36wm^S$djKgIj+^1MT>lVo*lc5&fbDILExpOEHmONk%mQt6b$%1xSy zr)J`_iR$H<#Y8-v=om581lQ+FmcF7>xhl;iQ;Eei4Cw{Flp5S literal 0 HcmV?d00001 diff --git a/0.7_indev/__pycache__/dbtable.cpython-311.pyc b/0.7_indev/__pycache__/dbtable.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6cf211edc44faf088f7cea9721ee5929b06d06ab GIT binary patch literal 8247 zcmeHMTWl298J^ketarTQ3pO?vdmV7>wF%b{OrUmrgK%4dy&-`Bo3&?b)~t8U%oy-? zm-r!47i0;8sB9=Gt0*PVM5LA6NKBjo{0~1Ak0Y5#Rrg=+0<+1(^iym5|TL#l_$Uiz=cs2x?8A_m_J$2f|)2Gci z+Gz`K2DI`PKpSrbwDUGVhPMMccm}Y9cK|y15 zrrCQ2e1U;RM0BI8Qfog(_H&$*Wn(ydINg;|B&K;jm^K6NRDR7104rbhs$r3ek!TVYxaEn^yn;X?N5fK-%Mg~XK!P$< zl~vEyCXc0RcBZ&pDP~t8RVbl^sxYBS&hm=_J|^=@@H(9y!2d5Y1uB`9-E0+PjBR-O zW9mzjQPN@6=0bt0guZEkios@yxbI~7AXW60yscSg_J;za1AL%8`l@mLWVfWP`$Lhz zKuBtbjNYyqhLTWLC#lCLCMm)S7}b11nDCf2n-mdcffuorW`R1XfZ?ppUw!=Onqsq7 z;T)}Gjwf8zG(Qu%6}lO|9bTyR%vXDq>Q=S7b#C9>z7*G?a2+bwkzzUu_XN34_5}AG zC1n_81mxBfl7EYTLh0n;e|2St%@ZJTJ(Qz6GQ7&)TmR*t zd_FQR`-6O;7;V5|(qhz^79$ZW#a9447O@WVC`MvEfMyeg(a0siV-nF#Xl7B6Bvcu< zTQ@OlSC~0k|2?E3{nBB8N$QDf&9rak%&jvw&)q(^P}MwN)vQ#ts8uaY=Uv0qw^Hm&CcyB9abXx^4Y#VSZK6VPHUsD=vTJh%>{@JGS5 z#Az7Wp3YGt$SIOWkf9_c(RdUj^D@aZXUU;G>Hv7j5k`^ z-Phac>vj7&yN>p{m+5AM`r;yp`l3*yti`Ca?lZ7mahfoaA{)Dc2*gZAg0byQ(^LZ( zPI{SkLnvh#i3G!7=}lX=YxD(;z9gYsxYK<(UnDl;pw4=vaI7m5k61ib6mZ@{K^I z&8yH?+6FL5rCdY$^JvY(@`s&?i_^QVU7oG{q~>l-vf055 zk1gM@U$MV+eeGIkJ38NXRB7|7ZQj&L9-ke8vO`dJ2*7v6HKe+RpdaH*$TudgPs~=% z$_w?o=j(SX^?TI%Jxc8!g=;N@%@=scB+XGgMj zY&F&j6v(uK9V({jX!c3Un`ITYDy``zZ?vkX@Ax}uJwJ57-TVHbeqX=aW77o;rAXY1 z@Fv1Og#7@I%tUm=A7MoYfI&qy3ok~-qHIQFu(TB$od!UGX?$q;CHD(XY2K?g?^RrT zf5<(|avSDC8%y@^F4WFY`GJzb*Sx@4qk-z7&K{1NDGAn%1 z2O4RG@vJd3pzXdrZULRhu5l#m^NM@52QWb{PKa9_RLq(z>cL_by8gfJXOC&nNP zahz`biDPJncEkk~Q(lc3lO_fuW5YW&n;?o2QPQ|~!@-N=!pUGH6p(|Fu*QgyP-q}9 zcmXT{aT1nGa7NSUpk{;2xFBg(XfICa%8!zPE+gYKN`hfY5M_TPoOc?})$NAn(ta>q z5D=GF|5TcN{pQ5&38lP2EpJ$&ERH4uiOwfn<#f+%`R#+(;#2XTo9DSrDQ?r^I&e41 z6Q9}dy!LRDvhKBM%k+tx_G$aK>o(5v$sPBG?`*lZB~!UrUNuvDs}?4xzg?fOEtbj2 zHJ{giTCX(hR2z1t%4B%ve7`yMt5c8Vg^myAJ3df4&Z-?}mEGsm-RJc8sbD0XDU%b{ z;?8EtVsSKMtbXMBky)$4)~Re=imh8@%chP%*uKDSnrAmDY@^CHrpWXB3Ac9YBbD2_ zMA44s9OQa5&a;gQ+oZBhsm!xvhPKb2KYxn1E9Bzf_w~DaDyctI?(AjEf3(wphCmH% z7O{UDUOFx(ajPjC!J3m?yggAqMDBw-6xV5YZHuCOu;l} zNRS85gW!u@(8TB#twTXklB1;=zetJ)pxLu40O%O&^2Jke?bM^3n8K{rb9z{`W}((I zU+Yn7Th-cDh1;TXTNGx?OE^)k;zsOx?Aq0-t0`tRpPlSP*~qC0PC^WxgrZh=Pj7!WIZMEe#C9BO z9YFq#gt!YTqS-S=C?Ltj4nQZc8{T`snWDB!e;zi>Hp~v+Y0Xv;ArRk#Rz>92f~rwoa&1YP(cGu3P0GQt$rZg!uoqZlbNyfxmL0VkN^F}RV} zaR;L`5iYcn=^t4AGm};5{c&9M*X&B0LG9o zy2TF-k1u}ho6NgviJE`ZC=p8@wY%SYySJ~`4Mw@s+vD~f@UZ&TOB?jnY=N;cAhp(>IHV=Ji9Sj zIeP*B6t+cWTT*PxB3p6e*!5$x5X!n$)}12HQ`g>E`IC?Cex%fISL?T@TzmEB@xgD7 zes%QE>y-UIb-zz>`M%d1+^?FwbZ6tejSADGGEFI_X|a6G%!XSVZr0tdgK(d5-f&!Z zTysu26V9j3@+Hdbs9mgFJN^38%9`oj#4dR%@RKHfH}w0p62E^m!jFeA&-(or#{(h# zjUMXZ2TpyPt1;(BAb}t`Zna?XErf1_K7>;UXAwR`xPX91U)|lJl8C6&1jr}Nze8y< z`?pwHK6zltLR&dFA!NWtTen~_4N!a?i)n!3TQrul2sPDMkp`Q^S_$W?46wAd0^g>= z#^5wrSYyRv7F-+_v+#<|TDL@Hp)8vtbuShxt+h*3A?U0?E_mTPFROp&1(gLo(0OCz z7kp0Cx2RnlgFfgZBy?bKHlpbz8%3{AQS0<)$zq}{OU!wihKY;gKS=#QS9nWE`!`LD BB60u# literal 0 HcmV?d00001 diff --git a/0.7_indev/__pycache__/project_config.cpython-311.pyc b/0.7_indev/__pycache__/project_config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88158818fa1f70bd410e86c341ae49d0211b046d GIT binary patch literal 1379 zcmZ`&&1)M+6o0cj`mm#|NsHqT+^}vTMQLjiLYmf;f~fmNsVO)RqKFJD&8n8WmekpG z?HC6X6R1jk$f4j;dhp3@$t4YhI0-4_KbQ?Vh=H7X%1yyJn4I!vrFE=^ywUvh=KbEj z{msnVKP_tz(9SKKDGL+eKfQ>J_MBZ0olW4ti3fQw;0xf!Rp92f0dO5>*Yd3a ziwOf*`n1;NGG3uHNi8!=PkjL3Ig7xR3nN2*_q1jT8iT>ie-BDa_f(v=VA#ZS! zH?^8P<>nk@sj|KmwFS2nd|IoPE8i_$z-;-uyeDsjSHdec!cTH1Tn~SdH{}g^D_pnb zKj_?+|H_*fyk*P#QR;fwz|b9eSMJzyN8Yx>tC)627qUxH>8VT3qF0J#X^lyoc!;nI z7~O>60LMxHW>3Rq66oBXE$koT+W#^y8*2tP#^OX+1GfJhGG-qWUl|}n`yGa)*92E|zUBwY;>ExzdTw2~<;qGnt!S<8Ru$EUtOk6i>@u(BaG})-Eli{} z3~10ToHZ5oU9YT2StYx#_4PT~w*Bngnd!n=*D1{xzC2g(oZ<(C6H}*I;QB$K-fb4v z6I#Ed(u`HAm4LC;BYmAT702~^{d))vcw`;E_I_yDEz9mea^Rz_+@s;KUoURu!r^1B z;bYCu+vE1uXlwjCdC-9l^7Gc%-`7WXyUL2-GCA3e)F>kjs4N4uB2{VdofJKWNISUWx3w0<7i7;5C&bfEEB Xb8_RokdCzIh>U-o1kiCzjTAixq=;DS literal 0 HcmV?d00001 diff --git a/0.7_indev/__pycache__/texts.cpython-311.pyc b/0.7_indev/__pycache__/texts.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7e4b31367aaba7e632ffd012d6f473a9efc5784 GIT binary patch literal 1690 zcmd5-&ubGw6y9xqP!}3Xpe^cU^j5H?tu<;Zir~SM7X={%mY7{hplwRCtM!(&RRl{! zDT;y!UW&IQO=xP{^dIo>=Gub?1Nd|i5Vg5JT^I#qCoYpNMT$9K7JAkpz{KV;Af^Cp*Z z6c*_zA4q_q9VMWmlIjyeDKMfa#3Bw41)!2rehs{rK*u&#fb|o>WBxots#qv1lTA(% z&jnjo@Zad;J-PFhPOl}_Beo0v-8 zizP;eW2R&0oCJe%!?Ta}yRS@VEqBVkI>(;`cIP ").strip() + + def after_main_menu(self, next_step): + if next_step == "2": + self.db_drop() + self.db_init() + self.db_insert_somethings() + print("Таблицы созданы заново!") + return "0" + elif next_step != "1" and next_step != "9": + print("Выбрано неверное число! Повторите ввод!") + return "0" + else: + return next_step + + def show_cath(self): + self.cath_id = -1 + self.cath_arr = [] + menu = texts.show_cath_1txt + print(menu) + lst = CathTable().all() + self.max_index = (len(lst)+1) + for i in lst: + self.cath_arr.append(str(i[0])) + + for i in range(len(self.cath_arr)): + print(str(i+1) + "\t" + self.cath_arr[i]) + + menu = texts.show_cath_2txt + print(menu) + return + + def after_show_cath(self, next_step): + """Выбор действий после вывода категорий + """ + while True: + if next_step == "4": + x = int(input('Введите номер удаляемой категории(0 - для отмены): ')) + while (x==0)or(x<1 or x>self.max_index): + if (x == 0): + return "1" + elif(x<1 or x>self.max_index): + x = int(input('Вы вышли за пределы таблицы, повторите ввод (0 - для отмены):')) + CathTable().delete(self.cath_arr[x-1]) + return "1" + + elif next_step == "6": #Добавление блюда в категорию + DishTable().insert_dishone(self.cath_id) + next_step = "5" + + elif next_step == "7":#Удаление блюда из категории + x = int(input('Введите номер удаляемого блюда (0 - для отмены): ')) + if(x==0): + pass + else: + DishTable().delete(self.dish_arr[x-1][0]) + next_step = "5" + + elif next_step == "5": + next_step = self.show_dish_in_cath() + + elif next_step == "8": + x = int(input('Выберите номер категории для изменения (0 - для отмены): ')) + if(x==0): + pass + else: + CathTable().cath_update(self.cath_arr[x-1]) + return "1" + + elif next_step != "0" and next_step != "9" and next_step != "3": + print("Выбрано неверное число! Повторите ввод!") + return "1" + else: + return next_step + + def add_cath(self): + """ + Добавление новой категории в таблицу + """ + data = [] + data.append(input("Введите название (1 - отмена): ").strip()) + if data[0] == "1": + return + while((len(data[0].strip()) == 0)or(len(data[0].strip()) > 32)): + if (len(data[0].strip()) > 32): + data[0] = input("Название слишком длинное! Введите название заново (1 - отмена):").strip() + if data[0] == "1": + return + else: + data[0] = input("Название не может быть пустым! Введите название заново (1 - отмена):").strip() + if data[0] == "1": + return + CathTable().insert_one(data) + return + + def show_dish_in_cath(self): + """Вывод всех блюд в выбранной пользователем категории + """ + self.dish_arr = [] + if self.cath_id == -1: + while True: + x = int(input('Выберите номер интересуемой категории (0 - отмена): ')) + if(x==0): + return + else: + self.cath_id = CathTable().find_by_name(self.cath_arr[x-1]) + self.cath_obj = self.cath_arr[x-1] + + print("Выбрана категория: " + self.cath_obj) + print("Блюда:") + + lst = DishTable().all_by_cath_id(self.cath_id) + self.max_len_name = 0 + self.max_index = len(lst) + for i in lst: + self.dish_arr.append([i[2], str(i[1]), str(i[4])]) + self.max_len_name = max(self.max_len_name, len(i[2])) + print("№" + " "*(self.max_index + 1)+ "Название" + " "*(self.max_len_name - 4)\ + +"Время приготовления Краткая инструкция\ + \n-------------------------------------------------------------------------------------------") + for i in range(len(self.dish_arr)): + txt = str(i+1) + " "*(2+self.max_index-len(str(i))) + txt += self.dish_arr[i][0] + " "*(4+self.max_len_name - len(self.dish_arr[i][0])) + txt += self.dish_arr[i][1] + " "*(5+19-len(self.dish_arr[i][1])) + txt += self.dish_arr[i][2] + print(txt) + menu = texts.show_dish_in_cath_txt + print(menu) + return self.read_next_step() + + def main_cycle(self): + """Основной цикл программы, регулирующий порядок действий + """ + current_menu = "0" + next_step = None + + while(current_menu != "9"): + + if current_menu == "0": + self.show_main_menu() + next_step = self.read_next_step() + current_menu = self.after_main_menu(next_step) + + elif current_menu == "1": + self.show_cath() + next_step = self.read_next_step() + current_menu = self.after_show_cath(next_step) + + elif current_menu == "2": + self.show_main_menu() + + elif current_menu == "3": + self.add_cath() + current_menu = "1" + + print("До свидания!") + return + + def test(self): + DbTable.dbconn.test() + +m = Main() +# m.test() +m.main_cycle() \ No newline at end of file diff --git a/0.7_indev/project_config.py b/0.7_indev/project_config.py new file mode 100644 index 0000000..2b451e5 --- /dev/null +++ b/0.7_indev/project_config.py @@ -0,0 +1,21 @@ +# Загрузка настроек проекта (в данном случае только настроек соединения с БД) +# из файла config.yaml. +import yaml + +class ProjectConfig: + """Класс считывает базовые настройки из файла config.yaml""" + + def __init__(self): + with open('config.yaml') as f: + config = yaml.safe_load(f) + self.dbname = config['dbname'] + self.user = config['user'] + self.password = config['password'] + self.host = config['host'] + self.dbtableprefix = config['dbtableprefix'] + +# Этот метод запускается только, если запускать +# данный файл, а не подключать его. +if __name__ == "__main__": + x = ProjectConfig() + print(x.dbfilepath) diff --git a/0.7_indev/tables/__pycache__/cath_table.cpython-311.pyc b/0.7_indev/tables/__pycache__/cath_table.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4e955fe0282f4b1c18eef6ed012074c438689e9 GIT binary patch literal 7166 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 literal 0 HcmV?d00001 diff --git a/0.7_indev/tables/__pycache__/dish_table.cpython-311.pyc b/0.7_indev/tables/__pycache__/dish_table.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5833efa001640e54e6b1658bb4bb8dcc838f9b66 GIT binary patch literal 14407 zcmcIrTX0n6mfqc+?sO7J=fWicBs*w;<|Y@lPO0eOBthXokPt@2NDS!)0!asVcPlhe zKv20IL2GKDJjWq;yx>?E~n<{Jj}!1RH{sMl~qxfp6HCuap62`3zVz-+ zC(s_J>8#$D^{;>ZYkmLv*ZTM7)2UNS6?~rkpWp7BF<(*sizoKSZyo%!2nXksh!XMi zC~b;Yc}j_Rk0}vf)boi?Q9j3?`Pt@;6m3z${yRJkd(xgoUDh4>@mME6HR0f#5>>W& zA`04gjw#!Gl(?-Z;sfd zM7+DayWocpJ&~e_f0s8B*yV{7<1hFpKZaG(k`Bb9T6bqps_dE8bsN{TKCk}1`T4Lf zUECc@M0Z8CR6}d?+UC~gmd55SYFB4s_rmT-Sl!g3HZ^Z(ZfjN>*KBEA)6_f`Y}wSN zwrt(7AyxKDr`EN*Q(L%dWmu!)=^$lkuXOgLixScOiLgKI?T)02DXjwsC1Md;AYIbc z*SEJL(T&4EZ)Yso+4GsA5q_q1wJ8)=+|}2U?2W}!l^J_kmrBU`5D1Jlvu@x%ea3?$ zvtQ8VJ2H3irEU6szZsdk@O=Bo?E3QyM@xz-9vD?jQu2USj)qz0q)Ww|K^)MWyF7x0 zRJd_d%a*p*HS1d1)Ojt?T%{`W)U7S+Hg9cK7dj&fYqQXF+z={F{{lzxgw_f3#8a~~ zgBf?T0y5%dAQ)D~V|wUuJ@~k(Em3TL9Otiu-qf~V8L;nV{eFV8&z&no_-o#NZ^WCL zY909ooEhM-;Q;d7{W-U?<$Z#-pF8axnMKx-vWFIx&z>UtXuu96_67OPmiwBo-#5T9 zj{87&f4?UZNC7F`o=>3T=Z>Bp1+9w5HNk~!>F{fD%UJmqpt`Y5U8JsU-Lz31D^)kO zHZ`}Zzk6OC^Da?Sv(ydiHm++^SE!rTuHDkyrZz0>+qp9yO@!m=fO&L>Lk|Zv*iuOs z?dj`|rOWnd-MyXKfsVb=0~(=}E;1uXS5k}jY3btV{%BV+5lshoMiX7T`(n{>kw$l? zeX(S3+82MhC+#CI?WN*l&V!1b-LXi=jsqS0`r_S*?!H)RRt7`4_okz1{2dTLsC@3g zv`_0ktTXCY4%e?V%2yuujReb%_Zz|4=27Czfs+T$Py4Pme7iPm)Gi*bU2KGw42PB& z!6m|>hZY;b#W*alI=y$eeC~JU4Y$i1jPeD;zxb41iDg;~IE( z$wE`>lZ~959?UtUWU#%*!FGQ1W=j*4=f!KkH@hc6HqkWhlPwX*_P1zt;7V1h&pwS< zE^!=@S6!`YDz0nwAmI`dvOYv4?EzkGAYljEe3Atu3qdTHcJ}mGFx6)8)?$(+AUQBC z2P08xh5J-Z2Bg_{=CbXi5YpcT^a0*JgY%mawLNz8x~W^E1lo85~C zxtjnbRbegc5&*f5r7A4c@Wf11ysHT7D@0qIDH-FHY6YEoBUo>`{J{BDCk_ovGeQkUumP9u)w97Vr_12v?}Bx= zgLRNL9IV&v?wWjMh89h< zhUUVdzetl*J;F3GV8xHBTqLYsFy>j%wl-WWu_GTEv@lGU_ILI4#iPKBtZIHBA{otK zA|248@nlaT&Pd7i&0655cI}RK?Pctc^mt|lBUv{dM639I5JF|c`NV}o?;kSimJio0 z*ULBH``2dk7qkGRR8BiL=e;@a&i&`P#{*a$&y<`jIZ<}H?0DHoS>>qWE2$l+o_Y46 zAF6B4K0FCIQJ9_*h_lK6 zhw8}{RQf}VmWqCdEyBfVe|KzOGLiP9w&>oM_Vq+#8W%C`F_5$$<#8;LF71wCD=N{!@;4xfg47k< zJ&H>LU>?cl5P3Vy4We|wY!_#=Fl}#^$K{qhrmc|at~;{tJc@>K4;I(M%70ha=(Q=M z`rvT&!Q;UnLNm|2e)4rAR5u)|8(4We)S!nN{=NFrbAQ?XZ`+NftB04aHo{K~hoAUs z)$MSj9&Y?TRCD6s>4V>e7Tyjmyi{X^Rt|?&j{1~EO`g$!Qc*Kr+V`{7QAL@z&-(NxNKSTxAhyrW8 z;}p0*ukydp6n~$uOsgGLJhNK7e|y^ebyEyr+9oJM3LlhJpN*e<^7xY@)ichn`hNN> zu+C}n{%yDU>!xTpqnQmskC$dQ{GqD${BH)HyOh!^A3YxUAvons=w#@8zzEh22kUhE zYbJ88WKChBB&FUnfERa(2XJBh2V1P34|5Vb)aMg(dkf;m_HFK>H;L?`g1G$!aR&wBcW-`1aA4BPXLGJaoq?m8%gUJ_p={;03U*Pf^#%UF`%Qwi+2A4>QBT41gOyqD& zzs1BKsT@ijVIxWP)n%3*W2GydOf$*nZu+~dCRqI> zxAOEH@^oos>w)Z4MBGF-ES{uyS6|E2|M={Ghmh`m05R9ticA;L>M(NOtGMuXxabad zHpYrqN@^QVa?e@+7!}YT^e>W+@C5ag@iv+cp%)fU*Cg#W6~m<)EZ}ZPsUQ`>5$4z! z(;Y6|W2Fz}jOhYQA%$CVWk&c>6l}c60^=Lh91!sZ({#}ox}1i|Z?F{5uiM57n7O!V zs0-kHi!MoaQs@BtpspOS>9TB7*=4BdPiQ{~f3r|SDvn-NIC~JryozzdVV7ZDr08!- zrEpCbhi#O>t;!5;COf`}X5X?)RsRIa5*3Gy)5%`m`+z6bMM2RKn;AyTP4g|F9f9dl z=ZZ?>aKy6Vu((0WhcD3;t5;kmqBe_fZiR?e3Pmb*dO`3ek)cIQsY)FNzOf(I` z0rY`%ja#T=VG);&aP1rD?AQo{LWygf0tWKg>JIa`u}Z6UT9MI+50v$P5wl47nS7QP z{xx^LpkSjmmJv|MqaGy|X3Bs3j)F`~aYZH=VRDCc(O8u= zw^SEgYS`zyU_3_P!;jnv;YJCn(c~`P9A^ira2cv#e+AY)dT*#|%6&*}Ge~k4`~4K+5q3D&Z|XN>%1eu@$rtjfWw{6HWVUxK_#Q)N@Ej*FwPlA8 zZiPk~4|h4sQ0wYLG?zT^+Co(%4u6F9Z<;~CIAZQPjI+u_=*S&7UBkY(H^VTB0ZRW4 z%Gp0(VbEIGKcD&|@?E9wLiwV#f&Eyr`f*+PblIR%&r;m zok`*XiWp)5J$@}1$96?hqi(r|pjO6_JYGN~Ju01vH!AA9B!3(a01!{LH`b4E6}(Un-S!FDnQX@ ziZIS2E^z1b3$>A0CY@W+9Lt!@?CgL>3lIoeD?69C`L0BNtm4LDbJ5G~p7R&+5%$I8 zhfJA?Fpy;d!U88E0QclJu5eMZCWn}d3OY^*q4!KQbFD3WdaVB$yi zozHE#(+Qi{XpZ0l$~A(UcUU#(vP!Cv31>`8%!CA4PV$L-ia6a%c)B|x`HGhruw*K} zOI?f;$=^>d`yPfx%y9B^;owlJ*^xkB=HB}P9(q?+eFQupiCB6Af#j5#@J!@vI+_NT z35gx%V>kp#q0~(*{d`=2&42bQi|Q?$+soBuAPG4JY(q|Wq6-bDQA4JG$$1?8d9=bp zjOCh`gmZE3WO-=+O)^fl{L$RaD|3e{*vBPIj*1}y-k^+z-Ai=Zl$)PcU)Sdw`*M*M}1CU!HWr!o z*H)yKEPSHLD@wcO{Y^|mpw*hZt|@8jnQJRbPuazQYYCZ8U5T_?m}b@@0)?pgmvWUE zx4D$$4dDnO(iZcOll^XC9HKI%)x;rOd!Fi+KAb69Br!x{%Kk9-B#%obsC<6dbFR91 znYzQ@=-=D`KxRDgBxX5cPGfUD7$5euZRlE~Ma;10DyQH9{c9=f%z#Q;A~wr*MgbGV zF{PShS$H}f;4JMHKhmeS{aR%W+o*L)3n>%gIGbLcXyvr_O2ir2!x2p<` zk1JDER_>^}qMKmONh8f!Vx=#rrXk{O{F#`OxI8(;Jr7d}){=;R6(h@r_K$N8Nr0Bs@Qmhle9H3{V0ebAOT&sk|b zS~JyUz2bf`yga(Uvv*%lw8MP9=YHaseTP1eU-ruzL*}EPQAMeJ(d(vo9#*oQ&%;1* z9dsnax>;ClO4e3kZ57s5n^mvrF~3HzcR1Lq2YW3UdQGqSHG;9>U`!9jT*99h;Wnl4 zZ6bV|2;XK4r?RgIt4+!Js<6H)tgpIRUlLZElC@J{G-7KtP8XUV=4+yJG$(j<@lqisLvvvuqP01P&)`+l1+^n{iv_?ChqE4)9n@F`O zS+|PRts-@+TdL?(Yg4iw6xM^ndeF^kgMbQb76tM`fwx}}1#C*G?IKmifMb`j#4EKn zCF>4h-60C>aI@MjWe+cj0uws+kSJhNO8u>m2>-1QjX_-s>=jmH7O|}dwzLpv|l&nvQW>1M`Pq{T~7FL^*b*-?9 z2pqc<=oJNQO4gVt5EBJrZUxqfRGX4@y+~az3aocamDaU3C2OBZ?GveeZmD}j0h^L_ zuds?;aqQCdccOqz$=WCiG>QU^ZUvfz)uv=^7FMwdj$Kmi&_L_HBH)-XK-e>rtOtbk z*O;FYiE3?1UH6Lx_KUIhyDhLmhGkQ-Zj@nd6bo#`u*#1I+lk6qo&Z9_|*GJ6v zQ?NuR{EPny 32)or(self.check_by_name(data.strip()))): + if (len(data.strip()) > 32): + data = input("Название слишком длинное! Введите название заново (1 - отмена):").strip() + if data == "1": + return + elif len(data.strip()) == 0: + data = input("Название не может быть пустым! Введите название заново (1 - отмена):").strip() + if data == "1": + return + else: + data = input("Такое название уже существует. Введите новое (1 - отмена):").strip() + + param_sql = f"UPDATE cath SET cath_name = '{data}' WHERE cath_name = '{old}';" + cur.execute(param_sql) + self.dbconn.conn.commit() + + def check_by_name(self, value): + sql = f"SELECT * FROM {self.table_name()} WHERE cath_name='{value}'" + cur = self.dbconn.conn.cursor() + cur.execute(sql) + result = cur.fetchone() + cur.close() + if result: + return True + else: + return False + + + def example_insert(self): + self.insert_one(["Завтрак"]) + self.insert_one(["Обед"]) + self.insert_one(["Ужин"]) + self.insert_one(["Перекус"]) + self.insert_one(["Десерт"]) + self.insert_one(["Напиток"]) + self.insert_one(["Закуска"]) + self.insert_one(["Салат"]) + self.insert_one(["Гарнир"]) + self.insert_one(["Выпечка"]) + self.insert_one(["Супы"]) + self.insert_one(["Соусы"]) + self.insert_one(["Паста"]) + self.insert_one(["Мясные блюда"]) + self.insert_one(["Рыбные блюда"]) + self.insert_one(["Веганские блюда"]) + self.insert_one(["Блюда из птицы"]) + self.insert_one(["Морепродукты"]) + self.insert_one(["Национальная кухня"]) + self.insert_one(["Быстрые блюда"]) + return \ No newline at end of file diff --git a/0.7_indev/tables/dish_table.py b/0.7_indev/tables/dish_table.py new file mode 100644 index 0000000..3110995 --- /dev/null +++ b/0.7_indev/tables/dish_table.py @@ -0,0 +1,131 @@ +# Таблица с блюдами и действия с ними + +from dbtable import * + +class DishTable(DbTable): + def table_name(self): + return self.dbconn.prefix + "dish" + + def columns(self): + return {"id": ["serial", "PRIMARY KEY"], + "cath_id": ["integer", "REFERENCES cath(id) ON DELETE CASCADE", "NOT NULL"], + "dish_name": ["varchar(32)", "NOT NULL"], + "cook_time": ["interval"], + "manual": ["text"]} + + def table_constraints(self): + return ['CONSTRAINT "Name Dish" UNIQUE (dish_name)'] + + + + def find_by_position(self, num): + sql = "SELECT * FROM " + self.table_name() + sql += " ORDER BY " + sql += ", ".join(self.primary_key()) + sql += " LIMIT 1 OFFSET %(offset)s" + cur = self.dbconn.conn.cursor() + cur.execute(sql, {"offset": num - 1}) + return cur.fetchone() + + def all_by_cath_id(self, cath_id): + sql = "SELECT * FROM " + self.table_name() + sql += " WHERE cath_id = " + str(cath_id) + sql += " ORDER BY " + sql += ", ".join(self.primary_key()) + cur = self.dbconn.conn.cursor() + cur.execute(sql) + return cur.fetchall() + + def delete(self, val): + sql = "DELETE FROM dish" + sql += " WHERE dish_name" + sql += "=" + "'" + val + "';" + cur = self.dbconn.conn.cursor() + cur.execute(sql) + self.dbconn.conn.commit() + + def check_by_name(self, value): + sql = f"SELECT * FROM {self.table_name()} WHERE dish_name='{value}'" + cur = self.dbconn.conn.cursor() + cur.execute(sql) + result = cur.fetchone() + cur.close() + if result: + return True + else: + return False + + def insert_dishone(self, cath_id): + + ins_name = input('Введите название добавляемого блюда (1 - для отмены): ') + + while (ins_name.strip() == '')or(len(ins_name.strip()) > 32)\ + or(DishTable().check_by_name(ins_name)): + + if(ins_name.strip() == ''): + ins_name = input("Пустая строка. Повторите ввод! Укажите название удаляемого блюда (0 - отмена): ") + if ins_name == "0": + return "1" + + elif(len(ins_name.strip()) > 32): + ins_name = input("Слишком длинная строка. Повторите ввод!\ + Укажите название удаляемого блюда (0 - отмена): ") + if ins_name == "0": + return "1" + else: + print('Такое блюдо уже существует') + ins_name = input("Повторите ввод! Укажите название блюда (0 - отмена): ") + if ins_name == "0": + return "1" + + ins_time = input(f'Процесс добавления блюда: {ins_name}\ + \nВведите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ') + if ins_time == "0": + return "1" + ins_manual = input(f'Процесс добавления блюда: {ins_name}\ + \nВведите краткую инструкцию приготовления блюда (1 - для отмены): ') + if ins_time == "0": + return "1" + + insert = [cath_id, ins_time, ins_name, ins_manual] + + self.insert_one(insert) + + + def example_insert(self): + self.insert_one([1, "10 minutes", "Яичница", "Взбить яйца, нарезать помидоры, обжарить их вместе."]) + self.insert_one([1, "20 minutes", "Блины", "Замесить тесто, да пожарить. ©️ Никита Сергеич"]) + self.insert_one([2, "2 hours", "Хлэб", "Почти, как блины, но не совсем."]) + self.insert_one([3, "40 minutes", "Паста", "Почувствуй себя итальянцем"]) + self.insert_one([1, "1 hour", "Пицца", "Раскатать тесто, добавить начинку и запечь в духовке."]) + self.insert_one([2, "30 minutes", "Салат Цезарь", "Нарезать салат, приготовить соус и обжарить куриную грудку."]) + self.insert_one([3, "45 minutes", "Лазанья", "Слои теста с соусом и начинкой, запеченные в духовке."]) + self.insert_one([4, "1 hour 15 minutes", "Жаркое", "Обжарить мясо и овощи, затем потушить в духовке."]) + self.insert_one([5, "20 minutes", "Смузи", "Смешать фрукты, ягоды, йогурт и лед в блендере."]) + self.insert_one([6, "2 hours 30 minutes", "Бефстроганов", "Обжарить говядину, приготовить соус и подать с гарниром."]) + self.insert_one([7, "1 hour", "Чили кон карне", "Обжарить мясо, добавить фасоль, помидоры и специи."]) + self.insert_one([8, "45 minutes", "Фахитас", "Обжарить мясо и овощи, подать с лепешками и соусом."]) + self.insert_one([9, "2 hours", "Пельмени", "Приготовить тесто, начинку и слепить пельмени."]) + self.insert_one([10, "1 hour 30 minutes", "Ризотто", "Обжарить рис, добавить бульон и готовить, постоянно помешивая."]) + self.insert_one([11, "50 minutes", "Тако", "Обжарить начинку, подать с лепешками и соусами."]) + self.insert_one([12, "3 hours", "Бараньи ребрышки", "Замариновать ребрышки и запечь в духовке."]) + self.insert_one([13, "1 hour 15 minutes", "Карри", "Обжарить специи, добавить овощи и курицу, потушить."]) + self.insert_one([14, "30 minutes", "Бургер", "Обжарить котлету, собрать бургер с соусами и овощами."]) + self.insert_one([15, "2 hours 45 minutes", "Утка по-пекински", "Замариновать утку, запечь и подать с лепешками и соусом."]) + self.insert_one([16, "1 hour 30 minutes", "Паэлья", "Обжарить рис с овощами, добавить бульон и морепродукты."]) + self.insert_one([17, "45 minutes", "Рататуй", "Обжарить овощи и запечь в духовке."]) + self.insert_one([18, "2 hours", "Борщ", "Обжарить овощи, добавить бульон и тушить."]) + self.insert_one([19, "1 hour 15 minutes", "Куриные наггетсы", "Замариновать куриное филе, обвалять в панировке и обжарить."]) + self.insert_one([20, "3 hours", "Индейка с начинкой", "Приготовить начинку, фаршировать индейку и запекать в духовке."]) + self.insert_one([1, "50 minutes", "Фрикадельки", "Приготовить фарш, сформировать фрикадельки и обжарить."]) + self.insert_one([2, "2 hours 15 minutes", "Лазанья с мясным соусом", "Приготовить мясной соус, слои теста и запечь в духовке."]) + self.insert_one([3, "1 hour 30 minutes", "Чили", "Обжарить мясо, добавить фасоль, помидоры и специи, потушить."]) + self.insert_one([4, "40 minutes", "Хумус", "Приготовить нутовую пасту, добавить специи и подать с питой."]) + self.insert_one([5, "2 hours 30 minutes", "Утиная ножка по-французски", "Замариновать утиные ножки, обжарить и потушить."]) + self.insert_one([6, "1 hour 45 minutes", "Лапша по-сингапурски", "Обжарить лапшу с овощами, добавить соус и морепродукты."]) + self.insert_one([7, "55 minutes", "Фалафель", "Приготовить фалафельную смесь, сформировать шарики и обжарить."]) + self.insert_one([8, "2 hours 45 minutes", "Жаркое из телятины", "Обжарить мясо, добавить овощи и потушить в духовке."]) + self.insert_one([9, "1 hour 20 minutes", "Том ям", "Приготовить бульон, добавить морепродукты и специи."]) + self.insert_one([10, "3 hours 15 minutes", "Баранина по-гречески", "Замариновать баранину, запечь и подать с рисом."]) + self.insert_one([11, "50 minutes", "Картофельные оладьи", "Приготовить картофельное пюре, сформировать оладьи и обжарить."]) + return \ No newline at end of file diff --git a/0.7_indev/test.py b/0.7_indev/test.py new file mode 100644 index 0000000..0a318aa --- /dev/null +++ b/0.7_indev/test.py @@ -0,0 +1 @@ +print(len("\t")) \ No newline at end of file diff --git a/0.7_indev/texts.py b/0.7_indev/texts.py new file mode 100644 index 0000000..f616474 --- /dev/null +++ b/0.7_indev/texts.py @@ -0,0 +1,28 @@ +show_main_menu_txt = """Привутствуем в меню, выберите действие: + 1 - просмотр категорий; + 2 - сброс и инициализация БД; + 9 - выход;""" +show_cath_1txt = """Просмотр списка категорий! +№\tНазвание\n-------------------------------------------------------------------------------------------""" + +show_cath_2txt = """-------------------------------------------------------------------------------------------\nДальнейшие операции: + 0 - возврат в главное меню; + 3 - добавление новой категории; + 4 - удаление категории; + 5 - просмотр блюд в категории; + 8 - обновить категорию; + 9 - выход.""" + +show_dish_in_cath_txt = """-------------------------------------------------------------------------------------------\nДальнейшие операции: + 0 - возврат в главное меню; + 1 - возврат в просмотр категорий; + 6 - добавление нового блюда; + 7 - удаление блюда; + 9 - выход.""" + +text_choice_update = """-------------------------------------------------------------------------------------------\n +Что вы хотите обновить? +1 - Категорию +2 - Блюдо +Введите необходимую цифру для выбора: +""" \ No newline at end of file