示例#1
0
    def _resolve(self, arg, assembler):
        """Return the resolved *arg*.

        :param arg:
           represents an argument (positional or keyword) to
           :attr:`factory`
        :param aglyph.assembly.Assembler assembler:
           the assembler that will be used to resolve *arg*
        :return:
           the resolved argument value that will actually be passed to
           :attr:`factory`

        """
        if isinstance(arg, Reference):
            return assembler.assemble(arg)
        elif isinstance(arg, Evaluator):
            return arg(assembler)
        elif isinstance(arg, partial):
            return arg()
        elif isinstance(arg, dict):
            # either keys or values may themselves be References, partials, or
            # Evaluators
            resolve = self._resolve
            return dict(
                [(resolve(key, assembler), resolve(value, assembler))
                    for (key, value) in arg.items()])
        elif hasattr(arg, "__iter__") and not is_string(arg):
            resolve = self._resolve
            # assumption: the iterable class supports initialization with
            # __init__(iterable)
            return arg.__class__([resolve(value, assembler) for value in arg])
        else:
            return arg
示例#2
0
def _identify(spec):
    """Determine the unique ID for *spec*.

    :arg spec:
       an **importable** class, function, or module; or a :obj:`str`
    :return:
       *spec* unchanged (if it is a :obj:`str`), else *spec*'s
       importable dotted name
    :rtype:
       :obj:`str`

    If *spec* is a string, it is assumed to already represent a unique
    ID and is returned unchanged. Otherwise, *spec* is assumed to be an
    **importable** class, function, or module, and its dotted name is
    returned (see :func:`format_dotted_name`).

    """
    return spec if is_string(spec) else format_dotted_name(spec)
示例#3
0
文件: __init__.py 项目: mzipay/Aglyph
def _identify(spec):
    """Determine the unique ID for *spec*.

    :arg spec:
       an **importable** class, function, or module; or a :obj:`str`
    :return:
       *spec* unchanged (if it is a :obj:`str`), else *spec*'s
       importable dotted name
    :rtype:
       :obj:`str`

    If *spec* is a string, it is assumed to already represent a unique
    ID and is returned unchanged. Otherwise, *spec* is assumed to be an
    **importable** class, function, or module, and its dotted name is
    returned (see :func:`format_dotted_name`).

    """
    return spec if is_string(spec) else format_dotted_name(spec)
示例#4
0
 def test_none_is_not_string(self):
     self.assertFalse(is_string(None))
示例#5
0
 def test_literal_string_is_string_type(self):
     # this is redundant w/r/t one of the previous two tests, depending on
     # the runtime Python version
     self.assertTrue(is_string(""))
示例#6
0
 def test_data_type_is_string_type(self):
     self.assertTrue(is_string(DataType()))
示例#7
0
 def test_user_class(self):
     ref = Reference(dummy.ModuleClass)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test.dummy.ModuleClass", ref)
示例#8
0
 def test_builtin_function(self):
     ref = Reference(hex)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("%s.hex" % hex.__module__, ref)
示例#9
0
 def test_user_function(self):
     ref = Reference(dummy.factory_function)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test.dummy.factory_function", ref)
示例#10
0
 def test_none_is_not_string(self):
     self.assertFalse(is_string(None))
示例#11
0
 def test_data_type_is_string_type(self):
     self.assertTrue(is_string(DataType()))
示例#12
0
 def test_literal_string_is_string_type(self):
     # this is redundant w/r/t one of the previous two tests, depending on
     # the runtime Python version
     self.assertTrue(is_string(""))
示例#13
0
 def test_text_type_is_string_type(self):
     self.assertTrue(is_string(TextType()))
示例#14
0
 def test_module(self):
     ref = Reference(dummy)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test.dummy", ref)
示例#15
0
 def test_builtin_function(self):
     ref = Reference(hex)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("%s.hex" % hex.__module__, ref)
示例#16
0
 def test_number_is_not_string(self):
     self.assertFalse(is_string(79))
示例#17
0
 def test_string(self):
     ref = Reference("test-component-id")
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test-component-id", ref)
示例#18
0
 def test_reference_is_string(self):
     self.assertTrue(is_string(Reference("test")))
示例#19
0
 def test_builtin_class(self):
     ref = Reference(float)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("%s.float" % float.__module__, ref)
示例#20
0
 def test_number_is_not_string(self):
     self.assertFalse(is_string(79))
示例#21
0
 def test_builtin_class(self):
     ref = Reference(float)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("%s.float" % float.__module__, ref)
示例#22
0
 def test_user_class(self):
     ref = Reference(dummy.ModuleClass)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test.dummy.ModuleClass", ref)
示例#23
0
 def test_reference_is_string(self):
     self.assertTrue(is_string(Reference("test")))
示例#24
0
 def test_user_function(self):
     ref = Reference(dummy.factory_function)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test.dummy.factory_function", ref)
示例#25
0
 def test_text_type_is_string_type(self):
     self.assertTrue(is_string(TextType()))
示例#26
0
 def test_module(self):
     ref = Reference(dummy)
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test.dummy", ref)
示例#27
0
 def test_string(self):
     ref = Reference("test-component-id")
     self.assertTrue(isinstance(ref, Reference))
     self.assertTrue(is_string(ref))
     self.assertEqual("test-component-id", ref)