質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

9229閲覧

pythonの定数をどう、どこに書くべきかのベストプラクティス

sequelanonymous

総合スコア123

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

3クリップ

投稿2019/03/11 10:31

最初は、configファイルに以下のような定数を書いており、app.configから読み取ってgcpクライアントを利用するようにしていましたが、それだと不具合が発生することがわかり、共通モジュールを作成してその中で定数を使いまわそうと考えました。

そもそも、共通モジュールから定数群を利用する場合、classを作成して__init__関数内で読むようにすべきか、はてまた、以下のようにそのまま直書きで利用するようにすべきか、などメリットデメリットが良くわかっていません。
今は、共通モジュールを作成して以下のように書いていますが、configファイルの方はクラスを作成してその中で書いています。

なにか、こうしたほうがいいなどのアイデアがあればご教示いただけませんでしょうか?

python

1 if 'GCP_KEY' not in os.environ: 2 raise Exception('KEY is mandatory') 3 elif not os.environ.get("GCP_KEY"): 4 raise Exception('KEY does not exsist') 5 else: 6 json_key_file = os.environ.get("GCP_KEY") 7 8 if os.environ.get("CONFIG", "local") == "local": 9 # Local 10 STORAGE_CLIENT = storage.Client.from_service_account_json(json_key_file) 11 else: 12 # Staging 13 STORAGE_CLIENT = storage.Client() 14 BQ_CLIENT = get_client(PROJECT_ID, json_key_file=json_key_file, readonly=True)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

上記、共通モジュールを一つ作成して、class内のinitで定数を読み込むようにし、client作成は、それ以下の関数を作成する。定数そのものは、別途config内の定数群をあつめたモジュールにまとめる。
他のモジュールでGCPとの接続をする際に利用するときは、共通モジュールの各関数を呼び出して利用すればよい。
以下の議論で、定数は、大文字表記で入れるだけの方が読み込み処理も早ければ読みやすいとのこと
http://code.activestate.com/recipes/65207-constants-in-python/?in=user-97991

投稿2019/03/13 04:41

編集2019/03/13 04:42
sequelanonymous

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問