Skip to content

Commit 278f815

Browse files
committed
init: move recordforwarder, copy src/models
1 parent 9768338 commit 278f815

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+5166
-49
lines changed

.github/dependabot.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ updates:
1313
- "/lambdas/delta_backend"
1414
- "/lambdas/filenameprocessor"
1515
- "/lambdas/mesh_processor"
16+
- "/lambdas/recordforwarder"
1617
- "/lambdas/recordprocessor"
1718
- "/sandbox"
1819
schedule:
@@ -57,6 +58,7 @@ updates:
5758
- "/lambdas/id_sync"
5859
- "/lambdas/mesh_processor"
5960
- "/lambdas/mns_subscription"
61+
- "/lambdas/recordforwarder"
6062
- "/lambdas/recordprocessor"
6163
- "/lambdas/redis_sync"
6264
- "/lambdas/shared"

.github/workflows/quality-checks.yml

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -97,29 +97,6 @@ jobs:
9797
aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
9898
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
9999
100-
- name: Run unittest with recordprocessor-coverage
101-
working-directory: lambdas/recordprocessor
102-
id: recordprocessor
103-
env:
104-
PYTHONPATH: ${{ env.LAMBDA_PATH }}/recordprocessor/src:${{ env.LAMBDA_PATH }}/recordprocessor/tests:${{ env.SHARED_PATH }}/src
105-
continue-on-error: true
106-
run: |
107-
poetry install
108-
poetry run coverage run --source=src -m unittest discover || echo "recordprocessor tests failed" >> ../../failed_tests.txt
109-
poetry run coverage xml -o ../../recordprocessor-coverage.xml
110-
111-
# This step is redundant - all of these tests will be run in the backend step below
112-
- name: Run unittest with recordforwarder-coverage
113-
working-directory: backend
114-
id: recordforwarder
115-
env:
116-
PYTHONPATH: ${{ github.workspace }}/backend/src:${{ github.workspace }}/backend/tests
117-
continue-on-error: true
118-
run: |
119-
poetry install
120-
poetry run coverage run --source=src -m unittest discover -p "*batch*.py" || echo "recordforwarder tests failed" >> ../failed_tests.txt
121-
poetry run coverage xml -o ../recordforwarder-coverage.xml
122-
123100
- name: Run unittest with coverage-fhir-api
124101
working-directory: backend
125102
env:
@@ -207,6 +184,28 @@ jobs:
207184
poetry run coverage report -m
208185
poetry run coverage xml -o ../../mns_subscription-coverage.xml
209186
187+
- name: Run unittest with recordforwarder-coverage
188+
working-directory: lambdas/recordforwarder
189+
id: recordforwarder
190+
env:
191+
PYTHONPATH: ${{ env.LAMBDA_PATH }}/recordforwarder/src:${{ env.LAMBDA_PATH }}/recordforwarder/tests:${{ env.SHARED_PATH }}/src
192+
continue-on-error: true
193+
run: |
194+
poetry install
195+
poetry run coverage run --source=src -m unittest discover || echo "recordforwarder tests failed" >> ../../failed_tests.txt
196+
poetry run coverage xml -o ../../recordforwarder-coverage.xml
197+
198+
- name: Run unittest with recordprocessor-coverage
199+
working-directory: lambdas/recordprocessor
200+
id: recordprocessor
201+
env:
202+
PYTHONPATH: ${{ env.LAMBDA_PATH }}/recordprocessor/src:${{ env.LAMBDA_PATH }}/recordprocessor/tests:${{ env.SHARED_PATH }}/src
203+
continue-on-error: true
204+
run: |
205+
poetry install
206+
poetry run coverage run --source=src -m unittest discover || echo "recordprocessor tests failed" >> ../../failed_tests.txt
207+
poetry run coverage xml -o ../../recordprocessor-coverage.xml
208+
210209
- name: Run unittest with redis_sync
211210
working-directory: lambdas/redis_sync
212211
id: redis_sync

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
SHELL=/usr/bin/env bash -euo pipefail
22

