Merge branch 'v3.5_devel' into add_metadata_to_mothball

This commit is contained in:
int00h5525 2020-01-29 18:06:47 -06:00 committed by GitHub
commit 96734024f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 1 deletions

View File

@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- URL parameter to points.json to allow returning only the JSON for a single - URL parameter to points.json to allow returning only the JSON for a single
team by its team id (e.g., points.json?id=abc123). team by its team id (e.g., points.json?id=abc123).
- Include basic metadata in mothballs - Include basic metadata in mothballs
### Fixed
- Handle cases where non-legacy puzzles don't have an `author` attribute
- Handle YAML-formatted file and script lists as expected
- YAML-formatted example puzzle actually works as expected
## [3.4.3] - 2019-11-20 ## [3.4.3] - 2019-11-20
### Fixed ### Fixed

View File

@ -237,11 +237,39 @@ class Puzzle:
except IndexError: except IndexError:
pass pass
self.files[name] = PuzzleFile(stream, name, not hidden) self.files[name] = PuzzleFile(stream, name, not hidden)
elif key == 'files' and isinstance(val, dict):
for filename, options in val.items():
if "source" in options:
source = options["source"]
else:
source = filename
if "hidden" in options and options["hidden"]:
hidden = True
else:
hidden = False
stream = open(source, "rb")
self.files[filename] = PuzzleFile(stream, filename, not hidden)
elif key == 'files' and isinstance(val, list):
for filename in val:
stream = open(filename, "rb")
self.files[filename] = PuzzleFile(stream, filename)
elif key == 'script': elif key == 'script':
stream = open(val, 'rb') stream = open(val, 'rb')
# Make sure this shows up in the header block of the HTML output. # Make sure this shows up in the header block of the HTML output.
self.files[val] = PuzzleFile(stream, val, visible=False) self.files[val] = PuzzleFile(stream, val, visible=False)
self.scripts.append(val) self.scripts.append(val)
elif key == "scripts" and isinstance(val, list):
for script in val:
stream = open(script, "rb")
self.files[script] = PuzzleFile(stream, script, visible=False)
self.scripts.append(script)
elif key == "objective": elif key == "objective":
self.objective = val self.objective = val
elif key == "success": elif key == "success":
@ -388,7 +416,12 @@ class Puzzle:
self.body.write('</pre>') self.body.write('</pre>')
def get_authors(self): def get_authors(self):
return self.authors or [self.author] if len(self.authors) > 0:
return self.authors
elif hasattr(self, "author"):
return [self.author]
else:
return []
def get_body(self): def get_body(self):
return self.body.getvalue() return self.body.getvalue()