alertlogic-sdk-python 1.0.72__py3-none-any.whl → 1.0.74__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: alertlogic-sdk-python
3
- Version: 1.0.72
3
+ Version: 1.0.74
4
4
  Summary: Alert Logic Software Development Kit for Python.
5
5
  Home-page: https://github.com/alertlogic/alertlogic-sdk-python
6
6
  Author: Alert Logic Inc.
@@ -28,7 +28,7 @@ Requires-Dist: pyyaml (>=5.4.1)
28
28
  Requires-Dist: jsonschema[format_nongpl] (==3.2.0)
29
29
  Requires-Dist: m2r2 (==0.3.2)
30
30
  Requires-Dist: boto3 (>=1.16.57)
31
- Requires-Dist: alertlogic-sdk-definitions (>=0.1.109)
31
+ Requires-Dist: alertlogic-sdk-definitions (>=0.1.110)
32
32
  Provides-Extra: dev
33
33
  Requires-Dist: pytest (>=3) ; extra == 'dev'
34
34
  Requires-Dist: mock (>=2.0.0) ; extra == 'dev'
@@ -163,6 +163,23 @@ export ALERTLOGIC_ENDPOINT="http://api.aesolo.com:3001"
163
163
 
164
164
  ## History
165
165
 
166
+ ### v1.0.74
167
+
168
+ * Wed, 8 Mar 2023 08:54:55 -0600 - Merge pull request #123 from EvanBrown96/fix-service-name-bug-environment-creation
169
+ * Tue, 7 Mar 2023 11:05:42 -0600 - Merge pull request #122 from alertlogic/update_workflow
170
+ * Mon, 6 Mar 2023 13:16:59 -0500 - fix bug where the service name was not being used correctly when querying dynamodb/ssm for credentials
171
+ * Fri, 3 Mar 2023 11:20:19 -0600 - Update workflow to stop using depricated node versions
172
+
173
+ ### v1.0.73
174
+
175
+ * Thu, 2 Mar 2023 09:09:13 -0600 - Merge pull request #121 from EvanBrown96/add-ssm-keys-check-2
176
+ * Tue, 28 Feb 2023 13:58:20 -0500 - use raise from
177
+ * Tue, 28 Feb 2023 13:52:05 -0500 - documentation clarity
178
+ * Tue, 28 Feb 2023 13:50:37 -0500 - re-add both-source functionality
179
+ * Tue, 28 Feb 2023 10:34:25 -0500 - fix a couple bugs and update tests
180
+ * Tue, 28 Feb 2023 10:09:12 -0500 - switch to just one application in AlEnv creation
181
+ * Tue, 28 Feb 2023 09:55:27 -0500 - update to fix bugs/better implementation
182
+
166
183
  ### v1.0.72
167
184
 
168
185
  * Thu, 23 Feb 2023 16:11:36 -0600 - Merge pull request #114 from alertlogic/fix_deprication_warning
@@ -1,17 +1,17 @@
1
1
  almdrlib/__init__.py,sha256=0UF4wnDFZhA2xWeOKc3mlMZ7oUmXrbek5wEPQNdWvB4,2313
2
2
  almdrlib/client.py,sha256=k_SVsTLx534iijG32-oaxUqUhmyL-N4ZvAmnYgDZVCU,33218
3
- almdrlib/config.py,sha256=LH56CIAARn7-uYfcP7I2mAwe0H-TRV0pJNQeQgRERJw,10114
3
+ almdrlib/config.py,sha256=DAGPx_75nM22XPXNZ-sXXiroc5oMUPYNX1hLvoHIll4,10351
4
4
  almdrlib/constants.py,sha256=tBjHCqt8J1N7olctA_WGgIXu1Np1vQjl9TtTGQOD4Hk,434
5
- almdrlib/environment.py,sha256=thScSSsNz83NyaLRKcTFgJMsxMwXe2KuEcBc9FYqXLI,5004
5
+ almdrlib/environment.py,sha256=pzxMDBx5Pd1ro7TDvBX3rCAv0ySGaw7b1EhxCDL8DzQ,5997
6
6
  almdrlib/exceptions.py,sha256=pSmRPgWyGg-eyiHCgaxBD4AJxoN9ipj6VluhYFhWoTY,507
7
7
  almdrlib/region.py,sha256=cb5wd5apoHyGzEVWv0ah2VnZj8YQihXTbxsEk17Rg2c,1396
8
8
  almdrlib/session.py,sha256=XLFaxaN9dcQYAMLdVSrXsVWG2Vu-Uurdr92T0y7kFEo,13847
9
- almdrlib/version.py,sha256=WBNnS-vc7CzFoaXh_LvVuXOu9B5A_IpuxnreuDY3EWA,162
9
+ almdrlib/version.py,sha256=vQ4Yr9cfeNUVc0IPsg_A-BM5CJSg2DY2xKmKSKe1qiQ,162
10
10
  almdrlib/docs/__init__.py,sha256=t2Yd43bvoyOWqYZfImyblwKbdZ68o1HXyugSOOWdwmY,978
