Skip to content

Commit d1006df

Browse files
committed
Add itemlinks validator
1 parent d913e87 commit d1006df

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/moin/storage/middleware/indexing.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright: 2011 MoinMoin:RonnyPfannschmidt
22
# Copyright: 2011 MoinMoin:ThomasWaldmann
33
# Copyright: 2011 MoinMoin:MichaelMayorov
4+
# Copyright: 2024 MoinMoin:UlrichB
45
# License: GNU GPL v2 (or any later version), see LICENSE.txt for details.
56

67
"""
@@ -1241,10 +1242,10 @@ def store_revision(
12411242
logging.warning("data validation skipped because metadata is invalid, see below")
12421243
val = []
12431244
for e in m.children:
1244-
if e.name == "subscriptions":
1245-
for sub in e.children:
1246-
if sub.valid is False:
1247-
val.append(f'"{str(sub)}". {str(sub.errors[0])}')
1245+
if e.name in ["itemlinks", "subscriptions"]:
1246+
for child in e.children:
1247+
if child.valid is False:
1248+
val.append(f'"{str(child)}". {str(child.errors[0])}')
12481249
e.valid = False
12491250
elif e.valid is False:
12501251
val.append(str(e))

src/moin/storage/middleware/validation.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Copyright: 2011,2012 MoinMoin:ThomasWaldmann
2+
# Copyright: 2024 MoinMoin:UlrichB
23
# License: GNU GPL v2 (or any later version), see LICENSE.txt for details.
34

45
"""
@@ -110,6 +111,23 @@ def name_validator(element, state):
110111
return True
111112

112113

114+
def itemlink_validator(element, state):
115+
"""an itemlink"""
116+
if element.raw is Unset:
117+
element.set(state[keys.NAME])
118+
v = element.value
119+
if not isinstance(v, str):
120+
return False
121+
if v != v.strip():
122+
return False
123+
if v.startswith("/") or v.endswith("/"):
124+
element.add_error("Itemlink may not start or end with '/'.")
125+
return False
126+
if "//" in v: # empty ancestor name is invalid
127+
return False
128+
return True
129+
130+
113131
def tag_validator(element, state):
114132
"""
115133
a tag
@@ -395,7 +413,7 @@ def subscription_validator(element, state):
395413
String.named(keys.HASH_ALGORITHM).validated_by(hash_validator),
396414
String.named(keys.DATAID).validated_by(uuid_validator).using(optional=True),
397415
# markup items may have this:
398-
List.named(keys.ITEMLINKS).of(String.named("itemlink").validated_by(wikiname_validator)).using(optional=True),
416+
List.named(keys.ITEMLINKS).of(String.named("itemlink").validated_by(itemlink_validator)).using(optional=True),
399417
List.named(keys.ITEMTRANSCLUSIONS)
400418
.of(String.named("itemtransclusion").validated_by(wikiname_validator))
401419
.using(optional=True),

0 commit comments

Comments
 (0)