Hello community, here is the log from the commit of package azure-cli-ams for openSUSE:Factory checked in at 2019-10-31 18:15:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/azure-cli-ams (Old) and /work/SRC/openSUSE:Factory/.azure-cli-ams.new.2990 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "azure-cli-ams" Thu Oct 31 18:15:05 2019 rev:4 rq:742670 version:0.4.7 Changes: -------- --- /work/SRC/openSUSE:Factory/azure-cli-ams/azure-cli-ams.changes 2019-06-05 11:41:34.275059947 +0200 +++ /work/SRC/openSUSE:Factory/.azure-cli-ams.new.2990/azure-cli-ams.changes 2019-10-31 18:15:07.222002134 +0100 @@ -1,0 +2,9 @@ +Thu Oct 24 12:08:31 UTC 2019 - John Paul Adrian Glaubitz <[email protected]> + +- New upstream release + + Version 0.4.7 + + For detailed information about changes see the + HISTORY.txt file provided with this package +- Update Requires from setup.py + +------------------------------------------------------------------- Old: ---- azure-cli-ams-0.4.1.tar.gz New: ---- azure-cli-ams-0.4.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ azure-cli-ams.spec ++++++ --- /var/tmp/diff_new_pack.scESLQ/_old 2019-10-31 18:15:08.394003347 +0100 +++ /var/tmp/diff_new_pack.scESLQ/_new 2019-10-31 18:15:08.394003347 +0100 @@ -17,7 +17,7 @@ Name: azure-cli-ams -Version: 0.4.1 +Version: 0.4.7 Release: 0 Summary: Microsoft Azure CLI 'ams' Command Module License: MIT @@ -33,8 +33,8 @@ Requires: azure-cli-command-modules-nspkg Requires: azure-cli-core Requires: azure-cli-nspkg -Requires: python3-azure-graphrbac >= 0.53.0 -Requires: python3-azure-mgmt-media >= 1.0.1 +Requires: python3-azure-graphrbac >= 0.60.0 +Requires: python3-azure-mgmt-media >= 1.1.1 Requires: python3-azure-nspkg >= 3.0.0 Conflicts: azure-cli < 2.0.0 ++++++ azure-cli-ams-0.4.1.tar.gz -> azure-cli-ams-0.4.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/HISTORY.rst new/azure-cli-ams-0.4.7/HISTORY.rst --- old/azure-cli-ams-0.4.1/HISTORY.rst 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/HISTORY.rst 2019-06-13 23:17:46.000000000 +0200 @@ -2,6 +2,29 @@ Release History =============== +0.4.7 ++++++ +* Return ISO 8601 time strings for archive-window-length and key-frame-interval-duration. + +0.4.6 ++++++ +* Minor fixes. + +0.4.5 ++++++ +* Bug fix for asset and account filters update. + +0.4.4 ++++++ +* The `account-filter` and `asset-filter` parameter `--bitrate` has been deprecated and will be removed in a future release. + It has been renamed to `--first-quality`. +* New encryption parameters support in `ams streaming-policy create` command added. +* New paramter `filters` added to ams streaming-locator create. + +0.4.3 ++++++ +* Minor fixes. + 0.4.1 +++++ * ams streaming-endpoint [start | stop | create | update] : added 'wait' command diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/PKG-INFO new/azure-cli-ams-0.4.7/PKG-INFO --- old/azure-cli-ams-0.4.1/PKG-INFO 2019-02-12 03:05:55.000000000 +0100 +++ new/azure-cli-ams-0.4.7/PKG-INFO 2019-06-13 23:18:01.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: azure-cli-ams -Version: 0.4.1 +Version: 0.4.7 Summary: Microsoft Azure Command-Line Tools AMS Command Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation @@ -19,6 +19,29 @@ Release History =============== + 0.4.7 + +++++ + * Return ISO 8601 time strings for archive-window-length and key-frame-interval-duration. + + 0.4.6 + +++++ + * Minor fixes. + + 0.4.5 + +++++ + * Bug fix for asset and account filters update. + + 0.4.4 + +++++ + * The `account-filter` and `asset-filter` parameter `--bitrate` has been deprecated and will be removed in a future release. + It has been renamed to `--first-quality`. + * New encryption parameters support in `ams streaming-policy create` command added. + * New paramter `filters` added to ams streaming-locator create. + + 0.4.3 + +++++ + * Minor fixes. + 0.4.1 +++++ * ams streaming-endpoint [start | stop | create | update] : added 'wait' command diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/__init__.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/__init__.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/__init__.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/__init__.py 2019-06-13 23:17:46.000000000 +0200 @@ -12,7 +12,8 @@ class MediaServicesCommandsLoader(AzCommandsLoader): def __init__(self, cli_ctx=None): - super(MediaServicesCommandsLoader, self).__init__(cli_ctx=cli_ctx, min_profile='2017-03-10-profile') + from azure.cli.core.profiles import ResourceType + super(MediaServicesCommandsLoader, self).__init__(cli_ctx=cli_ctx, resource_type=ResourceType.MGMT_MEDIA) def load_command_table(self, args): super(MediaServicesCommandsLoader, self).load_command_table(args) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/_help.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/_help.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/_help.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/_help.py 2019-06-13 23:17:46.000000000 +0200 @@ -221,7 +221,7 @@ examples: - name: Create an asset filter with filter track selections. text: > - az ams asset-filter create -a amsAccount -g resourceGroup -n filterName --force-end-timestamp=False --end-timestamp 200000 --start-timestamp 100000 --live-backoff-duration 60 --presentation-window-duration 600000 --timescale 1000 --bitrate 720 --asset-name assetName --tracks @C:\\tracks.json + az ams asset-filter create -a amsAccount -g resourceGroup -n filterName --force-end-timestamp=False --end-timestamp 200000 --start-timestamp 100000 --live-backoff-duration 60 --presentation-window-duration 600000 --timescale 1000 --first-quality 720 --asset-name assetName --tracks @C:\\tracks.json """ helps['ams asset-filter update'] = """ @@ -568,7 +568,7 @@ examples: - name: Create an asset filter with filter track selections. text: > - az ams account-filter create -a amsAccount -g resourceGroup -n filterName --force-end-timestamp=False --end-timestamp 200000 --start-timestamp 100000 --live-backoff-duration 60 --presentation-window-duration 600000 --timescale 1000 --bitrate 720 --tracks @C:\\tracks.json + az ams account-filter create -a amsAccount -g resourceGroup -n filterName --force-end-timestamp=False --end-timestamp 200000 --start-timestamp 100000 --live-backoff-duration 60 --presentation-window-duration 600000 --timescale 1000 --first-quality 720 --tracks @C:\\tracks.json """ helps['ams account-filter update'] = """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/_params.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/_params.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/_params.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/_params.py 2019-06-13 23:17:46.000000000 +0200 @@ -8,8 +8,11 @@ from knack.arguments import CLIArgumentType from azure.cli.core.commands.validators import get_default_location_from_resource_group -from azure.cli.core.commands.parameters import (get_location_type, get_enum_type, tags_type, +from azure.cli.core.commands.parameters import (get_location_type, + get_enum_type, + tags_type, get_three_state_flag) + from azure.cli.command_modules.ams._completers import (get_role_definition_name_completion_list, get_cdn_provider_completion_list, get_default_streaming_policies_completion_list, @@ -22,9 +25,13 @@ get_mru_type_completion_list, get_encoding_types_list) -from azure.cli.command_modules.ams._validators import (validate_storage_account_id, datetime_format, - validate_correlation_data, validate_token_claim, - validate_output_assets) +from azure.cli.command_modules.ams._validators import (validate_storage_account_id, + datetime_format, + validate_correlation_data, + validate_token_claim, + validate_output_assets, + validate_archive_window_length, + validate_key_frame_interval_duration) from azure.mgmt.media.models import (Priority, AssetContainerPermission, LiveEventInputProtocol, StreamOptionsFlag, OnErrorType, InsightsType) @@ -37,6 +44,8 @@ transform_name_arg_type = CLIArgumentType(options_list=['--transform-name', '-t'], metavar='TRANSFORM_NAME') expiry_arg_type = CLIArgumentType(options_list=['--expiry'], type=datetime_format, metavar='EXPIRY_TIME') default_policy_name_arg_type = CLIArgumentType(options_list=['--content-key-policy-name'], help='The default content key policy name used by the streaming locator.', metavar='DEFAULT_CONTENT_KEY_POLICY_NAME') + archive_window_length_arg_type = CLIArgumentType(options_list=['--archive-window-length'], validator=validate_archive_window_length, metavar='ARCHIVE_WINDOW_LENGTH') + key_frame_interval_duration_arg_type = CLIArgumentType(options_list=['--key-frame-interval-duration'], validator=validate_archive_window_length, metavar='ARCHIVE_WINDOW_LENGTH') correlation_data_type = CLIArgumentType(validator=validate_correlation_data, help="Space-separated correlation data in 'key[=value]' format. This customer provided data will be returned in Job and JobOutput state events.", nargs='*', metavar='CORRELATION_DATA') token_claim_type = CLIArgumentType(validator=validate_token_claim, help="Space-separated required token claims in '[key=value]' format.", nargs='*', metavar='ASYMMETRIC TOKEN CLAIMS') output_assets_type = CLIArgumentType(validator=validate_output_assets, nargs='*', help="Space-separated assets in 'assetName=label' format. An asset without label can be sent like this: 'assetName='", metavar='OUTPUT_ASSETS') @@ -51,11 +60,11 @@ with self.argument_context('ams account create') as c: c.argument('storage_account', storage_account_arg_type, - help='The name or resource ID of the primary storage account to attach to the Azure Media Services account. Blob only accounts are not allowed as primary.') + help='The name or resource ID of the primary storage account to attach to the Azure Media Services account. The storage account MUST be in the same Azure subscription as the Media Services account. It is strongly recommended that the storage account be in the same resource group as the Media Services account. Blob only accounts are not allowed as primary.') with self.argument_context('ams account check-name') as c: c.argument('account_name', options_list=['--name', '-n'], id_part=None, - help='The name of the Azure Media Services account') + help='The name of the Azure Media Services account.') c.argument('location', arg_type=get_location_type(self.cli_ctx)) with self.argument_context('ams account mru') as c: @@ -129,14 +138,20 @@ c.argument('account_name', account_name_arg_type) c.argument('asset_name', help='The name of the asset.', id_part='child_name_1') c.argument('filter_name', name_arg_type, id_part='child_name_2', help='The name of the asset filter.') - c.argument('start_timestamp', arg_group='Presentation Time Range', help='The absolute start time boundary.') - c.argument('end_timestamp', arg_group='Presentation Time Range', help='The absolute end time boundary.') - c.argument('presentation_window_duration', arg_group='Presentation Time Range', help='The relative to end sliding window.') - c.argument('live_backoff_duration', arg_group='Presentation Time Range', help='The relative to end right edge.') - c.argument('timescale', arg_group='Presentation Time Range', help='The time scale of time stamps.') - c.argument('force_end_timestamp', arg_group='Presentation Time Range', - arg_type=get_three_state_flag(), help='Indicates whether to force the existance of an end timestamp.') - c.argument('bitrate', help='The first quality bitrate.') + c.argument('start_timestamp', arg_group='Presentation Time Range', + help='Applies to Video on Demand (VoD) or Live Streaming. This is a long value that represents an absolute start point of the stream. The value gets rounded to the closest next GOP start. The unit is the timescale, so a startTimestamp of 150000000 would be for 15 seconds. Use startTimestamp and endTimestampp to trim the fragments that will be in the playlist (manifest). For example, startTimestamp=40000000 and endTimestamp=100000000 using the default timescale will generate a playlist that contains fragments from between 4 seconds and 10 seconds of the VoD presentation. If a fragment straddles the boundary, the entire fragment will be included in the manifest.') + c.argument('end_timestamp', arg_group='Presentation Time Range', + help='Applies to Video on Demand (VoD).For the Live Streaming presentation, it is silently ignored and applied when the presentation ends and the stream becomes VoD.This is a long value that represents an absolute end point of the presentation, rounded to the closest next GOP start. The unit is the timescale, so an endTimestamp of 1800000000 would be for 3 minutes.Use startTimestamp and endTimestamp to trim the fragments that will be in the playlist (manifest).For example, startTimestamp=40000000 and endTimestamp=100000000 using the default timescale will generate a playlist that contains fragments from between 4 seconds and 10 seconds of the VoD presentation. If a fragment straddles the boundary, the entire fragment will be included in the manifest.') + c.argument('presentation_window_duration', arg_group='Presentation Time Range', + help='Applies to Live Streaming only.Use presentationWindowDuration to apply a sliding window of fragments to include in a playlist.The unit for this property is timescale (see below).For example, set presentationWindowDuration=1200000000 to apply a two-minute sliding window. Media within 2 minutes of the live edge will be included in the playlist. If a fragment straddles the boundary, the entire fragment will be included in the playlist. The minimum presentation window duration is 60 seconds.') + c.argument('live_backoff_duration', arg_group='Presentation Time Range', + help='Applies to Live Streaming only. This value defines the latest live position that a client can seek to. Using this property, you can delay live playback position and create a server-side buffer for players. The unit for this property is timescale (see below). The maximum live back off duration is 300 seconds (3000000000). For example, a value of 2000000000 means that the latest available content is 20 seconds delayed from the real live edge.') + c.argument('timescale', arg_group='Presentation Time Range', + help='Applies to all timestamps and durations in a Presentation Time Range, specified as the number of increments in one second.Default is 10000000 - ten million increments in one second, where each increment would be 100 nanoseconds long. For example, if you want to set a startTimestamp at 30 seconds, you would use a value of 300000000 when using the default timescale.') + c.argument('force_end_timestamp', arg_group='Presentation Time Range', arg_type=get_three_state_flag(), + help='Applies to Live Streaming only. Indicates whether the endTimestamp property must be present. If true, endTimestamp must be specified or a bad request code is returned. Allowed values: false, true.') + c.argument('bitrate', help='The first quality bitrate.', deprecate_info=c.deprecate(target='--bitrate', redirect='--first-quality', hide=True)) + c.argument('first_quality', help='The first quality (lowest) bitrate to include in the manifest.') c.argument('tracks', help='The JSON representing the track selections. Use @{file} to load from a file. For further information about the JSON structure please refer to swagger documentation on https://docs.microsoft.com/en-us/rest/api/media/assetfilters/assetfilters_createorupdate#filtertrackselection') with self.argument_context('ams asset-filter list') as c: @@ -167,8 +182,7 @@ c.argument('files', nargs='+', help='Space-separated list of files. It can be used to tell the service to only use the files specified from the input asset.') - c.argument('label', help='A label that is assigned to a JobInput, that is used to satisfy a reference used in the Transform.') - c.argument('label', help="A label that is assigned to a Job Input, that is used to satisfy a reference used in the Transform. For example, a Transform can be authored so as to take an image file with the label 'xyz' and apply it as an overlay onto the input video before it is encoded. When submitting a Job, exactly one of the JobInputs should be the image file, and it should have the label 'xyz'.") + c.argument('label', help="A label that is assigned to a Job Input that is used to satisfy a reference used in the Transform. For example, a Transform can be authored to take an image file with the label 'xyz' and apply it as an overlay onto the input video before it is encoded. When submitting a Job, exactly one of the JobInputs should be the image file, and it should have the label 'xyz'.") c.argument('correlation_data', arg_type=correlation_data_type) with self.argument_context('ams job cancel') as c: @@ -203,7 +217,7 @@ help='The type of token. Allowed values: {}.'.format(", ".join(get_token_type_completion_list()))) c.argument('open_id_connect_discovery_document', arg_group='Token Restriction', help='The OpenID connect discovery document.') c.argument('widevine_template', arg_group='Widevine Configuration', help='JSON Widevine license template. Use @{file} to load from a file.') - c.argument('ask', arg_group='FairPlay Configuration', help='The key that must be used as FairPlay Application Secret key.') + c.argument('ask', arg_group='FairPlay Configuration', help='The key that must be used as FairPlay Application Secret Key.') c.argument('fair_play_pfx_password', arg_group='FairPlay Configuration', help='The password encrypting FairPlay certificate in PKCS 12 (pfx) format.') c.argument('fair_play_pfx', arg_group='FairPlay Configuration', help='The filepath to a FairPlay certificate file in PKCS 12 (pfx) format (including private key).') c.argument('rental_and_lease_key_type', arg_group='FairPlay Configuration', help='The rental and lease key type. Available values: {}.'.format(", ".join(get_fairplay_rentalandlease_completion_list()))) @@ -228,12 +242,13 @@ c.argument('streaming_policy_name', help='The name of the streaming policy used by the streaming locator. You can either create one with `az ams streaming policy create` or use any of the predefined policies: {}'.format(", ".join(get_default_streaming_policies_completion_list()))) c.argument('start_time', type=datetime_format, - help="The start time (Y-m-d'T'H:M:S'Z') of the streaming locator.") + help="The ISO 8601 DateTime start time (Y-m-d'T'H:M:S'Z') of the streaming locator.") c.argument('end_time', type=datetime_format, - help="The end time (Y-m-d'T'H:M:S'Z') of the streaming locator.") + help="The ISO 8601 DateTime end time (Y-m-d'T'H:M:S'Z') of the streaming locator.") c.argument('streaming_locator_id', help='The identifier of the streaming locator.') c.argument('alternative_media_id', help='An alternative media identifier associated with the streaming locator.') c.argument('content_keys', help='JSON string with the content keys to be used by the streaming locator. Use @{file} to load from a file. For further information about the JSON structure please refer to swagger documentation on https://docs.microsoft.com/en-us/rest/api/media/streaminglocators/streaminglocators_create#streaminglocatorcontentkey') + c.argument('filters', nargs='+', help='A space-separated list of asset filter names and/or account filter names.') with self.argument_context('ams streaming-locator list') as c: c.argument('account_name', id_part=None) @@ -257,14 +272,16 @@ c.argument('cenc_play_ready_attributes', arg_group='Common Encryption CENC', help='Custom attributes for PlayReady.') c.argument('cenc_widevine_template', arg_group='Common Encryption CENC', help='The custom license acquisition URL template for a customer service to deliver keys to end users. Not needed when using Azure Media Services for issuing keys.') c.argument('cenc_play_ready_template', arg_group='Common Encryption CENC', help='The custom license acquisition URL template for a customer service to deliver keys to end users. Not needed when using Azure Media Services for issuing keys.') + c.argument('cenc_disable_widevine', arg_group='Common Encryption CENC', arg_type=get_three_state_flag(), help='If specified, no Widevine cenc DRM will be configured. If --cenc-disable-widevine is set, --cenc-disable-play-ready cannot also be set.') + c.argument('cenc_disable_play_ready', arg_group='Common Encryption CENC', arg_type=get_three_state_flag(), help='If specified, no PlayReady cenc DRM will be configured. If --cenc-disable-play-ready is set, --cenc-disable-widevine cannot also be set.') c.argument('cbcs_protocols', nargs='+', arg_group='Common Encryption CBCS', help='Space-separated list of enabled protocols for Common Encryption CBCS. Allowed values: {}.'.format(", ".join(get_protocols_completion_list()))) c.argument('cbcs_default_key_label', arg_group='Common Encryption CBCS', help='Label to specify Default Content Key for an encryption scheme.') c.argument('cbcs_default_key_policy_name', arg_group='Common Encryption CBCS', help='Policy used by Default Content Key.') c.argument('cbcs_clear_tracks', arg_group='Common Encryption CBCS', help='The JSON representing which tracks should not be encrypted. Use @{file} to load from a file. For further information about the JSON structure please refer to swagger documentation on https://docs.microsoft.com/en-us/rest/api/media/streamingpolicies/create#trackselection') c.argument('cbcs_key_to_track_mappings', arg_group='Common Encryption CBCS', help='The JSON representing a list of StreamingPolicyContentKey. Use @{file} to load from a file. For further information about the JSON structure please refer to swagger documentation on https://docs.microsoft.com/en-us/rest/api/media/streamingpolicies/create#streamingpolicycontentkey') - c.argument('cbcs_play_ready_attributes', arg_group='Common Encryption CBCS', help='Custom attributes for PlayReady.') - c.argument('cbcs_widevine_template', arg_group='Common Encryption CBCS', help='The custom license acquisition URL template for a customer service to deliver keys to end users. Not needed when using Azure Media Services for issuing keys.') - c.argument('cbcs_play_ready_template', arg_group='Common Encryption CBCS', help='The custom license acquisition URL template for a customer service to deliver keys to end users. Not needed when using Azure Media Services for issuing keys.') + c.argument('cbcs_play_ready_attributes', arg_group='Common Encryption CBCS', help='Custom attributes for PlayReady.', deprecate_info=c.deprecate(hide=True)) + c.argument('cbcs_play_ready_template', arg_group='Common Encryption CBCS', help='The custom license acquisition URL template for a customer service to deliver keys to end users. Not needed when using Azure Media Services for issuing keys.', deprecate_info=c.deprecate(hide=True)) + c.argument('cbcs_widevine_template', arg_group='Common Encryption CBCS', help='The custom license acquisition URL template for a customer service to deliver keys to end users. Not needed when using Azure Media Services for issuing keys.', deprecate_info=c.deprecate(hide=True)) c.argument('cbcs_fair_play_template', arg_group='Common Encryption CBCS', help='The custom license acquisition URL template for a customer service to deliver keys to end users. Not needed when using Azure Media Services for issuing keys.') c.argument('cbcs_fair_play_allow_persistent_license', arg_group='Common Encryption CBCS', arg_type=get_three_state_flag(), help='Allows the license to be persistent or not.') @@ -284,9 +301,9 @@ c.argument('cdn_provider', arg_group='CDN Support', help='The CDN provider name. Allowed values: {}.'.format(", ".join(get_cdn_provider_completion_list()))) c.argument('cdn_profile', arg_group='CDN Support', help='The CDN profile name.') c.argument('client_access_policy', arg_group='Cross Site Access Policies', - help='Filepath to the clientaccesspolicy.xml used by Silverlight. Use @{file} to load from a file.') + help='The XML representing the clientaccesspolicy data used by Microsoft Silverlight and Adobe Flash. Use @{file} to load from a file. For further information about the XML structure please refer to documentation on https://docs.microsoft.com/en-us/rest/api/media/operations/crosssiteaccesspolicies') c.argument('cross_domain_policy', arg_group='Cross Site Access Policies', - help='Filepath to the crossdomain.xml used by Silverlight. Use @{file} to load from a file.') + help='The XML representing the crossdomain data used by Silverlight. Use @{file} to load from a file. For further information about the XML structure please refer to documentation on https://docs.microsoft.com/en-us/rest/api/media/operations/crosssiteaccesspolicies') c.argument('auto_start', action='store_true', help='The flag indicates if the resource should be automatically started on creation.') c.argument('ips', nargs='+', arg_group='Access Control Support', help='Space-separated IP addresses for access control. Allowed IP addresses can be specified as either a single IP address (e.g. "10.0.0.1") or as an IP range using an IP address and a CIDR subnet mask (e.g. "10.0.0.1/22"). Use "" to clear existing list. If no IP addresses are specified any IP address will be allowed.') c.argument('disable_cdn', arg_group='CDN Support', action='store_true', help='Use this flag to disable CDN for the streaming endpoint.') @@ -298,9 +315,10 @@ c.argument('scale_unit', options_list=['--scale-units'], help='The number of scale units for Premium StreamingEndpoints.') with self.argument_context('ams streaming-endpoint akamai') as c: - c.argument('identifier', help='Identifier of the key.') - c.argument('base64_key', help='Authentication key.') - c.argument('expiration', help='The expiration time of the authentication key.') + c.argument('identifier', help='The identifier for the authentication key. This is the nonce provided by Akamai.') + c.argument('base64_key', help='Base64-encoded authentication key that will be used by the CDN. The authentication key provided by Akamai is an ASCII encoded string, and must be converted to bytes and then base64 encoded.') + c.argument('expiration', type=datetime_format, + help='The ISO 8601 DateTime value that specifies when the Akamai authentication expires.') with self.argument_context('ams streaming-endpoint list') as c: c.argument('account_name', id_part=None) @@ -315,8 +333,8 @@ c.argument('encoding_type', arg_group='Encoding', help='The encoding type for live event. This value is specified at creation time and cannot be updated. Allowed values: {}.'.format(", ".join(get_encoding_types_list()))) c.argument('preset_name', arg_group='Encoding', help='The encoding preset name. This value is specified at creation time and cannot be updated.') c.argument('tags', arg_type=tags_type) - c.argument('key_frame_interval_duration', arg_group='Input', - help='ISO 8601 timespan duration of the key frame interval duration.') + c.argument('key_frame_interval_duration', key_frame_interval_duration_arg_type, arg_group='Input', validator=validate_key_frame_interval_duration, + help='ISO 8601 timespan duration of the key frame interval duration in seconds. The value should be an interger in the range of 1 (PT1S or 00:00:01) to 30 (PT30S or 00:00:30) seconds.') c.argument('access_token', arg_group='Input', help='A unique identifier for a stream. This can be specified at creation time but cannot be updated. If omitted, the service will generate a unique value.') c.argument('description', help='The live event description.') c.argument('ips', nargs='+', arg_group='Input', help='Space-separated IP addresses for access control. Allowed IP addresses can be specified as either a single IP address (e.g. "10.0.0.1") or as an IP range using an IP address and a CIDR subnet mask (e.g. "10.0.0.1/22"). Use "" to clear existing list. Use "AllowAll" to allow all IP addresses. Allowing all IPs is not recommended for production environments.') @@ -325,8 +343,8 @@ c.argument('streaming_policy_name', arg_group='Preview', help='The name of streaming policy used for the live event preview. This can be specified at creation time but cannot be updated.') c.argument('alternative_media_id', arg_group='Preview', help='An Alternative Media Identifier associated with the StreamingLocator created for the preview. This value is specified at creation time and cannot be updated. The identifier can be used in the CustomLicenseAcquisitionUrlTemplate or the CustomKeyAcquisitionUrlTemplate of the StreamingPolicy specified in the StreamingPolicyName field.') c.argument('vanity_url', arg_type=get_three_state_flag(), help='Specifies whether to use a vanity url with the Live Event. This value is specified at creation time and cannot be updated.') - c.argument('client_access_policy', arg_group='Cross Site Access Policies', help='Filepath to the clientaccesspolicy.xml used by Silverlight. Use @{file} to load from a file.') - c.argument('cross_domain_policy', arg_group='Cross Site Access Policies', help='Filepath to the crossdomain.xml used by Silverlight. Use @{file} to load from a file.') + c.argument('client_access_policy', arg_group='Cross Site Access Policies', help='Filepath to the clientaccesspolicy.xml used by Microsoft Silverlight and Adobe Flash. Use @{file} to load from a file.') + c.argument('cross_domain_policy', arg_group='Cross Site Access Policies', help='Filepath to the crossdomain.xml used by Microsoft Silverlight and Adobe Flash. Use @{file} to load from a file.') c.argument('stream_options', nargs='+', arg_type=get_enum_type(StreamOptionsFlag), help='The options to use for the LiveEvent. This value is specified at creation time and cannot be updated.') c.argument('remove_outputs_on_stop', action='store_true', help='Remove live outputs on stop.') @@ -345,23 +363,31 @@ with self.argument_context('ams live-output create') as c: c.argument('asset_name', help='The name of the asset.') + c.argument('archive_window_length', archive_window_length_arg_type, validator=validate_archive_window_length, + help="ISO 8601 timespan duration of the archive window length. This is the duration that customer want to retain the recorded content. Minimum window is 5 minutes (PT5M or 00:05:00). Maximum window is 25 hours (PT25H or 25:00:00). For example, to retain the output for 10 minutes, use PT10M or 00:10:00") c.argument('manifest_name', help='The manifest file name. If not provided, the service will generate one automatically.') - c.argument('archive_window_length', help='ISO 8601 timespan duration of the archive window length. This is the duration that customer want to retain the recorded content.') c.argument('description', help='The live output description.') - c.argument('fragments_per_ts_segment', help='The amount of fragments per HLS segment.') + c.argument('fragments_per_ts_segment', help='The number of fragments per HLS segment.') c.argument('output_snap_time', help='The output snapshot time.') with self.argument_context('ams account-filter') as c: c.argument('account_name', account_name_arg_type) c.argument('filter_name', name_arg_type, id_part='child_name_1', help='The name of the account filter.') - c.argument('start_timestamp', arg_group='Presentation Time Range', help='The absolute start time boundary.') - c.argument('end_timestamp', arg_group='Presentation Time Range', help='The absolute end time boundary.') - c.argument('presentation_window_duration', arg_group='Presentation Time Range', help='The relative to end sliding window.') - c.argument('live_backoff_duration', arg_group='Presentation Time Range', help='The relative to end right edge.') - c.argument('timescale', arg_group='Presentation Time Range', help='The time scale of time stamps.') - c.argument('force_end_timestamp', arg_type=get_three_state_flag(), arg_group='Presentation Time Range', help='Indicates whether to force the existance of an end timestamp.') - c.argument('bitrate', help='The first quality bitrate.') - c.argument('tracks', help='The JSON representing the track selections. Use @{file} to load from a file. For further information about the JSON structure please refer to swagger documentation on https://docs.microsoft.com/en-us/rest/api/media/accountfilters/accountfilters_createorupdate#filtertrackselection') + c.argument('start_timestamp', arg_group='Presentation Time Range', + help='Applies to Video on Demand (VoD) or Live Streaming. This is a long value that represents an absolute start point of the stream. The value gets rounded to the closest next GOP start. The unit is the timescale, so a startTimestamp of 150000000 would be for 15 seconds. Use startTimestamp and endTimestampp to trim the fragments that will be in the playlist (manifest). For example, startTimestamp=40000000 and endTimestamp=100000000 using the default timescale will generate a playlist that contains fragments from between 4 seconds and 10 seconds of the VoD presentation. If a fragment straddles the boundary, the entire fragment will be included in the manifest.') + c.argument('end_timestamp', arg_group='Presentation Time Range', + help='Applies to Video on Demand (VoD). For the Live Streaming presentation, it is silently ignored and applied when the presentation ends and the stream becomes VoD. This is a long value that represents an absolute end point of the presentation, rounded to the closest next GOP start. The unit is the timescale, so an endTimestamp of 1800000000 would be for 3 minutes. Use startTimestamp and endTimestamp to trim the fragments that will be in the playlist (manifest). For example, startTimestamp=40000000 and endTimestamp=100000000 using the default timescale will generate a playlist that contains fragments from between 4 seconds and 10 seconds of the VoD presentation. If a fragment straddles the boundary, the entire fragment will be included in the manifest.') + c.argument('presentation_window_duration', arg_group='Presentation Time Range', + help='Applies to Live Streaming only. Use presentationWindowDuration to apply a sliding window of fragments to include in a playlist. The unit for this property is timescale (see below). For example, set presentationWindowDuration=1200000000 to apply a two-minute sliding window. Media within 2 minutes of the live edge will be included in the playlist. If a fragment straddles the boundary, the entire fragment will be included in the playlist. The minimum presentation window duration is 60 seconds.') + c.argument('live_backoff_duration', arg_group='Presentation Time Range', + help='Applies to Live Streaming only. This value defines the latest live position that a client can seek to. Using this property, you can delay live playback position and create a server-side buffer for players. The unit for this property is timescale (see below). The maximum live back off duration is 300 seconds (3000000000). For example, a value of 2000000000 means that the latest available content is 20 seconds delayed from the real live edge.') + c.argument('timescale', arg_group='Presentation Time Range', + help='Applies to all timestamps and durations in a Presentation Time Range, specified as the number of increments in one second. Default is 10000000 - ten million increments in one second, where each increment would be 100 nanoseconds long. For example, if you want to set a startTimestamp at 30 seconds, you would use a value of 300000000 when using the default timescale.') + c.argument('force_end_timestamp', arg_group='Presentation Time Range', arg_type=get_three_state_flag(), + help='Applies to Live Streaming only. Indicates whether the endTimestamp property must be present. If true, endTimestamp must be specified or a bad request code is returned. Allowed values: false, true.') + c.argument('bitrate', help='The first quality bitrate.', deprecate_info=c.deprecate(target='--bitrate', redirect='--first-quality', hide=True)) + c.argument('first_quality', help='The first quality (lowest) bitrate to include in the manifest.') + c.argument('tracks', help='The JSON representing the track selections. Use @{file} to load from a file. For further information about the JSON structure please refer to swagger documentation on https://docs.microsoft.com/en-us/rest/api/media/accountfilters/createorupdate#filtertrackselection') with self.argument_context('ams account-filter list') as c: c.argument('account_name', id_part=None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/_validators.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/_validators.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/_validators.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/_validators.py 2019-06-13 23:17:46.000000000 +0200 @@ -34,6 +34,48 @@ return datetime_obj +def validate_archive_window_length(ns): + """Validate the correct format of a datetime string and the range.""" + if ns.archive_window_length is not None: + from msrest.serialization import Deserializer + from msrest.exceptions import DeserializationError + + try: + datetime_obj = Deserializer.deserialize_duration(ns.archive_window_length) + except DeserializationError: + message = "archive-window-length {} is not a valid ISO-8601 duration format" + raise ValueError(message.format(ns.archive_window_length)) + + minwindow = Deserializer.deserialize_duration("PT5M") + maxwindow = Deserializer.deserialize_duration("PT25H") + + if datetime_obj < minwindow or datetime_obj > maxwindow: + message = "archive-window-length '{}' is not in the range of PT5M and PT25H"\ + .format(ns.archive_window_length) + raise ValueError(message) + + +def validate_key_frame_interval_duration(ns): + """Validate the correct format of a datetime string and the range.""" + if ns.key_frame_interval_duration is not None: + from msrest.serialization import Deserializer + from msrest.exceptions import DeserializationError + + try: + datetime_obj = Deserializer.deserialize_duration(ns.key_frame_interval_duration) + except DeserializationError: + message = "key-frame-interval-duration {} is not a valid ISO-8601 duration format" + raise ValueError(message.format(ns.key_frame_interval_duration)) + + minwindow = Deserializer.deserialize_duration("PT1S") + maxwindow = Deserializer.deserialize_duration("PT30S") + + if datetime_obj < minwindow or datetime_obj > maxwindow: + message = "key-frame-interval-duration '{}' is not in the range of PT1S and PT30S"\ + .format(ns.key_frame_interval_duration) + raise ValueError(message) + + def validate_correlation_data(ns): """ Extracts multiple space-separated correlation data in key[=value] format """ if isinstance(ns.correlation_data, list): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/commands.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/commands.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/commands.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/commands.py 2019-06-13 23:17:46.000000000 +0200 @@ -227,3 +227,6 @@ g.generic_update_command('update', custom_func_name='update_account_filter', custom_func_type=get_custom_sdk('account_filter', get_mediaservices_client)) + + with self.command_group('ams', is_preview=True): + pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/account.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/account.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/account.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/account.py 2019-06-13 23:17:46.000000000 +0200 @@ -44,10 +44,10 @@ def remove_mediaservice_secondary_storage(client, resource_group_name, account_name, storage_account): ams = client.get(resource_group_name, account_name) - storage_accounts_filtered = list(filter(lambda s: storage_account not in s.id and 'Secondary' in s.type.value, + storage_accounts_filtered = list(filter(lambda s: storage_account not in s.id and 'Secondary' in s.type, ams.storage_accounts)) - primary_storage_account = list(filter(lambda s: 'Primary' in s.type.value, ams.storage_accounts))[0] + primary_storage_account = list(filter(lambda s: 'Primary' in s.type, ams.storage_accounts))[0] storage_accounts_filtered.append(primary_storage_account) return create_or_update_mediaservice(client, resource_group_name, account_name, storage_accounts_filtered, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/account_filter.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/account_filter.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/account_filter.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/account_filter.py 2019-06-13 23:17:46.000000000 +0200 @@ -14,13 +14,12 @@ def create_account_filter(client, account_name, resource_group_name, filter_name, start_timestamp=None, end_timestamp=None, presentation_window_duration=None, live_backoff_duration=None, - timescale=None, force_end_timestamp=False, bitrate=None, tracks=None): + timescale=None, force_end_timestamp=False, bitrate=None, first_quality=None, tracks=None): - first_quality = None presentation_time_range = None - if bitrate is not None: - first_quality = FirstQuality(bitrate=bitrate) + if first_quality or bitrate: + first_quality = FirstQuality(bitrate=first_quality or bitrate) if any([start_timestamp, end_timestamp, presentation_window_duration, live_backoff_duration, timescale]): @@ -43,13 +42,13 @@ def update_account_filter(instance, start_timestamp=None, end_timestamp=None, presentation_window_duration=None, live_backoff_duration=None, - timescale=None, bitrate=None, tracks=None, force_end_timestamp=None): + timescale=None, bitrate=None, first_quality=None, tracks=None, force_end_timestamp=None): if not instance: raise CLIError('The account filter resource was not found.') - if bitrate: - instance.first_quality = FirstQuality(bitrate=bitrate) + if first_quality or bitrate: + instance.first_quality = FirstQuality(bitrate=first_quality or bitrate) if any([start_timestamp, end_timestamp, presentation_window_duration, live_backoff_duration, timescale, force_end_timestamp is not None]): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/asset_filter.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/asset_filter.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/asset_filter.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/asset_filter.py 2019-06-13 23:17:46.000000000 +0200 @@ -13,13 +13,14 @@ def create_asset_filter(client, account_name, resource_group_name, asset_name, filter_name, start_timestamp=None, end_timestamp=None, presentation_window_duration=None, - live_backoff_duration=None, timescale=None, force_end_timestamp=False, bitrate=None, + live_backoff_duration=None, timescale=None, force_end_timestamp=False, + bitrate=None, first_quality=None, tracks=None): - first_quality = None + presentation_time_range = None - if bitrate: - first_quality = FirstQuality(bitrate=bitrate) + if first_quality or bitrate: + first_quality = FirstQuality(bitrate=first_quality or bitrate) if any([start_timestamp, end_timestamp, presentation_window_duration, live_backoff_duration, timescale]): @@ -42,13 +43,14 @@ def update_asset_filter(instance, start_timestamp=None, end_timestamp=None, presentation_window_duration=None, - live_backoff_duration=None, timescale=None, bitrate=None, + live_backoff_duration=None, timescale=None, bitrate=None, first_quality=None, tracks=None, force_end_timestamp=None): + if not instance: raise CLIError('The asset filter resource was not found.') - if bitrate: - instance.first_quality = FirstQuality(bitrate=bitrate) + if first_quality or bitrate: + instance.first_quality = FirstQuality(bitrate=first_quality or bitrate) if any([start_timestamp, end_timestamp, presentation_window_duration, live_backoff_duration, timescale, force_end_timestamp is not None]): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/content_key_policy.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/content_key_policy.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/content_key_policy.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/content_key_policy.py 2019-06-13 23:17:46.000000000 +0200 @@ -403,7 +403,10 @@ def __get_license(lic): import dateutil.parser - expiration_date = dateutil.parser.parse(lic.get('expirationDate')) + if lic.get('expirationDate') is None: + expiration_date = None + else: + expiration_date = dateutil.parser.parse(lic.get('expirationDate')) return ContentKeyPolicyPlayReadyLicense( allow_test_devices=lic.get('allowTestDevices'), begin_date=lic.get('beginDate'), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/job.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/job.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/job.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/job.py 2019-06-13 23:17:46.000000000 +0200 @@ -15,11 +15,11 @@ if input_asset_name: job_input = JobInputAsset(asset_name=input_asset_name, files=files, label=label) else: - if base_uri is None and files is None: + if base_uri is not None and files is not None: + job_input = JobInputHttp(files=files, base_uri=base_uri, label=label) + else: raise CLIError("Missing required arguments.\nEither --input-asset-name, " "or both --files or --base-uri must be specified.") - else: - job_input = JobInputHttp(files=files, base_uri=base_uri, label=label) job_outputs = output_assets diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/sp.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/sp.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/sp.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/sp.py 2019-06-13 23:17:46.000000000 +0200 @@ -14,8 +14,8 @@ from knack.log import get_logger from msrest.serialization import TZ_UTC from msrestazure.azure_exceptions import CloudError -from azure.graphrbac.models.graph_error import GraphErrorException from azure.graphrbac.models import (ApplicationCreateParameters, + GraphErrorException, ServicePrincipalCreateParameters) from azure.cli.command_modules.ams._client_factory import (_graph_client_factory, _auth_client_factory) @@ -100,8 +100,10 @@ def _get_displayable_name(graph_object): if getattr(graph_object, 'user_principal_name', None): return graph_object.user_principal_name - elif getattr(graph_object, 'service_principal_names', None): + + if getattr(graph_object, 'service_principal_names', None): return graph_object.service_principal_names[0] + return graph_object.display_name or '' @@ -179,9 +181,11 @@ definitions_client.config.subscription_id, role) if not role_id: # retrieve role id role_defs = list(definitions_client.list(scope, "roleName eq '{}'".format(role))) + if not role_defs: raise CLIError("Role '{}' doesn't exist.".format(role)) - elif len(role_defs) > 1: + + if len(role_defs) > 1: ids = [r.id for r in role_defs] err = "More than one role matches the given name '{}'. Please pick a value from '{}'" raise CLIError(err.format(role, ids)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/streaming_locator.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/streaming_locator.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/streaming_locator.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/streaming_locator.py 2019-06-13 23:17:46.000000000 +0200 @@ -12,7 +12,8 @@ streaming_locator_name, streaming_policy_name, asset_name, start_time=None, default_content_key_policy_name=None, end_time=None, streaming_locator_id=None, alternative_media_id=None, - content_keys=None): + content_keys=None, + filters=None): from azure.mgmt.media.models import StreamingLocator if not _valid_content_keys(content_keys): @@ -26,7 +27,8 @@ default_content_key_policy_name=default_content_key_policy_name, streaming_locator_id=streaming_locator_id, alternative_media_id=alternative_media_id, - content_keys=content_keys) + content_keys=content_keys, + filters=filters) return client.create(resource_group_name, account_name, streaming_locator_name, streaming_locator) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/streaming_policy.py new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/streaming_policy.py --- old/azure-cli-ams-0.4.1/azure/cli/command_modules/ams/operations/streaming_policy.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure/cli/command_modules/ams/operations/streaming_policy.py 2019-06-13 23:17:46.000000000 +0200 @@ -17,50 +17,84 @@ from azure.cli.command_modules.ams._client_factory import get_streaming_policies_client -def create_streaming_policy(cmd, resource_group_name, account_name, # pylint: disable=too-many-locals - streaming_policy_name, no_encryption_protocols=None, +def create_streaming_policy(cmd, # pylint: disable=too-many-locals + resource_group_name, + account_name, + streaming_policy_name, + no_encryption_protocols=None, default_content_key_policy_name=None, - cenc_default_key_label=None, cenc_default_key_policy_name=None, - cenc_clear_tracks=None, cenc_key_to_track_mappings=None, - cenc_play_ready_template=None, cenc_play_ready_attributes=None, - cenc_widevine_template=None, cenc_protocols=None, - envelope_clear_tracks=None, envelope_key_to_track_mappings=None, - envelope_template=None, - envelope_default_key_label=None, envelope_default_key_policy_name=None, - envelope_protocols=None, cbcs_protocols=None, - cbcs_default_key_label=None, cbcs_clear_tracks=None, + cbcs_clear_tracks=None, + cbcs_default_key_label=None, cbcs_default_key_policy_name=None, - cbcs_key_to_track_mappings=None, cbcs_play_ready_template=None, - cbcs_play_ready_attributes=None, cbcs_widevine_template=None, + cbcs_key_to_track_mappings=None, + cbcs_protocols=None, + cbcs_play_ready_template=None, + cbcs_play_ready_attributes=None, + cbcs_widevine_template=None, cbcs_fair_play_template=None, - cbcs_fair_play_allow_persistent_license=False): + cbcs_fair_play_allow_persistent_license=False, + cenc_default_key_label=None, + cenc_default_key_policy_name=None, + cenc_clear_tracks=None, + cenc_key_to_track_mappings=None, + cenc_disable_play_ready=None, + cenc_play_ready_template=None, + cenc_play_ready_attributes=None, + cenc_disable_widevine=None, + cenc_widevine_template=None, + cenc_protocols=None, + envelope_clear_tracks=None, + envelope_default_key_label=None, + envelope_default_key_policy_name=None, + envelope_key_to_track_mappings=None, + envelope_protocols=None, + envelope_template=None): envelope_encryption = None if any([envelope_protocols, envelope_clear_tracks, envelope_template, envelope_default_key_label, envelope_default_key_policy_name, envelope_key_to_track_mappings]): - envelope_encryption = _envelope_encryption_factory(envelope_protocols, envelope_clear_tracks, - envelope_template, - envelope_default_key_label, envelope_default_key_policy_name, - envelope_key_to_track_mappings) + envelope_encryption = _envelope_encryption_factory(envelope_clear_tracks, + envelope_default_key_label, + envelope_default_key_policy_name, + envelope_key_to_track_mappings, + envelope_protocols, + envelope_template) common_encryption_cenc = None if any([cenc_protocols, cenc_widevine_template, cenc_default_key_label, cenc_default_key_policy_name, cenc_key_to_track_mappings, cenc_clear_tracks, cenc_play_ready_template, cenc_play_ready_attributes]): - common_encryption_cenc = _cenc_encryption_factory(cenc_protocols, cenc_widevine_template, - cenc_default_key_label, cenc_default_key_policy_name, - cenc_key_to_track_mappings, cenc_clear_tracks, - cenc_play_ready_template, cenc_play_ready_attributes) + common_encryption_cenc = _cenc_encryption_factory(cenc_clear_tracks, + cenc_default_key_label, + cenc_default_key_policy_name, + cenc_disable_play_ready, + cenc_disable_widevine, + cenc_key_to_track_mappings, + cenc_play_ready_attributes, + cenc_play_ready_template, + cenc_protocols, + cenc_widevine_template) common_encryption_cbcs = None - if any([cbcs_protocols, cbcs_widevine_template, cbcs_default_key_label, cbcs_default_key_policy_name, - cbcs_key_to_track_mappings, cbcs_clear_tracks, cbcs_play_ready_template, cbcs_play_ready_attributes, - cbcs_fair_play_template, cbcs_fair_play_allow_persistent_license]): - common_encryption_cbcs = _cbcs_encryption_factory(cbcs_protocols, cbcs_widevine_template, - cbcs_default_key_label, cbcs_default_key_policy_name, - cbcs_key_to_track_mappings, cbcs_clear_tracks, - cbcs_play_ready_template, cbcs_play_ready_attributes, + if any([cbcs_clear_tracks, + cbcs_default_key_label, + cbcs_default_key_policy_name, + cbcs_fair_play_template, + cbcs_fair_play_allow_persistent_license, + cbcs_key_to_track_mappings, + cbcs_play_ready_template, + cbcs_play_ready_attributes, + cbcs_widevine_template, + cbcs_protocols]): + common_encryption_cbcs = _cbcs_encryption_factory(cbcs_clear_tracks, + cbcs_default_key_label, + cbcs_default_key_policy_name, cbcs_fair_play_template, - cbcs_fair_play_allow_persistent_license) + cbcs_fair_play_allow_persistent_license, + cbcs_key_to_track_mappings, + cbcs_play_ready_template, + cbcs_play_ready_attributes, + cbcs_widevine_template, + cbcs_protocols) no_encryption = None if not any([envelope_encryption, common_encryption_cenc, common_encryption_cbcs]) or no_encryption_protocols: @@ -81,22 +115,38 @@ return NoEncryption(enabled_protocols=enabled_protocols) -def _cenc_encryption_factory(cenc_protocols, cenc_widevine_template, - cenc_default_key_label, cenc_default_key_policy_name, - cenc_key_to_track_mappings, cenc_clear_tracks, - cenc_play_ready_template, cenc_play_ready_attributes): +def _cenc_encryption_factory(cenc_clear_tracks, + cenc_default_key_label, + cenc_default_key_policy_name, + cenc_disable_play_ready, + cenc_disable_widevine, + cenc_key_to_track_mappings, + cenc_play_ready_attributes, + cenc_play_ready_template, + cenc_protocols, + cenc_widevine_template): cenc_enabled_protocols = _build_enabled_protocols_object(cenc_protocols) + if cenc_disable_play_ready and cenc_disable_widevine: + message = '--cenc-disable-play-ready and --cenc-disable-widevine cannot both be specified' + raise ValueError(message) + cenc_play_ready_config = None - if cenc_play_ready_template or cenc_play_ready_attributes: - cenc_play_ready_config = StreamingPolicyPlayReadyConfiguration( - custom_license_acquisition_url_template=cenc_play_ready_template, - play_ready_custom_attributes=cenc_play_ready_attributes) + if not cenc_disable_play_ready: + if cenc_play_ready_template or cenc_play_ready_attributes: + cenc_play_ready_config = StreamingPolicyPlayReadyConfiguration( + custom_license_acquisition_url_template=cenc_play_ready_template, + play_ready_custom_attributes=cenc_play_ready_attributes) + else: + cenc_play_ready_config = StreamingPolicyPlayReadyConfiguration() cenc_widevine_config = None - if cenc_widevine_template: - cenc_widevine_config = StreamingPolicyWidevineConfiguration( - custom_license_acquisition_url_template=cenc_widevine_template) + if not cenc_disable_widevine: + if cenc_widevine_template: + cenc_widevine_config = StreamingPolicyWidevineConfiguration( + custom_license_acquisition_url_template=cenc_widevine_template) + else: + cenc_widevine_config = StreamingPolicyWidevineConfiguration() key_to_track_mappings = _parse_key_to_track_mappings_json(cenc_key_to_track_mappings) cenc_content_keys = StreamingPolicyContentKeys(default_key=DefaultKey(label=cenc_default_key_label, @@ -110,12 +160,16 @@ widevine=cenc_widevine_config)) -def _cbcs_encryption_factory(cbcs_protocols, cbcs_widevine_template, - cbcs_default_key_label, cbcs_default_key_policy_name, - cbcs_key_to_track_mappings, cbcs_clear_tracks, - cbcs_play_ready_template, cbcs_play_ready_attributes, +def _cbcs_encryption_factory(cbcs_clear_tracks, + cbcs_default_key_label, + cbcs_default_key_policy_name, cbcs_fair_play_template, - cbcs_fair_play_allow_persistent_license): + cbcs_fair_play_allow_persistent_license, + cbcs_key_to_track_mappings, + cbcs_play_ready_template, + cbcs_play_ready_attributes, + cbcs_widevine_template, + cbcs_protocols): cbcs_enabled_protocols = _build_enabled_protocols_object(cbcs_protocols) cbcs_play_ready_config = None @@ -129,11 +183,9 @@ cbcs_widevine_config = StreamingPolicyWidevineConfiguration( custom_license_acquisition_url_template=cbcs_widevine_template) - cbcs_fair_play_config = None - if cbcs_fair_play_allow_persistent_license or cbcs_fair_play_template: - cbcs_fair_play_config = StreamingPolicyFairPlayConfiguration( - allow_persistent_license=cbcs_fair_play_allow_persistent_license, - custom_license_acquisition_url_template=cbcs_fair_play_template) + cbcs_fair_play_config = StreamingPolicyFairPlayConfiguration( + allow_persistent_license=cbcs_fair_play_allow_persistent_license, + custom_license_acquisition_url_template=cbcs_fair_play_template) cbcs_content_keys = StreamingPolicyContentKeys( default_key=DefaultKey(label=cbcs_default_key_label, @@ -191,10 +243,12 @@ smooth_streaming='SmoothStreaming' in protocols) -def _envelope_encryption_factory(envelope_protocols, envelope_clear_tracks, - envelope_template, - envelope_default_key_label, envelope_default_key_policy_name, - envelope_key_to_track_mappings): +def _envelope_encryption_factory(envelope_clear_tracks, + envelope_default_key_label, + envelope_default_key_policy_name, + envelope_key_to_track_mappings, + envelope_protocols, + envelope_template): envelope_content_keys = StreamingPolicyContentKeys( default_key=DefaultKey(label=envelope_default_key_label, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure_cli_ams.egg-info/PKG-INFO new/azure-cli-ams-0.4.7/azure_cli_ams.egg-info/PKG-INFO --- old/azure-cli-ams-0.4.1/azure_cli_ams.egg-info/PKG-INFO 2019-02-12 03:05:55.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure_cli_ams.egg-info/PKG-INFO 2019-06-13 23:18:01.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: azure-cli-ams -Version: 0.4.1 +Version: 0.4.7 Summary: Microsoft Azure Command-Line Tools AMS Command Module Home-page: https://github.com/Azure/azure-cli Author: Microsoft Corporation @@ -19,6 +19,29 @@ Release History =============== + 0.4.7 + +++++ + * Return ISO 8601 time strings for archive-window-length and key-frame-interval-duration. + + 0.4.6 + +++++ + * Minor fixes. + + 0.4.5 + +++++ + * Bug fix for asset and account filters update. + + 0.4.4 + +++++ + * The `account-filter` and `asset-filter` parameter `--bitrate` has been deprecated and will be removed in a future release. + It has been renamed to `--first-quality`. + * New encryption parameters support in `ams streaming-policy create` command added. + * New paramter `filters` added to ams streaming-locator create. + + 0.4.3 + +++++ + * Minor fixes. + 0.4.1 +++++ * ams streaming-endpoint [start | stop | create | update] : added 'wait' command diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/azure_cli_ams.egg-info/requires.txt new/azure-cli-ams-0.4.7/azure_cli_ams.egg-info/requires.txt --- old/azure-cli-ams-0.4.1/azure_cli_ams.egg-info/requires.txt 2019-02-12 03:05:55.000000000 +0100 +++ new/azure-cli-ams-0.4.7/azure_cli_ams.egg-info/requires.txt 2019-06-13 23:18:01.000000000 +0200 @@ -1,3 +1,3 @@ azure-cli-core -azure-mgmt-media==1.0.1 -azure-graphrbac==0.53.0 +azure-mgmt-media==1.1.1 +azure-graphrbac==0.60.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/azure-cli-ams-0.4.1/setup.py new/azure-cli-ams-0.4.7/setup.py --- old/azure-cli-ams-0.4.1/setup.py 2019-02-12 03:05:13.000000000 +0100 +++ new/azure-cli-ams-0.4.7/setup.py 2019-06-13 23:17:46.000000000 +0200 @@ -14,7 +14,7 @@ logger.warn("Wheel is not available, disabling bdist_wheel hook") cmdclass = {} -VERSION = "0.4.1" +VERSION = "0.4.7" # The full list of classifiers is available at # https://pypi.python.org/pypi?%3Aaction=list_classifiers @@ -33,8 +33,8 @@ DEPENDENCIES = [ 'azure-cli-core', - 'azure-mgmt-media==1.0.1', - 'azure-graphrbac==0.53.0' + 'azure-mgmt-media==1.1.1', + 'azure-graphrbac==0.60.0' ] with open('README.rst', 'r', encoding='utf-8') as f:
