Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit 1360640

Browse files
authored
Merge pull request #6 from hypoport/dev
adds support for lambda function configuration
2 parents e6cdd46 + 1b94f1b commit 1360640

File tree

3 files changed

+184
-0
lines changed

3 files changed

+184
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
from datetime import datetime
2+
from typing import Dict, Any, List
3+
4+
import arrow
5+
from dataclasses import dataclass, InitVar, field
6+
7+
from aws_dataclasses.util import get_logger
8+
from aws_dataclasses.base import GenericDataClass
9+
10+
LOG = get_logger(__name__)
11+
12+
13+
@dataclass
14+
class LambdaTracingConfig(GenericDataClass):
15+
Mode: InitVar[str] = field(repr=False, default=None)
16+
mode: str = field(init=False)
17+
18+
def __post_init__(self, Mode: str):
19+
self.mode = Mode
20+
21+
22+
@dataclass
23+
class LambdaVpcConfig(GenericDataClass):
24+
SubnetIds: InitVar[List[str]] = field(repr=False, default=None)
25+
SecurityGroupIds: InitVar[List[str]] = field(repr=False, default=None)
26+
VpcId: InitVar[str] = field(repr=False, default=None)
27+
subnet_ids: List[str] = field(init=False)
28+
security_group_ids: List[str] = field(init=False)
29+
vpc_id: str = field(init=False)
30+
31+
def __post_init__(self, SubnetIds: List[str], SecurityGroupIds: List[str], VpcId: str):
32+
self.subnet_ids = SubnetIds
33+
self.security_group_ids = SecurityGroupIds
34+
self.vpc_id = VpcId
35+
36+
37+
@dataclass
38+
class LambdaDlqConfig(GenericDataClass):
39+
TargetArn: InitVar[str] = field(repr=False, default=None)
40+
target_arn: str = field(init=False)
41+
42+
def __post_init__(self, TargetArn: str):
43+
self.target_arn = TargetArn
44+
45+
46+
@dataclass
47+
class LambdaEnvironment(GenericDataClass):
48+
Variables: InitVar[Dict] = field(repr=False, default=None)
49+
variables: Dict = field(init=False)
50+
51+
def __post_init__(self, Variables: Dict):
52+
self.variables = Variables
53+
54+
55+
@dataclass
56+
class LambdaFunctionConfiguration(GenericDataClass):
57+
FunctionName: InitVar[str] = field(repr=False, default=None)
58+
FunctionArn: InitVar[str] = field(repr=False, default=None)
59+
Runtime: InitVar[str] = field(repr=False, default=None)
60+
Role: InitVar[str] = field(repr=False, default=None)
61+
Handler: InitVar[str] = field(repr=False, default=None)
62+
CodeSize: InitVar[int] = field(repr=False, default=None)
63+
Description: InitVar[str] = field(repr=False, default=None)
64+
Timeout: InitVar[int] = field(repr=False, default=None)
65+
MemorySize: InitVar[int] = field(repr=False, default=None)
66+
LastModified: InitVar[str] = field(repr=False, default=None)
67+
CodeSha256: InitVar[str] = field(repr=False, default=None)
68+
Version: InitVar[str] = field(repr=False, default=None)
69+
VpcConfig: InitVar[Any] = field(repr=False, default=None)
70+
DeadLetterConfig: InitVar[Any] = field(repr=False, default=None)
71+
Environment: InitVar[Any] = field(repr=False, default=None)
72+
TracingConfig: InitVar[Any] = field(repr=False, default=None)
73+
RevisionId: InitVar[str] = field(repr=False, default=None)
74+
function_name: str = field(init=False)
75+
function_arn: str = field(init=False)
76+
runtime: str = field(init=False)
77+
role: str = field(init=False)
78+
handler: str = field(init=False)
79+
code_size: int = field(init=False)
80+
description: str = field(init=False)
81+
timeout: int = field(init=False)
82+
memory_size: int = field(init=False)
83+
last_modified: datetime = field(init=False)
84+
code_sha_256: str = field(init=False)
85+
version: str = field(init=False)
86+
vpc_config: VpcConfig = field(init=False)
87+
dead_letter_config: LambdaDlqConfig = field(init=False)
88+
environment: LambdaEnvironment = field(init=False)
89+
tracing_config: TracingConfig = field(init=False)
90+
revision_id: str = field(init=False)
91+
92+
def __post_init__(self, FunctionName: str, FunctionArn: str, Runtime: str, Role: str, Handler: str, CodeSize: int,
93+
Description: str, Timeout: int, MemorySize: int, LastModified: str, CodeSha256: str, Version: str,
94+
VpcConfig: Any, DeadLetterConfig: Any, Environment: Any, TracingConfig: Any, RevisionId: str):
95+
self.last_modified = arrow.get(LastModified).datetime
96+
self.function_arn = FunctionArn
97+
self.function_name = FunctionName
98+
self.runtime = Runtime
99+
self.role = Role
100+
self.handler = Handler
101+
self.code_size = CodeSize
102+
self.description = Description
103+
self.timeout = Timeout
104+
self.memory_size = MemorySize
105+
self.code_sha_256 = CodeSha256
106+
self.version = Version
107+
self.vpc_config = LambdaVpcConfig.from_json(VpcConfig) if VpcConfig is not None else None
108+
self.dead_letter_config = LambdaDlqConfig.from_json(DeadLetterConfig) if DeadLetterConfig is not None else None
109+
self.environment = LambdaEnvironment.from_json(Environment) if Environment is not None else None
110+
self.tracing_config = LambdaTracingConfig.from_json(TracingConfig) if TracingConfig is not None else None
111+
self.revision_id = RevisionId
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"FunctionName": "test",
3+
"FunctionArn": "arn:aws:lambda:eu-central-1:0123456789:function:test",
4+
"Runtime": "python3.6",
5+
"Role": "arn:aws:iam::0123456789:role/test-role",
6+
"Handler": "main.lambda_handler",
7+
"CodeSize": 30280933,
8+
"Description": "I am a description.",
9+
"Timeout": 300,
10+
"MemorySize": 3008,
11+
"LastModified": "2018-09-11T07:45:58.641+0000",
12+
"CodeSha256": "ucRYwmrtivyiEicBTcxbPvsmPWw0Sy6LAWuTPvjWX1g=",
13+
"Version": "$LATEST",
14+
"Environment": {
15+
"Variables": {
16+
"S3_BUCKET": "testbucket",
17+
"STAGE": "prod"
18+
}
19+
},
20+
"VpcConfig": {
21+
"SubnetIds": ["a", "b"],
22+
"SecurityGroupIds": [],
23+
"VpcId": "1234"
24+
},
25+
"TracingConfig": {
26+
"Mode": "PassThrough"
27+
},
28+
"RevisionId": "beee94f5-9d0a-4d5f-872c-e317c3fb12e9"
29+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import datetime
2+
3+
import pytest
4+
from dateutil.tz import tzutc
5+
6+
from aws_dataclasses.lambda_function_configuration import LambdaFunctionConfiguration
7+
8+
from .util import get_event_dict
9+
10+
11+
@pytest.fixture(scope="module")
12+
def lambda_functionconfig_raw():
13+
return get_event_dict("function_configuration.json")
14+
15+
16+
@pytest.fixture(scope="module")
17+
def lambda_functionconfig(lambda_functionconfig_raw):
18+
return LambdaFunctionConfiguration.from_json(lambda_functionconfig_raw)
19+
20+
21+
def test_toplevel_items(lambda_functionconfig):
22+
cfg = lambda_functionconfig
23+
assert cfg.function_name == "test"
24+
assert cfg.function_arn == "arn:aws:lambda:eu-central-1:0123456789:function:test"
25+
assert cfg.runtime == "python3.6"
26+
assert cfg.role == "arn:aws:iam::0123456789:role/test-role"
27+
assert cfg.handler == "main.lambda_handler"
28+
assert cfg.code_sha_256 == "ucRYwmrtivyiEicBTcxbPvsmPWw0Sy6LAWuTPvjWX1g="
29+
assert cfg.timeout == 300
30+
assert cfg.code_size == 30280933
31+
assert cfg.memory_size == 3008
32+
assert cfg.last_modified == datetime.datetime(2018, 9, 11, 7, 45, 58, 641000, tzinfo=tzutc())
33+
34+
35+
def test_environment(lambda_functionconfig):
36+
env = lambda_functionconfig.environment
37+
assert "STAGE" in env.variables
38+
assert env.variables["S3_BUCKET"] == "testbucket"
39+
40+
41+
def test_vpcconfig(lambda_functionconfig):
42+
vpc = lambda_functionconfig.vpc_config
43+
assert vpc.vpc_id == "1234"
44+
assert len(vpc.subnet_ids) is 2

0 commit comments

Comments
 (0)