def test_introspect_operation(self): # noinspection PyUnusedLocal def f(a: str, b: int = None, c: float = 1, d='A') -> float: """ The doc. :param a: the a str :param b: the b int :param c: the c float :param d: the d 'A' :return: a float """ op_meta_info = OpMetaInfo.introspect_operation(f) self.assertEqual(op_meta_info.qualified_name, object_to_qualified_name(f)) self.assertEqual(op_meta_info.header, dict(description='The doc.')) self.assertEqual(len(op_meta_info.inputs), 4) self.assertEqual(len(op_meta_info.outputs), 1) self.assertIn('a', op_meta_info.inputs) self.assertIn('b', op_meta_info.inputs) self.assertIn('c', op_meta_info.inputs) self.assertIn('d', op_meta_info.inputs) self.assertIn(RETURN, op_meta_info.outputs) self.assertEqual(op_meta_info.inputs['a'], dict(position=0, data_type=str, description='the a str')) self.assertEqual(op_meta_info.inputs['b'], dict(position=1, data_type=int, nullable=True, default_value=None, description='the b int')) self.assertEqual(op_meta_info.inputs['c'], dict(position=2, data_type=float, default_value=1, description='the c float')) self.assertEqual(op_meta_info.inputs['d'], dict(position=3, data_type=str, default_value='A', description="the d 'A'")) self.assertEqual(op_meta_info.outputs[RETURN], dict(data_type=float, description='a float')) self.assertEqual(op_meta_info.has_monitor, False) self.assertEqual(op_meta_info.has_named_outputs, False) self.assertEqual(op_meta_info.can_cache, True)
def test_introspect_operation_with_monitor(self): # noinspection PyUnusedLocal def g(x: float, monitor: Monitor) -> float: """The doc.""" op_meta_info = OpMetaInfo.introspect_operation(g) self.assertEqual(op_meta_info.qualified_name, object_to_qualified_name(g)) self.assertEqual(op_meta_info.header, dict(description='The doc.')) self.assertEqual(len(op_meta_info.inputs), 1) self.assertEqual(len(op_meta_info.outputs), 1) self.assertIn('x', op_meta_info.inputs) self.assertNotIn(MONITOR, op_meta_info.inputs) self.assertIn(RETURN, op_meta_info.outputs) self.assertEqual(op_meta_info.inputs['x'], dict(data_type=float, position=0)) self.assertEqual(op_meta_info.outputs[RETURN], dict(data_type=float)) self.assertEqual(op_meta_info.has_monitor, True) self.assertEqual(op_meta_info.has_named_outputs, False)