diff --git a/aws_lambda_powertools/utilities/parser/models/ses.py b/aws_lambda_powertools/utilities/parser/models/ses.py index 70fd2e83978..77b23431099 100644 --- a/aws_lambda_powertools/utilities/parser/models/ses.py +++ b/aws_lambda_powertools/utilities/parser/models/ses.py @@ -2,7 +2,6 @@ from typing import List, Optional from pydantic import BaseModel, Field -from pydantic.networks import EmailStr from pydantic.types import PositiveInt from ..types import Literal @@ -21,7 +20,7 @@ class SesReceiptAction(BaseModel): class SesReceipt(BaseModel): timestamp: datetime processingTimeMillis: PositiveInt - recipients: List[EmailStr] + recipients: List[str] spamVerdict: SesReceiptVerdict virusVerdict: SesReceiptVerdict spfVerdict: SesReceiptVerdict @@ -41,7 +40,7 @@ class SesMailCommonHeaders(BaseModel): bcc: Optional[List[str]] sender: Optional[List[str]] reply_to: Optional[List[str]] = Field(None, alias="reply-to") - returnPath: EmailStr + returnPath: str messageId: str date: str subject: str @@ -49,9 +48,9 @@ class SesMailCommonHeaders(BaseModel): class SesMail(BaseModel): timestamp: datetime - source: EmailStr + source: str messageId: str - destination: List[EmailStr] + destination: List[str] headersTruncated: bool headers: List[SesMailHeaders] commonHeaders: SesMailCommonHeaders diff --git a/layer/layer/canary/app.py b/layer/layer/canary/app.py index b577eff7fa5..e9d8d5d7679 100644 --- a/layer/layer/canary/app.py +++ b/layer/layer/canary/app.py @@ -5,7 +5,7 @@ from importlib.metadata import version import boto3 -from pydantic import EmailStr +from pydantic import HttpUrl from aws_lambda_powertools import Logger, Metrics, Tracer from aws_lambda_powertools.utilities.parser import BaseModel, envelopes, event_parser @@ -22,12 +22,12 @@ event_bus_arn = os.getenv("VERSION_TRACKING_EVENT_BUS_ARN") -# Model to check parser imports correctly, tests for pydantic and email-validator +# Model to check parser imports correctly, tests for pydantic class OrderItem(BaseModel): order_id: int quantity: int description: str - email: EmailStr + url: HttpUrl # Tests for jmespath presence diff --git a/poetry.lock b/poetry.lock index 1f90755db23..631f5d5ea4f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -238,34 +238,6 @@ category = "dev" optional = false python-versions = ">=3.5" -[[package]] -name = "dnspython" -version = "2.2.1" -description = "DNS toolkit" -category = "main" -optional = true -python-versions = ">=3.6,<4.0" - -[package.extras] -dnssec = ["cryptography (>=2.6,<37.0)"] -curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] -doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.10.0)"] -idna = ["idna (>=2.1,<4.0)"] -trio = ["trio (>=0.14,<0.20)"] -wmi = ["wmi (>=1.5.1,<2.0.0)"] - -[[package]] -name = "email-validator" -version = "1.3.0" -description = "A robust email address syntax and deliverability validation library." -category = "main" -optional = true -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -dnspython = ">=1.15.0" -idna = ">=2.0.0" - [[package]] name = "eradicate" version = "2.1.0" @@ -493,7 +465,7 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" +category = "dev" optional = false python-versions = ">=3.5" @@ -663,7 +635,7 @@ dev = ["shtab", "flake8 (>=3.0)", "coverage"] [[package]] name = "mkdocs" -version = "1.4.0" +version = "1.4.1" description = "Project documentation with Markdown." category = "dev" optional = false @@ -671,18 +643,20 @@ python-versions = ">=3.7" [package.dependencies] click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} -Jinja2 = ">=2.11.1" -Markdown = ">=3.2.1,<3.4" +jinja2 = ">=2.11.1" +markdown = ">=3.2.1,<3.4" mergedeep = ">=1.3.4" packaging = ">=20.5" -PyYAML = ">=5.1" +pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" typing-extensions = {version = ">=3.10", markers = "python_version < \"3.8\""} watchdog = ">=2.0" [package.extras] +min-versions = ["watchdog (==2.0)", "typing-extensions (==3.10)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "packaging (==20.5)", "mergedeep (==1.3.4)", "markupsafe (==2.0.1)", "markdown (==3.2.1)", "jinja2 (==2.11.1)", "importlib-metadata (==4.3)", "ghp-import (==1.0)", "colorama (==0.4)", "click (==7.0)", "babel (==2.9.0)"] i18n = ["babel (>=2.9.0)"] [[package]] @@ -1300,7 +1274,7 @@ types-urllib3 = "<1.27" [[package]] name = "types-urllib3" -version = "1.26.25" +version = "1.26.25.1" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -1383,16 +1357,16 @@ docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo" testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [extras] -all = ["pydantic", "email-validator", "aws-xray-sdk", "fastjsonschema"] +all = ["pydantic", "aws-xray-sdk", "fastjsonschema"] aws-sdk = ["boto3"] -parser = ["pydantic", "email-validator"] +parser = ["pydantic"] tracer = ["aws-xray-sdk"] validation = ["fastjsonschema"] [metadata] lock-version = "1.1" python-versions = "^3.7.4" -content-hash = "bc65bd1113d0d6d5494bd63fc42cbd98bfe00322d8da3f510e1600a7dbdd727c" +content-hash = "125238a77d9f356c0f956e2b5a568833603594412e5cda7e996c91050b90e1ee" [metadata.files] attrs = [ @@ -1534,14 +1508,6 @@ decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -dnspython = [ - {file = "dnspython-2.2.1-py3-none-any.whl", hash = "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f"}, - {file = "dnspython-2.2.1.tar.gz", hash = "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e"}, -] -email-validator = [ - {file = "email_validator-1.3.0-py2.py3-none-any.whl", hash = "sha256:816073f2a7cffef786b29928f58ec16cdac42710a53bb18aa94317e3e145ec5c"}, - {file = "email_validator-1.3.0.tar.gz", hash = "sha256:553a66f8be2ec2dea641ae1d3f29017ab89e9d603d4a25cdaac39eefa283d769"}, -] eradicate = [ {file = "eradicate-2.1.0-py3-none-any.whl", hash = "sha256:8bfaca181db9227dc88bdbce4d051a9627604c2243e7d85324f6d6ce0fd08bb2"}, {file = "eradicate-2.1.0.tar.gz", hash = "sha256:aac7384ab25b1bf21c4c012de9b4bf8398945a14c98c911545b2ea50ab558014"}, @@ -1711,8 +1677,8 @@ mike = [ {file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"}, ] mkdocs = [ - {file = "mkdocs-1.4.0-py3-none-any.whl", hash = "sha256:ce057e9992f017b8e1496b591b6c242cbd34c2d406e2f9af6a19b97dd6248faa"}, - {file = "mkdocs-1.4.0.tar.gz", hash = "sha256:e5549a22d59e7cb230d6a791edd2c3d06690908454c0af82edc31b35d57e3069"}, + {file = "mkdocs-1.4.1-py3-none-any.whl", hash = "sha256:2b7845c2775396214cd408753e4cfb01af3cfed36acc141a84bce2ceec9d705d"}, + {file = "mkdocs-1.4.1.tar.gz", hash = "sha256:07ed90be4062e4ef732bbac2623097b9dca35c67b562c38cfd0bfbc7151758c1"}, ] mkdocs-git-revision-date-plugin = [ {file = "mkdocs_git_revision_date_plugin-0.3.2-py3-none-any.whl", hash = "sha256:2e67956cb01823dd2418e2833f3623dee8604cdf223bddd005fe36226a56f6ef"}, @@ -2086,8 +2052,8 @@ types-requests = [ {file = "types_requests-2.28.11.2-py3-none-any.whl", hash = "sha256:14941f8023a80b16441b3b46caffcbfce5265fd14555844d6029697824b5a2ef"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.25.tar.gz", hash = "sha256:5aef0e663724eef924afa8b320b62ffef2c1736c1fa6caecfc9bc6c8ae2c3def"}, - {file = "types_urllib3-1.26.25-py3-none-any.whl", hash = "sha256:c1d78cef7bd581e162e46c20a57b2e1aa6ebecdcf01fd0713bb90978ff3e3427"}, + {file = "types-urllib3-1.26.25.1.tar.gz", hash = "sha256:a948584944b2412c9a74b9cf64f6c48caf8652cb88b38361316f6d15d8a184cd"}, + {file = "types_urllib3-1.26.25.1-py3-none-any.whl", hash = "sha256:f6422596cc9ee5fdf68f9d547f541096a20c2dcfd587e37c804c9ea720bf5cb2"}, ] typing-extensions = [ {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, diff --git a/pyproject.toml b/pyproject.toml index 703b3978eee..c249619106b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,6 @@ python = "^3.7.4" aws-xray-sdk = { version = "^2.8.0", optional = true } fastjsonschema = { version = "^2.14.5", optional = true } pydantic = { version = "^1.8.2", optional = true } -email-validator = { version = "^1.3.0", optional = true } boto3 = { version = "^1.20.32", optional = true } [tool.poetry.dev-dependencies] @@ -77,10 +76,10 @@ mypy-boto3-appconfigdata = "^1.24.36" importlib-metadata = "^4.13" [tool.poetry.extras] -parser = ["pydantic", "email-validator"] +parser = ["pydantic"] validation = ["fastjsonschema"] tracer = ["aws-xray-sdk"] -all = ["pydantic", "email-validator", "aws-xray-sdk", "fastjsonschema"] +all = ["pydantic", "aws-xray-sdk", "fastjsonschema"] # allow customers to run code locally without emulators (SAM CLI, etc.) aws-sdk = ["boto3"] [tool.coverage.run] diff --git a/tox.ini b/tox.ini index 286b1c10ab0..20eef002f9d 100644 --- a/tox.ini +++ b/tox.ini @@ -6,10 +6,9 @@ deps = filelock pytest-xdist pydantic - email-validator commands = python parallel_run_e2e.py ; If you ever encounter another parallel lock across interpreters ; pip install tox tox-poetry -; tox -p --parallel-live \ No newline at end of file +; tox -p --parallel-live