Spaces:
Sleeping
Sleeping
| # This code is licensed under the MIT License. | |
| # Copyright (c) [2025] [Akihito Miyazaki] | |
| # | |
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |
| # of this software and associated documentation files (the "Software"), to deal | |
| # in the Software without restriction, including without limitation the rights | |
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| # copies of the Software, and to permit persons to whom the Software is | |
| # furnished to do so, subject to the following conditions: | |
| # | |
| # The above copyright notice and this permission notice shall be included in all | |
| # copies or substantial portions of the Software. | |
| # | |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| # SOFTWARE. | |
| # | |
| import json | |
| import os | |
| import time | |
| # | |
| from pprint import pprint | |
| import requests | |
| def request_linear( | |
| headers, data, url="https://api.linear.app/graphql", print_header=False | |
| ): | |
| response_data = None | |
| try: | |
| response = requests.post(url, headers=headers, json=data) | |
| response_data = response.json() | |
| if print_header: | |
| print("--- ヘッダーの表示開始 ---") | |
| pprint(dict(response.headers), indent=4) | |
| print("--- ヘッダーの表示終了 ---") | |
| response.raise_for_status() # ステータスコードが200番台以外の場合に例外を発生させる | |
| return response_data | |
| except requests.exceptions.RequestException as e: | |
| print(response_data) | |
| print(f"エラーが発生しました: {e}") | |
| # exit(0) | |
| except json.JSONDecodeError as e: | |
| print(f"JSONデコードエラー: {e}") | |
| print(f"レスポンス内容:\n{response.text}") | |
| # exit(0) | |
| def load_api_key(dir="./"): | |
| print(f"{dir}.env") | |
| from dotenv import load_dotenv | |
| load_dotenv(dotenv_path=f"{dir}.env") | |
| if "api_key" in os.environ: | |
| api_key = os.environ["api_key"] | |
| return api_key | |
| else: | |
| print("'api_key' が環境変数にありません。") | |
| print(".envファイルを作成し 以下の行を追加してください。") | |
| print("api_key=your_api_key") | |
| print("このファイルは.gitignoreに追加して、決して公開しないでください。") | |
| print( | |
| "Linear Settings Security&access - Personal API keysからAPI Keyは作成できます。" | |
| ) | |
| exit(0) | |
| def execute_query(label, query_text, authorization, print_header=False): | |
| headers = { | |
| "Content-Type": "application/json", | |
| "Authorization": authorization, | |
| } | |
| start_time_total = time.time() | |
| print(f"--- 処理の開始:{label} ({time.strftime('%Y-%m-%d %H:%M:%S')}) ---") | |
| query_dic = {"query": query_text} | |
| print("--- クエリの表示開始 ---") | |
| print(f"{query_dic['query']}") | |
| print("--- クエリの表示終了 ---") | |
| result = request_linear(headers, query_dic, print_header=print_header) | |
| print("--- 結果の表示開始 ---") | |
| print(json.dumps(result, indent=2, ensure_ascii=False)) | |
| print("--- 結果の表示終了 ---") | |
| end_time_total = time.time() | |
| total_time = end_time_total - start_time_total | |
| print(f"--- 処理の終了:{label} ---") | |
| print(f"合計処理時間: {total_time:.4f} 秒") | |
| print("") # spacer | |
| return result | |