Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/guiabolso/events-protocol-python
Library to be a Client and Server using event protocol
https://github.com/guiabolso/events-protocol-python
events-protocol guiabolso python python3
Last synced: about 1 month ago
JSON representation
Library to be a Client and Server using event protocol
- Host: GitHub
- URL: https://github.com/guiabolso/events-protocol-python
- Owner: GuiaBolso
- License: apache-2.0
- Created: 2020-01-10T20:53:57.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-26T21:38:19.000Z (almost 2 years ago)
- Last Synced: 2024-11-13T06:27:49.369Z (about 1 month ago)
- Topics: events-protocol, guiabolso, python, python3
- Language: Python
- Homepage: https://events-protocol.readthedocs.io/en/stable/index.html
- Size: 218 KB
- Stars: 4
- Watchers: 5
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
events-protocol
### Configurando para desenvolvimento local
Para fazer alterações na biblioteca localmente e passar pelos checks de formatação é necessário executar os seguintes passos:Primeiramente, deve-se instalar o [Homebrew](https://brew.sh/index_pt-br).
Depois, podemos instalar o pipenv e o pyenv.
```
pip install pipenv
brew install pyenv
```
Então, deve-se buildar a biblioteca pelo Makefile, e depois de configurado o ambiente, deve-se garantir o funcionamento do pre-commit
```
make dev
pre-commit install
```
Com essa configuração aplicada, ao commitar a lib Black será acionada automaticamente para fazer o linting do código.Caso o código falhe na formatação, será emitido um status "Failed", e a biblioteca é acionada para reformatar.
Então, basta só commitar novamente para registrar as mudanças, dessa vez com a formatação correta.
### Como usar
#### ClientAs informações essenciais para enviar o evento são: *url*, *name*, *version* e *payload*.
Apenas com estas informações já é possivel enviar um evento.
```pyt
from events_protocol.client import EventClient# Instancia o client
client = EventClient(url="http://example.com/events/")# Exemplo passando apenas as informações essenciais
response = client.send_event(
name="event:example",
version=1,
payload={
"example": "example"
},
)# Exemplo passando todas as informações
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
Um server é composto por *handler*, *register* e *EventSchema*.
Abaixo se encontra um exemplo de utilização.
```pyt
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 EventProcessorclass MyEventSchema(CamelPydanticMixin):
example: strclass 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 = MyHandlerMyEventRegister.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()## Apos todos eventos registrados, registre uma rota "/events" no seu framework web de preferência e processe o body utilizando o seguinte comando
response = EventProcessor.process_event(input_body)```