From 2c04627f8dd37786c4d6d3b19cc5bebe6169467b Mon Sep 17 00:00:00 2001 From: chendelin1982 Date: Sun, 26 Sep 2021 17:57:34 +0800 Subject: [PATCH] mvc --- cli/Notes.md | 14 ++++++++++++++ cli/__pycache__/controller.cpython-36.pyc | Bin 0 -> 614 bytes cli/__pycache__/core.cpython-36.pyc | Bin 0 -> 2075 bytes cli/__pycache__/model.cpython-36.pyc | Bin 0 -> 2070 bytes cli/controller.py | 12 ++++++++++++ cli/install.sh | 1 + cli/{core.py => model.py} | 17 +++++++++++++++-- cli/stackhub | 3 --- cli/stackhub.py | 18 ++++++++++++++---- 9 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 cli/Notes.md create mode 100644 cli/__pycache__/controller.cpython-36.pyc create mode 100644 cli/__pycache__/core.cpython-36.pyc create mode 100644 cli/__pycache__/model.cpython-36.pyc create mode 100644 cli/controller.py create mode 100644 cli/install.sh rename cli/{core.py => model.py} (78%) delete mode 100644 cli/stackhub diff --git a/cli/Notes.md b/cli/Notes.md new file mode 100644 index 00000000..e3922121 --- /dev/null +++ b/cli/Notes.md @@ -0,0 +1,14 @@ +## CLI 开发备注 + +整个CLI采用MVC思想: + +* stackhub.py 代表视图层 V,用户体验层,专注体验编排,不进行条件编程 +* model.py 代表数据层 M。这是系统的最底层,都是与业务无关的系统级功能 +* controller.py 代表控制层 C。调用 M 层,针对业务编程 + +#### 用户如何获取项目清单? + +用户同步 stackhub 上已经存放的清单,而不是通过 API 获取。原因: + +1. 避免API使用需要授权或超时 +2. 避免未发布的应用被安装 \ No newline at end of file diff --git a/cli/__pycache__/controller.cpython-36.pyc b/cli/__pycache__/controller.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6277b81543147f150945560821532c9a7bbf2a2d GIT binary patch literal 614 zcmZuuu};G<5Is9d38e)#76!zYr5RWes#FOihElTy=U}`%8Kg=&naa90MJ`=Yl><{W&O=TEo8VXsF`H8a4M+%Dd?meVKyOx0vu!GcLX0c+B{jhZQ(mf=cP+^Il`+~5>Q^5NQIv%fA|_%o2yA)SY7aK8KW}JF9OI~i8JlqztQgxEN))qcOGm)tg0iKTQ?VRc>Y+^(w*vi(lpWBULY=8|CZI>DIIB0K@(9$9->1VyxZEdTW&RyI7 UkIBcEYXevGe;VS9dB{Tk19UBfF8}}l literal 0 HcmV?d00001 diff --git a/cli/__pycache__/core.cpython-36.pyc b/cli/__pycache__/core.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85be9f068c8eab6514f2b8a4f29823e979062c88 GIT binary patch literal 2075 zcmb_dUvC>l5Z}E!-<>bElQ?M`5Cua4aRS*weLzAL3QD0!RB1^XwX8tLRVYQLVD7jC1Yp z^5YRN6RsOiMl~LLa#F))uLS!=_eiN)em)o+X6k6P-%qOI;`YCF{iLjmq3l=U@Z#3Y zjOPzxso+yIBpBB0HwXGd&~Sp_0Fo!o%=XaVmQuo{eNIiI%ubaC?RjH#r zk&m0bL#}!wk@pgM=@cc>7LbI@0+{d>-TniZb|lXa#4>0NySOtbN;Tkv$D&F{i5f^1 zC(j|`L6T>Kq!PSe19nlAm6?j74!X2}5jyV9gXqu9;NOQ(q8y-|hl3HU0-11zu=qKh zko)AvA5N(vLpro3^o*WbCmUvGPiRV0>sM>&oWUz5kV%Jtr7?7$2jVA6PHjrYUFA*e zp?^jxdEq`K-($Ui;fZJKwH$J>(l`X=!P|JU!e#mw?hxXF5`knkq)A$fUM-WZbi}YD9$e}UKFKO5=8>N z3Ln{9$mV&SuJB@kIa>mfE-;@umTwzf0^9iybGiv6d%&)%!_-L|P>)cDP)nY6ADBKE zuS{hRP!lnB(md_2t3nf5NW}_Vv=FZe6<_ln(5%Fkr{3rF^-9RsmH2|gD=17JeCWQd zyejzz*Z7~=wnJCk#<<=__71WhGJ`S(_D}yN>UY6_XBPoR-7C>z8E)dC|J3O2*ICXV z)#DDz{}JRqMq&YjK3<;QF$WokL>;T6c_#5(6KD%aegsUB3H&8slm6C)CZ-c;;xmHH zh;8>B*&)wn?Wb|(cqM<4XC)79?O=O}4R9iE0t+qiJ_zj`!21@!H7RSEZriF##Y^=m z95cg=&<-81UB1F@e2fa08zh^oM< z5I7)30~uZ~JY=S&5p)p%W38#zejN+R#SK(-E>*K37C;fh+>StP+FM`=3Vg+NPuBju Z>1g=^a2HKe*^d6z>WX_ literal 0 HcmV?d00001 diff --git a/cli/__pycache__/model.cpython-36.pyc b/cli/__pycache__/model.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cd2720795be7dbf629fd84dffe965d7cb713758 GIT binary patch literal 2070 zcmb_dUvC>l5Z}F9-<>bElenP`l_~<1KNiRq>Jtc|pcINwm6oJY%L;T{?l#G}_bv8-!Bjg{l z@N;3k38el8mXeg_gij^q)anj*taQ0+CF9J>25(sDanDMh`&I@#0O{n-BIIGQ#FvT| zZxwCcE;_tZEc4}Jg|8H=e6{HEE}forgRj|d-vZg#Qo{+yuMg zcqGb1n8uS)joY4_)S&E@;J@e|XYfwML?dN?(zKC!=L{hA;bMVl?iN+0kM?9f zZf+b3y)lycMnW%xqD0yPQczg{6TYI`e*rU0iTpq=gVnN&yMvA`+%yblWFs1{H&~bO3MStdo0|Lk;$^qMXKA6HPkj-ZZi(k_T zxlexn>6B_Rq(f&y&*-UhvTikZLQ|SLzdJ*A2G^KCDH#DzW9U5(>)j!-rC)Mi4a3xzRn6!jWqOw2Px*+zVRiN9J;{YnJvIm z)uJ>^ia0e5A!Q{^u($K@8@p=MGAp(5z^kgV$K(wNZdj&8!Ci=EsJOyb;-w9k6)sd4 z7;!?{q7Gf73@D`Q&bWPrBJAAm`3QCy7b1#G7)4NmQI6|Y6djM^{Lx@!QI) zQhabt{F!gN=Se(YzK`rKGTc5z`6FCiMYSuNHO}rkK#KsQ?Uig@Fl^$cH=1Tw6<{|Is)GjV{y94}ALn1hV3L>=p+c_ndQ6KD%aeGE*K3H&GEkp9tyA*K@;;xmH7 zh-3Ey*&)wn<7e#bmEuL7m7?bwhT|pgKoEHwSkI9?5QZJV{T9HrC2QJg`yM9kGuUIF zGD16aymFcF+znIn+Oio}X({o(3*oP7hu8T8qc02x+Ip_UnUO7IZ8Y3APNj^KRS@w+ znV`;NeNf55c$d~i&tM*Fp_5}_3L^huqShZ6CW*bfq)M%h4y z$4eiX9cF}EhQLf~8ns`?QVDqzOuTbxx_rKP2<;0`b_8ZS*b-Yz;w`SbvI)MNJ}O^f U9tvNF@93vaKm(UKowZKuUyM`3sQ>@~ literal 0 HcmV?d00001 diff --git a/cli/controller.py b/cli/controller.py new file mode 100644 index 00000000..532fe10d --- /dev/null +++ b/cli/controller.py @@ -0,0 +1,12 @@ +import model + +path_repo = "./data/application.list" +path_project = "" + +class Print: + + def __init__(self): + pass + + def printRepo(): + model.FileOp.printJson(path_repo) \ No newline at end of file diff --git a/cli/install.sh b/cli/install.sh new file mode 100644 index 00000000..24dc8c31 --- /dev/null +++ b/cli/install.sh @@ -0,0 +1 @@ +yum install git pwgen jq wget curl figlet boxes -y \ No newline at end of file diff --git a/cli/core.py b/cli/model.py similarity index 78% rename from cli/core.py rename to cli/model.py index 0e31afe0..46881b6b 100644 --- a/cli/core.py +++ b/cli/model.py @@ -34,5 +34,18 @@ class Github: def __init__(self): pass - def -print(SmoothUrl.res(github_url)) \ No newline at end of file + def gitClone(): + pass + + + + +class FileOp: + '''File operation''' + + def __init__(self): + pass + + def printJson(path: str): + with open(path,newline='') as file: + print(file.read()) \ No newline at end of file diff --git a/cli/stackhub b/cli/stackhub deleted file mode 100644 index 424f1f9f..00000000 --- a/cli/stackhub +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -python3 stackhub.py \ No newline at end of file diff --git a/cli/stackhub.py b/cli/stackhub.py index f25e4c60..a07d1a3e 100644 --- a/cli/stackhub.py +++ b/cli/stackhub.py @@ -1,38 +1,48 @@ #!/usr/bin/env python3 import os, io, sys, platform, shutil, urllib3, json, time, subprocess +import model, controller import typer app = typer.Typer() - @app.command() -def list(name: str): +def list(): '''print the lists file''' - typer.echo(f"Hello {name}") + controller.Print.printRepo() @app.command() def update(name: str): '''update the local lists cache''' typer.echo(f"Hello {name}") -data + + @app.command() def upgrade(name: str): '''upgrade one application''' typer.echo(f"Hello {name}") + @app.command() def search(name: str): '''Search application you want to install''' typer.echo(f"Hello {name}") + @app.command() def show(name: str): '''show the detail of application''' typer.echo(f"Hello {name}") + + +@app.command() +def package(name: str): + '''package one application for no network environment''' + typer.echo(f"Hello {name}") + @app.command() def install(name: str, formal: bool = False, type: str = None):