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

Last change on this file since 3275 was 3275, checked in by Juanma, 2 years ago

wip on packaging

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