atk-common 1.52.0__py3-none-any.whl → 1.54.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
atk_common/__init__.py CHANGED
@@ -1,5 +1,12 @@
1
1
  # __init__.py
2
- from atk_common.datetime_utils import get_utc_date_time, get_utc_date_time_str, seconds_to_utc_timestamp, get_utc_date_from_iso, adjust_millisescond, convert_to_utc
2
+ from atk_common.datetime_utils import \
3
+ get_utc_date_time, \
4
+ get_utc_date_time_str, \
5
+ seconds_to_utc_timestamp, \
6
+ get_utc_date_from_iso, \
7
+ adjust_millisescond, \
8
+ convert_to_utc, \
9
+ convert_to_utc_image_dt
3
10
  from atk_common.db_utils import sql, sql_with_record, convert_none_to_null, date_time_utc_column
4
11
  from atk_common.docker_utils import get_current_container_info
5
12
  from atk_common.env_utils import get_env_value
@@ -20,6 +27,7 @@ __all__ = [
20
27
  'get_utc_date_from_iso',
21
28
  'adjust_millisescond',
22
29
  'convert_to_utc',
30
+ 'convert_to_utc_image_dt',
23
31
  'sql',
24
32
  'sql_with_record',
25
33
  'convert_none_to_null',
@@ -60,3 +60,44 @@ def convert_to_utc(dt_str):
60
60
  # Convert to UTC
61
61
  dt_utc =dt_with_tz.astimezone(timezone.utc)
62
62
  return dt_utc.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
63
+
64
+ # Original datetime string, handles:
65
+ # dt_str = '2023-02-01 14:13:08.653133 +01:00'
66
+ def convert_to_utc_image_dt(dt_str):
67
+ dt_str = dt_str.strip()
68
+ # Detect offset
69
+ if '+' in dt_str:
70
+ parts = dt_str.split('+')
71
+ sign = '+'
72
+ elif '-' in dt_str[10:]: # avoid confusion with date part
73
+ parts = dt_str.split('-')
74
+ sign = '-'
75
+ else:
76
+ parts = [dt_str]
77
+ sign = None
78
+
79
+ if len(parts) == 2:
80
+ dt_part = parts[0].strip()
81
+ offset_part = parts[1].strip()
82
+ if sign == '-':
83
+ offset_part = '-' + offset_part
84
+ else:
85
+ offset_part = '+' + offset_part
86
+ else:
87
+ dt_part = parts[0].strip()
88
+ offset_part = None
89
+
90
+ dt_part = adjust_millisescond(dt_part)
91
+ dt_naive = datetime.fromisoformat(dt_part)
92
+
93
+ if offset_part is None:
94
+ dt_aware = dt_naive.replace(tzinfo=ZoneInfo("Europe/Berlin"))
95
+ dt_utc = dt_aware.astimezone(ZoneInfo("UTC"))
96
+ else:
97
+ offset_hours, offset_minutes = map(int, offset_part.split(':'))
98
+ delta = timedelta(hours=offset_hours, minutes=offset_minutes)
99
+ tz = timezone(delta)
100
+ dt_aware = dt_naive.replace(tzinfo=tz)
101
+ dt_utc = dt_aware.astimezone(timezone.utc)
102
+
103
+ return dt_utc.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atk_common
3
- Version: 1.52.0
3
+ Version: 1.54.0
4
4
  Summary: ATK common methods
5
5
  Home-page: https://github.com/pypa/atk_common
6
6
  Author: Roger
@@ -1,5 +1,5 @@
1
- atk_common/__init__.py,sha256=d_2XoFaQx5CGiBqbTdA3hx-yZ-CAXd-xXYk1DNBAXMg,1978
2
- atk_common/datetime_utils.py,sha256=JnhMF3IPEqIcWIcXLFrEugFqqQepeXkwGwT-bVmdqWk,2115
1
+ atk_common/__init__.py,sha256=0XaUct8Jkw1Lla88SCS32Pmtcs7mWWsR-gioYWUYASM,2084
2
+ atk_common/datetime_utils.py,sha256=v5WKmx49mUUSXW3oTBHKP_ryZwWf0hGZ0K2oQAI0SVo,3447
3
3
  atk_common/db_utils.py,sha256=odUtXcS7Mumw5eGyVyVimL_U_lP7TqMX9v8nWO5nMvg,902
4
4
  atk_common/docker_utils.py,sha256=nkUhp2OhwJsm41JDujHDY-JxQfdDjy91duprH59Esfk,2084
5
5
  atk_common/env_utils.py,sha256=66v-S0vlkJNaun6ay1XcOGRtYJb4Ce4odJsWxuaHsQc,373
@@ -52,7 +52,7 @@ atk_common/enums/speed_control_status_type_enum.py,sha256=qpURh0K1L1tSpbrzVnckoe
52
52
  atk_common/enums/speed_control_stop_reason.py,sha256=pvLS6fpDhsCiIDAmiQBsHctxZnq-Dl2BOgJOxQnT5Hc,200
53
53
  atk_common/enums/test_image_type_enum.py,sha256=HUjxJorehnzRXMNF2uHk2DrAJ3Y_ajQvp0jW-mtlOhU,140
54
54
  atk_common/enums/violation_type_enum.py,sha256=01qTHOj-O8bOc-nwIHVnxLosm4cusD_YuqXM3ZsiRRk,86
55
- atk_common-1.52.0.dist-info/licenses/license.txt,sha256=_0O6fWM00-wTurDjnZhUP_N5QiwGhItaQZqHq5eqadA,1063
55
+ atk_common-1.54.0.dist-info/licenses/license.txt,sha256=_0O6fWM00-wTurDjnZhUP_N5QiwGhItaQZqHq5eqadA,1063
56
56
  atk_package/__init__.py,sha256=NcsmwFadivgIeWV0-5ACZxqmfo4EzTkJX0r4N6DFAdg,820
57
57
  atk_package/datetime_utils.py,sha256=qsVF7l90P1-xukG2tV_jLqG9J_Yfl5wTpyfrdPBlyMo,239
58
58
  atk_package/env_utils.py,sha256=bXOrxM3fZUslqfmZt75iphbEJHbG4riJa8XOVzPwIII,313
@@ -65,7 +65,7 @@ atk_package/enums/__init__.py,sha256=EtUr_--MQj1Rc_R0sF_ELXIThmhpfmhDWq3YaK9oQMk
65
65
  atk_package/enums/command_status_enum.py,sha256=M2Nln27a_DbzI07-gfytWQk2X087JhkU6Fmard5qVHs,127
66
66
  atk_package/enums/speed_control_status_enum.py,sha256=qpURh0K1L1tSpbrzVnckoe4hUn1illIkbo7k4mLfzIM,182
67
67
  shared_python_atk_enforcement/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- atk_common-1.52.0.dist-info/METADATA,sha256=mnPGn22w9mEzdPv3y0Lc7QfdaCki8RQwfaGupLZhzb0,1464
69
- atk_common-1.52.0.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
70
- atk_common-1.52.0.dist-info/top_level.txt,sha256=4CwRjkLnheIdI4jQwc4tK3dbRc58WqUmoqjkdDTWlME,41
71
- atk_common-1.52.0.dist-info/RECORD,,
68
+ atk_common-1.54.0.dist-info/METADATA,sha256=s110r1PgvS4BCTQLs0TgNmDNZA5mts6b5NedXU3Ajmo,1464
69
+ atk_common-1.54.0.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
70
+ atk_common-1.54.0.dist-info/top_level.txt,sha256=4CwRjkLnheIdI4jQwc4tK3dbRc58WqUmoqjkdDTWlME,41
71
+ atk_common-1.54.0.dist-info/RECORD,,