11
11
  almdrlib/docs/service.py,sha256=ZPtaWtOvRO9Gri7h_05DHRSAkzwSve3TY3tR3hNBP_I,12309
12
- alertlogic_sdk_python-1.0.72.dist-info/AUTHORS.rst,sha256=avwD1APR8ks8pUPY-pdqfUDii1Pj7Ne347WC7um6VMc,168
13
- alertlogic_sdk_python-1.0.72.dist-info/LICENSE,sha256=ilVPENu2JmctbUXAW8ddL0lKWFGlHihXb-Y8z6-1QMU,1076
14
- alertlogic_sdk_python-1.0.72.dist-info/METADATA,sha256=ZWK_riJmomBVlrK7QwoyjgJ1J3-sriZ9V5O_M43Rk4c,24056
15
- alertlogic_sdk_python-1.0.72.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
16
- alertlogic_sdk_python-1.0.72.dist-info/top_level.txt,sha256=LevbszFLSqdS3yOClOap4s8tc9OvBWCcPxnLaiN41PQ,9
17
- alertlogic_sdk_python-1.0.72.dist-info/RECORD,,
12
+ alertlogic_sdk_python-1.0.74.dist-info/AUTHORS.rst,sha256=avwD1APR8ks8pUPY-pdqfUDii1Pj7Ne347WC7um6VMc,168
13
+ alertlogic_sdk_python-1.0.74.dist-info/LICENSE,sha256=ilVPENu2JmctbUXAW8ddL0lKWFGlHihXb-Y8z6-1QMU,1076
14
+ alertlogic_sdk_python-1.0.74.dist-info/METADATA,sha256=i_U0z87KeHYcG3x0ivsqV1AWa5QpuMACvSlgOwWTu8E,25029
15
+ alertlogic_sdk_python-1.0.74.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
16
+ alertlogic_sdk_python-1.0.74.dist-info/top_level.txt,sha256=LevbszFLSqdS3yOClOap4s8tc9OvBWCcPxnLaiN41PQ,9
17
+ alertlogic_sdk_python-1.0.74.dist-info/RECORD,,
almdrlib/config.py CHANGED
@@ -104,26 +104,31 @@ class Config():
104
104
  else:
105
105
  self._initialize_defaults()
106
106
 
107
- self._init_al_env_credentials(service_name)
107
+ self._init_al_env_credentials()
108
108
 
109
109
  logger.debug("Finished configuraiton initialization. " +
110
110
  f"access_key_id={self._access_key_id}, " +
111
111
  f"account_id={self._account_id}, " +
112
112
  f"global_endpoint={self._global_endpoint}")
113
113
 
114
- def _init_al_env_credentials(self, service_name):
115
- try:
116
- if self._access_key_id is None or self._secret_key is None:
117
- service_name_key = f"{service_name}.aims_authc",
118
- env = AlEnv(service_name_key)
119
- # attempt SSM first, then dynamoDB
114
+ def _init_al_env_credentials(self):
115
+ if self._access_key_id is None or self._secret_key is None:
116
+ try:
117
+ # attempt ssm first
118
+ env = AlEnv(self._service_name, "aims_authc", "ssm")
120
119
  self._access_key_id = env.get_parameter('access_key_id', decrypt=True)
121
120
  self._secret_key = env.get_parameter('secret_access_key', decrypt=True)
122
- if self._access_key_id is None or self._secret_key is None:
123
- self._access_key_id = env.get('access_key_id')
124
- self._secret_key = env.get('secret_access_key')
125
- except Exception as e:
126
- logger.debug(f"Did not initialise aims credentials for {service_name} because {e}")
121
+ except Exception as e:
122
+ logger.debug(f"Did not initialise aims credentials via SSM for {self._service_name} because {e}")
123
+ if self._access_key_id is None or self._secret_key is None:
124
+ try:
125
+ # if that doesn't work, attempt dynamodb
126
+ env = AlEnv(self._service_name, "aims_authc", "dynamodb")
127
+ self._access_key_id = env.get('access_key_id')
128
+ self._secret_key = env.get('secret_access_key')
129
+ except Exception as e:
130
+ logger.debug(f"Did not initialise aims credentials via dynamodb for {self._service_name} because {e}")
131
+
127
132
 
128
133
  def _read_config_file(self):
129
134
  try:
almdrlib/environment.py CHANGED
@@ -15,6 +15,8 @@ Network or io errors are not handled.
15
15
  Usage:
16
16
  # export ALERTLOGIC_STACK_REGION=us-east-1
17
17
  # export ALERTLOGIC_STACK_NAME=integration
18
+
19
+ Dynamodb usage:
18
20
  >> env = AlEnv("myapplication")
