Skip to content

Commit a83441f

Browse files
authored
fix(tos): fix cors rules (#139)
* fix cors rules * fix pre-commit
1 parent 1f60a2f commit a83441f

File tree

2 files changed

+59
-13
lines changed

2 files changed

+59
-13
lines changed

tests/test_tos.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ def __init__(
6767
type("S", (), {"Storage_Class_Standard": "STANDARD"}),
6868
)
6969
monkeypatch.setattr(
70-
tos_mod.tos, "ACLType", type("A", (), {"ACL_Private": "private"})
70+
tos_mod.tos,
71+
"ACLType",
72+
type("A", (), {"ACL_Private": "private", "ACL_Public_Read": "public-read"}),
7173
)
7274

7375
return fake_client

veadk/integrations/ve_tos/ve_tos.py

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,29 +72,74 @@ def model_post_init(self, __context: Any) -> None:
7272
logger.error(f"Client initialization failed:{e}")
7373
self._client = None
7474

75+
def _refresh_client(self):
76+
try:
77+
if self._client:
78+
self._client.close()
79+
self._client = tos.TosClientV2(
80+
self.config.ak,
81+
self.config.sk,
82+
endpoint=f"tos-{self.config.region}.volces.com",
83+
region=self.config.region,
84+
)
85+
logger.info("refreshed client successfully.")
86+
except Exception as e:
87+
logger.error(f"Failed to refresh client: {str(e)}")
88+
self._client = None
89+
7590
def create_bucket(self) -> bool:
76-
"""If the bucket does not exist, create it"""
91+
"""If the bucket does not exist, create it and set CORS rules"""
7792
if not self._client:
7893
logger.error("TOS client is not initialized")
7994
return False
8095
try:
8196
self._client.head_bucket(self.config.bucket_name)
8297
logger.info(f"Bucket {self.config.bucket_name} already exists")
83-
return True
8498
except tos.exceptions.TosServerError as e:
8599
if e.status_code == 404:
86-
self._client.create_bucket(
87-
bucket=self.config.bucket_name,
88-
storage_class=tos.StorageClassType.Storage_Class_Standard,
89-
acl=tos.ACLType.ACL_Private,
90-
)
91-
logger.info(f"Bucket {self.config.bucket_name} created successfully")
92-
return True
100+
try:
101+
self._client.create_bucket(
102+
bucket=self.config.bucket_name,
103+
storage_class=tos.StorageClassType.Storage_Class_Standard,
104+
acl=tos.ACLType.ACL_Public_Read, # 公开读
105+
)
106+
logger.info(
107+
f"Bucket {self.config.bucket_name} created successfully"
108+
)
109+
self._refresh_client()
110+
except Exception as create_error:
111+
logger.error(f"Bucket creation failed: {str(create_error)}")
112+
return False
93113
else:
94-
logger.error(f"Bucket creation failed: {str(e)}")
114+
logger.error(f"Bucket check failed: {str(e)}")
95115
return False
96116
except Exception as e:
97-
logger.error(f"Bucket creation failed: {str(e)}")
117+
logger.error(f"Bucket check failed: {str(e)}")
118+
return False
119+
120+
# 确保在所有路径上返回布尔值
121+
return self._set_cors_rules()
122+
123+
def _set_cors_rules(self) -> bool:
124+
if not self._client:
125+
logger.error("TOS client is not initialized")
126+
return False
127+
try:
128+
rule = tos.models2.CORSRule(
129+
allowed_origins=["*"],
130+
allowed_methods=["GET", "HEAD"],
131+
allowed_headers=["*"],
132+
max_age_seconds=1000,
133+
)
134+
self._client.put_bucket_cors(self.config.bucket_name, [rule])
135+
logger.info(
136+
f"CORS rules for bucket {self.config.bucket_name} set successfully"
137+
)
138+
return True
139+
except Exception as e:
140+
logger.error(
141+
f"Failed to set CORS rules for bucket {self.config.bucket_name}: {str(e)}"
142+
)
98143
return False
99144

100145
def build_tos_url(
@@ -153,7 +198,6 @@ def _do_upload_file(self, object_key: str, file_path: str) -> None:
153198
return
154199
if not self.create_bucket():
155200
return
156-
157201
self._client.put_object_from_file(
158202
bucket=self.config.bucket_name, key=object_key, file_path=file_path
159203
)

0 commit comments

Comments
 (0)