Skip to content

Commit 8bffb3a

Browse files
committed
black formatting
1 parent eedefbb commit 8bffb3a

11 files changed

+480
-435
lines changed

lambda_function.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import os
66
import time
77

8-
SLEEP = os.getenv('SLEEP') or '0'
8+
SLEEP = os.getenv("SLEEP") or "0"
99

1010

1111
def lambda_handler(event, context=None):
@@ -14,13 +14,13 @@ def lambda_handler(event, context=None):
1414
# Do some work...
1515
time.sleep(float(SLEEP))
1616
# Get name from qs
17-
params = event.get('queryStringParameters') or {}
18-
name = params.get('name') or 'Pythonista'
17+
params = event.get("queryStringParameters") or {}
18+
name = params.get("name") or "Pythonista"
1919
# Return response
2020
return {
21-
'body': json.dumps({'text': f'Hello, {name}! ~ Lambda Gateway'}),
22-
'statusCode': 200,
23-
'headers': {
24-
'Content-Type': 'application/json',
21+
"body": json.dumps({"text": f"Hello, {name}! ~ Lambda Gateway"}),
22+
"statusCode": 200,
23+
"headers": {
24+
"Content-Type": "application/json",
2525
},
2626
}

lambda_gateway/__init__.py

+5-17
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,24 @@
11
import logging
2-
from pkg_resources import (get_distribution, DistributionNotFound)
2+
3+
__version__ = "1.0.0"
34

45

56
def set_stream_logger(name, level=logging.DEBUG, format_string=None):
67
"""
78
Adapted from boto3.set_stream_logger()
89
"""
910
if format_string is None:
10-
format_string = \
11-
'%(addr)s - - [%(asctime)s] %(levelname)s - %(message)s'
11+
format_string = "%(addr)s - - [%(asctime)s] %(levelname)s - %(message)s"
1212

1313
logger = logging.getLogger(name)
1414
handler = logging.StreamHandler()
15-
formatter = logging.Formatter(format_string, '%-d/%b/%Y %H:%M:%S')
16-
adapter = logging.LoggerAdapter(logger, dict(addr='::1'))
15+
formatter = logging.Formatter(format_string, "%-d/%b/%Y %H:%M:%S")
16+
adapter = logging.LoggerAdapter(logger, dict(addr="::1"))
1717
logger.setLevel(level)
1818
handler.setLevel(level)
1919
handler.setFormatter(formatter)
2020
logger.addHandler(handler)
2121
return adapter
2222

2323

24-
def _version():
25-
"""
26-
Helper to get package version.
27-
"""
28-
try:
29-
return get_distribution(__name__).version
30-
except DistributionNotFound: # pragma: no cover
31-
return None
32-
33-
34-
__version__ = _version()
35-
3624
logger = set_stream_logger(__name__)

lambda_gateway/__main__.py

+40-34
Original file line numberDiff line numberDiff line change
@@ -39,71 +39,77 @@ def get_opts():
3939
Get CLI options.
4040
"""
4141
parser = argparse.ArgumentParser(
42-
prog='lambda-gateway',
43-
description='Start a simple Lambda Gateway server',
42+
prog="lambda-gateway",
43+
description="Start a simple Lambda Gateway server",
4444
)
4545
parser.add_argument(
46-
'-B', '--base-path',
47-
dest='base_path',
48-
help='Set base path for REST API',
49-
metavar='PATH',
46+
"-B",
47+
"--base-path",
48+
dest="base_path",
49+
help="Set base path for REST API",
50+
metavar="PATH",
5051
)
5152
parser.add_argument(
52-
'-b', '--bind',
53-
dest='bind',
54-
metavar='ADDR',
55-
help='Specify alternate bind address [default: all interfaces]',
53+
"-b",
54+
"--bind",
55+
dest="bind",
56+
metavar="ADDR",
57+
help="Specify alternate bind address [default: all interfaces]",
5658
)
5759
parser.add_argument(
58-
'-p', '--port',
59-
dest='port',
60+
"-p",
61+
"--port",
62+
dest="port",
6063
default=8000,
61-
help='Specify alternate port [default: 8000]',
64+
help="Specify alternate port [default: 8000]",
6265
type=int,
6366
)
6467
parser.add_argument(
65-
'-t', '--timeout',
66-
dest='timeout',
67-
help='Lambda timeout.',
68-
metavar='SECONDS',
68+
"-t",
69+
"--timeout",
70+
dest="timeout",
71+
help="Lambda timeout.",
72+
metavar="SECONDS",
6973
type=int,
7074
)
7175
parser.add_argument(
72-
'-v', '--version',
73-
action='version',
74-
help='Print version and exit',
75-
version=f'%(prog)s {__version__}',
76+
"-v",
77+
"--version",
78+
action="version",
79+
help="Print version and exit",
80+
version=f"%(prog)s {__version__}",
7681
)
7782
parser.add_argument(
78-
'-V', '--payload-version',
79-
choices=['1.0', '2.0'],
80-
default='2.0',
81-
help='API Gateway payload version [default: 2.0]',
83+
"-V",
84+
"--payload-version",
85+
choices=["1.0", "2.0"],
86+
default="2.0",
87+
help="API Gateway payload version [default: 2.0]",
8288
)
8389
parser.add_argument(
84-
'HANDLER',
85-
help='Lambda handler signature',
90+
"HANDLER",
91+
help="Lambda handler signature",
8692
)
8793
return parser.parse_args()
8894

8995

90-
def run(httpd, base_path='/'):
96+
def run(httpd, base_path="/"):
9197
"""
9298
Run Lambda Gateway server.
9399
94100
:param object httpd: ThreadingHTTPServer instance
95101
:param str base_path: REST API base path
96102
"""
97103
host, port = httpd.socket.getsockname()[:2]
98-
url_host = f'[{host}]' if ':' in host else host
104+
url_host = f"[{host}]" if ":" in host else host
99105
sys.stderr.write(
100-
f'Serving HTTP on {host} port {port} '
101-
f'(http://{url_host}:{port}{base_path}) ...\n'
106+
f"Serving HTTP on {host} port {port} "
107+
f"(http://{url_host}:{port}{base_path}) ...\n"
102108
)
103109
try:
104110
httpd.serve_forever()
105111
except KeyboardInterrupt:
106-
sys.stderr.write('\nKeyboard interrupt received, exiting.\n')
112+
sys.stderr.write("\nKeyboard interrupt received, exiting.\n")
107113
finally:
108114
httpd.shutdown()
109115

@@ -116,7 +122,7 @@ def main():
116122
opts = get_opts()
117123

118124
# Ensure base_path is wrapped in slashes
119-
base_path = os.path.join('/', str(opts.base_path or ''), '')
125+
base_path = os.path.join("/", str(opts.base_path or ""), "")
120126

121127
# Setup handler
122128
address_family, addr = get_best_family(opts.bind, opts.port)
@@ -129,5 +135,5 @@ def main():
129135
run(httpd, base_path)
130136

131137

132-
if __name__ == '__main__': # pragma: no cover
138+
if __name__ == "__main__": # pragma: no cover
133139
main()

lambda_gateway/event_proxy.py

+25-23
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55
import sys
66

7-
from lambda_gateway import (lambda_context, logger)
7+
from lambda_gateway import lambda_context, logger
88

99

1010
class EventProxy:
@@ -19,8 +19,8 @@ def get_handler(self):
1919
2020
:returns function: Lambda handler function
2121
"""
22-
*path, func = self.handler.split('.')
23-
name = '.'.join(path)
22+
*path, func = self.handler.split(".")
23+
name = ".".join(path)
2424
if not name:
2525
raise ValueError(f"Bad handler signature '{self.handler}'")
2626
try:
@@ -37,23 +37,25 @@ def get_httpMethod(self, event):
3737
"""
3838
Helper to get httpMethod from v1 or v2 events.
3939
"""
40-
if event.get('version') == '2.0':
41-
return event['requestContext']['http']['method']
42-
elif event.get('version') == '1.0':
43-
return event['httpMethod']
40+
if event.get("version") == "2.0":
41+
return event["requestContext"]["http"]["method"]
42+
elif event.get("version") == "1.0":
43+
return event["httpMethod"]
4444
raise ValueError( # pragma: no cover
45-
f"Unknown API Gateway payload version: {event.get('version')}")
45+
f"Unknown API Gateway payload version: {event.get('version')}"
46+
)
4647

