upgraded all app dependencies

This commit is contained in:
Aurthur Musendame 2024-01-24 17:10:44 +02:00
parent 3be58be8e9
commit b994d0bb9d
7 changed files with 183 additions and 177 deletions

View file

@ -6,18 +6,12 @@
<component name="ChangeListManager">
<list default="true" id="9f590b69-f929-45a1-8512-12ed6efbf028" name="Changes" comment="Added Invetory starter">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/codegen.yml" beforeDir="false" afterPath="$PROJECT_DIR$/codegen.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/felicity/api/gql/analysis/mutations/analysis_request.py" beforeDir="false" afterPath="$PROJECT_DIR$/felicity/api/gql/analysis/mutations/analysis_request.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/felicity/api/gql/analysis/mutations/analysis_result.py" beforeDir="false" afterPath="$PROJECT_DIR$/felicity/api/gql/analysis/mutations/analysis_result.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/felicity/api/gql/instrument/types.py" beforeDir="false" afterPath="$PROJECT_DIR$/felicity/api/gql/instrument/types.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/felicity/core/config.py" beforeDir="false" afterPath="$PROJECT_DIR$/felicity/core/config.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/felicity/lims/boot.py" beforeDir="false" afterPath="$PROJECT_DIR$/felicity/lims/boot.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/felicity/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/felicity/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/webapp/conf.ts" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/conf.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/webapp/graphql/operations/analyses.queries.ts" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/graphql/operations/analyses.queries.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/webapp/graphql/operations/instrument.queries.ts" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/graphql/operations/instrument.queries.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/webapp/main.ts" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/main.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/webapp/models/analysis.ts" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/models/analysis.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/webapp/views/sample/SamplesAdd.vue" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/views/sample/SamplesAdd.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/webapp/views/sample/_id/Results.vue" beforeDir="false" afterPath="$PROJECT_DIR$/webapp/views/sample/_id/Results.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/requirements-dev.txt" beforeDir="false" afterPath="$PROJECT_DIR$/requirements-dev.txt" afterDir="false" />
<change beforePath="$PROJECT_DIR$/requirements.txt" beforeDir="false" afterPath="$PROJECT_DIR$/requirements.txt" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />

View file

