Skip to content

Commit

Permalink
Merge pull request #1520 from pbiering/skip-broken-item
Browse files Browse the repository at this point in the history
add option to skip broken item instead of throwing an exception
  • Loading branch information
pbiering authored Jun 9, 2024
2 parents 518de6b + 0cf8ede commit fe630b4
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 5 deletions.
6 changes: 6 additions & 0 deletions DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -865,6 +865,12 @@ Delete sync-token that are older than the specified time. (seconds)

Default: `2592000`

#### skip_broken_item

Skip broken item instead of triggering an exception

Default: False

##### hook

Command that is run after changes to storage. Take a look at the
Expand Down
5 changes: 4 additions & 1 deletion config
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@
# Delete sync token that are older (seconds)
#max_sync_token_age = 2592000

# Skip broken item instead of triggering an exception
#skip_broken_item = False

# Command that is run after changes to storage
# Example: ([ -d .git ] || git init) && git add -A && (git diff --cached --quiet || git commit -m "Changes by \"%(user)s\"")
#hook =
Expand Down Expand Up @@ -139,4 +142,4 @@
#type = none
#rabbitmq_endpoint =
#rabbitmq_topic =
#rabbitmq_queue_type = classic
#rabbitmq_queue_type = classic
4 changes: 4 additions & 0 deletions radicale/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,10 @@ def _convert_to_bool(value: Any) -> bool:
"value": "2592000", # 30 days
"help": "delete sync token that are older",
"type": positive_int}),
("skip_broken_item", {
"value": "False",
"help": "skip broken item instead of triggering exception",
"type": bool}),
("hook", {
"value": "",
"help": "command that is run after changes to storage",
Expand Down
4 changes: 3 additions & 1 deletion radicale/storage/multifilesystem/base.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# This file is part of Radicale - CalDAV and CardDAV server
# Copyright © 2014 Jean-Marc Martins
# Copyright © 2012-2017 Guillaume Ayoub
# Copyright © 2017-2019 Unrud <[email protected]>
# Copyright © 2017-2022 Unrud <[email protected]>
# Copyright © 2024-2024 Peter Bieringer <[email protected]>
#
# This library is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -40,6 +41,7 @@ def __init__(self, storage_: "multifilesystem.Storage", path: str,
# Path should already be sanitized
self._path = pathutils.strip_path(path)
self._encoding = storage_.configuration.get("encoding", "stock")
self._skip_broken_item = storage_.configuration.get("storage", "skip_broken_item")
if filesystem_path is None:
filesystem_path = pathutils.path_to_filesystem(folder, self.path)
self._filesystem_path = filesystem_path
Expand Down
11 changes: 8 additions & 3 deletions radicale/storage/multifilesystem/get.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# This file is part of Radicale - CalDAV and CardDAV server
# Copyright © 2014 Jean-Marc Martins
# Copyright © 2012-2017 Guillaume Ayoub
# Copyright © 2017-2018 Unrud <[email protected]>
# Copyright © 2017-2022 Unrud <[email protected]>
# Copyright © 2024-2024 Peter Bieringer <[email protected]>
#
# This library is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -101,8 +102,12 @@ def _get(self, href: str, verify_href: bool = True
cache_content = self._store_item_cache(
href, temp_item, cache_hash)
except Exception as e:
raise RuntimeError("Failed to load item %r in %r: %s" %
(href, self.path, e)) from e
if self._skip_broken_item:
logger.warning("Skip broken item %r in %r: %s", href, self.path, e)
return None
else:
raise RuntimeError("Failed to load item %r in %r: %s" %
(href, self.path, e)) from e
# Clean cache entries once after the data in the file
# system was edited externally.
if not self._item_cache_cleaned:
Expand Down

0 comments on commit fe630b4

Please sign in to comment.