From 9d4e89f944ebeb50758bac66f92f922629040444 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 22:09:43 +0000 Subject: [PATCH 1/3] Build: Bump moto from 4.2.13 to 5.0.1 Bumps [moto](https://github.com/getmoto/moto) from 4.2.13 to 5.0.1. - [Release notes](https://github.com/getmoto/moto/releases) - [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md) - [Commits](https://github.com/getmoto/moto/compare/4.2.13...5.0.1) --- updated-dependencies: - dependency-name: moto dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- poetry.lock | 47 +++++++++++++++++++++-------------------------- pyproject.toml | 2 +- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/poetry.lock b/poetry.lock index ff67dd28c6..9d34a7a435 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1963,19 +1963,19 @@ files = [ [[package]] name = "moto" -version = "4.2.13" +version = "5.0.1" description = "" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "moto-4.2.13-py2.py3-none-any.whl", hash = "sha256:93e0fd13b624bd79115494f833308c3641b2be0fc9f4f18aa9264aa01f6168e0"}, - {file = "moto-4.2.13.tar.gz", hash = "sha256:01aef6a489a725c8d725bd3dc6f70ff1bedaee3e2641752e4b471ff0ede4b4d7"}, + {file = "moto-5.0.1-py2.py3-none-any.whl", hash = "sha256:94e3b07a403cc8078ffee94bf404ef677112d036a57ddb5e0f19c5fcf48987f5"}, + {file = "moto-5.0.1.tar.gz", hash = "sha256:62b9798aef9028432194cebb7a671f4064257bb3be662d9c1b83b94411b694bb"}, ] [package.dependencies] aws-xray-sdk = {version = ">=0.93,<0.96 || >0.96", optional = true, markers = "extra == \"server\""} boto3 = ">=1.9.201" -botocore = ">=1.12.201" +botocore = ">=1.14.0" cfn-lint = {version = ">=0.40.0", optional = true, markers = "extra == \"server\""} cryptography = ">=3.3.1" docker = {version = ">=3.0.0", optional = true, markers = "extra == \"server\""} @@ -1986,42 +1986,37 @@ graphql-core = {version = "*", optional = true, markers = "extra == \"server\""} Jinja2 = ">=2.10.1" jsondiff = {version = ">=1.1.2", optional = true, markers = "extra == \"server\""} openapi-spec-validator = {version = ">=0.5.0", optional = true, markers = "extra == \"server\""} -py-partiql-parser = {version = "0.5.0", optional = true, markers = "extra == \"server\""} +py-partiql-parser = {version = "0.5.1", optional = true, markers = "extra == \"server\""} pyparsing = {version = ">=3.0.7", optional = true, markers = "extra == \"server\""} python-dateutil = ">=2.1,<3.0.0" python-jose = {version = ">=3.1.0,<4.0.0", extras = ["cryptography"], optional = true, markers = "extra == \"server\""} PyYAML = {version = ">=5.1", optional = true, markers = "extra == \"server\""} requests = ">=2.5" -responses = ">=0.13.0" +responses = ">=0.15.0" setuptools = {version = "*", optional = true, markers = "extra == \"server\""} sshpubkeys = {version = ">=3.1.0", optional = true, markers = "extra == \"server\""} werkzeug = ">=0.5,<2.2.0 || >2.2.0,<2.2.1 || >2.2.1" xmltodict = "*" [package.extras] -all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] apigateway = ["PyYAML (>=5.1)", "ecdsa (!=0.15)", "openapi-spec-validator (>=0.5.0)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] -apigatewayv2 = ["PyYAML (>=5.1)"] +apigatewayv2 = ["PyYAML (>=5.1)", "openapi-spec-validator (>=0.5.0)"] appsync = ["graphql-core"] awslambda = ["docker (>=3.0.0)"] batch = ["docker (>=3.0.0)"] -cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] cognitoidp = ["ecdsa (!=0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] -ds = ["sshpubkeys (>=3.1.0)"] -dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.0)"] -dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.0)"] -ebs = ["sshpubkeys (>=3.1.0)"] +dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.1)"] +dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.1)"] ec2 = ["sshpubkeys (>=3.1.0)"] -efs = ["sshpubkeys (>=3.1.0)"] -eks = ["sshpubkeys (>=3.1.0)"] glue = ["pyparsing (>=3.0.7)"] iotdata = ["jsondiff (>=1.1.2)"] -proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "sshpubkeys (>=3.1.0)"] -route53resolver = ["sshpubkeys (>=3.1.0)"] -s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.5.0)"] -s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.5.0)"] -server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.5.1)"] +s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.5.1)"] +server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] ssm = ["PyYAML (>=5.1)"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] @@ -2689,13 +2684,13 @@ files = [ [[package]] name = "py-partiql-parser" -version = "0.5.0" +version = "0.5.1" description = "Pure Python PartiQL Parser" optional = false python-versions = "*" files = [ - {file = "py-partiql-parser-0.5.0.tar.gz", hash = "sha256:427a662e87d51a0a50150fc8b75c9ebb4a52d49129684856c40c88b8c8e027e4"}, - {file = "py_partiql_parser-0.5.0-py3-none-any.whl", hash = "sha256:dc454c27526adf62deca5177ea997bf41fac4fd109c5d4c8d81f984de738ba8f"}, + {file = "py-partiql-parser-0.5.1.tar.gz", hash = "sha256:aeac8f46529d8651bbae88a1a6c14dc3aa38ebc4bc6bd1eb975044c0564246c6"}, + {file = "py_partiql_parser-0.5.1-py3-none-any.whl", hash = "sha256:53053e70987dea2983e1990ad85f87a7d8cec13dd4a4b065a740bcfd661f5a6b"}, ] [package.extras] @@ -4293,4 +4288,4 @@ zstandard = ["zstandard"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "5becf154a072fa31d9cefaee2adaacca1e2315579fd821a4567f41b075ed3b1d" +content-hash = "6e7fbfc5ac9579e08a6deccb0dd3d80bf11bc3113302772b07c8bb3329a0ae72" diff --git a/pyproject.toml b/pyproject.toml index f823155382..9fcb91b0c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -79,7 +79,7 @@ pre-commit = "3.5.0" fastavro = "1.9.3" coverage = { version = "^7.4.1", extras = ["toml"] } requests-mock = "1.11.0" -moto = { version = "^4.2.13", extras = ["server"] } +moto = { version = "^5.0.1", extras = ["server"] } typing-extensions = "4.9.0" pytest-mock = "3.12.0" pyspark = "3.5.0" From 226617129916086912f30e788f1a65b82a1bcf67 Mon Sep 17 00:00:00 2001 From: hussein-awala Date: Tue, 6 Feb 2024 00:12:22 +0100 Subject: [PATCH 2/3] Make the tests compatible with moto v5 --- tests/catalog/test_dynamodb.py | 68 +++++++++++++++---------------- tests/catalog/test_glue.py | 74 +++++++++++++++++----------------- tests/conftest.py | 6 +-- 3 files changed, 74 insertions(+), 74 deletions(-) diff --git a/tests/catalog/test_dynamodb.py b/tests/catalog/test_dynamodb.py index bc801463c5..2cb7c46a15 100644 --- a/tests/catalog/test_dynamodb.py +++ b/tests/catalog/test_dynamodb.py @@ -20,7 +20,7 @@ import boto3 import pyarrow as pa import pytest -from moto import mock_dynamodb +from moto import mock_aws from pyiceberg.catalog import METADATA_LOCATION, TABLE_TYPE from pyiceberg.catalog.dynamodb import ( @@ -45,7 +45,7 @@ from tests.conftest import BUCKET_NAME, TABLE_METADATA_LOCATION_REGEX -@mock_dynamodb +@mock_aws def test_create_dynamodb_catalog_with_table_name(_dynamodb, _bucket_initialize: None) -> None: # type: ignore DynamoDbCatalog("test_ddb_catalog") response = _dynamodb.describe_table(TableName=DYNAMODB_TABLE_NAME_DEFAULT) @@ -59,7 +59,7 @@ def test_create_dynamodb_catalog_with_table_name(_dynamodb, _bucket_initialize: assert response["Table"]["TableStatus"] == ACTIVE -@mock_dynamodb +@mock_aws def test_create_table_with_database_location( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -72,7 +72,7 @@ def test_create_table_with_database_location( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_dynamodb +@mock_aws def test_create_table_with_pyarrow_schema( _bucket_initialize: None, moto_endpoint_url: str, @@ -89,7 +89,7 @@ def test_create_table_with_pyarrow_schema( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_dynamodb +@mock_aws def test_create_table_with_default_warehouse( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -102,7 +102,7 @@ def test_create_table_with_default_warehouse( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_dynamodb +@mock_aws def test_create_table_with_given_location( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -117,7 +117,7 @@ def test_create_table_with_given_location( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_dynamodb +@mock_aws def test_create_table_with_no_location( _bucket_initialize: None, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -128,7 +128,7 @@ def test_create_table_with_no_location( test_catalog.create_table(identifier=identifier, schema=table_schema_nested) -@mock_dynamodb +@mock_aws def test_create_table_with_strips( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -141,7 +141,7 @@ def test_create_table_with_strips( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_dynamodb +@mock_aws def test_create_table_with_strips_bucket_root( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -154,7 +154,7 @@ def test_create_table_with_strips_bucket_root( assert TABLE_METADATA_LOCATION_REGEX.match(table_strip.metadata_location) -@mock_dynamodb +@mock_aws def test_create_table_with_no_database( _bucket_initialize: None, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -164,7 +164,7 @@ def test_create_table_with_no_database( test_catalog.create_table(identifier=identifier, schema=table_schema_nested) -@mock_dynamodb +@mock_aws def test_create_duplicated_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -176,7 +176,7 @@ def test_create_duplicated_table( test_catalog.create_table(identifier, table_schema_nested) -@mock_dynamodb +@mock_aws def test_load_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -190,7 +190,7 @@ def test_load_table( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_dynamodb +@mock_aws def test_load_table_from_self_identifier( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -205,7 +205,7 @@ def test_load_table_from_self_identifier( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_dynamodb +@mock_aws def test_load_non_exist_table(_bucket_initialize: None, database_name: str, table_name: str) -> None: identifier = (database_name, table_name) test_catalog = DynamoDbCatalog("test_ddb_catalog", warehouse=f"s3://{BUCKET_NAME}") @@ -214,7 +214,7 @@ def test_load_non_exist_table(_bucket_initialize: None, database_name: str, tabl test_catalog.load_table(identifier) -@mock_dynamodb +@mock_aws def test_drop_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -231,7 +231,7 @@ def test_drop_table( test_catalog.load_table(identifier) -@mock_dynamodb +@mock_aws def test_drop_table_from_self_identifier( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -250,7 +250,7 @@ def test_drop_table_from_self_identifier( test_catalog.load_table(table.identifier) -@mock_dynamodb +@mock_aws def test_drop_non_exist_table(_bucket_initialize: None, database_name: str, table_name: str) -> None: identifier = (database_name, table_name) test_catalog = DynamoDbCatalog("test_ddb_catalog", warehouse=f"s3://{BUCKET_NAME}") @@ -258,7 +258,7 @@ def test_drop_non_exist_table(_bucket_initialize: None, database_name: str, tabl test_catalog.drop_table(identifier) -@mock_dynamodb +@mock_aws def test_rename_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -281,7 +281,7 @@ def test_rename_table( test_catalog.load_table(identifier) -@mock_dynamodb +@mock_aws def test_rename_table_from_self_identifier( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -306,7 +306,7 @@ def test_rename_table_from_self_identifier( test_catalog.load_table(table.identifier) -@mock_dynamodb +@mock_aws def test_fail_on_rename_table_with_missing_required_params(_bucket_initialize: None, database_name: str, table_name: str) -> None: new_database_name = f"{database_name}_new" new_table_name = f"{table_name}_new" @@ -330,7 +330,7 @@ def test_fail_on_rename_table_with_missing_required_params(_bucket_initialize: N test_catalog.rename_table(identifier, new_identifier) -@mock_dynamodb +@mock_aws def test_fail_on_rename_non_iceberg_table( _dynamodb: boto3.client, _bucket_initialize: None, database_name: str, table_name: str ) -> None: @@ -359,7 +359,7 @@ def test_fail_on_rename_non_iceberg_table( test_catalog.rename_table(identifier, new_identifier) -@mock_dynamodb +@mock_aws def test_list_tables( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_list: List[str] ) -> None: @@ -372,7 +372,7 @@ def test_list_tables( assert (database_name, table_name) in loaded_table_list -@mock_dynamodb +@mock_aws def test_list_namespaces(_bucket_initialize: None, database_list: List[str]) -> None: test_catalog = DynamoDbCatalog("test_ddb_catalog") for database_name in database_list: @@ -382,7 +382,7 @@ def test_list_namespaces(_bucket_initialize: None, database_list: List[str]) -> assert (database_name,) in loaded_database_list -@mock_dynamodb +@mock_aws def test_create_namespace_no_properties(_bucket_initialize: None, database_name: str) -> None: test_catalog = DynamoDbCatalog("test_ddb_catalog") test_catalog.create_namespace(namespace=database_name) @@ -393,7 +393,7 @@ def test_create_namespace_no_properties(_bucket_initialize: None, database_name: assert properties == {} -@mock_dynamodb +@mock_aws def test_create_namespace_with_comment_and_location(_bucket_initialize: None, database_name: str) -> None: test_location = f"s3://{BUCKET_NAME}/{database_name}.db" test_properties = { @@ -410,7 +410,7 @@ def test_create_namespace_with_comment_and_location(_bucket_initialize: None, da assert properties["location"] == test_location -@mock_dynamodb +@mock_aws def test_create_duplicated_namespace(_bucket_initialize: None, database_name: str) -> None: test_catalog = DynamoDbCatalog("test_ddb_catalog") test_catalog.create_namespace(namespace=database_name) @@ -421,7 +421,7 @@ def test_create_duplicated_namespace(_bucket_initialize: None, database_name: st test_catalog.create_namespace(namespace=database_name, properties={"test": "test"}) -@mock_dynamodb +@mock_aws def test_drop_namespace(_bucket_initialize: None, database_name: str) -> None: test_catalog = DynamoDbCatalog("test_ddb_catalog") test_catalog.create_namespace(namespace=database_name) @@ -433,7 +433,7 @@ def test_drop_namespace(_bucket_initialize: None, database_name: str) -> None: assert len(loaded_database_list) == 0 -@mock_dynamodb +@mock_aws def test_drop_non_empty_namespace( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -446,14 +446,14 @@ def test_drop_non_empty_namespace( test_catalog.drop_namespace(database_name) -@mock_dynamodb +@mock_aws def test_drop_non_exist_namespace(_bucket_initialize: None, database_name: str) -> None: test_catalog = DynamoDbCatalog("test_ddb_catalog") with pytest.raises(NoSuchNamespaceError): test_catalog.drop_namespace(database_name) -@mock_dynamodb +@mock_aws def test_load_namespace_properties(_bucket_initialize: None, database_name: str) -> None: test_location = f"s3://{BUCKET_NAME}/{database_name}.db" test_properties = { @@ -471,14 +471,14 @@ def test_load_namespace_properties(_bucket_initialize: None, database_name: str) assert v == test_properties[k] -@mock_dynamodb +@mock_aws def test_load_non_exist_namespace_properties(_bucket_initialize: None, database_name: str) -> None: test_catalog = DynamoDbCatalog("test_ddb_catalog") with pytest.raises(NoSuchNamespaceError): test_catalog.load_namespace_properties(database_name) -@mock_dynamodb +@mock_aws def test_update_namespace_properties(_bucket_initialize: None, database_name: str) -> None: test_properties = { "comment": "this is a test description", @@ -503,7 +503,7 @@ def test_update_namespace_properties(_bucket_initialize: None, database_name: st test_catalog.drop_namespace(database_name) -@mock_dynamodb +@mock_aws def test_load_empty_namespace_properties(_bucket_initialize: None, database_name: str) -> None: test_catalog = DynamoDbCatalog("test_ddb_catalog") test_catalog.create_namespace(database_name) @@ -511,7 +511,7 @@ def test_load_empty_namespace_properties(_bucket_initialize: None, database_name assert listed_properties == {} -@mock_dynamodb +@mock_aws def test_update_namespace_properties_overlap_update_removal(_bucket_initialize: None, database_name: str) -> None: test_properties = { "comment": "this is a test description", diff --git a/tests/catalog/test_glue.py b/tests/catalog/test_glue.py index 63a213f94f..270d2251ba 100644 --- a/tests/catalog/test_glue.py +++ b/tests/catalog/test_glue.py @@ -20,7 +20,7 @@ import boto3 import pyarrow as pa import pytest -from moto import mock_glue +from moto import mock_aws from pyiceberg.catalog.glue import GlueCatalog from pyiceberg.exceptions import ( @@ -37,7 +37,7 @@ from tests.conftest import BUCKET_NAME, TABLE_METADATA_LOCATION_REGEX -@mock_glue +@mock_aws def test_create_table_with_database_location( _glue: boto3.client, _bucket_initialize: None, @@ -72,7 +72,7 @@ def test_create_table_with_database_location( assert storage_descriptor["Location"] == f"s3://{BUCKET_NAME}/{database_name}.db/{table_name}" -@mock_glue +@mock_aws def test_create_table_with_default_warehouse( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -86,7 +86,7 @@ def test_create_table_with_default_warehouse( assert test_catalog._parse_metadata_version(table.metadata_location) == 0 -@mock_glue +@mock_aws def test_create_table_with_given_location( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -102,7 +102,7 @@ def test_create_table_with_given_location( assert test_catalog._parse_metadata_version(table.metadata_location) == 0 -@mock_glue +@mock_aws def test_create_table_with_pyarrow_schema( _bucket_initialize: None, moto_endpoint_url: str, @@ -124,7 +124,7 @@ def test_create_table_with_pyarrow_schema( assert test_catalog._parse_metadata_version(table.metadata_location) == 0 -@mock_glue +@mock_aws def test_create_table_with_no_location( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -136,7 +136,7 @@ def test_create_table_with_no_location( test_catalog.create_table(identifier=identifier, schema=table_schema_nested) -@mock_glue +@mock_aws def test_create_table_with_strips( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -150,7 +150,7 @@ def test_create_table_with_strips( assert test_catalog._parse_metadata_version(table.metadata_location) == 0 -@mock_glue +@mock_aws def test_create_table_with_strips_bucket_root( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -164,7 +164,7 @@ def test_create_table_with_strips_bucket_root( assert test_catalog._parse_metadata_version(table_strip.metadata_location) == 0 -@mock_glue +@mock_aws def test_create_table_with_no_database( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -174,7 +174,7 @@ def test_create_table_with_no_database( test_catalog.create_table(identifier=identifier, schema=table_schema_nested) -@mock_glue +@mock_aws def test_create_duplicated_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -186,7 +186,7 @@ def test_create_duplicated_table( test_catalog.create_table(identifier, table_schema_nested) -@mock_glue +@mock_aws def test_load_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -201,7 +201,7 @@ def test_load_table( assert test_catalog._parse_metadata_version(table.metadata_location) == 0 -@mock_glue +@mock_aws def test_load_table_from_self_identifier( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -215,7 +215,7 @@ def test_load_table_from_self_identifier( assert TABLE_METADATA_LOCATION_REGEX.match(table.metadata_location) -@mock_glue +@mock_aws def test_load_non_exist_table(_bucket_initialize: None, moto_endpoint_url: str, database_name: str, table_name: str) -> None: identifier = (database_name, table_name) test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url, "warehouse": f"s3://{BUCKET_NAME}/"}) @@ -224,7 +224,7 @@ def test_load_non_exist_table(_bucket_initialize: None, moto_endpoint_url: str, test_catalog.load_table(identifier) -@mock_glue +@mock_aws def test_drop_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -241,7 +241,7 @@ def test_drop_table( test_catalog.load_table(identifier) -@mock_glue +@mock_aws def test_drop_table_from_self_identifier( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -260,7 +260,7 @@ def test_drop_table_from_self_identifier( test_catalog.load_table(table.identifier) -@mock_glue +@mock_aws def test_drop_non_exist_table(_bucket_initialize: None, moto_endpoint_url: str, database_name: str, table_name: str) -> None: identifier = (database_name, table_name) test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url, "warehouse": f"s3://{BUCKET_NAME}/"}) @@ -268,7 +268,7 @@ def test_drop_non_exist_table(_bucket_initialize: None, moto_endpoint_url: str, test_catalog.drop_table(identifier) -@mock_glue +@mock_aws def test_rename_table( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -292,7 +292,7 @@ def test_rename_table( test_catalog.load_table(identifier) -@mock_glue +@mock_aws def test_rename_table_from_self_identifier( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -317,7 +317,7 @@ def test_rename_table_from_self_identifier( test_catalog.load_table(table.identifier) -@mock_glue +@mock_aws def test_rename_table_no_params( _glue: boto3.client, _bucket_initialize: None, moto_endpoint_url: str, database_name: str, table_name: str ) -> None: @@ -336,7 +336,7 @@ def test_rename_table_no_params( test_catalog.rename_table(identifier, new_identifier) -@mock_glue +@mock_aws def test_rename_non_iceberg_table( _glue: boto3.client, _bucket_initialize: None, moto_endpoint_url: str, database_name: str, table_name: str ) -> None: @@ -359,7 +359,7 @@ def test_rename_non_iceberg_table( test_catalog.rename_table(identifier, new_identifier) -@mock_glue +@mock_aws def test_list_tables( _bucket_initialize: None, moto_endpoint_url: str, @@ -377,7 +377,7 @@ def test_list_tables( assert (database_name, table_name) in loaded_table_list -@mock_glue +@mock_aws def test_list_namespaces(_bucket_initialize: None, moto_endpoint_url: str, database_list: List[str]) -> None: test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url}) for database_name in database_list: @@ -387,7 +387,7 @@ def test_list_namespaces(_bucket_initialize: None, moto_endpoint_url: str, datab assert (database_name,) in loaded_database_list -@mock_glue +@mock_aws def test_create_namespace_no_properties(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url}) test_catalog.create_namespace(namespace=database_name) @@ -398,7 +398,7 @@ def test_create_namespace_no_properties(_bucket_initialize: None, moto_endpoint_ assert properties == {} -@mock_glue +@mock_aws def test_create_namespace_with_comment_and_location(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_location = f"s3://{BUCKET_NAME}/{database_name}.db" test_properties = { @@ -415,7 +415,7 @@ def test_create_namespace_with_comment_and_location(_bucket_initialize: None, mo assert properties["location"] == test_location -@mock_glue +@mock_aws def test_create_duplicated_namespace(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url}) test_catalog.create_namespace(namespace=database_name) @@ -426,7 +426,7 @@ def test_create_duplicated_namespace(_bucket_initialize: None, moto_endpoint_url test_catalog.create_namespace(namespace=database_name, properties={"test": "test"}) -@mock_glue +@mock_aws def test_drop_namespace(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url}) test_catalog.create_namespace(namespace=database_name) @@ -438,7 +438,7 @@ def test_drop_namespace(_bucket_initialize: None, moto_endpoint_url: str, databa assert len(loaded_database_list) == 0 -@mock_glue +@mock_aws def test_drop_non_empty_namespace( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: @@ -451,14 +451,14 @@ def test_drop_non_empty_namespace( test_catalog.drop_namespace(database_name) -@mock_glue +@mock_aws def test_drop_non_exist_namespace(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url}) with pytest.raises(NoSuchNamespaceError): test_catalog.drop_namespace(database_name) -@mock_glue +@mock_aws def test_load_namespace_properties(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_location = f"s3://{BUCKET_NAME}/{database_name}.db" test_properties = { @@ -476,14 +476,14 @@ def test_load_namespace_properties(_bucket_initialize: None, moto_endpoint_url: assert v == test_properties[k] -@mock_glue +@mock_aws def test_load_non_exist_namespace_properties(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url}) with pytest.raises(NoSuchNamespaceError): test_catalog.load_namespace_properties(database_name) -@mock_glue +@mock_aws def test_update_namespace_properties(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_properties = { "comment": "this is a test description", @@ -508,7 +508,7 @@ def test_update_namespace_properties(_bucket_initialize: None, moto_endpoint_url test_catalog.drop_namespace(database_name) -@mock_glue +@mock_aws def test_load_empty_namespace_properties(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url}) test_catalog.create_namespace(database_name) @@ -516,7 +516,7 @@ def test_load_empty_namespace_properties(_bucket_initialize: None, moto_endpoint assert listed_properties == {} -@mock_glue +@mock_aws def test_load_default_namespace_properties(_glue, _bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None: # type: ignore # simulate creating database with default settings through AWS Glue Web Console _glue.create_database(DatabaseInput={"Name": database_name}) @@ -525,7 +525,7 @@ def test_load_default_namespace_properties(_glue, _bucket_initialize: None, moto assert listed_properties == {} -@mock_glue +@mock_aws def test_update_namespace_properties_overlap_update_removal( _bucket_initialize: None, moto_endpoint_url: str, database_name: str ) -> None: @@ -546,7 +546,7 @@ def test_update_namespace_properties_overlap_update_removal( assert test_catalog.load_namespace_properties(database_name) == test_properties -@mock_glue +@mock_aws def test_passing_profile_name() -> None: session_properties: Dict[str, Any] = { "aws_access_key_id": "abc", @@ -566,7 +566,7 @@ def test_passing_profile_name() -> None: assert test_catalog.glue is mock_session().client() -@mock_glue +@mock_aws def test_commit_table_update_schema( _glue: boto3.client, _bucket_initialize: None, @@ -619,7 +619,7 @@ def test_commit_table_update_schema( assert storage_descriptor["Location"] == f"s3://{BUCKET_NAME}/{database_name}.db/{table_name}" -@mock_glue +@mock_aws def test_commit_table_properties( _bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str ) -> None: diff --git a/tests/conftest.py b/tests/conftest.py index 063c0646fd..29e0d05150 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -45,7 +45,7 @@ import boto3 import pytest -from moto import mock_dynamodb, mock_glue +from moto import mock_aws from pyiceberg import schema from pyiceberg.catalog import Catalog @@ -1793,14 +1793,14 @@ def fixture_s3(_aws_credentials: None, moto_endpoint_url: str) -> Generator[boto @pytest.fixture(name="_glue") def fixture_glue(_aws_credentials: None) -> Generator[boto3.client, None, None]: """Yield a mocked glue client.""" - with mock_glue(): + with mock_aws(): yield boto3.client("glue", region_name="us-east-1") @pytest.fixture(name="_dynamodb") def fixture_dynamodb(_aws_credentials: None) -> Generator[boto3.client, None, None]: """Yield a mocked DynamoDB client.""" - with mock_dynamodb(): + with mock_aws(): yield boto3.client("dynamodb", region_name="us-east-1") From 24a34f041b594aebd3c157f38e25e7c6f87fdec3 Mon Sep 17 00:00:00 2001 From: hussein-awala Date: Tue, 6 Feb 2024 00:40:17 +0100 Subject: [PATCH 3/3] Fix S3 fixture --- tests/conftest.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 29e0d05150..c0c3d10273 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1784,10 +1784,11 @@ def moto_endpoint_url(moto_server: "ThreadedMotoServer") -> str: return _url -@pytest.fixture(name="_s3") +@pytest.fixture(name="_s3", scope="function") def fixture_s3(_aws_credentials: None, moto_endpoint_url: str) -> Generator[boto3.client, None, None]: """Yield a mocked S3 client.""" - yield boto3.client("s3", region_name="us-east-1", endpoint_url=moto_endpoint_url) + with mock_aws(): + yield boto3.client("s3", region_name="us-east-1", endpoint_url=moto_endpoint_url) @pytest.fixture(name="_glue") @@ -1892,7 +1893,8 @@ def get_s3_path(bucket_name: str, database_name: Optional[str] = None, table_nam @pytest.fixture(name="s3", scope="module") def fixture_s3_client() -> boto3.client: - yield boto3.client("s3") + with mock_aws(): + yield boto3.client("s3") def clean_up(test_catalog: Catalog) -> None: