Events Protocol’s Documentation¶

Library to be a Client and Server using Guiabolso’s Events Protocol Specification, the especification of this implementation can be found here
Installation¶
To install stable version, just download it from PyPI:
pip install events-protocol
To install from source code execute the following command:
pip install git+https://github.com/GuiaBolso/events-protocol-python#egg=events-protocol
Basic Usage¶
Client¶
The essencial information to send an event is:
Field |
Description |
---|---|
url |
URL that was exposed from Event Server |
name |
Event name registred on Event Server source |
version |
Event’s version |
payload |
Payload with necessery event information |
With this informatons we can send an event.
Instantiate the client:
from events_protocol.client import EventClient
client = EventClient(url="http://example.com/events/")
Send event:
# Exemplo passando apenas as informações essenciais
response = client.send_event(
name="event:example",
version=1,
payload={
"example": "example"
},
)
Or you can send the event passing all of the informatons:
response = client.send_event(
name="event:example",
version=1,
id="9230c47c-3bcf-11ea-b77f-2e728ce88125",
flow_id="a47830ca-3bcf-11ea-a232-2e728ce88125",
payload={
"example": "example"
},
identity={
"userId": "USER_ID",
},
metadata={
"date": "00-00-0000",
},
timeout=1000,
)
Server¶
An Event Server is composed by:
Component |
Description |
---|---|
handler |
Class that will receive and process the event |
register |
Class that will register the handler to Event Discovery |
EventSchema |
Event Schema will be accepted in the payload attribute |
Example:
from events_protocol.server.handler.event_handler_registry import EventRegister
from events_protocol.core.builder import EventBuilder, Event
from events_protocol.core.model.base import CamelPydanticMixin
from events_protocol.core.model.event import Event, ResponseEvent
from events_protocol.server.handler.event_handler import EventHandler
from events_protocol.server.parser.event_processor import EventProcessor
class MyEventSchema(CamelPydanticMixin):
example: str
class MyHandler(EventHandler):
_SCHEMA = MyEventSchema
@classmethod
def handle(cls, event: Event) -> ResponseEvent:
payload = cls.parse_event(event)
response = {"MyEventPayload": payload.example}
return EventBuilder.response_for(event, response)
class MyEventRegister(EventRegister):
event_name = "get:event:example"
event_version = 1
event_handler = MyHandler
MyEventRegister.register_event()
event_input = Event(
name="get:event:example",
version=1,
id="9230c47c-3bcf-11ea-b77f-2e728ce88125",
flow_id="a47830ca-3bcf-11ea-a232-2e728ce88125",
payload={
"example": "example"
},
identity={
"userId": "USER_ID",
},
metadata={
"date": "00-00-0000",
},
)
input_body = event_input.to_json()
response = EventProcessor.process_event(input_body)
Content¶
Client¶
The essencial information to send an event is:
Field |
Description |
---|---|
url |
URL that was exposed from Event Server |
name |
Event name registred on Event Server source |
version |
Event’s version |
payload |
Payload with necessery event information |
With this informatons we can send an event.
Instantiate the client:
from events_protocol.client import EventClient
client = EventClient(url="http://example.com/events/")
Send event:
# Exemplo passando apenas as informações essenciais
response = client.send_event(
name="event:example",
version=1,
payload={
"example": "example"
},
)
Or you can send the event passing all of the informatons:
response = client.send_event(
name="event:example",
version=1,
id="9230c47c-3bcf-11ea-b77f-2e728ce88125",
flow_id="a47830ca-3bcf-11ea-a232-2e728ce88125",
payload={
"example": "example"
},
identity={
"userId": "USER_ID",
},
metadata={
"date": "00-00-0000",
},
timeout=1000,
)
Server¶
An Event Server is composed by:
Component |
Description |
---|---|
handler |
Class that will receive and process the event |
register |
Class that will register the handler to Event Discovery |
EventSchema |
Event Schema will be accepted in the payload attribute |
Example:
from events_protocol.server.handler.event_handler_registry import EventRegister
from events_protocol.core.builder import EventBuilder, Event
from events_protocol.core.model.base import CamelPydanticMixin
from events_protocol.core.model.event import Event, ResponseEvent
from events_protocol.server.handler.event_handler import EventHandler
from events_protocol.server.parser.event_processor import EventProcessor
class MyEventSchema(CamelPydanticMixin):
example: str
class MyHandler(EventHandler):
_SCHEMA = MyEventSchema
@classmethod
def handle(cls, event: Event) -> ResponseEvent:
payload = cls.parse_event(event)
response = {"MyEventPayload": payload.example}
return EventBuilder.response_for(event, response)
class MyEventRegister(EventRegister):
event_name = "get:event:example"
event_version = 1
event_handler = MyHandler
MyEventRegister.register_event()
event_input = Event(
name="get:event:example",
version=1,
id="9230c47c-3bcf-11ea-b77f-2e728ce88125",
flow_id="a47830ca-3bcf-11ea-a232-2e728ce88125",
payload={
"example": "example"
},
identity={
"userId": "USER_ID",
},
metadata={
"date": "00-00-0000",
},
)
input_body = event_input.to_json()
response = EventProcessor.process_event(input_body)
Python API Reference¶
Client¶
Events are sent through the EventClient
, so far we can just use HTTP Layer to transport the event.
HTTP Layer¶
For now we just have Event transport over HTTP, we just use HttpClient
.
Server¶
Event Register¶
EventRegister: EventRegister
Event Handler¶
EventHandler: EventHandler
Event Processor¶
EventProcessor: EventProcessor
events_protocol
¶
Subpackages¶
events_protocol.client
¶
Subpackages¶
events_protocol.client.exception
¶events_protocol.client.exception.request_exception
¶-
exception
events_protocol.client.exception.request_exception.
BaseRequestException
(message: str)¶ Bases:
Exception
-
exception
events_protocol.client.exception.request_exception.
TimeoutException
¶ Bases:
events_protocol.client.exception.request_exception.BaseRequestException
-
exception
events_protocol.client.exception.request_exception.
FailedDependencyException
¶ Bases:
events_protocol.client.exception.request_exception.BaseRequestException
-
exception
events_protocol.client.exception.request_exception.
BadProtocolException
¶ Bases:
events_protocol.client.exception.request_exception.BaseRequestException
Submodules¶
events_protocol.client.event_client
¶-
class
events_protocol.client.event_client.
EventClient
(url: str)¶ -
send_event
(self, name: str, version: int, payload: Optional[Dict] = {}, id: str = None, flow_id: str = None, identity: Dict = {}, auth: Dict = {}, metadata: Dict = {}, timeout: Optional[int] = None)¶
-
send_request_event
(self, request_event: RequestEvent, timeout: Optional[int] = None)¶
-
parse_event
(self, raw_response: str)¶
-
build_request_event
(self, name: str, version: int, payload: Dict, id: str = None, flow_id: str = None, identity: Dict = {}, auth: Dict = {}, metadata: Dict = {})¶
-
events_protocol.client.http
¶Package Contents¶
-
class
events_protocol.client.
EventClient
(url: str)¶ -
send_event
(self, name: str, version: int, payload: Optional[Dict] = {}, id: str = None, flow_id: str = None, identity: Dict = {}, auth: Dict = {}, metadata: Dict = {}, timeout: Optional[int] = None)¶
-
send_request_event
(self, request_event: RequestEvent, timeout: Optional[int] = None)¶
-
parse_event
(self, raw_response: str)¶
-
build_request_event
(self, name: str, version: int, payload: Dict, id: str = None, flow_id: str = None, identity: Dict = {}, auth: Dict = {}, metadata: Dict = {})¶
-
events_protocol.core
¶
Subpackages¶
events_protocol.core.logging
¶events_protocol.core.logging.logger
¶-
class
events_protocol.core.logging.logger.
Logger
(log_name: str, log_format: str = '$BOLD%(asctime)s$RESET %(name)-12s %(levelname)-18s %(message)s', date_format: str = '%Y-%m-%d %H:%M:%S', level: int = logging.INFO, _custom_formatter: logging.Formatter = None)¶ Bases:
logging.LoggerAdapter
This class is responsible to be an interface for other classes and modules use the logging with the Events Protocol format.
- Events Protocol.package.utils.Logger
This class is responsible to be an interface for other classes and modules use the logging with the Events Protocol format
-
HANDLERS
:List[StreamHandler]¶
-
static
_create_log
(log_name: str)¶ Creates the logger object.
- log_namestr
The name of the logger.
- logging.Logger
return the logging.Logger with the logger name provided.
-
add_handler
(self, handler: logging.Handler, set_formatter: bool = True, formatter: logging.Formatter = None)¶ Method to add a new handler to the logger with the defined formatter and level.
- handlerHandler
The handler class to be added in the logger.
- set_formatterbool, optional
If the level and Formatter should be applied, by default True
- formatter: logging.Formatter, optional
The custom formatter to be set in the handler.
-
__add_default_handlers
(self)¶ Method to add the default handlers.
-
classmethod
get_logger
(cls, log_name: str, log_format: str = '$BOLD%(asctime)s$RESET %(name)-12s %(levelname)-18s %(message)s', date_format: str = '%Y-%m-%d %H:%M:%S', level: int = logging.INFO, _custom_formatter: logging.Formatter = None)¶ Get a logger object with Events Protocol Colored Formatter.
- log_namestr
Name of the logger instance
- log_formatstr, optional
Format of the logger message, by default “$BOLD%(asctime)s$RESET %(name)-12s %(levelname)-18s %(message)s”
- date_formatstr, optional
Date format of the logger message, by default “%Y-%m-%d %H:%M:%S”
- levelint, optional
- The logger level, you can use the ones predefined inside the logging module, or provide an int according to
the following pattern: CRITICAL/FATAL = 50, ERROR = 40, WARNING = 30, INFO = 20, DEBUG = 10, NOTSET = 0. For more information: https://docs.python.org/3/library/logging.html#levels, by default 20 (INFO).
- _custom_formatterlogging.Formatter, optional
Replaces the Events Protocol ColoredFormatter by the formatter provided and will ignore the log_format parameter.
- logging.Logger
The formatted logger.
-
class
events_protocol.core.logging.logger.
ColoredFormatter
(msg: str, datefmt: str = '%Y-%m-%d %H:%M:%S', use_color: bool = True)¶ Bases:
logging.Formatter
Events Protocol’s Custom Colored Formatter for Logging.
- Events Protocol.package.utils.ColoredFormatter
This class is responsible for setting the format for Events Protocol Loggings, by the default set timestamp and the module name with bold and will use the following color scheme:
GREEN: DEBUG BLUE: INFO YELLOW: WARNING RED: ERROR MAGENTA: CRITICAL
-
RESET_SEQ
= [0m¶
-
COLOR_SEQ
= [%dm¶
-
BOLD_SEQ
= [1m¶
-
COLORS
¶
-
format
(self, record: logging.LogRecord)¶ Method responsible for formatting the record.
- record: logging.LogRecord
The LogRecord with the message to be printed out.
- str
The message formatted.
-
classmethod
formatter_message
(cls, message: str, use_color: bool = True)¶ The method to parse the Events Protocol format string.
- messagestr
The message to be formatted.
- use_colorbool
Flag to signalize if the output should be colored or not.
- str
The message formatted.
-
events_protocol.core.logging.logger.
logger_monitor
(package_name: str = None, level: int = logging.INFO)¶ A logger decorator to monitor legacy methods and functions.
- package_namestr, optional.
The name of the package where the function or method is located. To get automatically use the __name__ variable.
- levelint, optional.
The level of logger to be shown, by default: logging.INFO
events_protocol.core.logging.picpay_logger
¶-
class
events_protocol.core.logging.picpay_logger.
PicpayLogger
(cls, level: int = logging.INFO, environment: str = 'PRD')¶ Bases:
logging.Logger
Create and format loggers in the PicPay standard format
- level: int
Logging level. Set using the enum defined in the logging std library
- logging.Logger
Interface to use the logs of the logging library
-
logger_name
= events_protocol¶
-
version
:str = UNDEFINED¶
-
is_production_environment
:bool = True¶
-
internal_logger
:logging.Logger¶
-
classmethod
set_version
(cls, version: str)¶ Set application version that will be logged
- version: str
Application version
-
__create_logger_with_environment
(self, name: str = 'events_protocol', environment: str = 'PRD')¶ Creates the logger using the desired environment
- name: str
Application version
- environment: str
Set the current environment that will be used in the application. If it’s PRD or HML it will format the logger in the PicPay application standards. Otherwise it’ll use development settings Default PRD
-
__dev_log
(self, level, message, *args, **kawrgs)¶ Default logger. Used for development environment.
- level: int
Logging level. Set using the enum defined in the logging std library
- message: str
Message that will be send to the logger
-
__prod_log
(self, level, message, *args, **kwargs)¶ Production format logger. Used for production and QA environment.
- level: int
Logging level. Set using the enum defined in the logging std library
- message: str
Message that will be send to the logger
-
_log
(self, level, message, *args, **kwargs)¶ Overrides log method of the logging library
- level: int
Logging level. Set using the enum defined in the logging std library
- message: str
Message that will be send to the logger
events_protocol.core.logging.supressor
¶-
events_protocol.core.logging.supressor.
supress_log
(f)¶
-
events_protocol.core.logging.supressor.
disable_logs
(log_names: typing.List[str] = []) → None¶
-
class
events_protocol.core.logging.
Logger
(log_name: str, log_format: str = '$BOLD%(asctime)s$RESET %(name)-12s %(levelname)-18s %(message)s', date_format: str = '%Y-%m-%d %H:%M:%S', level: int = logging.INFO, _custom_formatter: logging.Formatter = None)¶ Bases:
logging.LoggerAdapter
This class is responsible to be an interface for other classes and modules use the logging with the Events Protocol format.
- Events Protocol.package.utils.Logger
This class is responsible to be an interface for other classes and modules use the logging with the Events Protocol format
-
HANDLERS
:List[StreamHandler]¶
-
static
_create_log
(log_name: str)¶ Creates the logger object.
- log_namestr
The name of the logger.
- logging.Logger
return the logging.Logger with the logger name provided.
-
add_handler
(self, handler: logging.Handler, set_formatter: bool = True, formatter: logging.Formatter = None)¶ Method to add a new handler to the logger with the defined formatter and level.
- handlerHandler
The handler class to be added in the logger.
- set_formatterbool, optional
If the level and Formatter should be applied, by default True
- formatter: logging.Formatter, optional
The custom formatter to be set in the handler.
-
__add_default_handlers
(self)¶ Method to add the default handlers.
-
classmethod
get_logger
(cls, log_name: str, log_format: str = '$BOLD%(asctime)s$RESET %(name)-12s %(levelname)-18s %(message)s', date_format: str = '%Y-%m-%d %H:%M:%S', level: int = logging.INFO, _custom_formatter: logging.Formatter = None)¶ Get a logger object with Events Protocol Colored Formatter.
- log_namestr
Name of the logger instance
- log_formatstr, optional
Format of the logger message, by default “$BOLD%(asctime)s$RESET %(name)-12s %(levelname)-18s %(message)s”
- date_formatstr, optional
Date format of the logger message, by default “%Y-%m-%d %H:%M:%S”
- levelint, optional
- The logger level, you can use the ones predefined inside the logging module, or provide an int according to
the following pattern: CRITICAL/FATAL = 50, ERROR = 40, WARNING = 30, INFO = 20, DEBUG = 10, NOTSET = 0. For more information: https://docs.python.org/3/library/logging.html#levels, by default 20 (INFO).
- _custom_formatterlogging.Formatter, optional
Replaces the Events Protocol ColoredFormatter by the formatter provided and will ignore the log_format parameter.
- logging.Logger
The formatted logger.
-
class
events_protocol.core.logging.
ColoredFormatter
(msg: str, datefmt: str = '%Y-%m-%d %H:%M:%S', use_color: bool = True)¶ Bases:
logging.Formatter
Events Protocol’s Custom Colored Formatter for Logging.
- Events Protocol.package.utils.ColoredFormatter
This class is responsible for setting the format for Events Protocol Loggings, by the default set timestamp and the module name with bold and will use the following color scheme:
GREEN: DEBUG BLUE: INFO YELLOW: WARNING RED: ERROR MAGENTA: CRITICAL
-
RESET_SEQ
= [0m¶
-
COLOR_SEQ
= [%dm¶
-
BOLD_SEQ
= [1m¶
-
COLORS
¶
-
format
(self, record: logging.LogRecord)¶ Method responsible for formatting the record.
- record: logging.LogRecord
The LogRecord with the message to be printed out.
- str
The message formatted.
-
classmethod
formatter_message
(cls, message: str, use_color: bool = True)¶ The method to parse the Events Protocol format string.
- messagestr
The message to be formatted.
- use_colorbool
Flag to signalize if the output should be colored or not.
- str
The message formatted.
-
events_protocol.core.logging.
logger_monitor
(package_name: str = None, level: int = logging.INFO)¶ A logger decorator to monitor legacy methods and functions.
- package_namestr, optional.
The name of the package where the function or method is located. To get automatically use the __name__ variable.
- levelint, optional.
The level of logger to be shown, by default: logging.INFO
-
class
events_protocol.core.logging.
PicpayLogger
(cls, level: int = logging.INFO, environment: str = 'PRD')¶ Bases:
logging.Logger
Create and format loggers in the PicPay standard format
- level: int
Logging level. Set using the enum defined in the logging std library
- logging.Logger
Interface to use the logs of the logging library
-
logger_name
= events_protocol¶
-
version
:str = UNDEFINED¶
-
is_production_environment
:bool = True¶
-
internal_logger
:logging.Logger¶
-
classmethod
set_version
(cls, version: str)¶ Set application version that will be logged
- version: str
Application version
-
__create_logger_with_environment
(self, name: str = 'events_protocol', environment: str = 'PRD')¶ Creates the logger using the desired environment
- name: str
Application version
- environment: str
Set the current environment that will be used in the application. If it’s PRD or HML it will format the logger in the PicPay application standards. Otherwise it’ll use development settings Default PRD
-
__dev_log
(self, level, message, *args, **kawrgs)¶ Default logger. Used for development environment.
- level: int
Logging level. Set using the enum defined in the logging std library
- message: str
Message that will be send to the logger
-
__prod_log
(self, level, message, *args, **kwargs)¶ Production format logger. Used for production and QA environment.
- level: int
Logging level. Set using the enum defined in the logging std library
- message: str
Message that will be send to the logger
-
_log
(self, level, message, *args, **kwargs)¶ Overrides log method of the logging library
- level: int
Logging level. Set using the enum defined in the logging std library
- message: str
Message that will be send to the logger
events_protocol.core.model
¶events_protocol.core.model.base
¶-
events_protocol.core.model.base.
_to_camel
(string: str) → str¶
-
class
events_protocol.core.model.base.
Field
¶ -
name
:str¶
-
error_type
:str¶
-
message
:str¶
-
to_dict
(self)¶
-
-
exception
events_protocol.core.model.base.
ValidationError
¶ Bases:
Exception
-
fields
:typing.List[Field]¶
-
to_dict
(self)¶
-
to_json
(self)¶
-
-
class
events_protocol.core.model.base.
BaseModel
(__pydantic_self__, **data)¶ Bases:
pydantic.BaseModel
-
classmethod
from_object
(cls, obj: BaseModel)¶
-
to_dict
(self, *args, **kwargs)¶
-
to_json
(self, *args, **kwargs)¶
-
classmethod
-
class
events_protocol.core.model.base.
CamelPydanticMixin
(by_alias=True, **data: typing.Any)¶ Bases:
events_protocol.core.model.base.BaseModel
-
classmethod
from_json
(cls, data: str)¶
-
classmethod
events_protocol.core.model.event
¶-
events_protocol.core.model.event.
PayloadType
¶
-
class
events_protocol.core.model.event.
Event
¶ Bases:
events_protocol.core.model.base.CamelPydanticMixin
-
name
:str¶
-
version
:int¶
-
payload
:PayloadType¶
-
id
:Optional[str]¶
-
flow_id
:Optional[str]¶
-
identity
:Optional[Dict[str, Any]]¶
-
auth
:Optional[Dict[str, Any]]¶
-
metadata
:Optional[Dict[str, Any]]¶
-
payload_as
(self, clazz: CamelPydanticMixin)¶
-
identity_as
(self, clazz: Generic)¶
-
auth_as
(self, clazz: Generic)¶
-
property
user_id
(self)¶
-
property
user_type
(self)¶
-
property
user
(self)¶
-
property
origin
(self)¶
-
-
class
events_protocol.core.model.event.
ResponseEvent
¶ Bases:
events_protocol.core.model.event.Event
-
static
from_event
(event: Event, event_type: EventType = EventSuccessType.SUCCESS)¶
-
property
is_success
(self)¶
-
property
is_redirect
(self)¶
-
property
is_error
(self)¶
-
property
_event_name
(self)¶
-
property
event_type
(self)¶
-
property
error_type
(self)¶
-
static
-
class
events_protocol.core.model.event.
RequestEvent
¶
-
class
events_protocol.core.model.event.
EventMessage
¶ Bases:
events_protocol.core.model.base.CamelPydanticMixin
-
code
:str¶
-
parameters
:Dict[str, Optional[Any]]¶
-
events_protocol.core.model.event_type
¶-
class
events_protocol.core.model.event_type.
EventType
¶ Bases:
enum.Enum
-
classmethod
is_in
(cls, item: typing.Any)¶
-
__str__
(self)¶
-
classmethod
-
class
events_protocol.core.model.event_type.
EventErrorType
¶ Bases:
events_protocol.core.model.event_type.EventType
-
GENERIC
= error¶
-
BAD_PROTOCOL
= badProtocol¶
-
BAD_REQUEST
= badRequest¶
-
UNAUTHORIZED
= unauthorized¶
-
NOT_FOUND
= notFound¶
-
FORBIDDEN
= forbidden¶
-
USER_DENIED
= userDenied¶
-
RESOURCE_DENIED
= resourceDenied¶
-
EXPIRED
= expired¶
-
UNKNOWN
= unknown¶
-
classmethod
get_type
(cls, error: str)¶
-
-
class
events_protocol.core.model.event_type.
EventSuccessType
¶ Bases:
events_protocol.core.model.event_type.EventType
-
SUCCESS
= response¶
-
REDIRECT
= redirect¶
-
classmethod
get_type
(cls, success: str)¶
-
events_protocol.core.model.payload
¶events_protocol.core.model.user
¶events_protocol.core.utils
¶events_protocol.core.utils.config
¶-
events_protocol.core.utils.config.
config
(config_name: str, default: typing.Any = None, cast: typing.Type = None, env_file=os.environ.get('APPLICATION_ENVIRONMENT') or 'dev')¶
events_protocol.core.utils.encoder
¶-
events_protocol.core.utils.
config
(config_name: str, default: typing.Any = None, cast: typing.Type = None, env_file=os.environ.get('APPLICATION_ENVIRONMENT') or 'dev')¶
events_protocol.core.views
¶events_protocol.core.views.aiohttp
¶-
async
events_protocol.core.views.aiohttp.
init_app
(routes: typing.List[typing.Tuple[View, str]], middlewares: typing.Iterable[AIOHTTPMiddleware] = []) → Application¶
-
events_protocol.core.views.aiohttp.
_NOT_ALLOWED_AIOHTTP
¶
-
class
events_protocol.core.views.aiohttp.
AIOHTTPView
(*args, **kwargs)¶ Bases:
events_protocol.core.views.base.BaseView
,aiohttp.web.View
-
request
:Request¶
-
body
:str¶
-
__iter__
(self)¶
-
async
get_body
(self)¶
-
async
get
(self, *args, **kwargs)¶
-
async
_get
(self, *args, **kwargs)¶
-
async
put
(self, *args, **kwargs)¶
-
async
_put
(self, *args, **kwargs)¶
-
async
post
(self, *args, **kwargs)¶
-
async
_post
(self, *args, **kwargs)¶
-
async
delete
(self, *args, **kwargs)¶
-
async
_delete
(self, *args, **kwargs)¶
-
get_query_args
(self)¶
-
async
write_response
(self, http_status: HTTPStatus, response_body: dict, headers: dict = {})¶
-
-
class
events_protocol.core.views.aiohttp.
AIOHTTPHealthCheckView
¶ Bases:
events_protocol.core.views.base.BaseHealth
,events_protocol.core.views.aiohttp.AIOHTTPView
events_protocol.core.views.base
¶-
class
events_protocol.core.views.base.
BaseView
¶ -
request
¶
-
_base_header
¶
-
async
send_response
(self, message: str = None, data: dict = None, description: str = None, http_status: int = None, code: int = 1000, log_level=None)¶
-
abstract
get_query_args
(self)¶
-
abstract async
write_response
(self, http_status: int, description: str, response_body: dict, log_level: str = None, headers: dict = {})¶
-
async
_treat_general_exception
(self, exception: Exception)¶
-
-
class
events_protocol.core.views.base.
BaseHealth
¶ Bases:
events_protocol.core.views.base.BaseView
-
_checkers
:typing.List[typing.Dict[str, typing.Union[typing.Awaitable[typing.Callable], typing.Callable]]] = []¶
-
classmethod
add_checker
(cls, checker_name: str, checker_func: typing.Union[typing.Awaitable[typing.Callable], typing.Callable])¶
-
async
_get
(self)¶
-
events_protocol.core.views.event
¶-
class
events_protocol.core.views.event.
DataDogAsyncEventProcessor
¶ Bases:
events_protocol.server.parser.event_processor.AsyncEventProcessor
-
async classmethod
process_event
(cls, raw_event: str, request)¶
-
async classmethod
-
class
events_protocol.core.views.event.
EventView
¶ Bases:
events_protocol.core.views.aiohttp.AIOHTTPView
-
async
_post
(self)¶
-
async
-
class
events_protocol.core.views.
BaseHealth
¶ Bases:
events_protocol.core.views.base.BaseView
-
_checkers
:typing.List[typing.Dict[str, typing.Union[typing.Awaitable[typing.Callable], typing.Callable]]] = []¶
-
classmethod
add_checker
(cls, checker_name: str, checker_func: typing.Union[typing.Awaitable[typing.Callable], typing.Callable])¶
-
async
_get
(self)¶
-
-
class
events_protocol.core.views.
BaseView
¶ -
request
¶
-
_base_header
¶
-
async
send_response
(self, message: str = None, data: dict = None, description: str = None, http_status: int = None, code: int = 1000, log_level=None)¶
-
abstract
get_query_args
(self)¶
-
abstract async
write_response
(self, http_status: int, description: str, response_body: dict, log_level: str = None, headers: dict = {})¶
-
async
_treat_general_exception
(self, exception: Exception)¶
-
-
async
events_protocol.core.views.
init_app
(routes: typing.List[typing.Tuple[View, str]], middlewares: typing.Iterable[AIOHTTPMiddleware] = []) → Application¶
-
events_protocol.core.views.
_NOT_ALLOWED_AIOHTTP
¶
-
class
events_protocol.core.views.
AIOHTTPView
(*args, **kwargs)¶ Bases:
events_protocol.core.views.base.BaseView
,aiohttp.web.View
-
request
:Request¶
-
body
:str¶
-
__iter__
(self)¶
-
async
get_body
(self)¶
-
async
get
(self, *args, **kwargs)¶
-
async
_get
(self, *args, **kwargs)¶
-
async
put
(self, *args, **kwargs)¶
-
async
_put
(self, *args, **kwargs)¶
-
async
post
(self, *args, **kwargs)¶
-
async
_post
(self, *args, **kwargs)¶
-
async
delete
(self, *args, **kwargs)¶
-
async
_delete
(self, *args, **kwargs)¶
-
get_query_args
(self)¶
-
async
write_response
(self, http_status: HTTPStatus, response_body: dict, headers: dict = {})¶
-
-
class
events_protocol.core.views.
AIOHTTPHealthCheckView
¶ Bases:
events_protocol.core.views.base.BaseHealth
,events_protocol.core.views.aiohttp.AIOHTTPView
-
class
events_protocol.core.views.
AIOHTTPView
(*args, **kwargs) Bases:
events_protocol.core.views.base.BaseView
,aiohttp.web.View
-
request
:Request
-
body
:str
-
__iter__
(self)
-
async
get_body
(self)
-
async
get
(self, *args, **kwargs)
-
async
_get
(self, *args, **kwargs)
-
async
put
(self, *args, **kwargs)
-
async
_put
(self, *args, **kwargs)
-
async
post
(self, *args, **kwargs)
-
async
_post
(self, *args, **kwargs)
-
async
delete
(self, *args, **kwargs)
-
async
_delete
(self, *args, **kwargs)
-
get_query_args
(self)
-
async
write_response
(self, http_status: HTTPStatus, response_body: dict, headers: dict = {})
-
-
class
events_protocol.core.views.
DataDogAsyncEventProcessor
¶ Bases:
events_protocol.server.parser.event_processor.AsyncEventProcessor
-
async classmethod
process_event
(cls, raw_event: str, request)¶
-
async classmethod
-
class
events_protocol.core.views.
EventView
¶ Bases:
events_protocol.core.views.aiohttp.AIOHTTPView
-
async
_post
(self)¶
-
async
-
class
events_protocol.core.views.
EventContextHolder
¶ -
static
get
()¶
-
static
set
(event_context: EventContext)¶
-
static
clean
()¶
-
classmethod
with_context
(cls, context_id: IdType, context_flow_id: IdType, event_name: str, event_version: int, user_id: str = None, user_type: str = None)¶
-
async classmethod
with_async_context
(cls, context_id: IdType, context_flow_id: IdType, event_name: str, event_version: int, user_id: str = None, user_type: str = None)¶
-
static
-
exception
events_protocol.core.views.
EventException
(parameters: Dict[str, Optional[Any]], expected: bool = False)¶ Bases:
RuntimeError
-
_CODE
:str =¶
-
_TYPE
:EventErrorType¶
-
property
code
(self)¶
-
property
event_error_type
(self)¶
-
-
exception
events_protocol.core.views.
EventParsingException
¶ Bases:
events_protocol.core.exception.EventException
-
_CODE
= INVALID_COMMUNICATION_PROTOCOL¶
-
_TYPE
¶
-
-
exception
events_protocol.core.views.
ValidationError
¶ Bases:
Exception
-
fields
:typing.List[Field]¶
-
to_dict
(self)¶
-
to_json
(self)¶
-
-
class
events_protocol.core.views.
Event
¶ Bases:
events_protocol.core.model.base.CamelPydanticMixin
-
name
:str¶
-
version
:int¶
-
payload
:PayloadType¶
-
id
:Optional[str]¶
-
flow_id
:Optional[str]¶
-
identity
:Optional[Dict[str, Any]]¶
-
auth
:Optional[Dict[str, Any]]¶
-
metadata
:Optional[Dict[str, Any]]¶
-
payload_as
(self, clazz: CamelPydanticMixin)¶
-
identity_as
(self, clazz: Generic)¶
-
auth_as
(self, clazz: Generic)¶
-
property
user_id
(self)¶
-
property
user_type
(self)¶
-
property
user
(self)¶
-
property
origin
(self)¶
-
-
class
events_protocol.core.views.
ResponseEvent
¶ Bases:
events_protocol.core.model.event.Event
-
static
from_event
(event: Event, event_type: EventType = EventSuccessType.SUCCESS)¶
-
property
is_success
(self)¶
-
property
is_redirect
(self)¶
-
property
is_error
(self)¶
-
property
_event_name
(self)¶
-
property
event_type
(self)¶
-
property
error_type
(self)¶
-
static
-
class
events_protocol.core.views.
EventHandler
¶ Bases:
abc.ABC
-
event_name
:str¶
-
event_version
:typing.Union[None, int]¶
-
_SCHEMA
:CamelPydanticMixin¶
-
__post_init__
(self)¶
-
abstract
handle
(cls, event: RequestEvent)¶
-
classmethod
parse_event
(cls, event: Event)¶
-
-
class
events_protocol.core.views.
AsyncEventHandler
¶ Bases:
events_protocol.server.handler.event_handler.EventHandler
,abc.ABC
-
_SCHEMA
:CamelPydanticMixin¶
-
abstract async
handle
(cls, event: RequestEvent)¶
-
-
class
events_protocol.core.views.
EventDiscovery
¶ Bases:
events_protocol.core.logging.mixins.loggable.LoggableMixin
-
_events
:typing.Dict[typing.Tuple[str, int], typing.Union[EventHandler, AsyncEventHandler]]¶
-
_EVENT_NAME_STD
:str = [a-z_]+[a-z]:[a-z_]+[a-z](:[a-z]+[a-z])*¶
-
classmethod
add
(cls, event_name: str, event_handler: EventHandler, version: int = 1)¶
-
classmethod
get
(cls, event_name: str, event_version: int = 1)¶
-
-
class
events_protocol.core.views.
EventBuilder
¶ Bases:
events_protocol.core.logging.mixins.loggable.LoggableMixin
-
classmethod
error_for
(cls, exception: EventException, event: typing.Optional[Event] = Event(name='', version=1, id=str(uuid4())), id_flow=str(uuid4()), loggable=True)¶
-
classmethod
response_for
(cls, event: Event, payload: PayloadType, event_type: EventSuccessType = EventSuccessType.SUCCESS, loggable=True)¶
-
classmethod
-
class
events_protocol.core.views.
EventProcessor
¶ Bases:
events_protocol.core.logging.mixins.loggable.LoggableMixin
-
event_discovery
¶
-
event_validator
¶
-
classmethod
process_event
(cls, raw_event: str)¶
-
classmethod
parse_event
(cls, str_event: str)¶
-
-
class
events_protocol.core.views.
AsyncEventProcessor
¶ Bases:
events_protocol.server.parser.event_processor.EventProcessor
-
async classmethod
process_event
(cls, raw_event: str)¶
-
async classmethod
Submodules¶
events_protocol.core.builder
¶-
class
events_protocol.core.builder.
EventBuilder
¶ Bases:
events_protocol.core.logging.mixins.loggable.LoggableMixin
-
classmethod
error_for
(cls, exception: EventException, event: typing.Optional[Event] = Event(name='', version=1, id=str(uuid4())), id_flow=str(uuid4()), loggable=True)¶
-
classmethod
response_for
(cls, event: Event, payload: PayloadType, event_type: EventSuccessType = EventSuccessType.SUCCESS, loggable=True)¶
-
classmethod
events_protocol.core.context
¶-
events_protocol.core.context.
IdType
¶
-
class
events_protocol.core.context.
EventContext
¶ Bases:
events_protocol.core.model.base.BaseModel
-
id
:typing.Optional[IdType]¶
-
flow_id
:typing.Optional[IdType]¶
-
event_name
:typing.Optional[str]¶
-
event_version
:typing.Optional[int]¶
-
user_id
:typing.Optional[str]¶
-
user_type
:typing.Optional[str]¶
-
-
events_protocol.core.context.
_context
:ContextVar[EventContext]¶
-
class
events_protocol.core.context.
EventContextHolder
¶ -
static
get
()¶
-
static
set
(event_context: EventContext)¶
-
static
clean
()¶
-
classmethod
with_context
(cls, context_id: IdType, context_flow_id: IdType, event_name: str, event_version: int, user_id: str = None, user_type: str = None)¶
-
async classmethod
with_async_context
(cls, context_id: IdType, context_flow_id: IdType, event_name: str, event_version: int, user_id: str = None, user_type: str = None)¶
-
static
events_protocol.core.exception
¶-
exception
events_protocol.core.exception.
EventException
(parameters: Dict[str, Optional[Any]], expected: bool = False)¶ Bases:
RuntimeError
-
_CODE
:str =¶
-
_TYPE
:EventErrorType¶
-
property
code
(self)¶
-
property
event_error_type
(self)¶
-
-
exception
events_protocol.core.exception.
MessagebleEventException
(message: str)¶
-
exception
events_protocol.core.exception.
EventNotFoundException
¶ Bases:
events_protocol.core.exception.MessagebleEventException
-
_CODE
= EVENT_NOT_FOUND¶
-
_TYPE
¶
-
-
exception
events_protocol.core.exception.
MissingEventInformationException
¶ Bases:
events_protocol.core.exception.EventException
-
_CODE
= MISSING_FIELDS¶
-
_TYPE
¶
-
-
exception
events_protocol.core.exception.
EventParsingException
¶ Bases:
events_protocol.core.exception.EventException
-
_CODE
= INVALID_COMMUNICATION_PROTOCOL¶
-
_TYPE
¶
-
-
exception
events_protocol.core.exception.
EventFailedDependencyException
¶ Bases:
events_protocol.core.exception.MessagebleEventException
-
_CODE
= FAILED_DEPENDENCY¶
-
-
exception
events_protocol.core.exception.
EventTimeoutException
¶ Bases:
events_protocol.core.exception.MessagebleEventException
-
_CODE
= EVENT_TIMEOUT¶
-
events_protocol.core.urls
¶-
events_protocol.core.urls.
URL_PATTERNS
= [None, None]¶
events_protocol.server
¶
Subpackages¶
events_protocol.server.handler
¶events_protocol.server.handler.event_handler
¶-
class
events_protocol.server.handler.event_handler.
EventHandler
¶ Bases:
abc.ABC
-
event_name
:str¶
-
event_version
:typing.Union[None, int]¶
-
_SCHEMA
:CamelPydanticMixin¶
-
__post_init__
(self)¶
-
abstract
handle
(cls, event: RequestEvent)¶
-
classmethod
parse_event
(cls, event: Event)¶
-
-
class
events_protocol.server.handler.event_handler.
AsyncEventHandler
¶ Bases:
events_protocol.server.handler.event_handler.EventHandler
,abc.ABC
-
_SCHEMA
:CamelPydanticMixin¶
-
abstract async
handle
(cls, event: RequestEvent)¶
-
events_protocol.server.handler.event_handler_discovery
¶-
class
events_protocol.server.handler.event_handler_discovery.
EventDiscovery
¶ Bases:
events_protocol.core.logging.mixins.loggable.LoggableMixin
-
_events
:typing.Dict[typing.Tuple[str, int], typing.Union[EventHandler, AsyncEventHandler]]¶
-
_EVENT_NAME_STD
:str = [a-z_]+[a-z]:[a-z_]+[a-z](:[a-z]+[a-z])*¶
-
classmethod
add
(cls, event_name: str, event_handler: EventHandler, version: int = 1)¶
-
classmethod
get
(cls, event_name: str, event_version: int = 1)¶
-
events_protocol.server.handler.safe_event_handler
¶-
class
events_protocol.server.handler.safe_event_handler.
SafeEventHandler
¶ Bases:
events_protocol.server.handler.event_handler.AsyncEventHandler
Defines a safe event handler
- event_namestr
- Event endpoint. It should contain only letters and respect the following format:
{{name}}:{{name}}
- event_versionint
Event version
Change the __safe_event_handler to contain the calls to the desired service The run method will be override to create a new handler
SafeHandler
-
event_name
:str¶
-
event_version
:typing.Union[None, int]¶
-
async classmethod
handle
(cls, event: Event)¶ Method that will safely handle the current event in the events_protocol library
- event: Event
Event sent by the user
- ResponseEvent
Response event containing the result of the service
-
async classmethod
run
(cls, event: Event)¶
-
async classmethod
__safe_event_handler
(cls, event: Event)¶ Implements the integrity verification of the payload and runs the service
- event: Event
Event sent by the user
- ResponseEvent
Response event containing the result of the service
-
class
events_protocol.server.handler.
SafeEventHandler
¶ Bases:
events_protocol.server.handler.event_handler.AsyncEventHandler
Defines a safe event handler
- event_namestr
- Event endpoint. It should contain only letters and respect the following format:
{{name}}:{{name}}
- event_versionint
Event version
Change the __safe_event_handler to contain the calls to the desired service The run method will be override to create a new handler
SafeHandler
-
event_name
:str¶
-
event_version
:typing.Union[None, int]¶
-
async classmethod
handle
(cls, event: Event)¶ Method that will safely handle the current event in the events_protocol library
- event: Event
Event sent by the user
- ResponseEvent
Response event containing the result of the service
-
async classmethod
run
(cls, event: Event)¶
-
async classmethod
__safe_event_handler
(cls, event: Event)¶ Implements the integrity verification of the payload and runs the service
- event: Event
Event sent by the user
- ResponseEvent
Response event containing the result of the service
events_protocol.server.parser
¶events_protocol.server.parser.event_processor
¶-
class
events_protocol.server.parser.event_processor.
EventProcessor
¶ Bases:
events_protocol.core.logging.mixins.loggable.LoggableMixin
-
event_discovery
¶
-
event_validator
¶
-
classmethod
process_event
(cls, raw_event: str)¶
-
classmethod
parse_event
(cls, str_event: str)¶
-
-
class
events_protocol.server.parser.event_processor.
AsyncEventProcessor
¶ Bases:
events_protocol.server.parser.event_processor.EventProcessor
-
async classmethod
process_event
(cls, raw_event: str)¶
-
async classmethod
Package Contents¶
-
events_protocol.
__version__
= 0.3.2¶