Fix filter parameter and force parameter on /api/files/<origin>
This commit is contained in:
parent
880b99faaf
commit
675a54aa05
1 changed files with 13 additions and 18 deletions
|
|
@ -63,7 +63,7 @@ def _create_lastmodified(path, recursive):
|
|||
return None
|
||||
|
||||
|
||||
def _create_etag(path, recursive, lm=None):
|
||||
def _create_etag(path, filter, recursive, lm=None):
|
||||
if lm is None:
|
||||
lm = _create_lastmodified(path, recursive)
|
||||
|
||||
|
|
@ -72,6 +72,7 @@ def _create_etag(path, recursive, lm=None):
|
|||
|
||||
hash = hashlib.sha1()
|
||||
hash.update(str(lm))
|
||||
hash.update(str(filter))
|
||||
hash.update(str(recursive))
|
||||
|
||||
if path.endswith("/files") or path.endswith("/files/sdcard"):
|
||||
|
|
@ -83,20 +84,18 @@ def _create_etag(path, recursive, lm=None):
|
|||
|
||||
@api.route("/files", methods=["GET"])
|
||||
@with_revalidation_checking(etag_factory=lambda lm=None: _create_etag(request.path,
|
||||
request.values.get("filter", False),
|
||||
request.values.get("recursive", False),
|
||||
lm=lm),
|
||||
lastmodified_factory=lambda: _create_lastmodified(request.path,
|
||||
request.values.get("recursive", False)),
|
||||
unless=lambda: request.values.get("force", False) or request.values.get("_refresh", False))
|
||||
def readGcodeFiles():
|
||||
filter = request.values.get("filter", "false") in valid_boolean_trues
|
||||
filter = request.values.get("filter", False)
|
||||
recursive = request.values.get("recursive", "false") in valid_boolean_trues
|
||||
force = request.values.get("force", "false") in valid_boolean_trues
|
||||
|
||||
if force:
|
||||
_clear_file_cache()
|
||||
|
||||
files = _getFileList(FileDestinations.LOCAL, filter=filter, recursive=recursive)
|
||||
files = _getFileList(FileDestinations.LOCAL, filter=filter, recursive=recursive, allow_from_cache=not force)
|
||||
files.extend(_getFileList(FileDestinations.SDCARD))
|
||||
|
||||
usage = psutil.disk_usage(settings().getBaseFolder("uploads"))
|
||||
|
|
@ -105,6 +104,7 @@ def readGcodeFiles():
|
|||
|
||||
@api.route("/files/<string:origin>", methods=["GET"])
|
||||
@with_revalidation_checking(etag_factory=lambda lm=None: _create_etag(request.path,
|
||||
request.values.get("filter", False),
|
||||
request.values.get("recursive", False),
|
||||
lm=lm),
|
||||
lastmodified_factory=lambda: _create_lastmodified(request.path,
|
||||
|
|
@ -114,17 +114,11 @@ def readGcodeFilesForOrigin(origin):
|
|||
if origin not in [FileDestinations.LOCAL, FileDestinations.SDCARD]:
|
||||
return make_response("Unknown origin: %s" % origin, 404)
|
||||
|
||||
filter = request.values.get("filter", False)
|
||||
recursive = request.values.get("recursive", "false") in valid_boolean_trues
|
||||
force = request.values.get("force", "false") in valid_boolean_trues
|
||||
|
||||
if force:
|
||||
with _file_cache_mutex:
|
||||
try:
|
||||
del _file_cache[origin]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
files = _getFileList(origin, recursive=recursive)
|
||||
files = _getFileList(origin, filter=filter, recursive=recursive, allow_from_cache=not force)
|
||||
|
||||
if origin == FileDestinations.LOCAL:
|
||||
usage = psutil.disk_usage(settings().getBaseFolder("uploads"))
|
||||
|
|
@ -144,7 +138,7 @@ def _getFileDetails(origin, path, recursive=True):
|
|||
return None
|
||||
|
||||
|
||||
def _getFileList(origin, path=None, filter=None, recursive=False):
|
||||
def _getFileList(origin, path=None, filter=None, recursive=False, allow_from_cache=True):
|
||||
if origin == FileDestinations.SDCARD:
|
||||
sdFileList = printer.get_sd_files()
|
||||
|
||||
|
|
@ -169,11 +163,12 @@ def _getFileList(origin, path=None, filter=None, recursive=False):
|
|||
filter_func = lambda entry, entry_data: octoprint.filemanager.valid_file_type(entry, type=filter)
|
||||
|
||||
with _file_cache_mutex:
|
||||
files, lastmodified = _file_cache.get("{}:{}:{}:{}".format(origin, path, recursive, filter), ([], None))
|
||||
if lastmodified is None or lastmodified < fileManager.last_modified(origin, path=path, recursive=recursive):
|
||||
cache_key = "{}:{}:{}:{}".format(origin, path, recursive, filter)
|
||||
files, lastmodified = _file_cache.get(cache_key, ([], None))
|
||||
if not allow_from_cache or lastmodified is None or lastmodified < fileManager.last_modified(origin, path=path, recursive=recursive):
|
||||
files = fileManager.list_files(origin, path=path, filter=filter_func, recursive=recursive)[origin].values()
|
||||
lastmodified = fileManager.last_modified(origin, path=path, recursive=recursive)
|
||||
_file_cache["{}:{}:{}:{}".format(origin, path, recursive, filter)] = (files, lastmodified)
|
||||
_file_cache[cache_key] = (files, lastmodified)
|
||||
|
||||
def analyse_recursively(files, path=None):
|
||||
if path is None:
|
||||
|
|
|
|||
Loading…
Reference in a new issue