1414 pass
1515
1616from azure .mgmt .storage import StorageManagementClient
17- from azure .mgmt .storage .models import StorageAccount , Endpoints
17+ from azure .mgmt .storage .models import StorageAccount , Endpoints , BlobServiceProperties , DeleteRetentionPolicy , \
18+ LastAccessTimeTrackingPolicy
1819
1920from azure_devtools .scenario_tests .exceptions import AzureTestError
2021
@@ -64,16 +65,8 @@ def create_resource(self, name, **kwargs):
6465 if self .is_live :
6566 self .client = self .create_mgmt_client (StorageManagementClient )
6667 group = self ._get_resource_group (** kwargs )
67- storage_async_operation = self .client .storage_accounts .begin_create (
68- group .name ,
69- name ,
70- {
71- "sku" : {"name" : self .sku },
72- "location" : self .location ,
73- "kind" : self .kind ,
74- "enable_https_traffic_only" : True ,
75- },
76- )
68+ storage_async_operation = self ._create_account (group .name , name )
69+
7770 self .resource = storage_async_operation .result ()
7871 storage_keys = {v .key_name : v .value for v in self .client .storage_accounts .list_keys (group .name , name ).keys }
7972 self .storage_key = storage_keys ["key1" ]
@@ -126,6 +119,18 @@ def remove_resource(self, name, **kwargs):
126119 )
127120 sleep (30 )
128121
122+ def _create_account (self , resource_group_name , account_name ):
123+ return self .client .storage_accounts .begin_create (
124+ resource_group_name ,
125+ account_name ,
126+ {
127+ "sku" : {"name" : self .sku },
128+ "location" : self .location ,
129+ "kind" : self .kind ,
130+ "enable_https_traffic_only" : True ,
131+ },
132+ )
133+
129134 def _get_resource_group (self , ** kwargs ):
130135 try :
131136 return kwargs .get (self .resource_group_parameter_name )
@@ -137,4 +142,44 @@ def _get_resource_group(self, **kwargs):
137142 raise AzureTestError (template .format (ResourceGroupPreparer .__name__ ))
138143
139144
145+ class BlobAccountPreparer (StorageAccountPreparer ):
146+ def __init__ (
147+ self ,
148+ ** kwargs
149+ ):
150+ self .is_versioning_enabled = kwargs .pop ("is_versioning_enabled" , None )
151+ self .is_last_access_time_enabled = kwargs .pop ("is_last_access_time_enabled" , None )
152+ self .container_retention_days = kwargs .pop ("container_retention_days" , None )
153+
154+ super (BlobAccountPreparer , self ).__init__ (** kwargs )
155+
156+ def _create_account (self , resource_group_name , account_name ):
157+ storage_async_operation = self .client .storage_accounts .begin_create (
158+ resource_group_name ,
159+ account_name ,
160+ {
161+ "sku" : {"name" : self .sku },
162+ "location" : self .location ,
163+ "kind" : self .kind ,
164+ "enable_https_traffic_only" : True ,
165+ },
166+ )
167+
168+ props = BlobServiceProperties ()
169+ if self .is_versioning_enabled is True :
170+ props .is_versioning_enabled = True
171+ if self .container_retention_days :
172+ props .container_delete_retention_policy = DeleteRetentionPolicy (enabled = True ,
173+ days = self .container_retention_days )
174+ if self .is_last_access_time_enabled :
175+ props .last_access_time_tracking_policy = LastAccessTimeTrackingPolicy (enable = True )
176+
177+ if not all (prop is None for prop in props .as_dict ().values ()):
178+ self .client .blob_services .set_service_properties (resource_group_name , account_name , props )
179+
180+ sleep (30 )
181+
182+ return storage_async_operation
183+
184+
140185CachedStorageAccountPreparer = functools .partial (StorageAccountPreparer , use_cache = True , random_name_enabled = True )
0 commit comments