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

style: prefix all objects with aws service name #58

Merged
merged 2 commits into from
Dec 20, 2023
Merged
Show file tree
Hide file tree
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
21 changes: 0 additions & 21 deletions .github/workflows/pullRequestController.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,24 +93,3 @@ jobs:
echo ${{ steps.semantic.outputs.new_release_major_version }}
echo ${{ steps.semantic.outputs.new_release_minor_version }}
echo ${{ steps.semantic.outputs.new_release_patch_version }}

python_tests:
needs: check_for_pending_release
runs-on: ubuntu-latest

steps:
- name: Checkout code
id: checkout
uses: actions/checkout@v4

- name: Check for changed files
id: file_changes
run: |
echo "::set-output name=files_changed::$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep '\.py$' || true)"
echo "::set-output name=requirements_changed::$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep 'requirements.txt$' || true)"

- name: Run Python tests
if: steps.file_changes.outputs.files_changed != '' || steps.file_changes.outputs.requirements_changed != ''
uses: ./.github/actions/tests/python
with:
python-version: "${{ env.python-version}}"
3 changes: 1 addition & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
## [0.2.2](https://github.com/FullStackWithLawrence/aws-rekognition/compare/v0.2.1...v0.2.2) (2023-12-20)


### Bug Fixes

