0
クラスがあると言うと、Shard
となり、メソッドの戻り値はlist
のShard
オブジェクトになるはずです。カスタムクラスにどのようにアノテーションを付けますか?
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
です。
これを再現することはできません。それには[mcve]が必要です。 –
どのようなエラーがありますか? 'Shard'は有効範囲にありますか? – jonrsharpe
問題のメソッドとエラーを追加しました。 – flybonzai