Skip to content

Commit 40feb68

Browse files
authored
feat: add high level imports (#70)
* chore: disable fail fast on pre-commit Signed-off-by: heitorlessa <[email protected]> * feat: add core utilities as high level imports * chore: update to high level imports * fix: flake8 exclude and specific files * chore: remove fail_fast param completely Signed-off-by: heitorlessa <[email protected]> * fix: separate logging import into separate file
1 parent b723095 commit 40feb68

25 files changed

+85
-71
lines changed

Diff for: .flake8

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[flake8]
2-
exclude = docs, .eggs, setup.py, example, .aws-sam
2+
exclude = docs, .eggs, setup.py, example, .aws-sam, .git, dist, *.md, *.yaml, example/samconfig.toml, *.txt, *.ini
33
ignore = E203, E266, W503, BLK100, W291, I004
44
max-line-length = 120
55
max-complexity = 15

Diff for: .pre-commit-config.yaml

-1
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,3 @@ repos:
3535
language: system
3636
types: [python]
3737
exclude: example
38-
fail_fast: true

Diff for: Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ format:
1515
poetry run black aws_lambda_powertools tests
1616

1717
lint: format
18-
poetry run flake8
18+
poetry run flake8 aws_lambda_powertools/* tests/* example/*
1919

2020
test:
2121
poetry run pytest -vvv --cov=./ --cov-report=xml

Diff for: aws_lambda_powertools/__init__.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
# -*- coding: utf-8 -*-
22

33
"""Top-level package for Lambda Python Powertools."""
4-
import logging
4+
5+
6+
from .logging import Logger # noqa: F401
7+
from .metrics import Metrics, single_metric # noqa: F401
8+
from .package_logger import set_package_logger_handler
9+
from .tracing import Tracer # noqa: F401
510

611
__author__ = """Amazon Web Services"""
712

8-
logger = logging.getLogger("aws_lambda_powertools")
9-
logger.addHandler(logging.NullHandler())
10-
logger.propagate = False
13+
set_package_logger_handler()

Diff for: aws_lambda_powertools/logging/logger.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def logger_setup(
125125
-------
126126
**Logger class - Same UX**
127127
128-
from aws_lambda_powertools.logging import Logger
128+
from aws_lambda_powertools import Logger
129129
logger = Logger(service="payment") # same env var still applies
130130
131131
"""
@@ -143,7 +143,7 @@ def logger_inject_lambda_context(
143143
-------
144144
**Logger class - Same UX**
145145
146-
from aws_lambda_powertools.logging import Logger
146+
from aws_lambda_powertools import Logger
147147
logger = Logger(service="payment") # same env var still applies
148148
@logger.inject_lambda_context
149149
def handler(evt, ctx):
@@ -307,7 +307,7 @@ class Logger(logging.Logger):
307307
-------
308308
**Setups structured logging in JSON for Lambda functions with explicit service name**
309309
310-
>>> from aws_lambda_powertools.logging import Logger
310+
>>> from aws_lambda_powertools import Logger
311311
>>> logger = Logger(service="payment")
312312
>>>
313313
>>> def handler(event, context):
@@ -317,15 +317,15 @@ class Logger(logging.Logger):
317317
318318
$ export POWERTOOLS_SERVICE_NAME="payment"
319319
$ export POWERTOOLS_LOGGER_SAMPLE_RATE=0.01 # 1% debug sampling
320-
>>> from aws_lambda_powertools.logging import Logger
320+
>>> from aws_lambda_powertools import Logger
321321
>>> logger = Logger()
322322
>>>
323323
>>> def handler(event, context):
324324
logger.info("Hello")
325325
326326
**Append payment_id to previously setup structured log logger**
327327
328-
>>> from aws_lambda_powertools.logging import Logger
328+
>>> from aws_lambda_powertools import Logger
329329
>>> logger = Logger(service="payment")
330330
>>>
331331
>>> def handler(event, context):
@@ -398,7 +398,7 @@ def inject_lambda_context(self, lambda_handler: Callable[[Dict, Any], Any] = Non
398398
-------
399399
**Captures Lambda contextual runtime info (e.g memory, arn, req_id)**
400400
401-
from aws_lambda_powertools.logging import Logger
401+
from aws_lambda_powertools import Logger
402402
403403
logger = Logger(service="payment")
404404
@@ -408,7 +408,7 @@ def handler(event, context):
408408
409409
**Captures Lambda contextual runtime info and logs incoming request**
410410
411-
from aws_lambda_powertools.logging import Logger
411+
from aws_lambda_powertools import Logger
412412
413413
logger = Logger(service="payment")
414414

Diff for: aws_lambda_powertools/metrics/__init__.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"""CloudWatch Embedded Metric Format utility
22
"""
3-
from aws_lambda_powertools.helper.models import MetricUnit
4-
3+
from ..helper.models import MetricUnit
54
from .exceptions import MetricUnitError, MetricValueError, SchemaValidationError, UniqueNamespaceError
65
from .metric import single_metric
76
from .metrics import Metrics

Diff for: aws_lambda_powertools/metrics/base.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99

1010
import fastjsonschema
1111

12-
from aws_lambda_powertools.helper.models import MetricUnit
13-
12+
from ..helper.models import MetricUnit
1413
from .exceptions import MetricUnitError, MetricValueError, SchemaValidationError, UniqueNamespaceError
1514

1615
logger = logging.getLogger(__name__)

Diff for: aws_lambda_powertools/metrics/metric.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
from contextlib import contextmanager
44
from typing import Dict
55

6-
from aws_lambda_powertools.helper.models import MetricUnit
7-
from aws_lambda_powertools.metrics.base import MetricManager
6+
from ..helper.models import MetricUnit
7+
from .base import MetricManager
88

99
logger = logging.getLogger(__name__)
1010

@@ -69,7 +69,8 @@ def single_metric(name: str, unit: MetricUnit, value: float, namespace: str = No
6969
-------
7070
**Creates cold start metric with function_version as dimension**
7171
72-
from aws_lambda_powertools.metrics import single_metric, MetricUnit
72+
from aws_lambda_powertools import single_metric
73+
from aws_lambda_powertools.metrics import MetricUnit
7374
7475
with single_metric(name="ColdStart", unit=MetricUnit.Count, value=1, namespace="ServerlessAirline") as metric:
7576
metric.add_dimension(name="function_version", value=47)
@@ -78,7 +79,8 @@ def single_metric(name: str, unit: MetricUnit, value: float, namespace: str = No
7879
7980
$ export POWERTOOLS_METRICS_NAMESPACE="ServerlessAirline"
8081
81-
from aws_lambda_powertools.metrics import single_metric, MetricUnit
82+
from aws_lambda_powertools import single_metric
83+
from aws_lambda_powertools.metrics import MetricUnit
8284
8385
with single_metric(name="ColdStart", unit=MetricUnit.Count, value=1) as metric:
8486
metric.add_dimension(name="function_version", value=47)

Diff for: aws_lambda_powertools/metrics/metrics.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55
from typing import Any, Callable
66

7-
from aws_lambda_powertools.metrics.base import MetricManager
7+
from .base import MetricManager
88

99
logger = logging.getLogger(__name__)
1010

@@ -30,7 +30,7 @@ class Metrics(MetricManager):
3030
-------
3131
**Creates a few metrics and publish at the end of a function execution**
3232
33-
from aws_lambda_powertools.metrics import Metrics
33+
from aws_lambda_powertools import Metrics
3434
3535
metrics = Metrics(namespace="ServerlessAirline", service="payment")
3636
metrics.add_metric(name="ColdStart", unit=MetricUnit.Count, value=1)

Diff for: aws_lambda_powertools/middleware_factory/factory.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def lambda_handler(event, context):
7676
7777
**Trace execution of custom middleware**
7878
79-
from aws_lambda_powertools.tracing import Tracer
79+
from aws_lambda_powertools import Tracer
8080
from aws_lambda_powertools.middleware_factory import lambda_handler_decorator
8181
8282
tracer = Tracer(service="payment") # or via env var

Diff for: aws_lambda_powertools/package_logger.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import logging
2+
3+
4+
def set_package_logger_handler():
5+
logger = logging.getLogger("aws_lambda_powertools")
6+
logger.addHandler(logging.NullHandler())
7+
logger.propagate = False

Diff for: aws_lambda_powertools/tracing/tracer.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class Tracer:
5050
-------
5151
**A Lambda function using Tracer**
5252
53-
from aws_lambda_powertools.tracing import Tracer
53+
from aws_lambda_powertools import Tracer
5454
tracer = Tracer(service="greeting")
5555
5656
@tracer.capture_method
@@ -67,7 +67,7 @@ def handler(event: dict, context: Any) -> Dict:
6767
6868
**Booking Lambda function using Tracer that adds additional annotation/metadata**
6969
70-
from aws_lambda_powertools.tracing import Tracer
70+
from aws_lambda_powertools import Tracer
7171
tracer = Tracer(service="booking")
7272
7373
@tracer.capture_method
@@ -89,7 +89,7 @@ def handler(event: dict, context: Any) -> Dict:
8989
**A Lambda function using service name via POWERTOOLS_SERVICE_NAME**
9090
9191
export POWERTOOLS_SERVICE_NAME="booking"
92-
from aws_lambda_powertools.tracing import Tracer
92+
from aws_lambda_powertools import Tracer
9393
tracer = Tracer()
9494
9595
@tracer.capture_lambda_handler
@@ -101,15 +101,15 @@ def handler(event: dict, context: Any) -> Dict:
101101
**Reuse an existing instance of Tracer anywhere in the code**
102102
103103
# lambda_handler.py
104-
from aws_lambda_powertools.tracing import Tracer
104+
from aws_lambda_powertools import Tracer
105105
tracer = Tracer()
106106
107107
@tracer.capture_lambda_handler
108108
def handler(event: dict, context: Any) -> Dict:
109109
...
110110
111111
# utils.py
112-
from aws_lambda_powertools.tracing import Tracer
112+
from aws_lambda_powertools import Tracer
113113
tracer = Tracer()
114114
...
115115
@@ -301,7 +301,7 @@ def some_function()
301301
302302
**Custom async method using capture_method decorator**
303303
304-
from aws_lambda_powertools.tracing import Tracer
304+
from aws_lambda_powertools import Tracer
305305
tracer = Tracer(service="booking")
306306
307307
@tracer.capture_method
@@ -319,7 +319,7 @@ def lambda_handler(event: dict, context: Any) -> Dict:
319319
320320
**Tracing nested async calls**
321321
322-
from aws_lambda_powertools.tracing import Tracer
322+
from aws_lambda_powertools import Tracer
323323
tracer = Tracer(service="booking")
324324
325325
@tracer.capture_method
@@ -341,7 +341,7 @@ async def async_tasks():
341341
342342
This may not needed once [this bug is closed](https://github.com/aws/aws-xray-sdk-python/issues/164)
343343
344-
from aws_lambda_powertools.tracing import Tracer
344+
from aws_lambda_powertools import Tracer
345345
tracer = Tracer(service="booking")
346346
347347
async def get_identity():
@@ -362,7 +362,7 @@ async def async_tasks():
362362
363363
This may not needed once [this bug is closed](https://github.com/aws/aws-xray-sdk-python/issues/164)
364364
365-
from aws_lambda_powertools.tracing import Tracer
365+
from aws_lambda_powertools import Tracer
366366
tracer = Tracer(service="booking")
367367
368368
async def get_identity():

Diff for: docs/content/core/logger.mdx

+5-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ By default, Logger uses **INFO** log level. You can either change log level via
3737
You can also explicitly set a service name via `service` param or via `POWERTOOLS_SERVICE_NAME` env var. This sets **service** key that will be present across all log statements.
3838

3939
```python:title=app.py
40-
from aws_lambda_powertools.logging import Logger
40+
from aws_lambda_powertools import Logger
4141
# POWERTOOLS_SERVICE_NAME defined
4242
logger = Logger() # highlight-line
4343

@@ -63,7 +63,7 @@ Key | Type | Example | Description
6363
You can enrich your structured logs with key Lambda context information via `inject_lambda_context`.
6464

6565
```python:title=collect.py
66-
from aws_lambda_powertools.logging import Logger
66+
from aws_lambda_powertools import Logger
6767

6868
logger = Logger()
6969

@@ -86,7 +86,7 @@ You can also explicitly log any incoming event using `log_event` param or via `P
8686
</Note><br/>
8787

8888
```python:title=log_handler_event.py
89-
from aws_lambda_powertools.logging import Logger
89+
from aws_lambda_powertools import Logger
9090

9191
logger = Logger()
9292

@@ -151,7 +151,7 @@ Key | Type | Example
151151
You can append your own keys to your existing Logger via `structure_logs` with **append** param.
152152

153153
```python:title=collect.py
154-
from aws_lambda_powertools.logging import Logger
154+
from aws_lambda_powertools import Logger
155155

156156
logger = Logger()
157157

@@ -194,7 +194,7 @@ This happens on an entire request basis, and <strong>DEBUG</strong> level is set
194194
</Note><br/>
195195

196196
```python:title=collect.py
197-
from aws_lambda_powertools.logging import Logger
197+
from aws_lambda_powertools import Logger
198198

199199
# Sample 1% of debug logs e.g. 0.1
200200
logger = Logger(sample_rate=0.1) # highlight-line

Diff for: docs/content/core/metrics.mdx

+14-7
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ You can explicitly set a namespace name via `namespace` param or via `POWERTOOLS
3636
You can also pass a service name via `service` param or `POWERTOOLS_SERVICE_NAME` env var. This will create a dimension with the service name.
3737

3838
```python:title=app.py
39-
from aws_lambda_powertools.metrics import Metrics, MetricUnit
39+
from aws_lambda_powertools import Metrics
40+
from aws_lambda_powertools.metrics import MetricUnit
4041

4142
# POWERTOOLS_METRICS_NAMESPACE and POWERTOOLS_SERVICE_NAME defined
4243
metrics = Metrics() # highlight-line
@@ -54,7 +55,8 @@ You can initialize Metrics anywhere in your code as many times as you need - It'
5455
You can create metrics using `add_metric`, and manually create dimensions for all your aggregate metrics using `add_dimension`.
5556

5657
```python:title=app.py
57-
from aws_lambda_powertools.metrics import Metrics, MetricUnit
58+
from aws_lambda_powertools import Metrics
59+
from aws_lambda_powertools.metrics import MetricUnit
5860

5961
metrics = Metrics(namespace="ExampleApplication", service="booking")
6062
# highlight-start
@@ -79,7 +81,8 @@ CloudWatch EMF uses the same dimensions across all your metrics. Use `single_met
7981

8082

8183
```python:title=single_metric.py
82-
from aws_lambda_powertools.metrics import MetricUnit, single_metric
84+
from aws_lambda_powertools import single_metric
85+
from aws_lambda_powertools.metrics import MetricUnit
8386

8487
with single_metric(name="ColdStart", unit=MetricUnit.Count, value=1, namespace="ExampleApplication") as metric: # highlight-line
8588
metric.add_dimension(name="function_context", value="$LATEST")
@@ -91,7 +94,8 @@ with single_metric(name="ColdStart", unit=MetricUnit.Count, value=1, namespace="
9194
As you finish adding all your metrics, you need to serialize and flush them to standard output. You can do that right before you return your response to the caller via `log_metrics`.
9295

9396
```python:title=lambda_handler.py
94-
from aws_lambda_powertools.metrics import Metrics, MetricUnit
97+
from aws_lambda_powertools import Metrics
98+
from aws_lambda_powertools.metrics import MetricUnit
9599

96100
metrics = Metrics(service="ExampleService")
97101
metrics.add_metric(name="ColdStart", unit="Count", value=1)
@@ -115,7 +119,8 @@ def lambda_handler(evt, ctx):
115119
</Note><br/>
116120

117121
```python:title=lambda_handler_nested_middlewares.py
118-
from aws_lambda_powertools.metrics import Metrics, MetricUnit
122+
from aws_lambda_powertools import Metrics
123+
from aws_lambda_powertools.metrics import MetricUnit
119124

120125
metrics = Metrics(namespace="ExampleApplication", service="booking")
121126
metrics.add_metric(name="ColdStart", unit="Count", value=1)
@@ -135,7 +140,8 @@ If you prefer not to use `log_metrics` because you might want to encapsulate add
135140

136141
```python:title=manual_metric_serialization.py
137142
import json
138-
from aws_lambda_powertools.metrics import Metrics, MetricUnit
143+
from aws_lambda_powertools import Metrics
144+
from aws_lambda_powertools.metrics import MetricUnit
139145

140146
metrics = Metrics(namespace="ExampleApplication", service="booking")
141147
metrics.add_metric(name="ColdStart", unit="Count", value=1)
@@ -152,7 +158,8 @@ print(json.dumps(your_metrics_object))
152158
You can capture cold start metrics automatically with `log_metrics` via `capture_cold_start_metric` param.
153159

154160
```python:title=lambda_handler.py
155-
from aws_lambda_powertools.metrics import Metrics, MetricUnit
161+
from aws_lambda_powertools import Metrics
162+
from aws_lambda_powertools.metrics import MetricUnit
156163

157164
metrics = Metrics(service="ExampleService")
158165

0 commit comments

Comments
 (0)