• Stars
    star
    776
  • Rank 58,126 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created over 2 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Doing dirty (but extremely useful) things with equals.

dirty-equals

Doing dirty (but extremely useful) things with equals.

CI Coverage pypi versions license


Documentation: dirty-equals.helpmanual.io

Source Code: github.com/samuelcolvin/dirty-equals


dirty-equals is a python library that (mis)uses the __eq__ method to make python code (generally unit tests) more declarative and therefore easier to read and write.

dirty-equals can be used in whatever context you like, but it comes into its own when writing unit tests for applications where you're commonly checking the response to API calls and the contents of a database.

Usage

Here's a trivial example of what dirty-equals can do:

from dirty_equals import IsPositive

assert 1 == IsPositive
assert -2 == IsPositive  # this will fail!

That doesn't look very useful yet!, but consider the following unit test code using dirty-equals:

from dirty_equals import IsJson, IsNow, IsPositiveInt, IsStr

...

# user_data is a dict returned from a database or API which we want to test
assert user_data == {
    # we want to check that id is a positive int
    'id': IsPositiveInt,
    # we know avatar_file should be a string, but we need a regex as we don't know whole value
    'avatar_file': IsStr(regex=r'/[a-z0-9\-]{10}/example\.png'),
    # settings_json is JSON, but it's more robust to compare the value it encodes, not strings
    'settings_json': IsJson({'theme': 'dark', 'language': 'en'}),
    # created_ts is datetime, we don't know the exact value, but we know it should be close to now
    'created_ts': IsNow(delta=3),
}

Without dirty-equals, you'd have to compare individual fields and/or modify some fields before comparison - the test would not be declarative or as clear.

dirty-equals can do so much more than that, for example:

  • IsPartialDict lets you compare a subset of a dictionary
  • IsStrictDict lets you confirm order in a dictionary
  • IsList and IsTuple lets you compare partial lists and tuples, with or without order constraints
  • nesting any of these types inside any others
  • IsInstance lets you simply confirm the type of an object
  • You can even use boolean operators | and & to combine multiple conditions
  • and much more...

Installation

Simply:

pip install dirty-equals

dirty-equals requires Python 3.7+.

More Repositories

1

arq

Fast job queuing and RPC in python with asyncio and redis.
Python
1,989
star
2

watchfiles

Simple, modern and fast file watching and code reload in python.
Python
1,702
star
3

python-devtools

Dev tools for python
Python
921
star
4

pytest-pretty

pytest plugin for pretty printing the test summary.
Python
400
star
5

rtoml

A fast TOML library for python implemented in rust.
Python
313
star
6

JuliaByExample

Examples of Julia
Julia
296
star
7

aioaws

Asyncio compatible SDK for aws services.
Python
168
star
8

dnserver

Simple development DNS server written in python
Python
139
star
9

jinjahtml-vscode

Syntax highlighting for jinja(2) html templates in vscode
JavaScript
135
star
10

smokeshow

create temporary websites
TypeScript
127
star
11

aicli

OpenAI powered AI CLI in just a few lines of code.
Python
114
star
12

buildpg

Query building for the postgresql prepared statements and asyncpg.
Python
79
star
13

nginx-pages

static site server using nginx with auto deploy via scp
Shell
67
star
14

aiohttp-vs-sanic-vs-japronto

Rough benchmarks of of aiohttp and sanic
Python
54
star
15

notbook

An argument that Jupyter Notebooks are flawed and the world needs a successor.
Python
52
star
16

pytest-speed

Modern benchmarking library for python with pytest integration.
Python
50
star
17

edge-mock

Tools for testing and developing CloudFlare worker apps.
TypeScript
50
star
18

Bokeh.jl

Bokeh Bindings for Julia
Jupyter Notebook
47
star
19

helpmanual.io

Python
43
star
20

foxglove

Python
33
star
21

xdelta3-python

Fast delta encoding in python using xdelta3
Python
30
star
22

list-python-dependencies

GitHub action to list all valid versions of dependency for a Python project
Python
29
star
23

mkdocs-run-code

TypeScript
28
star
24

nosht

Open Source Event Ticketing Platform, deployed at
Python
28
star
25

sasstastic

Fantastic SASS and SCSS compilation for python
Python
26
star
26

aiohttp-toolbox

Tools for aiohttp
Python
23
star
27

harrier

A better static site generator.
Python
21
star
28

cloudflare-proxy

proxy requests using cloudflare worker, useful for webhooks fired to slow endpoints
JavaScript
19
star
29

