+ # Process any tags
+ puzzle['tags'] = []
+ if tags:
+ for tag in tags.split(','):
+ # Drop any leading/trailing spaces from the tag
+ tag = tag.strip().upper()
+ # Ignore any empty string
+ if not len(tag):
+ continue
+ # Reject a tag that is not alphabetic or underscore A-Z_
+ if not re.match(r'^[A-Z0-9_]*$', tag):
+ return submission_error(
+ "tags",
+ "Error: Tags can only contain letters, numbers, "
+ + "and the underscore character."
+ )
+ puzzle['tags'].append(tag)
+