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.

Clase personalizada de Python para utilizar el cliente de GCP

Quiero usar un cliente de GCP en mi propia clase definida. ¿Podrías mostrarme cómo definir un cliente en una clase usando el cliente de GCP?

import os
from google.cloud import bigquery 

class connect_data:
    def __init__(self):
        self.client = None
        self.df = None
        try:
            self.file_path = 'cred.json'
            os.path.isfile(self.file_path)
        except:
            raise ValueError('no encontrado')

    def setup_qcp_client(self):
        if self.client is None:
            self.client = bigquery.Client.from_service_account_json(self.file_path)

    def setup_query(self, text):
        query_output = self.client.query(text[0])
        query_result = query_output.result()
        self.df = query_result.to_dataframe()

Cuando llamo al método setup_query de la clase connect_data, devuelve un error ‘NoneType’ object has no attribute ‘setup_query’.

query = ["SELECT * FROM `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2014`"]
a = connect_data()
a = a.setup_qcp_client()
a.setup_query(query[0])
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basándome en el fragmento de código proporcionado, parece que el error ocurre porque estás asignando la salida del método setup_qcp_client de vuelta a la variable de instancia a. El método setup_qcp_client no retorna nada, solo asigna un valor a la variable self.client. Por lo tanto, a se convierte en None después de que se llama el método setup_qcp_client.

    Para solucionar el problema, puedes modificar el método setup_qcp_client para que retorne el objeto de cliente después de su inicialización. Aquí está el código modificado:

    import os
    from google.cloud import bigquery 
    
    class connect_data:
        def __init__(self):
            self.client = None
            self.df = None
            try:
                self.file_path = 'cred.json'
                os.path.isfile(self.file_path)
            except:
                raise ValueError('not found')
    
        def setup_qcp_client(self):
            if self.client is None:
                self.client = bigquery.Client.from_service_account_json(self.file_path)
            return self.client  # retorna el objeto de cliente después de la inicialización
    
        def setup_query(self, text):
            query_output = self.client.query(text[0])
            query_result = query_output.result()
            self.df = query_result.to_dataframe()
    

    Ahora, cuando llames al método setup_qcp_client, este retornará el objeto de cliente que luego se puede usar para llamar al método setup_query. Aquí está el código actualizado:

    query = ["SELECT * FROM `bigquery-public-data.new_york_taxi_trips.tlc_green_trips_2014`"]
    a = connect_data()
    a.setup_qcp_client()  # obtén el objeto de cliente
    a.setup_query(query)  # llama al método con el parámetro de consulta
    

    Esto debería resolver el problema y ejecutar la funcionalidad deseada.

Comments are closed.