Changeset 3653 for lliurex-store


Ignore:
Timestamp:
Feb 16, 2017, 2:59:33 PM (3 years ago)
Author:
Juanma
Message:

WIP on CLI

Location:
lliurex-store/trunk/fuentes
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • lliurex-store/trunk/fuentes/lliurex-store-cli/usr/share/lliurex-store/lliurex-store-cli.py

    r3646 r3653  
    77import time
    88
     9class color:
     10   PURPLE = '\033[95m'
     11   CYAN = '\033[96m'
     12   DARKCYAN = '\033[36m'
     13   BLUE = '\033[94m'
     14   GREEN = '\033[92m'
     15   YELLOW = '\033[93m'
     16   RED = '\033[91m'
     17   BOLD = '\033[1m'
     18   UNDERLINE = '\033[4m'
     19   END = '\033[0m'
     20
    921def main():
    1022        def print_results(action=None):
    1123                printed=False
    1224                results=store.get_result(action)
     25                status=store.get_status(action)
    1326                print ("")
    14                 for action in results:
     27                for action in results.keys():
    1528                        if action in actions and not actionList[action]:
    1629                                print (u"Results for "+action)
    17                                 for result in results[action]:
    18                                         if action=='search':
    19                                                 if args.info:
     30                                if status['status']==0:
     31                                        for data in results[action]:
     32                                                if action=='search':
     33                                                        if args.info:
     34                                                                try:
     35                                                                        print(color.BOLD+u'Package: '+color.END + data['package'])
     36                                                                        print(u'Version: '+data['version'])
     37                                                                        print(u'Categories: '+','.join(data['categories']))
     38                                                                        print(u'Status: '+data['state'])
     39                                                                        print(u'Summary: '+data['summary'])
     40                                                                        print(u'Description: '+data['description'])
     41                                                                        pkgString=[]
     42                                                                        for dependency in data['depends']:
     43                                                                                        pkgName=dependency.split(';')[0]
     44                                                                                        pkgString.append(pkgName)
     45                                                                        print(u'Depends: '+' '+','.join(pkgString))
     46                                                                        print("")
     47                                                                except:
     48                                                                        pass
     49                                                        else:
     50                                                                #Only print name and summary
     51                                                                print(color.BOLD+data['package']+color.END+": "+data['summary'])
     52                                                elif action=='list':
     53                                                        #Print package, summary and status
    2054                                                        try:
    21                                                                 print(u'Package: '+result['package'])
    22                                                                 print(u'Version: '+result['version'])
    23                                                                 print(u'Categories: '+','.join(result['categories']))
    24                                                                 print(u'Status: '+result['status'])
    25                                                                 print(u'Summary: '+result['summary'])
    26                                                                 print(u'Description: '+result['description'])
    27                                                                 pkgString=[]
    28                                                                 for dependency in result['depends']:
    29                                                                                 pkgName=dependency.split(';')[0]
    30                                                                                 pkgString.append(pkgName)
    31                                                                 print(u'Depends: '+' '+','.join(pkgString))
    32                                                                 print("")
    33                                                         except:
     55                                                                if data['package']:
     56                                                                        package=data['package']
     57                                                                else:
     58                                                                        package=data['name']
     59                                                                print(color.BOLD+package+color.END+": "+data['summary']+' ('+','.join(data['categories'])+')'+' ('+data['state']+')')
     60                                                        except Exception as e:
     61                                                                print('Error listing :'+str(e))
    3462                                                                pass
     63                                                elif action=='install':
     64                                                        for app in data:
     65                                                                                print(app+' '+data[app])
    3566                                                else:
    36                                                         #Only print name and summary
    37                                                         print(result['package']+": "+result['summary'])
    38                                         elif action=='list':
    39                                                 #Print package, summary and status
    40                                                 try:
    41                                                         if result['package']:
    42                                                                 package=result['package']
    43                                                         else:
    44                                                                 package=result['name']
    45                                                         print(package+": "+result['summary']+' ('+','.join(result['categories'])+')'+' ('+result['status']+')')
    46                                                 except:
    47                                                         pass
    48                                         elif action=='install':
    49                                                 for app in result:
    50                                                                         print(app+' '+result[app])
    51                                         else:
    52                                                         print(result)
     67                                                                print(data)
     68                                else:
     69                                        print (u"Error: "+str(status['status']))
    5370                                printed=True
    54 #                               print ("---------------")
    55 #                       if printed:
    56 #                               print ("####################")
    5771                return(printed)
    5872        #def print_results
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/debManager.py

    r3646 r3653  
    1313                #self.pluginInfo=['install','deb','remove','deb','pkginfo','deb','remove','zmd']
    1414                self.pluginInfo={'install':'deb','remove':'deb','pkginfo':'deb'}
     15                self.result={}
     16                self.result['data']={}
     17                self.result['status']={}
    1518                self.count=0
    1619        #def __init__
     
    3841                self.installer=packagekit.Client()
    3942                self.count=len(applist)
     43                self._set_status(-1)
    4044                #1.- If the app doesn't exist cancel the action
    4145                for appInfo in applist:
     
    5155                                if action=='pkginfo':
    5256                                        self._get_App_Dependencies(appInfo,app)
    53                         self.progress=self.progress+(self.partialProgress/self.count)
    54                         self._debug("Progress: "+str(self.progress))
     57#                       self.progress=self.progress+(self.partialProgress/self.count)
     58                        self._debug("Final Progress: "+str(self.progress))
    5559                self.progress=100
    5660                return(self.result)
    5761        #def execute_action
    5862
     63        def _set_status(self,status,msg=''):
     64                self.result['status']={'status':status,'msg':msg}
     65
    5966        def _callback(self,status,typ,data=None):
     67                print("PRO "+str(self.progress))
    6068                self.partialProgress=status.get_property('percentage')
    61                 self.progress=self.partialProgress/self.count
    62 #               self._debug("Progress"+str(self.partialProgress))
     69                self.partialProgress=self.partialProgress/self.count
     70                self.progress=(self.progress+self.partialProgress)/self.count
     71                self._debug("Partial Progress"+str(self.partialProgress))
     72                self._debug("Total Progress"+str(self.progress))
     73                self._debug("Total apps"+str(self.count))
    6374        #def _callback
    6475
     
    6879                try:
    6980                        self.installer.install_packages(True,[app.get_id(),],None,self._callback,None)
    70                         self.result.append({app.get_id():0})
     81                        self.result['data'].update({app.get_id():u'installed'})
    7182                except Exception as e:
    7283                        self._debug("Install error: "+str(e.code))
    73                         self.result.append({app.get_id():e.code})
    74                 self.partialProgress=100
     84                        self._set_status(e.code)
     85                finally:
     86                        self.partialProgress=100
    7587        #def _install_App_from_Repo
    7688                       
     
    7890                try:
    7991                        self.installer.remove_packages(True,[app.get_id(),],True,False,None,self._callback,None)
    80                         self.result.append({app.get_id():0})
     92                        self.result['data'].update({app.get_id():0})
    8193                except Exception as e:
    8294                        self._debug("Remove error: " +str(e.code))
    83                         self.result.append({app.get_id():e.code})
    84                 self.partialProgress=100
     95                        self._set_status(e.code)
     96                finally:
     97                        self.partialProgress=100
    8598        #def _remove_App
    8699
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/infoManager.py

    r3646 r3653  
    113113                                appInfo['homepage']=app.get_url_item(1).strip()
    114114                        if app.get_state()==1: #1=Installed
    115                                 appInfo['status']='installed'
     115                                appInfo['state']='installed'
    116116                        else:
    117                                 appInfo['status']='available'
     117                                appInfo['state']='available'
    118118                        if app.get_kudos():
    119119                                appInfo['kudos']=app.get_kudos()
     
    149149                'homepage':'',\
    150150                'installerUrl':'',\
    151                 'status':'',\
     151                'state':'',\
    152152                'depends':'',\
    153153                'kudos':'',\
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/searchManager.py

    r3646 r3653  
    1313                self.applist=[]
    1414                self.progress=0
     15                self.result={}
     16                self.result['data']={}
     17                self.result['status']={}
    1518        #def __init__
    1619
     
    4043                        tokens=[tokens]
    4144                self.store=appstreamStore
     45                self.result['status']={'status':-1,'msg':''}
     46                self.result['data']=[]
    4247                if action=='list':
    4348                        self._list_category(tokens)
     
    4752                        self._search_app(tokens)
    4853                self.progress=100
    49                 return(self.applist)
     54                return(self.result)
     55
     56        def _set_status(self,status,msg=''):
     57                self.result['status']={'status':status,'msg':msg}
    5058
    5159        def set_precision(self,precision):
     
    6573                        for app in self._get_apps_by_match(tokens):
    6674                                applist.append(app)
    67                 self.applist=applist
     75                self.result['data']=applist
     76                if len(applist):
     77                        self._set_status(0)
     78                else:
     79                        self._set_status(1)
    6880                return(applist)
    6981
     
    7991                for section in catDict:
    8092                        applist.append({str(section):catDict[section]})
    81                 self.applist=applist
     93                self.result['data']=applist
     94                if len(applist):
     95                        self._set_status(0)
     96                else:
     97                        self._set_status(1)
    8298                return(applist)
    8399
     
    108124#                       for app in applist:
    109125#                               self._debug("Added "+app.get_id())
    110                 self.applist=applist
     126                self.result['data']=applist
     127                if len(applist):
     128                        self._set_status(0)
     129                else:
     130                        self._set_status(1)
    111131                return(applist)
    112132
     
    117137                app=self.store.get_app_by_id(appName)
    118138                if not app:
    119                 #2.- Try with exact match with oorg.lliurex
     139                #2.- Try exact match with org.lliurex
    120140                        app=self.store.get_app_by_id("org.lliurex."+appName)
    121141                        if not app:
    122                 #2.- Try with exact match with .desktop
     142                #2.- Try exact match with .desktop
    123143                                app=self.store.get_app_by_id(appName+".desktop")
    124144                return(app)
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/storeManager.py

    r3646 r3653  
    129129                                self.threadsRunning[action]=eval(self.threads[action])
    130130                                self.threadsRunning[action].start()
     131                                self.result[action]={}
     132                                self.result[action]['status']={'status':-1,'msg':''}
    131133                                self._debug("Thread "+str(self.threadsRunning[action])+" for action "+action+" launched")
     134
    132135                        except Exception as e:
    133136                                self._debug("Can't launch thread for action: "+action)
     
    258261       
    259262                                                count=len(self.relatedActions[parentAction])
    260                                                 acumprogress=round(acumProgress/count,0)
    261263#                                               self._debug("Assign result for action" +action)
    262264                                                self.progressActions[parentAction]=round(acumProgress/count,0)
    263                                                 progress[parentAction]=round(acumProgress/count,0)
     265                                                progress[parentAction]=self.progressActions[parentAction]
    264266                        else:
    265267                                #put a 100% just in case
     
    284286                result={}
    285287                if action==None:
    286                         result=self.result
     288                        for res in self.result.keys():
     289                                if res!='load':
     290                                        result[res]=self.result[res]['data']
    287291                else:
    288292                        if self.is_action_running(action):
     
    290294                        result[action]=None
    291295                        if action in self.result:
    292                                 result[action]=self.result[action]
     296                                result[action]=self.result[action]['data']
    293297                self.lock.release()
    294298                return(result)
    295299        #def get_result
     300
     301        ####
     302        #Gets the status of an action
     303        #Input.
     304        # - action
     305        #Output:
     306        # - Status dict of the action
     307        ####
     308        def get_status(self,action=None):
     309                self.lock.acquire()
     310                result={}
     311                if action in self.result:
     312                        result=self.result[action]['status']
     313                self.lock.release()
     314                return(result)
     315        #def get_status
    296316
    297317        ####
     
    338358                        self._debug("Checking plugin for "+action+ " "+package_type)
    339359                        if package_type in self.registeredPlugins[action]:
    340                                 #Only search deb's full info if there's only one package
    341                                 if package_type=='deb' and (len(typeDict[package_type])!=1 or fullsearch==False):
     360                                #Only search deb's full info if it's required
     361                                if (package_type=='deb' and fullsearch==False):
    342362                                        continue
    343363                                pkgInfoFunction=self._execute_class_method(action,package_type,launchedby)
     
    349369                result={}
    350370                self._debug("Retrieving all sections")
     371                data={}
     372                status={}
    351373                if action in self.registeredPlugins.keys():
    352374                        self._debug("Plugin for generic search: "+self.registeredPlugins[action]['*'])
     
    354376                        searchFunction=eval(finder+"()")
    355377                        result=searchFunction.execute_action(self.store,action,searchItem)
     378                        status=result['status']
     379                        data=result['data']
    356380                else:
    357381                        print("No plugin for action "+action)
    358                 self.result[action]=result
    359                 self._debug("Sections: "+str(self.result[action]))
     382                self.result[action]['data']=data
     383                self.result[action]['status']=status
     384                self._debug("Sections: "+str(self.result[action]['data']))
     385                self._debug("Status: "+str(self.result[action]['status']))
    360386
    361387        ####
     
    380406
    381407                searchFunction=self._execute_class_method(action,'*',launchedby)
    382                 aux_applist=searchFunction.execute_action(self.store,action,searchItem)
    383                 if len(aux_applist):
     408                aux_result=searchFunction.execute_action(self.store,action,searchItem)
     409                aux_applist=aux_result['data']
     410                status=aux_result['status']
     411                realAction=action
     412                if status['status']==0:
    384413                        #1.- Get appstream metadata (faster)
    385414                        partialAction='info'
     415                        self.result[partialAction]={}
    386416                        applist=self._get_App_Info(aux_applist,launchedby)
    387417                        self._debug("Add result for "+partialAction)
    388                         self.result[partialAction]=applist
     418                        self.result[partialAction]['data']=applist
    389419                        #2.- Get rest of metadata (slower)
    390420                        partialAction='pkginfo'
    391421                        applist=self._get_Extended_App_Info(applist,launchedby,fullsearch)
    392                         realAction=action
    393422                        if launchedby:
    394423                                realAction=launchedby
    395424                                self._debug("Assigned results of "+action+" to "+realAction)
    396425                        if (len(applist)):
    397                                 self.result[realAction]=applist
    398426                                return_msg=True
    399427                        else:
    400                                 notfound=''
    401                                 self.result[realAction]=[{searchItem:2}]
    402428                                return_msg=False
    403429                else:
    404                         self.result[launchedby]=[{searchItem:1}]
    405430                        return_msg=False
     431                self.result[launchedby]['data']=applist
     432                self.result[launchedby]['status']=status
    406433                return(return_msg)
    407434        #def _search_Store
     
    420447                return_msg=False
    421448                if (self._search_Store(appName,'search',False,action)):
    422                         applistInfo=self.result[action]
     449                        applistInfo=self.result[action]['data']
    423450                        typeDict={}
    424451                        #Check if package is installed if we want to remove it or vice versa
    425452                        for appInfo in applistInfo:
    426                                 if (action=='install' and appInfo['status']=='installed') or (action=='remove' and appInfo['status']=='available'):
     453                                if (action=='install' and appInfo['state']=='installed') or (action=='remove' and appInfo['state']=='available'):
    427454                                        if action=='remove':
    428                                                 self.result[action]=[{appInfo['package']:3}]
     455#                                               self.result[action]['status']={appInfo['package']:3}
     456                                                self.result[action]['status']={'status':3}
    429457                                        else:
    430                                                 self.result[action]=[{appInfo['package']:4}]
     458#                                               self.result[action]['status']={appInfo['package']:4}
     459                                                self.result[action]['status']={'status':4}
    431460                                        return_msg=False
    432461                                        typeDict={}
Note: See TracChangeset for help on using the changeset viewer.