1# -------------------------------------------------------------------------------------------- 2# Copyright (c) Microsoft Corporation. All rights reserved. 3# Licensed under the MIT License. See License.txt in the project root for license information. 4# -------------------------------------------------------------------------------------------- 5 6from azure.cli.core.commands.validators import validate_tag 7 8 9def validate_storage_account_id(cmd, namespace): 10 """Validate storage account name""" 11 from azure.cli.core.commands.client_factory import get_subscription_id 12 from msrestazure.tools import is_valid_resource_id, resource_id 13 14 if namespace.storage_account: 15 if not is_valid_resource_id(namespace.storage_account): 16 namespace.storage_account = resource_id( 17 subscription=get_subscription_id(cmd.cli_ctx), 18 resource_group=namespace.resource_group_name, 19 namespace='Microsoft.Storage', type='storageAccounts', 20 name=namespace.storage_account 21 ) 22 23 24def datetime_format(value): 25 """Validate the correct format of a datetime string and deserialize.""" 26 from msrest.serialization import Deserializer 27 from msrest.exceptions import DeserializationError 28 29 try: 30 datetime_obj = Deserializer.deserialize_iso(value) 31 except DeserializationError: 32 message = "Argument {} is not a valid ISO-8601 datetime format" 33 raise ValueError(message.format(value)) 34 return datetime_obj 35 36 37def validate_archive_window_length(ns): 38 """Validate the correct format of a datetime string and the range.""" 39 if ns.archive_window_length is not None: 40 from msrest.serialization import Deserializer 41 from msrest.exceptions import DeserializationError 42 43 try: 44 datetime_obj = Deserializer.deserialize_duration(ns.archive_window_length) 45 except DeserializationError: 46 message = "archive-window-length {} is not a valid ISO-8601 duration format" 47 raise ValueError(message.format(ns.archive_window_length)) 48 49 minwindow = Deserializer.deserialize_duration("PT5M") 50 maxwindow = Deserializer.deserialize_duration("PT25H") 51 52 if datetime_obj < minwindow or datetime_obj > maxwindow: 53 message = "archive-window-length '{}' is not in the range of PT5M and PT25H"\ 54 .format(ns.archive_window_length) 55 raise ValueError(message) 56 57 58def validate_key_frame_interval_duration(ns): 59 """Validate the correct format of a datetime string and the range.""" 60 if ns.key_frame_interval_duration is not None: 61 from msrest.serialization import Deserializer 62 from msrest.exceptions import DeserializationError 63 64 try: 65 datetime_obj = Deserializer.deserialize_duration(ns.key_frame_interval_duration) 66 except DeserializationError: 67 message = "key-frame-interval-duration {} is not a valid ISO-8601 duration format" 68 raise ValueError(message.format(ns.key_frame_interval_duration)) 69 70 minwindow = Deserializer.deserialize_duration("PT1S") 71 maxwindow = Deserializer.deserialize_duration("PT30S") 72 73 if datetime_obj < minwindow or datetime_obj > maxwindow: 74 message = "key-frame-interval-duration '{}' is not in the range of PT1S and PT30S"\ 75 .format(ns.key_frame_interval_duration) 76 raise ValueError(message) 77 78 79def validate_correlation_data(ns): 80 """ Extracts multiple space-separated correlation data in key[=value] format """ 81 if isinstance(ns.correlation_data, list): 82 correlation_data_dict = {} 83 for item in ns.correlation_data: 84 correlation_data_dict.update(validate_tag(item)) 85 ns.correlation_data = correlation_data_dict 86 87 88def validate_token_claim(ns): 89 """ Extracts multiple space-separated token claims in key[=value] format """ 90 if isinstance(ns.token_claims, list): 91 token_claims_dict = {} 92 for item in ns.token_claims: 93 token_claims_dict.update(validate_tag(item)) 94 ns.token_claims = token_claims_dict 95 96 97def validate_output_assets(ns): 98 """ Extracts multiple space-separated output assets in key[=value] format """ 99 def _get_asset(asset_string): 100 from azure.mgmt.media.models import JobOutputAsset 101 102 name_and_label = asset_string.split('=') 103 name = name_and_label[0] 104 label = name_and_label[1] 105 return JobOutputAsset(asset_name=name, label=label) 106 107 if isinstance(ns.output_assets, list): 108 ns.output_assets = list(map(_get_asset, ns.output_assets)) 109