girder 5.0.19.dev4__tar.gz → 5.0.19.dev8__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 (253) hide show
  1. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/Dockerfile +1 -0
  2. {girder-5.0.19.dev4/girder.egg-info → girder-5.0.19.dev8}/PKG-INFO +1 -1
  3. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/upload.py +12 -4
  4. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/filesystem_assetstore_adapter.py +3 -1
  5. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/mail_utils.py +33 -5
  6. {girder-5.0.19.dev4 → girder-5.0.19.dev8/girder.egg-info}/PKG-INFO +1 -1
  7. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/scm_file_list.json +1 -0
  8. girder-5.0.19.dev8/girder.egg-info/scm_version.json +8 -0
  9. girder-5.0.19.dev4/girder.egg-info/scm_version.json +0 -8
  10. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/build_plugins.py +0 -0
  11. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/config.yml +0 -0
  12. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/generatePyEnvChecksum.sh +0 -0
  13. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/publish_npm.sh +0 -0
  14. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/publish_pypi.sh +0 -0
  15. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/rabbitmq.conf +0 -0
  16. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.codecov.yml +0 -0
  17. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.dockerignore +0 -0
  18. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.editorconfig +0 -0
  19. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.git-blame-ignore-revs +0 -0
  20. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.github/workflows/codespell.yml +0 -0
  21. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.gitignore +0 -0
  22. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.pre-commit-config.yaml +0 -0
  23. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.readthedocs.yml +0 -0
  24. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/CHANGELOG.rst +0 -0
  25. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/CMakeLists.txt +0 -0
  26. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/CONTRIBUTING.rst +0 -0
  27. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/Dockerfile +0 -0
  28. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/LICENSE +0 -0
  29. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/MANIFEST.in +0 -0
  30. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/README.rst +0 -0
  31. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/README.rst +0 -0
  32. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/girder_client/__init__.py +0 -0
  33. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/girder_client/_jsonemitter.py +0 -0
  34. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/girder_client/cli.py +0 -0
  35. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/pyproject.toml +0 -0
  36. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/setup.py +0 -0
  37. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docker-compose.yml +0 -0
  38. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/admin-docs.rst +0 -0
  39. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/api-docs.rst +0 -0
  40. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/build-docs.rst +0 -0
  41. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/conf.py +0 -0
  42. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/configuration.rst +0 -0
  43. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/dependencies.rst +0 -0
  44. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/deployment.rst +0 -0
  45. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/dev-installation.rst +0 -0
  46. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/developer-cookbook.rst +0 -0
  47. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/developer-docs.rst +0 -0
  48. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/development.rst +0 -0
  49. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/favicon.ico +0 -0
  50. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/images/dicom-viewer.png +0 -0
  51. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/index.rst +0 -0
  52. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/license.png +0 -0
  53. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/list_env_settings.py +0 -0
  54. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/list_env_settings.yaml +0 -0
  55. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/migration-guide.rst +0 -0
  56. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/mount.rst +0 -0
  57. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/plugin-development.rst +0 -0
  58. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/plugins.rst +0 -0
  59. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/python-client.rst +0 -0
  60. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/requirements-docs.txt +0 -0
  61. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/security.rst +0 -0
  62. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/sftp.rst +0 -0
  63. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/static/custom.css +0 -0
  64. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/user-docs.rst +0 -0
  65. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/user-guide.rst +0 -0
  66. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/__init__.py +0 -0
  67. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/__init__.py +0 -0
  68. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/access.py +0 -0
  69. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/api_docs.mako +0 -0
  70. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/api_main.py +0 -0
  71. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/describe.py +0 -0
  72. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/docs.py +0 -0
  73. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/filter_logging.py +0 -0
  74. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/rest.py +0 -0
  75. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/sftp.py +0 -0
  76. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/__init__.py +0 -0
  77. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/api_key.py +0 -0
  78. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/assetstore.py +0 -0
  79. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/collection.py +0 -0
  80. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/file.py +0 -0
  81. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/folder.py +0 -0
  82. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/group.py +0 -0
  83. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/item.py +0 -0
  84. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/resource.py +0 -0
  85. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/system.py +0 -0
  86. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/token.py +0 -0
  87. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/user.py +0 -0
  88. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/asgi.py +0 -0
  89. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/__init__.py +0 -0
  90. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/mount.py +0 -0
  91. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/serve.py +0 -0
  92. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/sftpd.py +0 -0
  93. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/shell.py +0 -0
  94. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/constants.py +0 -0
  95. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/events.py +0 -0
  96. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/exceptions.py +0 -0
  97. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/_footer.mako +0 -0
  98. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/_header.mako +0 -0
  99. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/accountApproval.mako +0 -0
  100. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/accountApproved.mako +0 -0
  101. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/emailVerification.mako +0 -0
  102. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/groupInvite.mako +0 -0
  103. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/temporaryAccess.mako +0 -0
  104. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/__init__.py +0 -0
  105. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/api_key.py +0 -0
  106. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/assetstore.py +0 -0
  107. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/collection.py +0 -0
  108. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/file.py +0 -0
  109. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/folder.py +0 -0
  110. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/group.py +0 -0
  111. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/item.py +0 -0
  112. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/model_base.py +0 -0
  113. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/setting.py +0 -0
  114. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/token.py +0 -0
  115. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/user.py +0 -0
  116. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/notification.py +0 -0
  117. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/plugin.py +0 -0
  118. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/settings.py +0 -0
  119. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/tasks.py +0 -0
  120. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/__init__.py +0 -0
  121. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/_cache.py +0 -0
  122. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/_hash_state.py +0 -0
  123. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/abstract_assetstore_adapter.py +0 -0
  124. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/acl_mixin.py +0 -0
  125. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/assetstore_utilities.py +0 -0
  126. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/config.py +0 -0
  127. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/error.mako +0 -0
  128. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/model_importer.py +0 -0
  129. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/path.py +0 -0
  130. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/progress.py +0 -0
  131. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/s3_assetstore_adapter.py +0 -0
  132. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/search.py +0 -0
  133. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/server.py +0 -0
  134. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/setting_utilities.py +0 -0
  135. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/system.py +0 -0
  136. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/webroot.py +0 -0
  137. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/ziputil.py +0 -0
  138. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/.env.development +0 -0
  139. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/.gitignore +0 -0
  140. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/.prettierrc.json +0 -0
  141. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/README.rst +0 -0
  142. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/Girder_Favicon.png +0 -0
  143. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/Girder_Mark.png +0 -0
  144. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-BGLM866c.svg +0 -0
  145. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-BJbUCrYc.eot +0 -0
  146. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-CE5GVTQ4.woff2 +0 -0
  147. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-LRhipy3N.woff +0 -0
  148. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-xrcC4tQR.ttf +0 -0
  149. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-BKjkU69z.woff +0 -0
  150. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-BUJKDMgK.eot +0 -0
  151. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-CSehLiBc.svg +0 -0
  152. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-DrwTMapi.ttf +0 -0
  153. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-DzqM6ju8.woff2 +0 -0
  154. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/index-CzOvG7VM.css +0 -0
  155. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/index-DvhR4xZK.js +0 -0
  156. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/index-DvhR4xZK.js.map +0 -0
  157. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/jsoneditor-icons-CIlYC0TY.svg +0 -0
  158. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300-B6tDWRxp.woff2 +0 -0
  159. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300-DZbNTRe6.woff +0 -0
  160. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300italic-DLsXqxhU.woff2 +0 -0
  161. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300italic-Dfz31Up5.woff +0 -0
  162. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400-D5zbb_EN.woff +0 -0
  163. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400-DLgeRt71.woff2 +0 -0
  164. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400italic-DpGQ6Ktj.woff2 +0 -0
  165. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400italic-UJbezL8h.woff +0 -0
  166. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600-CCvT4JHQ.woff2 +0 -0
  167. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600-DHWfDY-G.woff +0 -0
  168. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600italic-X8kCjSq_.woff +0 -0
  169. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600italic-slqXzGub.woff2 +0 -0
  170. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700-CsbQbrjx.woff2 +0 -0
  171. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700-DNl7WOH5.woff +0 -0
  172. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700italic-BtE7VvhE.woff2 +0 -0
  173. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700italic-hc2P_kZo.woff +0 -0
  174. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800-CbJOM4_m.woff2 +0 -0
  175. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800-XaYTAPrv.woff +0 -0
  176. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800italic-DqvYew-K.woff +0 -0
  177. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800italic-JIGkTxpX.woff2 +0 -0
  178. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/index.html +0 -0
  179. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/auth.js +0 -0
  180. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/constants.js +0 -0
  181. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/dialog.js +0 -0
  182. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/events.js +0 -0
  183. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/index.ts +0 -0
  184. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/main.ts +0 -0
  185. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/misc.js +0 -0
  186. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/pluginUtils.js +0 -0
  187. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/rest.js +0 -0
  188. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/router.js +0 -0
  189. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/routes.js +0 -0
  190. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/version.js +0 -0
  191. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/vite-env.d.ts +0 -0
  192. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/env.d.ts +0 -0
  193. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/playwright.config.ts +0 -0
  194. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/coverage.ts +0 -0
  195. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/playwright-setup.ts +0 -0
  196. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/playwright-teardown.ts +0 -0
  197. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/server.ts +0 -0
  198. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/admin.spec.ts +0 -0
  199. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/browser.spec.ts +0 -0
  200. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/collection.spec.ts +0 -0
  201. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/collectionBaseClass.spec.ts +0 -0
  202. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/customWidgets.spec.ts +0 -0
  203. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/README.md +0 -0
  204. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/nomime.dat +0 -0
  205. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/slicer_cli_web_test.xml +0 -0
  206. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/ten_byte_file.txt +0 -0
  207. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/file_upload.spec.ts +0 -0
  208. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_authorized_upload.spec.ts +0 -0
  209. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_hashsum_download.spec.ts +0 -0
  210. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_homepage.spec.ts +0 -0
  211. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_item_licenses.spec.ts +0 -0
  212. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_readme.spec.ts +0 -0
  213. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_slicer_cli_web.spec.ts +0 -0
  214. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_terms.spec.ts +0 -0
  215. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_thumbnails.spec.ts +0 -0
  216. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_user_quota.spec.ts +0 -0
  217. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/setting_show_download.spec.ts +0 -0
  218. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/util.ts +0 -0
  219. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/worker_plugin.py +0 -0
  220. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/wsgi.py +0 -0
  221. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/SOURCES.txt +0 -0
  222. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/dependency_links.txt +0 -0
  223. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/entry_points.txt +0 -0
  224. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/not-zip-safe +0 -0
  225. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/requires.txt +0 -0
  226. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/top_level.txt +0 -0
  227. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/jsdoc.json +0 -0
  228. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/package-lock.json +0 -0
  229. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/package.json +0 -0
  230. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pyproject.toml +0 -0
  231. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/LICENSE +0 -0
  232. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/MANIFEST.in +0 -0
  233. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pyproject.toml +0 -0
  234. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/__init__.py +0 -0
  235. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/assertions.py +0 -0
  236. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/fixtures.py +0 -0
  237. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/plugin.py +0 -0
  238. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/plugin_registry.py +0 -0
  239. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/utils.py +0 -0
  240. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/web_client.py +0 -0
  241. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/setup.py +0 -0
  242. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/requirements-dev.txt +0 -0
  243. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/README.rst +0 -0
  244. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/migrate.py +0 -0
  245. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/requirements.txt +0 -0
  246. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/walk_girder.py +0 -0
  247. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/walk_midas.py +0 -0
  248. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/publicNames.py +0 -0
  249. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/publicNames.txt +0 -0
  250. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/test_names.sh +0 -0
  251. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/setup.cfg +0 -0
  252. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/setup.py +0 -0
  253. {girder-5.0.19.dev4 → girder-5.0.19.dev8}/tox.ini +0 -0
