source: lliurex-moving-core/trunk/fuentes/bin/llx-moving-cmd

Last change on this file was 8289, checked in by hectorgh, 11 months ago

forcing dconf load

  • Property svn:executable set to *
File size: 5.7 KB
Line 
1#!/usr/bin/python
2
3import sys
4import os
5import shutil
6import xmlrpclib
7import subprocess
8import net.Lliurex.Classroom.MovingProfiles
9
10import gi
11gi.require_version("Gtk","3.0")
12from gi.repository import Gio
13
14
15def print_usage():
16
17        print("")
18        print("Usage: llx-moving-cmd <command>")
19        print("")
20        print("Available commands:")
21        print("load                     loads profiles from server")
22        print("save                     save profiles to server")
23        print("show                     show rules")
24        print("match                    list matched files")
25        print("test (load|save)         performs a test without copying or deleting anything")
26        print("purge (local|remote)     purges either local or remote sync files")
27        print("backup NAME              creates a profile backup")
28        print("help                     print this help")
29
30
31def load_dconf(profile_path):
32       
33       
34        dump_file = profile_path+"/../.dconf.dump"
35        if os.path.exists(dump_file):
36                p=subprocess.Popen(["dconf","reset","-f","/"])
37                p.communicate()
38                       
39                of = open(dump_file)
40                data = of.read()
41                of.close()
42                       
43                p=subprocess.Popen(["dconf","load","/"],stdin=subprocess.PIPE)
44                p.communicate(data)
45                       
46                p=subprocess.Popen(["dconf","update","/"],stdin=subprocess.PIPE)
47                p.communicate(data)
48                       
49                c=xmlrpclib.ServerProxy("https://%s:9779"%(self.server_name))
50                try:
51                        if c.is_frozen_user("","Golem",os.getenv("USER")):
52                                os.system("dconf reset -f /")
53                except Exception as e:
54                        pass
55                       
56                Gio.Settings.sync()
57
58       
59#def load_dconf
60       
61
62def main():
63
64        ret=0
65
66        if (len(sys.argv)<2):
67                print_usage()
68        else:
69                if(sys.argv[1]=="load"):
70                        try:
71                                mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
72                                mp.LoadSession()
73                                load_dconf(mp.GetProfilePath())
74                        except:
75                                #Ignore for now
76                                pass
77                       
78                       
79                elif(sys.argv[1]=="save"):
80                        mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
81                        mp.SaveSession()
82                       
83                elif(sys.argv[1]=="show"):
84                        mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
85                       
86                        print("Include:")
87                        for name in mp.cfg["include"]:
88                                value=mp.cfg["include"][name]
89                                tab=" "*(32-len(name))
90                                print("* "+name+tab+"["+value+"]")
91                               
92                        print("")
93                        print("Exclude:")
94                        for name in mp.cfg["exclude"]:
95                                value=mp.cfg["exclude"][name]
96                                tab=" "*(32-len(name))
97                                print("* "+name+tab+"["+value+"]")
98                       
99                elif(sys.argv[1]=="match"):     
100                        mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
101                       
102                        home=os.path.expanduser("~")
103                       
104                        print("Matched files:")
105                       
106                        for fname in os.listdir(home):
107                                if(mp.Match(fname)):
108                                        print("->"+fname)
109                       
110                elif(sys.argv[1]=="test" and len(sys.argv)>2):
111                        if(sys.argv[2]=="load"):
112                                mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
113                                home=os.path.expanduser("~")
114                                moving_path=mp.GetProfilePath()
115                               
116                                profile_files=os.listdir(moving_path)
117                               
118                                update_files=[]
119                                delete_files=[]
120                                append_files=[]
121                               
122                                for fname in os.listdir(home):
123                                        if mp.Match(fname):
124                                                if fname not in profile_files:
125                                                        delete_files.append(fname)
126                                                else:
127                                                        update_files.append(fname)
128
129                                home_files=os.listdir(home)
130                       
131                                for fname in profile_files:
132                                        if(mp.Match(fname)):
133                                                if (not fname in home_files):
134                                                        append_files.append(fname)
135                                       
136                                                       
137                                print("Local files updated:")
138                               
139                                for fname in update_files:
140                                        print("->"+fname)
141                                       
142                                print("Local files deleted:")
143                               
144                                for fname in delete_files:
145                                        print("->"+fname)
146                               
147                                print("Local files appended:")
148
149                                for fname in append_files:
150                                        print("->"+fname)                               
151
152
153                        elif(sys.argv[2]=="save"):
154                                mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
155                                home=os.path.expanduser("~")
156                                moving_path=mp.GetProfilePath()
157                               
158                                home_files=os.listdir(home)
159                               
160                                update_files=[]
161                                delete_files=[]
162                                append_files=[]
163                               
164                                for fname in os.listdir(moving_path):
165                                        if not fname in home_files:
166                                                delete_files.append(fname)
167                                        else:
168                                                if(mp.Match(fname)):
169                                                        update_files.append(fname)
170                                                else:
171                                                        delete_files.append(fname)
172
173                                profile_files=os.listdir(moving_path)
174                                for fname in home_files:
175                                        if (mp.Match(fname)):
176                                                if not fname in profile_files:
177                                                        append_files.append(fname)
178
179
180                                print("Remote files updated:")
181                               
182                                for fname in update_files:
183                                        print("->"+fname)
184                                       
185                                print("Remote files deleted:")
186                               
187                                for fname in delete_files:
188                                        print("->"+fname)
189
190                                print("Remote files appended:")
191                               
192                                for fname in append_files:
193                                        print("->"+fname)
194                               
195                               
196                       
197                        else:
198                                print_usage()
199                               
200                elif(sys.argv[1]=="purge" and len(sys.argv)>2):
201               
202                        if(sys.argv[2]=="local"):
203                                mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
204                                home=os.path.expanduser("~")
205                                                               
206                                print("Removing local files:")
207                       
208                                for fname in os.listdir(home):
209                                        if(mp.Match(fname)):
210                                                fpath = home+os.path.sep+fname
211                               
212                                                print("-> "+fpath)                             
213                               
214                                                if(os.path.isdir(fpath)):
215                                                        shutil.rmtree(fpath)
216                               
217                                                if(os.path.isfile(fpath)):
218                                                        os.remove(fpath)
219               
220                                print("done")
221                       
222                        elif(sys.argv[2]=="remote"):
223                                mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
224                                moving_path=mp.GetProfilePath()
225                               
226                                profile_files=os.listdir(moving_path)
227
228                                print("Removing remote files:")
229                       
230                                for fname in profile_files:
231                                        fpath = moving_path+os.path.sep+fname
232                               
233                                        print("-> "+fpath)                             
234                               
235                                        if(os.path.isdir(fpath)):
236                                                shutil.rmtree(fpath)
237                               
238                                        if(os.path.isfile(fpath)):
239                                                os.remove(fpath)
240               
241                                print("done")
242                       
243                        else:
244                                print_usage()
245               
246                elif(sys.argv[1]=="backup" and len(sys.argv)>2):
247                        mp = net.Lliurex.Classroom.MovingProfiles.MovingProfiles("")
248                        mp.Backup(sys.argv[2]) 
249
250                elif(sys.argv[1]=="help"):
251                        print_usage()
252                else:
253                        print("Unknown command :"+sys.argv[1])
254                        print_usage()
255                        ret=1 #exit with error status
256       
257                       
258                       
259        sys.exit(ret)
260
261
262if __name__=="__main__":
263        main()
Note: See TracBrowser for help on using the repository browser.