aird 0.4.23.dev17__tar.gz → 0.4.23.dev20__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.
- {aird-0.4.23.dev17/aird.egg-info → aird-0.4.23.dev20}/PKG-INFO +2 -1
- aird-0.4.23.dev20/aird/event_loop.py +34 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/main.py +4 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/browse/app.js +0 -1
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/download-manager.js +6 -11
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/file-transfer-ws.js +48 -7
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/transfer-tracker.js +7 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20/aird.egg-info}/PKG-INFO +2 -1
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird.egg-info/SOURCES.txt +1 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird.egg-info/requires.txt +3 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/setup.py +2 -1
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/LICENSE +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/MANIFEST.in +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/README.md +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/__main__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/app_context.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/cli/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/cli/__main__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/cli/authelia.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/cli/config.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/cli/main.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/cli/session.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/cloud/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/config.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/constants/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/constants/admin.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/constants/file_ops.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/constants/input_limits.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/constants/media.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/events.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/file_operations.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/filter_expression.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/folder_size.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/input_validation.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/mmap_handler.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/security.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/share_root.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/websocket_manager.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/core/zip_download.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/database/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/database/db.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/database/feature_flags.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/database/ldap.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/audit.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/config.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/favorites.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/network_shares.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/policies.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/policy_decisions.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/policy_seeds.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/quota.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/resource_tags.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/schema.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/shares.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/user_attributes.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/db/users.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/domain/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/domain/contracts.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/domain/models.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/email/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/email/brevo.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/email/resolve.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/abac_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/admin_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/api_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/auth_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/base_handler.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/constants.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/file_op_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/health_handler.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/p2p_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/share_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/transfer_ws_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/handlers/view_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/network_share_manager.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/server_runtime.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/audit_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/config_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/email_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/email_subscriber.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/event_subscribers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/favorites_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/network_share_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/p2p_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/policy_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/quota_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/share_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/tag_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/services/user_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/sql_identifiers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/css/app.css +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/favicon.png +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/favicon.svg +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/img/logo-icon.png +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/img/logo-mark.svg +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/img/logo-text.png +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/img/logo.png +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/aird-core.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/bg-canvas.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/common/command-palette.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/components/folder-picker.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/feature-flags-live.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/folder-size-scan.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/login-ui.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/media-view.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/p2p/app.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/p2p/mediator.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/p2p/qr-adapter.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/p2p/signaling-service.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/p2p/state-machine.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/p2p/transfer-service.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/pages/p2p-page.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/pages/super-search.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/share/app.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/theme.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/vendor/pdf.min.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/vendor/pdf.worker.min.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/static/js/vendor/qrcode-browser.js +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/_admin_tabs.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/_app_nav_header.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/_bg_canvas.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/_theme_early.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/_theme_login_corner.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_audit.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_ldap.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_login.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_network_shares.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_policies.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_tags.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_user_attributes.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/admin_users.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/browse.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/directory.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/edit.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/error.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/file.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/ldap_config_create.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/ldap_config_edit.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/login.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/media_view.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/p2p_transfer.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/profile.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/share.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/shared_list.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/super_search.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/tagged_files.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/token_verification.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/user_create.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/templates/user_edit.html +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/utils/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird/utils/util.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird.egg-info/dependency_links.txt +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird.egg-info/entry_points.txt +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/aird.egg-info/top_level.txt +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/setup.cfg +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/__init__.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/conftest.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/handler_helpers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_admin_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_api_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_architecture_conformance.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_auth_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_auth_handlers_extended.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_base_handler.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_base_handler_pep.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_cli.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_cloud.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_config.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_core_file_operations.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_database_db.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_database_feature_flags.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_database_ldap.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_database_shares.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_database_users.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_database_users_hashing.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_db.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_email_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_file_op_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_filter_expression.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_folder_size.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_main.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_mmap_handler.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_multi_user.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_network_shares.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_p2p_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_password_hashing.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_policy_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_rate_limit.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_security.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_security_comprehensive.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_server_runtime.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_share_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_share_ownership.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_super_search_handler.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_tag_service.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_transfer_ws_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_util.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_view_handlers.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_websocket_manager.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_wheel_static_assets.py +0 -0
- {aird-0.4.23.dev17 → aird-0.4.23.dev20}/tests/test_zip_download.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aird
|
|
3
|
-
Version: 0.4.23.
|
|
3
|
+
Version: 0.4.23.dev20
|
|
4
4
|
Summary: Aird - A lightweight web-based file browser, editor, and streamer with real-time capabilities
|
|
5
5
|
Home-page: https://github.com/blinkerbit/aird
|
|
6
6
|
Author: Viswantha Srinivas P
|
|
@@ -13,6 +13,7 @@ Requires-Python: >=3.10
|
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: tornado>=6.5.1
|
|
16
|
+
Requires-Dist: uvloop>=0.19.0; sys_platform == "linux"
|
|
16
17
|
Requires-Dist: ldap3>=2.9.1
|
|
17
18
|
Requires-Dist: aiofiles>=23.0.0
|
|
18
19
|
Requires-Dist: argon2-cffi>=23.1.0
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""Optional asyncio event loop tuning (Linux uvloop)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
_uvloop_installed = False
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def install_uvloop_if_linux() -> bool:
|
|
14
|
+
"""Use libuv-backed asyncio on Linux when uvloop is installed."""
|
|
15
|
+
global _uvloop_installed
|
|
16
|
+
if _uvloop_installed:
|
|
17
|
+
return True
|
|
18
|
+
if not sys.platform.startswith("linux"):
|
|
19
|
+
return False
|
|
20
|
+
try:
|
|
21
|
+
import asyncio
|
|
22
|
+
|
|
23
|
+
import uvloop
|
|
24
|
+
|
|
25
|
+
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
|
|
26
|
+
_uvloop_installed = True
|
|
27
|
+
logger.info("Using uvloop event loop (Linux)")
|
|
28
|
+
return True
|
|
29
|
+
except ImportError:
|
|
30
|
+
logger.debug("uvloop not installed; using default asyncio loop")
|
|
31
|
+
return False
|
|
32
|
+
except Exception:
|
|
33
|
+
logger.warning("Failed to enable uvloop; using default asyncio loop", exc_info=True)
|
|
34
|
+
return False
|
|
@@ -278,7 +278,6 @@
|
|
|
278
278
|
const dir = item.uploadDir ?? document.getElementById('currentPath')?.value ?? '';
|
|
279
279
|
const fname = item.uploadName ?? item.file.name;
|
|
280
280
|
item.uploadSignal = { aborted: false };
|
|
281
|
-
const TT = globalThis.AirdTransferTracker;
|
|
282
281
|
const cancelFn = () => abortActiveUploads(item);
|
|
283
282
|
await FTW.uploadFile(item.file, {
|
|
284
283
|
uploadDir: dir,
|
|
@@ -59,19 +59,9 @@
|
|
|
59
59
|
|
|
60
60
|
cancelOne(item) {
|
|
61
61
|
if (!item) return;
|
|
62
|
-
if (item.status === 'downloading'
|
|
62
|
+
if (item.status === 'downloading' || item.status === 'queued') {
|
|
63
63
|
item.cancelSignal.aborted = true;
|
|
64
64
|
item.status = 'cancelled';
|
|
65
|
-
if (item.ttId != null) {
|
|
66
|
-
global.AirdTransferTracker?.failTransfer(item.ttId, 'Cancelled');
|
|
67
|
-
}
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (item.status !== 'queued') return;
|
|
71
|
-
item.status = 'cancelled';
|
|
72
|
-
item.cancelSignal.aborted = true;
|
|
73
|
-
if (item.ttId != null) {
|
|
74
|
-
global.AirdTransferTracker?.failTransfer(item.ttId, 'Cancelled');
|
|
75
65
|
}
|
|
76
66
|
}
|
|
77
67
|
|
|
@@ -103,9 +93,14 @@
|
|
|
103
93
|
if (item.ws && FTW?.downloadFile) {
|
|
104
94
|
item.status = 'downloading';
|
|
105
95
|
item.downloadStart = Date.now();
|
|
96
|
+
const onCancel = () => {
|
|
97
|
+
item.cancelSignal.aborted = true;
|
|
98
|
+
item.status = 'cancelled';
|
|
99
|
+
};
|
|
106
100
|
try {
|
|
107
101
|
const result = await FTW.downloadFile(item.path, {
|
|
108
102
|
signal: item.cancelSignal,
|
|
103
|
+
onCancel: onCancel,
|
|
109
104
|
});
|
|
110
105
|
if (item.cancelSignal?.aborted || this.cancelled) {
|
|
111
106
|
item.status = 'cancelled';
|
|
@@ -155,22 +155,30 @@
|
|
|
155
155
|
|
|
156
156
|
/**
|
|
157
157
|
* @param {string} path relative file path
|
|
158
|
-
* @param {{ onProgress?: (loaded: number, total: number) => void, signal?: { aborted: boolean } }} options
|
|
158
|
+
* @param {{ onProgress?: (loaded: number, total: number) => void, signal?: { aborted: boolean }, onCancel?: Function }} options
|
|
159
159
|
*/
|
|
160
160
|
async function downloadFile(path, options) {
|
|
161
161
|
options = options || {};
|
|
162
162
|
const onProgress = options.onProgress || function () {};
|
|
163
|
-
const signal = options.signal;
|
|
163
|
+
const signal = options.signal || { aborted: false };
|
|
164
164
|
const ws = await openSocket();
|
|
165
165
|
const chunks = [];
|
|
166
166
|
let meta = null;
|
|
167
|
+
let settled = false;
|
|
168
|
+
let abortPoll = null;
|
|
167
169
|
|
|
168
170
|
const TT = global.AirdTransferTracker;
|
|
169
171
|
const fname = path.split('/').pop() || path;
|
|
170
|
-
const ttId = TT
|
|
172
|
+
const ttId = TT
|
|
173
|
+
? TT.addTransfer(fname, 0, 'download', { onCancel: options.onCancel })
|
|
174
|
+
: null;
|
|
171
175
|
|
|
172
176
|
return new Promise((resolve, reject) => {
|
|
173
177
|
function cleanup() {
|
|
178
|
+
if (abortPoll !== null) {
|
|
179
|
+
clearInterval(abortPoll);
|
|
180
|
+
abortPoll = null;
|
|
181
|
+
}
|
|
174
182
|
ws.removeEventListener('message', onMessage);
|
|
175
183
|
try {
|
|
176
184
|
ws.close();
|
|
@@ -179,11 +187,38 @@
|
|
|
179
187
|
}
|
|
180
188
|
}
|
|
181
189
|
|
|
190
|
+
function finishCancel() {
|
|
191
|
+
if (settled) return;
|
|
192
|
+
settled = true;
|
|
193
|
+
signal.aborted = true;
|
|
194
|
+
try {
|
|
195
|
+
ws.send(JSON.stringify({ action: 'cancel' }));
|
|
196
|
+
} catch {
|
|
197
|
+
/* ignore */
|
|
198
|
+
}
|
|
199
|
+
cleanup();
|
|
200
|
+
if (TT && ttId) TT.failTransfer(ttId, 'Cancelled');
|
|
201
|
+
reject(new Error('cancelled'));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (TT && ttId) {
|
|
205
|
+
TT.setCancelHandler(ttId, function () {
|
|
206
|
+
if (typeof options.onCancel === 'function') {
|
|
207
|
+
options.onCancel();
|
|
208
|
+
}
|
|
209
|
+
finishCancel();
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (signal) {
|
|
214
|
+
abortPoll = setInterval(() => {
|
|
215
|
+
if (signal.aborted) finishCancel();
|
|
216
|
+
}, 100);
|
|
217
|
+
}
|
|
218
|
+
|
|
182
219
|
function onMessage(ev) {
|
|
183
|
-
if (signal
|
|
184
|
-
|
|
185
|
-
if (TT && ttId) TT.failTransfer(ttId, 'Cancelled');
|
|
186
|
-
reject(new Error('cancelled'));
|
|
220
|
+
if (signal.aborted) {
|
|
221
|
+
finishCancel();
|
|
187
222
|
return;
|
|
188
223
|
}
|
|
189
224
|
if (typeof ev.data === 'string') {
|
|
@@ -194,6 +229,8 @@
|
|
|
194
229
|
return;
|
|
195
230
|
}
|
|
196
231
|
if (msg.type === 'error') {
|
|
232
|
+
if (settled) return;
|
|
233
|
+
settled = true;
|
|
197
234
|
cleanup();
|
|
198
235
|
if (TT && ttId) TT.failTransfer(ttId, msg.message);
|
|
199
236
|
reject(new Error(msg.message || 'download failed'));
|
|
@@ -205,6 +242,8 @@
|
|
|
205
242
|
return;
|
|
206
243
|
}
|
|
207
244
|
if (msg.type === 'download_end') {
|
|
245
|
+
if (settled) return;
|
|
246
|
+
settled = true;
|
|
208
247
|
cleanup();
|
|
209
248
|
if (TT && ttId) TT.completeTransfer(ttId);
|
|
210
249
|
const blob = new Blob(chunks, {
|
|
@@ -229,6 +268,8 @@
|
|
|
229
268
|
|
|
230
269
|
ws.addEventListener('message', onMessage);
|
|
231
270
|
ws.addEventListener('error', () => {
|
|
271
|
+
if (settled) return;
|
|
272
|
+
settled = true;
|
|
232
273
|
cleanup();
|
|
233
274
|
if (TT && ttId) TT.failTransfer(ttId, 'WebSocket error');
|
|
234
275
|
reject(new Error('WebSocket error'));
|
|
@@ -278,6 +278,12 @@
|
|
|
278
278
|
}, 8000);
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
+
function removeTransfer(id) {
|
|
282
|
+
if (_items.delete(id)) {
|
|
283
|
+
_render();
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
281
287
|
function completeByExternalId(externalId) {
|
|
282
288
|
var id = _findByExternalId(externalId);
|
|
283
289
|
if (id != null) completeTransfer(id);
|
|
@@ -305,6 +311,7 @@
|
|
|
305
311
|
setCancelHandler: setCancelHandler,
|
|
306
312
|
completeTransfer: completeTransfer,
|
|
307
313
|
failTransfer: failTransfer,
|
|
314
|
+
removeTransfer: removeTransfer,
|
|
308
315
|
completeByExternalId: completeByExternalId,
|
|
309
316
|
failByExternalId: failByExternalId,
|
|
310
317
|
updateProgressByExternalId: updateProgressByExternalId,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aird
|
|
3
|
-
Version: 0.4.23.
|
|
3
|
+
Version: 0.4.23.dev20
|
|
4
4
|
Summary: Aird - A lightweight web-based file browser, editor, and streamer with real-time capabilities
|
|
5
5
|
Home-page: https://github.com/blinkerbit/aird
|
|
6
6
|
Author: Viswantha Srinivas P
|
|
@@ -13,6 +13,7 @@ Requires-Python: >=3.10
|
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: tornado>=6.5.1
|
|
16
|
+
Requires-Dist: uvloop>=0.19.0; sys_platform == "linux"
|
|
16
17
|
Requires-Dist: ldap3>=2.9.1
|
|
17
18
|
Requires-Dist: aiofiles>=23.0.0
|
|
18
19
|
Requires-Dist: argon2-cffi>=23.1.0
|
|
@@ -2,6 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
install_requires = [
|
|
4
4
|
"tornado>=6.5.1",
|
|
5
|
+
"uvloop>=0.19.0; sys_platform == 'linux'",
|
|
5
6
|
"ldap3>=2.9.1",
|
|
6
7
|
"aiofiles>=23.0.0",
|
|
7
8
|
"argon2-cffi>=23.1.0",
|
|
@@ -15,7 +16,7 @@ install_requires = [
|
|
|
15
16
|
|
|
16
17
|
setup(
|
|
17
18
|
name="aird",
|
|
18
|
-
version="0.4.23.
|
|
19
|
+
version="0.4.23.dev20",
|
|
19
20
|
packages=find_packages(),
|
|
20
21
|
include_package_data=True,
|
|
21
22
|
package_data={"aird": [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|