# -*- coding: cp1252 -*-
import os
import time
import blueplanet.client.StorageClient as StorageClient
PORT= StorageClient.PORT
# 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)'
elif 'p_err_nach' in globals():
print >> file(p_err_nach, 'ab'),'ERROR:',von, er
else:
if 'p_err_nach' in globals():
print >> file(p_err_nach, 'ab'),'ERROR:',von
except IOError, 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)
if delete_not_mentioned:
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= ('localhost', 6325)
try:
sc= StorageClient.StorageClient()
sc.connect((raw_input('IP(localhost): ') or 'localhost', int(raw_input('Port('+str(PORT)+'): ') or str(PORT))), raw_input('Password: [ENTER]'))
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'
while not sc.login(username, raw_input('Password(): ')):
print 'konnte nicht als %s eingeloggt werden' % username
username= raw_input('Username(all): ') or 'all'
while 1:
print 'copy from:'
p_von= raw_input()
print 'copy to (relative path on server)'
p_nach= raw_input()
delete_not_mentioned= (raw_input('Delete(n)? (j/n)') or 'n') == 'j'
copy(p_von, p_nach)
if (raw_input('Beenden(j)? (j/n)') or 'j') == 'j':
break