Add basic metadata to compiled mothballs and devel server

This commit is contained in:
John Donaldson 2020-01-29 23:55:10 +00:00
parent 8809580355
commit 89d5c7094c
5 changed files with 28 additions and 0 deletions

View File

@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- 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
## [3.4.3] - 2019-11-20 ## [3.4.3] - 2019-11-20
### Fixed ### Fixed

View File

@ -16,6 +16,7 @@ RUN apk --no-cache add \
COPY devel /app/ COPY devel /app/
COPY example-puzzles /puzzles/ COPY example-puzzles /puzzles/
COPY theme /theme/ COPY theme /theme/
COPY VERSION /VERSION
ENTRYPOINT [ "python3", "/app/devel-server.py" ] ENTRYPOINT [ "python3", "/app/devel-server.py" ]
CMD [ "--bind", "0.0.0.0:8080", "--puzzles", "/puzzles", "--theme", "/theme" ] CMD [ "--bind", "0.0.0.0:8080", "--puzzles", "/puzzles", "--theme", "/theme" ]

View File

@ -118,6 +118,7 @@ class MothRequestHandler(http.server.SimpleHTTPRequestHandler):
obj["hint"] = puzzle.hint obj["hint"] = puzzle.hint
obj["summary"] = puzzle.summary obj["summary"] = puzzle.summary
obj["logs"] = puzzle.logs obj["logs"] = puzzle.logs
obj["format"] = puzzle._source_format
self.send_response(200) self.send_response(200)
self.send_header("Content-Type", "application/json") self.send_header("Content-Type", "application/json")

View File

@ -123,6 +123,8 @@ class Puzzle:
super().__init__() super().__init__()
self._source_format = "py"
self.points = points self.points = points
self.summary = None self.summary = None
self.authors = [] self.authors = []
@ -153,8 +155,10 @@ class Puzzle:
line = "" line = ""
if stream.read(3) == "---": if stream.read(3) == "---":
header = "yaml" header = "yaml"
self._source_format = "yaml"
else: else:
header = "moth" header = "moth"
self._source_format = "moth"
stream.seek(0) stream.seek(0)

View File

@ -2,12 +2,14 @@
import argparse import argparse
import binascii import binascii
import datetime
import hashlib import hashlib
import io import io
import json import json
import logging import logging
import moth import moth
import os import os
import platform
import shutil import shutil
import tempfile import tempfile
import zipfile import zipfile
@ -61,6 +63,24 @@ def build_category(categorydir, outdir):
zipfileraw.close() zipfileraw.close()
shutil.move(zipfileraw.name, zipfilename) 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 # Returns a file-like object containing the contents of the new zip file
def package(categoryname, categorydir, seed): 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, 'map.txt', mapping)
write_kv_pairs(zf, 'answers.txt', answers) write_kv_pairs(zf, 'answers.txt', answers)
write_kv_pairs(zf, 'summaries.txt', summary) write_kv_pairs(zf, 'summaries.txt', summary)
write_metadata(zf, cat)
# clean up # clean up
zf.close() zf.close()