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