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