2016-05-13 4 views
0

クラスがあると言うと、Shardとなり、メソッドの戻り値はlistShardオブジェクトになるはずです。カスタムクラスにどのようにアノテーションを付けますか?

my_method(args) -> ??: 

はPycharm私はtypingからListをインポートし、(エラーがシャードを見つけることができないことに関連している)List[Shard]指定されたエラーを蹴ります。ここで

は、問題のメソッドです:

def _return_shards(self, sql: str = None) -> List[Shard]: 
     """ 
     Queries the database to return a sequence of all the database clusters 
     and shards, and then creates Shard objects with the information. 

     @type conn_info: dict 
     :param conn_info: Database information containing the host, port, user, 
     database, and password. 
     @type sql: str 

     :return: A list of Shard items 
     """ 
     logging.info('Creating shards.') 
     cursor = self._return_cursor(self.canvas_conn) 

     stock_query = ''' 
       SELECT 
       database_server_id || 'dr' database_server_id 
       , CASE 
        WHEN database_server_id LIKE 'cluster1' AND name IS NULL THEN 'canvas' 
        WHEN database_server_id LIKE 'cluster4' AND name IS NULL THEN 'canvas' 
        WHEN name IS NULL THEN database_server_id 
        ELSE name 
       END AS database_name 
       ,SUBSTRING(database_server_id FROM '\d+$')::INT cluster_id 
       ,CASE 
        WHEN name IS NULL THEN SUBSTRING(database_server_id FROM '\d+$')::INT 
        ELSE SUBSTRING(name FROM '\d+$')::INT 
       END AS shard_id 
       FROM canvas.switchman_shards 
       WHERE database_server_id LIKE 'cluster%' 
       ORDER BY cluster_id, shard_id 
       ''' 
     if sql: 
      cursor.execute(sql) 
     else: 
      cursor.execute(stock_query) 
     results = cursor.fetchall() 
     self._set_reporter_total_shards(count=len(results)) 
     return [Shard(
      *result, 
      job=self.job, 
      manifest=self.manifest, 
      reporter=self.reporter.create_slave(db=result[0], schema=result[1]) 
     ) for result in results] 

エラーがShardクラスが同じモジュールで定義されているにもかかわらず、NameError: name 'Shard' is not definedです。

+0

これを再現することはできません。それには[mcve]が必要です。 –

+0

どのようなエラーがありますか? 'Shard'は有効範囲にありますか? – jonrsharpe

+0

問題のメソッドとエラーを追加しました。 – flybonzai

答えて

1

Shardまだ定義されていません。これは、クラス定義の途中にあるか、Shardがこのクラスの下に定義されているためです。 Give the name as a string

def _return_shards(self, sql: str = None) -> List['Shard']: 
関連する問題