source: lliurex-store/trunk/fuentes/lliurex-store-cli/usr/share/lliurex-store/lliurex-store-cli.py @ 7119

Last change on this file since 7119 was 7119, checked in by Juanma, 20 months ago

WIP on bundles support

  • Property svn:executable set to *
File size: 6.8 KB
Line 
1#!/usr/bin/python3
2import sys
3import argparse
4#sys.path.append('/usr/share/lliurex-store')
5#sys.path.append('/home/lliurex/lliurex-store/trunk/fuentes/lliurex-appstore.install/usr/share/lliurex-store')
6import lliurexstore.storeManager as storeManager
7import time
8import html2text
9import gettext
10gettext.textdomain('python3-lliurex-store')
11_=gettext.gettext
12
13class color:
14   PURPLE = '\033[95m'
15   CYAN = '\033[96m'
16   DARKCYAN = '\033[36m'
17   BLUE = '\033[94m'
18   GREEN = '\033[92m'
19   YELLOW = '\033[93m'
20   RED = '\033[91m'
21   BOLD = '\033[1m'
22   UNDERLINE = '\033[4m'
23   END = '\033[0m'
24
25def main():
26        def print_results(action=None):
27                printed=False
28                results=store.get_result(action)
29                status=store.get_status(action)
30                if not 'status' in status.keys():
31                        status['status']=1
32                        status['msg']='package not found'
33                processed=[]
34                print ("")
35                for action in results.keys():
36                        if action in actions and not actionList[action]:
37                                if status['status']==0:
38                                        print (_(u"Results for ")+_(action))
39                                        for data in results[action]:
40                                                if action=='info':
41                                                        print(data)
42                                                        try:
43#                                                               print(color.DARKCYAN+_(u'Package')+': '+color.END + data['package'])
44                                                                print("%s%s: %s%s"%(color.DARKCYAN,_(u'Package'),color.END,data['package']))
45#                                                               print(_(u'Name')+': '+data['name'])
46                                                                print("%s: %s"%(_(u'Name'),data['name']))
47#                                                               print(_(u'ID')+': '+data['id'])
48                                                                print("%s: %s"%(_(u'ID'),data['id']))
49#                                                               print(_(u'Version')+': '+str(data['version']))
50                                                                print("%s: %s"%(_(u'Version'),data['version']))
51                                                                print("%s: %s"%(_(u'Releases'),', '.join(data['releases'])))
52#                                                               print(_(u'Size')+': '+data['size'])
53                                                                print("%s: %s"%(_(u'Size'),data['size']))
54#                                                               print(_(u'License')+': '+data['license'])
55                                                                print("%s: %s"%(_(u'License'),data['license']))
56                                                                listCat=[]
57                                                                for cat in data['categories']:
58                                                                        listCat.append(_(cat))
59#                                                               print(_(u'Categories')+': '+','.join(listCat))
60                                                                print("%s: %s"%(_(u'Categories'),','.join(listCat)))
61                                                                msg=''
62                                                                if data['state']=='installed':
63                                                                        msg=_('installed')
64                                                                else:
65                                                                        msg=_('available')
66                                                                if data['updatable']:
67                                                                        msg +=_(' (updatable)')
68#                                                               print(_(u'Status')+': '+msg)
69                                                                print("%s: %s"%(_(u'Status'),msg))
70#                                                               print(_(u'Summary')+': '+data['summary'])
71                                                                print("%s: %s"%(_(u'Summary'),data['summary']))
72                                                                desc=(html2text.html2text(data['description'],"lxml"))
73#                                                               print(_(u'Description')+': '+desc)
74                                                                print("%s: %s"%(_(u'Description'),desc))
75                                                                pkgString=[]
76                                                                for dependency in data['depends']:
77                                                                                pkgName=dependency.split(';')[0]
78                                                                                pkgString.append(pkgName)
79#                                                               print(_(u'Depends')+': '+', '.join(pkgString))
80                                                                print("%s: %s"%(_(u'Depends'), ''.join(pkgString)))
81                                                                print("")
82                                                        except Exception as e:
83                                                                print("CLI: Error printing key %s"%e)
84                                                elif action=='search':
85                                                        #Only print name and summary
86                                                        printcolor=color.DARKCYAN
87                                                        data_id=''
88                                                        if data['bundle']!='':
89                                                                printcolor=color.PURPLE
90                                                        elif (data['package'] not in data['id'] or data['package'] in processed):
91                                                                data_id=" (%s)"%data['id']
92                                                        else:
93                                                                processed.append(data['package'])
94                                                        print("%s%s%s%s: %s"%(printcolor,data['package'],data_id,color.END,data['summary']))
95
96                                                elif action=='list':
97                                                        #Print package, summary and status
98                                                        try:
99                                                                if data['package']:
100                                                                        package=data['package']
101                                                                else:
102                                                                        package=data['name']
103                                                                if data['state']=='installed':
104                                                                        msg=_('installed')
105                                                                else:
106                                                                        msg=_('available')
107                                                                print(color.DARKCYAN+package+color.END+": "+data['summary']+' ('+','.join(data['categories'])+')'+' ('+msg+')')
108                                                        except Exception as e:
109                                                                print(_(u'Error listing')+ ':'+str(e))
110                                                                pass
111                                                elif action=='install':
112                                                                print(data['package']+" "+ _(u"installed")+" "+color.BOLD+ _(u"succesfully")+color.END)
113                                                elif action=='remove':
114                                                                print(data['package']+" "+ _(u"removed")+" "+color.BOLD+ _(u"succesfully")+color.END)
115                                                else:
116                                                        print(data)
117                                else:
118                                        msg=_(u"Unable to")+' '+_(action)
119                                        failed=parms[action]
120                                        if (action=='search' or action=='info'):
121                                                        msg=_(u"Unable to show")
122                                        if action=='list':
123                                                        failed=', '.join(failed)
124
125                                        print (color.RED+_(u"Error")+": "+color.END+msg+' '+failed+' ('+_(status['msg'])+')')
126                                printed=True
127                return(printed)
128        #def print_results
129
130        CURSOR_UP='\033[F'
131        ERASE_LINE='\033[K'
132        actions=[]
133        parms={}
134        dbg=False
135        appimage=False
136        snap=False
137        args=process_Args(sys.argv)
138#       if args.debug:
139#               dbg=True
140        if args.appimage:
141                appimage=True
142        if args.snap:
143                snap=True
144        if args.view:
145                actions.append('info')
146                parms['info']=args.view
147        if args.search:
148                actions.append('search')
149                parms['search']=args.search
150        if args.install:
151                actions.append('install')
152                parms['install']=args.install
153        if args.remove:
154                actions.append('remove')
155                parms['remove']=args.remove
156#       if args.list:
157#               actions.append('list')
158#               parms['list']=args.list
159
160        actionList={'search':False,'info':False,'pkgInfo':False,'install':False,'remove':False,'list':False,'list-sections':False}
161        start_time=time.time()
162        store=storeManager.StoreManager(appimage=appimage,snap=snap,dbg=dbg,cli=True)
163        for action in actions:
164                store.execute_action(action,parms[action])
165                actionList[action]=False
166               
167        while store.is_action_running():
168                progressDic=store.get_progress()
169                progressArray=[]
170                for progress in progressDic:
171                        if progress!='load':
172                                progressArray.append(_(progress)+': '+str(int(progressDic[progress]))+'%')
173                print(','.join(progressArray),end="\r")
174                time.sleep(0.1)
175                for key in actionList:
176                        progressDic=store.get_progress(key)
177                        if key in progressDic:
178                                if progressDic[key]==100 and not actionList[key]:
179                                        progressDic=store.get_progress(key)
180                                        progressArray=[]
181                                        for progress in progressDic:
182                                                if progress!='load':
183                                                        progressArray.append(_(progress)+': '+str(progressDic[progress])+'%')
184                                        print(','.join(progressArray))
185                                        print (CURSOR_UP + ERASE_LINE)
186                                        actionList[key]=print_results(key)
187        print_results()
188
189def process_Args(args):
190        parser=argparse.ArgumentParser(description=(u'Lliurex Store.'))
191        parser.add_argument('-s','--search',metavar='Name',nargs='?',help=(_(u"Search a package")))
192        parser.add_argument('-v','--view',metavar='Name',nargs='?',help=(_(u"Show all info from a package")))
193        parser.add_argument('-i','--install',metavar='Package',help=(_(u"Install a package")))
194        parser.add_argument('-r','--remove',metavar='Package',help=(_(u"Remove a package")))
195#       parser.add_argument('--debug',action='store_true',help=(_(u"Prints debug information")))
196        parser.add_argument('--appimage',action='store_true',help=(_(u"Load appimage catalog")))
197        parser.add_argument('--snap',action='store_true',help=(_(u"Load snap catalog")))
198#       parser.add_argument('--list',metavar='list',nargs='?',help=(_(u"List category")))
199
200        args=parser.parse_args()
201        return args
202
203main()
Note: See TracBrowser for help on using the repository browser.