Skip to main content

Asynchronous expectations (Jobs/tasks) for future events.

Project description

Expectations for Python

Asynchronous expectations (Jobs/tasks) for future events.

If client user sends a message to server, a new eid is generated and sent with the message. If server sends back a message with an eid, the eid is checked against our expectations. If eid matches an expectation, that expectation's callback will run. If server sends a message without an eid, no expectations will be checked.

Installation

Pypi package is present.

pip install expectations

Implementation

Important steps are marked 1-4.

import asyncio
import os
import json
import aiohttp
from expectations import Expector, eidgen

HOST = os.getenv('HOST', '127.0.0.1')
PORT = int(os.getenv('PORT', 1339))

URL = f'http://{HOST}:{PORT}/ws'


def my_expected_proc(data):  # Simple function we will use as our expectation callback.
	print('Processed expectation:', data)


async def main():
	session = aiohttp.ClientSession()
	expector = Expector()  # 1: Get setup.
	async with session.ws_connect(URL) as ws:
		async for msg in ws:
			try:
				server_message = msg.data.rstrip()
				j = json.loads(server_message)

				if 'eid' in j:
					# 4: See if incoming eid from server matches any of our expectations.
					expected = await expector.check_expectations(j['eid'], server_message)
					if expected:
						# Give expected callback a second to process (For demo purposes; so it runs before prompt)
						await asyncio.sleep(1000)
					else:
						raise Exception(f'Unexpected message from server: {msg}')
			except Exception as ex:
				print(ex)
			finally:
				await prompt_and_send(ws, expector)

			if msg.type in (aiohttp.WSMsgType.CLOSED,
			                aiohttp.WSMsgType.ERROR):
				break


async def prompt_and_send(ws, expector):
	user_msg = input('Type a message to send to the server: ')
	if user_msg == 'exit':
		print('Exiting!')
		raise SystemExit(0)

	eid = eidgen()  # 2: Create new expectation ID (eid).
	await expector.expect(eid, my_expected_proc)  # 3: Create new expectation using eid and any callback function.

	await ws.send_str(json.dumps({
		'method': user_msg,
		'eid': eid  # eid is sent with msg (For demo). If we get this eid back later, the expectation callback will run.
	}))


if __name__ == '__main__':
	print('Type "exit" to quit')
	loop = asyncio.get_event_loop()
	loop.run_until_complete(main())

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

expectations-1.0.1.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

expectations-1.0.1-py3-none-any.whl (3.9 kB view details)

Uploaded Python 3

File details

Details for the file expectations-1.0.1.tar.gz.

File metadata

  • Download URL: expectations-1.0.1.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.0 requests/2.24.0 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0

File hashes

Hashes for expectations-1.0.1.tar.gz
Algorithm Hash digest
SHA256 0d97c6274c1c32df52666c93c296658bc550b9a9ab5af0e23b35a2ebac78dc02
MD5 14f9cdff86fccebd3661d166dda01489
BLAKE2b-256 02f3eaeb2f9e3e1910fcf9ea3864b46058babd00f38bf6da5d63e782b7788914

See more details on using hashes here.

File details

Details for the file expectations-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: expectations-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 3.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.0 requests/2.24.0 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0

File hashes

Hashes for expectations-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 40e149ff1404392b57a1ebc78354eb7254fed5774ee5bcbf968c30293e6dffa3
MD5 05820c28d1c864caf82e2203642e42a1
BLAKE2b-256 e0bc7daa6d8a4e9169ee70206a3288f8fbd54719643a538efa24e0e776b2df89

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page