ihcsdk 2.8.7__py3-none-any.whl → 2.8.8__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.
ihcsdk/ihcclient.py CHANGED
@@ -120,7 +120,10 @@ class IHCSoapClient:
120
120
  projectMinor = info.get("projectMinorRevision", 0)
121
121
  buffer = io.BytesIO()
122
122
  for s in range(self.get_project_number_of_segments()):
123
- buffer.write(self.get_project_segment(s, projectMajor, projectMinor))
123
+ segment = self.get_project_segment(s, projectMajor, projectMinor)
124
+ if segment is False:
125
+ return False
126
+ buffer.write(segment)
124
127
  return zlib.decompress(buffer.getvalue(), 16 + zlib.MAX_WBITS).decode(
125
128
  "ISO-8859-1"
126
129
  )
@@ -343,32 +346,31 @@ class IHCSoapClient:
343
346
 
344
347
  def __get_value(resource_value):
345
348
  """Get a runtime value from the xml base on the type in the xml"""
346
- if resource_value == None:
349
+ if resource_value is None:
347
350
  return None
348
351
  valuetype = resource_value.attrib[
349
352
  "{http://www.w3.org/2001/XMLSchema-instance}type"
350
353
  ].split(":")[1]
351
- default_fn = lambda v: v.text
352
- result = {
353
- "WSBooleanValue": lambda v: (
354
- v.find("./ns2:value", IHCSoapClient.ihcns).text == "true"
355
- ),
356
- "WSIntegerValue": lambda v: int(
357
- v.find("./ns2:integer", IHCSoapClient.ihcns).text
358
- ),
359
- "WSFloatingPointValue": lambda v: round(
360
- float(v.find("./ns2:floatingPointValue", IHCSoapClient.ihcns).text), 2
361
- ),
362
- "WSEnumValue": lambda v: v.find("./ns2:enumName", IHCSoapClient.ihcns).text,
363
- "WSTimerValue": lambda v: int(
364
- v.find("./ns2:milliseconds", IHCSoapClient.ihcns).text
365
- ),
366
- "WSTimeValue": lambda v: IHCSoapClient.get_time(v),
367
- "WSDate": lambda v: IHCSoapClient.get_datetime(v),
368
- "WSDateValue": lambda v: IHCSoapClient.get_date(v),
369
- "int": lambda v: int(v.text),
370
- }.get(valuetype, default_fn)(resource_value)
371
-
354
+ result = resource_value.text
355
+ match valuetype:
356
+ case "WSBooleanValue":
357
+ result = resource_value.find("./ns2:value", IHCSoapClient.ihcns).text == "true"
358
+ case "WSIntegerValue":
359
+ result = resource_value.find("./ns2:integer", IHCSoapClient.ihcns).text
360
+ case "WSFloatingPointValue":
361
+ result = round(float(resource_value.find("./ns2:floatingPointValue", IHCSoapClient.ihcns).text), 2)
362
+ case "WSEnumValue":
363
+ result = resource_value.find("./ns2:enumName", IHCSoapClient.ihcns).text
364
+ case "WSTimerValue":
365
+ return int(resource_value.find("./ns2:milliseconds", IHCSoapClient.ihcns).text)
366
+ case "WSTimeValue":
367
+ result = IHCSoapClient.get_time(resource_value)
368
+ case "WSDate":
369
+ result = IHCSoapClient.get_datetime(resource_value)
370
+ case "WSDateValue":
371
+ result = IHCSoapClient.get_date(resource_value)
372
+ case "int":
373
+ result = int(resource_value.text)
372
374
  return result
373
375
 
374
376
  def get_runtime_value(self, resourceid: int):
@@ -534,9 +536,7 @@ class IHCSoapClient:
534
536
 
535
537
  def clear_user_log(self):
536
538
  """Clear the user log in the controller"""
537
- xdoc = self.connection.soap_action(
538
- "/ws/ConfigurationService", "clearUserLog", ""
539
- )
539
+ self.connection.soap_action("/ws/ConfigurationService", "clearUserLog", "")
540
540
  return
541
541
 
542
542
  def get_system_info(self):
