47240


GCPのデータストアにアクセスするコードを書いていまして、３日前までエラーなく動いていたのですが、2日前から急に後述のエラーがでるようになりました。  
本日、pip uninstallしてpip installし直したところエラーは消えました。  
このライブラリは先週にインストールしたもので、それ以降OSやPythonやライブラリのアップデートをした記憶はありません。

### 質問

  * なぜ急にエラーになるようになったのか  
特にアップデートなどしてないのですが、挙動がかわることなんてないと思ってます。なにか思い当たる原因があればアドバイスいただきたいです

  * なぜインストールし直したら直ったのか  
ライブラリの中がなにか変になってたということなのでしょうか。(まぁ結論はそうで、結局は上の質問になると思うのですが)

### データストアにアクセスするコード

[code]

    from google.cloud import datastore
    client = datastore.Client(project='my_project_id')
    query = client.query(kind='Sample')
    query.add_filter('user_id', '=', 1)
    query.fetch(limit=5)
    
[/code]

### エラー

[code]

    AttributeError                            Traceback (most recent call last)
    <ipython-input-16-a55ac532af71> in <module>()
    ----> 7 query.fetch(limit=5):
    
    /anaconda3/lib/python3.6/site-packages/google/api_core/page_iterator.py in _items_iter(self)
        197     def _items_iter(self):
        198         """Iterator for each item returned."""
    --> 199         for page in self._page_iter(increment=False):
        200             for item in page:
        201                 self.num_results += 1
    
    /anaconda3/lib/python3.6/site-packages/google/api_core/page_iterator.py in _page_iter(self, increment)
        228             Page: each page of items from the API.
        229         """
    --> 230         page = self._next_page()
        231         while page is not None:
        232             self.page_number += 1
    
    /anaconda3/lib/python3.6/site-packages/google/cloud/datastore/query.py in _next_page(self)
        499         )
        500         entity_pbs = self._process_query_results(response_pb)
    --> 501         return page_iterator.Page(self, entity_pbs, self._item_to_value)
        502 
        503 
    
    AttributeError: 'Iterator' object has no attribute '_item_to_value'
    
[/code]

### ぐぐったところ、、、

イシューは見つかりましたが、再現しないということで修正されずにクローズされてました。  
<https://github.com/GoogleCloudPlatform/google-cloud-python/issues/5169>


CC BY-SA 4.0
2018-08-03T05:43:23.717
47205
2018-08-04T09:54:50.240
29267
question
python google-cloud
Pythonのgoogle-cloud-datastoreライブラリで急にAttributeErrorが発生するようになった


`GitHub`の`google-cloud-python`のページを見ると`google-cloud-datastore
1.7.0`が9日前に公開されていて、変更の最初に 「Do not pass 'offset' once the query iterator has a
cursor ([#5503](https://github.com/GoogleCloudPlatform/google-cloud-
python/pull/5503))」というのがあります。これが質問で発生したエラーに関連したバグをフィックスしたものだと思われます。

`Cloud`の場合は、こちらがアップデートしなくても`Cloud`側がアップデートするので稀にですがこういうことが発生します。`datastore`は近いうちに`firestore`にアップグレードされるということなので`datastore`で変更作業が行われていてもおかしくないし、その過程で過去からあったバグが表面化することは十分に考えられることです。

このようなある日突然エラーになるケースでは、対応としてはログの監視が重要になりますが、GCPの場合は、`Stackdriver
Logging`が無料で使えるし使いやすいので、比較的対応しやすいのではないかと感じています。


CC BY-SA 4.0
2018-08-04T09:54:50.240
47240
2018-08-04T09:54:50.240
15171
47205
answer