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

Last change on this file since 7433 was 7433, checked in by Juanma, 21 months ago

disable debug

File size: 5.0 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=False
9                self.result=[]
10                self.progress=0
11                self.partial_progress=0
12                self.plugin_actions={'install':'deb','remove':'deb','pkginfo':'deb'}
13                self.result={}
14                self.result['data']={}
15                self.result['status']={}
16                self.count=0
17        #def __init__
18
19        def set_debug(self,dbg=True):
20                self.dbg=dbg
21                self._debug ("Debug enabled")
22        #def set_debug
23
24        def _debug(self,msg=''):
25                if self.dbg:
26                        print ('DEBUG Deb: %s'%msg)
27        #def debug
28
29        def _log(self,msg=None):
30                if msg:
31                        syslog.openlog('lliurex-store')
32                        syslog.syslog(msg)
33
34        def register(self):
35                return(self.plugin_actions)
36        #def register
37
38        def execute_action(self,action,applist):
39                self.progress=0
40                self.installer=packagekit.Client()
41                self.count=len(applist)
42                self.result['status']={'status':-1,'msg':''}
43                self.result['data']=[]
44                processedPkg=[]
45                #1.- If the app doesn't exist cancel the action
46                for app_info in applist:
47                        if app_info['package'] not in processedPkg:
48                                processedPkg.append(app_info['package'])
49                                filters=1
50                                if action=='remove':
51                                        filters=2
52                                app=self._resolve_App(app_info['package'],filters)
53                                if app:
54                                        if action=='install':
55                                                self._log("Installing "+app_info['package'])
56                                                self._install_App(app)
57                                                self.result['data'].append({'package':app_info['package']})
58                                        if action=='remove':
59                                                self._log("Removing "+app_info['package'])
60                                                self._remove_App(app)
61                                                self.result['data'].append({'package':app_info['package']})
62                                        if action=='pkginfo':
63                                                self._log("Looking "+app_info['package'])
64                                                self.result['data'].append(self._get_App_Extended_Info(app_info,app))
65                                self.progress=self.progress+(self.partial_progress/self.count)
66                self.progress=100
67                return(self.result)
68        #def execute_action
69
70        def _set_status(self,status,msg=''):
71                self.result['status']={'status':status,'msg':msg}
72
73        def _fake_callback(self,status,typ,data=None):
74                pass
75        #def _fake_callback
76
77        def _callback(self,status,typ,data=None):
78                self.partial_progress=status.props.percentage
79                self.progress=self.partial_progress/self.count
80        #def _callback
81
82        def _install_App(self,app):
83                self.return_msg=False
84                self._debug("Installing "+app.get_id())
85                err=0
86                try:
87                        self.installer.install_packages(True,[app.get_id(),],None,self._callback,None)
88                        err=0
89                except Exception as e:
90                        print(str(e))
91                        self._debug("Install error: "+str(e.code))
92                        err=e.code
93                finally:
94                        self.partial_progress=100
95                self._set_status(err)
96                return err
97        #def _install_App_from_Repo
98                       
99        def _remove_App(self,app):
100                try:
101                        self.installer.remove_packages(True,[app.get_id(),],True,False,None,self._callback,None)
102                        self._set_status(0)
103                except Exception as e:
104                        self._debug("Remove error: " +str(e.code))
105                        self._debug("Remove error: " +str(e))
106                        self._set_status(e.code)
107                finally:
108                        self.partial_progress=100
109        #def _remove_App
110
111        def _get_App_Extended_Info(self,app_info,app):
112                self._debug("Getting dependencies for "+app.get_id())
113                pkTask=packagekit.Task()
114                results=[]
115                dependsList=[]
116                self._set_status(0)
117                try:
118                        results=pkTask.get_depends(1,[app.get_id(),],True,None,self._fake_callback,None)
119                except Exception as e:
120#                       self._set_status(1)
121                        print (str(e))
122                        pass
123                if (results):
124                        app_info['version']=app.get_version()
125                        app_info['arch']=app.get_id().split(';')[2]
126                        for related_app in results.get_package_array():
127                                dependsList.append(related_app.get_id())
128                        app_info['depends']=dependsList
129                        #app.get_version()
130                try:
131                        results=pkTask.get_details([app.get_id(),],None,self._fake_callback,None)
132                except Exception as e:
133#                       self._set_status(1)
134                        print ("ERROR %s"%e)
135                        pass
136                if(results):
137                        for app_detail in results.get_details_array():
138                                app_info['size']=str(app_detail.get_size())
139                                break
140                try:
141                        info=app.get_info()
142                        state=info.to_string(info)
143                        if state!=app_info['state'] and app_info['state']=='installed':
144                                app_info['updatable']=1
145                        else:
146                                app_info['state']=state
147                        self._debug("State: "+app_info['state'])
148                except Exception as e:
149                        self._debug("State: not available")
150                               
151                return(app_info)
152        #def _get_App_Extended_Info
153
154        def _resolve_App(self,app_name,filters=1):
155                self._debug("Resolving "+app_name)
156                app=None
157                resolvelist=[]
158                self.return_msg=False
159                try:
160                        self._debug("Filter for resolver: "+str(filters))
161                        result=self.installer.resolve(filters,[app_name,],None,self._fake_callback, None)
162                        resolvelist=result.get_package_array()
163                        app_resolved=resolvelist[0]
164                        #resolver bug: filters not work so if we want to remove an app first we must get the installed version...
165                        if filters==2:
166                                for app in resolvelist:
167                                        if (str(app.get_info()).find('PK_INFO_ENUM_INSTALLED')!=-1):
168                                                app_resolved=app
169                        if app_resolved:
170                                self._debug("Application "+app_resolved.get_name()+" resolved succesfully")
171                                app=app_resolved
172                except Exception as e:
173                        self._debug("Couldn't resolve "+app_name)
174                        self._debug("Reason: "+str(e))
175                finally:
176                        self.partial_progress=100
177                return(app)
178        #def _resolve_App
179
Note: See TracBrowser for help on using the repository browser.