From 2bf3f78fc84390ba376cb65c864ca1ae27aecf5d Mon Sep 17 00:00:00 2001 From: rashidamiri Date: Sat, 20 Jun 2020 14:36:28 +0800 Subject: [PATCH 01/14] The new limit for snapshots per region is 100K and the quota name is "snapshots per region" --- awslimitchecker/services/ebs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awslimitchecker/services/ebs.py b/awslimitchecker/services/ebs.py index a6f2444d..cf92b839 100644 --- a/awslimitchecker/services/ebs.py +++ b/awslimitchecker/services/ebs.py @@ -262,11 +262,11 @@ def _get_limits_ebs(self): limits['Active snapshots'] = AwsLimit( 'Active snapshots', self, - 10000, + 100000, self.warning_threshold, self.critical_threshold, limit_type='AWS::EC2::VolumeSnapshot', - quotas_name='Number of EBS snapshots' + quotas_name='Snapshots Per Region' ) limits['Active volumes'] = AwsLimit( 'Active volumes', From 69e8b50e18b9cad254c34a8353eb6b25a05d5174 Mon Sep 17 00:00:00 2001 From: Puru <5674762+tuladhar@users.noreply.github.com> Date: Mon, 31 Aug 2020 10:42:30 +0545 Subject: [PATCH 02/14] Fix Python2.7 end of support date --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 4cd7bb57..1e41b064 100644 --- a/README.rst +++ b/README.rst @@ -100,7 +100,7 @@ Requirements **Either Docker in order to run via the** `docker image `__, **or:** -* Python 3.5 or newer. Python 2.7 will not be supported as of January 1, 2010. +* Python 3.5 or newer. Python 2.7 will not be supported as of January 1, 2020. * Python `VirtualEnv `_ and ``pip`` (recommended installation method; your OS/distribution should have packages for these) * `boto3 `_ >= 1.4.6 and its dependency `botocore `_ >= 1.6.0. From ba1a24ed6b1418a3ddd665380117f66b9d700da9 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Thu, 17 Sep 2020 12:54:19 -0400 Subject: [PATCH 03/14] Switch from deprecated pep8 to pycodestyle --- CHANGES.rst | 7 + awslimitchecker/services/dynamodb.py | 6 +- awslimitchecker/services/ebs.py | 56 ++-- awslimitchecker/services/ec2.py | 13 +- awslimitchecker/services/lambdafunc.py | 21 +- .../tests/services/result_fixtures.py | 287 +++++++++--------- awslimitchecker/tests/services/test_rds.py | 5 +- awslimitchecker/tests/services/test_ses.py | 5 +- awslimitchecker/tests/test_checker.py | 12 +- awslimitchecker/tests/test_trustedadvisor.py | 2 +- awslimitchecker/trustedadvisor.py | 6 +- awslimitchecker/utils.py | 2 +- awslimitchecker/version.py | 2 +- pytest.ini | 11 - setup.cfg | 14 + tox.ini | 6 +- 16 files changed, 241 insertions(+), 214 deletions(-) delete mode 100644 pytest.ini diff --git a/CHANGES.rst b/CHANGES.rst index fe70aafe..90ad15be 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,13 @@ Changelog ========= +.. _changelog.8_1_0: + +8.1.0 (2020-09-18) +------------------ + +* Switch from deprecated pep8 / pytest-pep8 to pycodestyle / pytest-pycodestyle. + .. _changelog.8_0_2: 8.0.2 (2020-03-03) diff --git a/awslimitchecker/services/dynamodb.py b/awslimitchecker/services/dynamodb.py index 9d8a7da0..437d9fb2 100644 --- a/awslimitchecker/services/dynamodb.py +++ b/awslimitchecker/services/dynamodb.py @@ -86,9 +86,11 @@ def _find_usage_dynamodb(self): gsi_write += gsi['ProvisionedThroughput'][ 'WriteCapacityUnits'] table_write_capacity = table.provisioned_throughput[ - 'WriteCapacityUnits'] + gsi_write + 'WriteCapacityUnits' + ] + gsi_write table_read_capacity = table.provisioned_throughput[ - 'ReadCapacityUnits'] + gsi_read + 'ReadCapacityUnits' + ] + gsi_read region_write_capacity += table_write_capacity region_read_capacity += table_read_capacity diff --git a/awslimitchecker/services/ebs.py b/awslimitchecker/services/ebs.py index a6f2444d..f3b668d3 100644 --- a/awslimitchecker/services/ebs.py +++ b/awslimitchecker/services/ebs.py @@ -117,32 +117,36 @@ def _find_usage_ebs(self): piops, aws_type='AWS::EC2::Volume' ) - self.limits['Provisioned IOPS (SSD) storage ' - '(GiB)']._add_current_usage( - piops_gb, - aws_type='AWS::EC2::Volume' - ) - self.limits['General Purpose (SSD) volume storage ' - '(GiB)']._add_current_usage( - gp_gb, - aws_type='AWS::EC2::Volume' - ) - self.limits['Magnetic volume storage ' - '(GiB)']._add_current_usage( - mag_gb, - aws_type='AWS::EC2::Volume' - ) - self.limits['Throughput Optimized (HDD) volume storage ' - '(GiB)']._add_current_usage( - st_gb, - aws_type='AWS::EC2::Volume' - ) - self.limits['Cold (HDD) volume storage ' - '(GiB)']._add_current_usage( - sc_gb, - aws_type='AWS::EC2::Volume' - ) - + self.limits[ + 'Provisioned IOPS (SSD) storage (GiB)' + ]._add_current_usage( + piops_gb, + aws_type='AWS::EC2::Volume' + ) + self.limits[ + 'General Purpose (SSD) volume storage (GiB)' + ]._add_current_usage( + gp_gb, + aws_type='AWS::EC2::Volume' + ) + self.limits[ + 'Magnetic volume storage (GiB)' + ]._add_current_usage( + mag_gb, + aws_type='AWS::EC2::Volume' + ) + self.limits[ + 'Throughput Optimized (HDD) volume storage (GiB)' + ]._add_current_usage( + st_gb, + aws_type='AWS::EC2::Volume' + ) + self.limits[ + 'Cold (HDD) volume storage (GiB)' + ]._add_current_usage( + sc_gb, + aws_type='AWS::EC2::Volume' + ) self.limits['Active volumes']._add_current_usage( vols, aws_type='AWS::EC2::Volume' diff --git a/awslimitchecker/services/ec2.py b/awslimitchecker/services/ec2.py index 014e7213..cbc70f56 100644 --- a/awslimitchecker/services/ec2.py +++ b/awslimitchecker/services/ec2.py @@ -698,12 +698,13 @@ def _find_usage_networking_eni_sg(self): for iface in ints: if iface.vpc is None: continue - self.limits['VPC security groups per elastic network ' - 'interface']._add_current_usage( - len(iface.groups), - aws_type='AWS::EC2::NetworkInterface', - resource_id=iface.id, - ) + self.limits[ + 'VPC security groups per elastic network interface' + ]._add_current_usage( + len(iface.groups), + aws_type='AWS::EC2::NetworkInterface', + resource_id=iface.id, + ) def _get_limits_networking(self): """ diff --git a/awslimitchecker/services/lambdafunc.py b/awslimitchecker/services/lambdafunc.py index 127b54fb..3cb9549c 100644 --- a/awslimitchecker/services/lambdafunc.py +++ b/awslimitchecker/services/lambdafunc.py @@ -66,9 +66,11 @@ def find_usage(self): logger.warn('Skipping Lambda: %s', str(ex)) return self.limits['Function Count']._add_current_usage( - resp['AccountUsage']['FunctionCount']) + resp['AccountUsage']['FunctionCount'] + ) self.limits['Total Code Size (MiB)']._add_current_usage( - int((resp['AccountUsage']['TotalCodeSize'])/1048576)) + int((resp['AccountUsage']['TotalCodeSize']) / 1048576) + ) self._have_usage = True def get_limits(self): @@ -98,15 +100,20 @@ def _update_limits_from_api(self): self.connect() lims = self.conn.get_account_settings()['AccountLimit'] self.limits['Total Code Size (MiB)']._set_api_limit( - (lims['TotalCodeSize']/1048576)) + (lims['TotalCodeSize'] / 1048576) + ) self.limits['Code Size Unzipped (MiB) per Function']._set_api_limit( - (lims['CodeSizeUnzipped']/1048576)) + (lims['CodeSizeUnzipped'] / 1048576) + ) self.limits['Unreserved Concurrent Executions']._set_api_limit( - lims['UnreservedConcurrentExecutions']) + lims['UnreservedConcurrentExecutions'] + ) self.limits['Concurrent Executions']._set_api_limit( - lims['ConcurrentExecutions']) + lims['ConcurrentExecutions'] + ) self.limits['Code Size Zipped (MiB) per Function']._set_api_limit( - (lims['CodeSizeZipped']/1048576)) + (lims['CodeSizeZipped'] / 1048576) + ) def _construct_limits(self): self.limits = {} diff --git a/awslimitchecker/tests/services/result_fixtures.py b/awslimitchecker/tests/services/result_fixtures.py index e1b25b91..737fa984 100644 --- a/awslimitchecker/tests/services/result_fixtures.py +++ b/awslimitchecker/tests/services/result_fixtures.py @@ -91,6 +91,7 @@ def get_boto3_resource_model(service_name, resource_name): ) return resource_cls + # get some resource models for specs... Instance = get_boto3_resource_model('ec2', 'Instance') SecurityGroup = get_boto3_resource_model('ec2', 'SecurityGroup') @@ -1139,8 +1140,8 @@ class ElasticBeanstalk(object): 'version-2' ], 'ConfigurationTemplates': [ - 'config-1', - 'config-2' + 'config-1', + 'config-2' ] }, { @@ -1153,8 +1154,8 @@ class ElasticBeanstalk(object): 'version-2' ], 'ConfigurationTemplates': [ - 'config-1', - 'config-2' + 'config-1', + 'config-2' ] } ] @@ -1298,54 +1299,54 @@ class ElasticBeanstalk(object): class ELB(object): test_find_usage = { - # this is a subset of response items - 'LoadBalancerDescriptions': [ - { - 'LoadBalancerName': 'elb-1', - 'ListenerDescriptions': [ - {'foo': 'bar'}, - ], - 'Instances': [] - }, - { - 'LoadBalancerName': 'elb-2', - 'ListenerDescriptions': [ - {'foo': 'bar'}, - {'foo': 'bar'}, - ], - 'Instances': [ - {'InstanceId': 'i-1'}, - {'InstanceId': 'i-2'}, - {'InstanceId': 'i-3'}, - {'InstanceId': 'i-4'}, - ] - }, - { - 'LoadBalancerName': 'elb-3', - 'ListenerDescriptions': [ - {'foo': 'bar'}, - {'foo': 'bar'}, - {'foo': 'bar'}, - ], - 'Instances': [{'InstanceId': 'i-5'}] - }, - { - 'LoadBalancerName': 'elb-4', - 'ListenerDescriptions': [ - {'foo': 'bar'}, - {'foo': 'bar'}, - {'foo': 'bar'}, - {'foo': 'bar'}, - {'foo': 'bar'}, - {'foo': 'bar'}, - ], - 'Instances': [ - {'InstanceId': 'i-6'}, - {'InstanceId': 'i-7'} - ] - } - ], - } + # this is a subset of response items + 'LoadBalancerDescriptions': [ + { + 'LoadBalancerName': 'elb-1', + 'ListenerDescriptions': [ + {'foo': 'bar'}, + ], + 'Instances': [] + }, + { + 'LoadBalancerName': 'elb-2', + 'ListenerDescriptions': [ + {'foo': 'bar'}, + {'foo': 'bar'}, + ], + 'Instances': [ + {'InstanceId': 'i-1'}, + {'InstanceId': 'i-2'}, + {'InstanceId': 'i-3'}, + {'InstanceId': 'i-4'}, + ] + }, + { + 'LoadBalancerName': 'elb-3', + 'ListenerDescriptions': [ + {'foo': 'bar'}, + {'foo': 'bar'}, + {'foo': 'bar'}, + ], + 'Instances': [{'InstanceId': 'i-5'}] + }, + { + 'LoadBalancerName': 'elb-4', + 'ListenerDescriptions': [ + {'foo': 'bar'}, + {'foo': 'bar'}, + {'foo': 'bar'}, + {'foo': 'bar'}, + {'foo': 'bar'}, + {'foo': 'bar'}, + ], + 'Instances': [ + {'InstanceId': 'i-6'}, + {'InstanceId': 'i-7'} + ] + } + ], + } test_update_limits_elb = { 'ResponseMetadata': { @@ -4378,98 +4379,98 @@ class Route53(object): class CloudTrail(object): mock_describe_trails = { - 'trailList': [ - { - 'Name': 'trail1', - 'S3BucketName': 'string', - 'S3KeyPrefix': 'string', - 'SnsTopicName': 'string', - 'SnsTopicARN': 'string', - 'IncludeGlobalServiceEvents': True, - 'IsMultiRegionTrail': True, - 'HomeRegion': 'thisregion', - 'TrailARN': 'trailarn1', - 'LogFileValidationEnabled': True, - 'CloudWatchLogsLogGroupArn': 'string', - 'CloudWatchLogsRoleArn': 'string', - 'KmsKeyId': 'string', - 'HasCustomEventSelectors': False - }, - { - 'Name': 'trail2', - 'S3BucketName': 'string', - 'S3KeyPrefix': 'string', - 'SnsTopicName': 'string', - 'SnsTopicARN': 'string', - 'IncludeGlobalServiceEvents': True, - 'IsMultiRegionTrail': True, - 'HomeRegion': 'thisregion', - 'TrailARN': 'trailarn2', - 'LogFileValidationEnabled': True, - 'CloudWatchLogsLogGroupArn': 'string', - 'CloudWatchLogsRoleArn': 'string', - 'KmsKeyId': 'string', - 'HasCustomEventSelectors': True - }, - { - 'Name': 'trail3', - 'S3BucketName': 'string', - 'S3KeyPrefix': 'string', - 'SnsTopicName': 'string', - 'SnsTopicARN': 'string', - 'IncludeGlobalServiceEvents': True, - 'IsMultiRegionTrail': True, - 'HomeRegion': 'otherRegion', - 'TrailARN': 'trailarn3', - 'LogFileValidationEnabled': True, - 'CloudWatchLogsLogGroupArn': 'string', - 'CloudWatchLogsRoleArn': 'string', - 'KmsKeyId': 'string', - 'HasCustomEventSelectors': True - }, - { - 'Name': 'trail4', - 'TrailARN': 'trailarn4', - 'HomeRegion': 'thisregion' - } - ], + 'trailList': [ + { + 'Name': 'trail1', + 'S3BucketName': 'string', + 'S3KeyPrefix': 'string', + 'SnsTopicName': 'string', + 'SnsTopicARN': 'string', + 'IncludeGlobalServiceEvents': True, + 'IsMultiRegionTrail': True, + 'HomeRegion': 'thisregion', + 'TrailARN': 'trailarn1', + 'LogFileValidationEnabled': True, + 'CloudWatchLogsLogGroupArn': 'string', + 'CloudWatchLogsRoleArn': 'string', + 'KmsKeyId': 'string', + 'HasCustomEventSelectors': False + }, + { + 'Name': 'trail2', + 'S3BucketName': 'string', + 'S3KeyPrefix': 'string', + 'SnsTopicName': 'string', + 'SnsTopicARN': 'string', + 'IncludeGlobalServiceEvents': True, + 'IsMultiRegionTrail': True, + 'HomeRegion': 'thisregion', + 'TrailARN': 'trailarn2', + 'LogFileValidationEnabled': True, + 'CloudWatchLogsLogGroupArn': 'string', + 'CloudWatchLogsRoleArn': 'string', + 'KmsKeyId': 'string', + 'HasCustomEventSelectors': True + }, + { + 'Name': 'trail3', + 'S3BucketName': 'string', + 'S3KeyPrefix': 'string', + 'SnsTopicName': 'string', + 'SnsTopicARN': 'string', + 'IncludeGlobalServiceEvents': True, + 'IsMultiRegionTrail': True, + 'HomeRegion': 'otherRegion', + 'TrailARN': 'trailarn3', + 'LogFileValidationEnabled': True, + 'CloudWatchLogsLogGroupArn': 'string', + 'CloudWatchLogsRoleArn': 'string', + 'KmsKeyId': 'string', + 'HasCustomEventSelectors': True + }, + { + 'Name': 'trail4', + 'TrailARN': 'trailarn4', + 'HomeRegion': 'thisregion' + } + ], } mock_get_event_selectors = { - 'TrailARN': 'string', - 'EventSelectors': [ - { - 'ReadWriteType': 'ReadOnly', - 'IncludeManagementEvents': True, - 'DataResources': [ - { - 'Type': 'string', - 'Values': [ - 'string', - ] - }, - { - 'Type': 'string', - 'Values': [ - 'string', - ] - }, - { - 'Type': 'string', - 'Values': [ - 'string', - ] - } - ] - }, - { - 'ReadWriteType': 'ReadOnly', - 'IncludeManagementEvents': True, - 'DataResources': [] - }, - { - 'ReadWriteType': 'ReadOnly', - 'IncludeManagementEvents': True - } - ] + 'TrailARN': 'string', + 'EventSelectors': [ + { + 'ReadWriteType': 'ReadOnly', + 'IncludeManagementEvents': True, + 'DataResources': [ + { + 'Type': 'string', + 'Values': [ + 'string', + ] + }, + { + 'Type': 'string', + 'Values': [ + 'string', + ] + }, + { + 'Type': 'string', + 'Values': [ + 'string', + ] + } + ] + }, + { + 'ReadWriteType': 'ReadOnly', + 'IncludeManagementEvents': True, + 'DataResources': [] + }, + { + 'ReadWriteType': 'ReadOnly', + 'IncludeManagementEvents': True + } + ] } diff --git a/awslimitchecker/tests/services/test_rds.py b/awslimitchecker/tests/services/test_rds.py index 8d419119..c543e936 100644 --- a/awslimitchecker/tests/services/test_rds.py +++ b/awslimitchecker/tests/services/test_rds.py @@ -231,8 +231,9 @@ def test_find_usage_security_groups(self): assert usage[0].get_value() == 2 assert usage[0].aws_type == 'AWS::RDS::DBSecurityGroup' - usage = sorted(cls.limits[ - 'Max auths per security group'].get_current_usage()) + usage = sorted( + cls.limits['Max auths per security group'].get_current_usage() + ) assert len(usage) == 5 assert usage[0].get_value() == 0 assert usage[0].resource_id == 'MyEmptySecurityGroup' diff --git a/awslimitchecker/tests/services/test_ses.py b/awslimitchecker/tests/services/test_ses.py index 619a736d..1e9256ab 100644 --- a/awslimitchecker/tests/services/test_ses.py +++ b/awslimitchecker/tests/services/test_ses.py @@ -106,8 +106,9 @@ def test_find_usage(self): assert cls._have_usage is True assert mock_conn.mock_calls == [call.get_send_quota()] assert len(cls.limits['Daily sending quota'].get_current_usage()) == 1 - assert cls.limits['Daily sending quota'].get_current_usage()[ - 0].get_value() == 122.0 + assert cls.limits[ + 'Daily sending quota' + ].get_current_usage()[0].get_value() == 122.0 def test_find_usage_invalid_region(self): def se_get(): diff --git a/awslimitchecker/tests/test_checker.py b/awslimitchecker/tests/test_checker.py index 4c613716..c09dce75 100644 --- a/awslimitchecker/tests/test_checker.py +++ b/awslimitchecker/tests/test_checker.py @@ -461,12 +461,12 @@ def test_boto3_connection_kwargs_profile(self): with patch('%s.logger' % pbm) as mock_logger: with patch('%s.boto3.Session' % pbm) as mock_sess: with patch.dict('%s._services' % pbm, {}, clear=True): - mock_sess.return_value = mock_session - cls = AwsLimitChecker(profile_name='myprof') - mock_get_sts.reset_mock() - mock_logger.reset_mock() - mock_sess.reset_mock() - res = cls._boto_conn_kwargs + mock_sess.return_value = mock_session + cls = AwsLimitChecker(profile_name='myprof') + mock_get_sts.reset_mock() + mock_logger.reset_mock() + mock_sess.reset_mock() + res = cls._boto_conn_kwargs assert mock_get_sts.mock_calls == [] assert mock_logger.mock_calls == [ call.debug('Using credentials profile: %s', 'myprof') diff --git a/awslimitchecker/tests/test_trustedadvisor.py b/awslimitchecker/tests/test_trustedadvisor.py index 61f81bdd..6bb5e562 100644 --- a/awslimitchecker/tests/test_trustedadvisor.py +++ b/awslimitchecker/tests/test_trustedadvisor.py @@ -327,7 +327,7 @@ def se_api(language=None): call.describe_trusted_advisor_checks(language='en') ] assert excinfo.value.response['ResponseMetadata'][ - 'HTTPStatusCode'] == 400 + 'HTTPStatusCode'] == 400 assert excinfo.value.response['Error']['Message'] == 'foo' assert excinfo.value.response['Error']['Code'] == 'SomeOtherException' diff --git a/awslimitchecker/trustedadvisor.py b/awslimitchecker/trustedadvisor.py index 8dc4d7ab..1e2bf0c0 100644 --- a/awslimitchecker/trustedadvisor.py +++ b/awslimitchecker/trustedadvisor.py @@ -232,13 +232,13 @@ def _get_limit_check_id(self): ex.response['Error']['Message'] ) self.have_ta = False - return (None, None) + return None, None else: raise ex for check in checks: if ( - check['category'] == 'performance' and - check['name'] == 'Service Limits' + check['category'] == 'performance' and + check['name'] == 'Service Limits' ): logger.debug("Found TA check; id=%s", check['id']) return ( diff --git a/awslimitchecker/utils.py b/awslimitchecker/utils.py index 9df86b8e..a299511b 100644 --- a/awslimitchecker/utils.py +++ b/awslimitchecker/utils.py @@ -186,7 +186,7 @@ def _get_dict_value_by_path(d, path): k = tmp_path.pop(0) d = d[k] return d - except: + except Exception: return None diff --git a/awslimitchecker/version.py b/awslimitchecker/version.py index b11b8792..dbbc9927 100644 --- a/awslimitchecker/version.py +++ b/awslimitchecker/version.py @@ -47,7 +47,7 @@ except ImportError: logger.error("Unable to import versionfinder", exc_info=True) -_VERSION_TUP = (8, 0, 2) +_VERSION_TUP = (8, 1, 0) _VERSION = '.'.join([str(x) for x in _VERSION_TUP]) _PROJECT_URL = 'https://github.com/jantman/awslimitchecker' diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index 2d59103b..00000000 --- a/pytest.ini +++ /dev/null @@ -1,11 +0,0 @@ -[pytest] -pep8ignore = - lib/* ALL - lib64/* ALL -pep8maxlinelength = 80 -flakes-ignore = - awslimitchecker/services/__init__.py UnusedImport - awslimitchecker/metrics/__init__.py UnusedImport - awslimitchecker/alerts/__init__.py UnusedImport -markers = - integration: actual integration tests that connect to AWS APIs diff --git a/setup.cfg b/setup.cfg index 3c6e79cf..dd22f3ea 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,16 @@ [bdist_wheel] universal=1 + +[pycodestyle] +exclude = lib/*,lib64/* +max-line-length = 80 +ignore = E741,W504 + +[tool:pytest] +flakes-ignore = + awslimitchecker/services/__init__.py UnusedImport + awslimitchecker/metrics/__init__.py UnusedImport + awslimitchecker/alerts/__init__.py UnusedImport + services/__init__.py UnusedImport + metrics/__init__.py UnusedImport + alerts/__init__.py UnusedImport diff --git a/tox.ini b/tox.ini index 17c4e93d..ec8095aa 100644 --- a/tox.ini +++ b/tox.ini @@ -6,12 +6,12 @@ deps = cov-core coverage execnet - pep8 + pycodestyle py pytest pytest-cache pytest-cov - pytest-pep8 + pytest-pycodestyle pytest-flakes mock freezegun @@ -51,7 +51,7 @@ commands = virtualenv --version pip --version pip freeze - py.test -rxs -vv --durations=10 --pep8 --flakes --blockage -m "not integration" --cov-report term-missing --cov-report xml --cov-report html --cov-config {toxinidir}/.coveragerc --cov=awslimitchecker {posargs} awslimitchecker + py.test -rxs -vv --durations=10 --pycodestyle --flakes --blockage -m "not integration" --cov-report term-missing --cov-report xml --cov-report html --cov-config {toxinidir}/.coveragerc --cov=awslimitchecker {posargs} awslimitchecker # always recreate the venv recreate = True From fb42b8aee99abbae6ebec80035e8a59eb76a20ac Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Thu, 17 Sep 2020 13:31:12 -0400 Subject: [PATCH 04/14] Stop testing under Python 2.7 and Python 3.4 --- CHANGES.rst | 1 + README.rst | 2 +- docs/source/getting_started.rst | 2 +- tox.ini | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 90ad15be..5e495325 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,7 @@ Changelog 8.1.0 (2020-09-18) ------------------ +* Stop testing under Python 2.7 and Python 3.4. * Switch from deprecated pep8 / pytest-pep8 to pycodestyle / pytest-pycodestyle. .. _changelog.8_0_2: diff --git a/README.rst b/README.rst index 1e41b064..3ad7cda7 100644 --- a/README.rst +++ b/README.rst @@ -100,7 +100,7 @@ Requirements **Either Docker in order to run via the** `docker image `__, **or:** -* Python 3.5 or newer. Python 2.7 will not be supported as of January 1, 2020. +* Python 3.5 or newer. * Python `VirtualEnv `_ and ``pip`` (recommended installation method; your OS/distribution should have packages for these) * `boto3 `_ >= 1.4.6 and its dependency `botocore `_ >= 1.6.0. diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index 36f35bdd..ae277ff5 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -62,7 +62,7 @@ Requirements **Either Docker in order to run via the** :ref:`docker image `, **or:** -* Python 3.5 or newer. Python 2.7 will not be supported as of January 1, 2010. +* Python 3.5 or newer. * Python `VirtualEnv `_ and ``pip`` (recommended installation method; your OS/distribution should have packages for these) * `boto3 `_ >= 1.4.6 and its dependency `botocore `_ >= 1.6.0. diff --git a/tox.ini b/tox.ini index ec8095aa..decdb2d9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py27,py34,py35,py36,py37,py38,pypy,pypy3,docs,localdocs,integration,integration3,docker +envlist = py35,py36,py37,py38,pypy,pypy3,docs,localdocs,integration,integration3,docker [testenv] deps = From 4e7526ddfea7e6ab37b240930ef2aa32caebbb26 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Thu, 17 Sep 2020 13:35:49 -0400 Subject: [PATCH 05/14] temporarily pin pytest to <6.0.0 to kick the can down the road on some breaking changes --- CHANGES.rst | 7 +++++-- tox.ini | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5e495325..4036c0ed 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,8 +6,11 @@ Changelog 8.1.0 (2020-09-18) ------------------ -* Stop testing under Python 2.7 and Python 3.4. -* Switch from deprecated pep8 / pytest-pep8 to pycodestyle / pytest-pycodestyle. +* Internal testing changes: + + * Stop testing under Python 2.7 and Python 3.4. + * Switch from deprecated pep8 / pytest-pep8 to pycodestyle / pytest-pycodestyle. + * Pin pytest to ``<6.0.0`` to avoid some breaking changes for now. .. _changelog.8_0_2: diff --git a/tox.ini b/tox.ini index decdb2d9..28151050 100644 --- a/tox.ini +++ b/tox.ini @@ -8,7 +8,7 @@ deps = execnet pycodestyle py - pytest + pytest<6.0.0 pytest-cache pytest-cov pytest-pycodestyle From 8f1403fe0b3be09298b6666b14623ada9af31e22 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Thu, 17 Sep 2020 13:44:57 -0400 Subject: [PATCH 06/14] Fixup previous commit - remove py27 and py34 from travis config; remove py27 integration tests; switch integration3 tests from 3.7 to 3.8 --- .travis.yml | 8 +------- CHANGES.rst | 1 + tox.ini | 15 +++------------ 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/.travis.yml b/.travis.yml index c4819240..a8bb2bc6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,10 +3,6 @@ sudo: false cache: pip matrix: include: - - python: "2.7" - env: TOXENV=py27 - - python: "3.4" - env: TOXENV=py34 - python: "3.5" env: TOXENV=py35 - python: "3.6" @@ -27,9 +23,7 @@ matrix: - docker - python: "3.8" env: TOXENV=docs - - python: "2.7" - env: TOXENV=integration - - python: "3.7" + - python: "3.8" env: TOXENV=integration3 install: - git config --global user.email "travisci@jasonantman.com" diff --git a/CHANGES.rst b/CHANGES.rst index 4036c0ed..a4f2a157 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -11,6 +11,7 @@ Changelog * Stop testing under Python 2.7 and Python 3.4. * Switch from deprecated pep8 / pytest-pep8 to pycodestyle / pytest-pycodestyle. * Pin pytest to ``<6.0.0`` to avoid some breaking changes for now. + * Switch integration test environment from Python 3.7 to Python 3.8. .. _changelog.8_0_2: diff --git a/tox.ini b/tox.ini index 28151050..b4734d1b 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py35,py36,py37,py38,pypy,pypy3,docs,localdocs,integration,integration3,docker +envlist = py35,py36,py37,py38,pypy,pypy3,docs,localdocs,integration3,docker [testenv] deps = @@ -132,7 +132,7 @@ commands = # build sphinx-build -a -n -W -b html {toxinidir}/docs/source {toxinidir}/docs/build/html -[testenv:integration] +[testenv:integration3] deps = execnet py @@ -147,7 +147,7 @@ passenv = CI TRAVIS* CONTINUOUS_INTEGRATION AWS* setenv = TOXINIDIR={toxinidir} TOXDISTDIR={distdir} -basepython = python2.7 +basepython = python3.8 sitepackages = False whitelist_externals = env test commands = @@ -157,15 +157,6 @@ commands = pip freeze py.test -rxs -vv --durations=10 -m "integration" awslimitchecker -[testenv:integration3] -deps = {[testenv:integration]deps} -passenv = {[testenv:integration]passenv} -setenv = {[testenv:integration]setenv} -basepython = python3.7 -sitepackages = False -whitelist_externals = env test -commands = {[testenv:integration]commands} - [testenv:docker] basepython = python3.8 setenv = From aa6e56eb00c8b15a9edebbce64fada7cd382aed1 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Thu, 17 Sep 2020 14:39:24 -0400 Subject: [PATCH 07/14] fix docs build --- awslimitchecker/limit.py | 6 +++--- docs/source/awslimitchecker.alerts.base.rst | 1 + docs/source/awslimitchecker.alerts.dummy.rst | 1 + docs/source/awslimitchecker.alerts.pagerdutyv1.rst | 1 + docs/source/awslimitchecker.alerts.rst | 2 ++ docs/source/awslimitchecker.checker.rst | 1 + docs/source/awslimitchecker.connectable.rst | 1 + docs/source/awslimitchecker.limit.rst | 1 + docs/source/awslimitchecker.metrics.base.rst | 1 + docs/source/awslimitchecker.metrics.datadog.rst | 1 + docs/source/awslimitchecker.metrics.dummy.rst | 1 + docs/source/awslimitchecker.metrics.rst | 2 ++ docs/source/awslimitchecker.quotas.rst | 1 + docs/source/awslimitchecker.rst | 3 +++ docs/source/awslimitchecker.runner.rst | 1 + docs/source/awslimitchecker.services.apigateway.rst | 1 + docs/source/awslimitchecker.services.autoscaling.rst | 1 + docs/source/awslimitchecker.services.base.rst | 1 + docs/source/awslimitchecker.services.cloudformation.rst | 1 + docs/source/awslimitchecker.services.cloudtrail.rst | 1 + docs/source/awslimitchecker.services.directoryservice.rst | 1 + docs/source/awslimitchecker.services.dynamodb.rst | 1 + docs/source/awslimitchecker.services.ebs.rst | 1 + docs/source/awslimitchecker.services.ec2.rst | 1 + docs/source/awslimitchecker.services.ecs.rst | 1 + docs/source/awslimitchecker.services.efs.rst | 1 + docs/source/awslimitchecker.services.elasticache.rst | 1 + docs/source/awslimitchecker.services.elasticbeanstalk.rst | 1 + docs/source/awslimitchecker.services.elb.rst | 1 + docs/source/awslimitchecker.services.firehose.rst | 1 + docs/source/awslimitchecker.services.iam.rst | 1 + docs/source/awslimitchecker.services.lambdafunc.rst | 1 + docs/source/awslimitchecker.services.rds.rst | 1 + docs/source/awslimitchecker.services.redshift.rst | 1 + docs/source/awslimitchecker.services.route53.rst | 1 + docs/source/awslimitchecker.services.rst | 2 ++ docs/source/awslimitchecker.services.s3.rst | 1 + docs/source/awslimitchecker.services.ses.rst | 1 + docs/source/awslimitchecker.services.vpc.rst | 1 + docs/source/awslimitchecker.trustedadvisor.rst | 1 + docs/source/awslimitchecker.utils.rst | 1 + docs/source/awslimitchecker.version.rst | 1 + docs/source/conf.py | 5 ++--- tox.ini | 4 ++-- 44 files changed, 53 insertions(+), 8 deletions(-) diff --git a/awslimitchecker/limit.py b/awslimitchecker/limit.py index f9fe3912..65e054cf 100644 --- a/awslimitchecker/limit.py +++ b/awslimitchecker/limit.py @@ -288,13 +288,13 @@ def get_current_usage_str(self): "". If the limit has only one current usage instance, this will be - that instance's :py:meth:`~.AwsLimitUsage.__str__` value. + that instance's ``AwsLimitUsage.__str__`` value. If the limit has more than one current usage instance, this will be the a string of the form ``max: X (Y)`` where ``X`` is - the :py:meth:`~.AwsLimitUsage.__str__` value of the instance + the ``AwsLimitUsage.__str__`` value of the instance with the maximum value, and ``Y`` is a comma-separated list - of the :py:meth:`~.AwsLimitUsage.__str__` values of all usage + of the ``AwsLimitUsage.__str__`` values of all usage instances in ascending order. :returns: representation of current usage diff --git a/docs/source/awslimitchecker.alerts.base.rst b/docs/source/awslimitchecker.alerts.base.rst index fd255f03..e87c2967 100644 --- a/docs/source/awslimitchecker.alerts.base.rst +++ b/docs/source/awslimitchecker.alerts.base.rst @@ -5,3 +5,4 @@ awslimitchecker.alerts.base module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.alerts.dummy.rst b/docs/source/awslimitchecker.alerts.dummy.rst index b54376c5..f9c598a5 100644 --- a/docs/source/awslimitchecker.alerts.dummy.rst +++ b/docs/source/awslimitchecker.alerts.dummy.rst @@ -5,3 +5,4 @@ awslimitchecker.alerts.dummy module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.alerts.pagerdutyv1.rst b/docs/source/awslimitchecker.alerts.pagerdutyv1.rst index 30c859c0..61044c41 100644 --- a/docs/source/awslimitchecker.alerts.pagerdutyv1.rst +++ b/docs/source/awslimitchecker.alerts.pagerdutyv1.rst @@ -5,3 +5,4 @@ awslimitchecker.alerts.pagerdutyv1 module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.alerts.rst b/docs/source/awslimitchecker.alerts.rst index 886467d8..d02b3aa3 100644 --- a/docs/source/awslimitchecker.alerts.rst +++ b/docs/source/awslimitchecker.alerts.rst @@ -5,11 +5,13 @@ awslimitchecker.alerts package :members: :undoc-members: :show-inheritance: + :private-members: Submodules ---------- .. toctree:: + :maxdepth: 4 awslimitchecker.alerts.base awslimitchecker.alerts.dummy diff --git a/docs/source/awslimitchecker.checker.rst b/docs/source/awslimitchecker.checker.rst index bcb832db..b87fa134 100644 --- a/docs/source/awslimitchecker.checker.rst +++ b/docs/source/awslimitchecker.checker.rst @@ -5,3 +5,4 @@ awslimitchecker.checker module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.connectable.rst b/docs/source/awslimitchecker.connectable.rst index efbf5f69..8cb48217 100644 --- a/docs/source/awslimitchecker.connectable.rst +++ b/docs/source/awslimitchecker.connectable.rst @@ -5,3 +5,4 @@ awslimitchecker.connectable module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.limit.rst b/docs/source/awslimitchecker.limit.rst index 93f5d406..1e8da75b 100644 --- a/docs/source/awslimitchecker.limit.rst +++ b/docs/source/awslimitchecker.limit.rst @@ -5,3 +5,4 @@ awslimitchecker.limit module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.metrics.base.rst b/docs/source/awslimitchecker.metrics.base.rst index a5da667f..dc7ee043 100644 --- a/docs/source/awslimitchecker.metrics.base.rst +++ b/docs/source/awslimitchecker.metrics.base.rst @@ -5,3 +5,4 @@ awslimitchecker.metrics.base module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.metrics.datadog.rst b/docs/source/awslimitchecker.metrics.datadog.rst index 41cd689e..f8977a2d 100644 --- a/docs/source/awslimitchecker.metrics.datadog.rst +++ b/docs/source/awslimitchecker.metrics.datadog.rst @@ -5,3 +5,4 @@ awslimitchecker.metrics.datadog module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.metrics.dummy.rst b/docs/source/awslimitchecker.metrics.dummy.rst index d555e35a..bb0940e4 100644 --- a/docs/source/awslimitchecker.metrics.dummy.rst +++ b/docs/source/awslimitchecker.metrics.dummy.rst @@ -5,3 +5,4 @@ awslimitchecker.metrics.dummy module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.metrics.rst b/docs/source/awslimitchecker.metrics.rst index 33994cee..7ee46386 100644 --- a/docs/source/awslimitchecker.metrics.rst +++ b/docs/source/awslimitchecker.metrics.rst @@ -5,11 +5,13 @@ awslimitchecker.metrics package :members: :undoc-members: :show-inheritance: + :private-members: Submodules ---------- .. toctree:: + :maxdepth: 4 awslimitchecker.metrics.base awslimitchecker.metrics.datadog diff --git a/docs/source/awslimitchecker.quotas.rst b/docs/source/awslimitchecker.quotas.rst index 3414ec31..5e46c3ee 100644 --- a/docs/source/awslimitchecker.quotas.rst +++ b/docs/source/awslimitchecker.quotas.rst @@ -5,3 +5,4 @@ awslimitchecker.quotas module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.rst b/docs/source/awslimitchecker.rst index fb98f738..ad21990f 100644 --- a/docs/source/awslimitchecker.rst +++ b/docs/source/awslimitchecker.rst @@ -5,11 +5,13 @@ awslimitchecker package :members: :undoc-members: :show-inheritance: + :private-members: Subpackages ----------- .. toctree:: + :maxdepth: 4 awslimitchecker.alerts awslimitchecker.metrics @@ -19,6 +21,7 @@ Submodules ---------- .. toctree:: + :maxdepth: 4 awslimitchecker.checker awslimitchecker.connectable diff --git a/docs/source/awslimitchecker.runner.rst b/docs/source/awslimitchecker.runner.rst index 2c0d0a83..1f612911 100644 --- a/docs/source/awslimitchecker.runner.rst +++ b/docs/source/awslimitchecker.runner.rst @@ -5,3 +5,4 @@ awslimitchecker.runner module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.apigateway.rst b/docs/source/awslimitchecker.services.apigateway.rst index e83e03ee..c948b58d 100644 --- a/docs/source/awslimitchecker.services.apigateway.rst +++ b/docs/source/awslimitchecker.services.apigateway.rst @@ -5,3 +5,4 @@ awslimitchecker.services.apigateway module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.autoscaling.rst b/docs/source/awslimitchecker.services.autoscaling.rst index cbbbf50e..41598020 100644 --- a/docs/source/awslimitchecker.services.autoscaling.rst +++ b/docs/source/awslimitchecker.services.autoscaling.rst @@ -5,3 +5,4 @@ awslimitchecker.services.autoscaling module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.base.rst b/docs/source/awslimitchecker.services.base.rst index 7d740a2f..bec97051 100644 --- a/docs/source/awslimitchecker.services.base.rst +++ b/docs/source/awslimitchecker.services.base.rst @@ -5,3 +5,4 @@ awslimitchecker.services.base module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.cloudformation.rst b/docs/source/awslimitchecker.services.cloudformation.rst index cbeffe20..4b9dcbd4 100644 --- a/docs/source/awslimitchecker.services.cloudformation.rst +++ b/docs/source/awslimitchecker.services.cloudformation.rst @@ -5,3 +5,4 @@ awslimitchecker.services.cloudformation module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.cloudtrail.rst b/docs/source/awslimitchecker.services.cloudtrail.rst index 8bd79ff7..0c277d89 100644 --- a/docs/source/awslimitchecker.services.cloudtrail.rst +++ b/docs/source/awslimitchecker.services.cloudtrail.rst @@ -5,3 +5,4 @@ awslimitchecker.services.cloudtrail module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.directoryservice.rst b/docs/source/awslimitchecker.services.directoryservice.rst index 5e5a0930..ef465d22 100644 --- a/docs/source/awslimitchecker.services.directoryservice.rst +++ b/docs/source/awslimitchecker.services.directoryservice.rst @@ -5,3 +5,4 @@ awslimitchecker.services.directoryservice module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.dynamodb.rst b/docs/source/awslimitchecker.services.dynamodb.rst index fe6bd787..4dc2ee65 100644 --- a/docs/source/awslimitchecker.services.dynamodb.rst +++ b/docs/source/awslimitchecker.services.dynamodb.rst @@ -5,3 +5,4 @@ awslimitchecker.services.dynamodb module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.ebs.rst b/docs/source/awslimitchecker.services.ebs.rst index 84fed438..440363a9 100644 --- a/docs/source/awslimitchecker.services.ebs.rst +++ b/docs/source/awslimitchecker.services.ebs.rst @@ -5,3 +5,4 @@ awslimitchecker.services.ebs module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.ec2.rst b/docs/source/awslimitchecker.services.ec2.rst index 0ad5df17..a0b24ee7 100644 --- a/docs/source/awslimitchecker.services.ec2.rst +++ b/docs/source/awslimitchecker.services.ec2.rst @@ -5,3 +5,4 @@ awslimitchecker.services.ec2 module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.ecs.rst b/docs/source/awslimitchecker.services.ecs.rst index 64181c4d..db7ffbc9 100644 --- a/docs/source/awslimitchecker.services.ecs.rst +++ b/docs/source/awslimitchecker.services.ecs.rst @@ -5,3 +5,4 @@ awslimitchecker.services.ecs module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.efs.rst b/docs/source/awslimitchecker.services.efs.rst index a0d80cb4..6dd78eb6 100644 --- a/docs/source/awslimitchecker.services.efs.rst +++ b/docs/source/awslimitchecker.services.efs.rst @@ -5,3 +5,4 @@ awslimitchecker.services.efs module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.elasticache.rst b/docs/source/awslimitchecker.services.elasticache.rst index 390ccaa8..51864642 100644 --- a/docs/source/awslimitchecker.services.elasticache.rst +++ b/docs/source/awslimitchecker.services.elasticache.rst @@ -5,3 +5,4 @@ awslimitchecker.services.elasticache module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.elasticbeanstalk.rst b/docs/source/awslimitchecker.services.elasticbeanstalk.rst index 55b414f2..8cdde5e6 100644 --- a/docs/source/awslimitchecker.services.elasticbeanstalk.rst +++ b/docs/source/awslimitchecker.services.elasticbeanstalk.rst @@ -5,3 +5,4 @@ awslimitchecker.services.elasticbeanstalk module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.elb.rst b/docs/source/awslimitchecker.services.elb.rst index 6666a388..47cbac21 100644 --- a/docs/source/awslimitchecker.services.elb.rst +++ b/docs/source/awslimitchecker.services.elb.rst @@ -5,3 +5,4 @@ awslimitchecker.services.elb module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.firehose.rst b/docs/source/awslimitchecker.services.firehose.rst index f7ef9476..04ee1a8b 100644 --- a/docs/source/awslimitchecker.services.firehose.rst +++ b/docs/source/awslimitchecker.services.firehose.rst @@ -5,3 +5,4 @@ awslimitchecker.services.firehose module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.iam.rst b/docs/source/awslimitchecker.services.iam.rst index 183a938e..5129b9e1 100644 --- a/docs/source/awslimitchecker.services.iam.rst +++ b/docs/source/awslimitchecker.services.iam.rst @@ -5,3 +5,4 @@ awslimitchecker.services.iam module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.lambdafunc.rst b/docs/source/awslimitchecker.services.lambdafunc.rst index 8bbf2cda..6cba4626 100644 --- a/docs/source/awslimitchecker.services.lambdafunc.rst +++ b/docs/source/awslimitchecker.services.lambdafunc.rst @@ -5,3 +5,4 @@ awslimitchecker.services.lambdafunc module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.rds.rst b/docs/source/awslimitchecker.services.rds.rst index 68222248..8a967baa 100644 --- a/docs/source/awslimitchecker.services.rds.rst +++ b/docs/source/awslimitchecker.services.rds.rst @@ -5,3 +5,4 @@ awslimitchecker.services.rds module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.redshift.rst b/docs/source/awslimitchecker.services.redshift.rst index a32a11ac..673917b8 100644 --- a/docs/source/awslimitchecker.services.redshift.rst +++ b/docs/source/awslimitchecker.services.redshift.rst @@ -5,3 +5,4 @@ awslimitchecker.services.redshift module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.route53.rst b/docs/source/awslimitchecker.services.route53.rst index b3bf7c38..fd990a3e 100644 --- a/docs/source/awslimitchecker.services.route53.rst +++ b/docs/source/awslimitchecker.services.route53.rst @@ -5,3 +5,4 @@ awslimitchecker.services.route53 module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.rst b/docs/source/awslimitchecker.services.rst index d6281e1a..10ee0387 100644 --- a/docs/source/awslimitchecker.services.rst +++ b/docs/source/awslimitchecker.services.rst @@ -5,11 +5,13 @@ awslimitchecker.services package :members: :undoc-members: :show-inheritance: + :private-members: Submodules ---------- .. toctree:: + :maxdepth: 4 awslimitchecker.services.apigateway awslimitchecker.services.autoscaling diff --git a/docs/source/awslimitchecker.services.s3.rst b/docs/source/awslimitchecker.services.s3.rst index 4017e2f5..178684ba 100644 --- a/docs/source/awslimitchecker.services.s3.rst +++ b/docs/source/awslimitchecker.services.s3.rst @@ -5,3 +5,4 @@ awslimitchecker.services.s3 module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.ses.rst b/docs/source/awslimitchecker.services.ses.rst index 071bfa0f..455a8602 100644 --- a/docs/source/awslimitchecker.services.ses.rst +++ b/docs/source/awslimitchecker.services.ses.rst @@ -5,3 +5,4 @@ awslimitchecker.services.ses module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.services.vpc.rst b/docs/source/awslimitchecker.services.vpc.rst index 45a3563d..4cd37284 100644 --- a/docs/source/awslimitchecker.services.vpc.rst +++ b/docs/source/awslimitchecker.services.vpc.rst @@ -5,3 +5,4 @@ awslimitchecker.services.vpc module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.trustedadvisor.rst b/docs/source/awslimitchecker.trustedadvisor.rst index c1099535..8fe83dff 100644 --- a/docs/source/awslimitchecker.trustedadvisor.rst +++ b/docs/source/awslimitchecker.trustedadvisor.rst @@ -5,3 +5,4 @@ awslimitchecker.trustedadvisor module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.utils.rst b/docs/source/awslimitchecker.utils.rst index 7e36b5c9..a8a460be 100644 --- a/docs/source/awslimitchecker.utils.rst +++ b/docs/source/awslimitchecker.utils.rst @@ -5,3 +5,4 @@ awslimitchecker.utils module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/awslimitchecker.version.rst b/docs/source/awslimitchecker.version.rst index 3b7937a7..35ad53e7 100644 --- a/docs/source/awslimitchecker.version.rst +++ b/docs/source/awslimitchecker.version.rst @@ -5,3 +5,4 @@ awslimitchecker.version module :members: :undoc-members: :show-inheritance: + :private-members: diff --git a/docs/source/conf.py b/docs/source/conf.py index 8db85ada..a24bc9f3 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -315,10 +315,9 @@ r'https?://.*readthedocs\.org.*', r'https?://.*readthedocs\.io.*', r'https?://waffle\.io.*', - r'https?://github\.com/pytest-dev/pytest/blob/master/CHANGELOG\.rst', - r'https?://github\.com/jantman/awslimitchecker/releases/tag/.*', - r'https?://github\.com/jantman/awslimitchecker/tree/master/.*', r'https?://docs\.aws\.amazon\.com/.*#.*', + # this sucks, but we're getting 429 rate limited by github.com checking all these links + r'https?://github\.com/.*' ] # exclude module docstrings - see http://stackoverflow.com/a/18031024/211734 diff --git a/tox.ini b/tox.ini index b4734d1b..dff91fbb 100644 --- a/tox.ini +++ b/tox.ini @@ -95,7 +95,7 @@ commands = pip --version pip freeze rst2html.py --halt=2 README.rst /dev/null - sphinx-apidoc awslimitchecker awslimitchecker/tests -o {toxinidir}/docs/source -e -f -M + sphinx-apidoc awslimitchecker awslimitchecker/tests -o {toxinidir}/docs/source -e -f -M --private # link check # -n runs in nit-picky mode # -W turns warnings into errors @@ -123,7 +123,7 @@ commands = pip --version pip freeze rst2html.py --halt=2 README.rst /dev/null - sphinx-apidoc awslimitchecker awslimitchecker/tests -o {toxinidir}/docs/source -e -f -M + sphinx-apidoc awslimitchecker awslimitchecker/tests -o {toxinidir}/docs/source -e -f -M --private python {toxinidir}/docs/build_generated_docs.py # link check # -n runs in nit-picky mode From a88650e3ee86cb1e298da314f1112c89ea2c2f9b Mon Sep 17 00:00:00 2001 From: owenmann Date: Fri, 15 May 2020 11:56:07 -0400 Subject: [PATCH 08/14] Update cli_usage.rst 'Disabling ... Checks' titles are swapped --- docs/source/cli_usage.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/cli_usage.rst b/docs/source/cli_usage.rst index 3d876e29..29be0b22 100644 --- a/docs/source/cli_usage.rst +++ b/docs/source/cli_usage.rst @@ -239,7 +239,7 @@ and limits followed by ``(API)`` have been obtained from the service's API. -Disabling Trusted Advisor Checks +Disabling Service Quotas service ++++++++++++++++++++++++++++++++ Using the ``--skip-quotas`` option will disable attempting to query limit information @@ -264,7 +264,7 @@ from the Service Quotas service. -Disabling Service Quotas service +Disabling Trusted Advisor Checks ++++++++++++++++++++++++++++++++ Using the ``--skip-ta`` option will disable attempting to query limit information From fd1bea8d078c1b0ffa363beda3c9d11404f9e880 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Fri, 18 Sep 2020 06:27:02 -0400 Subject: [PATCH 09/14] CHANGELOG for PR #468 --- CHANGES.rst | 1 + docs/source/cli_usage.rst.template | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a4f2a157..be88f615 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,7 @@ Changelog 8.1.0 (2020-09-18) ------------------ +* `PR #468 `_ - Fix transposed headings in CLI Usage documentation. Thanks to `@owenmann `__. * Internal testing changes: * Stop testing under Python 2.7 and Python 3.4. diff --git a/docs/source/cli_usage.rst.template b/docs/source/cli_usage.rst.template index 01cc4451..c6b57166 100644 --- a/docs/source/cli_usage.rst.template +++ b/docs/source/cli_usage.rst.template @@ -58,7 +58,7 @@ and limits followed by ``(API)`` have been obtained from the service's API. {list_limits} -Disabling Trusted Advisor Checks +Disabling Service Quotas service ++++++++++++++++++++++++++++++++ Using the ``--skip-quotas`` option will disable attempting to query limit information @@ -66,7 +66,7 @@ from the Service Quotas service. {skip_quotas} -Disabling Service Quotas service +Disabling Trusted Advisor Checks ++++++++++++++++++++++++++++++++ Using the ``--skip-ta`` option will disable attempting to query limit information From 033a85e3eb04a435289b2340b619617a61c466bb Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Fri, 18 Sep 2020 06:42:07 -0400 Subject: [PATCH 10/14] CHANGES for PR #470 --- CHANGES.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.rst b/CHANGES.rst index be88f615..9742b654 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,6 +7,7 @@ Changelog ------------------ * `PR #468 `_ - Fix transposed headings in CLI Usage documentation. Thanks to `@owenmann `__. +* `PR #470 `_ - Fix new EBS "Active snapshots" limit (bumped from 10,000 to 100,000) and Quotas Service name. Thanks to `@rashidamiri `__. * Internal testing changes: * Stop testing under Python 2.7 and Python 3.4. From 57be88ff5493ae1fc533522eca013bc908999074 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Fri, 18 Sep 2020 07:21:02 -0400 Subject: [PATCH 11/14] conftest.py - remove usage of deprecated class --- awslimitchecker/tests/conftest.py | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/awslimitchecker/tests/conftest.py b/awslimitchecker/tests/conftest.py index 742582fb..5d45ea8e 100644 --- a/awslimitchecker/tests/conftest.py +++ b/awslimitchecker/tests/conftest.py @@ -45,12 +45,9 @@ ################################################################################ """ -import sys import os import re -from _pytest.terminal import TerminalReporter -import pytest from awslimitchecker.services import _services from awslimitchecker.tests.test_integration import REGION @@ -108,27 +105,6 @@ def fullwidth(self): return self._tw.fullwidth -class WholeNodeIDTerminalReporter(TerminalReporter): - - def _outrep_summary(self, rep): - sanitizer = OutputSanitizer(self._tw) - rep.toterminal(sanitizer) - for secname, content in rep.sections: - self._tw.sep("-", secname) - if content[-1:] == "\n": - content = content[:-1] - sanitizer.line(content) - - -@pytest.mark.trylast -def pytest_configure(config): - # Get the standard terminal reporter plugin and replace it with our - standard_reporter = config.pluginmanager.getplugin('terminalreporter') - wholenodeid_reporter = WholeNodeIDTerminalReporter(config, sys.stdout) - config.pluginmanager.unregister(standard_reporter) - config.pluginmanager.register(wholenodeid_reporter, 'terminalreporter') - - def pytest_generate_tests(metafunc): if ( metafunc.cls.__name__ == 'Test_AwsServiceSubclasses' and From 0f53c4a8a28ffe313020219a2059a8995eeb4965 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Fri, 18 Sep 2020 07:21:38 -0400 Subject: [PATCH 12/14] Fixes #464 - handle ConnectTimeoutError from SES in regions where it is not enabled --- CHANGES.rst | 1 + awslimitchecker/services/ses.py | 11 ++++- awslimitchecker/tests/services/test_ses.py | 49 +++++++++++++++++++++- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 9742b654..97946e91 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,6 +8,7 @@ Changelog * `PR #468 `_ - Fix transposed headings in CLI Usage documentation. Thanks to `@owenmann `__. * `PR #470 `_ - Fix new EBS "Active snapshots" limit (bumped from 10,000 to 100,000) and Quotas Service name. Thanks to `@rashidamiri `__. +* `Issue #464 `_ - Fix bug where SES was causing ``ConnectTimeoutError`` in some regions. This has been added to the list of SES exceptions that we catch and silently ignore. This is a new exception thrown by regions that do not have SES support. * Internal testing changes: * Stop testing under Python 2.7 and Python 3.4. diff --git a/awslimitchecker/services/ses.py b/awslimitchecker/services/ses.py index f3de0089..058cf15d 100644 --- a/awslimitchecker/services/ses.py +++ b/awslimitchecker/services/ses.py @@ -42,8 +42,9 @@ from .base import _AwsService from ..limit import AwsLimit -from botocore.exceptions import EndpointConnectionError -from botocore.exceptions import ClientError +from botocore.exceptions import ( + EndpointConnectionError, ClientError, ConnectTimeoutError +) logger = logging.getLogger(__name__) @@ -73,6 +74,9 @@ def find_usage(self): logger.warning('Skipping SES: %s', ex) return raise + except ConnectTimeoutError as ex: + logger.warning('Skipping SES: %s', str(ex)) + return self.limits['Daily sending quota']._add_current_usage( resp['SentLast24Hours'] ) @@ -117,6 +121,9 @@ def _update_limits_from_api(self): logger.warning('Skipping SES: %s', ex) return raise + except ConnectTimeoutError as ex: + logger.warning('Skipping SES: %s', str(ex)) + return self.limits['Daily sending quota']._set_api_limit(resp['Max24HourSend']) def required_iam_permissions(self): diff --git a/awslimitchecker/tests/services/test_ses.py b/awslimitchecker/tests/services/test_ses.py index 1e9256ab..c459e184 100644 --- a/awslimitchecker/tests/services/test_ses.py +++ b/awslimitchecker/tests/services/test_ses.py @@ -40,7 +40,9 @@ import sys import pytest from awslimitchecker.services.ses import _SesService -from botocore.exceptions import ClientError, EndpointConnectionError +from botocore.exceptions import ( + ClientError, EndpointConnectionError, ConnectTimeoutError +) # https://code.google.com/p/mock/issues/detail?id=249 # py>=3.4 should use unittest.mock not the mock package on pypi @@ -172,6 +174,30 @@ def se_get(): assert mock_conn.mock_calls == [call.get_send_quota()] assert len(cls.limits['Daily sending quota'].get_current_usage()) == 0 + def test_find_usage_invalid_region_connect_timeout(self): + ce = ConnectTimeoutError(endpoint_url='http://example.com') + + def se_get(): + raise ce + + mock_conn = Mock() + mock_conn.get_send_quota.side_effect = se_get + + with patch('%s.connect' % pb) as mock_connect: + with patch('%s.logger' % pbm) as mock_logger: + cls = _SesService(21, 43, {}, None) + cls.conn = mock_conn + assert cls._have_usage is False + cls.find_usage() + assert mock_connect.mock_calls == [call()] + assert cls._have_usage is False + assert mock_logger.mock_calls == [ + call.debug('Checking usage for service %s', 'SES'), + call.warning('Skipping SES: %s', str(ce)) + ] + assert mock_conn.mock_calls == [call.get_send_quota()] + assert len(cls.limits['Daily sending quota'].get_current_usage()) == 0 + def test_find_usage_invalid_region_503(self): resp = { 'ResponseMetadata': { @@ -313,6 +339,27 @@ def se_get(): ] assert cls.limits['Daily sending quota'].api_limit is None + def test_update_limits_from_api_invalid_region_connect_timeout(self): + ce = ConnectTimeoutError(endpoint_url='http://example.com') + + def se_get(): + raise ce + + mock_conn = Mock() + mock_conn.get_send_quota.side_effect = se_get + + with patch('%s.connect' % pb) as mock_connect: + with patch('%s.logger' % pbm) as mock_logger: + cls = _SesService(21, 43, {}, None) + cls.conn = mock_conn + cls._update_limits_from_api() + assert mock_connect.mock_calls == [call()] + assert mock_conn.mock_calls == [call.get_send_quota()] + assert mock_logger.mock_calls == [ + call.warning('Skipping SES: %s', str(ce)) + ] + assert cls.limits['Daily sending quota'].api_limit is None + def test_update_limits_from_api_invalid_region_503(self): resp = { 'ResponseMetadata': { From d31ed574c9dbb2b167303a5d4b45799d92248fed Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Fri, 18 Sep 2020 12:40:55 -0400 Subject: [PATCH 13/14] add .dockerignore --- .dockerignore | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++ CHANGES.rst | 2 ++ 2 files changed, 76 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..ebc3f5e2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,74 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +pip-selfcheck.json + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/build/ + +# PyBuilder +target/ + +# virtualenv +bin/ +include/ + +# IntelliJ +*.iml +.idea/ + +dev/.terraform +dev/iam_policy.json +dev/terraform.tfstate.backup +results/ +.release_position.json +dev/terraform.tfstate +man/ diff --git a/CHANGES.rst b/CHANGES.rst index 97946e91..ab807a22 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -9,6 +9,8 @@ Changelog * `PR #468 `_ - Fix transposed headings in CLI Usage documentation. Thanks to `@owenmann `__. * `PR #470 `_ - Fix new EBS "Active snapshots" limit (bumped from 10,000 to 100,000) and Quotas Service name. Thanks to `@rashidamiri `__. * `Issue #464 `_ - Fix bug where SES was causing ``ConnectTimeoutError`` in some regions. This has been added to the list of SES exceptions that we catch and silently ignore. This is a new exception thrown by regions that do not have SES support. +* Add ``.dockerignore`` file to make local builds quite a bit smaller. +* `Issue #465 `_ - Fixed via `versionfinder 1.1.1 `_. * Internal testing changes: * Stop testing under Python 2.7 and Python 3.4. From c6b010020f5beba491854619843d0593eec0401e Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Fri, 18 Sep 2020 14:16:10 -0400 Subject: [PATCH 14/14] rebuild docs --- docs/source/limits.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/limits.rst b/docs/source/limits.rst index 5e518baa..8977165c 100644 --- a/docs/source/limits.rst +++ b/docs/source/limits.rst @@ -128,7 +128,7 @@ EBS =============================================== =============== ======== ======= ====== Limit Trusted Advisor Quotas API Default =============================================== =============== ======== ======= ====== -Active snapshots |check| |check| 10000 +Active snapshots |check| 100000 Active volumes 5000 Cold (HDD) volume storage (GiB) |check| 307200 General Purpose (SSD) volume storage (GiB) |check| |check| 307200