4748
def get_path(self, event):
4849
"""
4950
Helper to get path from v1 or v2 events.
5051
"""
51-
if event.get('version') == '2.0':
52-
return event['rawPath']
53-
elif event.get('version') == '1.0':
54-
return event['path']
52+
if event.get("version") == "2.0":
53+
return event["rawPath"]
54+
elif event.get("version") == "1.0":
55+
return event["path"]
5556
raise ValueError( # pragma: no cover
56-
f"Unknown API Gateway payload version: {event.get('version')}")
57+
f"Unknown API Gateway payload version: {event.get('version')}"
58+
)
5759

5860
def invoke(self, event):
5961
with lambda_context.start(self.timeout) as context:
@@ -73,9 +75,9 @@ async def invoke_async(self, event, context=None):
7375

7476
# Reject request if not starting at base path
7577
if not path.startswith(self.base_path):
76-
err = f'Rejected {path} :: Base path is {self.base_path}'
78+
err = f"Rejected {path} :: Base path is {self.base_path}"
7779
logger.error(err)
78-
return self.jsonify(httpMethod, 403, message='Forbidden')
80+
return self.jsonify(httpMethod, 403, message="Forbidden")
7981

8082
# Get & invoke Lambda handler
8183
try:
@@ -84,7 +86,7 @@ async def invoke_async(self, event, context=None):
8486
return await loop.run_in_executor(None, handler, event, context)
8587
except Exception as err:
8688
logger.error(err)
87-
message = 'Internal server error'
89+
message = "Internal server error"
8890
return self.jsonify(httpMethod, 502, message=message)
8991

