hap-cli 0.8.29__tar.gz → 0.8.30__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.
- {hap_cli-0.8.29 → hap_cli-0.8.30}/PKG-INFO +1 -1
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/__init__.py +1 -1
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/executor.py +6 -12
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/upload.py +25 -1
- hap_cli-0.8.30/hap_cli/tests/test_upload_allow_down.py +118 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli.egg-info/PKG-INFO +1 -1
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli.egg-info/SOURCES.txt +1 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/MANIFEST.in +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/README.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/app_live_tests/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/app_live_tests/__main__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/app_live_tests/config.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/app_live_tests/harness.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/app_live_tests/smoke.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/app_live_tests/state.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/README.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/README_CN.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/__main__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/app_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/app_creator_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/app_editor_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/attachment_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/auth_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/calendar_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/chart_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/chat_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/chatbot_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/config_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/contact_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/department_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/group_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/guide_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/icon_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/instance_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/node_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/optionset_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/page_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/post_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/record_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/region_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/role_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/update_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/upload_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/v3_registry.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/workflow_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/commands/worksheet_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/context.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/action_spec_adapter.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/_hapmeta/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/_hapmeta/control_type_codes.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/_hapmeta/worksheet_templates.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/charts.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/cleanup.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/compiler.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/config.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/design/design.schema.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/errors.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/examples/minimal.design.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/executor.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/fields.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/hap.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/merge.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/recording/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/recording/console.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/recording/jsonl.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/recording/mirror.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/recording/report.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/schema.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/INSTRUCTIONS.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/resources/attachments.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/resources/sample.docx +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/resources/sample.pdf +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/resources/sample_images.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/template.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/selftest.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/smoke.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/steps.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/store.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/validate.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/workflow_dsl.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/attachment.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/auth.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/calendar_mod.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/chart.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/chat.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/chatbot.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/cli_access.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/contact.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/control_type_codes.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/department.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/_hapmeta/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/_hapmeta/control_type_codes.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/apply.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/componentlower.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/editspec/component.schema.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/editspec/custom-action.schema.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/editspec/envelope.schema.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/editspec/field.schema.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/editspec.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/errors.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/fieldlower.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/jsonschema_mini.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/models.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/ops.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/planner.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/editor/reader.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/field_normalizer.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/field_spec_adapter.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/filter_translator.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/flow_node.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/global_meta.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/group.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/guide.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/icon_index.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/instance.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/logger.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/optionset.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/page.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/post.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/record.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/response_crypto.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/role.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/role_perm_builder.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/session.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/token_crypto.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/update.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/v3/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/v3/dispatcher.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/v3/render.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/v3/schema.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/view_spec_adapter.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/workflow.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/workflow_node_dsl.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/worksheet.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/worksheet_templates.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/approval.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/chart.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/messages.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/overview.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/post.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/record.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/setup.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/en/skills.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/index.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/approval.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/chart.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/messages.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/overview.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/post.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/record.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/setup.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/guide/zh-Hans/skills.md +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/hap_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/i18n.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/locale/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/locale/messages.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/locale/messages.schema.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/conftest.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_app_creator.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_app_editor.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_app_export_usage.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_approval_submit_fill_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_attachment_share.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_auth_prerelease.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_bug_036430.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_bug_036750.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_chart.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_chat_attachment_send.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_chat_recall_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_cli_access.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_config_cmd.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_content_language.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_control_lookup_guard.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_core.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_destructive_confirm_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_full_e2e.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_global_meta.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_guide.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_i18n.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_instance_history_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_approval.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_approval_actions.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_calendar.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_destructive.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_misc.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_post.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_social.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_v3.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_workflow.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_integration_worksheet_extra.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_member_relation_array_wrap.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_multi_profile.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_no_workflow_unsupported.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_org_approval_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_org_id_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_org_id_docs.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_parameter_conventions.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_parameter_mapping_registry.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_post_scope_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_record_batch_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_record_field_alias.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_record_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_record_write_fixes.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_select_add_option.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_select_rejects_relation_value.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_semantic_types_registry.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_update.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_update_mode.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_upload_host_resolution.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_v3_api_schema_loader.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_v3_dispatcher.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_v3_registry_coverage.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_v3_session.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_v3_yaml_translation.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_workflow_envelope_errors.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_workflow_list_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_workflow_read_write_keys.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_workflow_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_worksheet_create_section.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_worksheet_crud_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_worksheet_switch.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/tests/test_worksheet_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/utils/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/utils/formatting.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/utils/options.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/utils/parameter_mapping.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli.egg-info/dependency_links.txt +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli.egg-info/entry_points.txt +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli.egg-info/requires.txt +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli.egg-info/top_level.txt +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/__main__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/_wftest.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/charts.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/cleanup.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/compiler.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/config.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/errors.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/executor.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/fields.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/hap.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/recording/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/recording/console.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/recording/jsonl.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/recording/mirror.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/recording/report.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/schema.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/seed/__init__.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/seed/cli.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/seed/executor.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/seed/template.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/selftest.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/smoke.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/step.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/steps.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/store.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/live_tests/workflow_dsl.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/setup.cfg +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/setup.py +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/INDEX.json +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/add_member_to_role.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/batch_delete_records.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/create_optionset.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/create_role.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/delete_optionset.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/delete_record.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/delete_role.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/delete_worksheet.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_app_info.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_app_knowledge_list.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_app_worksheets_list.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_optionset_list.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_record_details.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_record_discussions.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_record_list.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_record_logs.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_record_pivot_data.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_record_relations.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_record_share_link.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_regions.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_role_details.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/get_role_list.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/knowledge_search.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/leave_all_roles.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/remove_member_from_role.yaml +0 -0
- {hap_cli-0.8.29 → hap_cli-0.8.30}/sources/v3-api-schema/update_optionset.yaml +0 -0
|
@@ -141,18 +141,12 @@ class _Resolver:
|
|
|
141
141
|
|
|
142
142
|
def _record_attachment_cell(descriptors: list[dict[str, Any]]) -> dict[str, Any]:
|
|
143
143
|
"""Wrap general uploaded-file descriptors into a worksheet Attachment
|
|
144
|
-
(type 14) cell value
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
"fileName": d.get("fileName"), "fileExt": d.get("fileExt"),
|
|
151
|
-
"originalFileName": d.get("originalFileName"), "key": d.get("key"),
|
|
152
|
-
"url": d.get("url"), "oldOriginalFileName": d.get("originalFileName"),
|
|
153
|
-
"index": i, "isEdit": False,
|
|
154
|
-
})
|
|
155
|
-
return {"attachmentData": [], "attachments": attachments, "knowledgeAtts": []}
|
|
144
|
+
(type 14) cell value. Delegates to the core wrapper so the seeded rows
|
|
145
|
+
carry exactly what any other CLI upload does — the local copy this
|
|
146
|
+
replaced silently dropped each file's download permission."""
|
|
147
|
+
from hap_cli.core.upload import record_attachment_cell
|
|
148
|
+
|
|
149
|
+
return record_attachment_cell(descriptors)
|
|
156
150
|
|
|
157
151
|
|
|
158
152
|
def _upload_row_attachments(
|
|
@@ -209,6 +209,23 @@ def _iso(deadline: Optional[int]) -> Optional[str]:
|
|
|
209
209
|
return datetime.fromtimestamp(deadline, tz=timezone.utc).astimezone().isoformat()
|
|
210
210
|
|
|
211
211
|
|
|
212
|
+
def _download_permission(ext: str) -> dict[str, Any]:
|
|
213
|
+
"""The per-file download permission the holder of the file is sent.
|
|
214
|
+
|
|
215
|
+
Whoever stores an attachment decides, per file, whether anyone but
|
|
216
|
+
the uploader may download it — an omitted flag used to read as "no",
|
|
217
|
+
so a file attached by the CLI answered 权限不足 for every colleague.
|
|
218
|
+
pd-openweb sets it in ``formatResponseData``
|
|
219
|
+
(src/components/UploadFiles/utils.js:202-206): non-pictures get
|
|
220
|
+
``allowDown: true`` plus an empty ``docVersionID``, pictures get
|
|
221
|
+
neither because the viewer already treats a picture as downloadable
|
|
222
|
+
(UploadFiles/File.js:724). Mirrored verbatim, empty dict included.
|
|
223
|
+
"""
|
|
224
|
+
if ext.lower() in _PICTURE_EXTS:
|
|
225
|
+
return {}
|
|
226
|
+
return {"allowDown": True, "docVersionID": ""}
|
|
227
|
+
|
|
228
|
+
|
|
212
229
|
def upload_bytes(
|
|
213
230
|
session: Session,
|
|
214
231
|
*,
|
|
@@ -239,7 +256,7 @@ def upload_bytes(
|
|
|
239
256
|
up = _post_to_store(upload_host(session), token, content,
|
|
240
257
|
original_name=original, ext=ext,
|
|
241
258
|
server_name=server_name)
|
|
242
|
-
|
|
259
|
+
descriptor = {
|
|
243
260
|
"fileID": generate_file_oid(),
|
|
244
261
|
"fileSize": len(content),
|
|
245
262
|
"etag": up.get("etag"),
|
|
@@ -256,6 +273,8 @@ def upload_bytes(
|
|
|
256
273
|
# (public-bucket) address, which does not expire.
|
|
257
274
|
"urlExpiresAt": _iso(url_expires_at(token.get("url"))),
|
|
258
275
|
}
|
|
276
|
+
descriptor.update(_download_permission(ext))
|
|
277
|
+
return descriptor
|
|
259
278
|
|
|
260
279
|
|
|
261
280
|
def source_descriptors(sources: "list[str] | tuple[str, ...]") -> list[dict[str, str]]:
|
|
@@ -324,4 +343,9 @@ def record_attachment_cell(descriptors: list[dict[str, Any]]) -> dict[str, Any]:
|
|
|
324
343
|
"index": i,
|
|
325
344
|
"isEdit": False,
|
|
326
345
|
})
|
|
346
|
+
# Carried, not recomputed: the descriptor already decided this at
|
|
347
|
+
# upload time — see _download_permission().
|
|
348
|
+
for key in ("allowDown", "docVersionID"):
|
|
349
|
+
if key in d:
|
|
350
|
+
attachments[-1][key] = d[key]
|
|
327
351
|
return {"attachmentData": [], "attachments": attachments, "knowledgeAtts": []}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Uploaded files must carry their download permission.
|
|
2
|
+
|
|
3
|
+
Reported as "日程/讨论里别人上传的文件下载不了": a colleague opening a file
|
|
4
|
+
attached through the CLI got *您权限不足,无法下载,请联系管理员或文件上传者*,
|
|
5
|
+
while the same file attached from the web UI downloaded fine.
|
|
6
|
+
|
|
7
|
+
The file store does not decide this — the *client* does, per file, when
|
|
8
|
+
it hands the upload result to whatever will hold it. pd-openweb does it
|
|
9
|
+
in ``formatResponseData`` (src/components/UploadFiles/utils.js:202-206):
|
|
10
|
+
every non-picture upload gets ``allowDown: true`` and an empty
|
|
11
|
+
``docVersionID``; pictures are left alone because the viewer treats them
|
|
12
|
+
as downloadable anyway (UploadFiles/File.js:724). Every attachment
|
|
13
|
+
payload the frontend sends — record comments, record attachment cells —
|
|
14
|
+
is that same object, stringified.
|
|
15
|
+
|
|
16
|
+
The CLI's uploaded-file descriptor never had the field, so anything it
|
|
17
|
+
attached was stored with the permission unset and only the uploader
|
|
18
|
+
could get the bytes back.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import json
|
|
22
|
+
from unittest.mock import MagicMock, patch
|
|
23
|
+
|
|
24
|
+
import pytest
|
|
25
|
+
|
|
26
|
+
from hap_cli.core import record as rec_mod
|
|
27
|
+
from hap_cli.core import upload as up_mod
|
|
28
|
+
from hap_cli.core.session import Session
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@pytest.fixture
|
|
32
|
+
def session():
|
|
33
|
+
return Session(server_url="https://test.mingdao.com", auth_token="tok123")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class _store:
|
|
37
|
+
"""Stand in for the credential + store round trip of an upload."""
|
|
38
|
+
|
|
39
|
+
def __init__(self, ext=".pdf"):
|
|
40
|
+
self.ext = ext
|
|
41
|
+
|
|
42
|
+
def __enter__(self):
|
|
43
|
+
token = {"uptoken": "t", "key": f"doc/20260909/k{self.ext}",
|
|
44
|
+
"serverName": "https://doc.mingdao.com/",
|
|
45
|
+
"fileName": f"k{self.ext}",
|
|
46
|
+
"url": f"https://doc.mingdao.com/doc/k{self.ext}"}
|
|
47
|
+
self._patches = [
|
|
48
|
+
patch.object(up_mod, "get_upload_token", return_value=token),
|
|
49
|
+
patch.object(up_mod, "upload_host",
|
|
50
|
+
return_value="https://upload.qiniup.com/"),
|
|
51
|
+
patch.object(up_mod, "_post_to_store", return_value={
|
|
52
|
+
"key": f"doc/20260909/k{self.ext}", "etag": "e",
|
|
53
|
+
"bucket": "mdoc", "filePath": "doc/20260909/", "fileName": "k",
|
|
54
|
+
"fileExt": self.ext, "originalFileName": "spec",
|
|
55
|
+
}),
|
|
56
|
+
]
|
|
57
|
+
for p in self._patches:
|
|
58
|
+
p.start()
|
|
59
|
+
return self
|
|
60
|
+
|
|
61
|
+
def __exit__(self, *exc):
|
|
62
|
+
for p in self._patches:
|
|
63
|
+
p.stop()
|
|
64
|
+
return False
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class TestDescriptorCarriesDownloadPermission:
|
|
68
|
+
|
|
69
|
+
def test_document_upload_is_downloadable(self, session):
|
|
70
|
+
with _store(".pdf"):
|
|
71
|
+
d = up_mod.upload_bytes(session, content=b"x", name="spec.pdf")
|
|
72
|
+
assert d["allowDown"] is True
|
|
73
|
+
assert d["docVersionID"] == ""
|
|
74
|
+
|
|
75
|
+
def test_archive_upload_is_downloadable(self, session):
|
|
76
|
+
# The reported file was a 13 MB .zip attached to a calendar comment.
|
|
77
|
+
with _store(".zip"):
|
|
78
|
+
d = up_mod.upload_bytes(session, content=b"x", name="proto.zip")
|
|
79
|
+
assert d["allowDown"] is True
|
|
80
|
+
|
|
81
|
+
def test_picture_upload_leaves_the_field_alone(self, session):
|
|
82
|
+
# Mirrors formatResponseData: pictures get neither field.
|
|
83
|
+
with _store(".png"):
|
|
84
|
+
d = up_mod.upload_bytes(session, content=b"x", name="cover.png")
|
|
85
|
+
assert "allowDown" not in d
|
|
86
|
+
assert "docVersionID" not in d
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class TestConsumersKeepThePermission:
|
|
90
|
+
|
|
91
|
+
_META = {"md.global": {"APPInfo": {"worksheetRowAppID": "row-app-id"}}}
|
|
92
|
+
|
|
93
|
+
def test_record_comment_attachment_keeps_it(self):
|
|
94
|
+
session = MagicMock()
|
|
95
|
+
session.get_global_meta.return_value = self._META
|
|
96
|
+
session.api_call.return_value = {"code": 1, "data": {"discussionId": "d1"}}
|
|
97
|
+
rec_mod.add_discussion(
|
|
98
|
+
session, "ws1", "row1", "here you go", app_id="app1",
|
|
99
|
+
attachments=[{"fileID": "o_1", "fileExt": ".zip", "allowDown": True,
|
|
100
|
+
"docVersionID": ""}],
|
|
101
|
+
)
|
|
102
|
+
_, _, payload = session.api_call.call_args[0][:3]
|
|
103
|
+
assert json.loads(payload["attachments"])[0]["allowDown"] is True
|
|
104
|
+
|
|
105
|
+
def test_attachment_cell_keeps_it(self):
|
|
106
|
+
cell = up_mod.record_attachment_cell([
|
|
107
|
+
{"fileID": "o_1", "fileExt": ".zip", "originalFileName": "proto",
|
|
108
|
+
"allowDown": True, "docVersionID": ""},
|
|
109
|
+
])
|
|
110
|
+
assert cell["attachments"][0]["allowDown"] is True
|
|
111
|
+
assert cell["attachments"][0]["docVersionID"] == ""
|
|
112
|
+
|
|
113
|
+
def test_attachment_cell_leaves_a_picture_alone(self):
|
|
114
|
+
cell = up_mod.record_attachment_cell([
|
|
115
|
+
{"fileID": "o_2", "fileExt": ".png", "originalFileName": "cover"},
|
|
116
|
+
])
|
|
117
|
+
assert "allowDown" not in cell["attachments"][0]
|
|
118
|
+
assert "docVersionID" not in cell["attachments"][0]
|
|
@@ -218,6 +218,7 @@ hap_cli/tests/test_select_rejects_relation_value.py
|
|
|
218
218
|
hap_cli/tests/test_semantic_types_registry.py
|
|
219
219
|
hap_cli/tests/test_update.py
|
|
220
220
|
hap_cli/tests/test_update_mode.py
|
|
221
|
+
hap_cli/tests/test_upload_allow_down.py
|
|
221
222
|
hap_cli/tests/test_upload_host_resolution.py
|
|
222
223
|
hap_cli/tests/test_v3_api_schema_loader.py
|
|
223
224
|
hap_cli/tests/test_v3_dispatcher.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hap_cli-0.8.29 → hap_cli-0.8.30}/hap_cli/core/app_creator/seed/resources/sample_images.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|