VS Code ও PyCharm-এর মতো IDE-তে Python ভাষার জন্য বিল্ট-ইন কোড সম্পূর্ণ করার সুবিধা আছে।
google-ads-python লাইব্রেরি GoogleAdsClient ক্লাসে গেটার পদ্ধতি ব্যবহার করে রানটাইমে
ডায়নামিক প্রোটোবাফ মেসেজ ক্লাস জেনারেট করে,
যা সোর্স কোডের স্ট্যাটিক বিশ্লেষণের উপর নির্ভর করে এমন IDE কোড সম্পূর্ণ করার ফিচারকে
বাধা দিতে পারে।
স্ট্যাটিক অ্যানালিসিসের উপর নির্ভর করে এমন কোড সম্পূর্ণ করার টুলের সাথে মানানসই করার জন্য, আপনি এগুলি করতে পারেন:
- ডাইনামিক গেটার মেথড-এর সাথে টাইপ অ্যানোটেশন ব্যবহার করুন (সাজেস্ট করা হয়)।
- সরাসরি 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")
সরাসরি ইমপোর্ট করা
এছাড়াও, আপনি সরাসরি protobuf মেসেজ ক্লাস ইমপোর্ট করতে পারবেন। এই পদ্ধতি গেটার পদ্ধতি ব্যবহার না করেই 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()
সরাসরি ইমপোর্ট করার অসুবিধা
জেনারেট করা ক্লাস সরাসরি ইমপোর্ট করলে কোড সম্পূর্ণ করার ব্যাপারে সাহায্য পাওয়া যায়, তবে এর সাথে সাথে কিছু সীমাবদ্ধতাও থাকে:
- লোকেট করা কঠিন: কোনও প্রদত্ত ক্লাস কোন মডিউলে অবস্থিত তা সবসময় স্পষ্ট নয়, তাই সঠিক ইমপোর্ট পাথ খুঁজে পাওয়া কঠিন হতে পারে।
- আপগ্রেড জুড়ে ভঙ্গুর: জেনারেট করা ক্লাসের ডিরেক্টরি স্ট্রাকচার ক্লায়েন্ট লাইব্রেরির নতুন ভার্সনের সাথে পরিবর্তিত হতে পারে। আপনি সরাসরি ক্লাস ইমপোর্ট করলে, আপগ্রেড করার সময় আপনার কোড কাজ নাও করতে পারে, তবে গেটার পদ্ধতি ব্যবহার করে এমন কোড এই ধরনের পরিবর্তনের ফলে প্রভাবিত হয় না।
ম্যানুয়ালি ইনিশিয়ালাইজ করতে হবে:
get_serviceপদ্ধতিটি যাচাইকরণ, ট্রান্সপোর্ট সেটিংস ও 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, )