Ignore:
Timestamp:
Nov 2, 2018, 9:15:56 AM (14 months ago)
Author:
Juanma
Message:

Implemented cache

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/debManager.py

    r8180 r8223  
    44from gi.repository import PackageKitGlib as packagekit
    55import threading
     6import time
    67from queue import Queue as pool
    78class debmanager:
     
    1213                self.progress=0
    1314                self.partial_progress=0
    14                 self.plugin_actions={'install':'deb','remove':'deb','pkginfo':'deb'}
     15                self.plugin_actions={'install':'deb','remove':'deb','pkginfo':'deb','policy':'deb'}
    1516                self.result={}
    1617                self.result['data']={}
     
    2122        def set_debug(self,dbg=True):
    2223                self.dbg=dbg
    23                 self._debug ("Debug enabled")
     24                #self._debug ("Debug enabled")
    2425        #def set_debug
    2526
     
    2829                        print ('DEBUG Deb: %s'%msg)
    2930        #def debug
    30 
    31         def _log(self,msg=None):
    32                 if msg:
    33                         syslog.openlog('lliurex-store')
    34                         syslog.syslog(msg)
    3531
    3632        def register(self):
     
    4137        #filter=2 -> only installed app installed
    4238        def execute_action(self,action,applist,filters=1):
    43                 self._debug("Executing action %s"%action)
     39                #self._debug("Executing action %s"%action)
    4440                self.progress=0
    4541                self.installer=packagekit.Client()
     
    5753                                if app:
    5854                                        if action=='install':
    59                                                 self._log("Installing "+app_info['package'])
    6055                                                self._install_App(app)
    6156                                                self.result['data'].append({'package':app_info['package']})
    6257                                        if action=='remove':
    63                                                 self._log("Removing "+app_info['package'])
    6458                                                self._remove_App(app)
    6559                                                self.result['data'].append({'package':app_info['package']})
    6660                                        if action=='pkginfo':
    67                                                 self.result['data'].append(self._get_App_Extended_Info(app_info,app))
     61                                                res=self._get_info(app_info,app)
     62                                                self.result['data'].append(res)
    6863                                        if action=='policy':
    6964                                                self._set_status(0)
     
    7671        def _set_status(self,status,msg=''):
    7772                self.result['status']={'status':status,'msg':msg}
     73        #def _set_status
    7874
    7975        def _fake_callback(self,*args):
     
    8884        def _install_App(self,app):
    8985                self.return_msg=False
    90                 self._debug("Installing %s"%app.get_id())
     86                #self._debug("Installing %s"%app.get_id())
    9187                err=0
    9288                try:
     
    9591                except Exception as e:
    9692                        print(str(e))
    97                         self._debug("Install error: %s"%e.code)
     93                        #self._debug("Install error: %s"%e.code)
    9894                        err=e.code
    9995                finally:
     
    108104                        self._set_status(0)
    109105                except Exception as e:
    110                         self._debug("Remove error: %s"%e.code)
    111                         self._debug("Remove error: %s"%e)
     106                        #self._debug("Remove error: %s"%e.code)
     107                        #self._debug("Remove error: %s"%e)
    112108                        self._set_status(e.code)
    113109                finally:
     
    116112
    117113        def _th_get_details(self,pkTask,app_info_pool,app):
    118                 self._debug("Getting details for %s"%app.get_id())
     114                #self._debug("Getting details for %s"%app.get_id())
    119115                results=pkTask.get_details([app.get_id(),],None,self._fake_callback,None)
    120116                for app_detail in results.get_details_array():
     
    124120
    125121        def _th_get_depends(self,pkTask,app_info_pool,app):
    126                 self._debug("Getting dependencies for %s"%app.get_id())
     122                #self._debug("Getting dependencies for %s"%app.get_id())
    127123                results=pkTask.get_depends(1,[app.get_id(),],False,None,self._fake_callback,None)
    128124                dependsList=[]
     
    132128        #def _th_get_depends
    133129
    134         def _get_App_Extended_Info(self,app_info,app):
     130        def _get_info(self,app_info,app):
    135131                app_info['version']=app.get_version()
    136132                app_info['arch']=app.get_id().split(';')[2]
     
    138134                results=[]
    139135                self._set_status(0)
    140                 app_info_pool=pool()
    141                 threads=[]
    142                 th=threading.Thread(target=self._th_get_details, args = (pkTask,app_info_pool,app))
    143                 threads.append(th)
    144                 th.start()
    145                 #Get depends disabled per time-costing
    146                 #th=threading.Thread(target=self._th_get_depends, args = (pkTask,app_info_pool,app))
    147                 #threads.append(th)
    148                 #th.start()
     136                #Only get size and depends if we don't have the data
     137                if not app_info['size']:
     138                        app_info_pool=pool()
     139                        threads=[]
     140                        th=threading.Thread(target=self._th_get_details, args = (pkTask,app_info_pool,app))
     141                        threads.append(th)
     142                        th.start()
     143                        #Get depends disabled per time-costing
     144                        #th=threading.Thread(target=self._th_get_depends, args = (pkTask,app_info_pool,app))
     145                        #threads.append(th)
     146                        #th.start()
     147                        for thread in threads:
     148                                try:
     149                                        thread.join()
     150                                except:
     151                                        pass
     152                        while app_info_pool.qsize():
     153                                data=app_info_pool.get()
     154                                app_info.update(data)
     155                #Get status
    149156                try:
    150157                        info=app.get_info()
    151158                        state=info.to_string(info)
    152                         if state!=app_info['state'] and app_info['state']=='installed':
     159                        if state!=app_info['state'] and state!='available' and app_info['state']=='installed':
    153160                                app_info['updatable']=1
    154161                        else:
    155162                                app_info['state']=state
    156                         self._debug("State: "+app_info['state'])
    157                 except Exception as e:
    158                         self._debug("State: not available (%s)"%e)
    159 
    160                 for thread in threads:
    161                         try:
    162                                 thread.join()
    163                         except:
     163                        #self._debug("State: %s"%state)
     164                except Exception as e:
     165                        #self._debug("State: not available (%s)"%e)
     166                        pass
     167                #self._debug("INFO: %s"%app_info)
     168                return(app_info)
     169        #def _get_info
     170
     171        def _resolve_App(self,app_name,filters=1):
     172                #self._debug("Resolving %s"%app_name)
     173                def _pk_resolve(filters,app_name):
     174                        app=None
     175                        #self._debug("Filter for resolver: %s"%filters)
     176                        result=self.installer.resolve(filters,[app_name,],None,self._fake_callback, None)
     177                        resolvelist=result.get_package_array()
     178                        #resolver bug: filters not work so if we want to remove an app first we must get the installed version...
     179                        app_resolved=None
     180                        if filters==1:
     181                                app_resolved=resolvelist[0]
     182                        elif filters==2:
     183                                for app in resolvelist:
     184                                        if (str(app.get_info()).find('PK_INFO_ENUM_INSTALLED')!=-1):
     185                                                app_resolved=app
     186                                                break
     187                        if app_resolved:
     188                                #self._debug("Application %s resolved succesfully"%app_resolved.get_name())
     189                                app=app_resolved
     190                        else:
     191                                #self._debug("Application %s NOT resolved"%app_resolved.get_name())
    164192                                pass
    165 
    166                 while app_info_pool.qsize():
    167                         data=app_info_pool.get()
    168                         app_info.update(data)
    169 
    170                 return(app_info)
    171         #def _get_App_Extended_Info
    172 
    173         def _resolve_App(self,app_name,filters=1):
    174                 self._debug("Resolving %s"%app_name)
     193                        return app
     194
    175195                app=None
    176196                resolvelist=[]
    177197                self.return_msg=False
    178198                try:
    179                         self._debug("Filter for resolver: %s"%filters)
    180                         result=self.installer.resolve(filters,[app_name,],None,self._fake_callback, None)
    181                         resolvelist=result.get_package_array()
    182                         app_resolved=resolvelist[0]
    183                         #resolver bug: filters not work so if we want to remove an app first we must get the installed version...
    184                         if filters==2:
    185                                 for app in resolvelist:
    186                                         if (str(app.get_info()).find('PK_INFO_ENUM_INSTALLED')!=-1):
    187                                                 app_resolved=app
    188                         if app_resolved:
    189                                 self._debug("Application %s resolved succesfully"%app_resolved.get_name())
    190                                 app=app_resolved
    191                 except Exception as e:
    192                         self._debug("Couldn't resolve %s"%app_name)
    193                         self._debug("Reason: %s"%e)
     199                        app=_pk_resolve(filters,app_name)
     200                except Exception as e:
     201                        #self._debug("Couldn't resolve %s"%app_name)
     202                        #self._debug("Reason: %s"%e)
     203                        #self._debug("2nd attempt")
     204                        time.sleep(0.5)
     205                        try:
     206                                app=_pk_resolve(filters,app_name)
     207                        except Exception as e:
     208                                #self._debug("Couldn't resolve %s"%app_name)
     209                                #self._debug("Reason: %s"%e)
     210                                pass
    194211                finally:
    195212                        self.partial_progress=100
Note: See TracChangeset for help on using the changeset viewer.