आईडीई में कोड पूरा करने की सुविधा

VS Code और PyCharm जैसे IDE, Python भाषा के लिए कोड पूरा करने की सुविधा देते हैं.

google-ads-python लाइब्रेरी, रनटाइम के दौरान GoogleAdsClient क्लास पर गैटर मेथड का इस्तेमाल करके, डाइनैमिक तौर पर प्रोटोबफ़ मैसेज क्लास जनरेट करती है. इससे IDE कोड पूरा करने की उन सुविधाओं पर असर पड़ सकता है जो सोर्स कोड के स्टैटिक विश्लेषण पर निर्भर करती हैं.

स्टैटिक विश्लेषण पर निर्भर रहने वाले कोड पूरा करने वाले टूल के साथ बेहतर तरीके से काम करने के लिए, इनमें से कोई एक काम करें:

  1. डाइनैमिक गेटर मेथड के साथ टाइप एनोटेशन का इस्तेमाल करें (सुझाया गया).
  2. Protobuf मैसेज क्लास और सर्विस क्लाइंट को सीधे इंपोर्ट करें.

टाइप हिंट के साथ डाइनैमिक इंपोर्ट

डाइनैमिक इंपोर्ट का इस्तेमाल करने से यह पक्का होता है कि लाइब्रेरी के अपडेट के दौरान आपका कोड काम करता रहे. टाइप एनोटेशन जोड़ने से, डाइनैमिक इनिशियलाइज़ेशन के फ़ायदों को खोए बिना, IDE कोड को पूरा करने की सुविधा मिलती है:

from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.v26.resources.types.campaign import (
    Campaign,
)

client = GoogleAdsClient.load_from_storage()

# Type hints allow the IDE to provide code completion suggestions while
# retaining dynamic class generation.
campaign: Campaign = client.get_type("Campaign")

सीधे तौर पर इंपोर्ट किए गए डेटा

प्रोटोबफ़ मैसेज क्लास को सीधे भी इंपोर्ट किया जा सकता है. इस तरीके से, गेटर मेथड का इस्तेमाल किए बिना, IDE कोड को पूरा करने की सुविधा मिलती है:

from google.ads.googleads.v26.resources import Campaign

# The Campaign class is imported directly, enabling the IDE to read the
# class definition and make code completion suggestions.
campaign = Campaign()

सीधे तौर पर इंपोर्ट करने के नुकसान

जनरेट की गई क्लास को सीधे तौर पर इंपोर्ट करने से, कोड अपने-आप पूरा होने की सुविधा को मदद मिलती है. हालांकि, इससे कुछ नुकसान भी होते हैं:

  1. ढूंढना मुश्किल: यह हमेशा साफ़ तौर पर नहीं पता चलता कि कोई क्लास किस मॉड्यूल में मौजूद है. इसलिए, सही इंपोर्ट पाथ ढूंढना मुश्किल हो सकता है.
  2. अपग्रेड के दौरान गड़बड़ी होने का खतरा: जनरेट की गई क्लास की डायरेक्ट्री का स्ट्रक्चर, क्लाइंट लाइब्रेरी के नए वर्शन के साथ बदल सकता है. अगर क्लास को सीधे तौर पर इंपोर्ट किया जाता है, तो अपग्रेड करने पर आपका कोड काम करना बंद कर सकता है. हालांकि, गेटर मेथड का इस्तेमाल करने वाले कोड पर इस तरह के बदलावों का असर नहीं पड़ता.
  3. मैन्युअल तरीके से शुरू करना ज़रूरी है: get_service मेथड, सेवाओं को शुरू करता है. इसके लिए, वह पुष्टि करने की प्रोसेस, ट्रांसपोर्ट सेटिंग, और gRPC इंटरसेप्टर का इस्तेमाल करता है. gRPC इंटरसेप्टर, login-customer-id और linked-customer-id जैसे हेडर अटैच करते हैं, लॉगिंग को मैनेज करते हैं, और गड़बड़ियों को GoogleAdsException में रैप करते हैं. इसके बाद, वह सेवाओं को वापस भेजता है. अगर सेवाओं को सीधे तौर पर इंपोर्ट और इंस्टैंशिएट किया जाता है, तो इंटरसेप्टर को बायपास कर दिया जाता है. साथ ही, आपको क्रेडेंशियल और ट्रांसपोर्ट चैनलों को मैन्युअल तरीके से कॉन्फ़िगर करना होगा:

    from google.ads.googleads.v26.services.services import (
        campaign_service as campaign_service_module,
    )
    
    # Dynamic service getter (initializes credentials, transport, and gRPC
    # interceptors automatically).
    campaign_service = client.get_service("CampaignService")
    
    # Direct service client import (requires manual credential and interceptor
    # configuration).
    campaign_service_client = campaign_service_module.CampaignServiceClient(
        credentials=client.credentials,
    )