class FlipCoin(pyblish.api.ContextPlugin):
def process(self, context):
if random.random() > 0.5:
raise Exception("Failed")
class ArchiveValidation(pyblish.api.ContextPlugin):
# Run after all validators have finished
order = pyblish.api.ValidatorOrder + 0.1
def process(self, context):
formatted_results = self.format_results(context)
# Compute output directory
date = datetime.datetime.today().strftime("%Y%m%d-%H%M%S")
output_dir = os.path.join(os.path.expanduser("~"), "logs")
output_path = os.path.join(output_dir, date + ".txt")
if not os.path.exists(output_dir):
with open(output_path, "w") as f:
# E.g. c:\users\marcus\Documents\logs\20150612-110000.txt
f.write(formatted_results)
# Print rather than log, as this plug-in
# won't be included in the results.
print("Outputted to: %s" % output_dir)
context.data["archiveDir"] = output_dir
def format_results(self, context):
header = "{:<10}{:<40} -> {}".format("Success", "Plug-in", "Instance")
result = "{success:<10}{plugin.__name__:<40} -> {instance}"
error = "{:<10}+-- EXCEPTION: {:<70}"
record = "{:<10}+-- {level}: {message:<70}"
for r in context.data["results"]:
results.append(result.format(**r))
results.append(record.format("", level=lr.levelname, message=lr.message))
# Format exception (if any)
results.append(error.format("", r["error"]))
results="\n".join(results),
class PlotArchive(pyblish.api.ContextPlugin):
order = pyblish.api.ValidatorOrder + 0.2
def process(self, context):
input_path = context.data["archiveDir"]
output_path = os.path.join(input_path, "graph.svg")
for fname in os.listdir(input_path)[-10:]:
abspath = os.path.join(input_path, fname)
lines = f.readlines()[2:] # Top two are headers
results.append([fname, any(line.startswith("0") for line in lines)])
chart = pygal.StackedLine(fill=True,
style=pygal.style.LightSolarizedStyle)
chart.title = 'Successful publishes over time'
chart.x_labels = [str(results.index(r)) for r in results]
chart.add("Publish", [r[1] for r in results])
chart.render_to_file(output_path)
pyblish.api.register_plugin(FlipCoin)
pyblish.api.register_plugin(ArchiveValidation)
pyblish.api.register_plugin(PlotArchive)
# Outputted to: C:\Users\marcus\logs