Corin1998 commited on
Commit
abb7cb4
·
verified ·
1 Parent(s): 32d136e

Update src/db.py

Browse files
Files changed (1) hide show
  1. src/db.py +18 -13
src/db.py CHANGED
@@ -1,25 +1,30 @@
1
- # src/db.py
2
  from sqlmodel import SQLModel, create_engine, Session
3
  import os
4
  from pathlib import Path
5
  from dotenv import load_dotenv
6
 
7
  load_dotenv()
 
 
8
  DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:////data/app.db")
9
 
10
  def _ensure_sqlite_dir(url: str):
11
- # sqlite:////absolute/path.db sqlite:///relative/path.db も対応
12
- if url.startswith("sqlite"):
13
- # "sqlite:///" を基準にパス部分を取り出す
14
- path_part = url.split("sqlite:///")[-1]
15
- p = Path(path_part)
16
- # 相対なら CWD 基準。HF Spaces は相対パスは書けないので /data を推奨
17
- dirpath = p.parent
18
- try:
19
- dirpath.mkdir(parents=True, exist_ok=True)
20
- except PermissionError:
21
- # 読み取り専用領域だった場合は無視(/data を使うのが前提)
22
- pass
 
 
 
 
23
 
24
  _ensure_sqlite_dir(DATABASE_URL)
25
 
 
 
1
  from sqlmodel import SQLModel, create_engine, Session
2
  import os
3
  from pathlib import Path
4
  from dotenv import load_dotenv
5
 
6
  load_dotenv()
7
+
8
+ # 既定は /data(Hugging Face Spaces 等の書き込み可能領域)
9
  DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:////data/app.db")
10
 
11
  def _ensure_sqlite_dir(url: str):
12
+ """sqlite URL のパス部分のディレクトリを作成(/data 対応)"""
13
+ if not url.startswith("sqlite"):
14
+ return
15
+ # sqlite:/// 相対 or sqlite://// 絶対 の両対応でパス抽出
16
+ # 例: sqlite:////data/app.db -> /data/app.db
17
+ # sqlite:///./data/app.db -> ./data/app.db
18
+ parts = url.split("sqlite:///")
19
+ path_part = parts[-1] if len(parts) > 1 else url.replace("sqlite://", "")
20
+ # 万一 '////' を含むケースも Path が吸収
21
+ p = Path(path_part)
22
+ dirpath = p.parent
23
+ try:
24
+ dirpath.mkdir(parents=True, exist_ok=True)
25
+ except PermissionError:
26
+ # 読み取り専用領域のときは無視(/data を使う前提)
27
+ pass
28
 
29
  _ensure_sqlite_dir(DATABASE_URL)
30