I have a script I've been testing out Google's DLP with that has suddenly stopped working:
def redact_text(text_list):
service = build_client()
content = service.content()
items = []
for text in text_list:
items.append({
"type": "text/plain",
"value": text
})
data = { "items":items,
"inspectConfig": {
"minLikelihood": "LIKELIHOOD_UNSPECIFIED",
"maxFindings": 0,
"includeQuote": False
},
"replaceConfigs": [{'replaceWith': redacts[info], 'infoType':{'name': info}} for info in redacts.keys()]
}
request = content.redact(body=data)
response = request.execute()
return response
def build_client():
scopes = ['https://www.googleapis.com/auth/cloud-platform']
credentials = ServiceAccountCredentials.from_json_keyfile_name('cred_name.json', scopes=scopes)
http_auth = credentials.authorize(Http())
service = build('dlp', 'v2beta1', http=http_auth)
return service
if __name__ == '__main__':
test_list = []
test_text = "My name is Jenny and my number is (555) 867-5309, you can also email me at [email protected] another email you can reach me at is [email protected]. "
task = "inspect"
test_list.append(test_text)
test_list.append("bill (555) 202-4578, that one place down the road [email protected]")
print(test_list)
result = redact_text(test_list)
print(result)
Normally I'll get back a response, but today I've been getting back:
Traceback (most recent call last):
File "test_dlp.py", line 82, in <module>
response = redact_text(text_list)
File "test_dlp.py", line 42, in redact_text
content = service.content()
AttributeError: 'Resource' object has no attribute 'content'
I've made no changes to this script, and it has worked previously.
On May 1st the beta apis were deprecated as the GA versions are now available.
For the most part your script will work fine, but switch to version 'v2'.
The second part of your script that will need to change is that ContentItem "aka items" is just a single item now, not a list.
You can either send through individual requests using
item = {'value': content_string}
or if you still wish to batch this into a single request, you can use a table. (i didn't run this so excuse compile typos, but the api surface is this.)
var rows = []
var headers = [{"name": "column1"}]
for text in text_list:
rows.append({
"string_value": text,
})
item = {
"table": {
"headers": headers,
"rows": rows
}
}
data = { "item":item,
"inspectConfig": {
"minLikelihood": "LIKELIHOOD_UNSPECIFIED",
"maxFindings": 0,
"includeQuote": False
},
"replaceConfigs": [{'replaceWith': redacts[info], 'infoType':{'name': info}} for info in redacts.keys()]
}