diff --git a/event-schema/README.md b/event-schema/README.md index 5a117ab9..68ad7ffa 100644 --- a/event-schema/README.md +++ b/event-schema/README.md @@ -1,6 +1,6 @@ # AWS Lambda Publish Sharable Events -[![codecov](https://codecov.io/gh/michaelbrewer/aws-lambda-events/branch/main/graph/badge.svg?token=J433NUHYNT)](https://codecov.io/gh/michaelbrewer/aws-lambda-events) [![aws-lambda-publish-shared-event](https://github.com/michaelbrewer/aws-lambda-events/actions/workflows/python.yml/badge.svg)](https://github.com/michaelbrewer/aws-lambda-events/actions/workflows/python.yml) +[![codecov](https://codecov.io/gh/michaelbrewer/aws-lambda-events/branch/main/graph/badge.svg?token=J433NUHYNT)](https://codecov.io/gh/michaelbrewer/aws-lambda-events) ## Installation diff --git a/event-schema/aws_lambda_publish_shared_event/__main__.py b/event-schema/aws_lambda_publish_shared_event/__main__.py index d34f4888..1a31447f 100644 --- a/event-schema/aws_lambda_publish_shared_event/__main__.py +++ b/event-schema/aws_lambda_publish_shared_event/__main__.py @@ -17,12 +17,12 @@ def parse_args(args: List[str]) -> argparse.Namespace: """Parse arguments from the cli""" parser = argparse.ArgumentParser(prog="publish-shared-event", description="List the content of a folder") - parser.add_argument("-r", dest="region", help="Set AWS Region") - parser.add_argument("-f", dest="lambda_name", help="Name of the lambda function") - parser.add_argument("-e", dest="event_source", help="Event source") - parser.add_argument("--list", help="List of supported event sources", action="store_true") - parser.add_argument("--filtered-list", help="Filtered list") - parser.add_argument("-n", dest="example_name", help="Set the example name") + parser.add_argument("-r", "-region", dest="region", help="Set AWS Region") + parser.add_argument("-f", "--lambda-name", dest="lambda_name", help="Name of the lambda function") + parser.add_argument("-e", "--event", dest="event_source", help="Event source") + parser.add_argument("-n", "--event-name", dest="event_name", help="Event name") + parser.add_argument("-l", "--list", dest="list", help="List of supported event sources", action="store_true") + parser.add_argument("--filtered-list", dest="filtered_list", help="Filtered list") return parser.parse_args(args) @@ -67,16 +67,16 @@ def create_registry(schemas_client): print(f"Registry with name '{registry_name}' already exists.") -def update_schema(schemas_client, lambda_name: str, test_event: str, example_name: Optional[str]): +def update_schema(schemas_client, lambda_name: str, test_event: str, event_name: Optional[str]): """Create or update shareable test event for the specified lambda_name""" schema_name = f"_{lambda_name}-schema" - example_name, event = build_test_event(test_event, example_name) + name, event = build_test_event(event_name, test_event) try: existing_schema = schemas_client.describe_schema( RegistryName=registry_name, SchemaName=schema_name, ) - content = generate_updated_schema_content(json.loads(existing_schema["Content"]), example_name, event) + content = generate_updated_schema_content(json.loads(existing_schema["Content"]), name, event) print(f"Schema '{schema_name}' already exists, updating...") schemas_client.update_schema( RegistryName=registry_name, @@ -86,7 +86,7 @@ def update_schema(schemas_client, lambda_name: str, test_event: str, example_nam ) except schemas_client.exceptions.NotFoundException: - content = generate_new_schema_content(example_name, event) + content = generate_new_schema_content(event_name, event) schemas_client.create_schema( RegistryName=registry_name, SchemaName=schema_name, @@ -96,27 +96,29 @@ def update_schema(schemas_client, lambda_name: str, test_event: str, example_nam ) -def build_test_event(test_event: str, example_name: Optional[str]) -> Tuple[str, Dict]: +def build_test_event(event_name: Optional[str], test_event: str) -> Tuple[str, Dict]: + """Load the local test event and return the event name and the parsed event""" path = get_test_event_path(test_event) - example_name = example_name or path.name.replace(".json", "") + event_name = event_name or path.name.replace(".json", "") event = json.loads(path.read_text()) - return example_name, event + return event_name, event def get_test_event_path(test_event: str) -> Path: + """Get the Path for the local event and fall back to one of the standard test events""" if exists(test_event): # Allows for locally defined test events return Path(test_event) else: # One of the standard test events return Path(template_root + test_event) -def generate_updated_schema_content(schema: Dict, example_name: str, event: Dict) -> str: - """Appends or updates the existing schema examples""" - schema["components"]["examples"][example_name] = {"value": event} +def generate_updated_schema_content(schema: Dict, event_name: str, event: Dict) -> str: + """Updates or appends to the existing schema examples""" + schema["components"]["examples"][event_name] = {"value": event} return json.dumps(schema) -def generate_new_schema_content(example_name: str, event: Dict) -> str: +def generate_new_schema_content(event_name: str, event: Dict) -> str: """Generates an event bridge schema from the test event file""" schema = { "openapi": "3.0.0", @@ -124,9 +126,12 @@ def generate_new_schema_content(example_name: str, event: Dict) -> str: "version": "1.0.0", "title": "Event", }, + "paths": {}, "components": { + # Could also include a collection of JSONSchemaDraft4 + # "schemas" : { "Event": build_json_schema(event) }, "examples": { - example_name: { + event_name: { "value": event, } }, @@ -154,7 +159,7 @@ def main(): test_event = args.event_source or get_test_event(list_of_events) schemas_client = session.client("schemas") create_registry(schemas_client) - update_schema(schemas_client, lambda_name, test_event, args.example_name) + update_schema(schemas_client, lambda_name, test_event, args.event_name) if __name__ == "__main__": diff --git a/event-schema/poetry.lock b/event-schema/poetry.lock index 21743e53..9f2bc32a 100644 --- a/event-schema/poetry.lock +++ b/event-schema/poetry.lock @@ -57,14 +57,14 @@ webencodings = "*" [[package]] name = "boto3" -version = "1.21.26" +version = "1.21.27" description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.6" [package.dependencies] -botocore = ">=1.24.26,<1.25.0" +botocore = ">=1.24.27,<1.25.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.5.0,<0.6.0" @@ -73,7 +73,7 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.24.26" +version = "1.24.27" description = "Low-level, data-driven core of boto 3." category = "main" optional = false @@ -651,12 +651,12 @@ bleach = [ {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"}, ] boto3 = [ - {file = "boto3-1.21.26-py3-none-any.whl", hash = "sha256:731947a8a316be2d4498b01f8e1df7d93b231ea3316675622b01065637662063"}, - {file = "boto3-1.21.26.tar.gz", hash = "sha256:8c1dd724d9ff9a4794d6beeda4a64ab19688db4a546b4db8b6eba621b71a8a8d"}, + {file = "boto3-1.21.27-py3-none-any.whl", hash = "sha256:f165790439117e3fd40f8c06826845068852a70ca5ac62adb192405c97f117e1"}, + {file = "boto3-1.21.27.tar.gz", hash = "sha256:ef41b9c7b6311d5152bdc78f7de56912c1ed265debf7da14133e1ad00246ad50"}, ] botocore = [ - {file = "botocore-1.24.26-py3-none-any.whl", hash = "sha256:530e4006b123fd909c7222eeadc0ce644ba89e63a1d59fff08af6a06f08766fc"}, - {file = "botocore-1.24.26.tar.gz", hash = "sha256:9f8e31ecbdc7e7bf29e4b195d67d8471f71793676bc193fde35e55cf9e3b41d1"}, + {file = "botocore-1.24.27-py3-none-any.whl", hash = "sha256:88e19efcaead99426434d9898d211093b8a8d0cc90af3b84a4ccb9f196894e87"}, + {file = "botocore-1.24.27.tar.gz", hash = "sha256:2c11db4b94b4b9504d2782acb758d29a7e5cbdfaa826601f222ac9ddcf004dde"}, ] certifi = [ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, diff --git a/event-schema/pyproject.toml b/event-schema/pyproject.toml index 770df729..e6813121 100644 --- a/event-schema/pyproject.toml +++ b/event-schema/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] -name = "lambda-event-schema-tool" -version = "0.8.0" +name = "aws-lambda-publish-shared-event" +version = "0.9.0" description = "Creating Shareable test events" license = "MIT" authors = ["Michael Brewer"] diff --git a/event-schema/setup.py b/event-schema/setup.py index 6af10cb3..a408239c 100644 --- a/event-schema/setup.py +++ b/event-schema/setup.py @@ -7,7 +7,7 @@ setuptools.setup( name="aws-lambda-publish-shared-event", - version="0.8.0", + version="0.9.0", entry_points={ "console_scripts": ["publish-shared-event=aws_lambda_publish_shared_event.__main__:main"], }, diff --git a/event-schema/tests/test_main.py b/event-schema/tests/test_main.py index 24e0a71c..ef9abf9a 100644 --- a/event-schema/tests/test_main.py +++ b/event-schema/tests/test_main.py @@ -68,6 +68,7 @@ def test_generate_new_schema_content(): expected = { "openapi": "3.0.0", "info": {"version": "1.0.0", "title": "Event"}, + "paths": {}, "components": { "examples": { example_name: {"value": event},