ihcsdk/ihcconnection.py CHANGED
@@ -1,13 +1,17 @@
1
1
  """Implements soap reqeust using the "requests" module"""
2
+
2
3
  # pylint: disable=too-few-public-methods
3
4
  import logging
4
5
  import requests
5
6
  import xml.etree.ElementTree
6
7
 
7
8
  from urllib.parse import urlparse
9
+ from urllib3.util import Retry
10
+ from requests.adapters import HTTPAdapter
8
11
 
9
12
  _LOGGER = logging.getLogger(__name__)
10
13
 
14
+
11
15
  class IHCConnection(object):
12
16
  """Implements a http connection to the controller"""
13
17
 
@@ -24,6 +28,13 @@ class IHCConnection(object):
24
28
  self.last_exception = None
25
29
  self.last_response = None
26
30
  self.session = requests.Session()
31
+ self.retries = Retry(
32
+ total=3,
33
+ backoff_factor=0.2,
34
+ status_forcelist=[502, 503, 504],
35
+ allowed_methods={"POST"},
36
+ )
37
+ self.session.mount("http://", HTTPAdapter(max_retries=self.retries))
27
38
 
28
39
  def cert_verify(self):
29
40
  return None
@@ -39,7 +50,7 @@ class IHCConnection(object):
39
50
  "SOAPAction": action,
40
51
  }
41
52
  try:
42
- _LOGGER.debug( "soap payload %s",payload)
53
+ _LOGGER.debug("soap payload %s", payload)
43
54
  self.last_exception = None
44
55
  response = self.session.post(
45
56
  url=self.url + service,
@@ -47,22 +58,20 @@ class IHCConnection(object):
47
58
  data=payload,
48
59
  verify=self.cert_verify(),
49
60
  )
50
- _LOGGER.debug( "soap request response status %d",response.status_code)
51
- except requests.exceptions.RequestException as exp:
52
- _LOGGER.error( "soap request exception %s",exp)
53
- self.last_exception = exp
54
- return False
55
- if response.status_code != 200:
56
- self.last_response = response
57
- return False
58
- try:
59
- _LOGGER.debug( "soap request response %s",response.text)
61
+ _LOGGER.debug("soap request response status %d", response.status_code)
62
+ if response.status_code != 200:
63
+ self.last_response = response
64
+ return False
65
+ _LOGGER.debug("soap request response %s", response.text)
60
66
  xdoc = xml.etree.ElementTree.fromstring(response.text)
61
67
  if xdoc is None:
62
68
  return False
69
+ return xdoc
70
+ except requests.exceptions.RequestException as exp:
71
+ _LOGGER.error("soap request exception %s", exp)
72
+ self.last_exception = exp
63
73
  except xml.etree.ElementTree.ParseError as exp:
64
- _LOGGER.error( "soap request xml parse error %s",exp)
74
+ _LOGGER.error("soap request xml parse error %s", exp)
65
75
  self.last_exception = exp
66
76
  self.last_response = response
67
- return False
68
- return xdoc
77
+ return False
@@ -1,4 +1,5 @@
1
1
  """Implements soap reqeust using the "requests" module"""
2
+
2
3
  # pylint: disable=too-few-public-methods
3
4
  import os
4
5
  import requests
@@ -6,7 +7,6 @@ import requests
6
7
  from cryptography.x509 import load_pem_x509_certificate
7
8
  from cryptography.hazmat.backends import default_backend
8
9
  from cryptography.hazmat.primitives import hashes
9
- from requests.adapters import HTTPAdapter
10
10
  from requests.packages.urllib3.util.ssl_ import create_urllib3_context
11
11
 
12
12
  from ihcsdk.ihcconnection import IHCConnection
@@ -19,7 +19,10 @@ class IHCSSLConnection(IHCConnection):
19
19
  """Initialize the IHCSSLConnection with a url for the controller"""
20
20
  super(IHCSSLConnection, self).__init__(url)
21
21
  self.cert_file = os.path.dirname(__file__) + "/certs/ihc3.crt"
