Ok, so Fabric
did exist even way back in 2012 when I did ansible.
The common pattern of the day was to use Puppet to do OS config management and then Fabric to push out the apps.
Fabric lacked declarative resources to describe the desired state of the end system, which is where Ansible came in.
Ansible differed because it still allowed direct control over multi-machine orderings, which is (IMHO) easiest in push modes, so it was kind of (IMHO) the best of both worlds access models.
OpsMop has the same kind of push model, still keeping the declarative resources, it's just all Python.
However, on the remote end, it uses mitogen, so very efficient RPC ops (1 per role + files) - https://sweetness.hmmz.org/2018-12-18-mitogen-opsmop.html - versus the multiple of SSH operations ansible did per task.