Provides a number of utilities intended to support intermediate to advanced Python programming.
The mock, requests and six libraries.
Version representation
from webkitcorepy import Version version = Version(1, 2, 3)
Unicode stream management across Python 2 and 3
from webkitcorepy import BytesIO, StringIO, UnicodeIO, unicode
Encoding and decoding byte strings and unicode strings
from webkitcorepy import string_utils string_utils.encode(...) string_utils.decode(...)
Automatically install libraries on import.
from webkitcorepy import AutoInstall AutoInstall.register(Package('requests', Version(2, 24))) import requests
Mocking basic time and sleep calls
import time from webkitcorepy import mocks with mocks.Time: stamp = time.time() time.sleep(5)
Capturing stdout, stderr and logging output for testing
capturer = OutputCapture() with capturer: print('data\n') assert capturer.stdout.getvalue() == 'data\n'
Capturing stdout, stderr and logging output for testing
capturer = OutputCapture() with capturer: print('data\n') assert capturer.stdout.getvalue() == 'data\n'
Timeout context:
import time from webkitcorepy import Timeout with Timeout(5, handler=RuntimeError('Exceeded 5 second timeout')): time.sleep(4)
subprocess.run replacement:
import sys from webkitcorepy import run result = run([sys.executable, '-c', 'print("message")'], capture_output=True, encoding='utf-8')
Mocking of subprocess commands:
from webkitcorepy import mocks, run with mocks.Subprocess( 'ls', completion=mocks.ProcessCompletion(returncode=0, stdout='file1.txt\nfile2.txt\n'), ): result = run(['ls'], capture_output=True, encoding='utf-8') assert result.returncode == 0 assert result.stdout == 'file1.txt\nfile2.txt\n'
The mocking system for subprocess also supports other subprocess APIs based on Popen:
with mocks.Subprocess( 'ls', completion=mocks.ProcessCompletion(returncode=0, stdout='file1.txt\nfile2.txt\n'), ): assert subprocess.check_output(['ls']) == b'file1.txt\nfile2.txt\n' assert subprocess.check_call(['ls']) == 0
For writing integration tests, the mocking system for subprocess supports mocking multiple process calls at the same time:
with mocks.Subprocess( mocks.Subprocess.CommandRoute('command-a', 'argument', completion=mocks.ProcessCompletion(returncode=0)), mocks.Subprocess.CommandRoute('command-b', completion=mocks.ProcessCompletion(returncode=-1)), ): result = run(['command-a', 'argument']) assert result.returncode == 0 result = run(['command-b']) assert result.returncode == -1