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

Last change on this file since 4266 was 4266, checked in by Juanma, 3 years ago

CLI: Replaced BeautifulSoup? with html2text

  • Property svn:executable set to *
File size: 5.7 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 gettext
9import html2text
10
11class color:
12   PURPLE = '\033[95m'
13   CYAN = '\033[96m'
14   DARKCYAN = '\033[36m'
15   BLUE = '\033[94m'
16   GREEN = '\033[92m'
17   YELLOW = '\033[93m'
18   RED = '\033[91m'
19   BOLD = '\033[1m'
20   UNDERLINE = '\033[4m'
21   END = '\033[0m'
22
23def main():
24        def print_results(action=None):
25                printed=False
26                results=store.get_result(action)
27                status=store.get_status(action)
28                processed=[]
29                print ("")
30                for action in results.keys():
31                        if action in actions and not actionList[action]:
32                                if status['status']==0:
33                                        print (u"Results for "+action) 
34                                        for data in results[action]:
35                                                if action=='info':
36                                                        try:
37                                                                print(color.DARKCYAN+u'Package'+': '+color.END + data['package'])
38                                                                print(u'Name'+': '+data['name'])
39                                                                print(u'ID'+': '+data['id'])
40                                                                print(u'Version'+': '+data['version'])
41                                                                print(u'Size'+': '+data['size'])
42                                                                print(u'License'+': '+data['license'])
43                                                                print(u'Categories'+': '+','.join(data['categories']))
44                                                                print(u'Status'+': '+data['state'])
45                                                                print(u'Summary'+': '+data['summary'])
46                                                                desc=(html2text.html2text(data['description'],"lxml"))
47#                                                               print(u'Description'+': '+data['description'])
48                                                                print(u'Description'+': '+desc)
49                                                                pkgString=[]
50                                                                for dependency in data['depends']:
51                                                                                pkgName=dependency.split(';')[0]
52                                                                                pkgString.append(pkgName)
53                                                                print(u'Depends'+': '+', '.join(pkgString))
54                                                                print("")
55                                                        except Exception as e:
56                                                                print(e)
57                                                                pass
58                                                elif action=='search':
59                                                        #Only print name and summary
60                                                        if data['package'] not in data['id'] or data['package'] in processed:
61                                                                print(color.DARKCYAN+data['package']+color.END+" ("+data['id']+"): "+data['summary'])
62                                                        else:
63                                                                print(color.DARKCYAN+data['package']+color.END+": "+data['summary'])
64                                                                processed.append(data['package'])
65
66                                                elif action=='list':
67                                                        #Print package, summary and status
68                                                        try:
69                                                                if data['package']:
70                                                                        package=data['package']
71                                                                else:
72                                                                        package=data['name']
73                                                                print(color.DARKCYAN+package+color.END+": "+data['summary']+' ('+','.join(data['categories'])+')'+' ('+data['state']+')')
74                                                        except Exception as e:
75                                                                print('Error listing :'+str(e))
76                                                                pass
77                                                elif action=='install':
78                                                                print(data['package']+" "+ u"installed"+" "+color.BOLD+ u"succesfully"+color.END)
79                                                elif action=='remove':
80                                                                print(data['package']+" "+ u"removed"+" "+color.BOLD+ u"succesfully"+color.END)
81                                                else:
82                                                        print(data)
83                                else:
84                                        msg=u"Package"
85                                        failed=parms[action]
86                                        if (action=='install' or action=='remove'):
87                                                        msg=u"Unable to"+' '+action
88                                        if action=='list':
89                                                        msg=u"Category"
90                                                        failed=', '.join(failed)
91
92                                        print (color.RED+u"Error"+": "+color.END+msg+' '+failed+' '+status['msg'])
93                                printed=True
94                return(printed)
95        #def print_results
96
97        CURSOR_UP='\033[F'
98        ERASE_LINE='\033[K'
99        actions=[]
100        parms={}
101        args=process_Args(sys.argv)
102        store=storeManager.StoreManager(args.debug)
103
104        '''     if args.debug:
105                        actions.append('debug')
106                        store.set_debug(args.debug)
107                        parms['debug']=args.debug'''
108        if args.info:
109                actions.append('info')
110                parms['info']=args.info
111        if args.search:
112                actions.append('search')
113                parms['search']=args.search
114        if args.install:
115                actions.append('install')
116                parms['install']=args.install
117        if args.remove:
118                actions.append('remove')
119                parms['remove']=args.remove
120        if args.list:
121                actions.append('list')
122                parms['list']=args.list
123                print(args.list,type(args.list))
124        if args.list_sections:
125                actions.append('list_sections')
126                parms['list_sections']=args.list_sections
127       
128        actionList={'search':False,'info':False,'pkgInfo':False,'install':False,'remove':False,'list':False,'list-sections':False}
129        start_time=time.time()
130        for action in actions:
131#               print(u"Launching: "+action)
132                store.execute_action(action,parms[action])
133                actionList[action]=False
134               
135#       print ("All actions launched: " +str(actions))
136        while store.is_action_running():
137                progressDic=store.get_progress()
138                progressArray=[]
139                for progress in progressDic:
140                        if progress!='load':
141                                progressArray.append(progress+': '+str(int(progressDic[progress]))+'%')
142                print(','.join(progressArray),end="\r")
143                time.sleep(0.1)
144                for key in actionList:
145                        progressDic=store.get_progress(key)
146                        if key in progressDic:
147                                if progressDic[key]==100 and not actionList[key]:
148                                        progressDic=store.get_progress(key)
149                                        progressArray=[]
150                                        for progress in progressDic:
151                                                if progress!='load':
152                                                        progressArray.append(progress+': '+str(progressDic[progress])+'%')
153                                        print(','.join(progressArray))
154                                        print (CURSOR_UP + ERASE_LINE)
155                                        actionList[key]=print_results(key)
156        print_results()
157
158def process_Args(args):
159        parser=argparse.ArgumentParser(description=(u'Lliurex Software Center'))
160        parser.add_argument('--list',metavar="Category",action='append',nargs='?',help=(u"List all packages, optionally list packages from a given category"))
161        parser.add_argument('--list-sections',action='store_true',help=(u"List all sections from the store"))
162        parser.add_argument('--search',metavar='Name',nargs='?',help=(u"Search a package"))
163        parser.add_argument('--info',metavar='Name',nargs='?',help=(u"Show all info from a package"))
164        parser.add_argument('--install',metavar='Package',help=(u"Install a package"))
165        parser.add_argument('--remove',metavar='Package',help=(u"Remove a package"))
166        parser.add_argument('--debug',action='store_true',help=(u"Prints debug information"))
167
168        args=parser.parse_args()
169        return args
170
171main()
Note: See TracBrowser for help on using the repository browser.