internal 1.0.47__py3-none-any.whl → 1.0.49__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of internal might be problematic. Click here for more details.

internal/base_factory.py CHANGED
@@ -3,6 +3,7 @@ import logging.handlers
3
3
  import os
4
4
  import traceback
5
5
  from abc import ABCMeta, abstractmethod
6
+ from contextlib import asynccontextmanager
6
7
  from functools import lru_cache
7
8
 
8
9
  import dotenv
@@ -44,6 +45,12 @@ class BaseFactory(metaclass=ABCMeta):
44
45
  Each factory should define what model it wants.
45
46
  """
46
47
 
48
+ async def init_state_scheduler_app(self, app, app_config):
49
+ """
50
+ Each factory should define what model it wants.
51
+ """
52
+ pass
53
+
47
54
  @abstractmethod
48
55
  @lru_cache()
49
56
  def get_app_config(self):
@@ -52,15 +59,31 @@ class BaseFactory(metaclass=ABCMeta):
52
59
  """
53
60
 
54
61
  def create_app(self, title=None) -> FastAPI:
62
+
63
+ @asynccontextmanager
64
+ async def lifespan(app: FastAPI):
65
+ await mongodb.connect()
66
+ document_model_list = await self.get_document_model_list()
67
+ await init_beanie(database=app.state.db.get_database(), document_models=document_model_list)
68
+ app.state.logger.info("Database connected")
69
+ await self.init_state_cache(app, self.get_app_config())
70
+ app.state.logger.info("Initialization state cache done")
71
+ await self.init_state_scheduler_app(app, self.get_app_config())
72
+ app.state.logger.info("Initialization state scheduler app done")
73
+ yield
74
+ await mongodb.close()
75
+ app.state.logger.info("Database disconnected")
76
+
55
77
  if title is None:
56
78
  title = self.DEFAULT_APP_NAME
57
79
 
58
80
  if self.get_app_config().DEBUG:
59
81
  app = FastAPI(openapi_url=self.get_app_config().OPEN_API_URL, title=title,
60
- debug=self.get_app_config().DEBUG, version=self.API_VERSION)
82
+ debug=self.get_app_config().DEBUG, version=self.API_VERSION, lifespan=lifespan)
61
83
  else:
62
84
  app = FastAPI(openapi_url=self.get_app_config().OPEN_API_URL, title=title,
63
- debug=self.get_app_config().DEBUG, version=self.API_VERSION, docs_url=None, redoc_url=None)
85
+ debug=self.get_app_config().DEBUG, version=self.API_VERSION, lifespan=lifespan, docs_url=None,
86
+ redoc_url=None)
64
87
 
65
88
  origins = ["*"]
66
89
 
@@ -90,20 +113,6 @@ class BaseFactory(metaclass=ABCMeta):
90
113
  self.get_app_config().DATABASE_AUTH_SOURCE,
91
114
  self.get_app_config().DATABASE_SSL, self.get_app_config().DATABASE_SSL_CA_CERTS)
92
115
 
93
- @app.on_event("startup")
94
- async def startup_db_client():
95
- await mongodb.connect()
96
- document_model_list = await self.get_document_model_list()
97
- await init_beanie(database=app.state.db.get_database(), document_models=document_model_list)
98
- app.state.logger.info("Database connected")
99
- await self.init_state_cache(app, self.get_app_config())
100
- app.state.logger.info("Initialization state cache done")
101
-
102
- @app.on_event("shutdown")
103
- async def shutdown_db_client():
104
- await mongodb.close()
105
- app.state.logger.info("Database disconnected")
106
-
107
116
  app.state.db = mongodb
108
117
  app.state.config = self.get_app_config()
109
118
  self.__init_modules(app)
internal/database.py CHANGED
@@ -5,12 +5,6 @@ from .exception.internal_exception import DatabaseInitializeFailureException, Da
5
5
 
6
6
 
7
7
  class MongoDB:
8
- # def __init__(self, connection_url: str, db_name: str, ssl: bool = False, ssl_ca_certs: str = None):
9
- # self.client = None
10
- # self.connection_url = connection_url
11
- # self.db_name = db_name
12
- # self.ssl = ssl
13
- # self.ssl_ca_certs = ssl_ca_certs
14
8
  def __init__(self, user_name: str, password: str, host: str, port: int, db_name: str, server_selection_timeout: int,
15
9
  connection_timeout: int, auth_source: str, ssl: bool = False, ssl_ca_certs: str = None):