@@ -37,6 +37,7 @@ ENV NODE_VERSION=22
37
37
  RUN mkdir /.nvm && \
38
38
  curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | NVM_DIR=/.nvm bash && \
39
39
  . /.nvm/nvm.sh && \
40
+ npm install -g npm@latest && \
40
41
  npm config set fetch-timeout 600000 && \
41
42
  npm cache clean --force && \
42
43
  ln -s $(dirname `which npm`) /usr/local/node
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: girder
3
- Version: 5.0.19.dev4
3
+ Version: 5.0.19.dev8
4
4
  Summary: Web-based data management platform
5
5
  Home-page: https://girder.readthedocs.org
6
6
  Author: Kitware, Inc.
@@ -2,6 +2,7 @@ import datetime
2
2
  import io
3
3
  import logging
4
4
 
5
+ import pymongo
5
6
  from bson.objectid import ObjectId
6
7
 
7
8
  from girder import events
@@ -142,11 +143,18 @@ class Upload(Model):
142
143
 
143
144
  assetstore = Assetstore().load(upload['assetstoreId'])
144
145
  adapter = assetstore_utilities.getAssetstoreAdapter(assetstore)
145
-
146
+ startReceived = upload['received']
146
147
  upload = adapter.uploadChunk(upload, chunk, uploadExtraParameters)
