私は、Google AppEngineのプロジェクトに取り組んでいると私は最近、私のpylintのバージョンをアップグレードする:pylint、コルーチン、デコレータと型推論
No config file found, using default configuration
pylint 1.5.6,
astroid 1.4.6
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
これは、いくつかの型推論が壊れているようです。具体的には、GAEのndb
uses a decorator and a generator function to return a "Future" objectこのような:
@ndb.tasklet
def coroutine_like(item_id):
# do something here...
item = yield EntityType.get_by_id_async(item_id)
raise ndb.Return(item)
が、私はこのような何か、それを呼ぶかもしれない:以前
future = coroutine_like('12345')
# Do other stuff
entity = future.get_result()
、私はここリンターに問題を持っていませんでした。今私は取得しています:
E: 42,17: Generator 'generator' has no 'get_result' member (no-member)
E: 48,17: Generator 'generator' has no 'get_result' member (no-member)
E: 60,25: Generator 'generator' has no 'get_result' member (no-member)
E: 74, 8: Generator 'generator' has no 'wait' member (no-member)
E: 88, 8: Generator 'generator' has no 'wait' member (no-member)
E: 95,17: Generator 'generator' has no 'get_result' member (no-member)
私は私が個別にそれらのラインを# pylint: disable=no-member
ことができますが、それは面倒になることを実現します。また、モジュールレベルで抑止コードを追加することで、モジュールレベルでの警告を抑止でき、私はpylintrcファイルを変更して警告をグローバルに抑制することができます。私は本当にそれらのことをしたくありません。私は幾分(何らかの形で)@ndb.tasklet
デコレータリターンndb.Future
インスタンスで装飾されたものがpylintに伝えます。私は、ways to register type-inferencing helpers がpylintであることを見てきましたが、ジェネレータ関数のデコレータでそれらを動作させる方法がわかりません。かなり古いブログ記事です
注...私はlogilab.astng
が使用されなくなったと思いませんし、今は代わりにastroid
を使用しますが、それは私にかなり近いすぎを得ることはありません私が探していると答えて...
この回答ありがとうございます。私はまだここで私が持っている余分な瞬間にそれを消化しています。どこかのサンプルのリポジトリがありますか(おそらく、pylintのコードベースにありますか?)私はこれらのことがどのように行われているか見てみることができますか? – mgilson
残念なことに、いくつかの構造化されたサンプルを見つける最良の場所は、まだアストロイドの脳(https://github.com/PyCQA/astroid/tree/master/astroid/brain)であり、一般的にアストロイドのコードベースを抜けています。 #pylint-dev(freenode) – PCManticore
Awesomeでも同様の結果が得られるかもしれません。これらの例をありがとう。私は一緒に働くことができるものをハックすることができました(以下の別の答えとして掲示)。もしあなたがそこで怪しいと思われるものを見たら、私に知らせてください。すべてが合理的に見える場合、私は 'ndb'と' pylint'をもっとうまく使い、OSSコミュニティの残りの部分に別のレポを作成しようとしているかもしれません。 – mgilson