@@ -151,15 +151,15 @@ async def list_artifact_keys(
151
151
self .bucket , prefix = session_prefix
152
152
)
153
153
for blob in session_blobs :
154
- _ , _ , _ , filename , _ = blob .name . split ( "/" )
154
+ filename = get_full_file_name_from_blob_name ( blob .name )
155
155
filenames .add (filename )
156
156
157
157
user_namespace_prefix = f"{ app_name } /{ user_id } /user/"
158
158
user_namespace_blobs = self .storage_client .list_blobs (
159
159
self .bucket , prefix = user_namespace_prefix
160
160
)
161
161
for blob in user_namespace_blobs :
162
- _ , _ , _ , filename , _ = blob .name . split ( "/" )
162
+ filename = get_full_file_name_from_blob_name ( blob .name )
163
163
filenames .add (filename )
164
164
165
165
return sorted (list (filenames ))
@@ -190,6 +190,20 @@ async def list_versions(
190
190
blobs = self .storage_client .list_blobs (self .bucket , prefix = prefix )
191
191
versions = []
192
192
for blob in blobs :
193
- _ , _ , _ , _ , version = blob .name . split ( "/" )
193
+ version = get_version_from_blob_name ( blob .name )
194
194
versions .append (int (version ))
195
195
return versions
196
+
197
+ def get_version_from_blob_name (blob_name : str ) -> int :
198
+ name_parts = blob_name .split ("/" )
199
+ return int (name_parts [- 1 ])
200
+
201
+ def get_full_file_name_from_blob_name (blob_name : str ) -> str :
202
+ """Gets the full file name even if it contains slashes."""
203
+ name_parts = blob_name .split ("/" )
204
+ # cut the well-known {app_name}/{user_id}/{session_id} or "user"/
205
+ name_parts = name_parts [3 :]
206
+ # cut the version
207
+ name_parts = name_parts [:- 1 ]
208
+ # all that's left is the full file name
209
+ return "/" .join (name_parts )
0 commit comments