diff --git a/.coveragerc b/.coveragerc index 5ca5b87..f303626 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,6 +1,6 @@ [run] source = - lucid + lucid [report] omit = #tests diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..72e8b5b --- /dev/null +++ b/.flake8 @@ -0,0 +1,3 @@ +[flake8] +exclude = .git,__pycache__,build,dist,versioneer.py,docs/*,lucid/_version.py +max-line-length = 88 diff --git a/LICENSE.md b/LICENSE.md index 010b5a4..336b168 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,39 +1,39 @@ -Copyright (c) 2018, The Board of Trustees of the Leland Stanford Junior -University, through SLAC National Accelerator Laboratory (subject to receipt -of any required approvals from the U.S. Dept. of Energy). All rights reserved. -Redistribution and use in source and binary forms, with or without +Copyright (c) 2018, The Board of Trustees of the Leland Stanford Junior +University, through SLAC National Accelerator Laboratory (subject to receipt +of any required approvals from the U.S. Dept. of Energy). All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -(1) Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -(2) Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. +(1) Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. -(3) Neither the name of the Leland Stanford Junior University, SLAC National - Accelerator Laboratory, U.S. Dept. of Energy nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. +(2) Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER, THE UNITED STATES GOVERNMENT, -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +(3) Neither the name of the Leland Stanford Junior University, SLAC National + Accelerator Laboratory, U.S. Dept. of Energy nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER, THE UNITED STATES GOVERNMENT, +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -You are under no obligation whatsoever to provide any bug fixes, patches, or -upgrades to the features, functionality or performance of the source code -("Enhancements") to anyone; however, if you choose to make your Enhancements -available either publicly, or directly to SLAC National Accelerator Laboratory, -without imposing a separate written license agreement for such Enhancements, -then you hereby grant the following license: a non-exclusive, royalty-free +You are under no obligation whatsoever to provide any bug fixes, patches, or +upgrades to the features, functionality or performance of the source code +("Enhancements") to anyone; however, if you choose to make your Enhancements +available either publicly, or directly to SLAC National Accelerator Laboratory, +without imposing a separate written license agreement for such Enhancements, +then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate -into other computer software, distribute, and sublicense such Enhancements or +into other computer software, distribute, and sublicense such Enhancements or derivative works thereof, in binary and source code form. diff --git a/docs/source/index.rst b/docs/source/index.rst index 79d1144..034edcb 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,4 +13,4 @@ LCLS User Control and Interface Design :maxdepth: 2 :caption: Troubleshooting - troubleshooting/remote_access.rst \ No newline at end of file + troubleshooting/remote_access.rst diff --git a/github_deploy_key_pcdshub_lucid.enc b/github_deploy_key_pcdshub_lucid.enc index 630e3bc..a7d020d 100644 --- a/github_deploy_key_pcdshub_lucid.enc +++ b/github_deploy_key_pcdshub_lucid.enc @@ -1 +1 @@ -gAAAAABgmZouqhHwj8IAPXomlr7A8M586PkgjvYDjSt9CQm6vJIu-aYF39XZerHfb0mhB7ngYZtzNHwsp_-2l2ItjcsSJ6TVX6N2D8bZBBVXfPO7kA8iyPzF_VwFM0YQVy1eQVBl3hWFCgjQktRxj4BdVUg4n7ODCUS1hbo5V1pVz6_knxHK5a1bu8EwpCGUE47zJZr_-WunsB76hmf-mjxjN4YTCkAk-eEURCdtuXswXEnb7TMllk4O2ToY8yOmX-wrpkEoe6w5dwPb6-_58ctZozLKbYmEmaQ9bbpm8QodS0yQVHhQDfywkSxT3rUoZoMsHf_GhVZceDC3JVY8OIZrIgVdvxARgw-fFTWiQJy-7x5Y51nlSry6yRtlRYm5IE3W36jie_GgsJix3A-iqM8T_9FFiEo0M4JLg514JsXDApw0fw_F_OA_1FqmEq6KoBW8ufvHDQN63SgyNrEHCaWRnO5mE-aQRuIgopsL3WHFFkPNrx0QbdX7DEiG0m5Xln4I5-2A5BG_o3M7swkXCJGzy-qWWDl_y3hv_pZ8JK-Sqj26MrC3af4xy5ZkGDvvbo_5UhUEuXV1dachE5u4YYyKAdJ13oaxhuGenpCyDT45ftla8cOP0YFnuxupKBy3ZDqdV-qJldzbJ_CEJXnDhX6pqvYrPgLJF6gcYxUMadR59Pl0_vlfby15HJDPXSD58_tH2YHwoFq6K68fgpYfOFsjAEMAZEQFdE7sDxBXicmAri3jHz6ZEsdI1NxgohpkN4MVPcVIXTPXLV6AbX0PYFWXDUlEctgLirT8iPz01TIyiTiw8WMmrPGj2g54GHemidR6k5xdNTFy9u3OmYZ80NLzqnqYQ06ObWyRs8Az4xrcZv610uTjZlAjMNQKoiIH9xCM0xTJxGJ6qcSQghJLUU_HPody98T6BdEukJUpB9y9cIWT3iwjjHEDMY_t92C9ZMq3RDtS4A_ZtiXQBTIjxOAD3ILpHlxgku1NdKU2WkTGJgQv1TZYcqTzkXuCJbmJhqbhm71ZH8X5kxprCcn8wQMrS69a-Ay364xb8fbzO329732drG_XvkARC1xRMc_W3S5qRYRZh0tCGSK3X5uuMfXVuOJMwn2T9ICsJfPss9a6qwIkDqzgtJDn_w31SzpCfwlkt6kBN391DJQAOlAUCNQ93P-Z4Q8njyuvonRXj7zEGP85HG0yK0NIs9RfWgpq2fWzpH6vhMvTS8IOb0BbSsJXoOq7d44hYyh09LMo5TkqyvRWkRfdT67wayTDgA6qeY2E2tNCgI-hWVpjOrXHhf8VGLSQzTnUvTHMLBDpG4q-2EWyl420jL22CuvXRJJetfH6ThGQeUHhMs8uBQVqpegubKN-JZNGIwfKprpIDtxZOwYZd3chH8h9dfQR483PT-A4SU1yd2yNZ13h-1aJgmwDp_nUKF5l5ejbltIbsMMQqMsAL9rig-8h6SPspHxxdXQvAX9o99dXZj4aeuX0rNzhgOMtg6821ERcrsKUgWb0CLNOXEagGw7YlO0EeGlv8E3CaeHnBLD2DXcUJU6SYi9o5scLJU6Uk2XKAr-FKSJKc9c_AOTtslhGlod8D5_klp6yMSkabgVVvekO7LjO6tMeNY6qoz6zFPR2eP_C50tpMPhy3jagpNcMoqSQvIj69V6NyHyIBB4CE8HVVrAq4lgk3APNoD4tFVTZP553HNNYAUUMT6VFzqe4_noq2dnwHmIU0r5zH7vIT158L4Aj7LWsK_i2KZK_e75DAB5JoaoCc-sQU-vxghMnpkuuykcFQ4Uz4KB8x58nvL3cfeAuGohSNSUN5sLF733qPj0xC7uUz0moeZLM3HJdT4uWnfPD307DkbnU6SDWi7ae6Cdsg0q6I0wyHHCDG5E9WF0BJXFx_qY-AsT2-eIy28i_g3qgNH_aUJsBuDyahBANXBmySlhltiUGj9bmqDvwwPVjvLBYjnIFu2LxSdWEYgwjvrNkMTccWtXzr_cjxf1I7-7x1kRI_teYC8tVpM_yrRmtJMPQkwY3Z9LQZX9hpJZfgZJFG6BipsBhy3DkR27q3cYzrA7SmwS_EST4eQucoEto7H2p_778adfi4tpnfMmdC67M8u5HN8keOwEwQFiFLpJTkvbsJUtBqm9IcvgmlpXjGwCCMgF1dk2GQ1pUB4k772BZe9BuVnOuK2TUak0K8rYR2cP4YzOb4Q8_MUeNHaZ943dGFqy_P3rICYYTzHozljAeJ2AX0a3pnhdCEnvNYyGKyIFIBiEN_KwfgsWvYLs8yyKiG7VJE2DiD2-QO2tDDEFfmb7pf9E88n3Y1Xz1Qj1sPuIFoWCj4Fa4lnqX71coww1tvlxWhnei-1PMvGjFB8_UQOnVWNnwbQvX0h2GgAVqA3lIAC60gZGBQxi_zMKatFNBdnAHo3xD_-0C7Ni0VQIS22XtAr2KyGz-fLTr4QPx0zA6V8YeSdi5cA7DB0hHw39Q6j9XQgDZyWCE8fTHzKTEvhBdkPO7eY8sxpZs4BEAOC8LPDxPXC4eXHZ5WPelbGAoQuidJRA4s0Xp47_CYvhQBO5X8WOwyw2wMLGWahi1IC9FbfvGg-EVLXhYGcvI4HvGQ3kApw6KZRt90VecsxsfgXntipZJcWpUnW_w9z63bE2eBmIfPDw4w8d9oMuL0Fjgwcl3S41GmHCvC86qH1EuxUbKzgJxIj6JivQVX0RSSn_7fpfWkScDUZY45ztxE2l77GNB6_Vg24WZUw3yTAlq-fRnjxJMh6MwPfzVVanRGQfY0veU23mKCctI5aXm1_mZlaIqonS5im-6UIW7-0kmf6Pmh_MheKCe-BtV4PhdjoTs9qk4xdIofXwVgJROA9Oj3wuvKXjbxL-RxknruSe360vGKsJsxCpG25t7CnEWDs-_lwbiTUkPKFAAC-JkHlo-mbc8NcrBBef373OgjmjzxHJrgo0SUD8513e2gxQ5S6ZEnT2OFrC9U4L2BHmN9qiWWMddJ01tpViRcNIrU9QFTr_FSTnt5H4RVlFRVd-ZYlpvuq3D8vJQNuW43m_lRJEfCaSG1-4CPbNgQrk_RsZR5eIdGmPnjbPJM987smfMjGcA7PORAsKdsIhgpINgOFdaOxInZrNHKkJGkB3eRt0dJ0_EWUWgE_2z7SaWQAezeJKy4HNNaajT_VXQGQvqyxfdMv-qvm15k4iYhblyuWtc2c-wfRStjEYSezsQpvZ_JpK8p5-ExyiUIoBd0BZ11tgMzZlCnbpF4Apd0dC90ed5OHy_uZ8-uPOzY2aaF26dgYNTQc_Z0NOmAWZGFwmRgCOIlpZVF2-UKj3me4NXq4uD5miyXLYXYH_OOj0pZcapxZbiaNFOLTW4L93OXB7PDgPGKsqBctHdSvdyPdV3WpBsfMrBu7sy88Qr8Ov3rgwDkMQVrW2qI4xL91qZA6HYNIT-Ns06ZcmQ7RcC02xgYdxNILhM7CRS-LRRZC9vejpy8lUp8_rxziSZOqERZAdqqeOC1osdFfDTlg7EMhAj-QqbILznocBdjUVsIU95tBs1CDQnBO7QtEaC6rhG1pfAeNpjM3rdti9kDgZTPHDTNH0XqXqG86S8fo-oahU0zU79Ew1ivGoOZJSoWb_3dF5q_-cC5dj9gos515u9Q2_KRflgjlv1SCticN5HNUckGK0HiZTrh3n6B5nPhM9fQGK9sVRYAzj9GfOUOn3-TUE4mxC6ezq4bNEqK4dbmc1eAX24Ig5JzSHzxeZzr5nmxM5uxVCCHvl4mEeOCRYUvV59IvKvmZSKsaleYCdyk9rBo7dZephneeuzdHzkscVNMxNAj9CuDITby740cVZ-ik5sA-g0MBdkJgizTClu_kqKA_6ToL4qVTfrNN2-oNqli8Kx27_sHNvkutFI8HUa-SjM1peb0AJJaG3vSGDYBRLbfueI_Cro_H7nKp9oKdZuM-IVXgUUfMG6UWNDSScZA5LL9EjHAVTAsfybfNfceg4_j6sn5QGgWQzjFf9uLcl6F-z2FJ1z-7cnGDOMYbin0KXUWJIzSGETQSU1_6bEGw5dwdw5DjfLKatSw_HXIV9QuqI4Of_ka49-n2lQR3lJob57pHcN78W339LSXtM-Moj1vHI_aUkyR2WF2CtRF80LB0f0Iuuxd5zcra0Qlnn5qZkhNrERZM3EnRZW3WjTMRPYQDwFDWvY_a8ve1bn5cFyxhBqB2UvXVq_H9DwD5oGFxeQdSuX5g6j1bYutugONSvg308LdR7EC8FbqZDrVSGPzo-MvGt-kEH_NvKdZV47471Ng63SyeZf8va7RAqKVEZA5edKgqB6WAMkGdVKPGCB77xjWrTWXb-8zQrNly7zj3OciPjAoh4EyncoGoBT--slHfpOnTfXf5u68Wr56m4_Uu71P1JHhoL4QCEbayBar3J-QaFmCB6VjI_tIFrddGnBO0d9hp5bL-qGN2HCQA== \ No newline at end of file +gAAAAABgmZouqhHwj8IAPXomlr7A8M586PkgjvYDjSt9CQm6vJIu-aYF39XZerHfb0mhB7ngYZtzNHwsp_-2l2ItjcsSJ6TVX6N2D8bZBBVXfPO7kA8iyPzF_VwFM0YQVy1eQVBl3hWFCgjQktRxj4BdVUg4n7ODCUS1hbo5V1pVz6_knxHK5a1bu8EwpCGUE47zJZr_-WunsB76hmf-mjxjN4YTCkAk-eEURCdtuXswXEnb7TMllk4O2ToY8yOmX-wrpkEoe6w5dwPb6-_58ctZozLKbYmEmaQ9bbpm8QodS0yQVHhQDfywkSxT3rUoZoMsHf_GhVZceDC3JVY8OIZrIgVdvxARgw-fFTWiQJy-7x5Y51nlSry6yRtlRYm5IE3W36jie_GgsJix3A-iqM8T_9FFiEo0M4JLg514JsXDApw0fw_F_OA_1FqmEq6KoBW8ufvHDQN63SgyNrEHCaWRnO5mE-aQRuIgopsL3WHFFkPNrx0QbdX7DEiG0m5Xln4I5-2A5BG_o3M7swkXCJGzy-qWWDl_y3hv_pZ8JK-Sqj26MrC3af4xy5ZkGDvvbo_5UhUEuXV1dachE5u4YYyKAdJ13oaxhuGenpCyDT45ftla8cOP0YFnuxupKBy3ZDqdV-qJldzbJ_CEJXnDhX6pqvYrPgLJF6gcYxUMadR59Pl0_vlfby15HJDPXSD58_tH2YHwoFq6K68fgpYfOFsjAEMAZEQFdE7sDxBXicmAri3jHz6ZEsdI1NxgohpkN4MVPcVIXTPXLV6AbX0PYFWXDUlEctgLirT8iPz01TIyiTiw8WMmrPGj2g54GHemidR6k5xdNTFy9u3OmYZ80NLzqnqYQ06ObWyRs8Az4xrcZv610uTjZlAjMNQKoiIH9xCM0xTJxGJ6qcSQghJLUU_HPody98T6BdEukJUpB9y9cIWT3iwjjHEDMY_t92C9ZMq3RDtS4A_ZtiXQBTIjxOAD3ILpHlxgku1NdKU2WkTGJgQv1TZYcqTzkXuCJbmJhqbhm71ZH8X5kxprCcn8wQMrS69a-Ay364xb8fbzO329732drG_XvkARC1xRMc_W3S5qRYRZh0tCGSK3X5uuMfXVuOJMwn2T9ICsJfPss9a6qwIkDqzgtJDn_w31SzpCfwlkt6kBN391DJQAOlAUCNQ93P-Z4Q8njyuvonRXj7zEGP85HG0yK0NIs9RfWgpq2fWzpH6vhMvTS8IOb0BbSsJXoOq7d44hYyh09LMo5TkqyvRWkRfdT67wayTDgA6qeY2E2tNCgI-hWVpjOrXHhf8VGLSQzTnUvTHMLBDpG4q-2EWyl420jL22CuvXRJJetfH6ThGQeUHhMs8uBQVqpegubKN-JZNGIwfKprpIDtxZOwYZd3chH8h9dfQR483PT-A4SU1yd2yNZ13h-1aJgmwDp_nUKF5l5ejbltIbsMMQqMsAL9rig-8h6SPspHxxdXQvAX9o99dXZj4aeuX0rNzhgOMtg6821ERcrsKUgWb0CLNOXEagGw7YlO0EeGlv8E3CaeHnBLD2DXcUJU6SYi9o5scLJU6Uk2XKAr-FKSJKc9c_AOTtslhGlod8D5_klp6yMSkabgVVvekO7LjO6tMeNY6qoz6zFPR2eP_C50tpMPhy3jagpNcMoqSQvIj69V6NyHyIBB4CE8HVVrAq4lgk3APNoD4tFVTZP553HNNYAUUMT6VFzqe4_noq2dnwHmIU0r5zH7vIT158L4Aj7LWsK_i2KZK_e75DAB5JoaoCc-sQU-vxghMnpkuuykcFQ4Uz4KB8x58nvL3cfeAuGohSNSUN5sLF733qPj0xC7uUz0moeZLM3HJdT4uWnfPD307DkbnU6SDWi7ae6Cdsg0q6I0wyHHCDG5E9WF0BJXFx_qY-AsT2-eIy28i_g3qgNH_aUJsBuDyahBANXBmySlhltiUGj9bmqDvwwPVjvLBYjnIFu2LxSdWEYgwjvrNkMTccWtXzr_cjxf1I7-7x1kRI_teYC8tVpM_yrRmtJMPQkwY3Z9LQZX9hpJZfgZJFG6BipsBhy3DkR27q3cYzrA7SmwS_EST4eQucoEto7H2p_778adfi4tpnfMmdC67M8u5HN8keOwEwQFiFLpJTkvbsJUtBqm9IcvgmlpXjGwCCMgF1dk2GQ1pUB4k772BZe9BuVnOuK2TUak0K8rYR2cP4YzOb4Q8_MUeNHaZ943dGFqy_P3rICYYTzHozljAeJ2AX0a3pnhdCEnvNYyGKyIFIBiEN_KwfgsWvYLs8yyKiG7VJE2DiD2-QO2tDDEFfmb7pf9E88n3Y1Xz1Qj1sPuIFoWCj4Fa4lnqX71coww1tvlxWhnei-1PMvGjFB8_UQOnVWNnwbQvX0h2GgAVqA3lIAC60gZGBQxi_zMKatFNBdnAHo3xD_-0C7Ni0VQIS22XtAr2KyGz-fLTr4QPx0zA6V8YeSdi5cA7DB0hHw39Q6j9XQgDZyWCE8fTHzKTEvhBdkPO7eY8sxpZs4BEAOC8LPDxPXC4eXHZ5WPelbGAoQuidJRA4s0Xp47_CYvhQBO5X8WOwyw2wMLGWahi1IC9FbfvGg-EVLXhYGcvI4HvGQ3kApw6KZRt90VecsxsfgXntipZJcWpUnW_w9z63bE2eBmIfPDw4w8d9oMuL0Fjgwcl3S41GmHCvC86qH1EuxUbKzgJxIj6JivQVX0RSSn_7fpfWkScDUZY45ztxE2l77GNB6_Vg24WZUw3yTAlq-fRnjxJMh6MwPfzVVanRGQfY0veU23mKCctI5aXm1_mZlaIqonS5im-6UIW7-0kmf6Pmh_MheKCe-BtV4PhdjoTs9qk4xdIofXwVgJROA9Oj3wuvKXjbxL-RxknruSe360vGKsJsxCpG25t7CnEWDs-_lwbiTUkPKFAAC-JkHlo-mbc8NcrBBef373OgjmjzxHJrgo0SUD8513e2gxQ5S6ZEnT2OFrC9U4L2BHmN9qiWWMddJ01tpViRcNIrU9QFTr_FSTnt5H4RVlFRVd-ZYlpvuq3D8vJQNuW43m_lRJEfCaSG1-4CPbNgQrk_RsZR5eIdGmPnjbPJM987smfMjGcA7PORAsKdsIhgpINgOFdaOxInZrNHKkJGkB3eRt0dJ0_EWUWgE_2z7SaWQAezeJKy4HNNaajT_VXQGQvqyxfdMv-qvm15k4iYhblyuWtc2c-wfRStjEYSezsQpvZ_JpK8p5-ExyiUIoBd0BZ11tgMzZlCnbpF4Apd0dC90ed5OHy_uZ8-uPOzY2aaF26dgYNTQc_Z0NOmAWZGFwmRgCOIlpZVF2-UKj3me4NXq4uD5miyXLYXYH_OOj0pZcapxZbiaNFOLTW4L93OXB7PDgPGKsqBctHdSvdyPdV3WpBsfMrBu7sy88Qr8Ov3rgwDkMQVrW2qI4xL91qZA6HYNIT-Ns06ZcmQ7RcC02xgYdxNILhM7CRS-LRRZC9vejpy8lUp8_rxziSZOqERZAdqqeOC1osdFfDTlg7EMhAj-QqbILznocBdjUVsIU95tBs1CDQnBO7QtEaC6rhG1pfAeNpjM3rdti9kDgZTPHDTNH0XqXqG86S8fo-oahU0zU79Ew1ivGoOZJSoWb_3dF5q_-cC5dj9gos515u9Q2_KRflgjlv1SCticN5HNUckGK0HiZTrh3n6B5nPhM9fQGK9sVRYAzj9GfOUOn3-TUE4mxC6ezq4bNEqK4dbmc1eAX24Ig5JzSHzxeZzr5nmxM5uxVCCHvl4mEeOCRYUvV59IvKvmZSKsaleYCdyk9rBo7dZephneeuzdHzkscVNMxNAj9CuDITby740cVZ-ik5sA-g0MBdkJgizTClu_kqKA_6ToL4qVTfrNN2-oNqli8Kx27_sHNvkutFI8HUa-SjM1peb0AJJaG3vSGDYBRLbfueI_Cro_H7nKp9oKdZuM-IVXgUUfMG6UWNDSScZA5LL9EjHAVTAsfybfNfceg4_j6sn5QGgWQzjFf9uLcl6F-z2FJ1z-7cnGDOMYbin0KXUWJIzSGETQSU1_6bEGw5dwdw5DjfLKatSw_HXIV9QuqI4Of_ka49-n2lQR3lJob57pHcN78W339LSXtM-Moj1vHI_aUkyR2WF2CtRF80LB0f0Iuuxd5zcra0Qlnn5qZkhNrERZM3EnRZW3WjTMRPYQDwFDWvY_a8ve1bn5cFyxhBqB2UvXVq_H9DwD5oGFxeQdSuX5g6j1bYutugONSvg308LdR7EC8FbqZDrVSGPzo-MvGt-kEH_NvKdZV47471Ng63SyeZf8va7RAqKVEZA5edKgqB6WAMkGdVKPGCB77xjWrTWXb-8zQrNly7zj3OciPjAoh4EyncoGoBT--slHfpOnTfXf5u68Wr56m4_Uu71P1JHhoL4QCEbayBar3J-QaFmCB6VjI_tIFrddGnBO0d9hp5bL-qGN2HCQA== diff --git a/lucid/__init__.py b/lucid/__init__.py index ccf13aa..d6c3260 100644 --- a/lucid/__init__.py +++ b/lucid/__init__.py @@ -1,12 +1,8 @@ __all__ = ['LucidMainWindow', 'main_window', 'overview', 'utils', 'splash'] +from . import main_window, overview, splash, utils +from ._version import get_versions from .main_window import LucidMainWindow -from . import splash -from . import main_window -from . import overview -from . import utils - -from ._version import get_versions __version__ = get_versions()['version'] del get_versions diff --git a/lucid/dock_style.css b/lucid/dock_style.css index be1b650..6f0c9c3 100644 --- a/lucid/dock_style.css +++ b/lucid/dock_style.css @@ -92,6 +92,3 @@ QScrollArea#dockWidgetScrollArea { background: rgba(0, 0, 0, 32); } - - - diff --git a/lucid/dock_style_dark.css b/lucid/dock_style_dark.css index 1d1a2b1..9ff5bde 100644 --- a/lucid/dock_style_dark.css +++ b/lucid/dock_style_dark.css @@ -76,6 +76,3 @@ QScrollArea#dockWidgetScrollArea { background: rgba(0, 0, 0, 32); } - - - diff --git a/lucid/overview.py b/lucid/overview.py index a01d796..fd2d86f 100644 --- a/lucid/overview.py +++ b/lucid/overview.py @@ -1,21 +1,21 @@ """Overview of the Experimental Area""" +import collections +import logging import os -import yaml import weakref -import logging -import collections from functools import partial -from qtpy import QtWidgets, QtGui, QtCore -from qtpy.QtCore import QEvent, Qt, Property, QSize +import yaml +from pydm.widgets import PyDMRelatedDisplayButton, PyDMShellCommand +from qtpy import QtCore, QtGui, QtWidgets +from qtpy.QtCore import Property, QEvent, QSize, Qt from qtpy.QtGui import QHoverEvent -from qtpy.QtWidgets import (QPushButton, QMenu, QGridLayout, QWidget) +from qtpy.QtWidgets import QGridLayout, QMenu, QPushButton, QWidget from typhos.utils import reload_widget_stylesheet -from pydm.widgets import PyDMShellCommand, PyDMRelatedDisplayButton - import lucid -from .utils import (SnakeLayout, indicator_for_device, display_for_device, + +from .utils import (SnakeLayout, display_for_device, indicator_for_device, suite_for_devices) logger = logging.getLogger(__name__) diff --git a/lucid/splash.py b/lucid/splash.py index 395871f..9d76a01 100644 --- a/lucid/splash.py +++ b/lucid/splash.py @@ -1,7 +1,7 @@ import os -from qtpy import QtGui, QtWidgets, QtCore import typhos.utils +from qtpy import QtCore, QtGui, QtWidgets class Splash(QtWidgets.QDialog): diff --git a/lucid/utils.py b/lucid/utils.py index 635ec1e..725fa26 100644 --- a/lucid/utils.py +++ b/lucid/utils.py @@ -93,7 +93,15 @@ def addWidget(self, widget): if TyphosAlarmCircle is not None: def indicator_for_device(device): """Create a QWidget to indicate the alarm state of a QWidget""" + try: + hints = device.hints['fields'] + except (AttributeError, KeyError): + hints = [] circle = TyphosAlarmCircle() + if hints: + circle.kindLevel = TyphosAlarmCircle.KindLevel.HINTED + else: + circle.kindLevel = TyphosAlarmCircle.KindLevel.NORMAL circle.add_device(device) return circle else: diff --git a/run_tests.py b/run_tests.py index 16d9fae..6e6397d 100644 --- a/run_tests.py +++ b/run_tests.py @@ -1,9 +1,9 @@ #!/usr/bin/env python +import logging import os import sys -import logging -from pathlib import Path from logging.handlers import RotatingFileHandler +from pathlib import Path import pytest diff --git a/setup.cfg b/setup.cfg index 9b24b83..219939b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,5 +4,3 @@ style = pep440 versionfile_source = lucid/_version.py versionfile_build = lucid/_version.py tag_prefix = v - - diff --git a/setup.py b/setup.py index 170a7d3..cb5c649 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ -import versioneer -from setuptools import (setup, find_packages) +from setuptools import find_packages, setup +import versioneer with open('requirements.txt') as f: requirements = f.read().split() diff --git a/tests/test_overview.py b/tests/test_overview.py index 14c39ef..2a02804 100644 --- a/tests/test_overview.py +++ b/tests/test_overview.py @@ -1,5 +1,4 @@ import pytest - from ophyd.sim import SynAxis, motor from qtpy.QtWidgets import QWidget diff --git a/versioneer.py b/versioneer.py index f84667e..b1b9cc8 100644 --- a/versioneer.py +++ b/versioneer.py @@ -277,10 +277,12 @@ """ from __future__ import print_function + try: import configparser except ImportError: import ConfigParser as configparser + import errno import json import os @@ -1560,6 +1562,7 @@ def run(self): if "cx_Freeze" in sys.modules: # cx_freeze enabled? from cx_Freeze.dist import build_exe as _build_exe + # nczeczulin reports that py2exe won't like the pep440-style string # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. # setup(console=[{