Skip to content

Commit f5479c0

Browse files
authored
Merge pull request #126 from RachelTucker/4-0-ids-request-payload
SA-195: Added request payload to mark blob and clear blob commands
2 parents 9d6b198 + b4b50b2 commit f5479c0

2 files changed

Lines changed: 144 additions & 10 deletions

File tree

ds3/ds3.py

Lines changed: 96 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,22 @@ def to_xml(self):
137137
return xml_part_list
138138

139139

140+
class IdsList(object):
141+
def __init__(self, id_list):
142+
for cur_id in id_list:
143+
if not isinstance(cur_id, basestring):
144+
raise TypeError("Ids should only contain strings")
145+
self.id_list = id_list
146+
147+
def to_xml(self):
148+
xml_id_list = xmldom.Element('Ids')
149+
for cur_id in self.id_list:
150+
xml_cur_id = xmldom.Element('Id')
151+
xml_cur_id.text = cur_id
152+
xml_id_list.append(xml_cur_id)
153+
return xml_id_list
154+
155+
140156
# Type Descriptors
141157

142158

@@ -3463,8 +3479,15 @@ def __init__(self, s3_data_replication_rule, initial_data_placement=None, max_bl
34633479

34643480
class ClearSuspectBlobAzureTargetsSpectraS3Request(AbstractRequest):
34653481

3466-
def __init__(self, force=None):
3482+
def __init__(self, id_list, force=None):
34673483
super(ClearSuspectBlobAzureTargetsSpectraS3Request, self).__init__()
3484+
if id_list is not None:
3485+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3486+
raise TypeError(
3487+
'ClearSuspectBlobAzureTargetsSpectraS3Request should have request payload of type: list of strings')
3488+
xml_id_list = IdsList(id_list)
3489+
self.body = xmldom.tostring(xml_id_list.to_xml())
3490+
34683491
if force is not None:
34693492
self.query_params['force'] = force
34703493
self.path = '/_rest_/suspect_blob_azure_target'
@@ -3473,8 +3496,15 @@ def __init__(self, force=None):
34733496

34743497
class ClearSuspectBlobDs3TargetsSpectraS3Request(AbstractRequest):
34753498

3476-
def __init__(self, force=None):
3499+
def __init__(self, id_list, force=None):
34773500
super(ClearSuspectBlobDs3TargetsSpectraS3Request, self).__init__()
3501+
if id_list is not None:
3502+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3503+
raise TypeError(
3504+
'ClearSuspectBlobDs3TargetsSpectraS3Request should have request payload of type: list of strings')
3505+
xml_id_list = IdsList(id_list)
3506+
self.body = xmldom.tostring(xml_id_list.to_xml())
3507+
34783508
if force is not None:
34793509
self.query_params['force'] = force
34803510
self.path = '/_rest_/suspect_blob_ds3_target'
@@ -3483,8 +3513,15 @@ def __init__(self, force=None):
34833513

34843514
class ClearSuspectBlobPoolsSpectraS3Request(AbstractRequest):
34853515

3486-
def __init__(self, force=None):
3516+
def __init__(self, id_list, force=None):
34873517
super(ClearSuspectBlobPoolsSpectraS3Request, self).__init__()
3518+
if id_list is not None:
3519+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3520+
raise TypeError(
3521+
'ClearSuspectBlobPoolsSpectraS3Request should have request payload of type: list of strings')
3522+
xml_id_list = IdsList(id_list)
3523+
self.body = xmldom.tostring(xml_id_list.to_xml())
3524+
34883525
if force is not None:
34893526
self.query_params['force'] = force
34903527
self.path = '/_rest_/suspect_blob_pool'
@@ -3493,8 +3530,15 @@ def __init__(self, force=None):
34933530

34943531
class ClearSuspectBlobS3TargetsSpectraS3Request(AbstractRequest):
34953532

3496-
def __init__(self, force=None):
3533+
def __init__(self, id_list, force=None):
34973534
super(ClearSuspectBlobS3TargetsSpectraS3Request, self).__init__()
3535+
if id_list is not None:
3536+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3537+
raise TypeError(
3538+
'ClearSuspectBlobS3TargetsSpectraS3Request should have request payload of type: list of strings')
3539+
xml_id_list = IdsList(id_list)
3540+
self.body = xmldom.tostring(xml_id_list.to_xml())
3541+
34983542
if force is not None:
34993543
self.query_params['force'] = force
35003544
self.path = '/_rest_/suspect_blob_s3_target'
@@ -3503,8 +3547,15 @@ def __init__(self, force=None):
35033547

35043548
class ClearSuspectBlobTapesSpectraS3Request(AbstractRequest):
35053549

3506-
def __init__(self, force=None):
3550+
def __init__(self, id_list, force=None):
35073551
super(ClearSuspectBlobTapesSpectraS3Request, self).__init__()
3552+
if id_list is not None:
3553+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3554+
raise TypeError(
3555+
'ClearSuspectBlobTapesSpectraS3Request should have request payload of type: list of strings')
3556+
xml_id_list = IdsList(id_list)
3557+
self.body = xmldom.tostring(xml_id_list.to_xml())
3558+
35083559
if force is not None:
35093560
self.query_params['force'] = force
35103561
self.path = '/_rest_/suspect_blob_tape'
@@ -3810,8 +3861,15 @@ def __init__(self, bucket_id=None, storage_domain_id=None):
38103861

38113862
class MarkSuspectBlobAzureTargetsAsDegradedSpectraS3Request(AbstractRequest):
38123863

3813-
def __init__(self, force=None):
3864+
def __init__(self, id_list, force=None):
38143865
super(MarkSuspectBlobAzureTargetsAsDegradedSpectraS3Request, self).__init__()
3866+
if id_list is not None:
3867+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3868+
raise TypeError(
3869+
'MarkSuspectBlobAzureTargetsAsDegradedSpectraS3Request should have request payload of type: list of strings')
3870+
xml_id_list = IdsList(id_list)
3871+
self.body = xmldom.tostring(xml_id_list.to_xml())
3872+
38153873
if force is not None:
38163874
self.query_params['force'] = force
38173875
self.path = '/_rest_/suspect_blob_azure_target'
@@ -3820,8 +3878,15 @@ def __init__(self, force=None):
38203878

38213879
class MarkSuspectBlobDs3TargetsAsDegradedSpectraS3Request(AbstractRequest):
38223880

3823-
def __init__(self, force=None):
3881+
def __init__(self, id_list, force=None):
38243882
super(MarkSuspectBlobDs3TargetsAsDegradedSpectraS3Request, self).__init__()
3883+
if id_list is not None:
3884+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3885+
raise TypeError(
3886+
'MarkSuspectBlobDs3TargetsAsDegradedSpectraS3Request should have request payload of type: list of strings')
3887+
xml_id_list = IdsList(id_list)
3888+
self.body = xmldom.tostring(xml_id_list.to_xml())
3889+
38253890
if force is not None:
38263891
self.query_params['force'] = force
38273892
self.path = '/_rest_/suspect_blob_ds3_target'
@@ -3830,8 +3895,15 @@ def __init__(self, force=None):
38303895

38313896
class MarkSuspectBlobPoolsAsDegradedSpectraS3Request(AbstractRequest):
38323897

3833-
def __init__(self, force=None):
3898+
def __init__(self, id_list, force=None):
38343899
super(MarkSuspectBlobPoolsAsDegradedSpectraS3Request, self).__init__()
3900+
if id_list is not None:
3901+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3902+
raise TypeError(
3903+
'MarkSuspectBlobPoolsAsDegradedSpectraS3Request should have request payload of type: list of strings')
3904+
xml_id_list = IdsList(id_list)
3905+
self.body = xmldom.tostring(xml_id_list.to_xml())
3906+
38353907
if force is not None:
38363908
self.query_params['force'] = force
38373909
self.path = '/_rest_/suspect_blob_pool'
@@ -3840,8 +3912,15 @@ def __init__(self, force=None):
38403912

38413913
class MarkSuspectBlobS3TargetsAsDegradedSpectraS3Request(AbstractRequest):
38423914

3843-
def __init__(self, force=None):
3915+
def __init__(self, id_list, force=None):
38443916
super(MarkSuspectBlobS3TargetsAsDegradedSpectraS3Request, self).__init__()
3917+
if id_list is not None:
3918+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3919+
raise TypeError(
3920+
'MarkSuspectBlobS3TargetsAsDegradedSpectraS3Request should have request payload of type: list of strings')
3921+
xml_id_list = IdsList(id_list)
3922+
self.body = xmldom.tostring(xml_id_list.to_xml())
3923+
38453924
if force is not None:
38463925
self.query_params['force'] = force
38473926
self.path = '/_rest_/suspect_blob_s3_target'
@@ -3850,8 +3929,15 @@ def __init__(self, force=None):
38503929

38513930
class MarkSuspectBlobTapesAsDegradedSpectraS3Request(AbstractRequest):
38523931

3853-
def __init__(self, force=None):
3932+
def __init__(self, id_list, force=None):
38543933
super(MarkSuspectBlobTapesAsDegradedSpectraS3Request, self).__init__()
3934+
if id_list is not None:
3935+
if not (isinstance(cur_id, basestring) for cur_id in id_list):
3936+
raise TypeError(
3937+
'MarkSuspectBlobTapesAsDegradedSpectraS3Request should have request payload of type: list of strings')
3938+
xml_id_list = IdsList(id_list)
3939+
self.body = xmldom.tostring(xml_id_list.to_xml())
3940+
38553941
if force is not None:
38563942
self.query_params['force'] = force
38573943
self.path = '/_rest_/suspect_blob_tape'

tests/clientTests.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,6 +1384,14 @@ def read(self):
13841384

13851385

13861386
class ResponseParsingTestCase(unittest.TestCase):
1387+
@staticmethod
1388+
def __get_test_ids():
1389+
return ['obj1', 'obj2', 'obj3']
1390+
1391+
@staticmethod
1392+
def __get_marshaled_ids():
1393+
return '<Ids><Id>obj1</Id><Id>obj2</Id><Id>obj3</Id></Ids>'
1394+
13871395
def testGetJobToReplicate(self):
13881396
content = "some content to test response parsing"
13891397

@@ -1411,3 +1419,43 @@ def testVerifyPhysicalPlacementRequestPayload(self):
14111419

14121420
request = VerifyPhysicalPlacementForObjectsSpectraS3Request(bucket_name="bucketName", object_list=l)
14131421
self.assertEqual(request.body, '<Objects><Object Name="obj1" /><Object Name="obj2" /></Objects>')
1422+
1423+
def testClearSuspectBlobAzureTargetsRequestPayload(self):
1424+
request = ClearSuspectBlobAzureTargetsSpectraS3Request(id_list=self.__get_test_ids())
1425+
self.assertEqual(request.body, self.__get_marshaled_ids())
1426+
1427+
def testClearSuspectBlobDs3TargetsRequestPayload(self):
1428+
request = ClearSuspectBlobDs3TargetsSpectraS3Request(id_list=self.__get_test_ids())
1429+
self.assertEqual(request.body, self.__get_marshaled_ids())
1430+
1431+
def testClearSuspectBlobPoolsRequestPayload(self):
1432+
request = ClearSuspectBlobPoolsSpectraS3Request(id_list=self.__get_test_ids())
1433+
self.assertEqual(request.body, self.__get_marshaled_ids())
1434+
1435+
def testClearSuspectBlobS3TargetsRequestPayload(self):
1436+
request = ClearSuspectBlobS3TargetsSpectraS3Request(id_list=self.__get_test_ids())
1437+
self.assertEqual(request.body, self.__get_marshaled_ids())
1438+
1439+
def testClearSuspectBlobTapesRequestPayload(self):
1440+
request = ClearSuspectBlobTapesSpectraS3Request(id_list=self.__get_test_ids())
1441+
self.assertEqual(request.body, self.__get_marshaled_ids())
1442+
1443+
def testMarkSuspectBlobAzureTargetsAsDegradedRequestPayload(self):
1444+
request = MarkSuspectBlobAzureTargetsAsDegradedSpectraS3Request(id_list=self.__get_test_ids())
1445+
self.assertEqual(request.body, self.__get_marshaled_ids())
1446+
1447+
def testMarkSuspectBlobPoolsAsDegradedRequestPayload(self):
1448+
request = MarkSuspectBlobPoolsAsDegradedSpectraS3Request(id_list=self.__get_test_ids())
1449+
self.assertEqual(request.body, self.__get_marshaled_ids())
1450+
1451+
def testMarkSuspectBlobDs3TargetsAsDegradedRequestPayload(self):
1452+
request = MarkSuspectBlobDs3TargetsAsDegradedSpectraS3Request(id_list=self.__get_test_ids())
1453+
self.assertEqual(request.body, self.__get_marshaled_ids())
1454+
1455+
def testMarkSuspectBlobS3TargetsAsDegradedRequestPayload(self):
1456+
request = MarkSuspectBlobS3TargetsAsDegradedSpectraS3Request(id_list=self.__get_test_ids())
1457+
self.assertEqual(request.body, self.__get_marshaled_ids())
1458+
1459+
def testMarkSuspectBlobTapesAsDegradedRequestPayload(self):
1460+
request = MarkSuspectBlobTapesAsDegradedSpectraS3Request(id_list=self.__get_test_ids())
1461+
self.assertEqual(request.body, self.__get_marshaled_ids())

0 commit comments

Comments
 (0)