16
10
  self.client = None
@@ -49,3 +43,18 @@ class MongoDB:
49
43
  if not self.client:
50
44
  raise DatabaseConnectFailureException()
51
45
  return self.client[self.db_name]
46
+
47
+ async def get_mongodb_uri(self) -> str:
48
+ if self.user_name and self.password:
49
+ uri = f"mongodb://{self.user_name}:{self.password}@{self.host}:{self.port}/{self.db_name}"
50
+ else:
51
+ uri = f"mongodb://{self.host}:{self.port}/{self.db_name}"
52
+
53
+ uri += f"?authSource={self.auth_source}&connectTimeoutMS={self.connection_timeout}&serverSelectionTimeoutMS={self.server_selection_timeout}&retryWrites=false"
54
+
55
+ if self.ssl:
56
+ uri += "&ssl=true"
57
+ if self.ssl_ca_certs and self.ssl_ca_certs != "":
58
+ uri += f"&tlsCAFile={self.ssl_ca_certs}"
59
+
60
+ return uri
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: internal
3
- Version: 1.0.47
3
+ Version: 1.0.49
4
4
  Summary:
5
5
  Author: Ray
6
6
  Author-email: ray@cruisys.com
@@ -1,6 +1,6 @@
1
1
  internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  internal/base_config.py,sha256=ZdqvHlPsF6ozELgmV0ZiSpYehSscasIclLp8eAjVE24,1870
3
- internal/base_factory.py,sha256=RZAlxINve8TYgPh_2mW7r0Ro8ADjsIaOe6s4JpNYpPw,8494
3
+ internal/base_factory.py,sha256=kdwWVIzOCrZBDdZxgMgjLpLU6WaB2PXzim9SKBormSs,8854
4
4
  internal/common_enum/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  internal/common_enum/contact_type.py,sha256=7QkTQ71UxpaT1YHI40FpjmLz3r-UbRU-sd0m5ajH1as,142
6
6
  internal/common_enum/description_type.py,sha256=kGwkFQh6dMnjDl6ipWYpA-qbNRrhEpnPq3NleTsNwwk,118
@@ -9,7 +9,7 @@ internal/common_enum/lpnr_direction.py,sha256=Rkzyu3qz4_jwkA8tFsrRUc4L8HLOz9SALf
9
9
  internal/common_enum/operator_type.py,sha256=JU4EqloxtrIXzaUbEWuQLDMmAZy6AT8EAX8KIrJH4xs,125
10
10
  internal/common_enum/order_type.py,sha256=XwAl5JaZgFLahBQhBKG4VuMJ39Si9KZEhcSS0-DKKzQ,90
11
11
  internal/const.py,sha256=U1S9r7bjtHgad2oYQoHO19s8D4V0WDUG-L-haV4UaIw,1025
12
- internal/database.py,sha256=atf0iyEqeG97eYr3s4GrTHKM5LjLiKlCNWiuAWoE2vs,2124
12
+ internal/database.py,sha256=1u53JnFJ0jvP7H4HPY2faA2ABdPQ8SlsZigYmQAPktI,2470
13
13
  internal/exception/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  internal/exception/base_exception.py,sha256=U0ZXx1FOXydAnQQImznkeAdsKVC_YaukPWvJdWqEBfg,363
15
15
  internal/exception/internal_exception.py,sha256=rBi70sDFwoYc2NSnxXQ9LY6r2TnxA7ILC64xjpg5h4c,2296
@@ -28,6 +28,6 @@ internal/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  internal/model/base_model.py,sha256=NS_GZvw_IqU1aZPHPpyQs6A741O34ybmzVzBPm9nGWU,3014
29
29
  internal/model/operate.py,sha256=luEoP_Asvso_11qz1SAE1Kn5KxAnDRptM0VylC5tNik,1493
30
30
  internal/utils.py,sha256=0SubS0iUhDvjSX1F4TykasA5-enYJzt2VH-f7_0BnjI,1509
31
- internal-1.0.47.dist-info/METADATA,sha256=tAuRx2hrVEZ2lhJKEJphsdu61t-1-4VDxmYky58aAqY,625
32
- internal-1.0.47.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
33
- internal-1.0.47.dist-info/RECORD,,
31
+ internal-1.0.49.dist-info/METADATA,sha256=GeWqdds8wsOsUhlzsEu6Y0H8RrBHPmUCW1msxm8qb18,625
32
+ internal-1.0.49.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
33
+ internal-1.0.49.dist-info/RECORD,,