147
- if '_id' in upload or upload['received'] != upload['size']:
148
- upload = self.save(upload)
149
-
148
+ if '_id' in upload:
149
+ self.validate(upload)
150
+ update_result = self.collection.find_one_and_update(
151
+ {'_id': upload['_id'], 'received': int(startReceived)},
152
+ {'$set': {k: v for k, v in upload.items() if k != '_id'}},
153
+ return_document=pymongo.ReturnDocument.AFTER)
154
+ if update_result:
155
+ upload.update(update_result)
156
+ else:
157
+ raise GirderException('An upload with this ID was simultaneously modified')
150
158
  # If upload is finished, we finalize it
151
159
  if upload['received'] == upload['size']:
152
160
  file = self.finalizeUpload(upload, assetstore)
@@ -206,8 +206,10 @@ class FilesystemAssetstoreAdapter(AbstractAssetstoreAdapter):
206
206
  try:
207
207
  self.checkUploadSize(upload, size)
208
208
  except ValidationException:
209
+ # Use the actual file size minus what we just wrote to handle
210
+ # concurrent uploads that may have updated upload['received'].
209
211
  with open(upload['tempFile'], 'a+b') as tempFile:
210
- tempFile.truncate(upload['received'])
212
+ tempFile.truncate(os.path.getsize(upload['tempFile']) - size)
211
213
  raise
