Dynamic fixture creation for your tests
Project description
python-fixturify-project
Dynamic fixture creation for your tests
A Python port of node-fixturify-project
Installation
pip install -U python-fixturify-project
or install with Poetry
poetry add python-fixturify-project --dev
Usage
python-fixturify-project
is a Python package that provides a way to create dynamic fixtures for your tests. Fixtures are real directories and files, written to a temporary directory.
from python_fixturify_project import Project
dir_json = {
"valid_file.txt": "some text",
"nested_dir": {
"valid_empty_file.txt": "",
"another_nested_empty_dir": {},
"another_nested_dir": {
"last_nested_empty_dir": {},
"final_text_file.txt": "some text",
},
},
}
# create a new project with the given directory structure
with Project(files=dir_json) as p:
# add new files to the project, merging with the existing directory structure
p.write({
"new_file.txt": "some text"
})
# read the actual contents on disc
actual_dir_json = p.read()
Ignore Files
By default, the read()
function will ignore all .git
directories in your Project file structure. This can be overridden by using the ignore_patterns
function parameter, which
takes a list of glob pattern strings. This may be slightly confusing, as glob patterns are normally used in an inclusive manner when performing file-system searches, however any patterns
provided to the ignore_patterns
parameter will be used in an exclusive manner. For example:
files = {
".git": {
"a_nested_dir": {}
},
".github": {
"ignore_me": {},
"do_not_ignore_me": {
"a_file": "some text"
}
},
"ignore_me": "some text",
"do_not_ignore_me": "some text",
}
with Project(files=files) as p:
dir_json = p.read(ignore_patterns=["**/.git", "**/.git/**", "**/ignore_me"]) # Default is ["**/.git", "**/.git/**"]
assert dir_json == {
'.github': {
'do_not_ignore_me': {
'a_file': 'some text',
},
},
'do_not_ignore_me': 'some text',
}
Usage when writing tests
python-fixutrify-project
becomes even more useful when combining it with something like syrupy
.
from python_fixturify_project import Project
def test_mutating_project(snapshot):
with Project(files=INITIAL_DIR_JSON) as p:
mutate_files_for_some_reason(p.base_dir)
# ensure mutations were as expected
assert project.read() == snapshot
Or you can use the project.get
method to get the path to a file in the project.
from python_fixturify_project import Project
def test_mutating_project(snapshot):
with Project(files=INITIAL_DIR_JSON) as p:
mutate_files_for_some_reason(p.base_dir)
# ensure mutations were as for single file
assert project.get('path/to/a/file.py') == snapshot(name='path/to/a/file.py')
🛡 License
This project is licensed under the terms of the MIT
license. See LICENSE for more details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for python-fixturify-project-0.1.7.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1859dd14f3dbef6baa88842a6bf3997c4c6797b005e601ca87f4e19442fd536c |
|
MD5 | 0ec25f42700372c7824e0ba8424cb87f |
|
BLAKE2b-256 | fda6bb568c7ddcf4c3339acf663e3019dd588524bf68d93a8e298d0ff7829c6e |
Hashes for python_fixturify_project-0.1.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94c90338f1120ff3358171ee7af24db7073822952c12da4dc578e094948f2501 |
|
MD5 | 1de0e8d4fc3cfcc975fd9d10e8cb3ce8 |
|
BLAKE2b-256 | f0d1513c70ee7747c08547a5af9bbdb4e2f492f3cd649f9ea7f67869ecac0d9c |