diff --git a/Pipfile b/Pipfile index d2237a5e1..11d13816c 100644 --- a/Pipfile +++ b/Pipfile @@ -12,7 +12,7 @@ black = "*" docopt = "*" requests = "*" pygount = "*" -pyyaml = "*" +pyyaml = ">=5.4" [requires] python_version = "3.9" diff --git a/Pipfile.lock b/Pipfile.lock index 52fa160ac..f129cf9a5 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -60,22 +60,30 @@ }, "pyyaml": { "hashes": [ - "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", - "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", - "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", - "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e", - "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", - "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", - "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", - "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", - "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", - "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a", - "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", - "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", - "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" + "sha256:02c78d77281d8f8d07a255e57abdbf43b02257f59f50cc6b636937d68efa5dd0", + "sha256:0dc9f2eb2e3c97640928dec63fd8dc1dd91e6b6ed236bd5ac00332b99b5c2ff9", + "sha256:124fd7c7bc1e95b1eafc60825f2daf67c73ce7b33f1194731240d24b0d1bf628", + "sha256:26fcb33776857f4072601502d93e1a619f166c9c00befb52826e7b774efaa9db", + "sha256:31ba07c54ef4a897758563e3a0fcc60077698df10180abe4b8165d9895c00ebf", + "sha256:3c49e39ac034fd64fd576d63bb4db53cda89b362768a67f07749d55f128ac18a", + "sha256:52bf0930903818e600ae6c2901f748bc4869c0c406056f679ab9614e5d21a166", + "sha256:5a3f345acff76cad4aa9cb171ee76c590f37394186325d53d1aa25318b0d4a09", + "sha256:5e7ac4e0e79a53451dc2814f6876c2fa6f71452de1498bbe29c0b54b69a986f4", + "sha256:7242790ab6c20316b8e7bb545be48d7ed36e26bbe279fd56f2c4a12510e60b4b", + "sha256:737bd70e454a284d456aa1fa71a0b429dd527bcbf52c5c33f7c8eee81ac16b89", + "sha256:8635d53223b1f561b081ff4adecb828fd484b8efffe542edcfdff471997f7c39", + "sha256:8b818b6c5a920cbe4203b5a6b14256f0e5244338244560da89b7b0f1313ea4b6", + "sha256:8bf38641b4713d77da19e91f8b5296b832e4db87338d6aeffe422d42f1ca896d", + "sha256:a36a48a51e5471513a5aea920cdad84cbd56d70a5057cca3499a637496ea379c", + "sha256:b2243dd033fd02c01212ad5c601dafb44fbb293065f430b0d3dbf03f3254d615", + "sha256:cc547d3ead3754712223abb7b403f0a184e4c3eae18c9bb7fd15adef1597cc4b", + "sha256:cc552b6434b90d9dbed6a4f13339625dc466fd82597119897e9489c953acbc22", + "sha256:f3790156c606299ff499ec44db422f66f05a7363b39eb9d5b064f17bd7d7c47b", + "sha256:f7a21e3d99aa3095ef0553e7ceba36fb693998fbb1226f1392ce33681047465f", + "sha256:fdc6b2cb4b19e431994f25a9160695cc59a4e861710cc6fc97161c5e845fc579" ], "index": "pypi", - "version": "==5.3.1" + "version": "==5.4" }, "requests": { "hashes": [ @@ -87,11 +95,10 @@ }, "urllib3": { "hashes": [ - "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80", - "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73" + "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", + "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" ], - "index": "pypi", - "version": "==1.26.3" + "version": "==1.26.4" } }, "develop": { @@ -125,39 +132,37 @@ }, "isort": { "hashes": [ - "sha256:c729845434366216d320e936b8ad6f9d681aab72dc7cbc2d51bedc3582f3ad1e", - "sha256:fff4f0c04e1825522ce6949973e83110a6e907750cd92d128b0d14aaaadbffdc" + "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6", + "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d" ], - "version": "==5.7.0" + "version": "==5.8.0" }, "lazy-object-proxy": { "hashes": [ - "sha256:1d33d6f789697f401b75ce08e73b1de567b947740f768376631079290118ad39", - "sha256:2f2de8f8ac0be3e40d17730e0600619d35c78c13a099ea91ef7fb4ad944ce694", - "sha256:3782931963dc89e0e9a0ae4348b44762e868ea280e4f8c233b537852a8996ab9", - "sha256:37d9c34b96cca6787fe014aeb651217944a967a5b165e2cacb6b858d2997ab84", - "sha256:38c3865bd220bd983fcaa9aa11462619e84a71233bafd9c880f7b1cb753ca7fa", - "sha256:429c4d1862f3fc37cd56304d880f2eae5bd0da83bdef889f3bd66458aac49128", - "sha256:522b7c94b524389f4a4094c4bf04c2b02228454ddd17c1a9b2801fac1d754871", - "sha256:57fb5c5504ddd45ed420b5b6461a78f58cbb0c1b0cbd9cd5a43ad30a4a3ee4d0", - "sha256:5944a9b95e97de1980c65f03b79b356f30a43de48682b8bdd90aa5089f0ec1f4", - "sha256:6f4e5e68b7af950ed7fdb594b3f19a0014a3ace0fedb86acb896e140ffb24302", - "sha256:71a1ef23f22fa8437974b2d60fedb947c99a957ad625f83f43fd3de70f77f458", - "sha256:8a44e9901c0555f95ac401377032f6e6af66d8fc1fbfad77a7a8b1a826e0b93c", - "sha256:b6577f15d5516d7d209c1a8cde23062c0f10625f19e8dc9fb59268859778d7d7", - "sha256:c8fe2d6ff0ff583784039d0255ea7da076efd08507f2be6f68583b0da32e3afb", - "sha256:cadfa2c2cf54d35d13dc8d231253b7985b97d629ab9ca6e7d672c35539d38163", - "sha256:cd1bdace1a8762534e9a36c073cd54e97d517a17d69a17985961265be6d22847", - "sha256:ddbdcd10eb999d7ab292677f588b658372aadb9a52790f82484a37127a390108", - "sha256:e7273c64bccfd9310e9601b8f4511d84730239516bada26a0c9846c9697617ef", - "sha256:e7428977763150b4cf83255625a80a23dfdc94d43be7791ce90799d446b4e26f", - "sha256:e960e8be509e8d6d618300a6c189555c24efde63e85acaf0b14b2cd1ac743315", - "sha256:ecb5dd5990cec6e7f5c9c1124a37cb2c710c6d69b0c1a5c4aa4b35eba0ada068", - "sha256:ef3f5e288aa57b73b034ce9c1f1ac753d968f9069cd0742d1d69c698a0167166", - "sha256:fa5b2dee0e231fa4ad117be114251bdfe6afe39213bd629d43deb117b6a6c40a", - "sha256:fa7fb7973c622b9e725bee1db569d2c2ee64d2f9a089201c5e8185d482c7352d" + "sha256:17e0967ba374fc24141738c69736da90e94419338fd4c7c7bef01ee26b339653", + "sha256:1fee665d2638491f4d6e55bd483e15ef21f6c8c2095f235fef72601021e64f61", + "sha256:22ddd618cefe54305df49e4c069fa65715be4ad0e78e8d252a33debf00f6ede2", + "sha256:24a5045889cc2729033b3e604d496c2b6f588c754f7a62027ad4437a7ecc4837", + "sha256:410283732af311b51b837894fa2f24f2c0039aa7f220135192b38fcc42bd43d3", + "sha256:4732c765372bd78a2d6b2150a6e99d00a78ec963375f236979c0626b97ed8e43", + "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726", + "sha256:4f60460e9f1eb632584c9685bccea152f4ac2130e299784dbaf9fae9f49891b3", + "sha256:5743a5ab42ae40caa8421b320ebf3a998f89c85cdc8376d6b2e00bd12bd1b587", + "sha256:85fb7608121fd5621cc4377a8961d0b32ccf84a7285b4f1d21988b2eae2868e8", + "sha256:9698110e36e2df951c7c36b6729e96429c9c32b3331989ef19976592c5f3c77a", + "sha256:9d397bf41caad3f489e10774667310d73cb9c4258e9aed94b9ec734b34b495fd", + "sha256:b579f8acbf2bdd9ea200b1d5dea36abd93cabf56cf626ab9c744a432e15c815f", + "sha256:b865b01a2e7f96db0c5d12cfea590f98d8c5ba64ad222300d93ce6ff9138bcad", + "sha256:bf34e368e8dd976423396555078def5cfc3039ebc6fc06d1ae2c5a65eebbcde4", + "sha256:c6938967f8528b3668622a9ed3b31d145fab161a32f5891ea7b84f6b790be05b", + "sha256:d1c2676e3d840852a2de7c7d5d76407c772927addff8d742b9808fe0afccebdf", + "sha256:d7124f52f3bd259f510651450e18e0fd081ed82f3c08541dffc7b94b883aa981", + "sha256:d900d949b707778696fdf01036f58c9876a0d8bfe116e8d220cfd4b15f14e741", + "sha256:ebfd274dcd5133e0afae738e6d9da4323c3eb021b3e13052d8cbd0e457b1256e", + "sha256:ed361bb83436f117f9917d282a456f9e5009ea12fd6de8742d1a4752c3017e93", + "sha256:f5144c75445ae3ca2057faac03fda5a902eff196702b0a24daf1d6ce0650514b" ], - "version": "==1.5.2" + "version": "==1.6.0" }, "mccabe": { "hashes": [ diff --git a/bin/engines/CPY378/pyRevitLabs.PythonNet.dll b/bin/engines/CPY378/pyRevitLabs.PythonNet.dll index 51f3d89a4..21d9f8639 100644 Binary files a/bin/engines/CPY378/pyRevitLabs.PythonNet.dll and b/bin/engines/CPY378/pyRevitLabs.PythonNet.dll differ diff --git a/bin/engines/CPY385/pyRevitLabs.PythonNet.dll b/bin/engines/CPY385/pyRevitLabs.PythonNet.dll index 647611126..6c95477be 100644 Binary files a/bin/engines/CPY385/pyRevitLabs.PythonNet.dll and b/bin/engines/CPY385/pyRevitLabs.PythonNet.dll differ diff --git a/bin/engines/IPY2710/pyRevitLoader.dll b/bin/engines/IPY2710/pyRevitLoader.dll index c53481d7d..e4c2d70a4 100644 Binary files a/bin/engines/IPY2710/pyRevitLoader.dll and b/bin/engines/IPY2710/pyRevitLoader.dll differ diff --git a/bin/engines/IPY2710/pyRevitRunner.dll b/bin/engines/IPY2710/pyRevitRunner.dll index ff466e8cb..767c89fdf 100644 Binary files a/bin/engines/IPY2710/pyRevitRunner.dll and b/bin/engines/IPY2710/pyRevitRunner.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Modules.dll b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Modules.dll index 123cfd693..0d2a51d77 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Modules.dll and b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Modules.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.SQLite.dll b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.SQLite.dll index df01c5aa9..e64c2b2b9 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.SQLite.dll and b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.SQLite.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Wpf.dll b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Wpf.dll index f2b6bd18f..cce203d42 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Wpf.dll and b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.Wpf.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.dll b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.dll index 2231ad795..37af00aa3 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLabs.IronPython.dll and b/bin/engines/IPY2711PR/pyRevitLabs.IronPython.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Dynamic.dll b/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Dynamic.dll index 0553a0061..b4cd3dc6a 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Dynamic.dll and b/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Dynamic.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.Metadata.dll b/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.Metadata.dll index d4a64d2f4..78663c4e5 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.Metadata.dll and b/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.Metadata.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.dll b/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.dll index 35c37b08f..419c78f82 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.dll and b/bin/engines/IPY2711PR/pyRevitLabs.Microsoft.Scripting.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitLoader.dll b/bin/engines/IPY2711PR/pyRevitLoader.dll index f71b057f4..d7bf90020 100644 Binary files a/bin/engines/IPY2711PR/pyRevitLoader.dll and b/bin/engines/IPY2711PR/pyRevitLoader.dll differ diff --git a/bin/engines/IPY2711PR/pyRevitRunner.dll b/bin/engines/IPY2711PR/pyRevitRunner.dll index 340651087..5326fbade 100644 Binary files a/bin/engines/IPY2711PR/pyRevitRunner.dll and b/bin/engines/IPY2711PR/pyRevitRunner.dll differ diff --git a/bin/engines/IPY273/pyRevitLoader.dll b/bin/engines/IPY273/pyRevitLoader.dll index 9603ae59a..6386fc38c 100644 Binary files a/bin/engines/IPY273/pyRevitLoader.dll and b/bin/engines/IPY273/pyRevitLoader.dll differ diff --git a/bin/engines/IPY273/pyRevitRunner.dll b/bin/engines/IPY273/pyRevitRunner.dll index 1e922a3fe..c7dfb0c8b 100644 Binary files a/bin/engines/IPY273/pyRevitRunner.dll and b/bin/engines/IPY273/pyRevitRunner.dll differ diff --git a/bin/engines/IPY277/pyRevitLoader.dll b/bin/engines/IPY277/pyRevitLoader.dll index 4a01bd63f..420c65219 100644 Binary files a/bin/engines/IPY277/pyRevitLoader.dll and b/bin/engines/IPY277/pyRevitLoader.dll differ diff --git a/bin/engines/IPY277/pyRevitRunner.dll b/bin/engines/IPY277/pyRevitRunner.dll index 46d9f9485..f9a89bec6 100644 Binary files a/bin/engines/IPY277/pyRevitRunner.dll and b/bin/engines/IPY277/pyRevitRunner.dll differ diff --git a/bin/engines/IPY278/pyRevitLoader.dll b/bin/engines/IPY278/pyRevitLoader.dll index 4950c4cb8..7e037799c 100644 Binary files a/bin/engines/IPY278/pyRevitLoader.dll and b/bin/engines/IPY278/pyRevitLoader.dll differ diff --git a/bin/engines/IPY278/pyRevitRunner.dll b/bin/engines/IPY278/pyRevitRunner.dll index 5d5cc2f86..7cdffdad4 100644 Binary files a/bin/engines/IPY278/pyRevitRunner.dll and b/bin/engines/IPY278/pyRevitRunner.dll differ diff --git a/bin/engines/IPY279/pyRevitLoader.dll b/bin/engines/IPY279/pyRevitLoader.dll index 9c40950a5..35ec2d833 100644 Binary files a/bin/engines/IPY279/pyRevitLoader.dll and b/bin/engines/IPY279/pyRevitLoader.dll differ diff --git a/bin/engines/IPY279/pyRevitRunner.dll b/bin/engines/IPY279/pyRevitRunner.dll index 067c138fe..2a6b97daa 100644 Binary files a/bin/engines/IPY279/pyRevitRunner.dll and b/bin/engines/IPY279/pyRevitRunner.dll differ diff --git a/bin/pyRevitLabs.Common.dll b/bin/pyRevitLabs.Common.dll index 0651a6fc4..7abb7a99b 100644 Binary files a/bin/pyRevitLabs.Common.dll and b/bin/pyRevitLabs.Common.dll differ diff --git a/bin/pyRevitLabs.CommonCLI.dll b/bin/pyRevitLabs.CommonCLI.dll index 70fe7c78f..32a26e1c0 100644 Binary files a/bin/pyRevitLabs.CommonCLI.dll and b/bin/pyRevitLabs.CommonCLI.dll differ diff --git a/bin/pyRevitLabs.CommonWPF.dll b/bin/pyRevitLabs.CommonWPF.dll index f075b9289..8ab888d8a 100644 Binary files a/bin/pyRevitLabs.CommonWPF.dll and b/bin/pyRevitLabs.CommonWPF.dll differ diff --git a/bin/pyRevitLabs.DeffrelDB.dll b/bin/pyRevitLabs.DeffrelDB.dll index 036ccd5ca..6aea97516 100644 Binary files a/bin/pyRevitLabs.DeffrelDB.dll and b/bin/pyRevitLabs.DeffrelDB.dll differ diff --git a/bin/pyRevitLabs.Emojis.dll b/bin/pyRevitLabs.Emojis.dll index 0e1d77a42..fac673a35 100644 Binary files a/bin/pyRevitLabs.Emojis.dll and b/bin/pyRevitLabs.Emojis.dll differ diff --git a/bin/pyRevitLabs.Json.dll b/bin/pyRevitLabs.Json.dll index c55904619..b060d416a 100644 Binary files a/bin/pyRevitLabs.Json.dll and b/bin/pyRevitLabs.Json.dll differ diff --git a/bin/pyRevitLabs.Language.dll b/bin/pyRevitLabs.Language.dll index b7d246c1f..ac89c251e 100644 Binary files a/bin/pyRevitLabs.Language.dll and b/bin/pyRevitLabs.Language.dll differ diff --git a/bin/pyRevitLabs.MahAppsMetro.dll b/bin/pyRevitLabs.MahAppsMetro.dll index 7a7f4e4b7..e8d309543 100644 Binary files a/bin/pyRevitLabs.MahAppsMetro.dll and b/bin/pyRevitLabs.MahAppsMetro.dll differ diff --git a/bin/pyRevitLabs.NLog.dll b/bin/pyRevitLabs.NLog.dll index dd8083279..69c5e569c 100644 Binary files a/bin/pyRevitLabs.NLog.dll and b/bin/pyRevitLabs.NLog.dll differ diff --git a/bin/pyRevitLabs.PyRevit.dll b/bin/pyRevitLabs.PyRevit.dll index accdcaa69..6275ad079 100644 Binary files a/bin/pyRevitLabs.PyRevit.dll and b/bin/pyRevitLabs.PyRevit.dll differ diff --git a/bin/pyRevitLabs.TargetApps.AutoCAD.dll b/bin/pyRevitLabs.TargetApps.AutoCAD.dll index 3c4f4747f..39be11214 100644 Binary files a/bin/pyRevitLabs.TargetApps.AutoCAD.dll and b/bin/pyRevitLabs.TargetApps.AutoCAD.dll differ diff --git a/bin/pyRevitLabs.TargetApps.Navisworks.dll b/bin/pyRevitLabs.TargetApps.Navisworks.dll index 15c44bcff..9a5714735 100644 Binary files a/bin/pyRevitLabs.TargetApps.Navisworks.dll and b/bin/pyRevitLabs.TargetApps.Navisworks.dll differ diff --git a/bin/pyRevitLabs.TargetApps.Revit.dll b/bin/pyRevitLabs.TargetApps.Revit.dll index adbc68e34..8d38d3182 100644 Binary files a/bin/pyRevitLabs.TargetApps.Revit.dll and b/bin/pyRevitLabs.TargetApps.Revit.dll differ diff --git a/bin/pyrevit-autocomplete.exe b/bin/pyrevit-autocomplete.exe index 466a1f416..4969d3ac0 100644 Binary files a/bin/pyrevit-autocomplete.exe and b/bin/pyrevit-autocomplete.exe differ diff --git a/bin/pyrevit-doctor.exe b/bin/pyrevit-doctor.exe index f281407f7..443dd5e36 100644 Binary files a/bin/pyrevit-doctor.exe and b/bin/pyrevit-doctor.exe differ diff --git a/bin/pyrevit-products.json b/bin/pyrevit-products.json index dc009aca8..9ab49038b 100644 --- a/bin/pyrevit-products.json +++ b/bin/pyrevit-products.json @@ -1,4 +1,10 @@ [ + { + "product": "pyRevit", + "release": "4.8.7", + "version": "4.8.7", + "key": "{FED5DEF7-8D3B-4832-BB3E-55C10FCF9ACF}" + }, { "product": "pyRevit", "release": "4.8.6", @@ -227,6 +233,12 @@ "version": "4.6.1", "key": "{EF91A585-DC0C-43B8-B88B-4C130F430E84}" }, + { + "product": "pyRevit CLI", + "release": "4.8.7", + "version": "4.8.7", + "key": "{E61BB97E-6FF1-4706-A92E-D9F38EB9C77B}" + }, { "product": "pyRevit CLI", "release": "4.8.6", diff --git a/bin/pyrevit-stubsbuilder.exe b/bin/pyrevit-stubsbuilder.exe index d26cd8950..192ea6233 100644 Binary files a/bin/pyrevit-stubsbuilder.exe and b/bin/pyrevit-stubsbuilder.exe differ diff --git a/bin/pyrevit-telemetryserver.exe b/bin/pyrevit-telemetryserver.exe index 103f89272..fbf210e34 100644 Binary files a/bin/pyrevit-telemetryserver.exe and b/bin/pyrevit-telemetryserver.exe differ diff --git a/bin/pyrevit-toast.exe b/bin/pyrevit-toast.exe index 3f8a3757e..2aef129e0 100644 Binary files a/bin/pyrevit-toast.exe and b/bin/pyrevit-toast.exe differ diff --git a/bin/pyrevit.exe b/bin/pyrevit.exe index 157dab8f1..8ef62107e 100644 Binary files a/bin/pyrevit.exe and b/bin/pyrevit.exe differ diff --git a/dev/pyRevit/AssemblyVersion.cs b/dev/pyRevit/AssemblyVersion.cs index e494462b3..7b22357f2 100644 --- a/dev/pyRevit/AssemblyVersion.cs +++ b/dev/pyRevit/AssemblyVersion.cs @@ -2,5 +2,5 @@ using System.Runtime.InteropServices; using System.Runtime.CompilerServices; -[assembly: AssemblyVersion("4.8.6")] -[assembly: AssemblyFileVersion("4.8.6")] +[assembly: AssemblyVersion("4.8.7")] +[assembly: AssemblyFileVersion("4.8.7")] diff --git a/dev/pyRevitLabs/pyRevitCLI/PyRevitCLI.cs b/dev/pyRevitLabs/pyRevitCLI/PyRevitCLI.cs index f75586b4f..035f8b0a9 100644 --- a/dev/pyRevitLabs/pyRevitCLI/PyRevitCLI.cs +++ b/dev/pyRevitLabs/pyRevitCLI/PyRevitCLI.cs @@ -80,6 +80,7 @@ internal static class PyRevitCLI { internal static bool IsHelpUsagePatternMode = false; // cli version property + public static string CLIPath => Assembly.GetExecutingAssembly().Location; public static Version CLIVersion => Assembly.GetExecutingAssembly().GetName().Version; // cli entry point: @@ -218,12 +219,20 @@ private static void ProcessArguments() { else if (all("open")) PyRevitCLICloneCmds.OpenClone(TryGetValue("")); - else if (all("add")) - PyRevitCLICloneCmds.RegisterClone( - TryGetValue(""), - TryGetValue(""), - force: arguments["--force"].IsTrue - ); + else if (all("add")) { + if(all("this")) + PyRevitCLICloneCmds.RegisterClone( + TryGetValue(""), + Path.GetDirectoryName(CLIPath), + force: arguments["--force"].IsTrue + ); + else + PyRevitCLICloneCmds.RegisterClone( + TryGetValue(""), + TryGetValue(""), + force: arguments["--force"].IsTrue + ); + } else if (all("forget")) PyRevitCLICloneCmds.ForgetClone( diff --git a/dev/pyRevitLabs/pyRevitCLI/PyRevitCLIAppHelps.cs b/dev/pyRevitLabs/pyRevitCLI/PyRevitCLIAppHelps.cs index b1369a1cd..4755ac3fe 100644 --- a/dev/pyRevitLabs/pyRevitCLI/PyRevitCLIAppHelps.cs +++ b/dev/pyRevitLabs/pyRevitCLI/PyRevitCLIAppHelps.cs @@ -97,6 +97,7 @@ internal static void { "info", "Print info about clone" }, { "open", "Open clone directory in file browser" }, { "add", "Register an existing clone" }, + { "add this", "Register clone that contains this utility" }, { "forget", "Forget a registered clone" }, { "rename", "Rename a clone" }, { "delete", "Delete a clone" }, @@ -116,6 +117,7 @@ internal static void { "", "Clone tag to rebase to" }, { "", "Clone commit rebase to" }, { "", "New clone remote origin url" }, + { "--force", "Just do it; I know what I am doing" }, { "--reset", "Reset remote origin url to default" }, { "--clearconfigs", "Clear pyRevit configurations." }, { "--all", "All clones" }, diff --git a/dev/pyRevitLabs/pyRevitCLI/Resources/UsagePatterns.txt b/dev/pyRevitLabs/pyRevitCLI/Resources/UsagePatterns.txt index ebc2d8c3d..a507dc2a1 100644 --- a/dev/pyRevitLabs/pyRevitCLI/Resources/UsagePatterns.txt +++ b/dev/pyRevitLabs/pyRevitCLI/Resources/UsagePatterns.txt @@ -11,6 +11,7 @@ Usage: pyrevit clone [--dest=] [--source=] [--branch=] [--log=] [(--username= --password= | --token=)] pyrevit clones [(-h | --help)] pyrevit clones (info | open) + pyrevit clones add this [--force] [--log=] pyrevit clones add [--force] [--log=] pyrevit clones forget (--all | ) [--log=] pyrevit clones rename [--log=] diff --git a/dev/pyRevitLabs/pyRevitLabs.Common/CommonUtils.cs b/dev/pyRevitLabs/pyRevitLabs.Common/CommonUtils.cs index 0775ddf02..56f10697f 100644 --- a/dev/pyRevitLabs/pyRevitLabs.Common/CommonUtils.cs +++ b/dev/pyRevitLabs/pyRevitLabs.Common/CommonUtils.cs @@ -13,6 +13,7 @@ using pyRevitLabs.Common.Extensions; using pyRevitLabs.NLog; using System.Linq; +using System.Threading; namespace pyRevitLabs.Common { public static class CommonUtils { @@ -29,6 +30,44 @@ public static bool VerifyFile(string filePath) { return false; } + // https://stackoverflow.com/a/937558/2350244 + public static bool IsFileLocked(FileInfo file) { + try { + using (FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None)) { + stream.Close(); + } + } + catch (IOException) { + //the file is unavailable because it is: + //still being written to + //or being processed by another thread + //or does not exist (has already been processed) + return true; + } + + //file is not locked + return false; + } + + public static void VerifyFileAccessible(string filePath) { + // make sure file is accessible, + // try multiple times and wait a little in between + // fail after trying + var finfo = new FileInfo(filePath); + + uint tries = 3; + do { + if (IsFileLocked(finfo)) { + Thread.Sleep(200); + tries--; + } + else + return; + } while (tries > 0); + + throw new PyRevitException("File is not accessible"); + } + public static bool VerifyPath(string path) { if (path != null && path != string.Empty) return Directory.Exists(path); @@ -157,8 +196,8 @@ public static string DownloadFile(string url, string destPath, string progressTo // while (client.IsBusy) ; //} //else { - logger.Debug("Downloading \"{0}\"", url); - client.DownloadFile(url, destPath); + logger.Debug("Downloading \"{0}\"", url); + client.DownloadFile(url, destPath); //} } } diff --git a/dev/pyRevitLabs/pyRevitLabs.Common/UserEnv.cs b/dev/pyRevitLabs/pyRevitLabs.Common/UserEnv.cs index e703694e0..5210228a1 100644 --- a/dev/pyRevitLabs/pyRevitLabs.Common/UserEnv.cs +++ b/dev/pyRevitLabs/pyRevitLabs.Common/UserEnv.cs @@ -93,6 +93,11 @@ public static string GetLoggedInUserName() { return null; } + public static bool IsRunAsElevated() { + WindowsIdentity id = WindowsIdentity.GetCurrent(); + return id.Owner != id.User; + } + public static bool IsRunAsAdmin() { WindowsIdentity id = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(id); diff --git a/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfig.cs b/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfig.cs index aa9cce5f0..5c3286dbf 100644 --- a/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfig.cs +++ b/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfig.cs @@ -19,6 +19,7 @@ public class PyRevitConfig { public PyRevitConfig(string cfgFilePath) { if (cfgFilePath != null) { if (CommonUtils.VerifyFile(cfgFilePath)) { + CommonUtils.VerifyFileAccessible(cfgFilePath); ConfigFilePath = cfgFilePath; // INI formatting diff --git a/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfigs.cs b/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfigs.cs index fcece42f6..2ecd893a7 100644 --- a/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfigs.cs +++ b/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConfigs.cs @@ -65,6 +65,7 @@ public static void SeedConfig(bool makeCurrentUserAsOwner = false, string setupF try { if (File.Exists(sourceFile)) { CommonUtils.EnsureFile(targetFile); + CommonUtils.VerifyFileAccessible(targetFile); File.Copy(sourceFile, targetFile, true); if (makeCurrentUserAsOwner) { diff --git a/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConsts.cs b/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConsts.cs index d35ab279c..2fd6788af 100644 --- a/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConsts.cs +++ b/dev/pyRevitLabs/pyRevitLabs.PyRevit/PyRevitConsts.cs @@ -198,8 +198,9 @@ public static string FindConfigFileInDirectory(string sourcePath) { // @reviewed public static string ConfigFilePath { get { - var cfgFile = FindConfigFileInDirectory(PyRevitLabsConsts.PyRevitPath); - return cfgFile != null ? cfgFile : Path.Combine(PyRevitLabsConsts.PyRevitPath, DefaultConfigsFileName); + string configRoot = UserEnv.IsRunAsElevated() ? PyRevitLabsConsts.PyRevitProgramDataPath : PyRevitLabsConsts.PyRevitPath; + var cfgFile = FindConfigFileInDirectory(configRoot); + return cfgFile != null ? cfgFile : Path.Combine(configRoot, DefaultConfigsFileName); } } diff --git a/dev/pyRevitLabs/pyRevitLabs.TargetApps.Revit/RevitAddons.cs b/dev/pyRevitLabs/pyRevitLabs.TargetApps.Revit/RevitAddons.cs index 899a0d3ea..51c1abd95 100644 --- a/dev/pyRevitLabs/pyRevitLabs.TargetApps.Revit/RevitAddons.cs +++ b/dev/pyRevitLabs/pyRevitLabs.TargetApps.Revit/RevitAddons.cs @@ -54,6 +54,9 @@ public static string GetRevitAddonsFolder(int revitYear, bool allUsers = false) } public static string GetRevitAddonsFilePath(int revitYear, string addinFileName, bool allusers = false) { + if (UserEnv.IsRunAsElevated()) + allusers = true; + var rootFolder = allusers ? System.Environment.SpecialFolder.CommonApplicationData : System.Environment.SpecialFolder.ApplicationData; return Path.Combine(GetRevitAddonsFolder(revitYear, allUsers: allusers), addinFileName + ".addin"); diff --git a/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs b/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs index d3c44a8aa..2d270bbc4 100644 --- a/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs +++ b/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs @@ -4,13 +4,26 @@ using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; +/* Note: + * It is necessary that this code object do not have any references to IronPython. + * To ensure the correct version of IronPython dlls are loaded, the OnStartup() + * methods manually loads the IronPython assemblies before calling into the + * ScriptExecutor that has IronPython references + */ namespace PyRevitLoader { [Regeneration(RegenerationOption.Manual)] [Transaction(TransactionMode.Manual)] class PyRevitLoaderApplication : IExternalApplication { + public static string LoaderPath => Path.GetDirectoryName(typeof(PyRevitLoaderApplication).Assembly.Location); + // Hook into Revit to allow starting a command. Result IExternalApplication.OnStartup(UIControlledApplication application) { try { + // load all engine assemblies + // this is to ensure pyRevit is loaded on its own assemblies + foreach (var engineDll in Directory.GetFiles(LoaderPath, "*.dll")) + Assembly.LoadFrom(engineDll); + return ExecuteStartupScript(application); } catch (Exception ex) { diff --git a/dev/pyRevitLoader/Source/PyRevitRunnerApplication.cs b/dev/pyRevitLoader/Source/PyRevitRunnerApplication.cs index 7e47c1c47..53d15f757 100644 --- a/dev/pyRevitLoader/Source/PyRevitRunnerApplication.cs +++ b/dev/pyRevitLoader/Source/PyRevitRunnerApplication.cs @@ -1,14 +1,29 @@ using System; +using System.IO; +using System.Reflection; using Autodesk.Revit.Attributes; using Autodesk.Revit.UI; +/* Note: + * It is necessary that this code object do not have any references to IronPython. + * To ensure the correct version of IronPython dlls are loaded, the OnStartup() + * methods manually loads the IronPython assemblies before calling into the + * ScriptExecutor that has IronPython references + */ namespace PyRevitRunner { [Regeneration(RegenerationOption.Manual)] [Transaction(TransactionMode.Manual)] class PyRevitRunnerApplication : IExternalApplication { + public static string LoaderPath => Path.GetDirectoryName(typeof(PyRevitRunnerApplication).Assembly.Location); + // Hook into Revit to allow starting a command. Result IExternalApplication.OnStartup(UIControlledApplication application) { try { + // load all engine assemblies + // this is to ensure pyRevit is loaded on its own assemblies + foreach (var engineDll in Directory.GetFiles(LoaderPath, "*.dll")) + Assembly.LoadFrom(engineDll); + return RegisterExternalCommand(application); } catch (Exception ex) { diff --git a/dev/pyRevitWPFForms/pyRevitWPFForms.csproj b/dev/pyRevitWPFForms/pyRevitWPFForms.csproj index c65a74c30..390593f37 100644 --- a/dev/pyRevitWPFForms/pyRevitWPFForms.csproj +++ b/dev/pyRevitWPFForms/pyRevitWPFForms.csproj @@ -67,6 +67,11 @@ MSBuild:Compile Designer + + Dev\DockableExample.xaml + MSBuild:Compile + Designer + Dev\NonModalWindow.xaml MSBuild:Compile diff --git a/docs/Pipfile b/docs/Pipfile index 8d84b68b4..20dbc8bf8 100644 --- a/docs/Pipfile +++ b/docs/Pipfile @@ -5,7 +5,7 @@ name = "pypi" [packages] sphinx-rtd-theme = "*" -pygments = "*" +pygments = ">=2.7.4" sphinx = "*" readthedocs-sphinx-ext = "*" "doc8" = "*" diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/About.pushbutton/aboutscript.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/About.pushbutton/aboutscript.py index 6e1d33e13..ba47ec445 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/About.pushbutton/aboutscript.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/About.pushbutton/aboutscript.py @@ -52,10 +52,12 @@ def __init__(self, xaml_file_name): self.version.Text = nice_version self.pyrevit_branch.Text = self.branch_name self.pyrevit_deploy.Text = '{} deployment'.format(self.deployname) - self.pyrevit_engine.Text = \ - 'Running on IronPython {} (cpython {})'\ - .format(sys.version.split('(')[0].strip(), - '.'.join(list(str(user_config.cpython_engine_version)))) + cpyver = user_config.get_active_cpython_engine() + if cpyver: + self.pyrevit_engine.Text = \ + 'Running on IronPython {} (cpython {})'\ + .format(sys.version.split('(')[0].strip(), + '.'.join(list(str(cpyver.Version)))) rocketmodetext = \ 'Rocket-mode {}' \ diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/SettingsWindow.xaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/SettingsWindow.xaml index 41a628690..4432d066e 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/SettingsWindow.xaml +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/SettingsWindow.xaml @@ -534,7 +534,8 @@ You can disable or enable pyRevit for installed Revit versions from here. This effectively removes the - pyRevit.addin manifest file from %appdata%/Autodesk/Revit/Addins folders. + pyRevit.addin manifest file from %appdata%/Autodesk/Revit/Addins folders. Note that attachment to any of Revit versions listed here will be read-only and can not be changed, if it is + marked with <current> or <all users> Autodesk Revit 2021 @@ -624,10 +625,12 @@ - + +