hap-cli 0.8.13__tar.gz → 0.8.14__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.13 → hap_cli-0.8.14}/PKG-INFO +1 -1
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/__init__.py +1 -1
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/cli_access.py +36 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/session.py +8 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_cli_access.py +75 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli.egg-info/PKG-INFO +1 -1
- {hap_cli-0.8.13 → hap_cli-0.8.14}/MANIFEST.in +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/README.md +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/app_live_tests/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/app_live_tests/__main__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/app_live_tests/config.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/app_live_tests/harness.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/app_live_tests/smoke.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/app_live_tests/state.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/README.md +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/README_CN.md +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/__main__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/app_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/app_creator_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/app_editor_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/auth_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/calendar_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/chart_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/chat_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/chatbot_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/config_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/contact_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/department_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/group_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/icon_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/instance_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/node_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/optionset_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/page_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/post_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/record_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/region_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/role_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/update_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/upload_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/v3_registry.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/workflow_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/commands/worksheet_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/context.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/action_spec_adapter.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/_hapmeta/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/_hapmeta/control_type_codes.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/_hapmeta/worksheet_templates.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/charts.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/cleanup.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/compiler.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/config.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/design/design.schema.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/errors.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/examples/minimal.design.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/executor.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/fields.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/hap.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/merge.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/console.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/jsonl.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/mirror.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/report.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/schema.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/INSTRUCTIONS.md +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/executor.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/attachments.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/sample.docx +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/sample.pdf +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/sample_images.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/template.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/selftest.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/smoke.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/steps.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/store.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/validate.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/app_creator/workflow_dsl.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/auth.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/calendar_mod.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/chart.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/chat.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/chatbot.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/contact.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/control_type_codes.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/department.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/_hapmeta/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/_hapmeta/control_type_codes.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/apply.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/componentlower.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/editspec.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/errors.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/fieldlower.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/jsonschema_mini.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/models.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/ops.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/planner.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/editor/reader.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/field_normalizer.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/field_spec_adapter.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/filter_translator.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/flow_node.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/global_meta.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/group.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/icon_index.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/instance.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/logger.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/optionset.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/page.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/post.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/record.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/response_crypto.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/role.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/role_perm_builder.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/token_crypto.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/update.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/upload.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/v3/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/v3/dispatcher.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/v3/render.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/v3/schema.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/view_spec_adapter.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/workflow.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/workflow_node_dsl.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/worksheet.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/core/worksheet_templates.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/hap_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/i18n.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/locale/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/locale/messages.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/locale/messages.schema.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/conftest.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_app_creator.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_app_editor.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_app_export_usage.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_auth_prerelease.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_bug_036430.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_chart.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_config_cmd.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_core.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_destructive_confirm_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_full_e2e.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_global_meta.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_i18n.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_instance_history_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_approval.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_approval_actions.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_calendar.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_destructive.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_misc.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_post.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_social.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_v3.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_workflow.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_integration_worksheet_extra.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_multi_profile.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_org_approval_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_org_id_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_org_id_docs.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_parameter_conventions.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_parameter_mapping_registry.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_record_batch_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_record_field_alias.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_record_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_semantic_types_registry.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_update.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_v3_api_schema_loader.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_v3_dispatcher.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_v3_registry_coverage.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_v3_session.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_v3_yaml_translation.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_workflow_list_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_workflow_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_worksheet_crud_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/tests/test_worksheet_v3_semantic_cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/utils/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/utils/formatting.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/utils/options.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli/utils/parameter_mapping.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli.egg-info/SOURCES.txt +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli.egg-info/dependency_links.txt +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli.egg-info/entry_points.txt +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli.egg-info/requires.txt +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/hap_cli.egg-info/top_level.txt +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/__main__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/_wftest.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/charts.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/cleanup.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/compiler.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/config.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/errors.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/executor.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/fields.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/hap.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/recording/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/recording/console.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/recording/jsonl.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/recording/mirror.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/recording/report.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/schema.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/seed/__init__.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/seed/cli.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/seed/executor.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/seed/template.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/selftest.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/smoke.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/step.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/steps.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/store.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/live_tests/workflow_dsl.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/setup.cfg +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/setup.py +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/component.schema.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/custom-action.schema.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/envelope.schema.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/field.schema.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/INDEX.json +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/add_member_to_role.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/batch_delete_records.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/create_optionset.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/create_role.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/delete_optionset.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/delete_record.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/delete_role.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/delete_worksheet.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_app_info.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_app_knowledge_list.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_app_worksheets_list.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_optionset_list.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_details.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_discussions.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_list.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_logs.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_pivot_data.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_relations.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_share_link.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_regions.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_role_details.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/get_role_list.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/knowledge_search.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/leave_all_roles.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/remove_member_from_role.yaml +0 -0
- {hap_cli-0.8.13 → hap_cli-0.8.14}/sources/v3-api-schema/update_optionset.yaml +0 -0
|
@@ -127,6 +127,42 @@ def _record(key: str, result: str, now: float) -> None:
|
|
|
127
127
|
_memo[key] = now + _ttl_for(result)
|
|
128
128
|
|
|
129
129
|
|
|
130
|
+
def clear_cache(profile: str | None = None) -> None:
|
|
131
|
+
"""Drop cached access verdicts so the next request re-checks live.
|
|
132
|
+
|
|
133
|
+
Called on logout: a previously cached "allowed" verdict must not
|
|
134
|
+
outlive the credentials it was granted under. Without that, logging
|
|
135
|
+
out and back in would keep running commands off the stale verdict
|
|
136
|
+
even after the org's CLI switch was turned off — the user would
|
|
137
|
+
expect the gate to re-evaluate on the fresh login.
|
|
138
|
+
|
|
139
|
+
With ``profile`` given, only that profile's entries (keys
|
|
140
|
+
``"<profile>|<orgId>"``) are removed; with ``None``, every entry is
|
|
141
|
+
cleared. Both the in-process memo and the on-disk state file are
|
|
142
|
+
updated.
|
|
143
|
+
"""
|
|
144
|
+
if profile is None:
|
|
145
|
+
_memo.clear()
|
|
146
|
+
try:
|
|
147
|
+
save_state({})
|
|
148
|
+
except Exception as e:
|
|
149
|
+
logger.warning("failed to clear cli-access cache: %s", e)
|
|
150
|
+
return
|
|
151
|
+
|
|
152
|
+
prefix = f"{profile}|"
|
|
153
|
+
for key in [k for k in _memo if k.startswith(prefix)]:
|
|
154
|
+
_memo.pop(key, None)
|
|
155
|
+
state = load_state()
|
|
156
|
+
remaining = {k: v for k, v in state.items() if not k.startswith(prefix)}
|
|
157
|
+
if remaining != state:
|
|
158
|
+
try:
|
|
159
|
+
save_state(remaining)
|
|
160
|
+
except Exception as e:
|
|
161
|
+
logger.warning(
|
|
162
|
+
"failed to clear cli-access cache for profile %s: %s", profile, e
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
|
|
130
166
|
# Sentinel distinguishing "endpoint not deployed in this environment"
|
|
131
167
|
# from other no-verdict outcomes (network error, unexpected payload).
|
|
132
168
|
# 404 is environment-wide, not per-org, so batch callers can stop
|
|
@@ -1145,6 +1145,14 @@ def delete_profile(name: str) -> None:
|
|
|
1145
1145
|
doc["profiles"] = profiles
|
|
1146
1146
|
_write_config(doc)
|
|
1147
1147
|
|
|
1148
|
+
# Logging out must drop any cached CLI-access verdict for this
|
|
1149
|
+
# profile: a stale "allowed" must not let commands keep running after
|
|
1150
|
+
# the org may have turned its CLI switch off. Imported lazily to
|
|
1151
|
+
# avoid a module-load cycle (cli_access imports this module).
|
|
1152
|
+
from hap_cli.core import cli_access
|
|
1153
|
+
|
|
1154
|
+
cli_access.clear_cache(name)
|
|
1155
|
+
|
|
1148
1156
|
|
|
1149
1157
|
def resolve_profile_name(cli_opt: Optional[str] = None) -> str:
|
|
1150
1158
|
"""Resolve which profile to act on: --profile > $HAP_PROFILE > active."""
|
|
@@ -661,3 +661,78 @@ class TestAnnotateOrgs404ShortCircuit:
|
|
|
661
661
|
s = self._session()
|
|
662
662
|
with patch("requests.get", return_value=_resp({}, status=404)):
|
|
663
663
|
assert cli_access.probe_cli_access_with_session(s, "org-1") is None
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
# ── clear_cache (logout must drop cached verdicts) ───────────────────────
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
class TestClearCache:
|
|
670
|
+
def test_clear_one_profile_only(self):
|
|
671
|
+
cli_access.save_state(
|
|
672
|
+
{
|
|
673
|
+
"prod|org-1": {"checked_at": time.time(), "result": "allowed"},
|
|
674
|
+
"prod|org-2": {"checked_at": time.time(), "result": "pass_404"},
|
|
675
|
+
"sandbox|org-9": {"checked_at": time.time(), "result": "allowed"},
|
|
676
|
+
}
|
|
677
|
+
)
|
|
678
|
+
cli_access._memo.update(
|
|
679
|
+
{
|
|
680
|
+
"prod|org-1": time.time() + 999,
|
|
681
|
+
"sandbox|org-9": time.time() + 999,
|
|
682
|
+
}
|
|
683
|
+
)
|
|
684
|
+
cli_access.clear_cache("prod")
|
|
685
|
+
state = _state()
|
|
686
|
+
assert "prod|org-1" not in state
|
|
687
|
+
assert "prod|org-2" not in state
|
|
688
|
+
assert "sandbox|org-9" in state # untouched
|
|
689
|
+
assert "prod|org-1" not in cli_access._memo
|
|
690
|
+
assert "sandbox|org-9" in cli_access._memo
|
|
691
|
+
|
|
692
|
+
def test_clear_does_not_match_prefix_siblings(self):
|
|
693
|
+
# "prod" must not wipe "prod2"'s entries.
|
|
694
|
+
cli_access.save_state(
|
|
695
|
+
{
|
|
696
|
+
"prod|org-1": {"checked_at": time.time(), "result": "allowed"},
|
|
697
|
+
"prod2|org-1": {"checked_at": time.time(), "result": "allowed"},
|
|
698
|
+
}
|
|
699
|
+
)
|
|
700
|
+
cli_access.clear_cache("prod")
|
|
701
|
+
state = _state()
|
|
702
|
+
assert "prod|org-1" not in state
|
|
703
|
+
assert "prod2|org-1" in state
|
|
704
|
+
|
|
705
|
+
def test_clear_all(self):
|
|
706
|
+
cli_access.save_state(
|
|
707
|
+
{
|
|
708
|
+
"prod|org-1": {"checked_at": time.time(), "result": "allowed"},
|
|
709
|
+
"sandbox|org-9": {"checked_at": time.time(), "result": "allowed"},
|
|
710
|
+
}
|
|
711
|
+
)
|
|
712
|
+
cli_access._memo["prod|org-1"] = time.time() + 999
|
|
713
|
+
cli_access.clear_cache()
|
|
714
|
+
assert _state() == {}
|
|
715
|
+
assert cli_access._memo == {}
|
|
716
|
+
|
|
717
|
+
def test_clear_missing_profile_is_noop(self):
|
|
718
|
+
cli_access.save_state(
|
|
719
|
+
{"prod|org-1": {"checked_at": time.time(), "result": "allowed"}}
|
|
720
|
+
)
|
|
721
|
+
cli_access.clear_cache("ghost") # no such profile -> no error
|
|
722
|
+
assert "prod|org-1" in _state()
|
|
723
|
+
|
|
724
|
+
def test_logout_clears_cached_verdict(self, org_session):
|
|
725
|
+
# End to end: an allowed verdict is cached, then logging out the
|
|
726
|
+
# profile drops it so a fresh login re-probes (and can now be
|
|
727
|
+
# denied if the org's CLI switch was turned off meanwhile).
|
|
728
|
+
from hap_cli.core.session import delete_profile, save_profile
|
|
729
|
+
|
|
730
|
+
save_profile("prod", {"login_url": "https://www.mingdao.com"})
|
|
731
|
+
with patch("requests.get", return_value=_resp(_status_payload(True))) as mock_get:
|
|
732
|
+
ensure_cli_access(org_session)
|
|
733
|
+
assert mock_get.call_count == 1
|
|
734
|
+
assert "prod|org-1" in _state()
|
|
735
|
+
|
|
736
|
+
delete_profile("prod")
|
|
737
|
+
assert "prod|org-1" not in _state()
|
|
738
|
+
assert "prod|org-1" not in cli_access._memo
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.13 → hap_cli-0.8.14}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.13 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/field.schema.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
|