mirror of https://github.com/dirtbags/moth.git
Merge pull request #128 from dirtbags/add_metadata_to_mothball
Add basic metadata to compiled mothballs and devel server
This commit is contained in:
commit
333f728e2a
|
@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
### Added
|
||||
- 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).
|
||||
- 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
|
||||
|
|
|
@ -16,6 +16,7 @@ RUN apk --no-cache add \
|
|||
COPY devel /app/
|
||||
COPY example-puzzles /puzzles/
|
||||
COPY theme /theme/
|
||||
COPY VERSION /VERSION
|
||||
|
||||
ENTRYPOINT [ "python3", "/app/devel-server.py" ]
|
||||
CMD [ "--bind", "0.0.0.0:8080", "--puzzles", "/puzzles", "--theme", "/theme" ]
|
||||
|
|
|
@ -118,6 +118,7 @@ class MothRequestHandler(http.server.SimpleHTTPRequestHandler):
|
|||
obj["hint"] = puzzle.hint
|
||||
obj["summary"] = puzzle.summary
|
||||
obj["logs"] = puzzle.logs
|
||||
obj["format"] = puzzle._source_format
|
||||
|
||||
self.send_response(200)
|
||||
self.send_header("Content-Type", "application/json")
|
||||
|
|
|
@ -123,6 +123,8 @@ class Puzzle:
|
|||
|
||||
super().__init__()
|
||||
|
||||
self._source_format = "py"
|
||||
|
||||
self.points = points
|
||||
self.summary = None
|
||||
self.authors = []
|
||||
|
@ -153,8 +155,10 @@ class Puzzle:
|
|||
line = ""
|
||||
if stream.read(3) == "---":
|
||||
header = "yaml"
|
||||
self._source_format = "yaml"
|
||||
else:
|
||||
header = "moth"
|
||||
self._source_format = "moth"
|
||||
|
||||
stream.seek(0)
|
||||
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
|
||||
import argparse
|
||||
import binascii
|
||||
import datetime
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import logging
|
||||
import moth
|
||||
import os
|
||||
import platform
|
||||
import shutil
|
||||
import tempfile
|
||||
import zipfile
|
||||
|
@ -61,6 +63,24 @@ def build_category(categorydir, outdir):
|
|||
zipfileraw.close()
|
||||
shutil.move(zipfileraw.name, zipfilename)
|
||||
|
||||
def write_metadata(ziphandle, category):
|
||||
metadata = {"platform": {}, "moth": {}, "category": {}}
|
||||
|
||||
try:
|
||||
with open("../VERSION", "r") as infile:
|
||||
version = infile.read().strip()
|
||||
metadata["moth"]["version"] = version
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
metadata["category"]["build_time"] = datetime.datetime.now().strftime("%c")
|
||||
metadata["category"]["type"] = "catmod" if category.catmod is not None else "traditional"
|
||||
metadata["platform"]["arch"] = platform.machine()
|
||||
metadata["platform"]["os"] = platform.system()
|
||||
metadata["platform"]["version"] = platform.platform()
|
||||
metadata["platform"]["python_version"] = platform.python_version()
|
||||
|
||||
ziphandle.writestr("meta.json", json.dumps(metadata))
|
||||
|
||||
# Returns a file-like object containing the contents of the new zip file
|
||||
def package(categoryname, categorydir, seed):
|
||||
|
@ -94,6 +114,7 @@ def package(categoryname, categorydir, seed):
|
|||
write_kv_pairs(zf, 'map.txt', mapping)
|
||||
write_kv_pairs(zf, 'answers.txt', answers)
|
||||
write_kv_pairs(zf, 'summaries.txt', summary)
|
||||
write_metadata(zf, cat)
|
||||
|
||||
# clean up
|
||||
zf.close()
|
||||
|
|
Loading…
Reference in New Issue