source: lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/debManager.py @ 3653

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

WIP on CLI

File size: 4.3 KB
Line 
1import syslog
2import gi
3gi.require_version('PackageKitGlib', '1.0')
4from gi.repository import PackageKitGlib as packagekit
5class debmanager:
6        def __init__(self):
7                self.installer=''
8                self.dbg=0
9                self.pkgList=[]
10                self.result=[]
11                self.progress=0
12                self.partialProgress=0
13                #self.pluginInfo=['install','deb','remove','deb','pkginfo','deb','remove','zmd']
14                self.pluginInfo={'install':'deb','remove':'deb','pkginfo':'deb'}
15                self.result={}
16                self.result['data']={}
17                self.result['status']={}
18                self.count=0
19        #def __init__
20
21        def set_debug(self,dbg='1'):
22                self.dbg=int(dbg)
23                self._debug ("Debug enabled")
24        #def set_debug
25
26        def _debug(self,msg=''):
27                if self.dbg==1:
28                        print ('DEBUG Deb: '+str(msg))
29        #def debug
30
31        def _log(self,msg=None):
32                if msg:
33                        syslog.openlog('lliurex-store')
34                        syslog.syslog(msg)
35
36        def register(self):
37                return(self.pluginInfo)
38        #def register
39
40        def execute_action(self,action,applist):
41                self.installer=packagekit.Client()
42                self.count=len(applist)
43                self._set_status(-1)
44                #1.- If the app doesn't exist cancel the action
45                for appInfo in applist:
46                        app=self._resolve_App(appInfo['package'])
47                        if app:
48                                if action=='install':
49                                        self._install_App(app)
50                                if action=='remove':
51                                        self._log("Removing "+appInfo['package'])
52                                        self._get_App_Dependencies(appInfo,app)
53                                        self._log("Dependencies to remove"+str(appInfo['depends']))
54                                        self._remove_App(app)
55                                if action=='pkginfo':
56                                        self._get_App_Dependencies(appInfo,app)
57#                       self.progress=self.progress+(self.partialProgress/self.count)
58                        self._debug("Final Progress: "+str(self.progress))
59                self.progress=100
60                return(self.result)
61        #def execute_action
62
63        def _set_status(self,status,msg=''):
64                self.result['status']={'status':status,'msg':msg}
65
66        def _callback(self,status,typ,data=None):
67                print("PRO "+str(self.progress))
68                self.partialProgress=status.get_property('percentage')
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))
74        #def _callback
75
76        def _install_App(self,app):
77                self.return_msg=False
78                self._debug("Installing "+app.get_id())
79                try:
80                        self.installer.install_packages(True,[app.get_id(),],None,self._callback,None)
81                        self.result['data'].update({app.get_id():u'installed'})
82                except Exception as e:
83                        self._debug("Install error: "+str(e.code))
84                        self._set_status(e.code)
85                finally:
86                        self.partialProgress=100
87        #def _install_App_from_Repo
88                       
89        def _remove_App(self,app):
90                try:
91                        self.installer.remove_packages(True,[app.get_id(),],True,False,None,self._callback,None)
92                        self.result['data'].update({app.get_id():0})
93                except Exception as e:
94                        self._debug("Remove error: " +str(e.code))
95                        self._set_status(e.code)
96                finally:
97                        self.partialProgress=100
98        #def _remove_App
99
100        def _get_App_Dependencies(self,appInfo,app):
101                self._debug("Getting dependencies for "+app.get_id())
102                pkTask=packagekit.Task()
103                results=[]
104                dependsList=[]
105                try:
106                        results=pkTask.get_depends(1,[app.get_id(),],True,None,self._callback,None)
107                except:
108                        pass
109                if (results):
110                        for app in results.get_package_array():
111                                dependsList.append(app.get_id())
112                appInfo['depends']=dependsList
113#               return(dependsList)
114                return(appInfo)
115        #def _get_App_Dependencies
116
117        def _get_App_Info(self,appInfo,app,appsCount=0):
118                info=app.get_info()
119                appInfo['status']=info.to_string(info)
120                self._debug("Status: "+appInfo['status'])
121                #Only search dependencies if there's only one package on the package queue
122                if appsCount==1:
123                        self._debug("loading depends")
124                        appInfo['depends']=self._get_App_Dependencies(appInfo,app)
125                self.partialProgress=100
126                self.result.append(appInfo)
127                return(appInfo)
128        #def _get_App_Info
129
130        def _resolve_App(self,appName,filters=False):
131                self._debug("Resolving "+appName)
132                app=None
133                applist=[]
134                self.return_msg=False
135                try:
136                        result=self.installer.resolve(1,[appName,],None,self._callback, None)
137                        applist=result.get_package_array()
138                        if applist:
139                                self._debug("Application "+applist[0].get_name()+" resolved succesfully")
140                                app=applist[0]
141                except Exception as e:
142                        self._debug("Couldn't resolve "+appName)
143                        self._debug("Reason: "+str(e))
144                self.partialProgress=100
145                return(app)
146        #def _resolve_App
147
148       
Note: See TracBrowser for help on using the repository browser.