Skip to content
This repository was archived by the owner on May 23, 2023. It is now read-only.

Commit cbdd72e

Browse files
Correçẽos para evitar exceptions por causa do redis;
Simplificado o config para carregar dinamicamente via env; Helper atualizado para ter novas funções compatíveis com o life-cycle; Biblioteca de logging melhorada como novos métodos; Melhorias no boot para registrar a vendor de forma automática para o projeto poder ficar no padrão da pep8;
1 parent 87df370 commit cbdd72e

File tree

14 files changed

+86
-65
lines changed

14 files changed

+86
-65
lines changed

examples/lambda_sqs/app.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@
22
33
This module contains the handler method
44
"""
5+
import boot
56
from lambda_app.lambda_flask import LambdaFlask
67
from lambda_app import APP_NAME, APP_VERSION
7-
from lambda_app.logging import get_logger
8+
from lambda_app.logging import get_logger, set_debug_mode
89
from lambda_app.services.v1.carrier_notifier_service import CarrierNotifierService
910
from lambda_app.config import get_config
1011
from lambda_app import helper
11-
from lambda_app.boot import load_dot_env
12+
1213

1314
# load env
1415
ENV = helper.get_environment()
15-
load_dot_env(ENV)
16+
boot.load_dot_env(ENV)
1617

1718
# config
1819
CONFIG = get_config()
@@ -22,6 +23,12 @@
2223
LOGGER = get_logger()
2324

2425
APP = LambdaFlask(APP_NAME)
26+
# override the APP logger
27+
APP.logger = LOGGER
28+
# override the log configs
29+
if DEBUG:
30+
# override to the level desired
31+
set_debug_mode(LOGGER)
2532

2633
# general vars
2734
APP_QUEUE = CONFIG.APP_QUEUE
Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
ROOT_DIR = current_path
1616
_LOADED = False
17+
_ENV_KEYS = []
1718

1819
try:
1920
import chalicelib
@@ -41,8 +42,14 @@ def is_loaded():
4142

4243

4344
def reset():
44-
global _LOADED
45+
global _LOADED, _ENV_KEYS
4546
_LOADED = False
47+
_ENV_KEYS = []
48+
49+
50+
def get_env_keys():
51+
global _ENV_KEYS
52+
return _ENV_KEYS
4653

4754

4855
def get_internal_logger():
@@ -65,12 +72,13 @@ def load_dot_env(env='development', force=False):
6572

6673
logger = get_internal_logger()
6774

68-
global _LOADED
75+
global _LOADED, _ENV_KEYS
6976
if not _LOADED or force:
7077
logger.info('Boot - Loading env: {}'.format(env))
7178

7279
# Default
7380
for k, v in _DEFAULT_ENV_CONFIGS.items():
81+
_ENV_KEYS.append(k)
7482
if k == 'APP_ENV':
7583
v = env
7684
os.environ[k] = v
@@ -80,6 +88,7 @@ def load_dot_env(env='development', force=False):
8088
env_vars = dotenv_values(config_path)
8189

8290
for k, v in env_vars.items():
91+
_ENV_KEYS.append(k)
8392
os.environ[k] = v
8493
_LOADED = True
8594
else:
@@ -99,6 +108,7 @@ def load_dot_env(env='development', force=False):
99108

100109

101110
def load_secrets(env='staging'):
111+
global _ENV_KEYS
102112
from lambda_app.aws.secrets import Secrets
103113
logger = get_internal_logger()
104114
result = False
@@ -128,13 +138,14 @@ def load_env(env='dev', force=False):
128138

129139
logger = get_internal_logger()
130140

131-
global _LOADED
141+
global _LOADED, _ENV_KEYS
132142
if not _LOADED or force:
133143

134144
logger.info('Boot - Loading env: {}'.format(env))
135145

136146
# Default
137147
for k, v in _DEFAULT_ENV_CONFIGS.items():
148+
_ENV_KEYS.append(k)
138149
if k == 'APP_ENV':
139150
v = env
140151
os.environ[k] = v
@@ -156,6 +167,7 @@ def load_env(env='dev', force=False):
156167
if env in configs['stages']:
157168
env_vars = configs['stages'][env]['environment_variables']
158169
for k, v in env_vars.items():
170+
_ENV_KEYS.append(k)
159171
os.environ[k] = v
160172
_LOADED = True
161173
else:
@@ -196,3 +208,6 @@ def print_env(app, logger):
196208
# logger.info('Database: %s' % os.getenv('DB_HOST'))
197209
logger.info('Log Level: %s' % os.getenv('LOG_LEVEL'))
198210
logger.info('Debug: %s' % os.getenv('DEBUG'))
211+
212+
213+
register_vendor()

examples/lambda_sqs/lambda_app/config.py

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,55 +10,19 @@
1010

1111
class Configuration:
1212
# APP
13-
APP_ENV = 'development'
1413
APP_NAME = ''
1514
APP_VERSION = ''
1615

17-
# LOG
18-
LOG_LEVEL = logging.INFO
19-
20-
# NEW RELIC
21-
NEW_RELIC_DEVELOPER_MODE = 'development'
22-
NEW_RELIC_LICENSE_KEY = "license_key"
23-
NEW_RELIC_LOG_HOST = "https://log-api.newrelic.com/log/v1"
24-
25-
DB_HOST = ""
26-
DB_USER = ""
27-
DB_PASSWORD = ""
28-
DB = ""
29-
30-
APP_QUEUE = ""
31-
32-
REDIS_HOST = ""
33-
REDIS_PORT = 6379
34-
REGION_NAME = ""
35-
36-
SQS_ENDPOINT = None
37-
SQS_LOCALSTACK = "http://localhost:4566"
38-
SECRET_KEY = 'teste'
39-
4016
def __init__(self):
4117
# APP
42-
self.APP_ENV = os.getenv("APP_ENV") if 'APP_ENV' in os.environ else 'development'
4318
self.APP_NAME = APP_NAME
4419
self.APP_VERSION = APP_VERSION
45-
self.SECRET_KEY = os.getenv("SECRET_KEY") if 'SECRET_KEY' in os.environ else self.SECRET_KEY
4620

47-
self.LOG_LEVEL = os.getenv("LOG_LEVEL") if 'LOG_LEVEL' in os.environ else self.LOG_LEVEL
48-
49-
self.DB_HOST = os.getenv("DB_HOST") if 'DB_HOST' in os.environ else self.DB_HOST
50-
self.DB_USER = os.getenv("DB_USER") if 'DB_USER' in os.environ else self.DB_USER
51-
self.DB_PASSWORD = os.getenv("DB_PASSWORD") if 'DB_PASSWORD' in os.environ else self.DB_PASSWORD
52-
self.DB = os.getenv("DB") if 'DB' in os.environ else self.DB
53-
54-
self.APP_QUEUE = os.getenv("APP_QUEUE") if 'APP_QUEUE' in os.environ else self.APP_QUEUE
55-
56-
self.REDIS_HOST = os.getenv("REDIS_HOST") if 'REDIS_HOST' in os.environ else self.REDIS_HOST
57-
self.REDIS_PORT = os.getenv("REDIS_PORT") if 'REDIS_PORT' in os.environ else self.REDIS_PORT
58-
self.REGION_NAME = os.getenv("REGION_NAME") if 'REGION_NAME' in os.environ else self.REGION_NAME
59-
60-
self.SQS_ENDPOINT = os.getenv("SQS_ENDPOINT") if 'SQS_ENDPOINT' in os.environ else self.SQS_ENDPOINT
61-
self.SQS_LOCALSTACK = os.getenv("SQS_LOCALSTACK") if 'SQS_LOCALSTACK' in os.environ else self.SQS_LOCALSTACK
21+
# montagem dinamica de atributos
22+
env_keys = Configuration.get_env_keys()
23+
for k in env_keys:
24+
value = os.getenv(k) if k in os.environ else None
25+
setattr(Configuration, k, value)
6226

6327
def __dict__(self):
6428
attributes = inspect.getmembers(self, lambda a: not (inspect.isroutine(a)))
@@ -67,6 +31,11 @@ def __dict__(self):
6731
def to_dict(self):
6832
return self.__dict__()
6933

34+
@staticmethod
35+
def get_env_keys():
36+
from boot import get_env_keys
37+
return get_env_keys()
38+
7039

7140
def reset():
7241
global _CONFIG

examples/lambda_sqs/lambda_app/helper.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import pytz
99

10-
from lambda_app.logging import get_logger
10+
from lambda_app.logging import get_logger, get_console_logger
1111

1212
TZ_AMERICA_SAO_PAULO = 'America/Sao_Paulo'
1313

@@ -64,7 +64,6 @@ def to_dict(obj, force_str=False):
6464
if force_str:
6565
return {k: str(v) for k, v in data.items() if v is not None}
6666
else:
67-
# return {k: v for k, v in data.items() if v is not None}
6867
_dict = {}
6968
for k, v in data.items():
7069
if isinstance(v, Enum):
@@ -146,12 +145,19 @@ def is_https():
146145
return result
147146

148147

149-
def print_routes(app, logger):
148+
def is_count_request(app):
149+
request = app.current_request.query_params
150+
return True if request is not None and (request.get('count') == "true" or request.get('count') == "1") else False
151+
152+
153+
def print_routes(app, logger=None):
150154
"""
151155
:param logger:
152156
:param (chalice.Chalice) app:
153157
:return:
154158
"""
159+
if logger is None:
160+
logger = get_console_logger()
155161
logger.info('List of routes:')
156162

157163
if has_attr(app, 'get_routes'):

examples/lambda_sqs/lambda_app/logging.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,25 @@ def get_log_level():
1414
return log_level
1515

1616

17+
def get_console_logger():
18+
log_level = get_log_level()
19+
log_name = "console-{}".format(APP_NAME)
20+
log_filename = None
21+
log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
22+
logging.basicConfig(format=log_format, filename=log_filename, level=log_level)
23+
logger = logging.getLogger(log_name)
24+
return logger
25+
26+
27+
def get_stream_handler():
28+
return get_console_logger().parent.handlers[0]
29+
30+
31+
def set_debug_mode(logger, level=None):
32+
logger.addHandler(get_stream_handler())
33+
logger.level = level if level is not None else logging.INFO
34+
35+
1736
def get_logger():
1837
global _LOGGER
1938
if not _LOGGER:

examples/lambda_sqs/lambda_app/repositories/mysql/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ def _execute(self, sql, params=None):
2828
self.connection.connect()
2929
# with self.connection.cursor() as cursor:
3030
cursor = self.connection.cursor()
31-
cursor.execute(sql, params)
32-
result = cursor
31+
try:
32+
cursor.execute(sql, params)
33+
except Exception as err:
34+
self.logger.error(err)
35+
finally:
36+
result = cursor
3337
# close connection only in read
3438
# self.connection.close()
3539
else:

examples/lambda_sqs/lambda_app/services/v1/carrier_notifier_service.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def process(self, sqs_event):
3131

3232
event_tracker = EventTracker(self.logger)
3333
event_hash = None
34-
34+
# todo extrair essa logica daqui, o servico nao tem que fazer isso
3535
records = self.get_records_from_sqs_event(sqs_event)
3636
if records is not None:
3737
process_counter = 0
@@ -55,7 +55,11 @@ def process(self, sqs_event):
5555
self.logger.info('event_vo: {}'.format(event_vo.to_dict()))
5656
created = self.repository.create(event_vo)
5757

58-
self.redis_repository.create("event_{}".format(event_hash), str(event_vo.to_dict()))
58+
try:
59+
self.redis_repository.create("event_{}".format(event_hash), str(event_vo.to_dict()))
60+
except Exception as err:
61+
self.logger.error("Already in redis")
62+
self.logger.error(err)
5963
# self.redis_repository.list(where="*")
6064

6165
if not created:

examples/lambda_sqs/scripts/boot-lambda.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ else
1818
fi
1919

2020
current_file_path_basename=$(basename -- "$current_file_path")
21-
#echo "xxxxx current_file_path_basename $current_file_path_basename"
2221

2322
if [ -z "$current_file_path_basename" ] || [ $current_file_path = "./" ]; then
2423
# echo 'aq'
@@ -50,14 +49,12 @@ echo 'Installing dependencies...'
5049
echo "Requirements file: ${current_parent_folder}requirements.txt"
5150
if test -f ${current_parent_folder}requirements.txt; then
5251
python3 -m pip install -r ${current_parent_folder}requirements.txt -t ${current_parent_folder}vendor
53-
# cat ${current_parent_folder}requirements.txt
5452
echo "requirements..."
5553
fi
5654

5755
echo "Requirements file: ${current_parent_folder}requirements-vendor.txt"
5856
if test -f ${current_parent_folder}requirements-vendor.txt; then
5957
python3 -m pip install -r ${current_parent_folder}requirements-vendor.txt -t ${current_parent_folder}vendor
60-
# cat ${current_parent_folder}requirements-vendor.txt
6158
echo "requirements vendor..."
6259
fi
6360

examples/lambda_sqs/scripts/migrations/mysql/migrate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def register_paths():
3636
register_paths()
3737

3838
from lambda_app.logging import get_logger
39-
from lambda_app.boot import reset, load_dot_env, load_env
39+
from boot import reset, load_dot_env, load_env
4040
from lambda_app.config import reset as reset_config, get_config
4141
from lambda_app.database.mysql import get_connection
4242

examples/lambda_sqs/tests/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22
import sys
33

4-
from lambda_app.boot import load_env, set_root_dir
4+
from boot import load_env, set_root_dir
55

66
if __package__:
77
current_path = os.path.abspath(os.path.dirname(__file__)).replace('/' + str(__package__), '', 1)

0 commit comments

Comments
 (0)