Google DLP: у объекта 'Resource' нет атрибута 'content'

У меня есть скрипт, который я тестировал DLP от Google, с которым вдруг перестал работать:

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 notarealemail@fakegmail.com another email you can reach me at is email@email.com.  "
    task = "inspect"
    test_list.append(test_text)
    test_list.append("bill (555) 202-4578, that one place down the road some_email@notyahoo.com")
    print(test_list)
    result = redact_text(test_list)
    print(result)

Обычно я получаю ответ, но сегодня я получаю ответ:

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'

Я не внес никаких изменений в этот скрипт, и он работал ранее.

1 ответ

Решение

1 мая бета-версия API устарела, так как теперь доступны версии GA.

По большей части ваш скрипт будет работать нормально, но переключитесь на версию 'v2'.

Вторая часть вашего скрипта, которую нужно будет изменить, состоит в том, что ContentItem "aka items" теперь представляет собой просто один элемент, а не список.

Вы можете отправить через отдельные запросы, используя

item = {'value': content_string}

или если вы все еще хотите объединить это в один запрос, вы можете использовать таблицу. (Я не запускал это, так что извините за ошибки при компиляции, но поверхность API такова.)

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()]
    }
Другие вопросы по тегам