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

Commit edd2d39

Browse files
Atualização lambda API
1 parent d9d84e9 commit edd2d39

File tree

146 files changed

+3439
-1318
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

146 files changed

+3439
-1318
lines changed

examples/lambda_api/.coveragerc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
source =
44
./chalicelib/
55
./flask_app/
6-
./lambda_app/
6+
./flambda_app/
77
./app.py
88

99
[run]

examples/lambda_api/.github/workflows/pylint.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,6 @@ jobs:
6868
pip install pylint
6969
- name: Execute pylint
7070
run: |
71-
# pylint ./app.py ./lambda_app ./tests/unit ./tests/integration ./tests/component
72-
# pylint ./app.py ./boot.py ./flambda_app
71+
# pylint ./app.py ./flambda_app ./tests/unit ./tests/integration ./tests/component
72+
# pylint ./app.py ./boot.py ./fflambda_app
7373
./scripts/pylint.sh

examples/lambda_api/.gitignore

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ venv
2727
/.coverage
2828

2929
# mantem a vendor
30-
!/vendor
30+
!vendor
3131
# ignora os demais arquivos
32-
/vendor/*
32+
vendor/*
3333
# mantem essa pasta
3434
!/vendor/public
3535
# mantem essa pasta
@@ -65,3 +65,11 @@ config/integration.en
6565
output/response.json
6666
/output/
6767
/include/
68+
/life-cycle-service-manager-recovery.zip
69+
/env/integration.env
70+
/env/production.env
71+
/env/staging.env
72+
/env/_staging.env
73+
/env/_integration.env
74+
/env/_production.env
75+

examples/lambda_api/app.py

Lines changed: 121 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,56 @@
22
33
This module contains the handler method
44
"""
5-
import boot
6-
import os
75
import base64
8-
from lambda_app.services.v1.healthcheck import HealthCheckSchema, HealthCheckResult
9-
from lambda_app.services.v1.healthcheck.resources import \
10-
MysqlConnectionHealthCheck, RedisConnectionHealthCheck, \
11-
SQSConnectionHealthCheck, SelfConnectionHealthCheck
12-
from lambda_app.services.v1.healthcheck_service import HealthCheckService
13-
from lambda_app.config import get_config
14-
from lambda_app.enums.events import EventType
15-
from lambda_app.enums.messages import MessagesEnum
16-
from lambda_app.events.tracker import EventTracker
17-
from lambda_app.exceptions import ApiException
18-
from lambda_app.http_resources.request import ApiRequest
19-
from lambda_app.http_resources.response import ApiResponse
20-
from lambda_app.services.v1.ocoren_event_service import OcorenEventService as OcorenEventServiceV1
21-
from lambda_app.vos.events import EventVO
22-
from lambda_app.logging import get_logger
23-
from lambda_app import APP_NAME, APP_VERSION, http_helper
24-
from lambda_app.helper import open_vendor_file, print_routes
25-
from lambda_app.http_helper import CUSTOM_DEFAULT_HEADERS
26-
from lambda_app.lambda_flask import LambdaFlask
27-
from lambda_app.openapi import spec, get_doc, generate_openapi_yml
28-
from lambda_app.openapi import api_schemas
29-
from lambda_app.services.event_manager import EventManager
30-
from lambda_app import helper
31-
32-
# load env
33-
ENV = helper.get_environment()
34-
boot.load_dot_env(ENV)
6+
import os
7+
8+
import boot
9+
from flambda_app import APP_NAME, APP_VERSION, http_helper
10+
from flambda_app import helper
11+
from flambda_app.config import get_config
12+
from flambda_app.enums.events import EventType
13+
from flambda_app.enums.messages import MessagesEnum
14+
from flambda_app.events.tracker import EventTracker
15+
from flambda_app.exceptions import ApiException
16+
from flambda_app.flambda import Flambda
17+
from flambda_app.helper import open_vendor_file, print_routes
18+
from flambda_app.http_helper import CUSTOM_DEFAULT_HEADERS
19+
from flambda_app.http_resources.request import ApiRequest
20+
from flambda_app.http_resources.response import ApiResponse
21+
from flambda_app.logging import get_logger, set_debug_mode
22+
from flambda_app.openapi import api_schemas
23+
from flambda_app.openapi import spec, get_doc, generate_openapi_yml
24+
from flambda_app.services.event_manager import EventManager
25+
from flambda_app.services.healthcheck_manager import HealthCheckManager
26+
from flambda_app.services.v1.ocoren_event_service import OcorenEventService as OcorenEventServiceV1
27+
from flambda_app.vos.events import EventVO
28+
29+
# load directly by boot
30+
ENV = boot.get_environment()
31+
# boot.load_dot_env(ENV)
3532

3633

3734
# config
3835
CONFIG = get_config()
3936
# debug
4037
DEBUG = helper.debug_mode()
41-
# logger
42-
LOGGER = get_logger()
4338

44-
APP = LambdaFlask(__name__)
39+
# keep in this order, the app generic stream handler will be removed
40+
APP = Flambda(APP_NAME)
41+
# Logger
42+
LOGGER = get_logger(force=True)
43+
# override the APP logger
44+
APP.logger = LOGGER
45+
# override the log configs
46+
if DEBUG:
47+
# override to the level desired
48+
set_debug_mode(LOGGER)
49+
50+
API_ROOT = os.environ['API_ROOT'] if 'API_ROOT' in os.environ else None
51+
API_ROOT_ENDPOINT = API_ROOT if API_ROOT != "" else '/'
4552

4653

47-
@APP.route('/')
54+
@APP.route(API_ROOT_ENDPOINT)
4855
def index():
4956
"""
5057
API Root path
@@ -55,11 +62,7 @@ def index():
5562
return http_helper.create_response(body=body, status_code=200)
5663

5764

58-
# general vars
59-
APP_QUEUE = CONFIG.APP_QUEUE
60-
61-
62-
@APP.route('/alive')
65+
@APP.route(API_ROOT + '/alive')
6366
def alive():
6467
"""
6568
Health check path
@@ -76,41 +79,79 @@ def alive():
7679
content:
7780
application/json:
7881
schema: HealthCheckSchema
82+
424:
83+
description: Failed dependency response
84+
content:
85+
application/json:
86+
schema: HealthCheckSchema
87+
503:
88+
description: Service unavailable response
89+
content:
90+
application/json:
91+
schema: HealthCheckSchema
7992
"""
80-
service = HealthCheckService()
81-
service.add_check("self", SelfConnectionHealthCheck(LOGGER, CONFIG), [])
82-
service.add_check(
83-
"mysql", MysqlConnectionHealthCheck(LOGGER, CONFIG), ["db"])
84-
service.add_check("redis", RedisConnectionHealthCheck(
85-
LOGGER, CONFIG), ["redis"])
86-
service.add_check("queue", SQSConnectionHealthCheck(
87-
LOGGER, CONFIG), ["queue"])
88-
service.add_check("internal", lambda: HealthCheckResult.unhealthy("connect"), ["example"])
93+
service = HealthCheckManager()
94+
return service.check()
8995

90-
return service.get_response()
9196

92-
93-
@APP.route('/favicon-32x32.png')
97+
@APP.route(API_ROOT + '/favicon-32x32.png')
9498
def favicon():
9599
headers = CUSTOM_DEFAULT_HEADERS.copy()
96100
headers['Content-Type'] = "image/png"
97-
data = base64.b64decode(
98-
'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEUAAAAQM0QWNUYWNkYXNkYALjo'
99-
'WNUYYOEUXN0YaPEUPMUAUM0QVNUYWNkYWNUYWNUUWNUYVNEYWNkYWNUYWM0eF6i0XNkchR0OB5SwzZj'
100-
'9wyTEvXkA3az5apTZ+4C5DgDt31C9frjU5bz5uxTI/eDxzzjAmT0IsWUEeQkVltzR62S6D6CxIhzpKi'
101-
'jpJiDpOkDl4b43lAAAAFXRSTlMAFc304QeZ/vj+ECB3xKlGilPXvS2Ka/h0AAABfklEQVR42oVT2XaC'
102-
'MBAdJRAi7pYJa2QHxbb//3ctSSAUPfa+THLmzj4DBvZpvyauS9b7kw3PWDkWsrD6fFQhQ9dZLfVbC5M'
103-
'88CWCPERr+8fLZodJ5M8QJbjbGL1H2M1fIGfEm+wJN+bGCSc6EXtNS/8FSrq2VX6YDv++XLpJ8SgDWM'
104-
'nwqznGo6alcTbIxB2CHKn8VFikk2mMV2lEnV+CJd9+jJlxXmMr5dW14YCqwgbFpO8FNvJxwwM4TPWPo'
105-
'5QalEsRMAcusXpi58/QUEWPL0AK1ThM5oQCUyXPoPINkdd922VBw4XgTV9zDGWWFrgjIQs4vwvOg6xr'
106-
'+6gbCTqE+DYhlMGX0CF2OknK5gQ2JrkDh/W6TOEbYDeVecKbJtyNXiCfGmW7V93J2hDus1bDfhxWbIZ'
107-
'VYDXITA7Lo6E0Ktgg9eB4KWuR44aj7ppBVPazhQH7/M/KgWe9X1qAg8XypT6nxIMJH+T94QCsLvj29I'
108-
'YwZxyO9/F8vCbO9tX5/wDGjEZ7vrgFZwAAAABJRU5ErkJggg==')
109-
return http_helper.create_response(
110-
body=data, status_code=200, headers=headers)
111-
112-
113-
@APP.route('/docs')
101+
data = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEUAAAAQM0QWNUYWNkYXNkYALjoWNUYYOEUXN0YaPEUPMUAUM0QVN' \
102+
'UYWNkYWNUYWNUUWNUYVNEYWNkYWNUYWM0eF6i0XNkchR0OB5SwzZj9wyTEvXkA3az5apTZ+4C5DgDt31C9frjU5bz5uxTI/eDxzzjAmT0' \
103+
'IsWUEeQkVltzR62S6D6CxIhzpKijpJiDpOkDl4b43lAAAAFXRSTlMAFc304QeZ/vj+ECB3xKlGilPXvS2Ka/h0AAABfklEQVR42oVT2Xa' \
104+
'CMBAdJRAi7pYJa2QHxbb//3ctSSAUPfa+THLmzj4DBvZpvyauS9b7kw3PWDkWsrD6fFQhQ9dZLfVbC5M88CWCPERr+8fLZodJ5M8QJbjb' \
105+
'GL1H2M1fIGfEm+wJN+bGCSc6EXtNS/8FSrq2VX6YDv++XLpJ8SgDWMnwqznGo6alcTbIxB2CHKn8VFikk2mMV2lEnV+CJd9+jJlxXmMr5' \
106+
'dW14YCqwgbFpO8FNvJxwwM4TPWPo5QalEsRMAcusXpi58/QUEWPL0AK1ThM5oQCUyXPoPINkdd922VBw4XgTV9zDGWWFrgjIQs4vwvOg6' \
107+
'xr+6gbCTqE+DYhlMGX0CF2OknK5gQ2JrkDh/W6TOEbYDeVecKbJtyNXiCfGmW7V93J2hDus1bDfhxWbIZVYDXITA7Lo6E0Ktgg9eB4KWu' \
108+
'R44aj7ppBVPazhQH7/M/KgWe9X1qAg8XypT6nxIMJH+T94QCsLvj29IYwZxyO9/F8vCbO9tX5/wDGjEZ7vrgFZwAAAABJRU5ErkJggg=='
109+
110+
if helper.is_running_on_lambda():
111+
data_b64 = {
112+
'headers': headers,
113+
'statusCode': 200,
114+
'body': data,
115+
'isBase64Encoded': True
116+
}
117+
data = helper.to_json(data_b64)
118+
headers = {"Content-Type": "application/json"}
119+
else:
120+
data = base64.b64decode(data)
121+
122+
return http_helper.create_response(body=data, status_code=200, headers=headers)
123+
124+
125+
@APP.route(API_ROOT + '/favicon-16x16.png')
126+
def favicon16():
127+
headers = CUSTOM_DEFAULT_HEADERS.copy()
128+
headers['Content-Type'] = "image/png"
129+
data = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABNVBMVEVisTRhsTReqzVbpTVXoDdVnTdSlzh' \
130+
'RljgvXkAuXUAtWkErV0EzZj40Zj85bz0lTkMkTUMkT0MmTUIkS0IjTEIhSUMkS0IkTEIkTUIlTUIkTkMlTkMcQUQcP0UfQ0QdQ0QfREQg' \
131+
'RUMiSUMiSUMjSkInU0EkTEMmUEEiR0IiSEMpVkErWT8kTUElTUIUNkYVNEQVMkcRM0QSNUYQMUIMMUkVK0AAJEkAM00AMzMAAAAAAACF6' \
132+
'i2E6SyD6CyC5i2B5Sx/4i6A4S593S583S520jB00DByyjFxyTFwyDFvxjJtxTFtxDFswzJrwDJqvzJpvjNouzNoujNnuDNLjTlKijpKiT' \
133+
'pEfztDfzxAeT0+dz05bj44bT44bj82aj81aD8zZT8bPUUbPkUcP0UcPUUeQ0UfREQgRkRgJREvAAAAO3RSTlP09PX19vX39u7u7/Dq6uf' \
134+
'h4eDg4+Pf3Nvb2tnY2NvPv7y6rKupqaGZlpSOiYWETDEkHh0fFQwHCgUBAAcHrskAAADYSURBVHjaPc/ZLkNRGIbhz26KjVJpqSKGtjHP' \
135+
'c9a7W7OEEhtBjDWUO3XghqQSwVrNTp+j///OXhlrLpdJdg9MLblbxqwPd5RLUDpOjK66YWMwTqRpaM0OhZbo3dskljea9+HyAevxHtoWV' \
136+
'AjhfQtr5w3CSfUE8BrgvEDQpxRc3eyfH5wenlQuIO39Sb9x/8uv+bXvmPSjbABPRZznIkGvxkOo7mJtV+FsQsutcFvBuruG9kWZMY+G5p' \
137+
'zxlMp/KPKZSUs2cLrzyMWVEyP1OGtlNpvs6p+p5/8DzUo5hMDku9EAAAAASUVORK5CYII='
138+
139+
if helper.is_running_on_lambda():
140+
data_b64 = {
141+
'headers': headers,
142+
'statusCode': 200,
143+
'body': data,
144+
'isBase64Encoded': True
145+
}
146+
data = helper.to_json(data_b64)
147+
headers = {"Content-Type": "application/json"}
148+
else:
149+
data = base64.b64decode(data)
150+
151+
return http_helper.create_response(body=data, status_code=200, headers=headers)
152+
153+
154+
@APP.route(API_ROOT + '/docs')
114155
def docs():
115156
headers = CUSTOM_DEFAULT_HEADERS.copy()
116157
headers['Content-Type'] = "text/html"
@@ -120,7 +161,7 @@ def docs():
120161
body=html, status_code=200, headers=headers)
121162

122163

123-
@APP.route('/openapi.yml')
164+
@APP.route(API_ROOT + '/openapi.yml')
124165
def openapi():
125166
headers = CUSTOM_DEFAULT_HEADERS.copy()
126167
headers['Content-Type'] = "text/yaml"
@@ -130,7 +171,7 @@ def openapi():
130171
body=html, status_code=200, headers=headers)
131172

132173

133-
@APP.route('/v1/event/<event_type>', methods=['POST'])
174+
@APP.route(API_ROOT+ '/v1/event/<event_type>', methods=['POST'])
134175
def event_create(event_type):
135176
"""
136177
:param event_type:
@@ -274,15 +315,22 @@ def event_list(event_type):
274315
return response.get_response(status_code)
275316

276317

318+
# *************
277319
# doc
278-
spec.path(view=alive, path="/alive", operations=get_doc(alive))
320+
# *************
321+
spec.path(view=alive, path=API_ROOT + "/alive", operations=get_doc(alive))
322+
# *************
323+
# event
324+
# *************
279325
spec.path(view=event_list,
280-
path="/v1/event/{event_type}", operations=get_doc(event_list))
326+
path=API_ROOT + "/v1/event/{event_type}", operations=get_doc(event_list))
281327
spec.path(view=event_create,
282-
path="/v1/event/{event_type}", operations=get_doc(event_create))
328+
path=API_ROOT + "/v1/event/{event_type}", operations=get_doc(event_create))
283329

284330
print_routes(APP, LOGGER)
285-
LOGGER.info('Running at {}'.format(os.environ['APP_ENV']))
331+
LOGGER.info('Running at {}'.format(ENV))
286332

287333
# generate de openapi.yml
288334
generate_openapi_yml(spec, LOGGER, force=True)
335+
336+
api_schemas.register()

0 commit comments

Comments
 (0)