Remove pkg_resources module (#4142)
This commit is contained in:
		
							parent
							
								
									da09cfc39c
								
							
						
					
					
						commit
						76094f012b
					
				@ -1,11 +1,9 @@
 | 
			
		||||
import json
 | 
			
		||||
import re
 | 
			
		||||
import time
 | 
			
		||||
import random
 | 
			
		||||
import string
 | 
			
		||||
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
import pkg_resources
 | 
			
		||||
 | 
			
		||||
from boto3 import Session
 | 
			
		||||
 | 
			
		||||
@ -49,6 +47,7 @@ from moto.config.exceptions import (
 | 
			
		||||
from moto.core import BaseBackend, BaseModel
 | 
			
		||||
from moto.s3.config import s3_account_public_access_block_query, s3_config_query
 | 
			
		||||
from moto.core import ACCOUNT_ID as DEFAULT_ACCOUNT_ID
 | 
			
		||||
from moto.core.responses import AWSServiceSpec
 | 
			
		||||
 | 
			
		||||
from moto.iam.config import role_config_query, policy_config_query
 | 
			
		||||
 | 
			
		||||
@ -419,14 +418,12 @@ class ConfigBackend(BaseBackend):
 | 
			
		||||
        self.config_aggregators = {}
 | 
			
		||||
        self.aggregation_authorizations = {}
 | 
			
		||||
        self.organization_conformance_packs = {}
 | 
			
		||||
        self.config_schema = None
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def _validate_resource_types(resource_list):
 | 
			
		||||
        # Load the service file:
 | 
			
		||||
        resource_package = "botocore"
 | 
			
		||||
        resource_path = "/".join(("data", "config", "2014-11-12", "service-2.json"))
 | 
			
		||||
        config_schema = json.loads(
 | 
			
		||||
            pkg_resources.resource_string(resource_package, resource_path)
 | 
			
		||||
    def _validate_resource_types(self, resource_list):
 | 
			
		||||
        if not self.config_schema:
 | 
			
		||||
            self.config_schema = AWSServiceSpec(
 | 
			
		||||
                path="data/config/2014-11-12/service-2.json"
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        # Verify that each entry exists in the supported list:
 | 
			
		||||
@ -435,31 +432,28 @@ class ConfigBackend(BaseBackend):
 | 
			
		||||
            # For PY2:
 | 
			
		||||
            r_str = str(resource)
 | 
			
		||||
 | 
			
		||||
            if r_str not in config_schema["shapes"]["ResourceType"]["enum"]:
 | 
			
		||||
            if r_str not in self.config_schema.shapes["ResourceType"]["enum"]:
 | 
			
		||||
                bad_list.append(r_str)
 | 
			
		||||
 | 
			
		||||
        if bad_list:
 | 
			
		||||
            raise InvalidResourceTypeException(
 | 
			
		||||
                bad_list, config_schema["shapes"]["ResourceType"]["enum"]
 | 
			
		||||
                bad_list, self.config_schema.shapes["ResourceType"]["enum"]
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def _validate_delivery_snapshot_properties(properties):
 | 
			
		||||
        # Load the service file:
 | 
			
		||||
        resource_package = "botocore"
 | 
			
		||||
        resource_path = "/".join(("data", "config", "2014-11-12", "service-2.json"))
 | 
			
		||||
        conifg_schema = json.loads(
 | 
			
		||||
            pkg_resources.resource_string(resource_package, resource_path)
 | 
			
		||||
    def _validate_delivery_snapshot_properties(self, properties):
 | 
			
		||||
        if not self.config_schema:
 | 
			
		||||
            self.config_schema = AWSServiceSpec(
 | 
			
		||||
                path="data/config/2014-11-12/service-2.json"
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        # Verify that the deliveryFrequency is set to an acceptable value:
 | 
			
		||||
        if (
 | 
			
		||||
            properties.get("deliveryFrequency", None)
 | 
			
		||||
            not in conifg_schema["shapes"]["MaximumExecutionFrequency"]["enum"]
 | 
			
		||||
            not in self.config_schema.shapes["MaximumExecutionFrequency"]["enum"]
 | 
			
		||||
        ):
 | 
			
		||||
            raise InvalidDeliveryFrequency(
 | 
			
		||||
                properties.get("deliveryFrequency", None),
 | 
			
		||||
                conifg_schema["shapes"]["MaximumExecutionFrequency"]["enum"],
 | 
			
		||||
                self.config_schema.shapes["MaximumExecutionFrequency"]["enum"],
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    def put_configuration_aggregator(self, config_aggregator, region):
 | 
			
		||||
 | 
			
		||||
@ -5,17 +5,18 @@ from __future__ import absolute_import
 | 
			
		||||
import functools
 | 
			
		||||
import inspect
 | 
			
		||||
import os
 | 
			
		||||
import pkg_resources
 | 
			
		||||
import re
 | 
			
		||||
import types
 | 
			
		||||
from abc import abstractmethod
 | 
			
		||||
from io import BytesIO
 | 
			
		||||
from collections import defaultdict
 | 
			
		||||
 | 
			
		||||
from botocore.config import Config
 | 
			
		||||
from botocore.handlers import BUILTIN_HANDLERS
 | 
			
		||||
from botocore.awsrequest import AWSResponse
 | 
			
		||||
from distutils.version import LooseVersion
 | 
			
		||||
from http.client import responses as http_responses
 | 
			
		||||
from importlib_metadata import version
 | 
			
		||||
from urllib.parse import urlparse
 | 
			
		||||
from werkzeug.wrappers import Request
 | 
			
		||||
 | 
			
		||||
@ -30,7 +31,6 @@ from .utils import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
ACCOUNT_ID = os.environ.get("MOTO_ACCOUNT_ID", "123456789012")
 | 
			
		||||
RESPONSES_VERSION = pkg_resources.get_distribution("responses").version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BaseMockAWS:
 | 
			
		||||
@ -306,6 +306,7 @@ def _find_first_match(self, request):
 | 
			
		||||
#  - First request matches on the appropriate S3 URL
 | 
			
		||||
#  - Same request, executed again, will be matched on the subsequent match, which happens to be the catch-all, not-yet-implemented, callback
 | 
			
		||||
# Fix: Always return the first match
 | 
			
		||||
RESPONSES_VERSION = version("responses")
 | 
			
		||||
if LooseVersion(RESPONSES_VERSION) < LooseVersion("0.12.1"):
 | 
			
		||||
    responses_mock._find_match = types.MethodType(
 | 
			
		||||
        _find_first_match_legacy, responses_mock
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,6 @@ import datetime
 | 
			
		||||
import json
 | 
			
		||||
import logging
 | 
			
		||||
import re
 | 
			
		||||
import io
 | 
			
		||||
import requests
 | 
			
		||||
 | 
			
		||||
import pytz
 | 
			
		||||
@ -23,6 +22,7 @@ from werkzeug.exceptions import HTTPException
 | 
			
		||||
import boto3
 | 
			
		||||
from collections import OrderedDict
 | 
			
		||||
from moto.core.utils import camelcase_to_underscores, method_names_from_class
 | 
			
		||||
from moto.utilities.utils import load_resource
 | 
			
		||||
from moto import settings
 | 
			
		||||
 | 
			
		||||
log = logging.getLogger(__name__)
 | 
			
		||||
@ -903,12 +903,8 @@ class AWSServiceSpec(object):
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def __init__(self, path):
 | 
			
		||||
        # Importing pkg_resources takes ~60ms; keep it local
 | 
			
		||||
        from pkg_resources import resource_filename  # noqa
 | 
			
		||||
        spec = load_resource("botocore", path)
 | 
			
		||||
 | 
			
		||||
        self.path = resource_filename("botocore", path)
 | 
			
		||||
        with io.open(self.path, "r", encoding="utf-8") as f:
 | 
			
		||||
            spec = json.load(f)
 | 
			
		||||
        self.metadata = spec["metadata"]
 | 
			
		||||
        self.operations = spec["operations"]
 | 
			
		||||
        self.shapes = spec["shapes"]
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
from moto.utilities.utils import load_resource
 | 
			
		||||
from pkg_resources import resource_filename
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ReservedKeywords(list):
 | 
			
		||||
@ -23,6 +22,6 @@ class ReservedKeywords(list):
 | 
			
		||||
        Get a list of reserved keywords of DynamoDB
 | 
			
		||||
        """
 | 
			
		||||
        reserved_keywords = load_resource(
 | 
			
		||||
            resource_filename(__name__, "reserved_keywords.txt"), as_json=False
 | 
			
		||||
            __name__, "reserved_keywords.txt", as_json=False
 | 
			
		||||
        )
 | 
			
		||||
        return reserved_keywords.split()
 | 
			
		||||
 | 
			
		||||
@ -5,11 +5,11 @@ import itertools
 | 
			
		||||
import ipaddress
 | 
			
		||||
import json
 | 
			
		||||
import os
 | 
			
		||||
import pathlib
 | 
			
		||||
import re
 | 
			
		||||
import warnings
 | 
			
		||||
 | 
			
		||||
from boto3 import Session
 | 
			
		||||
from pkg_resources import resource_filename
 | 
			
		||||
 | 
			
		||||
from collections import defaultdict
 | 
			
		||||
import weakref
 | 
			
		||||
@ -173,30 +173,25 @@ from .utils import (
 | 
			
		||||
    describe_tag_filter,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
INSTANCE_TYPES = load_resource(__name__, "resources/instance_types.json")
 | 
			
		||||
 | 
			
		||||
INSTANCE_TYPES = load_resource(
 | 
			
		||||
    resource_filename(__name__, "resources/instance_types.json")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
root = pathlib.Path(__file__).parent
 | 
			
		||||
offerings_path = "resources/instance_type_offerings"
 | 
			
		||||
INSTANCE_TYPE_OFFERINGS = {}
 | 
			
		||||
for location_type in listdir(resource_filename(__name__, offerings_path)):
 | 
			
		||||
for location_type in listdir(root / offerings_path):
 | 
			
		||||
    INSTANCE_TYPE_OFFERINGS[location_type] = {}
 | 
			
		||||
    for region in listdir(
 | 
			
		||||
        resource_filename(__name__, offerings_path + "/" + location_type)
 | 
			
		||||
    ):
 | 
			
		||||
        full_path = resource_filename(
 | 
			
		||||
            __name__, offerings_path + "/" + location_type + "/" + region
 | 
			
		||||
        )
 | 
			
		||||
    for region in listdir(root / offerings_path / location_type):
 | 
			
		||||
        full_path = offerings_path + "/" + location_type + "/" + region
 | 
			
		||||
        INSTANCE_TYPE_OFFERINGS[location_type][
 | 
			
		||||
            region.replace(".json", "")
 | 
			
		||||
        ] = load_resource(full_path)
 | 
			
		||||
        ] = load_resource(__name__, full_path)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AMIS = load_resource(
 | 
			
		||||
    os.environ.get("MOTO_AMIS_PATH")
 | 
			
		||||
    or resource_filename(__name__, "resources/amis.json"),
 | 
			
		||||
)
 | 
			
		||||
if "MOTO_AMIS_PATH" in os.environ:
 | 
			
		||||
    with open(os.environ.get("MOTO_AMIS_PATH"), "r", encoding="utf-8") as f:
 | 
			
		||||
        AMIS = json.load(f)
 | 
			
		||||
else:
 | 
			
		||||
    AMIS = load_resource(__name__, "resources/amis.json")
 | 
			
		||||
 | 
			
		||||
OWNER_ID = ACCOUNT_ID
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,5 @@
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
from boto3 import Session
 | 
			
		||||
from pkg_resources import resource_filename
 | 
			
		||||
from moto.core import BaseBackend
 | 
			
		||||
from moto.utilities.utils import load_resource
 | 
			
		||||
import datetime
 | 
			
		||||
@ -8,7 +7,7 @@ import random
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
checks_json = "resources/describe_trusted_advisor_checks.json"
 | 
			
		||||
ADVISOR_CHECKS = load_resource(resource_filename(__name__, checks_json))
 | 
			
		||||
ADVISOR_CHECKS = load_resource(__name__, checks_json)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SupportCase(object):
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
import json
 | 
			
		||||
import random
 | 
			
		||||
import string
 | 
			
		||||
import pkgutil
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def str2bool(v):
 | 
			
		||||
@ -18,15 +19,14 @@ def random_string(length=None):
 | 
			
		||||
    return random_str
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def load_resource(filename, as_json=True):
 | 
			
		||||
def load_resource(package, resource, as_json=True):
 | 
			
		||||
    """
 | 
			
		||||
    Open a file, and return the contents as JSON.
 | 
			
		||||
    Usage:
 | 
			
		||||
    from pkg_resources import resource_filename
 | 
			
		||||
    load_resource(resource_filename(__name__, "resources/file.json"))
 | 
			
		||||
    load_resource(__name__, "resources/file.json")
 | 
			
		||||
    """
 | 
			
		||||
    with open(filename, "r", encoding="utf-8") as f:
 | 
			
		||||
        return json.load(f) if as_json else f.read()
 | 
			
		||||
    resource = pkgutil.get_data(package, resource)
 | 
			
		||||
    return json.loads(resource) if as_json else resource.decode("utf-8")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def merge_multiple_dicts(*args):
 | 
			
		||||
 | 
			
		||||
@ -52,6 +52,9 @@ test_service() {
 | 
			
		||||
  pip install -r requirements-tests.txt > /dev/null
 | 
			
		||||
  pip install .[$service] > /dev/null 2>&1
 | 
			
		||||
  pip install boto > /dev/null 2>&1
 | 
			
		||||
  if [[ $service != "xray" ]]; then
 | 
			
		||||
    pip uninstall setuptools pkg_resources -y > /dev/null 2>&1
 | 
			
		||||
  fi
 | 
			
		||||
  # Restart venv - ensure these deps are loaded
 | 
			
		||||
  deactivate
 | 
			
		||||
  source ${venv_path}/bin/activate > /dev/null
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								setup.py
									
									
									
									
									
								
							@ -39,6 +39,7 @@ install_requires = [
 | 
			
		||||
    "MarkupSafe!=2.0.0a1",  # This is a Jinja2 dependency, 2.0.0a1 currently seems broken
 | 
			
		||||
    "Jinja2>=2.10.1",
 | 
			
		||||
    "more-itertools",
 | 
			
		||||
    "importlib_metadata"
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
_dep_PyYAML = "PyYAML>=5.1"
 | 
			
		||||
@ -52,6 +53,7 @@ _dep_aws_xray_sdk = "aws-xray-sdk!=0.96,>=0.93"
 | 
			
		||||
_dep_idna = "idna<3,>=2.5"
 | 
			
		||||
_dep_cfn_lint = "cfn-lint>=0.4.0"
 | 
			
		||||
_dep_sshpubkeys = "sshpubkeys>=3.1.0"
 | 
			
		||||
_setuptools = "setuptools"
 | 
			
		||||
 | 
			
		||||
all_extra_deps = [
 | 
			
		||||
    _dep_PyYAML,
 | 
			
		||||
@ -63,6 +65,7 @@ all_extra_deps = [
 | 
			
		||||
    _dep_idna,
 | 
			
		||||
    _dep_cfn_lint,
 | 
			
		||||
    _dep_sshpubkeys,
 | 
			
		||||
    _setuptools,
 | 
			
		||||
]
 | 
			
		||||
all_server_deps = all_extra_deps + ["flask", "flask-cors"]
 | 
			
		||||
 | 
			
		||||
@ -82,7 +85,9 @@ extras_per_service = {
 | 
			
		||||
    "sns": [],
 | 
			
		||||
    "sqs": [],
 | 
			
		||||
    "ssm": [_dep_PyYAML],
 | 
			
		||||
    "xray": [_dep_aws_xray_sdk],
 | 
			
		||||
    # XRay module uses pkg_resources, but doesn't have an explicit dependency listed
 | 
			
		||||
    # This should be fixed in the next version: https://github.com/aws/aws-xray-sdk-python/issues/305
 | 
			
		||||
    "xray": [_dep_aws_xray_sdk, _setuptools],
 | 
			
		||||
}
 | 
			
		||||
# When a Table has a Stream, we'll always need to import AWSLambda to search for a corresponding function to send the table data to
 | 
			
		||||
extras_per_service["dynamodb2"] = extras_per_service["awslambda"]
 | 
			
		||||
 | 
			
		||||
@ -5,19 +5,18 @@ import botocore.exceptions
 | 
			
		||||
import sure  # noqa
 | 
			
		||||
import datetime
 | 
			
		||||
import json
 | 
			
		||||
import pkg_resources
 | 
			
		||||
import yaml
 | 
			
		||||
import hashlib
 | 
			
		||||
import copy
 | 
			
		||||
import pkgutil
 | 
			
		||||
 | 
			
		||||
from moto.core import ACCOUNT_ID
 | 
			
		||||
 | 
			
		||||
from moto import mock_ssm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _get_yaml_template():
 | 
			
		||||
    template_path = "/".join(["test_ssm", "test_templates", "good.yaml"])
 | 
			
		||||
    resource_path = pkg_resources.resource_string("tests", template_path)
 | 
			
		||||
    return resource_path
 | 
			
		||||
    return pkgutil.get_data(__name__, "test_templates/good.yaml")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _validate_document_description(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user