У меня есть простая функция, которая добавляет файл в базовую папку S3.Базовое местоположение задается в качестве переменной среды:
os.environ["TEST_BASE"] = "my-bucket/testing/"
Функция:
def add_file(file):
print(f"In function: {os.getenv('TEST_BASE')}")
s3 = s3fs.S3FileSystem()
s3.touch(os.getenv('TEST_BASE') + file)
print("In function: " + str(s3.ls(os.getenv('TEST_BASE'))))
Теперь я хочу проверить ее поведение:
with mock_s3():
with unittest.mock.patch.dict(os.environ, {"TEST_BASE": "foo/bar/"}):
print(f"TEST_BASE = {os.getenv('TEST_BASE')}")
s3_conn = boto3.client('s3', 'us-west-2')
s3_conn.create_bucket(Bucket='foo')
s3 = s3fs.S3FileSystem()
s3.touch(os.getenv('TEST_BASE') + 'yoo')
print(s3.ls(os.getenv("TEST_BASE")))
add_file('goo')
print(s3.exists(os.getenv("TEST_BASE") + 'goo')) # (*)
print(s3.ls(os.getenv("TEST_BASE"))) # (**)
print(f"TEST_BASE = {os.getenv('TEST_BASE')}")
Теперь часть, которую я не могу понять, состоит в том, что (*)
печатает True
, но (**)
перечисляет только один объект (yoo
).Что здесь происходит?