boto3 लाइब्रेरी कई फ़ैक्टरी विधियाँ प्रदान करती है जो संसाधन लौटाती हैं। उदाहरण के लिए:

dynamo = (
    boto3
    .resource('dynamodb')
    .Table(os.environ['DYNAMODB_TABLE'])
)

मैं उन संसाधनों को एनोटेट करना चाहता हूं ताकि मैं बेहतर प्रकार की जांच और पूर्णता प्राप्त कर सकूं, लेकिन केवल एक ही प्रकार जो मुझे मिल सका वह था from boto3.dynamodb.table import TableResource

जब मैं वह एनोटेशन जोड़ता हूं:

dynamo: TableResource = (
    boto3
    .resource('dynamodb')
    .Table(os.environ['DYNAMODB_TABLE'])
)

स्वतः-पूर्णता द्वारा प्रदान की जाने वाली एकमात्र विधि batch_writer(self, overwrite_by_pkeys) है, भले ही दस्तावेज़ कई अन्य लोगों को सूचीबद्ध करता है

क्या एनोटेशन के रूप में उपयोग करने के लिए यह गलत वर्ग है? टर्मिनल में उस चर प्रकार का निरीक्षण करने पर मैं देख सकता था कि यह <class 'boto3.resources.factory.dynamodb.Table'> था, लेकिन उस प्रकार को स्थिर रूप से प्राप्त करना संभव नहीं लगता।

8
villasv 29 मार्च 2018, 22:10

2 जवाब

सबसे बढ़िया उत्तर

प्रकार और API विधियां स्थिर रूप से मौजूद नहीं हैं। boto3 डेटा संचालित आर्किटेक्चर का उपयोग करता है, एक अत्यंत गतिशील डिज़ाइन जो JSON प्रारूप में डेटा का उपयोग करता है (यहां एक उदाहरण है) यह निर्धारित करने के लिए कि कौन से API कॉल संभव हैं। वे नए एपीआई परिवर्तनों को शामिल करने के लिए पुस्तकालय को अद्यतन करना आसान बनाने के लिए ऐसा करते हैं। मुझे यकीन नहीं है लेकिन मुझे लगता है कि वे अन्य भाषाओं में एसडीके के लिए एक ही रणनीति का उपयोग कर सकते हैं, इसलिए कई एसडीके में बदलाव छोटे डुप्लिकेट काम के साथ किए जा सकते हैं।

यहाँ उनके ब्लॉग से एक उद्धरण है:

पुस्तकालयों को उपयोगकर्ताओं की ज़रूरतों में बदलाव के साथ-साथ उन प्लेटफार्मों में भी बदलाव करना चाहिए जिन पर वे चलते हैं। जैसे-जैसे एडब्ल्यूएस का विकास पिछले कुछ वर्षों में तेज हुआ, हमारे एपीआई को अपडेट करने की गति भी तेज हो गई है। इसके लिए हमें हर हफ्ते कई एपीआई अपडेट के लिए जल्दी से समर्थन देने के लिए एक स्केलेबल विधि तैयार करने की आवश्यकता है, और यही कारण है कि Boto3 में AWS API समर्थन लगभग पूरी तरह से डेटा-संचालित है। Boto3 में 'क्लाइंट' वर्ग हैं जो JSON-स्वरूपित API मॉडल द्वारा संचालित होते हैं जो AWS API का वर्णन करते हैं, इसलिए अधिकांश नई सेवा सुविधाओं के लिए केवल एक साधारण मॉडल अपडेट की आवश्यकता होती है। यह हमें एपीआई परिवर्तनों के लिए सुसंगत और विश्वसनीय तरीके से बहुत जल्दी समर्थन देने की अनुमति देता है।

आप डिबगर में resource.Table जैसे मेथड कॉल में कदम रखकर भी इसकी एक झलक पा सकते हैं।

8
Alex Hall 29 मार्च 2018, 19:47

एलेक्स हॉल के जवाब के अलावा। इस समस्या को हल करने के लिए फॉरवर्ड रेफरेंस का उपयोग किया जा सकता है।

dynamo: 'boto3.resources.factory.dynamodb.Table' = (
    boto3
    .resource('dynamodb')
    .Table(os.environ['DYNAMODB_TABLE']))
3
El Ruso 1 पद 2018, 17:41