@ -1,11 +1,11 @@
import os
import secrets
from typing import Any
import pytz
from pydantic import AnyHttpUrl, EmailStr, field_validator, ConfigDict
from pydantic_core.core_schema import FieldValidationInfo
from pydantic_settings import BaseSettings
from pydantic import (
PostgresDsn, AnyHttpUrl, EmailStr, field_validator, ValidationInfo
)
from pydantic_settings import BaseSettings, SettingsConfigDict
def getenv_boolean(var_name: Any, default_value: bool = False) -> bool:
@ -28,8 +28,9 @@ class Settings(BaseSettings):
STATIC_DIR: str = os.path.join(BASE_DIR, "static")
API_V1_STR: str = "/api/v1"
ALGORITHM: str = "HS256"
SECRET_KEY: str = secrets.token_urlsafe(32)
REFRESH_SECRET_KEY: str = secrets.token_urlsafe(32)
# secrets.token_urlsafe(32)
SECRET_KEY: str = "Eoy7XAjJWnr6PcgFi0FK37XbjXEfx2PdFV8GFbucReDbWiew8T79ob3ZIF3bgYi62THktkoTNdC1SrFyd_k4xQ"
REFRESH_SECRET_KEY: str = "KKj6HeSWwizXDnzc1SS_e-PYn3EwA4XuotoOD3J0mvmu1PLdVzbDkAeThJDTQsgYHVgYwbV5PnSbo_ZJZHEMEg"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 4 * 1 # 4 hours
REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 12 * 1 # 1/2 day / 12 hours
PROJECT_NAME: str = getenv_value("PROJECT_NAME", "Felicity LIMS")
@ -59,19 +60,21 @@ class Settings(BaseSettings):
@field_validator("SQLALCHEMY_DATABASE_URI")
def assemble_async_db_connection(
cls, v: str | None, info: FieldValidationInfo
) -> Any:
cls, v: str | None, info: ValidationInfo
) -> PostgresDsn:
if isinstance(v, str):
return v
return f'postgresql+asyncpg://{info.data.get("POSTGRES_USER")}:{info.data.get("POSTGRES_PASSWORD")}@{info.data.get("POSTGRES_SERVER")}/{info.data.get("POSTGRES_DB") or ""}'
return f'postgresql+asyncpg://{info.data.get("POSTGRES_USER")}:{info.data.get("POSTGRES_PASSWORD")}\
@{info.data.get("POSTGRES_SERVER")}/{info.data.get("POSTGRES_DB") or ""}'
@field_validator("SQLALCHEMY_TEST_DATABASE_URI")
def assemble_async_test_db_connection(
cls, v: str | None, info: FieldValidationInfo
) -> Any:
cls, v: str | None, info: ValidationInfo
) -> PostgresDsn:
if isinstance(v, str):
return v
return f'postgresql+asyncpg://{info.data.get("POSTGRES_USER")}:{info.data.get("POSTGRES_PASSWORD")}@{info.data.get("POSTGRES_SERVER")}/test_{info.data.get("POSTGRES_DB") or ""}'
return f'postgresql+asyncpg://{info.data.get("POSTGRES_USER")}:{info.data.get("POSTGRES_PASSWORD")}\
@{info.data.get("POSTGRES_SERVER")}/test_{info.data.get("POSTGRES_DB") or ""}'
SMTP_TLS: bool = getenv_boolean("SMTP_TLS", False)
SMTP_PORT: int | None = getenv_value("SMTP_PORT", 1025)
@ -82,7 +85,7 @@ class Settings(BaseSettings):
EMAILS_FROM_NAME: str | None = getenv_value("EMAILS_FROM_NAME", "felicity")
@field_validator("EMAILS_FROM_NAME")
def get_project_name(cls, v: str | None, info: FieldValidationInfo) -> str:
def get_project_name(cls, v: str | None, info: ValidationInfo) -> str:
if not v:
return info.data["PROJECT_NAME"]
return v
@ -92,7 +95,7 @@ class Settings(BaseSettings):
EMAILS_ENABLED: bool = False
@field_validator("EMAILS_ENABLED")
def get_emails_enabled(cls, v: bool, info: FieldValidationInfo) -> bool:
def get_emails_enabled(cls, v: bool, info: ValidationInfo) -> bool:
return bool(
info.data.get("SMTP_HOST")
and info.data.get("SMTP_PORT")
@ -112,7 +115,7 @@ class Settings(BaseSettings):
RUN_OPEN_TRACING: bool = getenv_boolean("RUN_OPEN_TRACING", False)
OTLP_SPAN_EXPORT_URL: str = getenv_value("OTLP_SPAN_EXPORT_URL", "http://localhost:4317")
model_config = ConfigDict(case_sensitive=True)
model_config = SettingsConfigDict(case_sensitive=True)
settings = Settings()

View file

@ -1,4 +1,5 @@
from fastapi import FastAPI
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
from starlette.middleware.cors import CORSMiddleware
from strawberry.fastapi import GraphQLRouter
from strawberry.subscriptions import GRAPHQL_TRANSPORT_WS_PROTOCOL, GRAPHQL_WS_PROTOCOL
@ -58,9 +59,15 @@ def register_tasks(app: FastAPI):
observe_events()
def trace_app(app: FastAPI):
if settings.RUN_OPEN_TRACING:
FastAPIInstrumentor.instrument_app(app)
def register_felicity(app: FastAPI):
register_cors(app)
register_routes(app)
register_graphql(app)
register_listeners(app)
register_tasks(app)
trace_app(app)

View file

@ -2,6 +2,7 @@
- The felicity app must be creaed first before importing other modules.
- This is important to register felicity in sanic registry
"""
from fastapi import FastAPI
from lims import register_felicity

View file

@ -1,111 +1,111 @@
{
"name": "felicity-lims",
"version": "0.1.0",
"main": "webapp/main.ts",
"license": "Public",
"scripts": {
"webapp:dev": "vite",
"webapp:vf": "vite --force",
"webapp:build:report": "npx vite-bundle-visualizer",
"webapp:build:only": "vite build",
"webapp:prettier:check": "prettier --check \"{,webapp/**/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss}\"",
"webapp:prettier:format": "prettier --write \"{,webapp/**/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss}\"",
"webapp:lint": "eslint . --ext .js,.ts,.tsx,.vue",
"webapp:lint:fix": "npm run lint -- --fix",
"webapp:codegen": "graphql-codegen --config codegen.yml --verbose",
"server:uv": "cd felicity && uvicorn main:felicity --host=0.0.0.0 --port=8000 --workers 1",
"server:uv:watch": "cd felicity && uvicorn main:felicity --reload --host=0.0.0.0 --port=8000 --workers 1 --log-level debug --use-colors",
"server:gu": "cd felicity && gunicorn main:felicity --workers 1 --worker-class uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8000 --name felicity --access-logfile - --error-logfile - --log-level info --timeout 600",
"server:gu:watch": "cd felicity && gunicorn main:felicity --workers 1 --worker-class uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8000 --name felicity --reload --access-logfile - --error-logfile - --log-level info --timeout 600",
"server:test": "cd felicity && bash ./scripts/test.sh",
"server:lint": "cd felicity && bash ./scripts/lint.sh",
"server:format": "cd felicity && bash ./scripts/format.sh",
"server:format:imports": "cd felicity && bash ./scripts/format_imports.sh",
"server:schema:export": "cd felicity && strawberry export-schema api.gql.schema:schema > ./api/gql/schema.graphql",
"server:schema:export:tofront": "cd felicity && strawberry export-schema api.gql.schema:schema > ../webapp/graphql/schema.graphql",
"server:codegen:not-working": "# npm run backend:schema:export && strawberry codegen --schema api.gql.schema --output-dir ../graphql -p python -p typescript ./api/gql/schema.graphql",
"server:magidoc:generate": "magidoc generate",
"server:magidoc:preview": "magidoc preview",
"standalone:build": "rm -rf felicity/templates/static/* && vite build && cp -r dist/** felicity/templates/static",
"db:al:upgrade": "cd felicity && alembic upgrade head",
"db:al:revision": "cd felicity && alembic revision --autogenerate -m"
},
"dependencies": {
"@antv/g2": "^4.2.10",
"@antv/g2plot": "^2.4.31",
"@ckeditor/ckeditor5-build-decoupled-document": "^35.4.0",
"@editorjs/editorjs": "^2.28.2",
"@fortawesome/fontawesome-svg-core": "^6.5.1",
"@fortawesome/free-brands-svg-icons": "^6.5.1",
"@fortawesome/free-regular-svg-icons": "^6.5.1",
"@fortawesome/free-solid-svg-icons": "^6.5.1",
"@fortawesome/vue-fontawesome": "^3.0.5",
"@graphql-codegen/cli": "^5.0.0",
"@graphql-codegen/client-preset": "^4.1.0",
"@graphql-codegen/typescript": "^4.0.1",
"@graphql-codegen/typescript-operations": "^4.0.1",
"@graphql-codegen/typescript-urql": "^3.7.3",
"@graphql-codegen/typescript-vue-urql": "^2.3.6",
"@graphql-typed-document-node/core": "^3.2.0",
"@magidoc/cli": "^4.1.2",
"@types/lodash-es": "^4.17.12",
"@urql/core": "^3.2.2",
"@urql/exchange-auth": "^1.0.0",
"@urql/vue": "^1.1.2",
"@vueform/multiselect": "^2.6.6",
"@vueuse/core": "^9.13.0",
"@vueuse/motion": "2.0.0-beta.12",
"axios": "^1.6.5",
"crypto-js": "^4.2.0",
"dayjs": "^1.11.10",
"floating-vue": "2.0.0-beta.20",
"graphql": "^16.8.1",
"graphql-tag": "^2.12.6",
"graphql-ws": "^5.14.3",
"js-confetti": "^0.11.0",
"jstat": "^1.9.6",
"jwt-decode": "^3.1.2",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"moment": "^2.30.1",
"notyf": "^3.10.0",
"pdf-lib": "^1.17.1",
"pinia": "^2.1.7",
"process": "^0.11.10",
"react": "^18.2.0",
"socket.io": "^4.7.4",
"socket.io-client": "^4.7.4",
"split.js": "^1.6.5",
"subscriptions-transport-ws": "^0.11.0",
"sweetalert2": "^11.10.3",
"tailwindcss": "^3.4.1",
"urql": "^3.0.4",
"vee-validate": "^4.12.4",
"vite-tsconfig-paths": "^4.3.1",
"vue": "^3.4.15",
"vue-multiselect": "3.0.0-alpha.2",
"vue-router": "^4.2.5",
"vue-sweetalert2": "^5.0.5",
"vuedraggable": "^4.1.0",
"wonka": "^6.3.4",
"yup": "^0.32.11"
},
"devDependencies": {
"@tailwindcss/forms": "^0.5.7",
"@types/node": "^18.19.8",
"@urql/devtools": "^2.0.3",
"@vitejs/plugin-vue": "^4.6.2",
"@vitejs/plugin-vue-jsx": "^3.1.0",
"@vue/compiler-sfc": "^3.4.15",
"autoprefixer": "^10.4.17",
"eslint": "^8.56.0",
"eslint-config-prettier": "^8.10.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.20.1",
"jshint": "^2.13.6",
"postcss": "^8.4.33",
"prettier": "^2.8.8",
"typescript": "^5.3.3",
"vite": "^4.5.2"
}
"name": "felicity-lims",
"version": "0.1.0",
"main": "webapp/main.ts",
"license": "Public",
"scripts": {
"webapp:dev": "vite",
"webapp:vf": "vite --force",
"webapp:build:report": "npx vite-bundle-visualizer",
"webapp:build:only": "vite build",
"webapp:prettier:check": "prettier --check \"{,webapp/**/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss}\"",
"webapp:prettier:format": "prettier --write \"{,webapp/**/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss}\"",
"webapp:lint": "eslint . --ext .js,.ts,.tsx,.vue",
"webapp:lint:fix": "npm run lint -- --fix",
"webapp:codegen": "graphql-codegen --config codegen.yml --verbose",
"server:uv": "cd felicity && uvicorn main:felicity --host=0.0.0.0 --port=8000 --workers 5",
"server:uv:watch": "cd felicity && uvicorn main:felicity --reload --host=0.0.0.0 --port=8000 --workers 1 --log-level debug --use-colors",
"server:gu": "cd felicity && gunicorn main:felicity --workers 5 --worker-class uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8000 --name felicity --access-logfile - --error-logfile - --log-level info --timeout 600",
"server:gu:watch": "cd felicity && gunicorn main:felicity --workers 1 --worker-class uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8000 --name felicity --reload --access-logfile - --error-logfile - --log-level info --timeout 600",
"server:test": "cd felicity && bash ./scripts/test.sh",
"server:lint": "cd felicity && bash ./scripts/lint.sh",
"server:format": "cd felicity && bash ./scripts/format.sh",
"server:format:imports": "cd felicity && bash ./scripts/format_imports.sh",
"server:schema:export": "cd felicity && strawberry export-schema api.gql.schema:schema > ./api/gql/schema.graphql",
"server:schema:export:tofront": "cd felicity && strawberry export-schema api.gql.schema:schema > ../webapp/graphql/schema.graphql",
"server:codegen:not-working": "# npm run backend:schema:export && strawberry codegen --schema api.gql.schema --output-dir ../graphql -p python -p typescript ./api/gql/schema.graphql",
"server:magidoc:generate": "magidoc generate",
"server:magidoc:preview": "magidoc preview",
"standalone:build": "rm -rf felicity/templates/static/* && vite build && cp -r dist/** felicity/templates/static",
"db:al:upgrade": "cd felicity && alembic upgrade head",
"db:al:revision": "cd felicity && alembic revision --autogenerate -m"
},
"dependencies": {
"@antv/g2": "^4.2.10",
"@antv/g2plot": "^2.4.31",
"@ckeditor/ckeditor5-build-decoupled-document": "^35.4.0",
"@editorjs/editorjs": "^2.28.2",
"@fortawesome/fontawesome-svg-core": "^6.5.1",
"@fortawesome/free-brands-svg-icons": "^6.5.1",
"@fortawesome/free-regular-svg-icons": "^6.5.1",
"@fortawesome/free-solid-svg-icons": "^6.5.1",
"@fortawesome/vue-fontawesome": "^3.0.5",
"@graphql-codegen/cli": "^5.0.0",
"@graphql-codegen/client-preset": "^4.1.0",
"@graphql-codegen/typescript": "^4.0.1",
"@graphql-codegen/typescript-operations": "^4.0.1",
"@graphql-codegen/typescript-urql": "^3.7.3",
"@graphql-codegen/typescript-vue-urql": "^2.3.6",
"@graphql-typed-document-node/core": "^3.2.0",
"@magidoc/cli": "^4.1.2",
"@types/lodash-es": "^4.17.12",
"@urql/core": "^3.2.2",
"@urql/exchange-auth": "^1.0.0",
"@urql/vue": "^1.1.2",
"@vueform/multiselect": "^2.6.6",
"@vueuse/core": "^9.13.0",
"@vueuse/motion": "2.0.0-beta.12",
"axios": "^1.6.5",
"crypto-js": "^4.2.0",
"dayjs": "^1.11.10",
"floating-vue": "2.0.0-beta.20",
"graphql": "^16.8.1",
"graphql-tag": "^2.12.6",
"graphql-ws": "^5.14.3",
"js-confetti": "^0.11.0",
"jstat": "^1.9.6",
"jwt-decode": "^3.1.2",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"moment": "^2.30.1",
"notyf": "^3.10.0",
"pdf-lib": "^1.17.1",
"pinia": "^2.1.7",
"process": "^0.11.10",
"react": "^18.2.0",
"socket.io": "^4.7.4",
"socket.io-client": "^4.7.4",
"split.js": "^1.6.5",
"subscriptions-transport-ws": "^0.11.0",
"sweetalert2": "^11.10.3",
"tailwindcss": "^3.4.1",
"urql": "^3.0.4",
"vee-validate": "^4.12.4",
"vite-tsconfig-paths": "^4.3.1",
"vue": "^3.4.15",
"vue-multiselect": "3.0.0-alpha.2",
"vue-router": "^4.2.5",
"vue-sweetalert2": "^5.0.5",
"vuedraggable": "^4.1.0",
"wonka": "^6.3.4",
"yup": "^0.32.11"
},
"devDependencies": {
"@tailwindcss/forms": "^0.5.7",
"@types/node": "^18.19.8",
"@urql/devtools": "^2.0.3",
"@vitejs/plugin-vue": "^4.6.2",
"@vitejs/plugin-vue-jsx": "^3.1.0",
"@vue/compiler-sfc": "^3.4.15",
"autoprefixer": "^10.4.17",
"eslint": "^8.56.0",
"eslint-config-prettier": "^8.10.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.20.1",
"jshint": "^2.13.6",
"postcss": "^8.4.33",
"prettier": "^2.8.8",
"typescript": "^5.3.3",
"vite": "^4.5.2"
}
}

View file

@ -1,9 +1,9 @@
-r requirements.txt
pytest
pytest-asyncio==0.21.0
pytest-order==1.1.0
httpx==0.24.0
anyio[trio]==3.6.2
faker==18.5.1
bump-pydantic==0.7.0
-r requirements.txt
pytest
pytest-asyncio==0.23.3
pytest-order==1.2.0
httpx==0.26.0
anyio[trio]==4.2.0
faker==22.5.1
bump-pydantic==0.8.0

View file

@ -1,33 +1,34 @@
fastapi==0.104.1
strawberry-graphql==0.195.1
SQLAlchemy==2.0.19
uvicorn[standard]==0.21.1
gunicorn==20.1.0
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
emails==0.6
psycopg2-binary==2.9.6
apscheduler==3.10.1
sqlalchemy_mptt==0.2.5
sqlalchemy_mixins @ git+https://github.com/aurthurm/sqlalchemy-mixins.git@async_support
tenacity==8.2.2
pydantic[email]==2.4.2
pydantic_settings==2.0.3
python-multipart==0.0.6
alembic==1.11.1
asyncpg==0.27.0
broadcaster~=0.2.0
aiofiles==23.1.0
pandas==2.0.1
jinja2==3.1.2
celery==5.2.7
fpdf2==2.7.3
PyPDF2==3.0.1
fhir.resources==7.0.0
httpx==0.24.0
python-barcode==0.15.1
importlib-metadata~=6.0.0
opentelemetry-instrumentation-fastapi==0.38b0
opentelemetry-exporter-otlp==1.17.0
opentelemetry-instrumentation-logging==0.38b0
opentelemetry-instrumentation-sqlalchemy==0.38b0
fastapi==0.109.0
strawberry-graphql==0.219.0
SQLAlchemy==2.0.25
uvicorn[standard]==0.27.0
gunicorn==21.2.0
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
emails==0.6
psycopg2-binary==2.9.9
apscheduler==3.10.4
sqlalchemy_mptt==0.2.5
sqlalchemy_mixins @ git+https://github.com/aurthurm/sqlalchemy-mixins.git@async_support
tenacity==8.2.3
pydantic[email]==2.5.3
pydantic_settings==2.1.0
python-multipart==0.0.6
alembic==1.13.1
asyncpg==0.29.0
broadcaster~=0.2.0
aiofiles==23.2.1
pandas==2.2.0
jinja2==3.1.3
celery==5.3.6
fpdf2==2.7.7
PyPDF2==3.0.1
fhir.resources==7.1.0
httpx==0.26.0
python-barcode==0.15.1
importlib-metadata~=6.0.0
opentelemetry-semantic-conventions==0.43b0
opentelemetry-instrumentation-fastapi==0.43b0
opentelemetry-exporter-otlp==1.22.0
opentelemetry-instrumentation-logging==0.43b0
opentelemetry-instrumentation-sqlalchemy==0.43b0