girder 5.0.21.dev6__tar.gz → 5.0.22.dev2__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.21.dev6/girder.egg-info → girder-5.0.22.dev2}/PKG-INFO +1 -1
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/filesystem_assetstore_adapter.py +53 -27
- girder-5.0.21.dev6/girder/web/dist/assets/fontello-CMxI46LA.eot → girder-5.0.22.dev2/girder/web/dist/assets/fontello-B_1bq6Kd.eot +0 -0
- girder-5.0.22.dev2/girder/web/dist/assets/fontello-CpEujeXd.woff2 +0 -0
- girder-5.0.21.dev6/girder/web/dist/assets/fontello-KuItqCW9.ttf → girder-5.0.22.dev2/girder/web/dist/assets/fontello-Or0MeVYv.ttf +0 -0
- girder-5.0.21.dev6/girder/web/dist/assets/fontello-_lT35XxX.woff → girder-5.0.22.dev2/girder/web/dist/assets/fontello-aW2lAE4M.woff +0 -0
- girder-5.0.21.dev6/girder/web/dist/assets/index-C3KtNRrl.js → girder-5.0.22.dev2/girder/web/dist/assets/index-CmeGcPPd.js +27 -27
- girder-5.0.21.dev6/girder/web/dist/assets/index-C3KtNRrl.js.map → girder-5.0.22.dev2/girder/web/dist/assets/index-CmeGcPPd.js.map +1 -1
- girder-5.0.21.dev6/girder/web/dist/assets/index-DFhDyJFH.css → girder-5.0.22.dev2/girder/web/dist/assets/index-DHydYdLA.css +1 -1
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/index.html +2 -2
- {girder-5.0.21.dev6 → girder-5.0.22.dev2/girder.egg-info}/PKG-INFO +1 -1
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder.egg-info/SOURCES.txt +7 -7
- girder-5.0.22.dev2/girder.egg-info/scm_version.json +8 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/package-lock.json +47 -46
- girder-5.0.21.dev6/girder/web/dist/assets/fontello-Ddaw8Z2O.woff2 +0 -0
- girder-5.0.21.dev6/girder.egg-info/scm_version.json +0 -8
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.circleci/Dockerfile +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.circleci/build_plugins.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.circleci/config.yml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.circleci/generatePyEnvChecksum.sh +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.circleci/publish_npm.sh +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.circleci/publish_pypi.sh +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.circleci/rabbitmq.conf +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.codecov.yml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.dockerignore +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.editorconfig +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.git-blame-ignore-revs +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.github/workflows/codespell.yml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.gitignore +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.pre-commit-config.yaml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/.readthedocs.yml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/CHANGELOG.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/CMakeLists.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/CONTRIBUTING.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/Dockerfile +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/LICENSE +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/MANIFEST.in +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/README.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/clients/python/README.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/clients/python/girder_client/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/clients/python/girder_client/_jsonemitter.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/clients/python/girder_client/cli.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/clients/python/pyproject.toml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/clients/python/setup.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docker-compose.yml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/admin-docs.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/api-docs.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/build-docs.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/conf.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/configuration.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/dependencies.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/deployment.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/dev-installation.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/developer-cookbook.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/developer-docs.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/development.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/favicon.ico +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/images/dicom-viewer.png +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/index.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/license.png +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/list_env_settings.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/list_env_settings.yaml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/migration-guide.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/mount.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/plugin-development.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/plugins.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/python-client.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/requirements-docs.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/security.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/sftp.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/static/custom.css +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/user-docs.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/docs/user-guide.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/access.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/api_docs.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/api_main.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/describe.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/docs.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/filter_logging.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/rest.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/sftp.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/api_key.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/assetstore.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/collection.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/file.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/folder.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/group.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/item.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/resource.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/system.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/token.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/api/v1/user.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/asgi.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/cli/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/cli/mount.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/cli/serve.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/cli/sftpd.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/cli/shell.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/constants.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/events.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/exceptions.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/mail_templates/_footer.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/mail_templates/_header.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/mail_templates/accountApproval.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/mail_templates/accountApproved.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/mail_templates/emailVerification.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/mail_templates/groupInvite.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/mail_templates/temporaryAccess.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/api_key.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/assetstore.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/collection.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/file.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/folder.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/group.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/item.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/model_base.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/setting.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/token.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/upload.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/models/user.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/notification.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/plugin.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/settings.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/tasks.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/_cache.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/_hash_state.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/abstract_assetstore_adapter.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/acl_mixin.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/assetstore_utilities.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/config.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/error.mako +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/mail_utils.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/model_importer.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/path.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/progress.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/s3_assetstore_adapter.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/search.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/server.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/setting_utilities.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/system.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/webroot.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/utility/ziputil.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/.env.development +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/.gitignore +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/.prettierrc.json +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/README.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/Girder_Favicon.png +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/Girder_Mark.png +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/fontello-BGLM866c.svg +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/glyphicons-halflings-regular-BKjkU69z.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/glyphicons-halflings-regular-BUJKDMgK.eot +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/glyphicons-halflings-regular-CSehLiBc.svg +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/glyphicons-halflings-regular-DrwTMapi.ttf +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/glyphicons-halflings-regular-DzqM6ju8.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/jsoneditor-icons-CIlYC0TY.svg +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-300-B6tDWRxp.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-300-DZbNTRe6.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-300italic-DLsXqxhU.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-300italic-Dfz31Up5.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-400-D5zbb_EN.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-400-DLgeRt71.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-400italic-DpGQ6Ktj.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-400italic-UJbezL8h.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-600-CCvT4JHQ.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-600-DHWfDY-G.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-600italic-X8kCjSq_.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-600italic-slqXzGub.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-700-CsbQbrjx.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-700-DNl7WOH5.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-700italic-BtE7VvhE.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-700italic-hc2P_kZo.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-800-CbJOM4_m.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-800-XaYTAPrv.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-800italic-DqvYew-K.woff +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/assets/open-sans-latin-800italic-JIGkTxpX.woff2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/auth.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/constants.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/dialog.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/events.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/index.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/main.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/misc.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/pluginUtils.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/rest.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/router.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/routes.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/version.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/src/src/vite-env.d.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/swagger-ui/swagger-ui-bundle.js +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/dist/swagger-ui/swagger-ui.css +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/env.d.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/playwright.config.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/coverage.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/playwright-setup.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/playwright-teardown.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/server.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/admin.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/browser.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/collection.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/collectionBaseClass.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/customWidgets.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/README.md +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/fake.jpg +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/nomime.dat +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/slicer_cli_web_multiple_test.xml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/slicer_cli_web_test.xml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/ten_byte_file.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/testFile.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data/testFile2 +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/data.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/emptyLayout.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/file_upload.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/folder.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/group.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/item.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/model.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_authorized_upload.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_autojoin.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_hashsum_download.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_homepage.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_item_licenses.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_jobs.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_readme.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_config_view.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_container_view.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_item_selector.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_panel_group.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_parser.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_task.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_widget_model.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_slicer_cli_web_widget_view.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_terms.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_thumbnails.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/plugin_user_quota.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/routing.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/setApi.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/setting_show_download.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/sortWidget.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/swagger.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/user.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/utilities.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/version.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/spec/widgets.spec.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/web/tests/util.ts +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/worker_plugin.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder/wsgi.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder.egg-info/dependency_links.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder.egg-info/entry_points.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder.egg-info/not-zip-safe +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder.egg-info/requires.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder.egg-info/scm_file_list.json +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/girder.egg-info/top_level.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/jsdoc.json +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/package.json +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pyproject.toml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/LICENSE +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/MANIFEST.in +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pyproject.toml +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pytest_girder/__init__.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pytest_girder/assertions.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pytest_girder/fixtures.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pytest_girder/plugin.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pytest_girder/plugin_registry.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pytest_girder/utils.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/pytest_girder/web_client.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/pytest_girder/setup.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/requirements-dev.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/midas/README.rst +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/midas/migrate.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/midas/requirements.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/midas/walk_girder.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/midas/walk_midas.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/publicNames.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/publicNames.txt +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/scripts/test_names.sh +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/setup.cfg +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/setup.py +0 -0
- {girder-5.0.21.dev6 → girder-5.0.22.dev2}/tox.ini +0 -0
|
@@ -180,43 +180,67 @@ class FilesystemAssetstoreAdapter(AbstractAssetstoreAdapter):
|
|
|
180
180
|
# Restore the internal state of the streaming SHA-512 checksum
|
|
181
181
|
checksum = _hash_state.restoreHex(upload['sha512state'], 'sha512')
|
|
182
182
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
183
|
+
# Hold a lock on the temp file while the chunk is written, validated,
|
|
184
|
+
# and (if invalid) rolled back. Without this, a concurrent request
|
|
185
|
+
# for the same upload could append its bytes after ours before we
|
|
186
|
+
# reject and truncate, so the rollback would remove the wrong data
|
|
187
|
+
# and leave the rejected bytes in the middle of the file.
|
|
188
|
+
with filelock.FileLock(self._tempLockPath(upload)):
|
|
189
|
+
start = self.requestOffset(upload)
|
|
190
|
+
if start > upload['received']:
|
|
191
|
+
# This probably means the server died midway through writing
|
|
192
|
+
# last chunk to disk, and the database record was not
|
|
193
|
+
# updated. This means we need to update the sha512 state
|
|
194
|
+
# with the difference.
|
|
195
|
+
with open(upload['tempFile'], 'rb') as tempFile:
|
|
196
|
+
tempFile.seek(upload['received'])
|
|
197
|
+
while True:
|
|
198
|
+
data = tempFile.read(BUF_SIZE)
|
|
199
|
+
if not data:
|
|
200
|
+
break
|
|
201
|
+
checksum.update(data)
|
|
202
|
+
|
|
203
|
+
with open(upload['tempFile'], 'a+b') as tempFile:
|
|
204
|
+
size = 0
|
|
205
|
+
while not upload['received'] + size > upload['size']:
|
|
206
|
+
data = chunk.read(BUF_SIZE)
|
|
191
207
|
if not data:
|
|
192
208
|
break
|
|
209
|
+
size += len(data)
|
|
210
|
+
tempFile.write(data)
|
|
193
211
|
checksum.update(data)
|
|
212
|
+
chunk.close()
|
|
194
213
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
chunk.close()
|
|
205
|
-
|
|
206
|
-
try:
|
|
207
|
-
self.checkUploadSize(upload, size)
|
|
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'].
|
|
211
|
-
with open(upload['tempFile'], 'a+b') as tempFile:
|
|
212
|
-
tempFile.truncate(os.path.getsize(upload['tempFile']) - size)
|
|
213
|
-
raise
|
|
214
|
+
try:
|
|
215
|
+
self.checkUploadSize(upload, size)
|
|
216
|
+
except ValidationException:
|
|
217
|
+
# Roll back to where the file ended before this chunk was
|
|
218
|
+
# written; nothing else can have appended while we hold the
|
|
219
|
+
# lock.
|
|
220
|
+
with open(upload['tempFile'], 'a+b') as tempFile:
|
|
221
|
+
tempFile.truncate(start)
|
|
222
|
+
raise
|
|
214
223
|
|
|
215
224
|
# Persist the internal state of the checksum
|
|
216
225
|
upload['sha512state'] = _hash_state.serializeHex(checksum)
|
|
217
226
|
upload['received'] += size
|
|
218
227
|
return upload
|
|
219
228
|
|
|
229
|
+
def _tempLockPath(self, upload):
|
|
230
|
+
"""
|
|
231
|
+
Returns the path of the lock file guarding an upload's temp file.
|
|
232
|
+
"""
|
|
233
|
+
return upload['tempFile'] + '.lock'
|
|
234
|
+
|
|
235
|
+
def _removeTempLock(self, upload):
|
|
236
|
+
"""
|
|
237
|
+
Removes the lock file guarding an upload's temp file, if present.
|
|
238
|
+
"""
|
|
239
|
+
try:
|
|
240
|
+
os.unlink(self._tempLockPath(upload))
|
|
241
|
+
except OSError:
|
|
242
|
+
pass
|
|
243
|
+
|
|
220
244
|
def requestOffset(self, upload):
|
|
221
245
|
"""
|
|
222
246
|
Returns the size of the temp file.
|
|
@@ -260,6 +284,7 @@ class FilesystemAssetstoreAdapter(AbstractAssetstoreAdapter):
|
|
|
260
284
|
except OSError:
|
|
261
285
|
# some filesystems may not support POSIX permissions
|
|
262
286
|
pass
|
|
287
|
+
self._removeTempLock(upload)
|
|
263
288
|
|
|
264
289
|
file['sha512'] = hash
|
|
265
290
|
file['path'] = path
|
|
@@ -348,6 +373,7 @@ class FilesystemAssetstoreAdapter(AbstractAssetstoreAdapter):
|
|
|
348
373
|
"""
|
|
349
374
|
if os.path.exists(upload['tempFile']):
|
|
350
375
|
os.unlink(upload['tempFile'])
|
|
376
|
+
self._removeTempLock(upload)
|
|
351
377
|
|
|
352
378
|
def importFile(self, item, path, user, name=None, mimeType=None, **kwargs):
|
|
353
379
|
"""
|
|
Binary file
|
|
Binary file
|
|
Binary file
|