3-
PYTHON_PROJECT_DIRS_WITH_UNIT_TESTS = backend lambdas/ack_backend lambdas/batch_processor_filter lambdas/delta_backend lambdas/filenameprocessor lambdas/id_sync lambdas/mesh_processor lambdas/mns_subscription lambdas/recordprocessor lambdas/redis_sync lambdas/shared
3+
PYTHON_PROJECT_DIRS_WITH_UNIT_TESTS = backend lambdas/ack_backend lambdas/batch_processor_filter lambdas/delta_backend lambdas/filenameprocessor lambdas/id_sync lambdas/mesh_processor lambdas/mns_subscription lambdas/recordforwarder lambdas/recordprocessor lambdas/redis_sync lambdas/shared
44
PYTHON_PROJECT_DIRS = tests/e2e tests/e2e_batch quality_checks $(PYTHON_PROJECT_DIRS_WITH_UNIT_TESTS)
55

66
.PHONY: install lint format format-check clean publish build-proxy release initialise-all-python-venvs update-all-python-dependencies run-all-python-unit-tests build-all-docker-images

immunisation-fhir-api.code-workspace

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
{
2828
"path": "lambdas/mns_subscription",
2929
},
30+
{
31+
"path": "lambdas/recordforwarder",
32+
},
3033
{
3134
"path": "lambdas/recordprocessor",
3235
},

infrastructure/instance/forwarder_lambda.tf

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
locals {
2-
forwarder_lambda_dir = abspath("${path.root}/../../backend")
3-
forwarder_source_path = local.forwarder_lambda_dir
4-
forwarder_path_include = ["**"]
5-
forwarder_path_exclude = ["**/__pycache__/**"]
6-
forwarder_files_include = setunion([for f in local.forwarder_path_include : fileset(local.forwarder_source_path, f)]...)
7-
forwarder_files_exclude = setunion([for f in local.forwarder_path_exclude : fileset(local.forwarder_source_path, f)]...)
8-
forwarder_files = sort(setsubtract(local.forwarder_files_include, local.forwarder_files_exclude))
9-
10-
forwarder_dir_sha = sha1(join("", [for f in local.forwarder_files : filesha1("${local.forwarder_source_path}/${f}")]))
2+
forwarder_lambda_dir = abspath("${path.root}/../../lambdas/recordforwarder")
3+
forwarder_lambda_files = fileset(local.forwarder_lambda_dir, "**")
4+
forwarder_lambda_dir_sha = sha1(join("", [for f in local.forwarder_lambda_files : filesha1("${local.forwarder_lambda_dir}/${f}")]))
115
}
126

