Skip to content
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
49 changes: 0 additions & 49 deletions .github/workflows/build_and_push.yml

This file was deleted.

38 changes: 8 additions & 30 deletions .github/workflows/codestyle.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,10 @@
# This workflow will install Python dependencies, run tests, run linting, and test building docs
name: Codestyle and Linting

on:
pull_request:
branches:
- main
workflow_dispatch: # For on demand runs
schedule:
- cron: 0 0 * * * # Scheduled run every day at midnight
name: Codestyle and linting with Ruff
on: [ push, pull_request ]
jobs:
build:

runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest]
python-version: [3.10]
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
- name: Lint Code with Black
run: |
black --check --diff lambda_function
- name: Lint Code with Flake
run: |
flake8 --count --max-line-length 100 lambda_function

- uses: actions/checkout@v4
- uses: astral-sh/ruff-action@v3
- run: ruff check --fix
- run: ruff format
25 changes: 16 additions & 9 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,39 @@
name: Testing

on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch: # For on demand runs
schedule:
- cron: 0 0 * * * # Scheduled run every day at midnight

jobs:
build:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- uses: actions/checkout@v4
# Set up Python 3.10 to match the version of Python used in AWS Lambda
- name: Set up Python 10
uses: actions/setup-python@v3
- name: Set up Python 3.10
uses: actions/setup-python@v5
Comment thread
Alrobbertz marked this conversation as resolved.
with:
python-version: 3.10.12
python-version: '3.10'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install -r requirements.dev.txt

- name: Run tests
run: |
pytest -s lambda_function/tests --cov=lambda_function/src --cov-report=html --log-cli-level=INFO
pytest --pyargs lambda_function/tests --cov=lambda_function/src --cov-report=html

# Upload coverage reports to Codecov
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
env:
SWXSOC_MISSION: hermes
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
36 changes: 0 additions & 36 deletions README.md

This file was deleted.

101 changes: 101 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
========
Overview
========

.. start-badges

.. list-table::
:stub-columns: 1

* - build status
- |testing| |codestyle| |coverage|

.. |testing| image:: https://github.com/swxsoc/sdc_aws_artifacts_lambda/actions/workflows/testing.yml/badge.svg
:target: https://github.com/swxsoc/sdc_aws_artifacts_lambda/actions/workflows/testing.yml
:alt: testing status

.. |codestyle| image:: https://github.com/swxsoc/sdc_aws_artifacts_lambda/actions/workflows/codestyle.yml/badge.svg
:target: https://github.com/swxsoc/sdc_aws_artifacts_lambda/actions/workflows/codestyle.yml
:alt: codestyle and linting

.. |coverage| image:: https://codecov.io/gh/swxsoc/sdc_aws_artifacts_lambda/graph/badge.svg
:target: https://codecov.io/gh/swxsoc/sdc_aws_artifacts_lambda
:alt: code coverage

.. end-badges

This repository defines the image to be used for the SWSOC file artifacts Lambda function container.
This container will be built and and stored in an ECR Repo.
The container will contain the latest release code as the production environment and the latest code on master as the development.

Running Unit Tests
------------------

.. code-block:: sh

pytest --pyargs lambda_function/tests --cov=lambda_function/src --cov-report=html

Testing Locally (Using own Test Data)
-------------------------------------

The container image can be built and run locally. You can specify the base image at runtime.
At the time of writing, the base image defaults to
``padre-swsoc-docker-lambda-base:latest`` in AWS.

.. code-block:: sh

# Chose a Base Image for you desired mission
export BASE_IMAGE=public.ecr.aws/w5r9l1c8/padre-swsoc-docker-lambda-base:latest
export IMAGE_NAME=swxsoc_sdc_aws_artifacts_lambda
export VERSION=$(date -u +"%Y%m%d%H%M%S")

# Build the image
docker build --no-cache --build-arg BASE_IMAGE=$BASE_IMAGE -t $IMAGE_NAME:latest lambda_function/.

# Tag the image with a version
docker tag $IMAGE_NAME:latest $IMAGE_NAME:$VERSION

Run the lambda container image you've built (After using your mfa script), this will start the lambda runtime environment:

.. code-block:: sh

docker run -p 9000:8080 \
-v ~/lambda_function/tests/test_data:/test_data \
-e SDC_AWS_FILE_PATH=/test_data/hermes_EEA_l0_2023042-000000_v0.bin \
artifacts_function:latest

From a **separate** terminal, make a curl request to the running lambda function:

.. code-block:: sh

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" \
-d @lambda_function/tests/test_data/test_eea_event.json

Testing Locally (Using own Instrument Package Test Data)
--------------------------------------------------------

Run the lambda container image you've built (After using your mfa script), this will start the lambda runtime environment:

.. code-block:: sh

docker run -p 9000:8080 \
-v ~/lambda_function/tests/test_data:/test_data \
-e USE_INSTRUMENT_TEST_DATA=True \
artifacts_function:latest

From a **separate** terminal, make a curl request to the running lambda function:

.. code-block:: sh

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" \
-d @lambda_function/tests/test_data/test_eea_event.json


Acknowledgements
----------------

The package template used by this package is based on the one developed by the
`NASA Space Weather Science Operations Center (SWxSOC) <https://swxsoc.github.io>`_ which is based on those provided by
`OpenAstronomy community <https://openastronomy.org>`_ and the `SunPy Project <https://sunpy.org/>`_.

This project makes use of the `NASA Space Weather Science Operations Center (SWxSOC) <https://swxsoc.github.io>`_.
19 changes: 0 additions & 19 deletions lambda_function/src/config.yaml

This file was deleted.

29 changes: 18 additions & 11 deletions lambda_function/src/lambda.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
"""
This module contains the handler function and the main function
which contains the logicthat initializes the FileProcessor class
in it's correct environment.
which contains the logic that initializes the FileProcessor class
in its correct environment.
"""

from typing import Any

from process_artifacts import process_artifacts


def handler(event, context) -> dict:
def handler(event: dict[str, Any], context: Any) -> dict[str, int | str]:
"""
This is the lambda handler function that acts as a proxy
to the main function handle_event
Lambda handler that proxies to :func:`process_artifacts.handle_event`.

Parameters
----------
event : dict[str, Any]
Event data passed from the Lambda trigger.
context : Any
AWS Lambda context object.

:param event: Event data passed from the lambda trigger
:type event: dict
:param context: Lambda context
:type context: dict
:return: Returns a 200 (Successful) / 500 (Error) HTTP response
:rtype: dict
Returns
-------
dict[str, int | str]
HTTP-style response with a ``statusCode`` (200 on success, 500 on
error) and a serialized ``body`` string.
"""

return process_artifacts.handle_event(event, context)
Loading
Loading