Skip to content

Commit 748e10c

Browse files
committed
added split_when to S3__Key_Generator
1 parent 8ec60f4 commit 748e10c

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

osbot_aws/aws/s3/S3__Key_Generator.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from osbot_utils.base_classes.Type_Safe import Type_Safe
2+
from osbot_utils.helpers.Safe_Id import Safe_Id
23
from osbot_utils.utils.Misc import utc_now, date_today
34

45
S3_PATH__WHEN_BLOCK_SIZE = 5
@@ -11,6 +12,7 @@ class S3__Key_Generator(Type_Safe):
1112
use_hours : bool = True
1213
use_minutes : bool = True
1314
save_as_gz : bool = False
15+
split_when : bool = False
1416
s3_path_block_size : int = S3_PATH__WHEN_BLOCK_SIZE
1517

1618
def calculate_minute_block(self, minute):
@@ -24,13 +26,20 @@ def create_path_elements__for_server(self):
2426
if self.server_name: path_elements.append(self.server_name)
2527
return path_elements
2628

27-
def create_path_elements__from_when(self, when=None):
29+
def create_path_elements__from_when(self, when=None, area: Safe_Id = None):
2830
path_elements = self.create_path_elements__for_server()
31+
if area:
32+
path_elements.append(area)
2933
if self.use_when:
3034
if not when:
3135
when = self.path__for_date_time__now_utc()
3236
if when: # for the cases when path__for_date_time__now_utc returns and empty value
33-
path_elements.append(when)
37+
if self.split_when:
38+
path_elements.extend(when.split('/'))
39+
else:
40+
path_elements.append(when)
41+
42+
3443

3544
return path_elements
3645

tests/unit/aws/s3/test_S3__Key_Generator.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from unittest import TestCase
22
from datetime import datetime
3+
4+
from osbot_utils.helpers.Safe_Id import Safe_Id
35
from osbot_utils.utils.Misc import utc_now, date_today
46
from osbot_aws.aws.s3.S3__Key_Generator import S3__Key_Generator
57

@@ -139,3 +141,47 @@ def test_s3_folder__for_day(self):
139141
expected = 'root/server1/2020-12-31'
140142
result = _.s3_folder__for_day(day)
141143
assert result == expected
144+
145+
def test_create_path_elements__from_when__with_area_and_split(self):
146+
with S3__Key_Generator() as _:
147+
# Test with area parameter
148+
_.use_when = True
149+
_.root_folder = 'root'
150+
_.server_name = 'server1'
151+
when = '2021-01-01/12/00'
152+
area = Safe_Id('test-area')
153+
154+
# Test area parameter
155+
expected = ['root', 'server1', 'test-area', when]
156+
result = _.create_path_elements__from_when(when=when, area=area)
157+
assert result == expected
158+
159+
# Test split_when parameter
160+
_.split_when = True
161+
expected = ['root', 'server1', 'test-area', '2021-01-01', '12', '00']
162+
result = _.create_path_elements__from_when(when=when, area=area)
163+
assert result == expected
164+
165+
# Test with no area but split_when
166+
_.split_when = True
167+
area = None
168+
expected = ['root', 'server1', '2021-01-01', '12', '00']
169+
result = _.create_path_elements__from_when(when=when, area=area)
170+
assert result == expected
171+
172+
# Test with use_when=False
173+
_.use_when = False
174+
area = Safe_Id('test-area')
175+
expected = ['root', 'server1', 'test-area']
176+
result = _.create_path_elements__from_when(when=when, area=area)
177+
assert result == expected
178+
179+
# Test with actual datetime path generation
180+
_.use_when = True
181+
_.split_when = True
182+
now_path = _.path__for_date_time__now_utc()
183+
result = _.create_path_elements__from_when(area=area)
184+
assert len(result) == len(now_path.split('/')) + 3 # root, server1, area + split path
185+
assert result[0] == 'root'
186+
assert result[1] == 'server1'
187+
assert result[2] == 'test-area'

0 commit comments

Comments
 (0)