ComposioHQ / composio

Composio equip's your AI agents & LLMs with 100+ high-quality integrations via function calling
https://docs.composio.dev
Other
7.47k stars 2.33k forks source link

added exclude none in serialiser #343

Closed sohamganatra closed 1 month ago

sohamganatra commented 1 month ago

PR Type

Bug fix


Description


Changes walkthrough ๐Ÿ“

Relevant files
Bug fix
toolset.py
Exclude `None` values in JSON serialization for models     

python/composio/tools/toolset.py
  • Updated _serialize_execute_params method to exclude None values in
    JSON serialization.
  • Modified model_dump_json and dict methods to use exclude_none=True.
  • +2/-2     

    ๐Ÿ’ก PR-Agent usage: Comment /help on the PR to get a list of all available PR-Agent tools and their descriptions

    ellipsis-dev[bot] commented 1 month ago

    Your free trial has expired. To keep using Ellipsis, sign up at https://app.ellipsis.dev for $20/seat/month or reach us at help@ellipsis.dev

    codiumai-pr-agent-pro[bot] commented 1 month ago

    PR Reviewer Guide ๐Ÿ”

    โฑ๏ธ Estimated effort to review: 2 ๐Ÿ”ต๐Ÿ”ตโšชโšชโšช
    ๐Ÿงช No relevant tests
    ๐Ÿ”’ No security concerns identified
    โšก Key issues to review

    Code Consistency
    The use of `exclude_none=True` has been added to ensure `None` values are not serialized. It's important to verify that this change aligns with all use cases where `_serialize_execute_params` is used, as it might affect the output where `None` values were previously expected.
    codiumai-pr-agent-pro[bot] commented 1 month ago

    PR Code Suggestions โœจ

    CategorySuggestion                                                                                                                                    Score
    Possible issue
    Add exception handling for serialization methods when excluding None values ___ **Consider handling the potential exceptions that might be raised by model_dump_json()
    and dict() methods when exclude_none=True is used. This is especially important if
    the serialization process might encounter data types that do not support exclusion
    of None values directly.** [python/composio/tools/toolset.py [292-295]](https://github.com/ComposioHQ/composio/pull/343/files#diff-89b5c0aec15f01eb54ad26f78731b68f650e438a443378282b436df85abde51dR292-R295) ```diff -return param.model_dump_json(exclude_none=True) # type: ignore -return param.dict(exclude_none=True) # type: ignore +try: + return param.model_dump_json(exclude_none=True) # type: ignore +except Exception as e: + handle_exception(e) +try: + return param.dict(exclude_none=True) # type: ignore +except Exception as e: + handle_exception(e) + ``` - [ ] **Apply this suggestion**
    Suggestion importance[1-10]: 8 Why: The suggestion correctly identifies a potential issue with the `model_dump_json()` and `dict()` methods when `exclude_none=True` is used. Adding exception handling improves the robustness of the code by ensuring that any unexpected errors during serialization are properly managed.
    8
    codiumai-pr-agent-pro[bot] commented 1 month ago

    CI Failure Feedback ๐Ÿง

    (Checks updated until commit https://github.com/ComposioHQ/composio/commit/b43c9ad3c3444ec321d8df9a99c2b7e36768f3fd)

    **Action:** test (ubuntu-latest, 3.10)
    **Failed stage:** [Unittests](https://github.com/ComposioHQ/composio/actions/runs/10007813098/job/27663333613) [โŒ]
    **Failed test name:** test_action_enum
    **Failure summary:** The action failed because the test test_action_enum failed. The test failed due to a ValueError
    being raised in the Action class's __init__ method. The error message indicated that the value
    GITHUB_ISSUES_LIST is not a valid value for the Action enum.
    Relevant error logs: ```yaml 1: ##[group]Operating System 2: Ubuntu ... 506: * [new branch] fix/readme -> origin/fix/readme 507: * [new branch] fix/readme-logo -> origin/fix/readme-logo 508: * [new branch] fix/swe-agent -> origin/fix/swe-agent 509: * [new branch] ft-add-better-help-text -> origin/ft-add-better-help-text 510: * [new branch] ft-apps-id -> origin/ft-apps-id 511: * [new branch] ft-bring-back-core-sdk -> origin/ft-bring-back-core-sdk 512: * [new branch] ft-custom-base-url-js-sdk -> origin/ft-custom-base-url-js-sdk 513: * [new branch] ft-did-you-mean -> origin/ft-did-you-mean 514: * [new branch] ft-error-tracking -> origin/ft-error-tracking ... 929: tests/test_cli/test_actions.py::TestListActions::test_list_all[arguments3-exptected_outputs3-unexptected_outputs3] PASSED [ 17%] 930: tests/test_cli/test_actions.py::TestListActions::test_tag_not_found PASSED [ 19%] 931: tests/test_cli/test_actions.py::TestListActions::test_limit SKIPPED [ 21%] 932: tests/test_cli/test_actions.py::TestListActions::test_copy PASSED [ 23%] 933: tests/test_cli/test_add.py::TestComposioAdd::test_no_auth PASSED [ 25%] 934: tests/test_cli/test_apps.py::TestList::test_list PASSED [ 27%] 935: tests/test_cli/test_apps.py::TestUpdate::test_update_not_required PASSED [ 29%] 936: tests/test_cli/test_apps.py::TestUpdate::test_update SKIPPED (Needs 937: investigation, this test fails in CI) [ 31%] ... 945: tests/test_client/test_client.py::test_raise_invalid_api_key PASSED [ 48%] 946: tests/test_client/test_collections.py::TestTriggerNamesSerialization::test_converts_trigger_objects_to_comma_separated_string PASSED [ 51%] 947: tests/test_client/test_collections.py::TestTriggerNamesSerialization::test_converts_trigger_strings_to_comma_separated_string PASSED [ 53%] 948: tests/test_client/test_collections.py::TestTriggerNamesSerialization::test_converts_mix_of_trigger_objects_and_strings PASSED [ 55%] 949: tests/test_client/test_collections.py::test_trigger_subscription PASSED [ 57%] 950: tests/test_client/test_endpoints.py::test_endpoint PASSED [ 59%] 951: tests/test_client/test_enum.py::test_tag_enum PASSED [ 61%] 952: tests/test_client/test_enum.py::test_app_enum PASSED [ 63%] 953: tests/test_client/test_enum.py::test_action_enum FAILED [ 65%] ... 962: tests/test_tools/test_local/test_workspace.py::test_stderr PASSED [ 85%] 963: tests/test_tools/test_local/test_workspace.py::test_workspace PASSED [ 87%] 964: tests/test_utils/test_decorators.py::test_deprecated PASSED [ 89%] 965: tests/test_utils/test_git.py::test_get_git_user_info PASSED [ 91%] 966: tests/test_utils/test_shared.py::test_get_pydantic_signature_format_from_schema_params PASSED [ 93%] 967: tests/test_utils/test_shared.py::test_json_schema_to_pydantic_field PASSED [ 95%] 968: tests/test_utils/test_shared.py::test_json_schema_to_fields_dict PASSED [ 97%] 969: tests/test_utils/test_url.py::test_get_web_url PASSED [100%] 970: =================================== FAILURES =================================== ... 980: self = 981: value = 'GITHUB_ISSUES_LIST' 982: def __init__(self, value: t.Union[str, te.Self]) -> None: 983: """Create an Enum""" 984: if isinstance(value, _AnnotatedEnum): 985: value = value._slug 986: value = t.cast(str, value).upper() 987: if value not in self.__annotations__ and value not in _runtime_actions: 988: > raise ValueError(f"Invalid value `{value}` for `{self.__class__.__name__}`") 989: E ValueError: Invalid value `GITHUB_ISSUES_LIST` for `Action` 990: composio/client/enums/base.py:112: ValueError 991: =============================== warnings summary =============================== 992: composio/client/http.py:20 993: /home/runner/work/composio/composio/python/composio/client/http.py:20: DeprecationWarning: Inheritance class AsyncHttpClient from ClientSession is discouraged 994: class AsyncHttpClient(AsyncSession, logging.WithLogger): 995: .tox/unittests/lib/python3.10/site-packages/pydantic/_internal/_config.py:291 996: .tox/unittests/lib/python3.10/site-packages/pydantic/_internal/_config.py:291 997: /home/runner/work/composio/composio/python/.tox/unittests/lib/python3.10/site-packages/pydantic/_internal/_config.py:291: PydanticDeprecatedSince20: Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.8/migration/ ... 1187: composio/utils/shared.py 118 84 29% 44, 47-51, 54-58, 61-77, 83, 101-104, 153-158, 174-221, 247-293 1188: composio/utils/url.py 10 1 90% 35 1189: examples/crewai_ci_chart.py 15 15 0% 1-38 1190: -------------------------------------------------------------------------------------------------------------- 1191: TOTAL 9940 2264 77% 1192: Coverage HTML written to dir htmlcov 1193: Coverage XML written to file coverage.xml 1194: =========================== short test summary info ============================ 1195: FAILED tests/test_client/test_enum.py::test_action_enum - ValueError: Invalid value `GITHUB_ISSUES_LIST` for `Action` 1196: ============= 1 failed, 41 passed, 5 skipped, 3 warnings in 40.51s ============= 1197: unittests: exit 1 (41.59 seconds) /home/runner/work/composio/composio/python> pytest -vvv -rfE --doctest-modules composio/ tests/ --cov=composio --cov=examples --cov-report=html --cov-report=xml --cov-report=term --cov-report=term-missing --cov-config=.coveragerc pid=5588 1198: .pkg: _exit> python /opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 1199: unittests: FAIL code 1 (85.34=setup[38.23]+cmd[5.51,41.59] seconds) 1200: evaluation failed :( (85.61 seconds) 1201: ##[error]Process completed with exit code 1. ```

    โœจ CI feedback usage guide:
    The CI feedback tool (`/checks)` automatically triggers when a PR has a failed check. The tool analyzes the failed checks and provides several feedbacks: - Failed stage - Failed test name - Failure summary - Relevant error logs In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR: ``` /checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}" ``` where `{repo_name}` is the name of the repository, `{run_number}` is the run number of the failed check, and `{job_number}` is the job number of the failed check. #### Configuration options - `enable_auto_checks_feedback` - if set to true, the tool will automatically provide feedback when a check is failed. Default is true. - `excluded_checks_list` - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list. - `enable_help_text` - if set to true, the tool will provide a help message with the feedback. Default is true. - `persistent_comment` - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true. - `final_update_message` - if `persistent_comment` is true and updating a previous checks message, the tool will also create a new message: "Persistent checks updated to latest commit". Default is true. See more information about the `checks` tool in the [docs](https://pr-agent-docs.codium.ai/tools/ci_feedback/).