def fetch(self):
urlp = urllib.parse.urlparse(self.url)
lastupd = self.status.load()
old_entries = lastupd.get('entries')
fetch_time = int(time.time())
with ftputil.FTPHost(urlp.hostname, urlp.username or 'anonymous', urlp.password) as host:
try:
st_mtime = host.lstat(urlp.path.rstrip('/')).st_mtime
except ftputil.error.RootDirError:
st_mtime = None
if st_mtime and st_mtime == lastupd.get('mtime'):
return
else:
lastupd['mtime'] = st_mtime
entries = sorted(x for x in host.listdir(urlp.path) if
(not self.regex or self.regex.search(x)))
lastupd['entries'] = entries
self.status = self.status.save(fetch_time, lastupd)
if not old_entries or entries == old_entries:
return
else:
diff = tuple(difflib.unified_diff(old_entries, entries, lineterm=''))
title = 'FTP directory changed'
for text in diff[2:]:
if text[0] == '+':
title = text[1:]
break
content = (markupsafe.Markup('<pre>%s</pre>') % '\n'.join(diff[2:]))
yield Event(self.name, self.category,
lastupd.get('mtime') or fetch_time, title, content, self.url)
评论列表
文章目录