grablib

Static asset management in python
Python
19
star
30

cloudflare-worker-speed-test

Rust
14
star
31

edgerender

Render at the edge
TypeScript
13
star
32

coverage-badge

TypeScript
11
star
33

async-redis

Asynchronous Python redis client
Python
10
star
34

JellyFish.jl

approximate and phonetic matching of strings
Julia
10
star
35

aiohttp_runserver

Moved to
Python
10
star
36

yatl

Yet Another Template Language
TypeScript
9
star
37

django-handsontable

Django app to implement handsontable (jquery-handsontable). Uses django-rest-framework.
JavaScript
8
star
38

land-registry-price-paid-data

Land registry house price data converted to Python Pandas DataFrame
Python
8
star
39

email-forward

Docker container for email forwarding with python
Python
8
star
40

check-python-version

Check the release tag matches the library version before deploy.
Python
7
star
41

pytest-toolbox

Numerous useful plugins for pytest.
Python
7
star
42

pytest-cloudflare-worker

pytest plugin for testing cloudflare workers
Python
6
star
43

quick-strings

Rust
6
star
44

em2

Python
5
star
45

cfpypi

Private python package index using cloudflare workers
JavaScript
5
star
46

init-desktop

Python
5
star
47

donkey-make

Make for the 21st century
Rust
4
star
48

gistviewer

tool for viewing HTML file in gists
JavaScript
4
star
49

label-and-assign

GitHub action to switch labels and assignees on pull requests using comments.
Python
4
star
50

edgerender-rust

Work in progress
Rust
4
star
51

django-db-viewer

Django site for view contents of mysql, sqlite and mongdb databases and filtering the results
Python
4
star
52

password-locker

Make passwords available only when you need them (mostly for CI)
TypeScript
4
star
53

wrangler-typescript-errors

TypeScript
4
star
54

logfire_django_demo

Python
4
star
55

python-IR-demodulation

Python infrared remote control deamon.
Python
3
star
56

donkey-simple-old

Super simple site manager that provides a front end to generate static websites
Python
3
star
57

logfire-python

logfire client for python
Python
3
star
58

coverage-prepare

Convert rust coverage data to HTML reports, LCOV files or terminal tables
Rust
3
star
59

githubproxy

Proxy for GitHub that adds "Content-Type" and "Access-Control-Allow-Origin" headers.
TypeScript
3
star
60

pydantic-sandbox

me fiddling with issue templates etc for pydantic, IGNORE THIS REPO
Python
3
star
61

tensorflow-gpu-py36

Python
2
star
62

django-importexport

django app to export and import data to and from excel (and possibly other formats in the future
Python
2
star
63

keypress

press keys from the command line
Rust
2
star
64

rust-bench

some benchmarks of rust code
Rust
2
star
65

django-crud

CRUD controllers for django: Create, Retrieve, Update, Delete, List
Python
1
star
66

ci-donkey

Simple Continuous Integration system based on Django and Docker
Python
1
star
67

django-skeletal-display

django app consisting of simple display module
JavaScript
1
star
68

python-file-watcher

Python
1
star
69

csv-labels

Python
1
star
70

httpi

Rust
1
star
71

tictoc.rs

Rust
1
star
72

donkey

Like "make" but for the 21st century.
Python
1
star
73

uJSON.jl

JSON library for Julia using ultraJSON
Julia
1
star
74

testing-projects

1
star
75

TestPac.jl

Test is a demonstratoin Package, see https://github.com/samuelcolvin/julia-slideshow
Julia
1
star
76

covid-19-calcs

Jupyter Notebook
1
star
77

print-debug

Python
1
star
78

bash

unofficial mirror of bash from http://savannah.gnu.org/projects/bash/
C
1
star
79

donkey-simple

Experiment
JavaScript
1
star
80

django-websockets

Experimental websocket support for django
Python
1
star
81

alpine-nginx

Docker image of stripped down nginx server using alpine. image < 15mb
Nginx
1
star
82

pdfapi

PDF API using docker
Python
1
star
83

codeshow

very simple flask app to display just code from gists
Python
1
star
84

django-sales-estimates

Django Sales Estimates Base System
Python
1
star
85

reactstrap-toolbox

JavaScript
1
star
86

Night-Shadow

Chrome Web App: World Clock that shows an image of the world in night and day. It also displays your location and the location of your clocks.
JavaScript
1
star
87

HotDjango

Django app for displaying data - like the admin interface, but pretty and for displaying as well as editing data
Python
1
star