pact-foundation / pact-foundation/pact-python
Async state and message handler
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 684
- Forks
- 147
- Avg merge
- 3d 23h
- Merged PRs (30d)
- 12
Description
Have you read the Contributing Guidelines on issues?
- I have read the Contributing Guidelines on issues.
Description
Original suggestion by Val on Slack
To allow the state_handler and message_handler functions to handle asynchronous functions.
Motivation
These two functions are used to interface with code outside of Pact Python to setup/teardown states and generate messages. Especially in the case of the state setup and teardown, a common pattern would be to make a number of calls to (mocked or not) databases or other services to ensure they are in a particular state. These requests can be significantly sped up by running them in parallel, such as with an asyncio.gather call or using a task group.
Have you tried building it?
Not yet, but I will first open this issue and ask for anyone with specific examples to work towards.
While asynchronous function bring a number of advantages, they can also bring some complications. In particular:
- There are a number of underlying runtimes:
asyncio,trio,curio. If possible, it would be ideal to support all of these. - The use of threads has implications for
ContextVar(if used)
Self-service
- I'd be willing to contribute this feature to Pact Python myself.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the state_handler and message_handler entry points and reading how synchronous functions are currently invoked. Compare the requirements of asyncio, trio, and curio, including ContextVar and thread implications; done means the supported asynchronous handlers work without breaking existing synchronous handlers and are covered by tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- testing-qa
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100