Modify checkfiles to use optionalRemove, optionalDownloaded and isDownloadable functions

This commit is contained in:
shortcutme 2016-11-07 23:46:54 +01:00
parent cb5b3884cd
commit 9765afc286

View file

@ -20,7 +20,7 @@ class SiteStorage(object):
def __init__(self, site, allow_create=True): def __init__(self, site, allow_create=True):
self.site = site self.site = site
self.directory = "%s/%s" % (config.data_dir, self.site.address) # Site data diretory self.directory = "%s/%s" % (config.data_dir, self.site.address) # Site data diretory
self.allowed_dir = os.path.abspath(self.directory.decode(sys.getfilesystemencoding())) # Only serve/modify file within this dir self.allowed_dir = os.path.abspath(self.directory.decode(sys.getfilesystemencoding())) # Only serve file within this dir
self.log = site.log self.log = site.log
self.db = None # Db class self.db = None # Db class
self.db_checked = False # Checked db tables since startup self.db_checked = False # Checked db tables since startup
@ -329,11 +329,13 @@ class SiteStorage(object):
optional_added = 0 optional_added = 0
optional_removed = 0 optional_removed = 0
for file_relative_path in content.get("files_optional", {}).keys(): for file_relative_path in content.get("files_optional", {}).keys():
file_node = content["files_optional"][file_relative_path]
file_inner_path = helper.getDirname(content_inner_path) + file_relative_path # Relative to site dir file_inner_path = helper.getDirname(content_inner_path) + file_relative_path # Relative to site dir
file_inner_path = file_inner_path.strip("/") # Strip leading / file_inner_path = file_inner_path.strip("/") # Strip leading /
file_path = self.getPath(file_inner_path) file_path = self.getPath(file_inner_path)
if not os.path.isfile(file_path): if not os.path.isfile(file_path):
self.site.content_manager.hashfield.removeHash(content["files_optional"][file_relative_path]["sha512"]) if self.site.content_manager.hashfield.hasHash(file_node["sha512"]):
self.site.content_manager.optionalRemove(file_inner_path, file_node["sha512"], file_node["size"])
if add_optional: if add_optional:
bad_files.append(file_inner_path) bad_files.append(file_inner_path)
continue continue
@ -344,19 +346,20 @@ class SiteStorage(object):
ok = self.site.content_manager.verifyFile(file_inner_path, open(file_path, "rb")) ok = self.site.content_manager.verifyFile(file_inner_path, open(file_path, "rb"))
if ok: if ok:
self.site.content_manager.hashfield.appendHash(content["files_optional"][file_relative_path]["sha512"]) if not self.site.content_manager.hashfield.hasHash(file_node["sha512"]):
self.site.content_manager.optionalDownloaded(file_inner_path, file_node["sha512"], file_node["size"])
optional_added += 1 optional_added += 1
else: else:
self.site.content_manager.hashfield.removeHash(content["files_optional"][file_relative_path]["sha512"]) if self.site.content_manager.hashfield.hasHash(file_node["sha512"]):
self.site.content_manager.optionalRemove(file_inner_path, file_node["sha512"], file_node["size"])
optional_removed += 1 optional_removed += 1
if add_optional:
bad_files.append(file_inner_path) bad_files.append(file_inner_path)
self.log.debug("[OPTIONAL CHANGED] %s" % file_inner_path) self.log.debug("[OPTIONAL CHANGED] %s" % file_inner_path)
if config.verbose: if config.verbose:
self.log.debug( self.log.debug(
"%s verified: %s, quick: %s, bad: %s, optionals: +%s -%s" % "%s verified: %s, quick: %s, optionals: +%s -%s" %
(content_inner_path, len(content["files"]), quick_check, bad_files, optional_added, optional_removed) (content_inner_path, len(content["files"]), quick_check, optional_added, optional_removed)
) )
time.sleep(0.0001) # Context switch to avoid gevent hangs time.sleep(0.0001) # Context switch to avoid gevent hangs
@ -367,7 +370,7 @@ class SiteStorage(object):
s = time.time() s = time.time()
bad_files = self.verifyFiles( bad_files = self.verifyFiles(
quick_check, quick_check,
add_optional=self.site.settings.get("autodownloadoptional"), add_optional=self.site.isDownloadable(""),
add_changed=not self.site.settings.get("own") # Don't overwrite changed files if site owned add_changed=not self.site.settings.get("own") # Don't overwrite changed files if site owned
) )
self.site.bad_files = {} self.site.bad_files = {}
@ -392,7 +395,6 @@ class SiteStorage(object):
file_inner_path = helper.getDirname(content_inner_path) + file_relative_path # Relative to site dir file_inner_path = helper.getDirname(content_inner_path) + file_relative_path # Relative to site dir
files.append(file_inner_path) files.append(file_inner_path)
if self.isFile("dbschema.json"): if self.isFile("dbschema.json"):
self.log.debug("Deleting db file...") self.log.debug("Deleting db file...")
self.closeDb() self.closeDb()