137
resource "aws_ecr_repository" "forwarder_lambda_repository" {
@@ -19,12 +13,12 @@ resource "aws_ecr_repository" "forwarder_lambda_repository" {
1913
}
2014

2115
module "forwarding_docker_image" {
22-
source = "terraform-aws-modules/lambda/aws//modules/docker-build"
23-
version = "8.1.2"
16+
source = "terraform-aws-modules/lambda/aws//modules/docker-build"
17+
version = "8.1.2"
18+
docker_file_path = "./recordforwarder/Dockerfile"
2419

25-
create_ecr_repo = false
26-
ecr_repo = aws_ecr_repository.forwarder_lambda_repository.name
27-
docker_file_path = "batch.Dockerfile"
20+
create_ecr_repo = false
21+
ecr_repo = aws_ecr_repository.forwarder_lambda_repository.name
2822
ecr_repo_lifecycle_policy = jsonencode({
2923
rules = [
3024
{
@@ -46,7 +40,8 @@ module "forwarding_docker_image" {
4640
use_image_tag = false
4741
source_path = local.forwarder_lambda_dir
4842
triggers = {
49-
dir_sha = local.forwarder_dir_sha
43+
dir_sha = local.forwarder_lambda_dir_sha
44+
shared_dir_sha = local.shared_dir_sha
5045
}
5146
}
5247

Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
11
FROM public.ecr.aws/lambda/python:3.11 AS base
2-
# Create a non-root user with a specific UID and GID
2+
33
RUN mkdir -p /home/appuser && \
44
echo 'appuser:x:1001:1001::/home/appuser:/sbin/nologin' >> /etc/passwd && \
55
echo 'appuser:x:1001:' >> /etc/group && \
66
chown -R 1001:1001 /home/appuser && pip install "poetry~=2.1.4"
77

8-
# -----------------------------
9-
COPY poetry.lock pyproject.toml README.md ./
8+
# Install Poetry dependencies
9+
# Copy recordforwarder Poetry files
10+
COPY ./recordforwarder/poetry.lock ./recordforwarder/pyproject.toml ./
11+
12+
# Install recordforwarder dependencies
13+
WORKDIR /var/task
1014
RUN poetry config virtualenvs.create false && poetry install --no-interaction --no-ansi --no-root --only main
11-
# -----------------------------
12-
FROM base AS test
13-
COPY src src
14-
COPY tests tests
15-
RUN poetry install --no-interaction --no-ansi --no-root && \
16-
pytest --disable-warnings tests
15+
1716
# -----------------------------
1817
FROM base AS build
19-
COPY src .
18+
19+
# Set working directory back to Lambda task root
20+
WORKDIR /var/task
21+
22+
# Copy shared source code
23+
COPY ./shared/src/common ./common
24+
25+
# Copy recordforwarder source code
26+
COPY ./recordforwarder/src .
27+
28+
# Set correct permissions
2029
RUN chmod 644 $(find . -type f) && chmod 755 $(find . -type d)
30+
2131
# Switch to the non-root user for running the container
2232
USER 1001:1001
33+
34+
# Set the Lambda handler
2335
CMD ["forwarding_batch_lambda.forward_lambda_handler"]

lambdas/recordforwarder/Makefile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
TEST_ENV := @PYTHONPATH=src:tests:../shared/src
2+
3+
build:
4+
docker build -t imms-lambda-build -f Dockerfile .
5+
6+
package: build
7+
mkdir -p build
8+
docker run --rm -v $(shell pwd)/build:/build imms-lambda-build
9+
10+
test:
11+
$(TEST_ENV) python -m unittest
12+
13+
coverage-run:
14+
$(TEST_ENV) coverage run --source=src -m unittest discover
15+
16+
coverage-report:
17+
$(TEST_ENV) coverage report -m
18+
19+
coverage-html:
20+
$(TEST_ENV) coverage html
21+
22+
.PHONY: build package test

lambdas/recordforwarder/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# About
2+
3+
This document describes the environment setup for the recordforwarder Lambda.
4+
5+
## Setting up the recordforwarder lambda
6+
7+
Note: Paths are relative to this directory, `recordforwarder`.
8+
9+
1. Follow the instructions in the root level README.md to setup the [dependencies](../README.md#environment-setup) and create a [virtual environment](../README.md#) for this folder.
10+
11+
2. Replace the `.env` file in the recordforwarder folder. Note the variables might change in the future. These environment variables will be loaded automatically when using `direnv`.
12+
13+
```
14+
AWS_PROFILE={your-profile}
15+
IMMUNIZATION_ENV={environment}
16+
```
17+
18+
3. Run `poetry install --no-root` to install dependencies.
19+
20+
4. Run `make test` to run unit tests or individual tests by running:
21+
```
22+
python -m unittest tests.test_fhir_controller.TestSearchImmunizations
23+
python -m unittest tests.test_fhir_controller.TestSearchImmunizations.test_search_immunizations
24+
```

lambdas/recordforwarder/poetry.lock

Lines changed: 1751 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
[tool.poetry]
2+
name = "recordforwarder"
3+
version = "0.1.0"
4+
description = ""
5+
authors = ["Your Name <[email protected]>"]
6+
readme = "README.md"
7+
packages = [
8+
{include = "src"},
9+
{include = "common", from = "../shared/src"}
10+
]
11+
12+
[tool.poetry.dependencies]
13+
python = "~3.11"
14+
"fhir.resources" = "~7.0.2"
15+
boto3 = "~1.40.64"
16+
boto3-stubs-lite = {extras = ["dynamodb"], version = "~1.40.64"}
17+
aws-lambda-typing = "~2.20.0"
18+
redis = "^4.6.0"
19+
moto = "^5.1.16"
20+
requests = "~2.32.5"
21+
responses = "~0.25.7"
22+
pydantic = "~1.10.13"
23+
pyjwt = "~2.10.1"
24+
cryptography = "~46.0.0"
25+
cffi = "~1.17.1"
26+
jsonpath-ng = "^1.6.0"
27+
simplejson = "^3.20.2"
28+
structlog = "^24.1.0"
29+
python-stdnum = "^2.1"
30+
freezegun = "^1.5.1"
31+
coverage = "^7.10.7"
32+
33+
[build-system]
34+
requires = ["poetry-core ~= 1.5.0"]
35+
build-backend = "poetry.core.masonry.api"

0 commit comments

Comments
 (0)