Как отловить ошибки входа в систему с помощью PySVN?

Я новичок в Python и PySVN в целом, и я пытаюсь экспортировать свой репозиторий SVN с помощью pysvn. Вот мой код:

#set up svn login data  
def svn_credentials (realm, username, may_save):  
  return True, svn_login_name, svn_login_password, False

#establish connection  
svn_client = pysvn.Client ()  
svn_client.callback_get_login = svn_credentials

#export data  
svn_client.export('server-path-goes-here', 'client-path-goes-here', force=True)

Который отлично работает, но если пароль неверный или имя пользователя неизвестно, этот код просто сидит. Я считаю, что на стороне SVN отображается запрос на вход пользователя, но я не знаю, как проверить, что происходит с callback_get_login. Любая помощь будет принята с благодарностью.


person Geoff    schedule 12.04.2010    source источник


Ответы (2)


Если учетные данные неверны, pysvn вызовет обратный вызов, если учетные данные все еще неверны, он будет вызывать его снова и снова, и он просто будет продолжать делать это до тех пор, пока учетные данные не будут правильными.

Для автоматизированного сценария вам, вероятно, лучше не устанавливать обратный вызов, а вместо этого установить имя пользователя и пароль по умолчанию, вызвав set_default_username и set_default_password в экземпляре pysvn.Client.

При такой настройке неправильные учетные данные приведут к тому, что pysvn распространит исключение, предлагающее вам установить обратный вызов, который вы можете перехватить и превратить в осмысленное сообщение об ошибке.

person Gordon Wrigley    schedule 07.10.2010
comment
Я абсолютно НЕНАВИЖУ это о pysvn. Он не дает никакого способа обнаружить факт неудачного входа в систему. Он даже не проходит в экземпляре, так что вы можете хотя бы установить некоторые переменные состояния. - person spuriousdata; 04.09.2011
comment
Когда я set_default_username и set_default_password и удаляю callback_get_login, я получаю сообщение об ошибке callback_get_login required. Любая идея? - person umpirsky; 22.12.2011
comment
Я добился этого, установив для интерактивного флага значение False с помощью set_interactive. . В сочетании с допустимыми данными, указанными в set_default_username и set_default_password, клиент работает без подсказок. - person Shane Breatnach; 05.07.2013

Вы используете SSH? В этом случае, возможно, это SSH представляет приглашение для входа в систему, и PySVN мало что может с этим поделать. Вы можете попробовать изменить конфигурацию SSH на стороне клиента, чтобы отключить интерактивные подсказки клавиатуры:

http://www.ssh.com/support/documentation/online/ssh/adminguide/32/Configuring_the_Server_and_Client.html

person ars    schedule 13.04.2010
comment
На самом деле он обращается к Unfuddle через https, поэтому я немного ограничен в том, что я могу делать на стороне сервера (хотя вы заставили меня задуматься, стоит ли взглянуть на API Unfuddle... хм) - person Geoff; 13.04.2010
comment
@ars Извините, эта страница недоступна. - person umpirsky; 22.12.2011