22
- self.session.mount("https://", CertAdapter(self.get_fingerprint_from_cert()))
22
+ self.session.mount(
23
+ "https://",
24
+ CertAdapter(self.get_fingerprint_from_cert(), max_retries=self.retries),
25
+ )
23
26
 
24
27
  def get_fingerprint_from_cert(self):
25
28
  """Get the fingerprint from the certificate"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ihcsdk
3
- Version: 2.8.7
3
+ Version: 2.8.8
4
4
  Summary: IHC Python SDK
5
5
  Home-page: https://github.com/dingusdk/PythonIhcSdk
6
6
  Author: Jens Nielsen
@@ -0,0 +1,12 @@
1
+ ihcsdk/__init__.py,sha256=ocAoa28ZKxGgMlDEHWEsd7n00OtGB0R9N7XQfRlih9Q,28
2
+ ihcsdk/ihcclient.py,sha256=LzcO0ZfIqfdQxF3TzoIfo2jVBU2u3QoZeZA4Fj3psqc,24302
3
+ ihcsdk/ihcconnection.py,sha256=qCFhU4cAWYnqgiXWF-xjUZj1TMBZ83caDj8jEE1qaoc,2889
4
+ ihcsdk/ihccontroller.py,sha256=9D97RX8DrFMLMxDBcIrhoYY-QEeKNjbVv_PiRW0wNyU,9180
5
+ ihcsdk/ihcsslconnection.py,sha256=q7gDchCN2_SXItp2T3dMvlXmHC7zVO5M0bqGnepiKiU,2079
6
+ ihcsdk/certs/ihc.crt,sha256=VYY_DiHrctlXBTNXGdJ2FN4TYuVnwnpVZ1i8t2_0cec,1002
7
+ ihcsdk/certs/ihc3.crt,sha256=Ka2L8zQ06A76W6fZc0ckScdrj1Cn-mhgqdhc61-cCrk,1398
8
+ ihcsdk-2.8.8.dist-info/METADATA,sha256=I2qpZJjWGY0Yad46vDMjNBljsRURFsopM0Ep8vgrn24,339
9
+ ihcsdk-2.8.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
10
+ ihcsdk-2.8.8.dist-info/license.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
11
+ ihcsdk-2.8.8.dist-info/top_level.txt,sha256=QgKE7TWblC-uXe5-7MVO5JtzvrPiMoVmGgKKsVR43hU,7
12
+ ihcsdk-2.8.8.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- ihcsdk/__init__.py,sha256=ocAoa28ZKxGgMlDEHWEsd7n00OtGB0R9N7XQfRlih9Q,28
2
- ihcsdk/ihcclient.py,sha256=KCgat4CnR69Vrb-GdA9tfduS7tQl9ymwqEBf-EPDM1U,24117
3
- ihcsdk/ihcconnection.py,sha256=qnOEEsgKulIUGRS223o9YSy9qmEVR1D6jNt2XxGFGho,2577
4
- ihcsdk/ihccontroller.py,sha256=9D97RX8DrFMLMxDBcIrhoYY-QEeKNjbVv_PiRW0wNyU,9180
5
- ihcsdk/ihcsslconnection.py,sha256=4IFVg1bpdJ25yN76tnFLndvL5Rl9-qbXrbENUjyTfzw,2056
6
- ihcsdk/certs/ihc.crt,sha256=VYY_DiHrctlXBTNXGdJ2FN4TYuVnwnpVZ1i8t2_0cec,1002
7
- ihcsdk/certs/ihc3.crt,sha256=Ka2L8zQ06A76W6fZc0ckScdrj1Cn-mhgqdhc61-cCrk,1398
8
- ihcsdk-2.8.7.dist-info/METADATA,sha256=q8VRbllNSE39vfayX1ui00DurTtIACN24dL7WJ0XVCY,339
9
- ihcsdk-2.8.7.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
10
- ihcsdk-2.8.7.dist-info/license.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
11
- ihcsdk-2.8.7.dist-info/top_level.txt,sha256=QgKE7TWblC-uXe5-7MVO5JtzvrPiMoVmGgKKsVR43hU,7
12
- ihcsdk-2.8.7.dist-info/RECORD,,
File without changes