Ошибка атрибута: объект ‘CloudSchedulerClient’ не имеет атрибута ‘location_path’

#python #google-cloud-platform #google-cloud-functions #google-cloud-scheduler

# #python #google-облачная платформа #google-cloud-функции #google-cloud-scheduler

Вопрос:

Мне нужно проверить текущие задания облачного планировщика в моем проекте. И используя эти два фрагмента, но я не понимаю, почему я получаю ошибку, т.е.,

{Ошибка атрибута: объект ‘CloudSchedulerClient’ не имеет атрибута ‘location_path’}

И я использовал этот код из документации Google cloud.

 from google.cloud.scheduler import CloudSchedulerClient

def display_cloud_scheduler(project):
  client = CloudSchedulerClient.from_service_account_json(
  r"./xxxx.json")
  print(client)
  parent = client.location_path(project, 'us-east1')
  for element in client.list_jobs(parent):
    print(element)
 
 from google.cloud import scheduler_v1

def display_cloud_scheduler(project):
  client = scheduler_v1.CloudSchedulerClient.from_service_account_json(
  r"./xxxx.json")
  print(client)
  parent = client.location_path(project, 'us-east1')
  for element in client.list_jobs(parent):
    print(element)
 

У кого-нибудь есть идеи, что я делаю не так?

Ответ №1:

Не уверен, какой документации вы следуете, но в официальных документах библиотеки упоминается, что способ, которым вы работаете, — старый, и вам следует перейти на новый метод. Это объясняется в их руководстве по миграции:

Перед

 from google.cloud import scheduler

client = scheduler.CloudSchedulerClient()

parent = client.location_path("<PROJECT_ID>", "<LOCATION>")
job = {
       'app_engine_http_target': {
           'app_engine_routing': {
               'service': service_id
           },
           'relative_uri': '/log_payload',
           'http_method': 'POST',
           'body': 'Hello World'.encode()
       },
       'schedule': '* * * * *',
       'time_zone': 'America/Los_Angeles'
   }

response = client.create_job(parent, job)
 

После

 from google.cloud import scheduler

client = scheduler.CloudSchedulerClient()
parent = "projects/<PROJECT_ID>/locations/<LOCATION>"
job = {
       'app_engine_http_target': {
           'app_engine_routing': {
               'service': service_id
           },
           'relative_uri': '/log_payload',
           'http_method': 'POST',
           'body': 'Hello World'.encode()
       },
       'schedule': '* * * * *',
       'time_zone': 'America/Los_Angeles'
   }

response = client.create_job(
   request={
       "parent": parent,
       "job": job
   }
)
 

Поэтому я бы посоветовал проверить ваш код и использовать новые методы. Кроме того, в этом руководстве по миграции упоминается следующее о сценарии миграции, который может помочь сделать эти вещи проще:

Скрипт fixup_scheduler_{версия}_keywords.py поставляется вместе с библиотекой. Он ожидает входной каталог (с кодом для преобразования) и пустой целевой каталог.

$ fixup_scheduler_v1_keywords.py --input-directory .samples/ --output-directory samples/