import os
import time
try:
import blueplanet.client.StorageClient as StorageClient
except ImportError:
import StorageClient
# settings
nur_geaendertes_updaten= True
pfad= 'backup_A.txt'
ladegroesse= 1024 * 1024 * 4 # bytes of file loaded
# program
def entferne_ende(pfad):
while pfad[-1] in os.linesep:
pfad= pfad[:-1]
return pfad
def get_pathes(pfad= pfad):
return [entferne_ende(p).split('|') for p in file(pfad, 'rb').readlines() if p]
def c_err(p_von, err= ''):
print 'ERROR:',p_von, err#,'konnte nicht kopiert werden.'
if 'p_err_nach' in globals():
print >> file(p_err_nach, 'ab'),'ERROR:',p_von, err
def copy_file(von, nach, rec= 0):
try:
if not nur_geaendertes_updaten or os.path.isfile(von) and (not sc.isfile(nach) or \
(os.path.getmtime(von) > sc.get_last_change(nach) or \
os.path.getsize(von) != sc.getsize(nach))):
print ' ' * rec + '+', os.path.split(von)[1],
if os.access(von, os.R_OK):
f_von= file(von, 'rb')
d= f_von.read(ladegroesse)
er= sc.write(nach, d, 'wb')
d= f_von.read(ladegroesse)
while d and not er:
er= sc.write(nach, d, 'ab')
d= f_von.read(ladegroesse)
f_von.close()
if not er:
print '(copied)'
else:
c_err(von, er)
else:
if 'p_err_nach' in globals():
print >> file(p_err_nach, 'ab'),'ERROR:',von
except (), err:
c_err(von, err)
def del_file(nach, rec= 0):
print ' ' * rec + '-', os.path.split(nach)[1]
e= False
try:
e= sc.remove(nach)
except:
c_err(p_von, 'delete failed')
if e:
c_err(p_von, 'delete failed ' + str(e))
def del_dir(nach, rec= 0):
print ' ' * rec + '-', os.path.split(nach)[1]
rec+= 1
l_nach= sc.listdir(nach)
# print l_nach#; hhhh
for p_rel in l_nach:
print p_rel
p_nach= os.path.join(nach, p_rel)
delete(p_nach, rec)
os.rmdir(nach)
def delete(nach, rec= 0):
#print nach
e= False
print ' ' * rec + '-', os.path.split(nach)[1],
try:
e= sc.remove(nach)
print 'deleted'
except OSError, err:
c_err(nach, 'delete failed')
if e:
c_err(nach, 'delete failed ' + str(e))
def copy_dir(von, nach, rec= 0):
if not sc.isdir(nach):
sc.makedir(nach)
print ' ' * rec + '+', os.path.split(von)[1]
else:
print ' ' * rec + ' ', os.path.split(von)[1]
rec+= 1
l_von= os.listdir(von)
for rel_path in l_von:
p_von= os.path.join(von, rel_path)
p_nach= os.path.join(nach, rel_path)
copy(p_von, p_nach, rec)
l_nach= sc.listdir(nach)
##print l_nach, nach
for p_rel in l_nach:
if p_rel not in l_von:
# print ' ' * rec + '#',p_rel
p_del= os.path.join(nach, p_rel)
# print ' ' * rec + '#',p_del
delete(p_del, rec)
def copy(von, nach, rec= 0):
try:
if os.path.isdir(von):
copy_dir(von, nach, rec)
elif os.path.isfile(von):
copy_file(von, nach, rec)
else:
c_err(von)
except ():
c_err(von, nach)
if __name__ == '__main__':
sicherungpfad= 'sicherungen'
try:
import psyco
psyco.full()
except ImportError:
pass
import socket
addr= ('192.168.2.89', 6325)
try:
sc= StorageClient.StorageClient()
sc.connect(addr)
except socket.error, e:
if e[0] == 10061:
print 'Es laeuft kein Server auf dem Rechner %s mit dem Port %i' % addr
elif e[0] == 11001:
print 'Zielrechner konnte nicht gefunden werden.'
else:
print e, 'unbekannter Fehler'
raw_input('BEENDEN')
exit(e[0])
username= 'A'
if not sc.login(username, 'test'):
print 'konnte nicht als %s eingeloggt werden' % username
raw_input('Mit ENTER Beenden')
exit(1)
if not os.path.isfile(pfad):
file(pfad, 'a').write('')
if not os.path.isdir(sicherungpfad):
os.makedirs(sicherungpfad)
for p_von, nach in get_pathes(pfad):
p_nach= os.path.join(nach, os.path.split(p_von)[1])
p_err_nach= os.path.join(sicherungpfad, nach + '_' + \
os.path.split(p_von)[1] + '_errors.txt')
file(p_err_nach, 'ab').write('\n\n'+'#'*10+(' Errors from %s ' % time.asctime())+'#'*10+'\n\n') # file loeschen
print 'copy\t',p_von
print 'to \t', p_nach
print 'err:\t', p_err_nach
copy(p_von, p_nach)
if not 'idlelib' in dir():
raw_input('Fertig! ')