9092
async def invoke_async_with_timeout(self, event, context=None):
@@ -100,7 +102,7 @@ async def invoke_async_with_timeout(self, event, context=None):
100102
return await asyncio.wait_for(coroutine, self.timeout)
101103
except asyncio.TimeoutError:
102104
httpMethod = self.get_httpMethod(event)
103-
message = 'Endpoint request timed out'
105+
message = "Endpoint request timed out"
104106
return self.jsonify(httpMethod, 504, message=message)
105107

106108
@staticmethod
@@ -112,12 +114,12 @@ def jsonify(httpMethod, statusCode, **kwargs):
112114
:params int statusCode: Response status code
113115
:params dict kwargs: Response object
114116
"""
115-
body = '' if httpMethod in ['HEAD'] else json.dumps(kwargs)
117+
body = "" if httpMethod in ["HEAD"] else json.dumps(kwargs)
116118
return {
117-
'body': body,
118-
'statusCode': statusCode,
119-
'headers': {
120-
'Content-Type': 'application/json',
121-
'Content-Length': len(body),
119+
"body": body,
120+
"statusCode": statusCode,
121+
"headers": {
122+
"Content-Type": "application/json",
123+
"Content-Length": len(body),
122124
},
123125
}

lambda_gateway/lambda_context.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,25 @@ class Context:
1717
1818
:param int timeout: Lambda timeout in seconds
1919
"""
20+
2021
def __init__(self, timeout=None):
2122
self._start = datetime.utcnow()
2223
self._timeout = timeout or 30
2324

2425
@property
2526
def function_name(self):
26-
return 'lambda-gateway'
27+
return "lambda-gateway"
2728

2829
@property
2930
def function_version(self):
30-
return '$LATEST'
31+
return "$LATEST"
3132

3233
@property
3334
def invoked_function_arn(self):
34-
account_id = '123456789012'
35-
region = 'us-east-1'
35+
account_id = "123456789012"
36+
region = "us-east-1"
3637
function_name = self.function_name
37-
return f'arn:aws:lambda:{region}:{account_id}:function:{function_name}'
38+
return f"arn:aws:lambda:{region}:{account_id}:function:{function_name}"
3839

3940
@property
4041
def memory_limit_in_mb(self):
@@ -46,7 +47,7 @@ def aws_request_id(self):
4647

4748
@property
4849
def log_group_name(self):
49-
return '/aws/lambda/lambda-gateway'
50+
return "/aws/lambda/lambda-gateway"
5051

5152
@property
5253
def log_stream_name(self):

0 commit comments

Comments
 (0)