212
214
 
213
215
  # Persist the internal state of the checksum
@@ -2,6 +2,7 @@ import logging
2
2
  import os
3
3
  import re
4
4
  import smtplib
5
+ import urllib.parse
5
6
  from email.mime.text import MIMEText
6
7
 
7
8
  from mako.lookup import TemplateLookup
@@ -12,6 +13,12 @@ from girder.settings import SettingKey
12
13
 
13
14
  logger = logging.getLogger(__name__)
14
15
 
16
+ # Socket timeout (seconds) for SMTP connections. Without an explicit value smtplib
17
+ # inherits the global socket default, which is normally ``None``, potentially blocking
18
+ # server thread forever if connection is silently dropped in transit.
19
+ # Explicit timeout results in error that we can handle instead
20
+ _SMTP_TIMEOUT = 30
21
+
15
22
 
16
23
  def validateEmailAddress(address):
17
24
  """
@@ -120,20 +127,40 @@ def _createMessage(subject, text, to, bcc):
120
127
  return msg, recipients
121
128
 
122
129
 
130
+ def _localHostname():
131
+ """
132
+ Return the name to announce in the SMTP EHLO, or None to let smtplib choose.
133
+
134
+ Derived from the ``core.email_host`` setting, which already names this instance as
135
+ the outside world sees it. Without one, smtplib falls back to ``socket.getfqdn()``,
136
+ which inside a container typically cannot resolve a real name and yields a bracketed
137
+ address literal leaking the container's private address in every message.
138
+ """
139
+ from girder.models.setting import Setting
140
+
141
+ host = Setting().get(SettingKey.EMAIL_HOST)
142
+ if not host:
143
+ return None
144
+ return urllib.parse.urlparse(host).hostname or None
145
+
146
+
123
147
  class _SMTPConnection:
124
- def __init__(self, host, port=None, encryption=None,
125
- username=None, password=None):
148
+ def __init__(self, host, port=None, encryption=None, username=None, password=None,
149
+ timeout=_SMTP_TIMEOUT, localHostname=None):
126
150
  self.host = host
127
151
  self.port = port
128
152
  self.encryption = encryption
129
153
  self.username = username
130
154
  self.password = password
155
+ self.timeout = timeout
156
+ self.localHostname = localHostname
131
157
 
132
158
  def __enter__(self):
159
+ kwargs = {'local_hostname': self.localHostname, 'timeout': self.timeout}
133
160
  if self.encryption == 'ssl':
134
- self.connection = smtplib.SMTP_SSL(self.host, self.port)
161
+ self.connection = smtplib.SMTP_SSL(self.host, self.port, **kwargs)
135
162
  else:
136
- self.connection = smtplib.SMTP(self.host, self.port)
163
+ self.connection = smtplib.SMTP(self.host, self.port, **kwargs)
137
164
  if self.encryption == 'starttls':
138
165
  self.connection.starttls()
139
166
  if self.username and self.password:
@@ -161,7 +188,8 @@ def _submitEmail(msg, recipients):
161
188
  port=setting.get(SettingKey.SMTP_PORT),
162
189
  encryption=setting.get(SettingKey.SMTP_ENCRYPTION),
163
190
  username=setting.get(SettingKey.SMTP_USERNAME),
164
- password=setting.get(SettingKey.SMTP_PASSWORD)
191
+ password=setting.get(SettingKey.SMTP_PASSWORD),
192
+ localHostname=_localHostname()
165
193
  )
166
194
 
167
195
  logger.info('Sending email to %s through %s', ', '.join(recipients), smtp.host)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: girder
3
- Version: 5.0.19.dev4
3
+ Version: 5.0.19.dev8
4
4
  Summary: Web-based data management platform
5
5
  Home-page: https://girder.readthedocs.org
6
6
  Author: Kitware, Inc.
@@ -1028,6 +1028,7 @@
1028
1028
  "test/test_disable_anonymous_access.py",
1029
1029
  "test/test_events.py",
1030
1030
  "test/test_file.py",
1031
+ "test/test_filesystem_assetstore_rollback.py",
1031
1032
  "test/test_folder.py",
1032
1033
  "test/test_fs_assetstore_import.py",
1033
1034
  "test/test_hash_state.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "5.0.18",
3
+ "distance": 8,
4
+ "node": "g72148a4ea84b2f58af5349cde4cec47ce1a3cb67",
5
+ "dirty": false,
6
+ "branch": "master",
7
+ "node_date": "2026-09-28"
8
+ }
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "5.0.18",
3
- "distance": 4,
4
- "node": "g5ae6d24a256f6ebd6f5b63eba1638dc0ca89575e",
5
- "dirty": false,
6
- "branch": "master",
7
- "node_date": "2026-09-15"
8
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes