구글드라이브 연동 로그 추가
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import os
|
||||
import logging
|
||||
from google.oauth2.credentials import Credentials
|
||||
from google_auth_oauthlib.flow import InstalledAppFlow
|
||||
from google.auth.transport.requests import Request
|
||||
@@ -7,6 +8,13 @@ from googleapiclient.http import MediaFileUpload
|
||||
import pickle
|
||||
|
||||
SCOPES = ['https://www.googleapis.com/auth/drive.file']
|
||||
logger = logging.getLogger(__name__)
|
||||
if not logger.handlers:
|
||||
handler = logging.StreamHandler()
|
||||
formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(name)s - %(message)s')
|
||||
handler.setFormatter(formatter)
|
||||
logger.addHandler(handler)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
class GoogleDriveUploader:
|
||||
def __init__(self, credentials_file, token_file):
|
||||
@@ -18,16 +26,20 @@ class GoogleDriveUploader:
|
||||
def _authenticate(self):
|
||||
"""구글 드라이브 인증"""
|
||||
creds = None
|
||||
logger.info("구글 드라이브 인증 시작 | credentials=%s token=%s", self.credentials_file, self.token_file)
|
||||
|
||||
# 기존 토큰 파일이 있으면 로드
|
||||
if os.path.exists(self.token_file):
|
||||
with open(self.token_file, 'rb') as token:
|
||||
creds = pickle.load(token)
|
||||
logger.info("기존 토큰 파일 로드 성공")
|
||||
|
||||
# 유효한 인증 정보가 없으면 새로 인증
|
||||
if not creds or not creds.valid:
|
||||
if creds and creds.expired and creds.refresh_token:
|
||||
logger.info("토큰 만료, refresh 시도")
|
||||
creds.refresh(Request())
|
||||
logger.info("토큰 refresh 성공")
|
||||
else:
|
||||
if not os.path.exists(self.credentials_file):
|
||||
raise FileNotFoundError(
|
||||
@@ -39,7 +51,9 @@ class GoogleDriveUploader:
|
||||
self.credentials_file, SCOPES)
|
||||
# 서버 환경에서는 브라우저가 없을 수 있으므로 예외 처리
|
||||
try:
|
||||
logger.info("로컬 서버 플로우로 인증 시도")
|
||||
creds = flow.run_local_server(port=0)
|
||||
logger.info("로컬 서버 플로우 인증 성공")
|
||||
except Exception as e:
|
||||
# 브라우저를 열 수 없는 경우 (서버 환경 등)
|
||||
# 토큰 파일이 이미 있다면 재시도하지 않고 예외 발생
|
||||
@@ -51,8 +65,10 @@ class GoogleDriveUploader:
|
||||
# 토큰 저장
|
||||
with open(self.token_file, 'wb') as token:
|
||||
pickle.dump(creds, token)
|
||||
logger.info("토큰 파일 저장 완료: %s", self.token_file)
|
||||
|
||||
self.service = build('drive', 'v3', credentials=creds)
|
||||
logger.info("구글 드라이브 서비스 생성 완료")
|
||||
|
||||
def upload_file(self, file_path, file_name, folder_id=None):
|
||||
"""파일을 구글 드라이브에 업로드"""
|
||||
@@ -63,6 +79,7 @@ class GoogleDriveUploader:
|
||||
if folder_id:
|
||||
file_metadata['parents'] = [folder_id]
|
||||
|
||||
logger.info("구글 드라이브 업로드 준비 | file=%s, name=%s, folder=%s", file_path, file_name, folder_id)
|
||||
media = MediaFileUpload(file_path, mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
|
||||
|
||||
file = self.service.files().create(
|
||||
@@ -71,5 +88,7 @@ class GoogleDriveUploader:
|
||||
fields='id'
|
||||
).execute()
|
||||
|
||||
return file.get('id')
|
||||
file_id = file.get('id')
|
||||
logger.info("구글 드라이브 업로드 성공 | file_id=%s", file_id)
|
||||
return file_id
|
||||
|
||||
|
||||
Reference in New Issue
Block a user