def process(self, pyfile):
p_url = urlparse.urlparse(pyfile.url)
netloc = p_url.netloc
pyfile.name = parse_name(p_url.path.rpartition('/')[2])
if not "@" in netloc:
#@TODO: Recheck in 0.4.10
if self.account:
servers = [x['login'] for x in self.account.getAllAccounts()]
else:
servers = []
if netloc in servers:
self.log_debug("Logging on to %s" % netloc)
self.req.addAuth(self.account.get_login('password'))
else:
pwd = self.get_password()
if ':' in pwd:
self.log_debug("Logging on to %s" % netloc)
self.req.addAuth(pwd)
else:
self.log_debug("Using anonymous logon")
try:
headers = self.load(pyfile.url, just_header=True)
except pycurl.error, e:
if "530" in e.args[1]:
self.fail(_("Authorization required"))
else:
self.fail(_("Error %d: %s") % e.args)
self.req.http.c.setopt(pycurl.NOBODY, 0)
self.log_debug(self.req.http.header)
if "content-length" in headers:
pyfile.size = headers.get("content-length")
self.download(pyfile.url)
else:
#: Naive ftp directory listing
if re.search(r'^25\d.*?"', self.req.http.header, re.M):
pyfile.url = pyfile.url.rstrip('/')
pkgname = "/".join([pyfile.package().name,
urlparse.urlparse(pyfile.url).path.rpartition('/')[2]])
pyfile.url += '/'
self.req.http.c.setopt(48, 1) #: CURLOPT_DIRLISTONLY
res = self.load(pyfile.url, decode=False)
links = [pyfile.url + x for x in res.splitlines()]
self.log_debug("LINKS", links)
self.pyload.api.addPackage(pkgname, links)
else:
self.fail(_("Unexpected server response"))
评论列表
文章目录