in tools/AduCmdlets-py/scripts/aduupdate.py [0:0]
def __init__(self, update_id: update_id, compatibility_infos: list[compatibility_info], installation_steps: list[installation_step], is_deployable: bool = True, description: str = None) -> None:
if description is not None and len(description) > 512:
raise ValueError(f'Description {description} is not valid')
if len(installation_steps) < 1 or len(installation_steps) > 10:
raise ValueError(
f'Invalid number of installation steps (must be 1-10)')
file_metadatas = []
for step in installation_steps:
if type(step) is inline_installation_step:
if len(step.files) < 1 or len(step.files) > 10:
raise ValueError(
'Invalid number of files specified for step (must be 1-10)')
for file in step.files:
# Note: step.files are full pathnames, not just filenames
meta = get_file_metadata(file_path=file)
basename = os.path.basename(file)
# In case multiple steps are sharing a payload file.
if not any(fm['filename'] == basename for fm in file_metadatas):
file_metadatas.append(meta)
if len(file_metadatas) > 10:
raise ValueError('Invalid number of payload files (must be <=10)')
self.import_manifest = {
'updateId': update_id.__dict__,
'isDeployable': is_deployable,
'compatibility': compatibility_infos,
'createdDateTime': datetime.datetime.utcnow().isoformat(),
'manifestVersion': '4.0'
}
self.import_manifest['instructions'] = {
"steps": [step.as_dict() for step in installation_steps]
}
if description is not None:
self.import_manifest['description'] = description
if len(file_metadatas) > 0:
self.import_manifest['files'] = file_metadatas