Старый вопрос, но решение, которое я придумал, работает довольно хорошо, это немного небрежно (typecasting и slashes и все), но он работает.
Обратите внимание, что это использует fabric.api.local
, чтобы сделать каталоги в месте назначения.
def sftp_get_recursive (путь, dest, sftp = sftp): item_list = sftp.listdir (path) dest = str (dest), если не os.path.isdir (dest): local ("mkdir% s"% dest) для item в item_list: item = str (item) if is_directory (путь + "/" + item, sftp): sftp_get_recursive (path + "/" + item, dest + "/" + item, sftp) else: sftp.get (путь + "/" + item, dest + "/" + item)
UPDATE. Следующий ответ больше не работает, я полагаю, это связано с обновлением API карт Google. Я оставляю код здесь для справки.
Благодаря комментариям geocodezip я изменил решение Майка Уильямса для моего случая.
Соответствующая часть кода:
google.maps.event.addListener(map, 'center_changed', function() {
checkBounds(map);
});
// If the map position is out of range, move it back
function checkBounds(map) {
var latNorth = map.getBounds().getNorthEast().lat();
var latSouth = map.getBounds().getSouthWest().lat();
var newLat;
if(latNorth<85 && latSouth>-85) /* in both side -> it's ok */
return;
else {
if(latNorth>85 && latSouth<-85) /* out both side -> it's ok */
return;
else {
if(latNorth>85)
newLat = map.getCenter().lat() - (latNorth-85); /* too north, centering */
if(latSouth<-85)
newLat = map.getCenter().lat() - (latSouth+85); /* too south, centering */
}
}
if(newLat) {
var newCenter= new google.maps.LatLng( newLat ,map.getCenter().lng() );
map.setCenter(newCenter);
}
}