Вероятно здесь нам впарили не работающий код
(Мне все больше нравится Tryton!!!! - почти такая-же реализация)
Посмотрев различие реализации исправил ошибку... так!
./service/web_services.py
функция def dump
Code:
def dump(self, password, db_name):
.....
cmd.append(db_name) <- после этой строки вставить
pipe = tools.exec_pg_command_pipe1(*tuple(cmd))
pipe.stdin.close()
data = pipe.stdout.read()
res = pipe.wait()
# Ниже код закомментировать как показано
# stdin, stdout = tools.exec_pg_command_pipe(*tuple(cmd))
# stdin.close()
# data = stdout.read()
# res = stdout.close()
функция def restore
Code:
def restore(self, password, db_name, data):
....
args2=tuple(args2) <- после этой строки вставить
pipe = tools.exec_pg_command_pipe1(*args2)
if not os.name == "nt":
pipe.stdin.write(base64.decodestring(data))
pipe.stdin.close()
res = pipe.wait()
# Остальное закомментировать как показано
# stdin, stdout = tools.exec_pg_command_pipe(*args2)
# if not os.name == "nt":
# stdin.write(base64.decodestring(data))
# stdin.close()
# res = stdout.close()
а теперь сама функция tools.exec_pg_command_pipe1
файл находится в ./tools/misc.py
# Это нужно вставить в начале файла
import subprocess
# а это можно возле родной функции скопировать exec_pg_command_pipe
Code:
def exec_pg_command_pipe1(name, *args):
prog = find_pg_tool(name)
if not prog:
raise Exception('Couldn\'t find %s' % name)
if os.name == "nt":
cmd = '"' + prog + '" ' + ' '.join(args)
else:
cmd = prog + ' ' + ' '.join(args)
# if db_password is set in configuration we should pass
# an environment variable PGPASSWORD to our subprocess
# see libpg documentation
child_env = dict(os.environ)
if config['db_password']:
child_env['PGPASSWORD'] = config['db_password']
pipe = subprocess.Popen(cmd, shell=True,
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
close_fds=True,
env=child_env)
return pipe
И о чудо база сохраняется и восстанавливается!!!