bot/config.py (30 lines of code) (raw):
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License;
# you may not use this file except in compliance with the Elastic License.
import yaml
import semver
import assets
def flatten(tracked_packages):
if type(tracked_packages) is not list:
tracked_packages = [tracked_packages]
flattened = {}
for tracked_package in tracked_packages:
if type(tracked_package) is str:
tracked_package = {tracked_package: None}
for name, package in tracked_package.items():
flattened[name] = package or {}
return flattened
def validate(config):
tracked_packages = flatten(config.get("tracked-packages", {}))
config["tracked-packages"] = tracked_packages
for name, package in tracked_packages.items():
branches = package.get("branches", None)
if not branches:
package["branches"] = assets.branches
elif type(branches) is str:
package["branches"] = [x.strip() for x in branches.split(",")]
minimum_version = package.get("minimum-version", None)
if minimum_version:
v = (str(minimum_version).split(".") + [0, 0, 0])[:3]
package["minimum-version"] = semver.VersionInfo(*v)
return config
def load(filename):
with open(filename) as f:
return validate(yaml.safe_load(f))