summaryrefslogtreecommitdiffstats
path: root/python/mozrelease/mozrelease/balrog.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozrelease/mozrelease/balrog.py')
-rw-r--r--python/mozrelease/mozrelease/balrog.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/python/mozrelease/mozrelease/balrog.py b/python/mozrelease/mozrelease/balrog.py
new file mode 100644
index 0000000000..31418d352e
--- /dev/null
+++ b/python/mozrelease/mozrelease/balrog.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+def _generate_show_url(context, entry):
+ url = entry["url"]
+ return {
+ "actions": "showURL",
+ "openURL": url.format(**context),
+ }
+
+
+def _generate_product_details(context, entry):
+ url = entry["url"]
+ return {
+ "detailsURL": url.format(**context),
+ "type": "minor",
+ }
+
+
+_FIELD_TYPES = {
+ "show-url": _generate_show_url,
+ "product-details": _generate_product_details,
+}
+
+
+def _generate_conditions(context, entry):
+ if (
+ "release-types" in entry
+ and context["release-type"] not in entry["release-types"]
+ ):
+ return None
+ if "blob-types" in entry and context["blob-type"] not in entry["blob-types"]:
+ return None
+ if "products" in entry and context["product"] not in entry["products"]:
+ return None
+
+ conditions = {}
+ if "locales" in entry:
+ conditions["locales"] = entry["locales"]
+ if "versions" in entry:
+ conditions["versions"] = [
+ version.format(**context) for version in entry["versions"]
+ ]
+ if "update-channel" in entry:
+ conditions["channels"] = [
+ entry["update-channel"] + suffix
+ for suffix in ("", "-localtest", "-cdntest")
+ ]
+ if "build-ids" in entry:
+ conditions["buildIDs"] = [
+ buildid.format(**context) for buildid in entry["build-ids"]
+ ]
+ return conditions
+
+
+def generate_update_properties(context, config):
+ result = []
+ for entry in config:
+ fields = _FIELD_TYPES[entry["type"]](context, entry)
+ conditions = _generate_conditions(context, entry.get("conditions", {}))
+
+ if conditions is not None:
+ result.append(
+ {
+ "fields": fields,
+ "for": conditions,
+ }
+ )
+ return result