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

Last change on this file since 7075 was 7075, checked in by Juanma, 23 months ago

Icon cache for snaps

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