es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función en la nube no se está implementando correctamente.

Estoy tratando de parchear (actualizar) un trabajo presente en el programador de la nube desde una función mencionada a continuación. Esta función utiliza la API para actualizar el atributo del trabajo (access_token). Sin embargo, no se está implementando correctamente. ¿Hay algún problema en el código?

import base64
from pprint import pprint

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

def hello_pubsub(event, context):

    credentials = GoogleCredentials.get_application_default()
    service = discovery.build('cloudscheduler', 'v1', credentials=credentials)

    name = 'projects/XYZ/locations/TempLocation/jobs/TestTopic' 
    job_body = {
        "name": "temp",
        "description": "temp",
        "pubsubTarget": {
            "topicName": "projects/XYZ/topics/TestTopic",
            "attributes": {
                "access_token": "blabla"
            }
        },
        "httpTarget": {
            "uri": "https://cloudscheduler.googleapis.com/v1/projects/XYZ/locations/TempLocation/jobs/TestTopic",
            "httpMethod": "POST",
            "headers": {
                "Content-Type": "application/json",
            },
            "oauthToken": {
                "serviceAccountEmail": "xyz@gmail.com",
            }       
        }
    }

    request = service.projects().locations().jobs().patch(name=name, body=job_body)
    response = request.execute()
    pprint(response)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código:

    • La asignación de valor a la clave job_body['description'] no tiene comillas alrededor.
    • La clave job_body['name'] no es necesaria al actualizar un trabajo.
    • El valor de job_body['httpTarget']['uri'] solo debe incluir la ruta del trabajo, no la URL completa.
    • La clave job_body['httpTarget']['oauthToken'] debe ser job_body['oauthToken'].

    Aquí está el código corregido:

    import base64
    from pprint import pprint
    
    from googleapiclient import discovery
    from oauth2client.client import GoogleCredentials
    
    def hello_pubsub(event, context):
    
        credentials = GoogleCredentials.get_application_default()
        service = discovery.build('cloudscheduler', 'v1', credentials=credentials)
    
        name = 'projects/XYZ/locations/TempLocation/jobs/TestTopic'
        job_body = {
          "pubsubTarget": {
            "topicName": "projects/XYZ/topics/TestTopic",
            "attributes": {
              "access_token": "blabla"
            }
          },
          "httpTarget": {
            "uri": "/v1/projects/XYZ/locations/TempLocation/jobs/TestTopic",
            "httpMethod": "POST",
            "headers": {
              "Content-Type": "application/json"
            },
            "oauthToken": {
              "serviceAccountEmail": "xyz@gmail.com"
            }
          }
        }
    
        request = service.projects().locations().jobs().patch(name=name, body=job_body)
        response = request.execute()
        pprint(response)
    

Comments are closed.