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

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

WIP on blacklist

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