diff --git a/.flakeheaven-baseline b/.flakeheaven-baseline new file mode 100644 index 000000000..fff9c1580 --- /dev/null +++ b/.flakeheaven-baseline @@ -0,0 +1,617 @@ +336abc927102c85c29c7e8406facb41c +8be07c00a370dc163513745e9b5239ea +77a35df283954d310aafd2c60f30a50f +afc70b9551bc86e9393ded54151e1bfb +347939097336c59c2fb0de5cdc3f202b +36f5ce2d16787cecb42cb85ce4fbb875 +b2e520e19e098736ae232a375d0d687e +1886088ab781e7e80863ac5e33f18d13 +ba88ba2f9d9cb3b9dbed6e75a99fb780 +1788d20f0961c5ac1255afbe46773622 +aa77f7e14fcabc05adc4e30d4e063c7c +017c4366a7d7ccd01a6974f21a5446d5 +93e7639c62034f18cf79f20d3456e36e +f15b3aa5f98ffda592f87e48e38f5090 +4559f7c905a3e5b2cc24a14cd1c405d8 +23dbdc7a7fba41f47dfe569d600a589c +f0ea8fc8e203a88b965df883c4c5fdd9 +ee75e90c7f85059757454e85c147ed91 +a7bec8398de78f9666e16bdb9e6a160d +8e4e6e29b5eacda5c27b29a65be57b61 +279269a2fbe5da1370e428f2dc87b42c +f2c3edd2e10604c3038b0a6524c063f6 +0e3e61ce756463ddc3221f1d096b05d4 +3fc110abead4ffcd2bf9baa501c2ceca +adff2335801114d74dae49d55553b1bd +c2895dc68daf77c6baebec7b97eebd7a +b52a3e60f71b0528c73a2a25b69dd605 +5469073d350fc45040111328999435c6 +e6762d217c6731504ed0e3197ed9a625 +8a1f3385d8714182913c4c1a17447526 +3ce5496c3f69bd1893d873d4eda0406d +3ce5496c3f69bd1893d873d4eda0406d +67af8808d4c45bc71ab0bfe41d82e579 +ee9e4ce0d376968fe6de9ca5c9267fb1 +f3cb9eac5869a7b61055f6b0f52a91d1 +4df55f0d569a1380466394754ce440aa +10741b2f8577feed90b9d84235501d07 +1895a9db0f05eef0a1af2372832bff52 +98d8fe784ad5a7c8b7fadba20dda88b0 +200be71e36c271256a207cd02c885067 +62077133e44d52814de0f0956cb159b9 +49a3e6dbbea249d7f25287668bb01cb2 +f3b09ced6f18b811e09cadb2c0f8ff2f +7759363ae00ecab879131a043c2da00e +52a2ed2d8b12abef0e3b0d16545724eb +479605e882c4b53c5396449dad597faa +874c297b563d3c195c351a289aeaaafa +0ffc6e459f1b567087c04893443f23a3 +8e41e9264d20adaee49287163999df90 +b68a84eb27f916e2fe28fe381bfe04f2 +7d6c1b74016d7b8cea44fe734225b0c4 +5dc123fc9215715f2650e729e35ee127 +ec0cff762e58526dd5be8e3a2f01b06c +cab29997c3fd0e7060661cb2b63201ae +f4c5bfddbbbf547a1529d449c81ae331 +60d75a1de062123d9c2e924c4ff7237f +0c0dbeeb6b827dbb795a8a3c311f2b9f +c4b465113f3600a92dc0c960b145880a +670fcc47c1452279128b51b72a97d922 +ba3003293ad726f206ae13f23b6d9ca4 +a160dff9cc176f058009710cb701f71e +a12a6b752da2e79b9727841de40f9a7a +4c55705a5bfcdd859220ea8965e15a1a +a994211c67919e3f470523da40180ec6 +d5b6cddfa047580d04d0135b4572d003 +43eccab2e6f2fa1e4b6e7d895b6a20bc +43eccab2e6f2fa1e4b6e7d895b6a20bc +4e4080fc0194ed7a7c1bb9b38dccd26b +2c738535709f34e3b91a5ac42c2e04f7 +ed0499c47be452bd675fdac27a484b5b +b71ac01582c329a261c73d85048ef094 +7b1dea1ddd135d962d7cf077fd5f9da5 +7b1dea1ddd135d962d7cf077fd5f9da5 +9dda3d002b8c5569feb7f51db82b2b22 +cb930fa4d8d41349dac5235df11af1a3 +92c54b7e45847f2dd4729549832b7759 +2ce44594e885fd10cf5eecf7cbd4b28c +7fe341ff533d0932b8d54ff288849e93 +68797acca04b3264754b1e4154f2a1d0 +59cc584b0281fbaaea25cbb9688319a2 +855da1812078ef2d05ca2fe872356147 +4c9a406fe72fba2a6fdf6aad0bd612ef +1cef7a661794ec420f6693957962782f +bf3e68a7a578452f74892fad63b0aeb0 +cdb4fa2a2132743af04afba6538e030c +a01411ccb6c2cdb92c6a4b027f492a8b +1b15717b8149cd1ad60f2a07991dbf0e +00406c3bff7874cefaa5b78bd42d2590 +2b81f9a09742e3b34216e16be671768e +8b956391d0498a5246c35d09b729cd04 +479af65eff25915557d117a8c17dba12 +ef2e1f4d6ac4ce917e27247b17fe3a24 +94582e4861ce406f91c4cb798965910e +a3493f823845e7f7261c05fd178f3cef +ec557073fadd0b100a7263b1fc79c359 +865640f021d24c85b471cb50b59c0013 +2d7dd9a767a7761319337da416e857b6 +069fd074d10fb2e8fb711e9b91821806 +cda459f720215172e839fbf8f6b36e69 +3bb60405e451c100e4250e38067cb004 +e03878ea83c4dd835d7f46e624eb7937 +12631dc3fc6852c379403ed53d58ed20 +4bd16403ff96068282ac3394020484f9 +3b02f09ceacf93359d0b3d8471847aef +ecaf03a38beaab6392e8bd4ba519e321 +ae9349f4ef21af714f3a158342e9a988 +2ee13c863364ab5a42b813a673fd3487 +8e1524aef71c732809fd567efd90e77f +d6cf8309ca88aa56d0c41308673a9d6c +b507d1e4fec492290c5e75652b61e3bb +475d2b618f3486a79efd231fdde64504 +c57e4d17729420ca1fb81b0862cfe04b +5624cc7ba0897439bbd211033ef99332 +0462c1df7cfb82ad832dbaa1a54be3fd +743935848a97ce652f1250cf157a6aa7 +f0424cad24fbf39e9c05e868b7f2374a +2bc94909eff15b07c6b880fb6a13b5ce +14dbf525362d868b1d43daa65f9c272b +14dbf525362d868b1d43daa65f9c272b +68007a66f038c991ef66e210ff6a6748 +4f7650b3d39b36f250a5652065c33b13 +a6d66b183fc5eba005564c33c7b15ebc +f0f86575f316b2336d655069b6282ada +4acf947749024cb40c15d60a18e50f93 +f2e11bc6ff7aca29642cc06f55970318 +4662ac8a1d13b32cfe296ce209575b6d +089cb668db342b0a77644fa8fdb84058 +fa4f4df2407390b050fff21a455653fc +67aba268cb959bd4d0ad4e2874fe6fad +3689cad8a8819befbf3935570ceeee84 +8d3de9b19ee4d5976aa2b93812755565 +ef5694bcbc7189801ac920fb46933c0c +3689cad8a8819befbf3935570ceeee84 +8ee72397b2e15137fdb73dc1a6636f61 +abd07f02517ea3b709a830d2a1a1a68c +3689cad8a8819befbf3935570ceeee84 +3b5d8b22df7171ae3446c7bce60b4e15 +9eee4a5c5e44cfedb61a0e9a249bc832 +3689cad8a8819befbf3935570ceeee84 +3689cad8a8819befbf3935570ceeee84 +3689cad8a8819befbf3935570ceeee84 +3689cad8a8819befbf3935570ceeee84 +3689cad8a8819befbf3935570ceeee84 +3689cad8a8819befbf3935570ceeee84 +81db140a701fb9bf893f2ccae43e5ed6 +3689cad8a8819befbf3935570ceeee84 +3689cad8a8819befbf3935570ceeee84 +afeaf858250cfeaac4a940d0ba2e9753 +3689cad8a8819befbf3935570ceeee84 +5f166b480d5aa0d30b3433b8e62d4145 +03f3ebed66a5118e2d5c780f03c13925 +242277c0722c14620725cb2edcb43375 +3d3377aac35b569337fd09148eb93f80 +b8295ad5332ae52c6360c580b39d07d5 +36184faa94d6023fe491c9cf8162a4c0 +3689cad8a8819befbf3935570ceeee84 +e407d04a269559e7351d4f67151a03a0 +cfbcbb41eef4643d15a8f363664efe49 +3689cad8a8819befbf3935570ceeee84 +2f6992cc98180cd06b578d31b96095ad +43fad51d6423cc2d565df20952aaa2f2 +effc105961565c9b0b8ff77275b445a6 +3689cad8a8819befbf3935570ceeee84 +3689cad8a8819befbf3935570ceeee84 +dfde3d3b8440b8a55b6c1cb5504f98c0 +bc08617d5d80122c83bf4d168ddb079c +3689cad8a8819befbf3935570ceeee84 +774da41d52f1eaa6d6e1945d60f05f30 +3689cad8a8819befbf3935570ceeee84 +403b3253c5d7c982951fa1caf49d8e2c +50aef7bf033cb3e2e0f35f577c397a52 +5d4f5ff6267a1daac2ff3853c5f31cef +3689cad8a8819befbf3935570ceeee84 +fc4abe327db591b5b2048301ef416ad5 +6e2d554f0cc48e2347455f412aefd2d3 +8ce2fae522b3b0941e3683bdeda5438d +3689cad8a8819befbf3935570ceeee84 +403b3253c5d7c982951fa1caf49d8e2c +5d4f5ff6267a1daac2ff3853c5f31cef +3689cad8a8819befbf3935570ceeee84 +9c2cfe86ffeb5447de4de2044a2aadde +3689cad8a8819befbf3935570ceeee84 +2ed58de913df31dbf790c10cdf10daf5 +68711b33a0e8b0e5bb2f171ea5282c2f +0f599054ffaf00798c6ad9be7c0f372a +04e64e4c62eeef26e0b28fa778197279 +b8678f20855b894aab239a10729de451 +59659358652a4e07ad7da59a1630926a +808c2fbcb3af9dae1c8193f0c3768597 +929748cfaa23cd7594f96a01bbb230d2 +828353e1a8076caf02ea11add195f39e +107b4a488d61d34a06aea249381cb67c +6b78713fe5db8a79235af3aa42077e1b +e8ba4d542a0c979721d01c6c1dfb788f +107b4a488d61d34a06aea249381cb67c +3a7035730f722ae745e4d59049df2537 +4d6a05586557a13e986d6ba982b23d2c +76cb71839068562ecca1d8d94cb2aa45 +4936eb27a3d3ffac8fe9b59ca35e41b1 +c423f1d1105b0f8f80255720c04e5531 +165ae60b38daaf17380deebb295a778b +4936eb27a3d3ffac8fe9b59ca35e41b1 +bc9566c259fd9eb45e16a5556c67793b +50eada2c91fec8c1e50ed76d8ad80c38 +4936eb27a3d3ffac8fe9b59ca35e41b1 +0580507f9293790e50ffe70021b31b66 +94efca24eb7d31c53c574d8b72fdd3e1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +cc48c34d69e4a023b8a23bf76b683067 +4936eb27a3d3ffac8fe9b59ca35e41b1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +0089123852999e8cb996b5504c907837 +4936eb27a3d3ffac8fe9b59ca35e41b1 +2132722b93092ecd9c0853da94ca0814 +f82a8500345124640ead9b8fa849d681 +9e7cc4b6e48da234fcdb1cd66e5372d3 +44689080ee3970f5551612b017313f1c +8f691ba77c3ef04c553b108a916d8460 +5f2e7732f51fda52c4f362f119922f81 +4936eb27a3d3ffac8fe9b59ca35e41b1 +835a357c19cf73998d27da9f78605e63 +1e9307818be2fe1d0159b9d55940b2c0 +4936eb27a3d3ffac8fe9b59ca35e41b1 +eecefed0f0fa4245db6368507d06f99f +1fdca28ef0e6ece52df5a93b174df32e +cb8ecc53fd7b54c3b7c9de8c841d46ac +4936eb27a3d3ffac8fe9b59ca35e41b1 +4936eb27a3d3ffac8fe9b59ca35e41b1 +7ed0805b9ef4d37180d6ab6b31f470d0 +1a4a5dc886f16ea4bea220b39fbda8b8 +4936eb27a3d3ffac8fe9b59ca35e41b1 +54670e07f2a522cffaf64c11faa17c43 +4936eb27a3d3ffac8fe9b59ca35e41b1 +224ace56b9aa6327b0704dac81ec2bd4 +1fc17bb8d8fd43cb99ddbf7797ffdbcb +7b4c4616aac1c7a7eb803c925703cfcf +4936eb27a3d3ffac8fe9b59ca35e41b1 +c817a64383ccf8e8208c5a7bd041c4fe +a9785d85b66cfbd917bb655b37bca6cc +5c4860601a8f72d82b424488e0ba62bd +4936eb27a3d3ffac8fe9b59ca35e41b1 +224ace56b9aa6327b0704dac81ec2bd4 +7b4c4616aac1c7a7eb803c925703cfcf +4936eb27a3d3ffac8fe9b59ca35e41b1 +c16ae6f8c80b9b6883f7805509e5e9e3 +4936eb27a3d3ffac8fe9b59ca35e41b1 +349557f5cfd742cbfcf99db921647b00 +49ea9a6e894a9b5beec875edd25f91ce +a31b227dd1538d66c80f7957389b62f1 +58c6f396baafb289ff0274a72b9b8a88 +463a57e593283b64fb2ce7d79b884024 +ec0985cdc26bb25d544a51b05b779d0b +46474dd8e58a4c2974b377f4f7ced87b +61d8c3899a1433a31c4e394e35dbc229 +30a743c49be23cb1b187c16c40f7897f +16f8cd5973895096faa7b2c1b41f0d70 +3dc587b70fe5aa2485b36732c31cef69 +dc3f18634ebac515b77515f33195b9f5 +16f8cd5973895096faa7b2c1b41f0d70 +74af451e95078d7ad81ebde0380a5874 +b49982f40af77d5b0d7643573d187cde +25f98e1abd7ad14a9c437d3e82d264a0 +97237df18e88120fa370ed04b43fb829 +a2801293080d5e6a68dc819c18966e1d +773546f066f3a335eca1d62e06351ef8 +733dcb2802c5e07b9e5b0e4b2c599195 +ad90a4b890d874994c38f42536ead178 +0659bd88b9c997e3bf3a5fc4cb102e4a +af70e952999b34afb1fecc7ef406c4c2 +656f05335e70ad457eddd4f8db485d1d +e620d6db9fb2dc6feeb9e629bbf7bd88 +6a99c8b8ee89f1118955abf575fe08cb +e2ac89ef2268ac706fefa40ffb2a235f +fafaf5319e14077ccab68b202cff7b57 +34e65ed1d1ecfbe2b2994c221a6d4c66 +807046f013899c1127f7d109f1c4f3d8 +dc2caea6b0087111d87d01436d1b3805 +e20edb07de2a01d3980c0a539721c1bf +68e741db3d20b86383c57aa59c95b443 +2ce2b2680755d9bc63cee3e9657d0e7a +b986415f4683b383f130dab4f3f37c66 +1c0df5f6eb5b66a8a2f13140604c639c +ff96520ae55121257c821318d6e5fb62 +e9d16cbb6a60759527feb17e2ab4cfc1 +c5f05f5d174cf64470166c0d21aff5cb +6ca675092235000c419103b65f58dfdc +86010c5f0664c2e4990b0dd53a3cb920 +877523d3c986ebdbbcc419bc393eaf36 +dbb6ed0983fac50ee2bc63515c8d2514 +d3435e5126844b12a1cba475d5d43cfa +cb5e5ee29fa38a45ec280a84f3126ffb +b77541c110bb1dbca35c1096444367b1 +a1dcbbc867ec9de47c1ab569ea63038c +50a64c18f9d0756122344442b880d7b3 +1c6b31c035044b361dd8dacff1ba3f46 +b9dbab80ab38e4a330546155154b95ff +0c5b9f2c08e1b37c75fc3b532f2fc237 +37ce699437372cbacf51b36b09534e02 +521a631ed0c59b57362ee8e5dda49ba0 +733b6e0f0dcc7b8f845af0b6b70f93fb +cfecf5dc5b56422583f62d0d1027979b +8c91561ddd7db0cd9120112846934024 +5dfd2eeb8866960049db82b85c93be60 +b4dd45622d5e721a9834cc10fb42603c +84d39c0da5115f32324ac3a03934e434 +84d39c0da5115f32324ac3a03934e434 +af939ae02aaa65f6626186dfef7522b4 +996871355419bb36568512bfd55be36f +6e82451e07322b2569e9fdd1c322fbfd +e65e5d7a8de4287738984cd0a1b32ac6 +c466fe76727c7208206a4d2b362d04a1 +46229784d274bc4091efe0ab958288cd +5440674f2999bc784d0d49908126c722 +f07bebea46afae238c9be961a8f98522 +a39efcd3e53d2bb56e67109377e79754 +c0faa7bde748bd43c0e31899b1ea8ac7 +9f6573bdf469c3bf5b7ed18a28fb15e1 +19fce27b26df144da5ab1951805dc2e0 +71532d82f93ea001660af960521e5a89 +9c3e2bec20f32e62af802e1e50f212c3 +e639525ab7f60b9d6967b7264ef27e6c +bc826fb1eba7df4f81548144d67a71fd +1349335a700977b00dfef8e2a92a88a6 +5eca0b046eacdcbe5c3ef1dd9b1a58a7 +7bd63d20793eaa6e13d30339ba106420 +fe98b7116f438d6760f9c3c8b0b80544 +f7c87cb823ef8e19c56485442bb00de8 +d160e7ff00dd59a69f1379afc23fc56b +596dbdae607a247beb3f0d09ac30c24e +ac8f632c93ac28ca901dedce0879364f +ac8f632c93ac28ca901dedce0879364f +7ad76d94fa638b75d517267fb55e6bf4 +7ad76d94fa638b75d517267fb55e6bf4 +a7033e4b5067cde6a1a786dc33488f1f +a7033e4b5067cde6a1a786dc33488f1f +7954d88dca2d2956526c9585d07737bd +0ee49f5edcd4124836ad0de6fb4377c3 +7e5296de0d977011660a7d9a2be66dfc +970435566941e77d3b6c0909bd7701a9 +a2190e891d3edf9bb6dc212f1aa36bf4 +1a1a07f06573a2bc7de436a05f9ef003 +3d6e785281fbd8691df13d8721636043 +fa9b707223d93151d5eb4e4e80f876ae +2c6c1238ed4e4e241a498bd33d3de090 +8280fefe58e383b7a431832e77fe4138 +b3e1432dcc873c8858418b3c3659a95d +5ac5b5dd405a92287bc15ff78b29485d +95655f57cbe46462cddf56081a605780 +3d5735fabdde293c481b493c365ee307 +9345a62ae9ee57c265c32efc7848090a +4d9a48be6292a0439b01479964bcf9d9 +2b30ae2bda31899d5592dfdf6f0f0086 +7e9e46ccb122c699143cedbc2da921af +ce3f21a36e5fc84642b998358fee30c8 +71ec2fcf93f90f0d0c713d44e0b3aa29 +b35584a8c4900d343521b54ed2e7ac8f +03ce11a8eac59cdc09426d132065f635 +40e63fd6293801f123ecadde0b647b8f +ea107ba56103769b64d8679c0b0fe870 +f81d24c8c915ee963f1b53d1d72ff55a +6d5f64e8645d2fe4241e37b847dd6c0a +345656a3acea838b3a0cd60e3cef38be +cf0cd548d0d0de3dd88dc4321d1c12cf +bc140d5ecba256045aaa0019f71affc3 +26cc3934b690f11b7663f071678bfb73 +8ff8d7aaa30715aec277da9d4d0213b9 +63151ce932380bf21fce7ea8a7e54e7b +5f3ddb2d1dedb27d0e4881f44d47b1a5 +74f456f165d37169229967c728bf2bb4 +c422c86e57576a5a2500754578e6fcbe +c83f56bec8958cf9911aee690c9719a5 +54208b3c24f9cad46a4880cfc03b1e41 +b3f753ee495d7f36bebee2a94ac7edf5 +ad750073ec23e67903bddca7a8343e54 +396220a8c7c82b41558721b6e31d8046 +a22396a1e9e1b7bbf1321612cd3f38ed +c2ee2745d4f51fbd72f9f0fcc4f89cd3 +a961bd28f1a79da028c5a282232585f1 +395cb2ffe00d637c0ad0b92106c3610a +16de47c28c34fd9cf8d1873f3ade132b +815130629bec7e0d66553abc3954214a +042e947840d14b695113c9d66a0bee57 +e2d91c9a75e31a2f949e545377dfe48d +861539e7c48e6837033e3dfd9420613d +c8737df0471e45749d12175a3c1b1671 +d4c7dc10521a8656c85707ab817c93ac +8d14d3c4973952571c271106cda8a80d +a375fcf039609d48aa610b5d6df6d600 +4467ae66a53c35e5cadbb8c1229b7459 +fa5f0daf8f67b54cd3238feee6250fe5 +480c94b8a664628b1f7656fba2aa00a9 +e6568dceec4dc5d392c8e467319bfe8f +ab7fccf9cdffc7684b2657ea00191638 +1f8a45bbcfa66b4bd56f296d51fa79ae +a39a3ea7424ee1699ab26b61b0c7f532 +b5c12fee6206f1365f764158578ef89a +44d825967fbdc11493afb0bca0042218 +44bc91b910cb847f61015c8f2bce6eb5 +a6877b29e583cc1047a01089e8b8280c +60c5bf14417da619f8e4531241e16cf3 +b1dfe1ddf6c7f5a92055de92c7ebc683 +42ee6fbec3141d4d1e60207ba4977c20 +1b4c5a201bb95f4aa38baa8c31986913 +9c393d938b828618a69f04c8e31c9184 +203410a64eb589ca5d3b6db94e110786 +9c223baa1c48e921b5baef983543ebc6 +de35774f11d31c3ead125498d98d2e76 +de35774f11d31c3ead125498d98d2e76 +1ffb2d0863f4ac3b96f308fd9da29d24 +3db0527199ebc3aceb5f8499b7aeb8ba +3db0527199ebc3aceb5f8499b7aeb8ba +eea5c2b22ffee72bf975ac0e0142a2d3 +0c355d3507dd77275ea64ea3ecffac06 +06987209c369f81d2763e8098593abfb +f8f47a79e365fc330feaca0d61071470 +1893c6602953d54e406fee6cd435d348 +4ba043ea5c913a79ee5a014f6273663a +e1154725339de0c3e8ae3daba7b90ee0 +b93af2f11335a840591b9fe13795788b +1d24daaffe44b4dd3cabd4ce3a7ea08e +5c7a4fa598813c62c21db6bf3092af80 +240400a8e89aaea0e78c76687512d6ae +7979d59a298fc6ed3fe4acb84c9a85e7 +aba26ddebdd6987d11ecddfa50b4fc9d +6f52d2bd2f34bbc24d36f47e37bac2c8 +1da1c1167d610d5b23532fdc024045b9 +aac1a595ea87796b193eedbdc5b17ffc +eb21a79ef01a139b4f1b088e6c7a5eb2 +f373a169e7a6ddb88a2c32a3724e3deb +78df0c47a859b4f7b02284545cf74782 +4bd0c7eafe455b034415e363ec164062 +ed261674226ea6b8116accf1ea3ff768 +b2b63127a1a91d480db3947de21e7120 +ed261674226ea6b8116accf1ea3ff768 +dfcb5db647c7f8bd257ef4bde50ba508 +3215a1a7db3bfd0b142ebf1f59cef0ef +478078c0ccc34327bb95e471e7a6ef7d +33f1b09df7f65d515905115c797b9497 +6b5e4eebee2accb7de3e21b36d5d64d7 +c514c1d2566ebb941b4c5b1dcafc2b35 +570bddff1632b00dfcb1b2e665612445 +6a7341363670adc9ff32409e9ec08e42 +05220324c1e027622df5961b00ea411f +3b176a1b08658ee3b6b7d7240df7d3bb +5fbd734db197ca375606ee639a9b7bf0 +53bb77f097305e3a726f998d7ad8cbba +9a093a1148331105facbd8a507c18127 +d8d3ddf170d2ba9df278179b30adbf1a +28b96134274015051b17baf04ad243fd +aa947342a09a0eff69329b0d82fa8b78 +bb85c5d325fa07781d9112f40cdba3fd +f4a4e2f2cae9d6bede1b3021f85330bf +dc031adce77a4e9122206a1e88e78638 +0d8cbcc52ea07948147e3fa93d8a30ba +e62bce6bde8a07b1c7b6ca74658a60de +caeb58d2e061982becc20c666cd94f02 +1f7e1079d4b90ac5e859b2caab2c9d9b +1f7e1079d4b90ac5e859b2caab2c9d9b +7a175e43775659450194a293b1e38623 +814c9a9207cc370a7791024a5317dd4b +7a175e43775659450194a293b1e38623 +0d8d4775616a9ddb47610c823543187e +e5145e04753c093c5505041d9f8c91ae +6e912350ae419c5866f57c14068c6d2d +df1160669bd05efddaf5eb4deef439bc +afb474f289e0f3ec2f1a64a5a1a80bee +5640f19599b47fbd97fb9c5681aa60b8 +fcef75abcc91589f1c667d109e9858de +32a89bec814347228b8011303c37e3bc +40aa0b444492cf9e4bcb7572b07474a0 +3392b0c110f4db4a88d2eb902caed806 +34e9d3bd8149250e9262dec1b7f94eb8 +0a3028f007ad560a0d724ab86ede6b52 +97cb6402d0b2ec5cbb67c95218259b85 +8459545deb69fb46f7bde032001542b3 +6f20b26f27618050a55cf33d6f65060b +d7f70808caa6b51a937cfbaa26f7c846 +11c9495d9ce7392e0a77490c8fde8d2c +e63f6a35d0a302aa4fc403a56ad8c697 +dff62ca62daa7352f696d528a5cb4fe9 +236852d291dfd50072abc7bcaec13858 +957a2dc107e564a8028b1c655f49561c +0251ba2929081183fe816bcbee68a93b +ef6c53480e56c4593066dec70ab7c2d5 +7164cce373e36559e8764e3ce94b66c1 +60b4d080d54fb616cf82d285c438ab62 +9f232aa89bbceaaa8ae9482e16ab3390 +5fecbca74c1f7157fe0189b85a4ea560 +4299939af909da6f416e542cfe7a548f +a0f70add08cfda7de964faefd8f0596f +4c31f99aeadfbe6b4c36b0e9934db857 +42b6b9287f85ea44aa4a24bf7970d527 +7fff2682daab7e190e3fe36df4bc3ca5 +f98e3d68cd7060fef4e9f2d8bcfcd05d +3b892e1a896a07e53be3c22a5a49f6cc +c3aabe0df531336dfef3fc185177042f +9b73546c9faa4be75c829c128beaee31 +77b1e3bc97cf68cfa31836b37b994379 +0dd2fb4ff13403a7b9add44fdf585ab0 +305a1bb2ea7721a49c5ec4f8edb25053 +05e008646f54a8e18b37068d39b4e8b9 +0b7743683e6f30ff5fbef5c0bedae766 +88644c846edf14819e3f62c6170cd9b9 +b4fa7dc9b1e01006ea47389b145057f5 +4d9396a80dd4327d65ab8b4ce810cec9 +9c189c565c0e6d31f76a41fc047fe26f +548192bef003ebe88cf2b86023d05822 +17a9085718a65463184db8f9e27a9aad +aedd03087bdb64e788677ac7eb2d0044 +cbb9b193f44dc34158b0a0f988b89f53 +64d354e4ea3f06655135d68e87b39791 +24513cc5308e6f66c3fe3b01477f30d4 +23bc6535bd55f6875bfdb8eb8cb2a034 +24aa2fbfc3735fc7df53b1de071bc33f +1a74f1629294b1a06f39dbc2aa60b032 +19232c547c64026cba37170ef496dd13 +cbfb9e953a70a86f0a26c36060105da9 +1ecba3a3f7fbfacbaae0b3449ced0c53 +1ecba3a3f7fbfacbaae0b3449ced0c53 +1ecba3a3f7fbfacbaae0b3449ced0c53 +1ecba3a3f7fbfacbaae0b3449ced0c53 +1ecba3a3f7fbfacbaae0b3449ced0c53 +1ecba3a3f7fbfacbaae0b3449ced0c53 +1ecba3a3f7fbfacbaae0b3449ced0c53 +7066b73a2f25fad524fb0cbaed206e94 +465b56587ef3a1bbf80319d31a24215e +6aef4ba2aceafc97da50eed16e165f17 +f2ad60dae741274a1a8aedb2a36a318c +e1f0cc1225b76826f61433ffe36b82ba +66cb5bf256b780b68b64c2fbf8c11156 +3abe968e45bef70593b2c9b6de523cab +66cb5bf256b780b68b64c2fbf8c11156 +6a1366563efbdc051f11714d28764674 +66cb5bf256b780b68b64c2fbf8c11156 +66d2c69028986e072ccf19f70761b753 +66cb5bf256b780b68b64c2fbf8c11156 +084305e2eb9ba2a6f082b933b1d639e3 +018f19b32a3252d16bbc5dc896064e35 +01f9abdb1735944bf3c3514a62ef1977 +e789250a3e1eae545987c4fc6f78c83c +e451451ef858f011b30e05641c34c4af +4789699f53a166949ff087d411797869 +2b029be6a0e3241369c027c8e13c056f +3dcd3351b8fca074b8dd3a748b2f97dd +b7aa355aea11fa163f5655e8a869c25c +4cd271e5c6dceed30d2e9b977ee4d496 +b7aa355aea11fa163f5655e8a869c25c +bba4d694a95b4b69057a317c9b3c53ad +a2f9d2ae4314b3036a927d5e2a1a619e +d5ed94f2d074fa56a114aa0ebd1631e5 +4dea8e38fdf1b0868c5be39c47c3fb80 +5c7f466dea3ced0704cbbc20ea7a0631 +4dea8e38fdf1b0868c5be39c47c3fb80 +f325a515a3b924667ebad819a293f1b1 +0ff534208a45c2f5ed076c5dcf5a1c93 +cfd2e9712126a1d5d729f4c25726490c +9d977c0754aec947b9c00953d87dac14 +f3bbc40559f6f44d6063bc700645b9b0 +fd5b341d04541e3e334bd3aad5d7fb4d +c5c4b28b3e7a0970eb6ef390097e5926 +f3bbc40559f6f44d6063bc700645b9b0 +f3bbc40559f6f44d6063bc700645b9b0 +46e116426f0bdefceb61dd2f88331f4e +463e417c5f94c4e3446442c043457494 +463e417c5f94c4e3446442c043457494 +463e417c5f94c4e3446442c043457494 +463e417c5f94c4e3446442c043457494 +463e417c5f94c4e3446442c043457494 +463e417c5f94c4e3446442c043457494 +d3370658913ac80f07b951bba35e176e +b31bf291ab6cec291e4788fa94b65d8a +303cc5b68fadbdab2560fa7c1f09e8b3 +bb618ba38436486aa8a65c549661689e +898dde46970799ac876d796963d3843c +70baa8970d8bb97bb3b0e6310c2f0f89 +7b71eb380fbe2c17366e990ae7bbd153 +ba9986764209165f97f6dbc30b9ce707 +303cc5b68fadbdab2560fa7c1f09e8b3 +303cc5b68fadbdab2560fa7c1f09e8b3 +303cc5b68fadbdab2560fa7c1f09e8b3 +d3370658913ac80f07b951bba35e176e +303cc5b68fadbdab2560fa7c1f09e8b3 +5416e36b014c0072c663fd1d5bd3acc4 +303cc5b68fadbdab2560fa7c1f09e8b3 +d3370658913ac80f07b951bba35e176e +303cc5b68fadbdab2560fa7c1f09e8b3 +f741601c435183eb90cde9532b8e6976 +c6bd5750d3d3e4bcb1bef58d798f1978 +15df8950188c3acb9f3f2081cd83ad7a +15df8950188c3acb9f3f2081cd83ad7a +eebe6b9c90643d21342800c562184f01 +8275e342c98dfd4edf97661ceffbd2a1 +8bcade84994bdc0c988d2659678c74c7 +2334e74252ed8ea164443ccffa3e7899 +235f5dab04664f301da03bc10ee08eab +f590db3780ec10f26671fe541d9405c5 +4a7a15ab87d0b9ea0bcf7b50bcc11b60 +0e14d1bce0f622e8510be341d7202ec7 +4b6fda857b405d187028c148341aa405 +3d2bd61ada72a0c5ea9c048048dbd761 +1474549890b87faa3ba82c20d0bcb1c7 +eb168cf16ad36f83de397e086451cf52 +1c74c1961ac97c58ddd835f102c5535f +fb43a3d42cd12980cf2fbe60d88861a6 +94fdd18358af87f64220f04ca0858f54 +9b36918d9bc977c02f64509f1cc79dc9 +9b36918d9bc977c02f64509f1cc79dc9 +2aea185d730fcb831c1324a6f4c024d5 +f26f310ec9435912652cb9ba61cdca7e +a8a72929d46b02f1b82d525c64153366 +6c583b8632f42a20a98aee32dee80a9f +805f2b9556359ba6771e935e2731d350 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 28f402e93..93ae9cf54 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,6 +26,8 @@ jobs: steps: - name: Check out repository code uses: actions/checkout@v2 + with: + fetch-depth: 0 # fetches all commits/tags - name: Set up Python 3.9 uses: actions/setup-python@v2 @@ -36,7 +38,7 @@ jobs: run: pip install -r dev-requirements.txt - name: Run linters - run: make lint + run: make lint -k - name: Run Tests run: make test-coverage diff --git a/Makefile b/Makefile index 776838e85..94ed95d67 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,8 @@ PYTHON = $(shell which python) TOPDIR = $(shell pwd) DIRS = test bin locale src PYDIRS = quipucords +TEST_OPTS := -n auto -ra +QPC_COMPARISON_REVISION = a362b28db064c7a4ee38fe66685ba891f33ee5ba BINDIR = bin @@ -35,25 +37,26 @@ clean: rm -rf quipucords/quipucords/templates test: - PYTHONHASHSEED=0 QUIPUCORDS_MANAGER_HEARTBEAT=1 QPC_DISABLE_AUTHENTICATION=True PYTHONPATH=`pwd`/quipucords pytest -ra -n auto + PYTHONHASHSEED=0 QUIPUCORDS_MANAGER_HEARTBEAT=1 QPC_DISABLE_AUTHENTICATION=True PYTHONPATH=`pwd`/quipucords \ + pytest $(TEST_OPTS) test-case: echo $(pattern) - QUIPUCORDS_MANAGER_HEARTBEAT=1 QPC_DISABLE_AUTHENTICATION=True $(PYTHON) quipucords/manage.py test -v 2 quipucords/ -p $(pattern) + $(MAKE) test -e TEST_OPTS="${TEST_OPTS} $(pattern)" test-coverage: - PYTHONHASHSEED=0 QUIPUCORDS_MANAGER_HEARTBEAT=1 QPC_DISABLE_AUTHENTICATION=True PYTHONPATH=`pwd`/quipucords pytest -ra -n auto --cov=quipucords + $(MAKE) test TEST_OPTS="${TEST_OPTS} --cov=quipucords" swagger-valid: node_modules/swagger-cli/swagger-cli.js validate docs/swagger.yml lint-flake8: - flake8 . --ignore D203,W504,W605,Q000 --exclude quipucords/api/migrations,docs,build,.vscode,client,venv,deploy,quipucords/local_gunicorn.conf.py + git diff $(QPC_COMPARISON_REVISION) | flakeheaven lint --diff . -lint-pylint: - find . -name "*.py" -not -name "*0*.py" -not -path "./build/*" -not -path "./docs/*" -not -path "./.vscode/*" -not -path "./client/*" -not -path "./venv/*" -not -path "./deploy/*" -not -path "./quipucords/local_gunicorn.conf.py" | DJANGO_SETTINGS_MODULE=quipucords.settings xargs $(PYTHON) -m pylint --load-plugins=pylint_django --disable=duplicate-code,wrong-import-order,useless-import-alias,unnecessary-pass,too-many-lines,raise-missing-from +lint-black: + darker --check --diff --revision $(QPC_COMPARISON_REVISION) . -lint: lint-flake8 lint-pylint +lint: lint-black lint-flake8 server-makemigrations: $(PYTHON) quipucords/manage.py makemigrations api --settings quipucords.settings diff --git a/dev-requirements.txt b/dev-requirements.txt index eef74fcd9..e8a25808b 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -5,22 +5,28 @@ coverage==5.3.1 # Test runner/testing utils -pytest==6.2.1 -pytest-django==4.1.0 -requests-mock==1.8.0 -pytest-xdist==2.5.0 pytest-cov==3.0.0 +pytest-django==4.5.2 +pytest-xdist==2.5.0 +pytest==7.0.1 +requests-mock==1.8.0 # Linting -pydocstyle==5.1.1 -flake8==3.8.4 +black==22.1.0 +darker==1.4.1 flake8-docstrings==1.5.0 flake8-import-order==0.18.1 +flake8-pylint==0.1.3 flake8-quotes==3.2.0 -pylint==2.6.0 -pylint-django==2.3.0 -pylint-plugin-utils==0.6 -pyflakes==2.2.0 +flake8==4.0.1 +flakeheaven==0.11.1 +isort==5.10.1 +pydocstyle==5.1.1 +pyflakes==2.4.0 +pylint-django==2.5.2 +pylint-plugin-utils==0.7 +pylint-pytest==1.1.2 +pylint==2.12.2 # Editor autopep8==1.5.4 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..437a158cd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,45 @@ +[tool.darker] +revision = "a362b28db064c7a4ee38fe66685ba891f33ee5ba" +isort = true + +[tool.flakeheaven] +baseline = ".flakeheaven-baseline" +exclude = [ + "docs", + "build", + ".vscode", + "client", + "venv", +] +max_line_length = 88 + +[tool.flakeheaven.plugins] +pycodestyle = ["+*","-W504","-W605"] +pyflakes = ["+*"] +"flake8-*" = ["+*", "-Q000"] + +[tool.isort] +profile = "black" + +[tool.pylint.format] +max-line-length = "88" + +[tool.pylint.master] +init-hook = "import sys; sys.path.append('./quipucords')" +django-settings-module = "quipucords.settings" +load-plugins = [ + "pylint_django", + "pylint_pytest", +] + +[tool.pytest.ini_options] +pythonpath = "quipucords/" +addopts = [ + "--ds=quipucords.settings", +] +python_files = [ + "tests.py", + "test_*.py", + "*_tests.py", + "tests_*.py", +] \ No newline at end of file diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index 39fb90395..000000000 --- a/pytest.ini +++ /dev/null @@ -1,3 +0,0 @@ -[pytest] -DJANGO_SETTINGS_MODULE = quipucords.settings -python_files = tests.py test_*.py *_tests.py tests_*.py \ No newline at end of file diff --git a/quipucords/quipucords/settings.py b/quipucords/quipucords/settings.py index 8f264bde4..9169d3967 100644 --- a/quipucords/quipucords/settings.py +++ b/quipucords/quipucords/settings.py @@ -203,10 +203,10 @@ def is_int(value): 'db.sqlite3') DB_PATH = PROD_DB if PRODUCTION else DEV_DB DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': DB_PATH, - 'TEST': {'NAME': ':memory:'} + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": DB_PATH, + "TEST": {"NAME": ":memory:"}, } } else: diff --git a/quipucords/quipucords/tests_feature_flags.py b/quipucords/quipucords/test_feature_flags.py similarity index 88% rename from quipucords/quipucords/tests_feature_flags.py rename to quipucords/quipucords/test_feature_flags.py index c8658ac0a..40624e6cb 100644 --- a/quipucords/quipucords/tests_feature_flags.py +++ b/quipucords/quipucords/test_feature_flags.py @@ -15,9 +15,7 @@ ("QPC_FEATURE_TEST", "1", "TEST", True), ), ) -def test_get_feature_flags_from_env( - env_name, env_value, feature_name, feature_value -): +def test_get_feature_flags_from_env(env_name, env_value, feature_name, feature_value): """Tests if function retrieves new variables set in .env.""" with mock.patch.dict(os.environ, {env_name: env_value}): dict_with_test_flags = FeatureFlag.get_feature_flags_from_env() @@ -74,7 +72,8 @@ def test_when_value_cant_be_cast_to_int(): ), ) def test_when_int_is_not_valid_value_for_env( - env_name, env_value, + env_name, + env_value, ): """Test when int is not a valid value for env.""" with mock.patch.dict(os.environ, ({env_name: env_value})), pytest.raises( @@ -93,9 +92,7 @@ def test_when_int_is_not_valid_value_for_env( ("QPC_TEST1_FEATURE_", "0", "TEST1_"), ), ) -def test_function_only_adds_names_follow_standard( - env_name, env_value, feature_name -): +def test_function_only_adds_names_follow_standard(env_name, env_value, feature_name): """Tests if function only adds variables that start with QPC_FEATURE_.""" with mock.patch.dict(os.environ, ({env_name: env_value})): dict_with_test_flags = FeatureFlag.get_feature_flags_from_env() @@ -130,7 +127,7 @@ def setup_feature_flag_instance_for_tests(): def test_if_instance_contains_all_attributes( - setup_feature_flag_instance_for_tests, # pylint: disable=redefined-outer-name # noqa: E501 + setup_feature_flag_instance_for_tests, ): """Tests if the constructor loads all attributes correctly.""" assert hasattr(setup_feature_flag_instance_for_tests, "TEST") @@ -138,25 +135,19 @@ def test_if_instance_contains_all_attributes( def test_if_instance_attributes_values_are_correct( - setup_feature_flag_instance_for_tests, # pylint: disable=redefined-outer-name # noqa: E501 + setup_feature_flag_instance_for_tests, ): """Tests if the right values are attributed to attribute.""" assert setup_feature_flag_instance_for_tests.TEST is True assert setup_feature_flag_instance_for_tests.OVERALL_STATUS is False -def test_is_feature_active(setup_feature_flag_instance_for_tests): # pylint: disable=redefined-outer-name # noqa: E501 +def test_is_feature_active(setup_feature_flag_instance_for_tests): """Tests method is_feature_active.""" + assert setup_feature_flag_instance_for_tests.is_feature_active("TEST") is True assert ( - setup_feature_flag_instance_for_tests.is_feature_active("TEST") is True - ) - assert ( - setup_feature_flag_instance_for_tests.is_feature_active( - "OVERALL_STATUS" - ) + setup_feature_flag_instance_for_tests.is_feature_active("OVERALL_STATUS") is False ) with pytest.raises(ValueError): - setup_feature_flag_instance_for_tests.is_feature_active( - "FALSE_ATTRIBUTE" - ) + setup_feature_flag_instance_for_tests.is_feature_active("FALSE_ATTRIBUTE")