示例#1
0
 def test_should_parse_redis_update_instance(self, mock_docstring_parser):
     mock_docstring_parser.parse_docstring.return_value = (
         self.parse_docstring_return_value)
     target_fn = CloudRedisClient.list_instances
     result = cloud_client_parser.parse_action_method(
         "update_instance", target_fn)
     mock_docstring_parser.parse_docstring.assert_called_once_with(
         "DOCSTRING")
     self.assertEqual(
         ActionInfo(
             name="update_instance",
             desc=["TEXT1"],
             args={
                 "parent":
                 ParameterInfo(
                     name="parent",
                     kind=TypeBrick(kind="str", indexes=[]),
                     desc=["TEXT2"],
                 ),
                 "instance_id":
                 ParameterInfo(
                     name="instance_id",
                     kind=TypeBrick(kind="str", indexes=[]),
                     desc=["TEXT3"],
                 ),
             },
             return_kind=None,
             return_desc=[
                 "A :class:`~google.cloud.redis_v1.types._OperationFuture` instance."
             ],
         ),
         result,
     )
 def test_should_look_at_method_and_action_args(self, mock_generate_constant_list):
     hook_method_blocks = [
         MethodBlock(
             name="NAME",
             desc=None,
             args={"arg": ParameterBlock("arg")},
             return_kind=None,
             return_desc=None,
             code_blocks=[],
             decorator_blocks=[],
         )
     ]
     action_infos = [
         ActionInfo(
             name="NAME2",
             desc=[],
             args={"arg2": ParameterInfo("arg2", kind=None, desc=[])},
             return_kind=None,
             return_desc=None,
         )
     ]
     result = hook_test_generator.generate_constants(
         hook_method_blocks, action_infos
     )
     mock_generate_constant_list.assert_called_once_with({"arg": None, "arg2": None})
     self.assertEqual("CONSTANTS", result)
示例#3
0
    def test_should_convert_with_not_matching_path_info(self):
        parameter = ParameterInfo(
            name="parent",
            kind=TypeBrick(kind="str", indexes=[]),
            desc=[
                "Required. The resource name of the instance location using the form: "
                "``projects/{project_id}/locations/{location_id}`` where "
                "``locati`` refers to a GCP region"
            ],
        )
        path_infos = {
            "location":
            PathInfo(name="location", args=["not_project", "not_location"])
        }
        integration = Integration(
            service_name="SERVICE_NAME",
            class_prefix="CLASS_PREFIX",
            file_prefix="FILE_PREFFIX",
            client_path="CLOENT_PATH",
        )
        req_params, opt_params, code = hook_generator.convert_path_parameter_block_to_individual_parameters(
            parameter, path_infos=path_infos, integration=integration)

        self.assertEqual(
            {
                "location":
                ParameterBlock(
                    name="location",
                    kind=TypeBrick(kind="str", indexes=[]),
                    desc=["TODO: Fill description"],
                    default_value=None,
                )
            },
            req_params,
        )
        self.assertEqual(
            {
                "project_id":
                ParameterBlock(
                    name="project_id",
                    kind=TypeBrick(kind="str", indexes=[]),
                    desc=["TODO: Fill description"],
                    default_value="None",
                )
            },
            opt_params,
        )
        self.assertEqual(
            CodeBlock(
                template_name="call_path.py.tpl",
                template_params={
                    "var_name": "parent",
                    "fn_name": "TODO",
                    "args": ["project_id", "location"],
                    "client": TypeBrick(kind="CLOENT_PATH", indexes=[]),
                },
            ),
            code,
        )
示例#4
0
 def _create_action_info(prefix: str):
     return ActionInfo(
         name=f"{prefix}NAME",
         desc=[f"{prefix}DESC_A", f"{prefix}DESC_B"],
         args={
             f"{prefix}ARG_A":
             ParameterInfo(
                 name=f"{prefix}ARG_A",
                 kind=TypeBrick("str"),
                 desc=[f"{prefix}DESC_C", f"{prefix}DESC_D"],
             )
         },
         return_kind=TypeBrick("float"),
         return_desc=[f"{prefix}DESC_E", f"{prefix}DESC_F"],
     )
示例#5
0
def parse_action_method(name: str, method: Callable) -> ActionInfo:
    docstring = method.__doc__
    if docstring is None:
        docstring = "None # TODO: Fill missing value"

    doc_sections = docstring_parser.parse_docstring(docstring)
    desc: Optional[List[str]] = None
    args: Dict[str, ParameterInfo] = {}
    return_kind: Optional[TypeBrick] = None
    return_desc: Optional[List[str]] = None
    for i, section in enumerate(doc_sections):
        if i == 0 and section.kind == "Text":
            assert isinstance(section.body, list)
            desc = section.body  # type: ignore
        elif section.kind.lower() in ("args", "arguments", "parameters"):
            for arg in section.body:
                assert isinstance(arg, FieldBrick)
                args[arg.name] = ParameterInfo(name=arg.name,
                                               kind=arg.type_brick,
                                               desc=arg.desc[0].body)
        elif section.kind.lower() in ("return", "returns"):
            assert isinstance(section.body, list)
            assert len(section.body) == 1
            assert isinstance(section.body[0], FieldBrick)
            field: FieldBrick = section.body[0]
            return_kind = field.type_brick
            return_desc = field.desc[0].body
        else:
            raise Exception(f"Unknown section: {section.kind}")

    assert desc is not None

    return ActionInfo(
        name=name,
        desc=desc,
        args=args,
        return_kind=return_kind,
        return_desc=return_desc,
    )
示例#6
0
 def test_generate_method_block(
         self, mock_convert_path_parameter_block_to_individual_parameters):
     action_info = ActionInfo(
         name="NAME",
         desc=["DESC_A", "DESC_B"],
         args={
             "ARG_A":
             ParameterInfo(name="ARG_A",
                           kind=TypeBrick("str"),
                           desc=["DESC_C", "DESC_D"])
         },
         return_kind=TypeBrick("float"),
         return_desc=["DESC_E", "DESC_F"],
     )
     integration = Integration(
         service_name="SERVICE_NAME",
         class_prefix="CLASS_PREFIX",
         file_prefix="FILE_PREFFIX",
         client_path="CLOENT_PATH",
     )
     method_block = hook_generator.generate_method_block(
         action_info, path_infos="PATH_INFOS", integration=integration)
     self.assertEqual(
         MethodBlock(
             name="NAME",
             desc=["DESC_A", "DESC_B"],
             args={
                 "ARG_A":
                 ParameterBlock(
                     name="ARG_A",
                     kind=TypeBrick(kind="str", indexes=[]),
                     desc=["DESC_C", "DESC_D"],
                     default_value=None,
                 )
             },
             return_kind=TypeBrick(kind="float", indexes=[]),
             return_desc=["DESC_E", "DESC_F"],
             code_blocks=[
                 CodeBlock(
                     template_name="method_call.py.tpl",
                     template_params={
                         "var_name": "client",
                         "target": "self.get_conn",
                         "call_params": {},
                     },
                 ),
                 CodeBlock(
                     template_name="method_call.py.tpl",
                     template_params={
                         "target": "client.NAME",
                         "var_name": "result",
                         "call_params": {
                             "ARG_A": "ARG_A"
                         },
                     },
                 ),
                 CodeBlock(
                     template_name="return.py.tpl",
                     template_params={"var_name": "result"},
                 ),
             ],
             decorator_blocks=[],
         ),
         method_block,
     )