19
21
  # Assuming parameter is stored in ddb as '"value"'
20
22
  >> env.get("my_parameter")
@@ -29,6 +31,9 @@ Usage:
29
31
  # Assuming parameter is stored in ddb as '"true"'
30
32
  >> env.get("my_parameter", type='boolean')
31
33
  True
34
+
35
+ SSM usage:
36
+ >> env = AlEnv("myapplication", source="ssm")
32
37
  # For String types in SSM:
33
38
  >> env.get_parameter("my_parameter")
34
39
  'value'
@@ -54,27 +59,36 @@ class AlEnvAwsConfigurationException(AlEnvException):
54
59
  class AlEnvConfigurationTableUnavailableException(AlEnvException):
55
60
  pass
56
61
 
62
+ class AlmdrlibSourceNotEnabledError(AlEnvException):
63
+ pass
64
+
57
65
 
58
66
  class AlEnv:
59
- def __init__(self, application_name):
67
+ def __init__(self, application_name, client=None, source=("dynamodb",)):
60
68
  self.application_name = application_name
69
+ self.client = client
70
+ self.source = source if type(source) in [tuple, list] else (source,)
61
71
  self.region = AlEnv._get_region()
62
72
  self.stack_name = AlEnv._get_stack_name()
63
73
  self.table_name = AlEnv._table_name(self.region, self.stack_name)
64
74
  try:
65
75
  self.dynamodb = boto3.resource('dynamodb')
66
- self.table = self.dynamodb.Table(self.table_name)
67
- self._table_date_time = self.table.creation_date_time
68
76
  self.ssm = boto3.client('ssm')
69
- except botocore.exceptions.ClientError as e:
70
- if e.response['Error']['Code'] == 'ResourceNotFoundException':
71
- raise AlEnvConfigurationTableUnavailableException(self.table_name)
72
- else:
73
- raise AlEnvException(e)
74
77
  except (botocore.exceptions.NoRegionError, botocore.exceptions.NoCredentialsError) as e:
75
- raise AlEnvAwsConfigurationException(f'Please validate your AWS configuration: {e}')
78
+ raise AlEnvAwsConfigurationException(f'Please validate your AWS configuration') from e
79
+ if "dynamodb" in source:
80
+ try:
81
+ self.table = self.dynamodb.Table(self.table_name)
82
+ self._table_date_time = self.table.creation_date_time
83
+ except botocore.exceptions.ClientError as e:
84
+ if e.response['Error']['Code'] == 'ResourceNotFoundException':
85
+ raise AlEnvConfigurationTableUnavailableException(self.table_name)
86
+ else:
87
+ raise AlEnvException() from e
76
88
 
77
89
  def get(self, key, default=None, format='decoded', type=None):
90
+ if "dynamodb" not in self.source:
91
+ raise AlmdrlibSourceNotEnabledError("dynamodb is not enabled for this environment")
78
92
  fetched_value = self.table.get_item(Key={"key": self._make_ddb_key(key)}).get('Item', {}).get('value')
79
93
  converted = AlEnv._convert(fetched_value, format, type)
80
94
  if converted is not None:
@@ -83,18 +97,28 @@ class AlEnv:
83
97
  return default
84
98
 
85
99
  def get_parameter(self, key, default=None, decrypt=False):
100
+ if "ssm" not in self.source:
101
+ raise AlmdrlibSourceNotEnabledError("ssm is not enabled for this environment")
86
102
  try:
87
103
  parameter = self.ssm.get_parameter(Name=self._make_ssm_key(key), WithDecryption=decrypt)
88
104
  except self.ssm.exceptions.ParameterNotFound:
89
105
  return default
106
+ except botocore.exceptions.ClientError as e:
107
+ raise AlEnvException() from e
90
108
  return parameter["Parameter"]["Value"]
91
109
 
92
110
  def _make_ssm_key(self, option_key):
93
- return f"/deployments/{self._get_region()}/env-settings/{self._make_ddb_key(option_key)}"
111
+ return f"/deployments/{self.stack_name}/{self._get_region()}/env-settings/{self.application_name}/{self._make_client_option_key(option_key)}"
94
112
 
95
113
  def _make_ddb_key(self, option_key):
96
- return f"{self.application_name}.{option_key}"
114
+ return f"{self.application_name}.{self._make_client_option_key(option_key)}"
97
115
 
116
+ def _make_client_option_key(self, option_key):
117
+ if self.client is None:
118
+ return option_key
119
+ else:
120
+ return f"{self.client}.{option_key}"
121
+
98
122
  @staticmethod
99
123
  def _convert(value, format, type):
100
124
  if format == 'raw' and value:
almdrlib/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '1.0.72'
4
- __version_tuple__ = version_tuple = (1, 0, 72)
3
+ __version__ = version = '1.0.74'
4
+ __version_tuple__ = version_tuple = (1, 0, 74)