* integrate TFVARS to defaults. add conf meta fields. expand dump dict. ([c653aa1](https://github.com/FullStackWithLawrence/aws-rekognition/commit/c653aa10ab069272f6269d85fd1a04eb6ed0339b))
- integrate TFVARS to defaults. add conf meta fields. expand dump dict. ([c653aa1](https://github.com/FullStackWithLawrence/aws-rekognition/commit/c653aa10ab069272f6269d85fd1a04eb6ed0339b))

# Change Log

Expand Down
12 changes: 6 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ env:
ifneq ("$(wildcard .env)","")
include .env
else
$(shell echo -e "FACE_DETECT_MAX_FACES_COUNT=10" >> .env)
$(shell echo -e "FACE_DETECT_THRESHOLD=10" >> .env)
$(shell echo -e "FACE_DETECT_ATTRIBUTES=DEFAULT" >> .env)
$(shell echo -e "FACE_DETECT_QUALITY_FILTER=AUTO" >> .env)
$(shell echo -e "TABLE_ID=rekognition" >> .env)
$(shell echo -e "AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT=10" >> .env)
$(shell echo -e "AWS_REKOGNITION_FACE_DETECT_THRESHOLD=10" >> .env)
$(shell echo -e "AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES=DEFAULT" >> .env)
$(shell echo -e "AWS_REKOGNITION_FACE_DETECT_QUALITY_FILTER=AUTO" >> .env)
$(shell echo -e "AWS_DYNAMODB_TABLE_ID=rekognition" >> .env)
$(shell echo -e "AWS_REGION=us-east-1" >> .env)
$(shell echo -e "COLLECTION_ID=rekognition-collection" >> .env)
$(shell echo -e "AWS_REKOGNITION_COLLECTION_ID=rekognition-collection" >> .env)
$(shell echo -e "DEBUG_MODE=False" >> .env)
endif

Expand Down
14 changes: 7 additions & 7 deletions terraform/lambda_index.tf
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ resource "aws_lambda_function" "index" {

environment {
variables = {
DEBUG_MODE = var.debug_mode
COLLECTION_ID = local.collection_id
TABLE_ID = local.table_name
MAX_FACES_COUNT = var.max_faces_count
S3_BUCKET_NAME = module.s3_bucket.s3_bucket_id
FACE_DETECT_ATTRIBUTES = var.face_detect_attributes
QUALITY_FILTER = var.face_detect_quality_filter
DEBUG_MODE = var.debug_mode
AWS_REKOGNITION_COLLECTION_ID = local.aws_rekognition_collection_id
AWS_DYNAMODB_TABLE_ID = local.table_name
MAX_FACES_COUNT = var.aws_rekognition_max_faces_count
S3_BUCKET_NAME = module.s3_bucket.s3_bucket_id
AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES = var.aws_rekognition_face_detect_attributes
QUALITY_FILTER = var.aws_rekognition_face_detect_quality_filter
}
}
}
Expand Down
16 changes: 8 additions & 8 deletions terraform/lambda_search.tf
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ resource "aws_lambda_function" "search" {

environment {
variables = {
DEBUG_MODE = var.debug_mode
MAX_FACES_COUNT = var.max_faces_count
FACE_DETECT_THRESHOLD = var.face_detect_threshold
QUALITY_FILTER = var.face_detect_quality_filter
FACE_DETECT_ATTRIBUTES = var.face_detect_attributes
TABLE_ID = local.table_name
REGION = var.aws_region
COLLECTION_ID = local.collection_id
DEBUG_MODE = var.debug_mode
MAX_FACES_COUNT = var.aws_rekognition_max_faces_count
AWS_REKOGNITION_FACE_DETECT_THRESHOLD = var.aws_rekognition_face_detect_threshold
QUALITY_FILTER = var.aws_rekognition_face_detect_quality_filter
AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES = var.aws_rekognition_face_detect_attributes
AWS_DYNAMODB_TABLE_ID = local.table_name
REGION = var.aws_region
AWS_REKOGNITION_COLLECTION_ID = local.aws_rekognition_collection_id
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions terraform/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
# usage: local variable declaration and common infrastructure for the service
#------------------------------------------------------------------------------
locals {
collection_id = "${var.shared_resource_identifier}-collection"
table_name = var.shared_resource_identifier
aws_rekognition_collection_id = "${var.shared_resource_identifier}-collection"
table_name = var.shared_resource_identifier
}
102 changes: 52 additions & 50 deletions terraform/python/rekognition_api/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,16 @@ class SettingsDefaults:
DUMP_DEFAULTS = TFVARS.get("dump_defaults", False)
AWS_REGION = TFVARS.get("aws_region", "us-east-1")
DEBUG_MODE: bool = bool(TFVARS.get("debug_mode", False))
TABLE_ID = "rekognition"
COLLECTION_ID = TABLE_ID + "-collection"
FACE_DETECT_MAX_FACES_COUNT: int = int(TFVARS.get("max_faces_count", 10))
FACE_DETECT_THRESHOLD: int = int(TFVARS.get("face_detect_threshold", 10))
FACE_DETECT_ATTRIBUTES = TFVARS.get("face_detect_attributes", "DEFAULT")
FACE_DETECT_QUALITY_FILTER = TFVARS.get("face_detect_quality_filter", "AUTO")
SHARED_RESOURCE_IDENTIFIER = TFVARS.get("shared_resource_identifier", "rekognition_api")

AWS_DYNAMODB_TABLE_ID = "rekognition"

AWS_REKOGNITION_COLLECTION_ID = AWS_DYNAMODB_TABLE_ID + "-collection"
AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT: int = int(TFVARS.get("aws_rekognition_max_faces_count", 10))
AWS_REKOGNITION_FACE_DETECT_THRESHOLD: int = int(TFVARS.get("aws_rekognition_face_detect_threshold", 10))
AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES = TFVARS.get("aws_rekognition_face_detect_attributes", "DEFAULT")
AWS_REKOGNITION_FACE_DETECT_QUALITY_FILTER = TFVARS.get("aws_rekognition_face_detect_quality_filter", "AUTO")

@classmethod
def to_dict(cls):
"""Convert SettingsDefaults to dict"""
Expand Down Expand Up @@ -148,36 +150,36 @@ def __init__(self, **data: Any):
SettingsDefaults.AWS_REGION,
env="AWS_REGION",
)
table_id: Optional[str] = Field(
SettingsDefaults.TABLE_ID,
env="TABLE_ID",
aws_dynamodb_table_id: Optional[str] = Field(
SettingsDefaults.AWS_DYNAMODB_TABLE_ID,
env="AWS_DYNAMODB_TABLE_ID",
)
collection_id: Optional[str] = Field(
SettingsDefaults.COLLECTION_ID,
env="COLLECTION_ID",
aws_rekognition_collection_id: Optional[str] = Field(
SettingsDefaults.AWS_REKOGNITION_COLLECTION_ID,
env="AWS_REKOGNITION_COLLECTION_ID",
)

face_detect_attributes: Optional[str] = Field(
SettingsDefaults.FACE_DETECT_ATTRIBUTES,
env="FACE_DETECT_ATTRIBUTES",
aws_rekognition_face_detect_attributes: Optional[str] = Field(
SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES,
env="AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES",
)
face_detect_quality_filter: Optional[str] = Field(
SettingsDefaults.FACE_DETECT_QUALITY_FILTER,
env="FACE_DETECT_QUALITY_FILTER",
aws_rekognition_face_detect_quality_filter: Optional[str] = Field(
SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_QUALITY_FILTER,
env="AWS_REKOGNITION_FACE_DETECT_QUALITY_FILTER",
)
face_detect_max_faces_count: Optional[int] = Field(
SettingsDefaults.FACE_DETECT_MAX_FACES_COUNT,
aws_rekognition_face_detect_max_faces_count: Optional[int] = Field(
SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT,
gt=0,
env="FACE_DETECT_MAX_FACES_COUNT",
env="AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT",
pre=True,
getter=lambda v: empty_str_to_int_default(v, SettingsDefaults.FACE_DETECT_MAX_FACES_COUNT),
getter=lambda v: empty_str_to_int_default(v, SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT),
)
face_detect_threshold: Optional[int] = Field(
SettingsDefaults.FACE_DETECT_THRESHOLD,
aws_rekognition_face_detect_threshold: Optional[int] = Field(
SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_THRESHOLD,
gt=0,
env="FACE_DETECT_THRESHOLD",
env="AWS_REKOGNITION_FACE_DETECT_THRESHOLD",
pre=True,
getter=lambda v: empty_str_to_int_default(v, SettingsDefaults.FACE_DETECT_THRESHOLD),
getter=lambda v: empty_str_to_int_default(v, SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_THRESHOLD),
)
shared_resource_identifier: Optional[str] = Field(
SettingsDefaults.SHARED_RESOURCE_IDENTIFIER, env="SHARED_RESOURCE_IDENTIFIER"
Expand Down Expand Up @@ -211,7 +213,7 @@ def rekognition_client(self):
@property
def dynamodb_table(self):
"""DynamoDB table"""
return self.dynamodb_client.Table(self.table_id)
return self.dynamodb_client.Table(self.aws_dynamodb_table_id)

@property
def is_using_dotenv_file(self) -> bool:
Expand Down Expand Up @@ -279,15 +281,15 @@ def recursive_sort_dict(d):
"region": self.aws_region,
},
"rekognition": {
"collection_id": self.collection_id,
"table_id": self.table_id,
"face_detect_max_faces_count": self.face_detect_max_faces_count,
"face_detect_attributes": self.face_detect_attributes,
"face_detect_quality_filter": self.face_detect_quality_filter,
"face_detect_threshold": self.face_detect_threshold,
"aws_rekognition_collection_id": self.aws_rekognition_collection_id,
"aws_dynamodb_table_id": self.aws_dynamodb_table_id,
"aws_rekognition_face_detect_max_faces_count": self.aws_rekognition_face_detect_max_faces_count,
"aws_rekognition_face_detect_attributes": self.aws_rekognition_face_detect_attributes,
"aws_rekognition_face_detect_quality_filter": self.aws_rekognition_face_detect_quality_filter,
"aws_rekognition_face_detect_threshold": self.aws_rekognition_face_detect_threshold,
},
"dynamodb": {
"table": self.table_id,
"table": self.aws_dynamodb_table_id,
},
}
if self.dump_defaults:
Expand Down Expand Up @@ -334,25 +336,25 @@ def validate_aws_region(cls, v, values: ValidationInfo, **kwargs) -> str:
raise RekognitionValueError(f"aws_region {v} not in aws_regions")
return v

@field_validator("table_id")
@field_validator("aws_dynamodb_table_id")
def validate_table_id(cls, v) -> str:
"""Validate table_id"""
"""Validate aws_dynamodb_table_id"""
if v in [None, ""]:
return SettingsDefaults.TABLE_ID
return SettingsDefaults.AWS_DYNAMODB_TABLE_ID
return v

@field_validator("collection_id")
@field_validator("aws_rekognition_collection_id")
def validate_collection_id(cls, v) -> str:
"""Validate collection_id"""
"""Validate aws_rekognition_collection_id"""
if v in [None, ""]:
return SettingsDefaults.COLLECTION_ID
return SettingsDefaults.AWS_REKOGNITION_COLLECTION_ID
return v

@field_validator("face_detect_attributes")
@field_validator("aws_rekognition_face_detect_attributes")
def validate_face_detect_attributes(cls, v) -> str:
"""Validate face_detect_attributes"""
"""Validate aws_rekognition_face_detect_attributes"""
if v in [None, ""]:
return SettingsDefaults.FACE_DETECT_ATTRIBUTES
return SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES
return v

@field_validator("debug_mode")
Expand All @@ -373,20 +375,20 @@ def parse_dump_defaults(cls, v) -> bool:
return SettingsDefaults.DUMP_DEFAULTS
return v.lower() in ["true", "1", "t", "y", "yes"]

@field_validator("face_detect_max_faces_count")
def check_face_detect_max_faces_count(cls, v) -> int:
"""Check face_detect_max_faces_count"""
@field_validator("aws_rekognition_face_detect_max_faces_count")
def check_aws_rekognition_face_detect_max_faces_count(cls, v) -> int:
"""Check aws_rekognition_face_detect_max_faces_count"""
if v in [None, ""]:
return SettingsDefaults.FACE_DETECT_MAX_FACES_COUNT
return SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT
return int(v)

@field_validator("face_detect_threshold")
@field_validator("aws_rekognition_face_detect_threshold")
def check_face_detect_threshold(cls, v) -> int:
"""Check face_detect_threshold"""
"""Check aws_rekognition_face_detect_threshold"""
if isinstance(v, int):
return v
if v in [None, ""]:
return SettingsDefaults.FACE_DETECT_THRESHOLD
return SettingsDefaults.AWS_REKOGNITION_FACE_DETECT_THRESHOLD
return int(v)


Expand Down
8 changes: 4 additions & 4 deletions terraform/python/rekognition_api/lambda_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,12 +128,12 @@ def get_faces(event, record):
faces = {"FaceRecords": []}
try:
faces = settings.rekognition_client.index_faces(
CollectionId=settings.collection_id,
CollectionId=settings.aws_rekognition_collection_id,
Image={"S3Object": {"Bucket": s3_bucket_name, "Name": s3_object_key}},
ExternalImageId=s3_object_key,
DetectionAttributes=[settings.face_detect_attributes],
MaxFaces=settings.face_detect_max_faces_count,
QualityFilter=settings.face_detect_quality_filter,
DetectionAttributes=[settings.aws_rekognition_face_detect_attributes],
MaxFaces=settings.aws_rekognition_face_detect_max_faces_count,
QualityFilter=settings.aws_rekognition_face_detect_quality_filter,
)

# handle anything that went wrong
Expand Down
8 changes: 4 additions & 4 deletions terraform/python/rekognition_api/lambda_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ def get_faces(image):
"""return a list of faces found in the image"""
return settings.rekognition_client.search_faces_by_image(
Image=image,
CollectionId=settings.collection_id,
MaxFaces=settings.face_detect_max_faces_count,
FaceMatchThreshold=settings.face_detect_threshold,
QualityFilter=settings.face_detect_quality_filter,
CollectionId=settings.aws_rekognition_collection_id,
MaxFaces=settings.aws_rekognition_face_detect_max_faces_count,
FaceMatchThreshold=settings.aws_rekognition_face_detect_threshold,
QualityFilter=settings.aws_rekognition_face_detect_quality_filter,
)


Expand Down
12 changes: 6 additions & 6 deletions terraform/python/rekognition_api/tests/.env.test_01
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
FACE_DETECT_MAX_FACES_COUNT=100
FACE_DETECT_THRESHOLD=100
FACE_DETECT_ATTRIBUTES=TEST_DEFAULT
FACE_DETECT_QUALITY_FILTER=TEST_AUTO
TABLE_ID=TEST_facialrecognition
AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT=100
AWS_REKOGNITION_FACE_DETECT_THRESHOLD=100
AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES=TEST_DEFAULT
AWS_REKOGNITION_FACE_DETECT_QUALITY_FILTER=TEST_AUTO
AWS_DYNAMODB_TABLE_ID=TEST_facialrecognition
AWS_REGION=us-west-1
COLLECTION_ID=TEST_facialrecognition-collection
AWS_REKOGNITION_COLLECTION_ID=TEST_facialrecognition-collection
DEBUG_MODE=True
10 changes: 5 additions & 5 deletions terraform/python/rekognition_api/tests/.env.test_illegal_nulls
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
FACE_DETECT_MAX_FACES_COUNT=
FACE_DETECT_THRESHOLD=
FACE_DETECT_ATTRIBUTES=
AWS_REKOGNITION_FACE_DETECT_MAX_FACES_COUNT=
AWS_REKOGNITION_FACE_DETECT_THRESHOLD=
AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES=
QUALITY_FILTER=
TABLE_ID=
AWS_DYNAMODB_TABLE_ID=
AWS_REGION=
COLLECTION_ID=
AWS_REKOGNITION_COLLECTION_ID=
DEBUG_MODE=
6 changes: 3 additions & 3 deletions terraform/python/rekognition_api/tests/.env.test_legal_nulls
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
FACE_DETECT_ATTRIBUTES=
AWS_REKOGNITION_FACE_DETECT_ATTRIBUTES=
QUALITY_FILTER=
TABLE_ID=
AWS_DYNAMODB_TABLE_ID=
AWS_REGION=
COLLECTION_ID=
AWS_REKOGNITION_COLLECTION_ID=
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def rekognition_collection_exists(self):
rekognition_client = self.aws_session.client("rekognition")
response = rekognition_client.list_collections()
for collection in response["CollectionIds"]:
if collection == settings.collection_id:
if collection == settings.aws_rekognition_collection_id:
return True
return False

Expand All @@ -201,7 +201,8 @@ def rekognition_collection_exists(self):
def test_rekognition_collection_exists(self):
"""Test that the Rekognition collection exists."""
self.assertTrue(
self.rekognition_collection_exists(), f"Rekognition collection {settings.collection_id} does not exist."
self.rekognition_collection_exists(),
f"Rekognition collection {settings.aws_rekognition_collection_id} does not exist.",
)

def test_aws_connection_works(self):
Expand Down
Loading
Loading