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.
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/Dockerfile +1 -0
- {girder-5.0.19.dev4/girder.egg-info → girder-5.0.19.dev8}/PKG-INFO +1 -1
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/upload.py +12 -4
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/filesystem_assetstore_adapter.py +3 -1
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/mail_utils.py +33 -5
- {girder-5.0.19.dev4 → girder-5.0.19.dev8/girder.egg-info}/PKG-INFO +1 -1
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/scm_file_list.json +1 -0
- girder-5.0.19.dev8/girder.egg-info/scm_version.json +8 -0
- girder-5.0.19.dev4/girder.egg-info/scm_version.json +0 -8
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/build_plugins.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/config.yml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/generatePyEnvChecksum.sh +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/publish_npm.sh +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/publish_pypi.sh +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.circleci/rabbitmq.conf +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.codecov.yml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.dockerignore +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.editorconfig +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.git-blame-ignore-revs +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.github/workflows/codespell.yml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.gitignore +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.pre-commit-config.yaml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/.readthedocs.yml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/CHANGELOG.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/CMakeLists.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/CONTRIBUTING.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/Dockerfile +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/LICENSE +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/MANIFEST.in +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/README.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/README.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/girder_client/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/girder_client/_jsonemitter.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/girder_client/cli.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/pyproject.toml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/clients/python/setup.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docker-compose.yml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/admin-docs.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/api-docs.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/build-docs.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/conf.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/configuration.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/dependencies.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/deployment.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/dev-installation.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/developer-cookbook.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/developer-docs.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/development.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/favicon.ico +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/images/dicom-viewer.png +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/index.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/license.png +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/list_env_settings.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/list_env_settings.yaml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/migration-guide.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/mount.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/plugin-development.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/plugins.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/python-client.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/requirements-docs.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/security.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/sftp.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/static/custom.css +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/user-docs.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/docs/user-guide.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/access.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/api_docs.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/api_main.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/describe.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/docs.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/filter_logging.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/rest.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/sftp.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/api_key.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/assetstore.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/collection.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/file.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/folder.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/group.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/item.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/resource.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/system.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/token.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/api/v1/user.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/asgi.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/mount.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/serve.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/sftpd.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/cli/shell.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/constants.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/events.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/exceptions.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/_footer.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/_header.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/accountApproval.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/accountApproved.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/emailVerification.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/groupInvite.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/mail_templates/temporaryAccess.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/api_key.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/assetstore.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/collection.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/file.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/folder.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/group.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/item.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/model_base.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/setting.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/token.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/models/user.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/notification.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/plugin.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/settings.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/tasks.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/_cache.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/_hash_state.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/abstract_assetstore_adapter.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/acl_mixin.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/assetstore_utilities.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/config.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/error.mako +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/model_importer.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/path.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/progress.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/s3_assetstore_adapter.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/search.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/server.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/setting_utilities.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/system.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/webroot.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/utility/ziputil.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/.env.development +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/.gitignore +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/.prettierrc.json +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/README.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/Girder_Favicon.png +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/Girder_Mark.png +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-BGLM866c.svg +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-BJbUCrYc.eot +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-CE5GVTQ4.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-LRhipy3N.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/fontello-xrcC4tQR.ttf +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-BKjkU69z.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-BUJKDMgK.eot +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-CSehLiBc.svg +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-DrwTMapi.ttf +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/glyphicons-halflings-regular-DzqM6ju8.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/index-CzOvG7VM.css +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/index-DvhR4xZK.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/index-DvhR4xZK.js.map +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/jsoneditor-icons-CIlYC0TY.svg +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300-B6tDWRxp.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300-DZbNTRe6.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300italic-DLsXqxhU.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300italic-Dfz31Up5.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400-D5zbb_EN.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400-DLgeRt71.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400italic-DpGQ6Ktj.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400italic-UJbezL8h.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600-CCvT4JHQ.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600-DHWfDY-G.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600italic-X8kCjSq_.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600italic-slqXzGub.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700-CsbQbrjx.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700-DNl7WOH5.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700italic-BtE7VvhE.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700italic-hc2P_kZo.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800-CbJOM4_m.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800-XaYTAPrv.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800italic-DqvYew-K.woff +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-800italic-JIGkTxpX.woff2 +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/index.html +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/auth.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/constants.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/dialog.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/events.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/index.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/main.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/misc.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/pluginUtils.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/rest.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/router.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/routes.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/version.js +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/src/src/vite-env.d.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/env.d.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/playwright.config.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/coverage.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/playwright-setup.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/playwright-teardown.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/server.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/admin.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/browser.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/collection.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/collectionBaseClass.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/customWidgets.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/README.md +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/nomime.dat +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/slicer_cli_web_test.xml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/data/ten_byte_file.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/file_upload.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_authorized_upload.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_hashsum_download.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_homepage.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_item_licenses.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_readme.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_slicer_cli_web.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_terms.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_thumbnails.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/plugin_user_quota.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/spec/setting_show_download.spec.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/tests/util.ts +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/worker_plugin.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/wsgi.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/SOURCES.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/dependency_links.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/entry_points.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/not-zip-safe +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/requires.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder.egg-info/top_level.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/jsdoc.json +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/package-lock.json +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/package.json +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pyproject.toml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/LICENSE +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/MANIFEST.in +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pyproject.toml +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/__init__.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/assertions.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/fixtures.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/plugin.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/plugin_registry.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/utils.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/pytest_girder/web_client.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/pytest_girder/setup.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/requirements-dev.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/README.rst +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/migrate.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/requirements.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/walk_girder.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/midas/walk_midas.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/publicNames.py +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/publicNames.txt +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/scripts/test_names.sh +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/setup.cfg +0 -0
- {girder-5.0.19.dev4 → girder-5.0.19.dev8}/setup.py +0 -0
- {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
|
|
@@ -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
|
|
148
|
-
|
|
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['
|
|
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
|
-
|
|
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)
|
|
@@ -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",
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/jsoneditor-icons-CIlYC0TY.svg
RENAMED
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300-B6tDWRxp.woff2
RENAMED
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-300-DZbNTRe6.woff
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400-D5zbb_EN.woff
RENAMED
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-400-DLgeRt71.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600-CCvT4JHQ.woff2
RENAMED
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-600-DHWfDY-G.woff
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700-CsbQbrjx.woff2
RENAMED
|
File without changes
|
{girder-5.0.19.dev4 → girder-5.0.19.dev8}/girder/web/dist/assets/open-sans-latin-700-DNl7WOH5.woff
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|