Skip to content

Commit 3203905

Browse files
authored
Updated opentelemetry and fixed imports issue. (#98)
* Updated opentelemetry and fixed imports issue. * Fixed missing `type: ignore`. Signed-off-by: Pavel Kirilin <[email protected]>
1 parent 3f51f34 commit 3203905

File tree

4 files changed

+70
-28
lines changed

4 files changed

+70
-28
lines changed

fastapi_template/template/{{cookiecutter.project_name}}/pyproject.toml

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ httptools = "^0.3.0"
8282
strawberry-graphql = { version = "^0.114.2", extras = ["fastapi"] }
8383
{%- endif %}
8484
{%- if cookiecutter.enable_rmq == "True" %}
85-
aio-pika = "^8.0.3"
85+
aio-pika = "^7.2.0"
8686
{%- endif %}
8787
{%- if cookiecutter.prometheus_enabled == "True" %}
8888
prometheus-client = "^0.14.1"
@@ -92,28 +92,30 @@ prometheus-fastapi-instrumentator = "5.8.1"
9292
sentry-sdk = "^1.5.12"
9393
{%- endif %}
9494
{%- if cookiecutter.otlp_enabled == "True" %}
95-
protobuf = "~3.20.0"
96-
opentelemetry-api = {version = "^1.12.0rc1", allow-prereleases = true}
97-
opentelemetry-sdk = {version = "^1.12.0rc1", allow-prereleases = true}
98-
opentelemetry-exporter-otlp = {version = "^1.12.0rc1", allow-prereleases = true}
99-
opentelemetry-instrumentation = "^0.31b0"
100-
opentelemetry-instrumentation-logging = "^0.31b0"
101-
opentelemetry-instrumentation-fastapi = "^0.31b0"
95+
opentelemetry-api = {version = "^1.12.0rc2", allow-prereleases = true}
96+
opentelemetry-sdk = {version = "^1.12.0rc2", allow-prereleases = true}
97+
opentelemetry-exporter-otlp = {version = "^1.12.0rc2", allow-prereleases = true}
98+
opentelemetry-instrumentation = "^0.32b0"
99+
opentelemetry-instrumentation-logging = "^0.32b0"
100+
opentelemetry-instrumentation-fastapi = "^0.32b0"
102101
{%- if cookiecutter.enable_redis == "True" %}
103-
opentelemetry-instrumentation-redis = "^0.31b0"
102+
opentelemetry-instrumentation-redis = "^0.32b0"
104103
{%- endif %}
105104
{%- if cookiecutter.db_info.name == "postgresql" and cookiecutter.orm in ["ormar", "tortoise"] %}
106-
opentelemetry-instrumentation-asyncpg = "^0.31b0"
105+
opentelemetry-instrumentation-asyncpg = "^0.32b0"
107106
{%- endif %}
108107
{%- if cookiecutter.orm == "sqlalchemy" %}
109-
opentelemetry-instrumentation-sqlalchemy = "^0.31b0"
108+
opentelemetry-instrumentation-sqlalchemy = "^0.32b0"
109+
{%- endif %}
110+
{%- if cookiecutter.enable_rmq == "True" %}
111+
opentelemetry-instrumentation-aio-pika = "^0.32b0"
110112
{%- endif %}
111113
{%- endif %}
112114

113115
[tool.poetry.dev-dependencies]
114116
pytest = "^7.0"
115117
flake8 = "^4.0.1"
116-
mypy = "^0.910"
118+
mypy = "^0.961"
117119
isort = "^5.10.1"
118120
yesqa = "^1.3.0"
119121
pre-commit = "^2.19.0"
@@ -134,10 +136,6 @@ asynctest = "^0.13.0"
134136
nest-asyncio = "^1.5.5"
135137
{%- endif %}
136138
httpx = "^0.22.0"
137-
{%- if cookiecutter.enable_redis == "True" %}
138-
types-redis = "^4.2.6"
139-
{%- endif %}
140-
141139

142140
[tool.isort]
143141
profile = "black"
@@ -155,10 +153,23 @@ implicit_reexport = true
155153
allow_untyped_decorators = true
156154
warn_unused_ignores = false
157155
warn_return_any = false
156+
namespace_packages = true
158157
{%- if cookiecutter.orm == "sqlalchemy" %}
159158
plugins = ["sqlalchemy.ext.mypy.plugin"]
160159
{%- endif %}
161160

161+
{%- if cookiecutter.enable_redis == "True" %}
162+
163+
# Remove this and add `types-redis`
164+
# when the issue https://github.com/python/typeshed/issues/8242 is resolved.
165+
[[tool.mypy.overrides]]
166+
module = [
167+
'redis.asyncio'
168+
]
169+
ignore_missing_imports = true
170+
171+
{%- endif %}
172+
162173
[tool.pytest.ini_options]
163174
filterwarnings = [
164175
"error",

fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/settings.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ class Settings(BaseSettings):
2626
# Current environment
2727
environment: str = "dev"
2828

29+
{% if cookiecutter.db_info.name != "none" -%}
2930

30-
{%- if cookiecutter.db_info.name != "none" %}
31+
# Variables for the database
3132
{%- if cookiecutter.db_info.name == "sqlite" %}
3233
db_file: Path = TEMP_DIR / "db.sqlite3"
3334
{%- else %}
@@ -38,19 +39,25 @@ class Settings(BaseSettings):
3839
db_base: str = "{{cookiecutter.project_name}}"
3940
{%- endif %}
4041
db_echo: bool = False
42+
4143
{%- endif %}
4244

4345

4446
{%- if cookiecutter.enable_redis == "True" %}
47+
48+
# Variables for Redis
4549
redis_host: str = "{{cookiecutter.project_name}}-redis"
4650
redis_port: int = 6379
4751
redis_user: Optional[str] = None
4852
redis_pass: Optional[str] = None
4953
redis_base: Optional[int] = None
54+
5055
{%- endif %}
5156

5257

5358
{%- if cookiecutter.enable_rmq == "True" %}
59+
60+
# Variables for RabbitMQ
5461
rabbit_host: str = "{{cookiecutter.project_name}}-rmq"
5562
rabbit_port: int = 5672
5663
rabbit_user: str = "guest"
@@ -59,26 +66,40 @@ class Settings(BaseSettings):
5966

6067
rabbit_pool_size: int = 2
6168
rabbit_channel_pool_size: int = 10
69+
6270
{%- endif %}
6371

6472

6573
{%- if cookiecutter.prometheus_enabled == "True" %}
74+
75+
# This variable is used to define
76+
# multiproc_dir. It's required for [uvi|guni]corn projects.
6677
prometheus_dir: Path = TEMP_DIR / "prom"
78+
6779
{%- endif %}
6880

6981

7082
{%- if cookiecutter.sentry_enabled == "True" %}
83+
84+
# Sentry's configuration.
7185
sentry_dsn: Optional[str] = None
7286
sentry_sample_rate: float = 1.0
87+
7388
{%- endif %}
7489

7590

7691
{%- if cookiecutter.otlp_enabled == "True" %}
92+
93+
# Grpc endpoint for opentelemetry.
94+
# E.G. http://localhost:4317
7795
opentelemetry_endpoint: Optional[str] = None
96+
7897
{%- endif %}
7998

8099

81100
{%- if cookiecutter.db_info.name != "none" %}
101+
102+
82103
@property
83104
def db_url(self) -> URL:
84105
"""

fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/gql/dummy/query.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ async def get_dummy_models(
3636
{%- else %}
3737
dao = DummyDAO()
3838
{%- endif %}
39-
return await dao.get_all_dummies(limit=limit, offset=offset)
39+
return await dao.get_all_dummies(limit=limit, offset=offset) # type: ignore

fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/lifetime.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,33 @@
2727
{%- endif %}
2828

2929
{%- if cookiecutter.otlp_enabled == "True" %}
30-
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import ( # type: ignore
30+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
3131
OTLPSpanExporter,
3232
)
33-
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor # type: ignore
34-
from opentelemetry.sdk.resources import ( # type: ignore
33+
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
34+
from opentelemetry.sdk.resources import (
3535
SERVICE_NAME,
3636
TELEMETRY_SDK_LANGUAGE,
3737
DEPLOYMENT_ENVIRONMENT,
3838
Resource,
3939
)
40-
from opentelemetry.sdk.trace import TracerProvider # type: ignore
41-
from opentelemetry.sdk.trace.export import BatchSpanProcessor # type: ignore
42-
from opentelemetry.trace import set_tracer_provider # type: ignore
40+
from opentelemetry.sdk.trace import TracerProvider
41+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
42+
from opentelemetry.trace import set_tracer_provider
4343
{%- if cookiecutter.enable_redis == "True" %}
44-
from opentelemetry.instrumentation.redis import RedisInstrumentor # type: ignore
44+
from opentelemetry.instrumentation.redis import RedisInstrumentor
4545
{%- endif %}
4646
{%- if cookiecutter.db_info.name == "postgresql" and cookiecutter.orm in ["ormar", "tortoise"] %}
47-
from opentelemetry.instrumentation.asyncpg import AsyncPGInstrumentor # type: ignore
47+
from opentelemetry.instrumentation.asyncpg import AsyncPGInstrumentor
4848
{%- endif %}
4949
{%- if cookiecutter.orm == "sqlalchemy" %}
50-
from opentelemetry.instrumentation.sqlalchemy import ( # type: ignore
50+
from opentelemetry.instrumentation.sqlalchemy import (
5151
SQLAlchemyInstrumentor,
5252
)
5353
{%- endif %}
54-
54+
{%- if cookiecutter.enable_rmq == "True" %}
55+
from opentelemetry.instrumentation.aio_pika import AioPikaInstrumentor
56+
{%- endif %}
5557
{%- endif %}
5658

5759
{%- if cookiecutter.orm == "psycopg" %}
@@ -185,6 +187,11 @@ def setup_opentelemetry(app: FastAPI) -> None:
185187
engine=app.state.db_engine.sync_engine,
186188
)
187189
{%- endif %}
190+
{%- if cookiecutter.enable_rmq == "True" %}
191+
AioPikaInstrumentor().instrument(
192+
tracer_provider=tracer_provider,
193+
)
194+
{%- endif %}
188195

189196
set_tracer_provider(tracer_provider=tracer_provider)
190197

@@ -208,6 +215,9 @@ def stop_opentelemetry(app: FastAPI) -> None:
208215
{%- if cookiecutter.orm == "sqlalchemy" %}
209216
SQLAlchemyInstrumentor().uninstrument()
210217
{%- endif %}
218+
{%- if cookiecutter.enable_rmq == "True" %}
219+
AioPikaInstrumentor().uninstrument()
220+
{%- endif %}
211221

212222
{%- endif %}
213223

0 commit comments

Comments
 (0)