atk-common 1.6.0__py3-none-any.whl → 1.7.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
@@ -6,7 +6,7 @@ from atk_common.http_utils import is_status_code_ok, get_test_response
6
6
  from atk_common.log_utils import add_log_item, add_log_item_http
7
7
  from atk_common.rabbitmq_consumer import RabbitMQConsumer
8
8
  from atk_common.response_utils import create_save_resp
9
- from atk_common.docker_utils import get_image_version, get_current_container_info
9
+ from atk_common.docker_utils import get_current_container_info
10
10
 
11
11
  __all__ = [
12
12
  'date_time_utc',
@@ -23,6 +23,5 @@ __all__ = [
23
23
  'add_log_item_http',
24
24
  'RabbitMQConsumer',
25
25
  'create_save_resp',
26
- 'get_image_version',
27
26
  'get_current_container_info',
28
27
  ]
@@ -1,41 +1,30 @@
1
1
  import docker
2
- import os
3
2
  import socket
4
- from atk_common.env_utils import get_env_value
3
+ from atk_common.log_utils import add_log_item
5
4
 
6
- def find_image_prop_list_by_name(image_list, image_name):
7
- for image in image_list:
8
- if image.tags and len(image.tags) > 0:
9
- # Check if the image name is in the first tag
10
- if image_name in image.tags[0]:
11
- return image.tags[0]
12
- return None
5
+ def get_image_name_and_version(tags):
6
+ if tags:
7
+ # Use the first tag (usually only one)
8
+ full_tag = tags[0] # e.g., 'bo-crypto-wrapper-api:latest'
13
9
 
14
- def get_image_version(default_value=None):
15
- """
16
- Get the version of a Docker image.
10
+ if ":" in full_tag:
11
+ image_name, image_version = full_tag.split(":", 1)
12
+ else:
13
+ image_name = full_tag
14
+ image_version = "<none>"
15
+ return image_name, image_version
16
+ else:
17
+ return None, None
17
18
 
18
- :param image_name: Name of the Docker image
19
- :return: Version of the Docker image
20
- """
21
- try:
22
- image_name = get_env_value('DOCKER_IMAGE_NAME', default_value)
23
- if image_name is None:
24
- return None
25
- client = docker.from_env()
26
- image_list = client.images.list()
27
- image_prop_list = find_image_prop_list_by_name(image_list, image_name)
28
- if image_prop_list is None:
29
- return None
30
- image_props = image_prop_list.split(':')
31
- if len(image_props) < 2:
32
- return None
33
- return image_props[1]
34
- except docker.errors.ImageNotFound:
35
- return None
19
+ def create_port_item(port, binding):
20
+ data = {}
21
+ data['port'] = port
22
+ data['binding'] = binding
23
+ return data
36
24
 
37
25
  def get_current_container_info():
38
26
  try:
27
+ data = {}
39
28
  client = docker.from_env()
40
29
 
41
30
  # Get current container's hostname (usually the container ID)
@@ -44,22 +33,20 @@ def get_current_container_info():
44
33
  # Fetch container object using partial ID
45
34
  container = client.containers.get(container_id)
46
35
 
47
- name = container.name
36
+ tags_info = get_image_name_and_version(container.image.tags)
37
+ data['imageName'] = tags_info[0]
38
+ data['imageVersion'] = tags_info[1]
39
+ data['containerName'] = container.name
48
40
  ports = container.attrs['NetworkSettings']['Ports']
49
-
50
- print(f"🔍 Container name: {name}")
51
- print("🌐 Port mappings:")
41
+ data['ports'] = []
52
42
  if ports:
53
43
  for container_port, host_bindings in ports.items():
54
44
  if host_bindings:
55
45
  for binding in host_bindings:
56
- print(f" {container_port} -> {binding['HostIp']}:{binding['HostPort']}")
46
+ data['ports'].append(create_port_item(container_port, f"{binding['HostIp']}:{binding['HostPort']}"))
57
47
  else:
58
- print(f" {container_port} -> Not bound to host")
59
- else:
60
- print("No exposed ports found.")
61
- return None
62
-
48
+ data['ports'].append(create_port_item(container_port, None))
49
+ return data
63
50
  except Exception as e:
64
- print("Error getting container info:", e)
51
+ add_log_item("Error getting container info:" + str(e))
65
52
  return None
atk_common/error_utils.py CHANGED
@@ -1,7 +1,6 @@
1
1
  from datetime import datetime
2
2
  import json
3
3
  from atk_common.datetime_utils import get_utc_date_time
4
- from atk_common.docker_utils import get_image_version
5
4
  from atk_common.log_utils import add_log_item
6
5
  from atk_common.response_utils import create_save_resp
7
6
 
@@ -10,22 +9,36 @@ def get_message(error):
10
9
  return str(error.message)
11
10
  else:
12
11
  return str(error)
12
+
13
+ def create_error_log(data):
14
+ err_str = data['message'] + ', statusCode: ' + str(data['statusCode']) + ', method: ' + data['method']
15
+ if data['containerInfo'] is not None:
16
+ err_str += ', imageName: ' + data['containerInfo']['imageName']
17
+ err_str += ', imageVersion: ' + data['containerInfo']['imageVersion']
18
+ err_str += ', containerName: ' + data['containerInfo']['containerName']
19
+ else:
20
+ err_str += ', imageName: <none>'
21
+ err_str += ', imageVersion: <none>'
22
+ err_str += ', containerName: <none>'
23
+ add_log_item(err_str)
13
24
 
14
- def get_error_entity(app, error, component, method, error_type, status_code):
25
+ def get_error_entity(app, error, method, error_type, status_code, container_info):
15
26
  data = {}
16
27
  data['statusCode'] = status_code
17
28
  data['exceptionType'] = str(type(error))
18
29
  data['errorType'] = error_type
19
30
  data['message'] = get_message(error)
20
- data['component'] = component
21
31
  data['method'] = method
22
- data['imageVersion'] = get_image_version(component)
23
32
  data['timestamp'] = get_utc_date_time()
24
- return app.response_class(
25
- response=json.dumps(data),
26
- status=500,
27
- mimetype='application/json'
28
- )
33
+ data['containerInfo'] = container_info
34
+ create_error_log(data)
35
+ if app is not None:
36
+ return app.response_class(
37
+ response=json.dumps(data),
38
+ status=500,
39
+ mimetype='application/json'
40
+ )
41
+ return None
29
42
 
30
43
  def handle_error(resp, status):
31
44
  if resp.status_code == 500:
atk_common/http_utils.py CHANGED
@@ -1,24 +1,23 @@
1
1
  import json
2
2
  from atk_common.datetime_utils import get_utc_date_time
3
- from atk_common.docker_utils import get_current_container_info, get_image_version
3
+ from atk_common.docker_utils import get_current_container_info
4
4
  from atk_common.env_utils import get_env_value
5
5
 
6
6
  def is_status_code_ok(status_code):
7
7
  return status_code >= 200 and status_code < 300
8
8
 
9
- def get_test_response(default_value=None):
9
+ def get_test_response():
10
10
  data = {}
11
11
  container_info = get_current_container_info()
12
12
  if container_info is not None:
13
- data['containerName'] = container_info.name
14
- data['containerPorts'] = container_info.ports
13
+ data['imageName'] = container_info['imageName']
14
+ data['imageVersion'] = container_info['imageVersion']
15
+ data['containerName'] = container_info['containerName']
16
+ data['containerPorts'] = container_info['ports']
15
17
  else:
18
+ data['imageName'] = None
19
+ data['imageVersion'] = None
16
20
  data['containerName'] = None
17
21
  data['containerPorts'] = None
18
- data['imageName'] = get_env_value('DOCKER_IMAGE_NAME', default_value)
19
- if data['imageName'] is None:
20
- data['imageVersion'] = None
21
- else:
22
- data['imageVersion'] = get_image_version(data['imageName'])
23
22
  data['timestamp'] = get_utc_date_time()
24
23
  return data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: atk_common
3
- Version: 1.6.0
3
+ Version: 1.7.0
4
4
  Summary: ATK common methods
5
5
  Home-page: https://github.com/pypa/atk_common
6
6
  Author: Roger
@@ -1,9 +1,9 @@
1
- atk_common/__init__.py,sha256=aMDKBJAczXZpgr_BsuwsWKN14OE9h3UyzHoLu5cGs3I,1001
1
+ atk_common/__init__.py,sha256=9aedYjZ5adS3zor4HPYubrFAmq2LuxhdtfwUKjDS6dE,956
2
2
  atk_common/datetime_utils.py,sha256=qsVF7l90P1-xukG2tV_jLqG9J_Yfl5wTpyfrdPBlyMo,239
3
- atk_common/docker_utils.py,sha256=BuulyBYuUoNS-iV4ZsknRifx5L2KWcKrrHDRqg6zqaY,2194
3
+ atk_common/docker_utils.py,sha256=AY3SoMVm8wZkTnlJtQPhyOVoKxuKbyS2ICIguCrED6Y,1804
4
4
  atk_common/env_utils.py,sha256=66v-S0vlkJNaun6ay1XcOGRtYJb4Ce4odJsWxuaHsQc,373
5
- atk_common/error_utils.py,sha256=5OiL5nMBEkDc193m2cVMD2Bs-fwRvPeSlI7PwnqB0o4,1533
6
- atk_common/http_utils.py,sha256=t2XmuDMBjUAH071qwarZ6hcTBzpO_4a9x10E8MU2EMc,924
5
+ atk_common/error_utils.py,sha256=JBc-yl5_29BSZ6d2kZBEX3X17qCDvEa_GZ7FC7sYwdc,2115
6
+ atk_common/http_utils.py,sha256=GF1OTTgsOg2iN60r6Da2oWU8vOOuQzsGrEwMKcOJtwE,866
7
7
  atk_common/log_utils.py,sha256=DGGwXjD5jvpMZJNW1QBoJRdDaTY1e1Z69j0LSOOzsWA,419
8
8
  atk_common/rabbitmq_consumer.py,sha256=4MhuwZs47Jt1fX4sUxr1MKRe7o2QRbPe9_utXEsa8QE,1907
9
9
  atk_common/response_utils.py,sha256=ezqTSNdGwueFXzijKB7CKPWxZml39bqjAZOeIMWMntk,197
@@ -22,8 +22,8 @@ atk_package/enums/__init__.py,sha256=oW0aVnwewfH6sNu14jjZ5_uP4iRN4pRmGdTNC204rHo
22
22
  atk_package/enums/command_status_enum.py,sha256=M2Nln27a_DbzI07-gfytWQk2X087JhkU6Fmard5qVHs,127
23
23
  atk_package/enums/speed_control_status_enum.py,sha256=qpURh0K1L1tSpbrzVnckoe4hUn1illIkbo7k4mLfzIM,182
24
24
  shared_python_atk_enforcement/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- atk_common-1.6.0.dist-info/METADATA,sha256=ikyiDptd6cRlvezu9lz_0aKnCfS0_6LeHqHkxpT_OOA,1193
26
- atk_common-1.6.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
27
- atk_common-1.6.0.dist-info/license.txt,sha256=_0O6fWM00-wTurDjnZhUP_N5QiwGhItaQZqHq5eqadA,1063
28
- atk_common-1.6.0.dist-info/top_level.txt,sha256=4CwRjkLnheIdI4jQwc4tK3dbRc58WqUmoqjkdDTWlME,41
29
- atk_common-1.6.0.dist-info/RECORD,,
25
+ atk_common-1.7.0.dist-info/METADATA,sha256=jKzI0ZFXA0TjvY43_0Yw39s2eLf5L21Xk51QfLhCxdk,1193
26
+ atk_common-1.7.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
27
+ atk_common-1.7.0.dist-info/license.txt,sha256=_0O6fWM00-wTurDjnZhUP_N5QiwGhItaQZqHq5eqadA,1063
28
+ atk_common-1.7.0.dist-info/top_level.txt,sha256=4CwRjkLnheIdI4jQwc4tK3dbRc58WqUmoqjkdDTWlME,41
29
+ atk_common-1.7.0.dist-info/RECORD,,