+
+SSHURL = collections.namedtuple("SSHURL", "user host path")
+
+def parse_ssh_url(url):
+ """Parse scp-style username, host and path.
+ """
+ # simple initialization
+ user = None
+ host = None
+ path = None
+
+ colon = url.find(':')
+ if colon == -1:
+ raise ValueError("Invalid SSH URL: need <host>:<path>")
+
+ path = url[colon+1:]
+
+ user_host = url[:colon]
+ atsign = user_host.find('@')
+ if atsign != -1:
+ user = user_host[:atsign]
+ host = user_host[atsign+1:]
+ else:
+ host = user_host
+
+ return SSHURL(user, host, path)
+