14
14
from __future__ import absolute_import
15
15
16
16
import argparse
17
+ import logging
17
18
import os
18
19
import shutil
19
20
import tarfile
36
37
from os .path import abspath , realpath , dirname , normpath , join as joinpath
37
38
from sys import stderr
38
39
40
+ logger = logging .getLogger (__name__ )
41
+
39
42
40
43
def _get_resolved_path (path ):
41
44
"""Return the normalized absolute path of a given path.
@@ -82,10 +85,10 @@ def _is_bad_link(info, base):
82
85
return _is_bad_path (info .linkname , base = tip )
83
86
84
87
85
- def safe_members (members ):
88
+ def _get_safe_members (members ):
86
89
"""A generator that yields members that are safe to extract.
87
90
88
- It checks for bad paths and bad links.
91
+ It filters out bad paths and bad links.
89
92
90
93
Args:
91
94
members (list): A list of members to check.
@@ -97,20 +100,23 @@ def safe_members(members):
97
100
98
101
for file_info in members :
99
102
if _is_bad_path (file_info .name , base ):
100
- print (stderr , file_info .name , "is blocked (illegal path)" )
103
+ logger . error (stderr , file_info .name , "is blocked (illegal path)" )
101
104
elif file_info .issym () and _is_bad_link (file_info , base ):
102
- print (stderr , file_info .name , "is blocked: Symlink to" , file_info .linkname )
105
+ logger . error (stderr , file_info .name , "is blocked: Symlink to" , file_info .linkname )
103
106
elif file_info .islnk () and _is_bad_link (file_info , base ):
104
- print (stderr , file_info .name , "is blocked: Hard link to" , file_info .linkname )
107
+ logger . error (stderr , file_info .name , "is blocked: Hard link to" , file_info .linkname )
105
108
else :
106
109
yield file_info
107
110
108
111
109
112
def custom_extractall_tarfile (tar , extract_path ):
110
113
"""Extract a tarfile, optionally using data_filter if available.
111
114
115
+ # TODO: The function and it's usages can be deprecated once SageMaker Python SDK
116
+ is upgraded to use Python 3.12+
117
+
112
118
If the tarfile has a data_filter attribute, it will be used to extract the contents of the file.
113
- Otherwise, the safe_members function will be used to check for bad paths and bad links.
119
+ Otherwise, the _get_safe_members function will be used to filter bad paths and bad links.
114
120
115
121
Args:
116
122
tar (tarfile.TarFile): The opened tarfile object.
@@ -119,10 +125,10 @@ def custom_extractall_tarfile(tar, extract_path):
119
125
Returns:
120
126
None
121
127
"""
122
- if hasattr (tar , "data_filter" ):
128
+ if hasattr (tarfile , "data_filter" ):
123
129
tar .extractall (path = extract_path , filter = "data" )
124
130
else :
125
- tar .extractall (path = extract_path , members = safe_members (tar ))
131
+ tar .extractall (path = extract_path , members = _get_safe_members (tar ))
126
132
127
133
128
134
def repack (inference_script , model_archive , dependencies = None , source_dir = None ): # pragma: no cover
0 commit comments