girder 5.0.22.dev2__tar.gz → 5.0.23.dev7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. girder-5.0.23.dev7/.circleci/check_npm_package.js +153 -0
  2. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.circleci/config.yml +27 -1
  3. girder-5.0.23.dev7/.circleci/publish_npm.sh +68 -0
  4. {girder-5.0.22.dev2/girder.egg-info → girder-5.0.23.dev7}/PKG-INFO +1 -1
  5. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/plugins.rst +45 -0
  6. girder-5.0.22.dev2/girder/web/dist/assets/index-CmeGcPPd.js → girder-5.0.23.dev7/girder/web/dist/assets/index-Ba0PPf3g.js +2 -2
  7. girder-5.0.22.dev2/girder/web/dist/assets/index-CmeGcPPd.js.map → girder-5.0.23.dev7/girder/web/dist/assets/index-Ba0PPf3g.js.map +1 -1
  8. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/index.html +1 -1
  9. girder-5.0.23.dev7/girder/web/dist/src/collections/ApiKeyCollection.js +9 -0
  10. girder-5.0.23.dev7/girder/web/dist/src/collections/AssetstoreCollection.js +10 -0
  11. girder-5.0.23.dev7/girder/web/dist/src/collections/Collection.js +295 -0
  12. girder-5.0.23.dev7/girder/web/dist/src/collections/CollectionCollection.js +9 -0
  13. girder-5.0.23.dev7/girder/web/dist/src/collections/FileCollection.js +11 -0
  14. girder-5.0.23.dev7/girder/web/dist/src/collections/FolderCollection.js +11 -0
  15. girder-5.0.23.dev7/girder/web/dist/src/collections/GroupCollection.js +9 -0
  16. girder-5.0.23.dev7/girder/web/dist/src/collections/ItemCollection.js +11 -0
  17. girder-5.0.23.dev7/girder/web/dist/src/collections/UserCollection.js +24 -0
  18. girder-5.0.23.dev7/girder/web/dist/src/collections/index.js +21 -0
  19. girder-5.0.23.dev7/girder/web/dist/src/models/AccessControlledModel.js +76 -0
  20. girder-5.0.23.dev7/girder/web/dist/src/models/ApiKeyModel.js +31 -0
  21. girder-5.0.23.dev7/girder/web/dist/src/models/AssetstoreModel.js +43 -0
  22. girder-5.0.23.dev7/girder/web/dist/src/models/CollectionCreationPolicyModel.js +20 -0
  23. girder-5.0.23.dev7/girder/web/dist/src/models/CollectionModel.js +12 -0
  24. girder-5.0.23.dev7/girder/web/dist/src/models/FileModel.js +310 -0
  25. girder-5.0.23.dev7/girder/web/dist/src/models/FolderModel.js +33 -0
  26. girder-5.0.23.dev7/girder/web/dist/src/models/GroupModel.js +197 -0
  27. girder-5.0.23.dev7/girder/web/dist/src/models/ItemModel.js +72 -0
  28. girder-5.0.23.dev7/girder/web/dist/src/models/MetadataMixin.js +88 -0
  29. girder-5.0.23.dev7/girder/web/dist/src/models/Model.js +187 -0
  30. girder-5.0.23.dev7/girder/web/dist/src/models/UserModel.js +189 -0
  31. girder-5.0.23.dev7/girder/web/dist/src/models/index.js +25 -0
  32. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/apidocs/apidocs.styl +50 -0
  33. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/adminConsole.styl +21 -0
  34. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/assetstores.styl +46 -0
  35. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/collectionList.styl +44 -0
  36. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/collectionPage.styl +6 -0
  37. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/frontPage.styl +48 -0
  38. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/groupList.styl +48 -0
  39. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/groupPage.styl +116 -0
  40. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/itemPage.styl +81 -0
  41. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/plugins.styl +61 -0
  42. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/searchResultsList.styl +51 -0
  43. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/systemConfig.styl +56 -0
  44. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/userAccount.styl +57 -0
  45. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/userList.styl +79 -0
  46. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/body/userPage.styl +6 -0
  47. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/footer.styl +19 -0
  48. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/global.styl +164 -0
  49. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/globalNav.styl +89 -0
  50. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/header.styl +29 -0
  51. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/headerUser.styl +33 -0
  52. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/layout.styl +75 -0
  53. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/layoutVars.styl +9 -0
  54. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/loading.styl +37 -0
  55. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/layout/progressArea.styl +17 -0
  56. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/accessWidget.styl +106 -0
  57. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/browserWidget.styl +9 -0
  58. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/hierarchyWidget.styl +188 -0
  59. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/markdownWidget.styl +92 -0
  60. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/metadataWidget.styl +92 -0
  61. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/searchFieldWidget.styl +70 -0
  62. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/taskProgress.styl +41 -0
  63. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/timelineWidget.styl +41 -0
  64. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/uploadWidget.styl +43 -0
  65. girder-5.0.23.dev7/girder/web/dist/src/stylesheets/widgets/userOtpManagementWidget.styl +159 -0
  66. girder-5.0.23.dev7/girder/web/dist/src/templates/body/adminConsole.pug +13 -0
  67. girder-5.0.23.dev7/girder/web/dist/src/templates/body/assetstores.pug +83 -0
  68. girder-5.0.23.dev7/girder/web/dist/src/templates/body/collectionList.pug +48 -0
  69. girder-5.0.23.dev7/girder/web/dist/src/templates/body/collectionPage.pug +38 -0
  70. girder-5.0.23.dev7/girder/web/dist/src/templates/body/filesystemImport.pug +41 -0
  71. girder-5.0.23.dev7/girder/web/dist/src/templates/body/frontPage.pug +83 -0
  72. girder-5.0.23.dev7/girder/web/dist/src/templates/body/groupList.pug +36 -0
  73. girder-5.0.23.dev7/girder/web/dist/src/templates/body/groupPage.pug +116 -0
  74. girder-5.0.23.dev7/girder/web/dist/src/templates/body/itemPage.pug +64 -0
  75. girder-5.0.23.dev7/girder/web/dist/src/templates/body/plugins.pug +20 -0
  76. girder-5.0.23.dev7/girder/web/dist/src/templates/body/s3Import.pug +35 -0
  77. girder-5.0.23.dev7/girder/web/dist/src/templates/body/searchResults.pug +15 -0
  78. girder-5.0.23.dev7/girder/web/dist/src/templates/body/searchResultsType.pug +13 -0
  79. girder-5.0.23.dev7/girder/web/dist/src/templates/body/systemConfiguration.pug +234 -0
  80. girder-5.0.23.dev7/girder/web/dist/src/templates/body/userAccount.pug +83 -0
  81. girder-5.0.23.dev7/girder/web/dist/src/templates/body/userList.pug +43 -0
  82. girder-5.0.23.dev7/girder/web/dist/src/templates/body/userPage.pug +40 -0
  83. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/alert.pug +5 -0
  84. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/layout.pug +12 -0
  85. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/layoutFooter.pug +11 -0
  86. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/layoutGlobalNav.pug +7 -0
  87. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/layoutHeader.pug +8 -0
  88. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/layoutHeaderUser.pug +26 -0
  89. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/layoutProgressArea.pug +1 -0
  90. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/loginDialog.pug +30 -0
  91. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/registerDialog.pug +35 -0
  92. girder-5.0.23.dev7/girder/web/dist/src/templates/layout/resetPasswordDialog.pug +25 -0
  93. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/accessEditor.pug +23 -0
  94. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/accessEditorMixins.pug +57 -0
  95. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/accessEditorNonModal.pug +11 -0
  96. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/accessEntry.pug +32 -0
  97. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/apiKeyList.pug +50 -0
  98. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/browserWidget.pug +32 -0
  99. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/checkedActionsMenu.pug +47 -0
  100. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/collectionInfoDialog.pug +37 -0
  101. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/confirmDialog.pug +14 -0
  102. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/editApiKeyWidget.pug +43 -0
  103. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/editAssetstoreWidget.pug +70 -0
  104. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/editCollectionWidget.pug +27 -0
  105. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/editFileWidget.pug +21 -0
  106. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/editFolderWidget.pug +27 -0
  107. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/editGroupWidget.pug +54 -0
  108. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/editItemWidget.pug +27 -0
  109. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/fileInfoDialog.pug +33 -0
  110. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/fileList.pug +44 -0
  111. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/folderInfoDialog.pug +42 -0
  112. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/folderList.pug +21 -0
  113. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/groupAdminList.pug +33 -0
  114. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/groupInviteDialog.pug +76 -0
  115. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/groupInviteList.pug +14 -0
  116. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/groupMemberList.pug +39 -0
  117. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/groupModList.pug +23 -0
  118. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/hierarchyBreadcrumb.pug +37 -0
  119. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/hierarchyPaginated.pug +19 -0
  120. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/hierarchyWidget.pug +97 -0
  121. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/itemBreadcrumb.pug +16 -0
  122. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/itemList.pug +27 -0
  123. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/jsonMetadatumEditWidget.pug +13 -0
  124. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/jsonMetadatumView.pug +6 -0
  125. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/loadingAnimation.pug +4 -0
  126. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/markdownWidget.pug +34 -0
  127. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/metadataWidget.pug +16 -0
  128. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/metadatumEditWidget.pug +15 -0
  129. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/metadatumView.pug +5 -0
  130. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/newAssetstore.pug +87 -0
  131. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/paginateWidget.pug +7 -0
  132. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/pluginConfigBreadcrumb.pug +13 -0
  133. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/rootSelectorWidget.pug +13 -0
  134. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/searchField.pug +10 -0
  135. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/searchHelp.pug +12 -0
  136. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/searchModeSelect.pug +9 -0
  137. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/searchResults.pug +14 -0
  138. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/sortCollectionWidget.pug +14 -0
  139. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/taskProgress.pug +16 -0
  140. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/timeline.pug +15 -0
  141. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/uploadWidget.pug +15 -0
  142. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/uploadWidgetMixins.pug +31 -0
  143. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/uploadWidgetNonModal.pug +10 -0
  144. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/userOtpBegin.pug +4 -0
  145. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/userOtpDisable.pug +6 -0
  146. girder-5.0.23.dev7/girder/web/dist/src/templates/widgets/userOtpEnable.pug +44 -0
  147. girder-5.0.23.dev7/girder/web/dist/src/utilities/EventStream.js +118 -0
  148. girder-5.0.23.dev7/girder/web/dist/src/utilities/PluginUtils.js +36 -0
  149. girder-5.0.23.dev7/girder/web/dist/src/utilities/S3UploadHandler.js +263 -0
  150. girder-5.0.23.dev7/girder/web/dist/src/utilities/ShowDownload.js +15 -0
  151. girder-5.0.23.dev7/girder/web/dist/src/utilities/index.js +11 -0
  152. girder-5.0.23.dev7/girder/web/dist/src/utilities/jquery/girderEnable.js +19 -0
  153. girder-5.0.23.dev7/girder/web/dist/src/utilities/jquery/girderModal.js +48 -0
  154. girder-5.0.23.dev7/girder/web/dist/src/views/App.js +370 -0
  155. girder-5.0.23.dev7/girder/web/dist/src/views/View.js +79 -0
  156. girder-5.0.23.dev7/girder/web/dist/src/views/body/AdminView.js +29 -0
  157. girder-5.0.23.dev7/girder/web/dist/src/views/body/AssetstoresView.js +239 -0
  158. girder-5.0.23.dev7/girder/web/dist/src/views/body/CollectionView.js +199 -0
  159. girder-5.0.23.dev7/girder/web/dist/src/views/body/CollectionsView.js +121 -0
  160. girder-5.0.23.dev7/girder/web/dist/src/views/body/FilesystemImportView.js +83 -0
  161. girder-5.0.23.dev7/girder/web/dist/src/views/body/FolderView.js +54 -0
  162. girder-5.0.23.dev7/girder/web/dist/src/views/body/FrontPageView.js +47 -0
  163. girder-5.0.23.dev7/girder/web/dist/src/views/body/GroupView.js +336 -0
  164. girder-5.0.23.dev7/girder/web/dist/src/views/body/GroupsView.js +107 -0
  165. girder-5.0.23.dev7/girder/web/dist/src/views/body/ItemView.js +180 -0
  166. girder-5.0.23.dev7/girder/web/dist/src/views/body/PluginsView.js +73 -0
  167. girder-5.0.23.dev7/girder/web/dist/src/views/body/S3ImportView.js +80 -0
  168. girder-5.0.23.dev7/girder/web/dist/src/views/body/SearchResultsView.js +162 -0
  169. girder-5.0.23.dev7/girder/web/dist/src/views/body/SystemConfigurationView.js +180 -0
  170. girder-5.0.23.dev7/girder/web/dist/src/views/body/UserAccountView.js +179 -0
  171. girder-5.0.23.dev7/girder/web/dist/src/views/body/UserView.js +169 -0
  172. girder-5.0.23.dev7/girder/web/dist/src/views/body/UsersView.js +124 -0
  173. girder-5.0.23.dev7/girder/web/dist/src/views/body/index.js +38 -0
  174. girder-5.0.23.dev7/girder/web/dist/src/views/index.js +13 -0
  175. girder-5.0.23.dev7/girder/web/dist/src/views/layout/FooterView.js +29 -0
  176. girder-5.0.23.dev7/girder/web/dist/src/views/layout/GlobalNavView.js +110 -0
  177. girder-5.0.23.dev7/girder/web/dist/src/views/layout/HeaderUserView.js +45 -0
  178. girder-5.0.23.dev7/girder/web/dist/src/views/layout/HeaderView.js +83 -0
  179. girder-5.0.23.dev7/girder/web/dist/src/views/layout/LoginView.js +100 -0
  180. girder-5.0.23.dev7/girder/web/dist/src/views/layout/ProgressListView.js +70 -0
  181. girder-5.0.23.dev7/girder/web/dist/src/views/layout/RegisterView.js +101 -0
  182. girder-5.0.23.dev7/girder/web/dist/src/views/layout/ResetPasswordView.js +70 -0
  183. girder-5.0.23.dev7/girder/web/dist/src/views/layout/index.js +19 -0
  184. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/AccessWidget.js +427 -0
  185. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/ApiKeyListWidget.js +140 -0
  186. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/BrowserWidget.js +315 -0
  187. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/CheckedMenuWidget.js +71 -0
  188. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/CollectionInfoWidget.js +40 -0
  189. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/EditApiKeyWidget.js +124 -0
  190. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/EditAssetstoreWidget.js +136 -0
  191. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/EditCollectionWidget.js +93 -0
  192. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/EditFileWidget.js +56 -0
  193. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/EditFolderWidget.js +116 -0
  194. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/EditGroupWidget.js +125 -0
  195. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/EditItemWidget.js +110 -0
  196. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/FileInfoWidget.js +26 -0
  197. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/FileListWidget.js +154 -0
  198. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/FolderInfoWidget.js +39 -0
  199. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/FolderListWidget.js +108 -0
  200. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/GroupAdminsWidget.js +88 -0
  201. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/GroupInvitesWidget.js +56 -0
  202. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/GroupMembersWidget.js +185 -0
  203. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/GroupModsWidget.js +77 -0
  204. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/HierarchyWidget.js +1107 -0
  205. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/ItemBreadcrumbWidget.js +38 -0
  206. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/ItemListWidget.js +352 -0
  207. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/LoadingAnimation.js +17 -0
  208. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/MarkdownWidget.js +217 -0
  209. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/MetadataWidget.js +508 -0
  210. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/NewAssetstoreWidget.js +72 -0
  211. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/PaginateWidget.js +37 -0
  212. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/PluginConfigBreadcrumbWidget.js +33 -0
  213. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/RootSelectorWidget.js +192 -0
  214. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/SearchFieldWidget.js +395 -0
  215. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/SearchPaginateWidget.js +149 -0
  216. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/SortCollectionWidget.js +53 -0
  217. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/TaskProgressWidget.js +90 -0
  218. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/TimelineWidget.js +155 -0
  219. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/UploadWidget.js +340 -0
  220. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/UserOtpManagementWidget.js +105 -0
  221. girder-5.0.23.dev7/girder/web/dist/src/views/widgets/index.js +77 -0
  222. {girder-5.0.22.dev2 → girder-5.0.23.dev7/girder.egg-info}/PKG-INFO +1 -1
  223. girder-5.0.23.dev7/girder.egg-info/SOURCES.txt +495 -0
  224. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder.egg-info/scm_file_list.json +28 -0
  225. girder-5.0.23.dev7/girder.egg-info/scm_version.json +8 -0
  226. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/package-lock.json +3 -3
  227. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/requirements-dev.txt +3 -1
  228. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/publicNames.txt +67 -0
  229. girder-5.0.22.dev2/.circleci/publish_npm.sh +0 -30
  230. girder-5.0.22.dev2/girder.egg-info/SOURCES.txt +0 -281
  231. girder-5.0.22.dev2/girder.egg-info/scm_version.json +0 -8
  232. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.circleci/Dockerfile +0 -0
  233. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.circleci/build_plugins.py +0 -0
  234. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.circleci/generatePyEnvChecksum.sh +0 -0
  235. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.circleci/publish_pypi.sh +0 -0
  236. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.circleci/rabbitmq.conf +0 -0
  237. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.codecov.yml +0 -0
  238. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.dockerignore +0 -0
  239. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.editorconfig +0 -0
  240. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.git-blame-ignore-revs +0 -0
  241. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.github/workflows/codespell.yml +0 -0
  242. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.gitignore +0 -0
  243. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.pre-commit-config.yaml +0 -0
  244. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/.readthedocs.yml +0 -0
  245. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/CHANGELOG.rst +0 -0
  246. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/CMakeLists.txt +0 -0
  247. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/CONTRIBUTING.rst +0 -0
  248. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/Dockerfile +0 -0
  249. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/LICENSE +0 -0
  250. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/MANIFEST.in +0 -0
  251. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/README.rst +0 -0
  252. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/clients/python/README.rst +0 -0
  253. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/clients/python/girder_client/__init__.py +0 -0
  254. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/clients/python/girder_client/_jsonemitter.py +0 -0
  255. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/clients/python/girder_client/cli.py +0 -0
  256. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/clients/python/pyproject.toml +0 -0
  257. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/clients/python/setup.py +0 -0
  258. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docker-compose.yml +0 -0
  259. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/admin-docs.rst +0 -0
  260. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/api-docs.rst +0 -0
  261. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/build-docs.rst +0 -0
  262. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/conf.py +0 -0
  263. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/configuration.rst +0 -0
  264. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/dependencies.rst +0 -0
  265. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/deployment.rst +0 -0
  266. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/dev-installation.rst +0 -0
  267. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/developer-cookbook.rst +0 -0
  268. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/developer-docs.rst +0 -0
  269. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/development.rst +0 -0
  270. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/favicon.ico +0 -0
  271. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/images/dicom-viewer.png +0 -0
  272. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/index.rst +0 -0
  273. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/license.png +0 -0
  274. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/list_env_settings.py +0 -0
  275. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/list_env_settings.yaml +0 -0
  276. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/migration-guide.rst +0 -0
  277. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/mount.rst +0 -0
  278. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/plugin-development.rst +0 -0
  279. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/python-client.rst +0 -0
  280. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/requirements-docs.txt +0 -0
  281. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/security.rst +0 -0
  282. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/sftp.rst +0 -0
  283. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/static/custom.css +0 -0
  284. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/user-docs.rst +0 -0
  285. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/docs/user-guide.rst +0 -0
  286. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/__init__.py +0 -0
  287. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/__init__.py +0 -0
  288. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/access.py +0 -0
  289. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/api_docs.mako +0 -0
  290. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/api_main.py +0 -0
  291. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/describe.py +0 -0
  292. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/docs.py +0 -0
  293. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/filter_logging.py +0 -0
  294. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/rest.py +0 -0
  295. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/sftp.py +0 -0
  296. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/__init__.py +0 -0
  297. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/api_key.py +0 -0
  298. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/assetstore.py +0 -0
  299. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/collection.py +0 -0
  300. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/file.py +0 -0
  301. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/folder.py +0 -0
  302. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/group.py +0 -0
  303. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/item.py +0 -0
  304. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/resource.py +0 -0
  305. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/system.py +0 -0
  306. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/token.py +0 -0
  307. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/api/v1/user.py +0 -0
  308. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/asgi.py +0 -0
  309. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/cli/__init__.py +0 -0
  310. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/cli/mount.py +0 -0
  311. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/cli/serve.py +0 -0
  312. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/cli/sftpd.py +0 -0
  313. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/cli/shell.py +0 -0
  314. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/constants.py +0 -0
  315. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/events.py +0 -0
  316. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/exceptions.py +0 -0
  317. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/mail_templates/_footer.mako +0 -0
  318. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/mail_templates/_header.mako +0 -0
  319. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/mail_templates/accountApproval.mako +0 -0
  320. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/mail_templates/accountApproved.mako +0 -0
  321. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/mail_templates/emailVerification.mako +0 -0
  322. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/mail_templates/groupInvite.mako +0 -0
  323. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/mail_templates/temporaryAccess.mako +0 -0
  324. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/__init__.py +0 -0
  325. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/api_key.py +0 -0
  326. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/assetstore.py +0 -0
  327. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/collection.py +0 -0
  328. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/file.py +0 -0
  329. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/folder.py +0 -0
  330. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/group.py +0 -0
  331. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/item.py +0 -0
  332. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/model_base.py +0 -0
  333. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/setting.py +0 -0
  334. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/token.py +0 -0
  335. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/upload.py +0 -0
  336. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/models/user.py +0 -0
  337. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/notification.py +0 -0
  338. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/plugin.py +0 -0
  339. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/settings.py +0 -0
  340. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/tasks.py +0 -0
  341. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/__init__.py +0 -0
  342. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/_cache.py +0 -0
  343. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/_hash_state.py +0 -0
  344. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/abstract_assetstore_adapter.py +0 -0
  345. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/acl_mixin.py +0 -0
  346. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/assetstore_utilities.py +0 -0
  347. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/config.py +0 -0
  348. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/error.mako +0 -0
  349. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/filesystem_assetstore_adapter.py +0 -0
  350. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/mail_utils.py +0 -0
  351. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/model_importer.py +0 -0
  352. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/path.py +0 -0
  353. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/progress.py +0 -0
  354. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/s3_assetstore_adapter.py +0 -0
  355. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/search.py +0 -0
  356. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/server.py +0 -0
  357. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/setting_utilities.py +0 -0
  358. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/system.py +0 -0
  359. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/webroot.py +0 -0
  360. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/utility/ziputil.py +0 -0
  361. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/.env.development +0 -0
  362. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/.gitignore +0 -0
  363. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/.prettierrc.json +0 -0
  364. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/README.rst +0 -0
  365. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/Girder_Favicon.png +0 -0
  366. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/Girder_Mark.png +0 -0
  367. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/fontello-BGLM866c.svg +0 -0
  368. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/fontello-B_1bq6Kd.eot +0 -0
  369. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/fontello-CpEujeXd.woff2 +0 -0
  370. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/fontello-Or0MeVYv.ttf +0 -0
  371. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/fontello-aW2lAE4M.woff +0 -0
  372. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/glyphicons-halflings-regular-BKjkU69z.woff +0 -0
  373. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/glyphicons-halflings-regular-BUJKDMgK.eot +0 -0
  374. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/glyphicons-halflings-regular-CSehLiBc.svg +0 -0
  375. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/glyphicons-halflings-regular-DrwTMapi.ttf +0 -0
  376. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/glyphicons-halflings-regular-DzqM6ju8.woff2 +0 -0
  377. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/index-DHydYdLA.css +0 -0
  378. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/jsoneditor-icons-CIlYC0TY.svg +0 -0
  379. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-300-B6tDWRxp.woff2 +0 -0
  380. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-300-DZbNTRe6.woff +0 -0
  381. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-300italic-DLsXqxhU.woff2 +0 -0
  382. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-300italic-Dfz31Up5.woff +0 -0
  383. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-400-D5zbb_EN.woff +0 -0
  384. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-400-DLgeRt71.woff2 +0 -0
  385. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-400italic-DpGQ6Ktj.woff2 +0 -0
  386. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-400italic-UJbezL8h.woff +0 -0
  387. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-600-CCvT4JHQ.woff2 +0 -0
  388. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-600-DHWfDY-G.woff +0 -0
  389. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-600italic-X8kCjSq_.woff +0 -0
  390. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-600italic-slqXzGub.woff2 +0 -0
  391. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-700-CsbQbrjx.woff2 +0 -0
  392. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-700-DNl7WOH5.woff +0 -0
  393. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-700italic-BtE7VvhE.woff2 +0 -0
  394. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-700italic-hc2P_kZo.woff +0 -0
  395. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-800-CbJOM4_m.woff2 +0 -0
  396. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-800-XaYTAPrv.woff +0 -0
  397. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-800italic-DqvYew-K.woff +0 -0
  398. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/assets/open-sans-latin-800italic-JIGkTxpX.woff2 +0 -0
  399. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/auth.js +0 -0
  400. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/constants.js +0 -0
  401. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/dialog.js +0 -0
  402. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/events.js +0 -0
  403. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/index.ts +0 -0
  404. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/main.ts +0 -0
  405. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/misc.js +0 -0
  406. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/pluginUtils.js +0 -0
  407. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/rest.js +0 -0
  408. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/router.js +0 -0
  409. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/routes.js +0 -0
  410. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/version.js +0 -0
  411. {girder-5.0.22.dev2/girder/web/dist/src → girder-5.0.23.dev7/girder/web/dist}/src/vite-env.d.ts +0 -0
  412. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/swagger-ui/swagger-ui-bundle.js +0 -0
  413. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/dist/swagger-ui/swagger-ui.css +0 -0
  414. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/env.d.ts +0 -0
  415. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/playwright.config.ts +0 -0
  416. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/coverage.ts +0 -0
  417. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/playwright-setup.ts +0 -0
  418. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/playwright-teardown.ts +0 -0
  419. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/server.ts +0 -0
  420. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/admin.spec.ts +0 -0
  421. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/browser.spec.ts +0 -0
  422. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/collection.spec.ts +0 -0
  423. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/collectionBaseClass.spec.ts +0 -0
  424. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/customWidgets.spec.ts +0 -0
  425. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/README.md +0 -0
  426. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/fake.jpg +0 -0
  427. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/nomime.dat +0 -0
  428. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/slicer_cli_web_multiple_test.xml +0 -0
  429. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/slicer_cli_web_test.xml +0 -0
  430. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/ten_byte_file.txt +0 -0
  431. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/testFile.txt +0 -0
  432. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data/testFile2 +0 -0
  433. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/data.spec.ts +0 -0
  434. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/emptyLayout.spec.ts +0 -0
  435. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/file_upload.spec.ts +0 -0
  436. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/folder.spec.ts +0 -0
  437. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/group.spec.ts +0 -0
  438. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/item.spec.ts +0 -0
  439. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/model.spec.ts +0 -0
  440. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_authorized_upload.spec.ts +0 -0
  441. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_autojoin.spec.ts +0 -0
  442. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_hashsum_download.spec.ts +0 -0
  443. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_homepage.spec.ts +0 -0
  444. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_item_licenses.spec.ts +0 -0
  445. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_jobs.spec.ts +0 -0
  446. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_readme.spec.ts +0 -0
  447. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web.spec.ts +0 -0
  448. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_config_view.spec.ts +0 -0
  449. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_container_view.spec.ts +0 -0
  450. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_item_selector.spec.ts +0 -0
  451. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_panel_group.spec.ts +0 -0
  452. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_parser.spec.ts +0 -0
  453. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_task.spec.ts +0 -0
  454. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_widget_model.spec.ts +0 -0
  455. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_slicer_cli_web_widget_view.spec.ts +0 -0
  456. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_terms.spec.ts +0 -0
  457. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_thumbnails.spec.ts +0 -0
  458. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/plugin_user_quota.spec.ts +0 -0
  459. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/routing.spec.ts +0 -0
  460. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/setApi.spec.ts +0 -0
  461. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/setting_show_download.spec.ts +0 -0
  462. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/sortWidget.spec.ts +0 -0
  463. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/swagger.spec.ts +0 -0
  464. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/user.spec.ts +0 -0
  465. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/utilities.spec.ts +0 -0
  466. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/version.spec.ts +0 -0
  467. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/spec/widgets.spec.ts +0 -0
  468. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/web/tests/util.ts +0 -0
  469. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/worker_plugin.py +0 -0
  470. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder/wsgi.py +0 -0
  471. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder.egg-info/dependency_links.txt +0 -0
  472. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder.egg-info/entry_points.txt +0 -0
  473. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder.egg-info/not-zip-safe +0 -0
  474. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder.egg-info/requires.txt +0 -0
  475. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/girder.egg-info/top_level.txt +0 -0
  476. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/jsdoc.json +0 -0
  477. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/package.json +0 -0
  478. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pyproject.toml +0 -0
  479. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/LICENSE +0 -0
  480. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/MANIFEST.in +0 -0
  481. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pyproject.toml +0 -0
  482. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pytest_girder/__init__.py +0 -0
  483. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pytest_girder/assertions.py +0 -0
  484. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pytest_girder/fixtures.py +0 -0
  485. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pytest_girder/plugin.py +0 -0
  486. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pytest_girder/plugin_registry.py +0 -0
  487. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pytest_girder/utils.py +0 -0
  488. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/pytest_girder/web_client.py +0 -0
  489. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/pytest_girder/setup.py +0 -0
  490. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/midas/README.rst +0 -0
  491. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/midas/migrate.py +0 -0
  492. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/midas/requirements.txt +0 -0
  493. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/midas/walk_girder.py +0 -0
  494. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/midas/walk_midas.py +0 -0
  495. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/publicNames.py +0 -0
  496. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/scripts/test_names.sh +0 -0
  497. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/setup.cfg +0 -0
  498. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/setup.py +0 -0
  499. {girder-5.0.22.dev2 → girder-5.0.23.dev7}/tox.ini +0 -0
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env node
2
+ // Check that a packed npm tarball is usable: every entry point that
3
+ // package.json declares is in the tarball, every "files" entry matched
4
+ // something, and the relative references inside packed CSS (url(...)) and
5
+ // JavaScript (sourceMappingURL) resolve to packed files, and no runtime
6
+ // dependency uses a local specifier (file:, link:, workspace:) that cannot
7
+ // resolve once installed from the registry. Any further
8
+ // arguments are paths that must also be in the package.
9
+ //
10
+ // Usage: check_npm_package.js <package.tgz> [required-path ...]
11
+ 'use strict';
12
+
13
+ const childProcess = require('child_process');
14
+ const fs = require('fs');
15
+ const os = require('os');
16
+ const path = require('path');
17
+
18
+ const METADATA_FILES = new Set(['package.json', 'readme', 'readme.md', 'readme.rst', 'readme.txt', 'license', 'license.txt', 'license.md']);
19
+
20
+ function listFiles(root) {
21
+ const result = [];
22
+ for (const entry of fs.readdirSync(root, {withFileTypes: true, recursive: true})) {
23
+ if (entry.isFile()) {
24
+ result.push(path.relative(root, path.join(entry.parentPath, entry.name)).split(path.sep).join('/'));
25
+ }
26
+ }
27
+ return result.sort();
28
+ }
29
+
30
+ function normalize(ref) {
31
+ return path.posix.normalize(ref.replace(/^\.\//, ''));
32
+ }
33
+
34
+ // Collect every path that package.json says a consumer can load.
35
+ function entryPoints(pkg) {
36
+ const result = [];
37
+ for (const key of ['main', 'module', 'types', 'typings', 'style']) {
38
+ if (typeof pkg[key] === 'string') {
39
+ result.push([key, pkg[key]]);
40
+ }
41
+ }
42
+ if (typeof pkg.browser === 'string') {
43
+ result.push(['browser', pkg.browser]);
44
+ }
45
+ if (typeof pkg.bin === 'string') {
46
+ result.push(['bin', pkg.bin]);
47
+ } else if (pkg.bin) {
48
+ for (const [name, value] of Object.entries(pkg.bin)) {
49
+ result.push([`bin.${name}`, value]);
50
+ }
51
+ }
52
+ const walk = (value, where) => {
53
+ if (typeof value === 'string') {
54
+ if (!value.includes('*')) {
55
+ result.push([where, value]);
56
+ }
57
+ } else if (value && typeof value === 'object') {
58
+ for (const [key, child] of Object.entries(value)) {
59
+ walk(child, `${where}[${JSON.stringify(key)}]`);
60
+ }
61
+ }
62
+ };
63
+ walk(pkg.exports, 'exports');
64
+ return result;
65
+ }
66
+
67
+ function checkPackage(root, required) {
68
+ const errors = [];
69
+ const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
70
+ const files = listFiles(root);
71
+ const fileSet = new Set(files);
72
+
73
+ if (!files.some((file) => !METADATA_FILES.has(file.toLowerCase()))) {
74
+ errors.push('the package contains no files besides package.json, README, and LICENSE');
75
+ }
76
+
77
+ for (const [where, ref] of entryPoints(pkg)) {
78
+ if (!fileSet.has(normalize(ref))) {
79
+ errors.push(`${where} refers to ${ref}, which is not in the package`);
80
+ }
81
+ }
82
+
83
+ for (const field of ['dependencies', 'peerDependencies', 'optionalDependencies']) {
84
+ for (const [name, spec] of Object.entries(pkg[field] || {})) {
85
+ if (/^(file|link|workspace):/.test(spec)) {
86
+ errors.push(`${field} has ${name}@${spec}, which cannot be installed from the registry`);
87
+ }
88
+ }
89
+ }
90
+
91
+ for (const ref of required) {
92
+ if (!fileSet.has(normalize(ref))) {
93
+ errors.push(`${ref} is required but is not in the package`);
94
+ }
95
+ }
96
+
97
+ for (const entry of pkg.files || []) {
98
+ if (/[*?[\]{}!]/.test(entry)) {
99
+ continue;
100
+ }
101
+ const prefix = normalize(entry).replace(/\/$/, '');
102
+ if (!files.some((file) => file === prefix || file.startsWith(`${prefix}/`))) {
103
+ errors.push(`"files" lists ${entry}, but nothing in the package matches it`);
104
+ }
105
+ }
106
+
107
+ for (const file of files) {
108
+ const ext = path.extname(file);
109
+ let refs = [];
110
+ if (ext === '.css') {
111
+ const text = fs.readFileSync(path.join(root, file), 'utf8');
112
+ refs = [...text.matchAll(/url\(\s*(['"]?)([^'")]+)\1\s*\)/g)].map((match) => match[2]);
113
+ } else if (['.js', '.cjs', '.mjs'].includes(ext)) {
114
+ const text = fs.readFileSync(path.join(root, file), 'utf8');
115
+ refs = [...text.matchAll(/^\/\/# sourceMappingURL=(\S+)\s*$/gm)].map((match) => match[1]);
116
+ }
117
+ for (const ref of refs) {
118
+ if (/^(data:|[a-z][a-z0-9+.-]*:|\/|#)/i.test(ref)) {
119
+ continue;
120
+ }
121
+ const target = path.posix.normalize(path.posix.join(path.posix.dirname(file), ref.replace(/[?#].*$/, '')));
122
+ if (!fileSet.has(target)) {
123
+ errors.push(`${file} refers to ${ref}, but ${target} is not in the package`);
124
+ }
125
+ }
126
+ }
127
+ return {pkg, files, errors};
128
+ }
129
+
130
+ function main() {
131
+ const [tarball, ...required] = process.argv.slice(2);
132
+ if (!tarball) {
133
+ console.error('Usage: check_npm_package.js <package.tgz> [required-path ...]');
134
+ process.exit(2);
135
+ }
136
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'npm-package-check-'));
137
+ try {
138
+ childProcess.execFileSync('tar', ['-xzf', path.resolve(tarball), '-C', tmpDir]);
139
+ const {pkg, files, errors} = checkPackage(path.join(tmpDir, 'package'), required);
140
+ if (errors.length) {
141
+ console.error(`${pkg.name}@${pkg.version} is not usable:`);
142
+ for (const error of errors) {
143
+ console.error(` ${error}`);
144
+ }
145
+ process.exit(1);
146
+ }
147
+ console.log(`${pkg.name}@${pkg.version}: ${files.length} files, entry points and references are valid`);
148
+ } finally {
149
+ fs.rmSync(tmpDir, {recursive: true, force: true});
150
+ }
151
+ }
152
+
153
+ main();
@@ -23,6 +23,12 @@ executors:
23
23
  working_directory: /home/circleci/project
24
24
 
25
25
  commands:
26
+ install-ttfautohint:
27
+ description: "Install ttfautohint so the Fontello build produces a hinted font"
28
+ steps:
29
+ - run:
30
+ name: Install ttfautohint
31
+ command: sudo apt-get update && sudo apt-get install -y ttfautohint
26
32
  prerequisites:
27
33
  description: "Install prerequisites and run required background services"
28
34
  steps:
@@ -163,7 +169,10 @@ jobs:
163
169
  - build-plugins
164
170
  - run:
165
171
  name: Run pytest tests
166
- command: tox -e pytest_circleci -- -x
172
+ command: |
173
+ # tox refuses to stage packages in group/world-writable directories
174
+ umask 0022
175
+ tox -e pytest_circleci -- -x
167
176
  working_directory: girder
168
177
  - store_test_results:
169
178
  path: girder/build/test/results
@@ -472,11 +481,23 @@ jobs:
472
481
  command: tox -e publish
473
482
  working_directory: girder
474
483
 
484
+ check-publish-npm:
485
+ executor: py3
486
+ steps:
487
+ - checkout:
488
+ path: girder
489
+ - install-ttfautohint
490
+ - run:
491
+ name: Check that npm packages can be built and packed
492
+ command: ./.circleci/publish_npm.sh --dry-run
493
+ working_directory: girder
494
+
475
495
  publish-release:
476
496
  executor: py3
477
497
  steps:
478
498
  - checkout:
479
499
  path: girder
500
+ - install-ttfautohint
480
501
  - run:
481
502
  name: Publish npm packages
482
503
  command: npm run publish-all
@@ -554,6 +575,10 @@ workflows:
554
575
  filters:
555
576
  tags:
556
577
  only: /^v[0-9]+.*/
578
+ - check-publish-npm:
579
+ filters:
580
+ tags:
581
+ only: /^v[0-9]+.*/
557
582
  - publish:
558
583
  requires:
559
584
  - check-publish
@@ -570,6 +595,7 @@ workflows:
570
595
  - publish-release:
571
596
  requires:
572
597
  - check-publish
598
+ - check-publish-npm
573
599
  - server-lint-test
574
600
  - web-lint-test
575
601
  - coverage
@@ -0,0 +1,68 @@
1
+ #!/bin/bash
2
+ set -e
3
+ # Publish npm packages for selected locations.
4
+ # Every package is installed, versioned, packed (its prepack script builds
5
+ # it), and checked before any is published, and the checked tarballs are what
6
+ # get published. Publishing authenticates through CircleCI OIDC. With
7
+ # --dry-run, everything runs except the upload.
8
+
9
+ dry_run=()
10
+ if [[ "$1" == "--dry-run" ]]; then
11
+ dry_run=(--dry-run --tag dry-run)
12
+ fi
13
+
14
+ script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
15
+
16
+ export npm_config_prefix="$HOME/.npm-global"
17
+ npm install -g 'npm@^11.5.1'
18
+ export PATH="$npm_config_prefix/bin:$PATH"
19
+ hash -r
20
+ npm --version
21
+
22
+ GIT_VERSION=$(git describe --tags)
23
+ readonly GIT_VERSION
24
+ readonly PUBLISHED_NPM_PACKAGES=(
25
+ # Published Fontello is used by all builds, and is critical to publish
26
+ girder/web/fontello
27
+ # The raw JS source is used by some downstream 'external builds'
28
+ girder/web
29
+ # These plugins were published to support downstream external builds, and should be kept updated
30
+ plugins/jobs/girder_jobs/web_client
31
+ plugins/oauth/girder_oauth/web_client
32
+ plugins/gravatar/girder_gravatar/web_client
33
+ )
34
+
35
+ # Files a package must contain beyond what its package.json declares
36
+ required_files() {
37
+ case "$1" in
38
+ girder/web)
39
+ # The full source tree for downstream external builds
40
+ echo dist-lib/src/index.ts dist-lib/src/views/App.js
41
+ ;;
42
+ esac
43
+ }
44
+
45
+ pack_root=$(mktemp -d)
46
+ trap 'rm -rf "$pack_root"' EXIT
47
+ tarballs=()
48
+ for directory in "${PUBLISHED_NPM_PACKAGES[@]}"; do
49
+ pushd "$directory"
50
+ npm ci
51
+ npm version --allow-same-version --no-git-tag-version "$GIT_VERSION"
52
+ pack_dir="$pack_root/${directory//\//_}"
53
+ mkdir "$pack_dir"
54
+ npm pack --pack-destination "$pack_dir"
55
+ tarball=("$pack_dir"/*.tgz)
56
+ # shellcheck disable=SC2046
57
+ node "$script_dir/check_npm_package.js" "${tarball[0]}" $(required_files "$directory")
58
+ tarballs+=("${tarball[0]}")
59
+ popd
60
+ done
61
+
62
+ for tarball in "${tarballs[@]}"; do
63
+ if [[ ${#dry_run[@]} -eq 0 ]]; then
64
+ NPM_ID_TOKEN=$(circleci run oidc get --claims '{"aud": "npm:registry.npmjs.org"}')
65
+ export NPM_ID_TOKEN
66
+ fi
67
+ npm publish "$tarball" --loglevel warn --access public "${dry_run[@]}"
68
+ done
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: girder
3
- Version: 5.0.22.dev2
3
+ Version: 5.0.23.dev7
4
4
  Summary: Web-based data management platform
5
5
  Home-page: https://girder.readthedocs.org
6
6
  Author: Kitware, Inc.
@@ -402,6 +402,51 @@ instead. The potential error values are:
402
402
  current authentication policy.
403
403
 
404
404
 
405
+ Local Checkout
406
+ --------------
407
+ `PyPI package <https://pypi.org/project/girder-local-checkout/>`__: ``girder-local-checkout``
408
+
409
+ Data on an S3 assetstore is slower to access than data on a filesystem assetstore. This plugin
410
+ lets users with write access to a folder temporarily "checkout" the folder: every file in the
411
+ folder (recursively) whose data lives on an S3 assetstore is copied to a filesystem assetstore for
412
+ a chosen number of days, and Girder serves the local copy while the checkout lasts. Files added to
413
+ the folder after a checkout are not copied until the checkout is renewed.
414
+
415
+ The folder actions menu gains a **Make files local** item. Choosing it shows how many files can
416
+ be made local, how many already are, and, for a checked-out folder, the days remaining. The
417
+ duration can be lengthened or shortened, or the checkout released; copying and releasing happen in
418
+ background tasks on the ``local`` worker queue, so a worker must be available.
419
+
420
+ Each checkout is tracked per folder. A file keeps its local copy until the latest expiration of
421
+ every checkout that covers it, so checking out a parent folder for a short time never shortens a
422
+ longer checkout of a subfolder. When a file's local copy is released, the file once again refers
423
+ to its S3 data; deleting or replacing a checked-out file removes both the local copy and the S3
424
+ data. An S3 assetstore cannot be deleted while a checked-out file's original data is on it.
425
+
426
+ Expired checkouts are cleaned up daily, before each new checkout, and on demand via
427
+ ``POST /local_checkout/cleanup``. Free space on the filesystem assetstore is computed with the
428
+ ``GIRDER_FILESYSTEMASSETSTORE_RESERVED_MBYTES`` reservation applied. If a checkout needs more space
429
+ than is free, local copies that expire sooner than the new checkout are released first; if there
430
+ is still not enough room, the checkout is left partial and says so. Likewise, an upload to the
431
+ filesystem assetstore that would not otherwise fit releases local copies, soonest-expiring first,
432
+ rather than failing.
433
+
434
+ Administrators can list all checkouts, the files and space they use, and each assetstore's free
435
+ space with ``GET /local_checkout``. The plugin's configuration page shows the same summary and
436
+ has these settings:
437
+
438
+ * **Assetstore for local copies**: the filesystem assetstore that receives the copies. By default
439
+ the current default assetstore is used. If that is not a filesystem assetstore, the user picks
440
+ one of the filesystem assetstores when checking out a folder (via the ``assetstoreId``
441
+ parameter of ``PUT /folder/{id}/local_checkout``, which may be omitted when there is only one),
442
+ and the feature is unavailable only if there are no filesystem assetstores.
443
+ * **Maximum checkout duration**: the most days a checkout may last (default 90).
444
+ * **Only administrators may checkout folders**: restrict the feature to site administrators;
445
+ other users do not see the folder action.
446
+
447
+ This plugin requires the Jobs plugin and currently only copies files from S3 assetstores.
448
+
449
+
405
450
  README
406
451
  ------
407
452
  `PyPI package <https://pypi.org/project/girder-readme/>`__: ``girder-readme``