def _save_config_1_0(project_name, data): document = io.find_one({"type": "project"}) config = document["config"] config["apps"] = data.get("apps", []) config["tasks"] = data.get("tasks", []) config["template"].update(data.get("template", {})) schema.validate(document) io.save(document)
def _save_inventory_1_0(project_name, data): data.pop("schema") # Separate project metadata from assets metadata = {} for key, value in data.copy().items(): if not isinstance(value, list): print("Separating project metadata: %s" % key) metadata[key] = data.pop(key) document = io.find_one({"type": "project"}) if document is None: print("'%s' not found, creating.." % project_name) _id = create_project(project_name) document = io.find_one({"_id": _id}) print("Updating project data..") for key, value in metadata.items(): document["data"][key] = value io.save(document) print("Updating assets..") added = list() updated = list() missing = list() for silo, assets in data.items(): for asset in assets: asset_doc = io.find_one({ "name": asset["name"], "type": "asset", }) if asset_doc is None: asset["silo"] = silo missing.append(asset) continue for key, value in asset.items(): asset_doc["data"][key] = value if key not in asset_doc["data"]: added.append("%s.%s: %s" % (asset["name"], key, value)) elif asset_doc["data"][key] != value: updated.append("%s.%s: %s -> %s" % (asset["name"], key, asset_doc["data"][key], value)) io.save(asset_doc) for data in missing: print("+ added %s" % data["name"]) create_asset( name=data.pop("name"), silo=data.pop("silo"), data=data, parent=document["_id"] ) else: print("| nothing missing") _report(added, missing)