Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add to /info dump #65

Merged
merged 6 commits into from
Dec 22, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/semanticVersionBump.yml
Original file line number Diff line number Diff line change
@@ -110,8 +110,8 @@ jobs:
id: update_version
run: |
echo "# -*- coding: utf-8 -*-" > ${{ env.VERSION_FILE }}
echo "# DO NOT EDIT." > ${{ env.VERSION_FILE }}
echo "# Managed via automated CI/CD in .github/workflows/semanticVersionBump.yml." > ${{ env.VERSION_FILE }}
echo "# DO NOT EDIT." >> ${{ env.VERSION_FILE }}
echo "# Managed via automated CI/CD in .github/workflows/semanticVersionBump.yml." >> ${{ env.VERSION_FILE }}
echo "__version__ = \"${{ env.NEXT_VERSION }}\"" >> ${{ env.VERSION_FILE }}
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
10 changes: 4 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
## [0.2.8](https://github.com/FullStackWithLawrence/aws-rekognition/compare/v0.2.7...v0.2.8) (2023-12-22)


### Bug Fixes

* add a copy of terraform.tfvars to rekognition_info lambda build ([4ca4b7a](https://github.com/FullStackWithLawrence/aws-rekognition/commit/4ca4b7a794b873eafb204feb66264bd712669c0b))
* add remaining aws infrastructure resource meta data to /info ([64630ea](https://github.com/FullStackWithLawrence/aws-rekognition/commit/64630ea05295112b67b9b6de3c744ba93422fe56))
- add a copy of terraform.tfvars to rekognition_info lambda build ([4ca4b7a](https://github.com/FullStackWithLawrence/aws-rekognition/commit/4ca4b7a794b873eafb204feb66264bd712669c0b))
- add remaining aws infrastructure resource meta data to /info ([64630ea](https://github.com/FullStackWithLawrence/aws-rekognition/commit/64630ea05295112b67b9b6de3c744ba93422fe56))

## [0.2.7](https://github.com/FullStackWithLawrence/aws-rekognition/compare/v0.2.6...v0.2.7) (2023-12-21)


### Bug Fixes

* add more permissions for lambda, for introspections ([56e29f1](https://github.com/FullStackWithLawrence/aws-rekognition/commit/56e29f18a81343f2f2941e5d695abaaedc657f30))
* post deployment tweaks ([169ea9e](https://github.com/FullStackWithLawrence/aws-rekognition/commit/169ea9e692358ab80cc0c8630a646719a3b026b9))
- add more permissions for lambda, for introspections ([56e29f1](https://github.com/FullStackWithLawrence/aws-rekognition/commit/56e29f18a81343f2f2941e5d695abaaedc657f30))
- post deployment tweaks ([169ea9e](https://github.com/FullStackWithLawrence/aws-rekognition/commit/169ea9e692358ab80cc0c8630a646719a3b026b9))

## [0.2.6](https://github.com/FullStackWithLawrence/aws-rekognition/compare/v0.2.5...v0.2.6) (2023-12-21)

27 changes: 10 additions & 17 deletions Makefile
Original file line number Diff line number Diff line change
@@ -10,13 +10,6 @@ PIP = $(PYTHON) -m pip

.PHONY: env analyze init pre-commit requirements lint clean test build force-release publish-test publish-prod help


ifeq ($(OS),Windows_NT)
ACTIVATE_VENV = venv\Scripts\activate
else
ACTIVATE_VENV = source venv/bin/activate
endif

# Default target executed when no arguments are given to make.
all: help

@@ -35,7 +28,7 @@ env:
endif

analyze:
cloc . --exclude-ext=svg,json,zip --vcs=git
cloc . --exclude-ext=svg,zip --vcs=git

# -------------------------------------------------------------------------
# Initialize. create virtual environment and install requirements
@@ -51,12 +44,12 @@ init:
# Install requirements: Python, npm and pre-commit
# -------------------------------------------------------------------------
requirements:
rm -rf .tox
$(PIP) install --upgrade pip wheel
rm -rf .tox && \
$(PIP) install --upgrade pip wheel && \
$(PIP) install -r requirements.txt && \
npm install && \
pre-commit install
pre-commit autoupdate
pre-commit install && \
pre-commit autoupdate && \
pre-commit run --all-files

# -------------------------------------------------------------------------
@@ -76,7 +69,7 @@ lint:
# -------------------------------------------------------------------------
clean:
rm -rf ./terraform/.terraform venv .pytest_cache __pycache__ .pytest_cache node_modules && \
rm -rf build dist aws-rekogition.egg-info
rm -rf build dist aws-rekogition.egg-info && \
find ./terraform/python/ -name __pycache__ -type d -exec rm -rf {} +

# -------------------------------------------------------------------------
@@ -92,10 +85,10 @@ force-release:
git commit -m "fix: force a new release" --allow-empty && git push

update:
npm install -g npm
npm install -g npm-check-updates
ncu --upgrade --packageFile ./package.json
npm update -g
npm install -g npm && \
npm install -g npm-check-updates && \
ncu --upgrade --packageFile ./package.json && \
npm update -g && \
make init

build:
1 change: 1 addition & 0 deletions terraform/json/iam_policy_lambda.json.tpl
Original file line number Diff line number Diff line change
@@ -29,6 +29,7 @@
"iam:ListPolicies",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:ListAttachedRolePolicies",
"s3:ListAllMyBuckets",
"rekognition:IndexFaces",
"rekognition:DescribeCollection",
3 changes: 2 additions & 1 deletion terraform/python/rekognition_api/__version__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# -*- coding: utf-8 -*-
# Managed via automated CI/CD in .github/workflows/semanticVersionBump.yml.
__version__ = "0.2.8-next.1"
__version__ = "0.2.9-next.1"
19 changes: 12 additions & 7 deletions terraform/python/rekognition_api/aws.py
Original file line number Diff line number Diff line change
@@ -4,10 +4,9 @@
# python stuff
import socket

from rekognition_api.common import recursive_sort_dict

# our stuff
from rekognition_api.conf import settings
from rekognition_api.utils import recursive_sort_dict


# pylint: disable=too-many-public-methods
@@ -74,11 +73,17 @@ def get_iam_roles(self):
"""Return a dict of the AWS IAM roles."""
iam_client = settings.aws_session.client("iam")
roles = iam_client.list_roles()["Roles"]
rekognition_roles = {
role["RoleName"]: {"Arn": role["Arn"], "Role": role}
for role in roles
if settings.shared_resource_identifier in role["RoleName"]
}
rekognition_roles = {}
for role in roles:
if settings.shared_resource_identifier in role["RoleName"]:
attached_policies = iam_client.list_attached_role_policies(RoleName=role["RoleName"])[
"AttachedPolicies"
]
rekognition_roles[role["RoleName"]] = {
"Arn": role["Arn"],
"Role": role,
"AttachedPolicies": attached_policies,
}
return rekognition_roles or {}

def get_api_stage(self) -> str:
9 changes: 4 additions & 5 deletions terraform/python/rekognition_api/conf.py
Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@
# 3rd party stuff
import boto3 # AWS SDK for Python https://boto3.amazonaws.com/v1/documentation/api/latest/index.html
import pkg_resources
from botocore.config import Config
from botocore.exceptions import ProfileNotFound
from dotenv import load_dotenv
from pydantic import Field, SecretStr, ValidationError, ValidationInfo, field_validator
@@ -39,6 +40,7 @@
RekognitionConfigurationError,
RekognitionValueError,
)
from rekognition_api.utils import recursive_sort_dict


logger = logging.getLogger(__name__)
@@ -338,7 +340,8 @@ def aws_route53_client(self):
def aws_apigateway_client(self):
"""API Gateway client"""
if not self._aws_apigateway_client:
self._aws_apigateway_client = self.aws_session.client("apigateway")
config = Config(read_timeout=70, connect_timeout=70, retries={"max_attempts": 10})
self._aws_apigateway_client = self.aws_session.client("apigateway", config=config)
return self._aws_apigateway_client

@property
@@ -433,10 +436,6 @@ def version(self) -> str:
def dump(self) -> dict:
"""Dump all settings."""

def recursive_sort_dict(d):
"""Recursively sort a dictionary by key."""
return {k: recursive_sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(d.items())}

def get_installed_packages():
installed_packages = pkg_resources.working_set
# pylint: disable=not-an-iterable
9 changes: 5 additions & 4 deletions terraform/python/rekognition_api/lambda_index.py
Original file line number Diff line number Diff line change
@@ -52,14 +52,15 @@
unquote_plus,
)

from rekognition_api.conf import settings
from rekognition_api.exceptions import EXCEPTION_MAP, RekognitionIlligalInvocationError

# our stuff
from rekognition_api.common import (
from rekognition_api.utils import (
cloudwatch_handler,
exception_response_factory,
http_response_factory,
)
from rekognition_api.conf import settings
from rekognition_api.exceptions import EXCEPTION_MAP, RekognitionIlligalInvocationError


# vanity stuff to reduce the verbosity of superfluous log data generated by urllib3
@@ -180,7 +181,7 @@ def log_event_record(record):
def lambda_handler(event, context): # noqa: C901
"""Lambda entry point"""

cloudwatch_handler(event)
cloudwatch_handler(event, settings.dump, debug_mode=settings.debug_mode)
validate_event(event)
records = get_records(event)
for record in records:
2 changes: 1 addition & 1 deletion terraform/python/rekognition_api/lambda_info.py
Original file line number Diff line number Diff line change
@@ -5,8 +5,8 @@
import json

from rekognition_api.aws import aws_infrastructure_config as aws_config
from rekognition_api.common import DateTimeEncoder, http_response_factory
from rekognition_api.conf import settings
from rekognition_api.utils import http_response_factory


# pylint: disable=unused-argument
8 changes: 4 additions & 4 deletions terraform/python/rekognition_api/lambda_search.py
Original file line number Diff line number Diff line change
@@ -37,13 +37,13 @@
import base64 # library with base63 encoding/decoding functions
import json # library for interacting with JSON data https://www.json.org/json-en.html

from rekognition_api.common import (
from rekognition_api.conf import settings
from rekognition_api.exceptions import EXCEPTION_MAP
from rekognition_api.utils import (
cloudwatch_handler,
exception_response_factory,
http_response_factory,
)
from rekognition_api.conf import settings
from rekognition_api.exceptions import EXCEPTION_MAP


def get_image_from_event(event):
@@ -107,7 +107,7 @@ def lambda_handler(event, context): # noqa: C901
"""
Facial recognition image analysis and search for indexed faces. invoked by API Gateway.
"""
cloudwatch_handler(event)
cloudwatch_handler(event, settings.dump, debug_mode=settings.debug_mode)
try:
image = get_image_from_event(event)
faces = get_faces(image)
Original file line number Diff line number Diff line change
@@ -5,8 +5,6 @@
import sys
import traceback

from rekognition_api.conf import settings


class DateTimeEncoder(json.JSONEncoder):
"""JSON encoder that handles datetime objects."""
@@ -18,14 +16,19 @@ def default(self, o):
return super().default(o)


def cloudwatch_handler(event, quiet: bool = False):
def cloudwatch_handler(
event,
dump,
debug_mode: bool = False,
quiet: bool = False,
):
"""Create a CloudWatch log entry for the event and dump the event to stdout."""
if settings.debug_mode and not quiet:
print(json.dumps(settings.dump, cls=DateTimeEncoder))
if debug_mode and not quiet:
print(json.dumps(dump, cls=DateTimeEncoder))
print(json.dumps({"event": event}, cls=DateTimeEncoder))


def http_response_factory(status_code: int, body: json) -> json:
def http_response_factory(status_code: int, body: json, debug_mode: bool = False) -> json:
"""
Generate a standardized JSON return dictionary for all possible response scenarios.
@@ -37,7 +40,7 @@ def http_response_factory(status_code: int, body: json) -> json:
if status_code < 100 or status_code > 599:
raise ValueError(f"Invalid HTTP response code received: {status_code}")

if settings.debug_mode:
if debug_mode:
retval = {
"isBase64Encoded": False,
"statusCode": status_code,