mirror of https://github.com/dirtbags/moth.git
Merge branch 'v3.5_devel' into add_metadata_to_mothball
This commit is contained in:
commit
96734024f4
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue